From 36dd7bfc03e89a7c2a7a585c52a254b0ead6312c Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Fri, 2 Feb 2024 08:58:38 +0000 Subject: [PATCH] Built from commit '7557811' --- .nojekyll | 0 404.html | 13 + assets/css/styles.f9d5607e.css | 1 + ...cling-8cbf643933baa1262460838cc4b483ae.png | Bin 0 -> 44134 bytes ...pling-1618c246583304921e59eced813219f2.png | Bin 0 -> 237031 bytes ..._line-98e32f3b0d5332a371ec4bb2dbc66da8.png | Bin 0 -> 43526 bytes ...speed-91a2c845dc627195fee373c1c63d952d.PNG | Bin 0 -> 47269 bytes ...oking-e0ac6b7a8379c76a8f29199d7aa9086c.png | Bin 0 -> 45513 bytes ...ssure-c971bb4cd1ee2f4d1cd9827d6231364c.png | Bin 0 -> 157773 bytes ...rview-26f2e87a69f9a685f123b818e6bed313.png | Bin 0 -> 38869 bytes ...ation-9c9342f8d3a926d760096a17ccb76556.svg | 4330 +++++++++++++++++ ...chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png | Bin 0 -> 43536 bytes ..._plot-d4eee4126032e046bf374ef66ceb9946.png | Bin 0 -> 16617 bytes ..._plot-527cac79a8c53527147492b170308459.png | Bin 0 -> 14318 bytes ...essor-3493b127c832898d93b5231594efa8d3.png | Bin 0 -> 69926 bytes ...chart-28c5f110972461aba840e82b0962c3d2.png | Bin 0 -> 66545 bytes ...reams-415751902a6078520845f70740eaa1af.png | Bin 0 -> 59154 bytes ...t_eff-136e9a9dd1af0700084ddf17be0d4453.PNG | Bin 0 -> 12910 bytes ..._head-ec0fc7f624752c8c95bd7c3f828090a3.PNG | Bin 0 -> 14284 bytes ...arity-3e43516a1e0246a2e125d4980006b137.png | Bin 0 -> 19396 bytes ...y_pfd-ad59578d69ea3d3267f646b9d8141822.jpg | Bin 0 -> 1261426 bytes ...oking-dc5aedeb280843ea22445ce83731b8dc.png | Bin 0 -> 46036 bytes ...ample-5b8c9832693a18b6500cf408c0b4873b.png | Bin 0 -> 150701 bytes assets/js/00440000.31a1325e.js | 1 + assets/js/00bdc23f.84c5401c.js | 1 + assets/js/0425b884.39bfc638.js | 1 + assets/js/0477162f.e0c22ff2.js | 1 + assets/js/06adec10.9980026a.js | 1 + assets/js/06dd1efa.7c149191.js | 1 + assets/js/0745e7f0.c743d298.js | 1 + assets/js/074935d7.2591b66d.js | 1 + assets/js/07b341f3.56724c70.js | 1 + assets/js/084f7ebf.fbfeb6c7.js | 1 + assets/js/0aeda122.d9b45105.js | 1 + assets/js/0f7b5825.b7b38229.js | 1 + assets/js/0fd76486.9d4cbe95.js | 1 + assets/js/10c684b0.55745dfa.js | 1 + assets/js/11516e85.71cc9aa4.js | 1 + assets/js/1287dd43.e17ad200.js | 1 + assets/js/1300feb7.1e8c5801.js | 1 + assets/js/14eb3368.5672d2a5.js | 1 + assets/js/15962da1.f6006d5c.js | 1 + assets/js/163041ea.dbd3285c.js | 1 + assets/js/1772.61b36e2a.js | 1 + assets/js/17896441.bec7cf3d.js | 1 + assets/js/17e50ecd.ebbf2f8c.js | 1 + assets/js/18b0ec42.fda20e54.js | 1 + assets/js/1a4e3797.81b3ccb7.js | 1 + assets/js/1c663d3d.8a9a9e25.js | 1 + assets/js/1df93b7f.8c894b14.js | 1 + assets/js/1e7de7fe.c4a8e353.js | 1 + assets/js/1f60d0d4.870364a2.js | 1 + assets/js/1f7805b6.03fcb1fa.js | 1 + assets/js/22f0e129.aaea21cc.js | 1 + assets/js/2781f0ad.52ab570d.js | 1 + assets/js/29367e59.11dc59ec.js | 1 + assets/js/295f424e.6a44f23f.js | 1 + assets/js/29d00dd8.3e3bc7f1.js | 1 + assets/js/2b15d891.3bb3344d.js | 1 + assets/js/2b2be347.20f2acd0.js | 1 + assets/js/2c19a041.c111a5f0.js | 1 + assets/js/2c73e373.897a2d57.js | 1 + assets/js/2ce3b5da.7103e5f5.js | 1 + assets/js/2cedaf2f.77a54e69.js | 1 + assets/js/2df92a48.5f0f22e6.js | 1 + assets/js/2f04f592.bf49cec0.js | 1 + assets/js/3261da49.279e9591.js | 1 + assets/js/33498b04.0fa0d93a.js | 1 + assets/js/3409ab5c.1a5df7d3.js | 1 + assets/js/3720c009.462e617c.js | 1 + assets/js/3810e8e5.450a30d2.js | 1 + assets/js/382d59b5.177e6432.js | 1 + assets/js/38d592cf.b53c36f3.js | 1 + assets/js/3aeef25a.c9e431e8.js | 1 + assets/js/3b0e82f8.c1b09a81.js | 1 + assets/js/3e38e310.366f25a9.js | 1 + assets/js/3fbb770c.54126050.js | 1 + assets/js/40d6382c.0f0252a9.js | 1 + assets/js/4147f87e.5e3a7fec.js | 1 + assets/js/41d1792a.f1d4fa7e.js | 1 + assets/js/428320b6.0ed894e1.js | 1 + assets/js/43a1031a.18b5a55b.js | 1 + assets/js/43a26e71.efb35fa2.js | 1 + assets/js/45c974ba.dd19411b.js | 1 + assets/js/47daf389.1c4ae3c9.js | 1 + assets/js/496ed8d5.479344d0.js | 1 + assets/js/498bfcff.5b524ea2.js | 1 + assets/js/4aa4fc36.be58ac26.js | 1 + assets/js/4b5a01f9.ef3c9946.js | 1 + assets/js/4b80f681.e11f3e27.js | 1 + assets/js/4c3c1dc2.919c82cc.js | 1 + assets/js/4da8ac19.7a0c3adf.js | 1 + assets/js/4ee97ba8.5e12f8d7.js | 1 + assets/js/502e1773.6da73989.js | 1 + assets/js/51ad0f66.a3936ebe.js | 1 + assets/js/54094f37.b8d43f63.js | 1 + assets/js/54d7341e.1a1a4e8a.js | 1 + assets/js/5525.97a2f6fd.js | 1 + assets/js/55960ee5.157a89b5.js | 1 + assets/js/577efb1d.c28ef874.js | 1 + assets/js/5989d566.c10564e2.js | 1 + assets/js/5a5e553d.a052ee43.js | 1 + assets/js/5c08a402.5b8ee9e1.js | 1 + assets/js/5c8ec56d.f43991ba.js | 1 + assets/js/5e10e9e1.dbc2223c.js | 1 + assets/js/5e3ed04b.b32bf413.js | 1 + assets/js/5e95c892.19959f50.js | 1 + assets/js/60746895.892808be.js | 1 + assets/js/61639be2.f98a3aa9.js | 1 + assets/js/63ecd22d.ee70f411.js | 1 + assets/js/66286265.40f32996.js | 1 + assets/js/66a649c0.e07ee967.js | 1 + assets/js/676abc7a.3fa47bbb.js | 1 + assets/js/69fd9be6.e314faf1.js | 1 + assets/js/6adcc868.76866e35.js | 1 + assets/js/6bd3279d.672fa9ba.js | 1 + assets/js/70f31d65.a0d0f322.js | 1 + assets/js/72083b41.1610589e.js | 1 + assets/js/721cfe60.e2170e5a.js | 1 + assets/js/7514af75.b01e7195.js | 1 + assets/js/7557b935.1196147b.js | 1 + assets/js/7b02141e.87a39056.js | 1 + assets/js/7c623a68.34254eb2.js | 1 + assets/js/7cebed78.93942942.js | 1 + assets/js/7d3b81bb.55fae6e3.js | 1 + assets/js/7db788f5.47eeed9c.js | 1 + assets/js/7e6991bb.8ccfd93e.js | 1 + assets/js/81dd00c5.a58b205b.js | 1 + assets/js/841adc37.adf27db4.js | 1 + assets/js/8443.b56128a0.js | 2 + assets/js/8443.b56128a0.js.LICENSE.txt | 1 + assets/js/86262f09.2138a6d9.js | 1 + assets/js/880bbd08.f33bd122.js | 1 + assets/js/8961bfac.30c2f6cc.js | 1 + assets/js/90184672.9a24ac67.js | 1 + assets/js/935f2afb.b8482756.js | 1 + assets/js/97732f4b.f8435a1d.js | 1 + assets/js/977fea76.eec18e09.js | 1 + assets/js/9a118db7.20b551de.js | 1 + assets/js/9e136365.4646f1dd.js | 1 + assets/js/9e4a10de.e50eeb49.js | 1 + assets/js/9e7755e6.0a336fcc.js | 1 + assets/js/9e91bf8d.fd585101.js | 1 + assets/js/a2e97e20.8104584a.js | 1 + assets/js/a5dcc804.df6dead0.js | 1 + assets/js/a7bd4aaa.459ca90a.js | 1 + assets/js/a94703ab.320980da.js | 1 + assets/js/ad129716.7c8cb133.js | 1 + assets/js/af105519.63402ef0.js | 1 + assets/js/b0a5d2c7.07ceda06.js | 1 + assets/js/b15ba3bd.f6a45144.js | 1 + assets/js/b2781c74.5c448432.js | 1 + assets/js/b2b17913.d35b5c93.js | 1 + assets/js/b677d687.db13f5a3.js | 1 + assets/js/b8c59810.a9f6ce84.js | 1 + assets/js/bb45b332.4990f899.js | 1 + assets/js/bdf25f4c.568cf723.js | 1 + assets/js/bfdf430b.18d14d0c.js | 1 + assets/js/c21bc46a.5730133f.js | 1 + assets/js/c3d1f0cd.ca300b65.js | 1 + assets/js/c5daebe9.1b0a1002.js | 1 + assets/js/c8caddd1.c64588f9.js | 1 + assets/js/c90bf1e8.e9bf59db.js | 1 + assets/js/c93dcb87.cb01a7cb.js | 1 + assets/js/c9b29382.2e1f0cd7.js | 1 + assets/js/cb266b33.5e5e38c6.js | 1 + assets/js/cbe196b2.673dbdc3.js | 1 + assets/js/cc88a418.4afe2011.js | 1 + assets/js/ccf7588a.0cd7ba56.js | 1 + assets/js/cda37ba5.0a5bc595.js | 1 + assets/js/d17664a7.ec64c1f0.js | 1 + assets/js/d185ab52.0265950c.js | 1 + assets/js/d19423a2.5039dc89.js | 1 + assets/js/d2b7592b.95325593.js | 1 + assets/js/d2eeb42a.fe004971.js | 1 + assets/js/d547c67b.02d8c23d.js | 1 + assets/js/d5b0ea4b.09b9be2c.js | 1 + assets/js/d5cd246e.e9e603ab.js | 1 + assets/js/d77448ee.23c3c93d.js | 1 + assets/js/df203c0f.9fa2944e.js | 1 + assets/js/df3c944d.b47c244c.js | 1 + assets/js/dfbab2f3.87ea0b08.js | 1 + assets/js/e023757a.da0dad13.js | 1 + assets/js/e0edce1a.d7fa7b40.js | 1 + assets/js/e1df8231.23a94c3e.js | 1 + assets/js/e26167e6.6d4a867d.js | 1 + assets/js/e2712b99.7ac1a5ae.js | 1 + assets/js/e7fdd821.e3da5bd9.js | 1 + assets/js/e862d0e9.2b75446d.js | 1 + assets/js/e8ebc025.acf81b33.js | 1 + assets/js/e9e63826.8f9b6d55.js | 1 + assets/js/ebdd570f.862a7f20.js | 1 + assets/js/ec96df16.48e16b50.js | 1 + assets/js/edb3a98b.9f770347.js | 1 + assets/js/eee46244.ee073dd9.js | 1 + assets/js/f054b415.004ce3ac.js | 1 + assets/js/f52ed7e3.35da5637.js | 1 + assets/js/f54e894e.8575b06c.js | 1 + assets/js/f571fee5.672920cc.js | 1 + assets/js/f577f5c2.82507ca7.js | 1 + assets/js/f59fd0ba.cff0d5d3.js | 1 + assets/js/f5b92c38.b86ccf1d.js | 1 + assets/js/f85d2ba9.7e35db59.js | 1 + assets/js/f92867ed.ab8e538a.js | 1 + assets/js/fa0b6059.dd28e3aa.js | 1 + assets/js/fa17a3e5.4988ef2c.js | 1 + assets/js/fa3d98bd.fe953392.js | 1 + assets/js/fb7e7841.f28ee572.js | 1 + assets/js/fba8a418.ae904a92.js | 1 + assets/js/fd734e2c.fb46f962.js | 1 + assets/js/fe44757f.a7b3b924.js | 1 + assets/js/main.fec78e08.js | 2 + assets/js/main.fec78e08.js.LICENSE.txt | 126 + assets/js/runtime~main.65e8fb31.js | 1 + docs/about/getting_started/cli/faq/index.html | 43 + docs/about/getting_started/cli/index.html | 37 + docs/about/getting_started/index.html | 35 + docs/about/getting_started/library/index.html | 17 + docs/about/getting_started/yaml/index.html | 17 + docs/about/index.html | 25 + docs/about/migration_guides/index.html | 13 + .../migration_guides/v7_to_v8/index.html | 109 + .../migration_guides/v8-1_to_v8-2/index.html | 62 + .../migration_guides/v8-2_to_v8-3/index.html | 14 + .../migration_guides/v8-3_to_v8-4/index.html | 14 + .../migration_guides/v8-5_to_v8-6/index.html | 17 + .../migration_guides/v8-6_to_v8-7/index.html | 14 + .../migration_guides/v8.7_to_v8.8/index.html | 35 + .../migration_guides/v8_to_v81/index.html | 64 + docs/about/miscellaneous/index.html | 43 + .../modelling/examples/advanced/index.html | 144 + .../modelling/examples/drogon/index.html | 73 + docs/about/modelling/examples/index.html | 20 + .../modelling/examples/simple/index.html | 130 + docs/about/modelling/index.html | 17 + .../generator_modelling/index.html | 29 + .../setup/facility_inputs/index.html | 43 + .../facility_inputs/pump_modelling/index.html | 19 + .../pump_modelling/pump_charts/index.html | 67 + .../sampled_compressor_model/index.html | 67 + .../setup/facility_inputs/tabular/index.html | 37 + .../expressions/index.html | 50 + .../setup/file_format_and_syntax/index.html | 55 + .../modelling/setup/fuel_types/index.html | 24 + docs/about/modelling/setup/index.html | 17 + .../compressor/index.html | 22 + .../compressor_system/index.html | 25 + .../index.html | 22 + .../index.html | 22 + .../installations/direct_consumers/index.html | 25 + .../generator_sets_in_calculations/index.html | 63 + .../modelling/setup/installations/index.html | 62 + .../pump_models_in_calculations/index.html | 37 + .../tabular_models_in_calculations/index.html | 25 + .../compressor_charts/index.html | 90 + .../compressor_models_types/index.html | 20 + .../index.html | 44 + .../index.html | 27 + .../index.html | 28 + .../index.html | 80 + .../fixed_speed_pressure_control/index.html | 103 + .../models/compressor_modelling/index.html | 36 + .../setup/models/fluid_model/index.html | 57 + docs/about/modelling/setup/models/index.html | 28 + .../setup/models/turbine_modeling/index.html | 38 + .../modelling/setup/time_series/index.html | 42 + .../modelling/setup/variables/index.html | 30 + .../theory/compressor_modelling/index.html | 55 + docs/about/modelling/theory/index.html | 13 + .../theory/pump_modelling/index.html | 21 + .../workflow/generic_workflow/index.html | 55 + docs/about/modelling/workflow/index.html | 13 + docs/about/references/api/index.html | 14 + docs/about/references/api/libecalc.html | 238 + .../about/references/api/libecalc/common.html | 267 + .../api/libecalc/common/component_info.html | 238 + .../component_info/component_level.html | 431 ++ .../common/component_info/compressor.html | 363 ++ .../api/libecalc/common/datetime.html | 237 + .../api/libecalc/common/datetime/utils.html | 461 ++ .../api/libecalc/common/decorators.html | 238 + .../libecalc/common/decorators/capturer.html | 602 +++ .../common/decorators/feature_flags.html | 607 +++ .../api/libecalc/common/errors.html | 237 + .../libecalc/common/errors/exceptions.html | 871 ++++ .../references/api/libecalc/common/graph.html | 710 +++ .../references/api/libecalc/common/list.html | 238 + .../api/libecalc/common/list/adjustment.html | 292 ++ .../api/libecalc/common/list/list_utils.html | 626 +++ .../api/libecalc/common/logger.html | 258 + .../references/api/libecalc/common/math.html | 238 + .../api/libecalc/common/math/math_utils.html | 409 ++ .../api/libecalc/common/math/numbers.html | 480 ++ .../api/libecalc/common/priorities.html | 248 + .../libecalc/common/priority_optimizer.html | 557 +++ .../api/libecalc/common/run_info.html | 332 ++ .../libecalc/common/stream_conditions.html | 785 +++ .../api/libecalc/common/string.html | 237 + .../libecalc/common/string/string_utils.html | 396 ++ .../libecalc/common/tabular_time_series.html | 612 +++ .../api/libecalc/common/temporal_model.html | 559 +++ .../api/libecalc/common/time_utils.html | 1388 ++++++ .../references/api/libecalc/common/units.html | 1322 +++++ .../api/libecalc/common/version.html | 516 ++ .../about/references/api/libecalc/domain.html | 237 + .../libecalc/domain/stream_conditions.html | 740 +++ docs/about/references/api/libecalc/dto.html | 311 ++ .../references/api/libecalc/dto/base.html | 1396 ++++++ .../api/libecalc/dto/component_graph.html | 551 +++ .../api/libecalc/dto/components.html | 3049 ++++++++++++ .../api/libecalc/dto/core_specs.html | 240 + .../api/libecalc/dto/core_specs/base.html | 237 + .../core_specs/base/operational_settings.html | 341 ++ .../libecalc/dto/core_specs/compressor.html | 237 + .../compressor/operational_settings.html | 394 ++ .../api/libecalc/dto/core_specs/pump.html | 237 + .../core_specs/pump/operational_settings.html | 394 ++ .../api/libecalc/dto/core_specs/system.html | 233 + .../api/libecalc/dto/ecalc_model.html | 341 ++ .../references/api/libecalc/dto/emission.html | 379 ++ .../references/api/libecalc/dto/models.html | 332 ++ .../api/libecalc/dto/models/base.html | 423 ++ .../api/libecalc/dto/models/chart.html | 947 ++++ .../api/libecalc/dto/models/compressor.html | 283 ++ .../libecalc/dto/models/compressor/base.html | 489 ++ .../libecalc/dto/models/compressor/chart.html | 262 + .../libecalc/dto/models/compressor/fluid.html | 762 +++ .../dto/models/compressor/sampled.html | 454 ++ .../libecalc/dto/models/compressor/stage.html | 522 ++ .../libecalc/dto/models/compressor/train.html | 999 ++++ .../libecalc/dto/models/consumer_system.html | 1091 +++++ .../api/libecalc/dto/models/direct.html | 402 ++ .../libecalc/dto/models/generator_set.html | 416 ++ .../api/libecalc/dto/models/pump.html | 444 ++ .../api/libecalc/dto/models/sampled.html | 315 ++ .../api/libecalc/dto/models/tabulated.html | 559 +++ .../api/libecalc/dto/models/turbine.html | 379 ++ .../api/libecalc/dto/node_info.html | 343 ++ .../references/api/libecalc/dto/result.html | 262 + .../api/libecalc/dto/result/base.html | 415 ++ .../api/libecalc/dto/result/emission.html | 640 +++ .../api/libecalc/dto/result/results.html | 2271 +++++++++ .../dto/result/tabular_time_series.html | 626 +++ .../api/libecalc/dto/result/types.html | 455 ++ .../api/libecalc/dto/result_options.html | 343 ++ .../references/api/libecalc/dto/types.html | 2907 +++++++++++ .../references/api/libecalc/dto/utils.html | 238 + .../api/libecalc/dto/utils/aggregators.html | 533 ++ .../api/libecalc/dto/utils/validators.html | 405 ++ .../api/libecalc/dto/variables.html | 541 ++ .../references/api/libecalc/examples.html | 244 + .../api/libecalc/examples/advanced.html | 304 ++ .../api/libecalc/examples/simple.html | 306 ++ .../references/api/libecalc/expression.html | 243 + .../api/libecalc/expression/expression.html | 897 ++++ .../expression/expression_evaluator.html | 1608 ++++++ .../api/libecalc/infrastructure.html | 238 + .../api/libecalc/infrastructure/file_io.html | 2356 +++++++++ .../libecalc/infrastructure/file_utils.html | 840 ++++ .../references/api/libecalc/version.html | 285 ++ .../about/references/cli_reference/index.html | 106 + docs/about/references/index.html | 13 + .../references/keywords/ADJUSTMENT/index.html | 35 + .../references/keywords/CATEGORY/index.html | 37 + .../keywords/COMPRESSOR_MODEL/index.html | 22 + .../keywords/COMPRESSOR_SYSTEM/index.html | 31 + .../COMPRESSOR_TRAIN_MODEL/index.html | 26 + .../references/keywords/CONDITION/index.html | 32 + .../references/keywords/CONDITIONS/index.html | 22 + .../references/keywords/CONSTANT/index.html | 28 + .../references/keywords/CONSUMERS/index.html | 25 + .../keywords/CONSUMPTION_RATE_TYPE/index.html | 42 + .../keywords/CONTROL_MARGIN/index.html | 34 + .../keywords/CONTROL_MARGIN_UNIT/index.html | 26 + .../references/keywords/CROSSOVER/index.html | 24 + .../references/keywords/CURVE/index.html | 20 + .../references/keywords/CURVES/index.html | 20 + .../keywords/DIRECT_EMITTERS/index.html | 30 + .../keywords/DISCHARGE_PRESSURE/index.html | 26 + .../DOWNSTREAM_PRESSURE_CONTROL/index.html | 25 + .../references/keywords/EFFICIENCY/index.html | 29 + .../keywords/ELECTRICITY2FUEL/index.html | 36 + .../references/keywords/EMISSION/index.html | 30 + .../references/keywords/EMISSIONS/index.html | 25 + .../keywords/EMISSION_NAME/index.html | 30 + .../keywords/EMISSION_RATE/index.html | 27 + .../keywords/EMITTER_MODEL/index.html | 32 + docs/about/references/keywords/END/index.html | 28 + .../keywords/ENERGYFUNCTION/index.html | 30 + .../keywords/ENERGY_USAGE_MODEL/index.html | 38 + .../references/keywords/EXPRESSION/index.html | 25 + .../keywords/EXTRAPOLATION/index.html | 27 + .../keywords/FACILITY_INPUTS/index.html | 34 + .../references/keywords/FACTOR/index.html | 39 + .../about/references/keywords/FILE/index.html | 22 + .../keywords/FLUID_DENSITY/index.html | 24 + .../keywords/FLUID_MODEL/index.html | 19 + .../about/references/keywords/FUEL/index.html | 29 + .../keywords/FUELCONSUMERS/index.html | 26 + .../references/keywords/FUELRATE/index.html | 28 + .../references/keywords/FUEL_TYPES/index.html | 21 + .../keywords/GENERATORSETS/index.html | 24 + .../references/keywords/HCEXPORT/index.html | 36 + .../about/references/keywords/HEAD/index.html | 30 + .../keywords/HEAD_MARGIN/index.html | 29 + .../keywords/INFLUENCE_TIME_VECTOR/index.html | 23 + .../keywords/INLET_TEMPERATURE/index.html | 22 + .../keywords/INSTALLATIONS/index.html | 19 + .../keywords/INTERPOLATION_TYPE/index.html | 47 + .../INTERSTAGE_CONTROL_PRESSURE/index.html | 37 + .../about/references/keywords/LOAD/index.html | 24 + .../keywords/LOWER_HEATING_VALUE/index.html | 21 + .../MAXIMUM_DISCHARGE_PRESSURE/index.html | 27 + .../index.html | 26 + .../references/keywords/MODELS/index.html | 35 + .../about/references/keywords/NAME/index.html | 25 + .../keywords/OPERATIONAL_SETTINGS/index.html | 83 + .../keywords/POWERLOSSFACTOR/index.html | 28 + .../POWER_ADJUSTMENT_CONSTANT/index.html | 21 + .../keywords/PRESSURE_CONTROL/index.html | 28 + .../references/keywords/PUMPS/index.html | 25 + .../about/references/keywords/RATE/index.html | 36 + .../keywords/RATE_FRACTIONS/index.html | 21 + .../keywords/RATE_PER_STREAM/index.html | 24 + .../references/keywords/REGULARITY/index.html | 60 + .../references/keywords/STAGES/index.html | 37 + .../references/keywords/START/index.html | 32 + .../references/keywords/STREAM/index.html | 24 + .../references/keywords/STREAMS/index.html | 27 + .../keywords/SUCTION_PRESSURE/index.html | 27 + .../keywords/TIME_SERIES/index.html | 32 + .../keywords/TOTAL_SYSTEM_RATE/index.html | 25 + .../keywords/TURBINE_EFFICIENCIES/index.html | 20 + .../keywords/TURBINE_LOAD/index.html | 20 + .../keywords/TURBINE_MODEL/index.html | 20 + .../about/references/keywords/TYPE/index.html | 53 + .../references/keywords/UNITS/index.html | 26 + .../UPSTREAM_PRESSURE_CONTROL/index.html | 25 + .../references/keywords/VARIABLES/index.html | 18 + .../keywords/VENTING_EMITTERS/index.html | 39 + .../references/keywords/include/index.html | 37 + docs/about/references/keywords/index.html | 18 + docs/category/documentation/index.html | 13 + docs/category/guides/index.html | 13 + docs/changelog/index.html | 485 ++ docs/changelog/latest/index.html | 16 + docs/changelog/separator/index.html | 13 + docs/changelog/v7-0-release/index.html | 65 + docs/changelog/v7-1-release/index.html | 63 + docs/changelog/v7-2-release/index.html | 59 + docs/changelog/v7-3-release/index.html | 33 + docs/changelog/v7-4-release/index.html | 64 + docs/changelog/v7-5-release/index.html | 66 + docs/changelog/v7-6-release/index.html | 18 + docs/changelog/v8.0-release/index.html | 62 + docs/changelog/v8.1-release/index.html | 32 + docs/changelog/v8.2-release/index.html | 28 + docs/changelog/v8.3-release/index.html | 29 + docs/changelog/v8.4-release/index.html | 26 + docs/changelog/v8.5-release/index.html | 28 + docs/changelog/v8.6-release/index.html | 28 + docs/changelog/v8.7-release/index.html | 29 + docs/changelog/v8.8-release/index.html | 21 + .../documentation/index.html | 44 + .../documentation-guide/markdown/index.html | 21 + docs/contribute/get-started/index.html | 92 + .../guides/conventional-commits/index.html | 24 + docs/contribute/guides/git/index.html | 135 + docs/tags/e-calc/index.html | 13 + docs/tags/index.html | 13 + docs/tags/release/index.html | 13 + img/docs/asgb/asgb_lpp3_pd.png | Bin 0 -> 8296 bytes ...sgb_lpp3_predef_fuel_result_comparison.png | Bin 0 -> 150658 bytes img/docs/asgb/asgb_lpp3_predef_stage1.png | Bin 0 -> 19860 bytes .../asgb/asgb_lpp3_predef_stage1_2031.png | Bin 0 -> 19734 bytes img/docs/asgb/asgb_lpp3_predef_stage2.png | Bin 0 -> 18719 bytes .../asgb/asgb_lpp3_predef_stage2_2031.png | Bin 0 -> 16372 bytes img/docs/asgb/asgb_lpp3_ps.png | Bin 0 -> 9080 bytes img/docs/asgb/asgb_lpp3_sketch.png | Bin 0 -> 62437 bytes .../asgb_lpp3_sys26_capacity_and_rate.png | Bin 0 -> 11469 bytes .../asgb_lpp3_sys26_maxcapacity_at_pd200.png | Bin 0 -> 7903 bytes .../asgb_lpp3_sys26_maxcapacity_at_pd250.png | Bin 0 -> 6555 bytes ...gb_lpp3_sys26_maxcapacity_at_pdsurface.png | Bin 0 -> 25407 bytes .../asgb_lpp3_sys26_stage1_at_ps31pd250.png | Bin 0 -> 40153 bytes .../asgb_lpp3_sys26_stage2_at_ps31pd250.png | Bin 0 -> 50587 bytes .../asgb_lpp3_sys27_capacity_and_rate.png | Bin 0 -> 13313 bytes .../asgb_lpp3_sys27_crossover_and_mode.png | Bin 0 -> 12063 bytes img/docs/asgb/asgb_lpp3_sys27_gasrate.png | Bin 0 -> 12245 bytes .../asgb/asgb_lpp3_sys27_rate_and_mode.png | Bin 0 -> 16959 bytes img/docs/asgb/asgb_lpp3_timeline.png | Bin 0 -> 12064 bytes img/docs/asgb/asgb_lpp3_unisim_stage1.png | Bin 0 -> 40526 bytes .../asgb/asgb_lpp3_unisim_stage1_filtered.png | Bin 0 -> 28371 bytes img/docs/asgb/asgb_lpp3_unisim_stage2.png | Bin 0 -> 46287 bytes .../asgb/asgb_lpp3_unisim_stage2_filtered.png | Bin 0 -> 40488 bytes img/docs/asgb/asgb_sys27a_unisim_model.png | Bin 0 -> 11965 bytes .../asgb_sys27a_unisim_model_filtered.png | Bin 0 -> 7718 bytes .../asgb/ecalc_generic_chart_normalized.png | Bin 0 -> 21903 bytes .../asgb/ecalc_generic_chart_original.png | Bin 0 -> 26035 bytes img/docs/changed_rate_resampling.png | Bin 0 -> 237031 bytes img/docs/interpolation_plot.png | Bin 0 -> 16617 bytes img/docusaurus.png | Bin 0 -> 5142 bytes img/favicon.svg | 3 + img/logo.svg | 16 + img/undraw_docusaurus_mountain.svg | 171 + img/undraw_docusaurus_react.svg | 170 + img/undraw_docusaurus_tree.svg | 40 + index.html | 13 + katex/fonts/KaTeX_AMS-Regular.ttf | Bin 0 -> 63632 bytes katex/fonts/KaTeX_AMS-Regular.woff | Bin 0 -> 33516 bytes katex/fonts/KaTeX_AMS-Regular.woff2 | Bin 0 -> 28076 bytes katex/fonts/KaTeX_Caligraphic-Bold.ttf | Bin 0 -> 12368 bytes katex/fonts/KaTeX_Caligraphic-Bold.woff | Bin 0 -> 7716 bytes katex/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 6912 bytes katex/fonts/KaTeX_Caligraphic-Regular.ttf | Bin 0 -> 12344 bytes katex/fonts/KaTeX_Caligraphic-Regular.woff | Bin 0 -> 7656 bytes katex/fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 6908 bytes katex/fonts/KaTeX_Fraktur-Bold.ttf | Bin 0 -> 19584 bytes katex/fonts/KaTeX_Fraktur-Bold.woff | Bin 0 -> 13296 bytes katex/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 11348 bytes katex/fonts/KaTeX_Fraktur-Regular.ttf | Bin 0 -> 19572 bytes katex/fonts/KaTeX_Fraktur-Regular.woff | Bin 0 -> 13208 bytes katex/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 11316 bytes katex/fonts/KaTeX_Main-Bold.ttf | Bin 0 -> 51336 bytes katex/fonts/KaTeX_Main-Bold.woff | Bin 0 -> 29912 bytes katex/fonts/KaTeX_Main-Bold.woff2 | Bin 0 -> 25324 bytes katex/fonts/KaTeX_Main-BoldItalic.ttf | Bin 0 -> 32968 bytes katex/fonts/KaTeX_Main-BoldItalic.woff | Bin 0 -> 19412 bytes katex/fonts/KaTeX_Main-BoldItalic.woff2 | Bin 0 -> 16780 bytes katex/fonts/KaTeX_Main-Italic.ttf | Bin 0 -> 33580 bytes katex/fonts/KaTeX_Main-Italic.woff | Bin 0 -> 19676 bytes katex/fonts/KaTeX_Main-Italic.woff2 | Bin 0 -> 16988 bytes katex/fonts/KaTeX_Main-Regular.ttf | Bin 0 -> 53580 bytes katex/fonts/KaTeX_Main-Regular.woff | Bin 0 -> 30772 bytes katex/fonts/KaTeX_Main-Regular.woff2 | Bin 0 -> 26272 bytes katex/fonts/KaTeX_Math-BoldItalic.ttf | Bin 0 -> 31196 bytes katex/fonts/KaTeX_Math-BoldItalic.woff | Bin 0 -> 18668 bytes katex/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 16400 bytes katex/fonts/KaTeX_Math-Italic.ttf | Bin 0 -> 31308 bytes katex/fonts/KaTeX_Math-Italic.woff | Bin 0 -> 18748 bytes katex/fonts/KaTeX_Math-Italic.woff2 | Bin 0 -> 16440 bytes katex/fonts/KaTeX_SansSerif-Bold.ttf | Bin 0 -> 24504 bytes katex/fonts/KaTeX_SansSerif-Bold.woff | Bin 0 -> 14408 bytes katex/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 12216 bytes katex/fonts/KaTeX_SansSerif-Italic.ttf | Bin 0 -> 22364 bytes katex/fonts/KaTeX_SansSerif-Italic.woff | Bin 0 -> 14112 bytes katex/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 12028 bytes katex/fonts/KaTeX_SansSerif-Regular.ttf | Bin 0 -> 19436 bytes katex/fonts/KaTeX_SansSerif-Regular.woff | Bin 0 -> 12316 bytes katex/fonts/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 10344 bytes katex/fonts/KaTeX_Script-Regular.ttf | Bin 0 -> 16648 bytes katex/fonts/KaTeX_Script-Regular.woff | Bin 0 -> 10588 bytes katex/fonts/KaTeX_Script-Regular.woff2 | Bin 0 -> 9644 bytes katex/fonts/KaTeX_Size1-Regular.ttf | Bin 0 -> 12228 bytes katex/fonts/KaTeX_Size1-Regular.woff | Bin 0 -> 6496 bytes katex/fonts/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5468 bytes katex/fonts/KaTeX_Size2-Regular.ttf | Bin 0 -> 11508 bytes katex/fonts/KaTeX_Size2-Regular.woff | Bin 0 -> 6188 bytes katex/fonts/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5208 bytes katex/fonts/KaTeX_Size3-Regular.ttf | Bin 0 -> 7588 bytes katex/fonts/KaTeX_Size3-Regular.woff | Bin 0 -> 4420 bytes katex/fonts/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3624 bytes katex/fonts/KaTeX_Size4-Regular.ttf | Bin 0 -> 10364 bytes katex/fonts/KaTeX_Size4-Regular.woff | Bin 0 -> 5980 bytes katex/fonts/KaTeX_Size4-Regular.woff2 | Bin 0 -> 4928 bytes katex/fonts/KaTeX_Typewriter-Regular.ttf | Bin 0 -> 27556 bytes katex/fonts/KaTeX_Typewriter-Regular.woff | Bin 0 -> 16028 bytes katex/fonts/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 13568 bytes katex/katex.min.css | 1 + search-index.json | 1 + search/index.html | 13 + sitemap.xml | 1 + versions/index.html | 13 + 572 files changed, 62241 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 assets/css/styles.f9d5607e.css create mode 100644 assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png create mode 100644 assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png create mode 100644 assets/images/compressor_chart_surge_control_margin_line-98e32f3b0d5332a371ec4bb2dbc66da8.png create mode 100644 assets/images/control_mech_variable_speed-91a2c845dc627195fee373c1c63d952d.PNG create mode 100644 assets/images/downstream_choking-e0ac6b7a8379c76a8f29199d7aa9086c.png create mode 100644 assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png create mode 100644 assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png create mode 100644 assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg create mode 100644 assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png create mode 100644 assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png create mode 100644 assets/images/make_recirculation_pressure_control_plot-527cac79a8c53527147492b170308459.png create mode 100644 assets/images/process_compressor-3493b127c832898d93b5231594efa8d3.png create mode 100644 assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png create mode 100644 assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png create mode 100644 assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG create mode 100644 assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG create mode 100644 assets/images/regularity-3e43516a1e0246a2e125d4980006b137.png create mode 100644 assets/images/simple_facility_pfd-ad59578d69ea3d3267f646b9d8141822.jpg create mode 100644 assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png create mode 100644 assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png create mode 100644 assets/js/00440000.31a1325e.js create mode 100644 assets/js/00bdc23f.84c5401c.js create mode 100644 assets/js/0425b884.39bfc638.js create mode 100644 assets/js/0477162f.e0c22ff2.js create mode 100644 assets/js/06adec10.9980026a.js create mode 100644 assets/js/06dd1efa.7c149191.js create mode 100644 assets/js/0745e7f0.c743d298.js create mode 100644 assets/js/074935d7.2591b66d.js create mode 100644 assets/js/07b341f3.56724c70.js create mode 100644 assets/js/084f7ebf.fbfeb6c7.js create mode 100644 assets/js/0aeda122.d9b45105.js create mode 100644 assets/js/0f7b5825.b7b38229.js create mode 100644 assets/js/0fd76486.9d4cbe95.js create mode 100644 assets/js/10c684b0.55745dfa.js create mode 100644 assets/js/11516e85.71cc9aa4.js create mode 100644 assets/js/1287dd43.e17ad200.js create mode 100644 assets/js/1300feb7.1e8c5801.js create mode 100644 assets/js/14eb3368.5672d2a5.js create mode 100644 assets/js/15962da1.f6006d5c.js create mode 100644 assets/js/163041ea.dbd3285c.js create mode 100644 assets/js/1772.61b36e2a.js create mode 100644 assets/js/17896441.bec7cf3d.js create mode 100644 assets/js/17e50ecd.ebbf2f8c.js create mode 100644 assets/js/18b0ec42.fda20e54.js create mode 100644 assets/js/1a4e3797.81b3ccb7.js create mode 100644 assets/js/1c663d3d.8a9a9e25.js create mode 100644 assets/js/1df93b7f.8c894b14.js create mode 100644 assets/js/1e7de7fe.c4a8e353.js create mode 100644 assets/js/1f60d0d4.870364a2.js create mode 100644 assets/js/1f7805b6.03fcb1fa.js create mode 100644 assets/js/22f0e129.aaea21cc.js create mode 100644 assets/js/2781f0ad.52ab570d.js create mode 100644 assets/js/29367e59.11dc59ec.js create mode 100644 assets/js/295f424e.6a44f23f.js create mode 100644 assets/js/29d00dd8.3e3bc7f1.js create mode 100644 assets/js/2b15d891.3bb3344d.js create mode 100644 assets/js/2b2be347.20f2acd0.js create mode 100644 assets/js/2c19a041.c111a5f0.js create mode 100644 assets/js/2c73e373.897a2d57.js create mode 100644 assets/js/2ce3b5da.7103e5f5.js create mode 100644 assets/js/2cedaf2f.77a54e69.js create mode 100644 assets/js/2df92a48.5f0f22e6.js create mode 100644 assets/js/2f04f592.bf49cec0.js create mode 100644 assets/js/3261da49.279e9591.js create mode 100644 assets/js/33498b04.0fa0d93a.js create mode 100644 assets/js/3409ab5c.1a5df7d3.js create mode 100644 assets/js/3720c009.462e617c.js create mode 100644 assets/js/3810e8e5.450a30d2.js create mode 100644 assets/js/382d59b5.177e6432.js create mode 100644 assets/js/38d592cf.b53c36f3.js create mode 100644 assets/js/3aeef25a.c9e431e8.js create mode 100644 assets/js/3b0e82f8.c1b09a81.js create mode 100644 assets/js/3e38e310.366f25a9.js create mode 100644 assets/js/3fbb770c.54126050.js create mode 100644 assets/js/40d6382c.0f0252a9.js create mode 100644 assets/js/4147f87e.5e3a7fec.js create mode 100644 assets/js/41d1792a.f1d4fa7e.js create mode 100644 assets/js/428320b6.0ed894e1.js create mode 100644 assets/js/43a1031a.18b5a55b.js create mode 100644 assets/js/43a26e71.efb35fa2.js create mode 100644 assets/js/45c974ba.dd19411b.js create mode 100644 assets/js/47daf389.1c4ae3c9.js create mode 100644 assets/js/496ed8d5.479344d0.js create mode 100644 assets/js/498bfcff.5b524ea2.js create mode 100644 assets/js/4aa4fc36.be58ac26.js create mode 100644 assets/js/4b5a01f9.ef3c9946.js create mode 100644 assets/js/4b80f681.e11f3e27.js create mode 100644 assets/js/4c3c1dc2.919c82cc.js create mode 100644 assets/js/4da8ac19.7a0c3adf.js create mode 100644 assets/js/4ee97ba8.5e12f8d7.js create mode 100644 assets/js/502e1773.6da73989.js create mode 100644 assets/js/51ad0f66.a3936ebe.js create mode 100644 assets/js/54094f37.b8d43f63.js create mode 100644 assets/js/54d7341e.1a1a4e8a.js create mode 100644 assets/js/5525.97a2f6fd.js create mode 100644 assets/js/55960ee5.157a89b5.js create mode 100644 assets/js/577efb1d.c28ef874.js create mode 100644 assets/js/5989d566.c10564e2.js create mode 100644 assets/js/5a5e553d.a052ee43.js create mode 100644 assets/js/5c08a402.5b8ee9e1.js create mode 100644 assets/js/5c8ec56d.f43991ba.js create mode 100644 assets/js/5e10e9e1.dbc2223c.js create mode 100644 assets/js/5e3ed04b.b32bf413.js create mode 100644 assets/js/5e95c892.19959f50.js create mode 100644 assets/js/60746895.892808be.js create mode 100644 assets/js/61639be2.f98a3aa9.js create mode 100644 assets/js/63ecd22d.ee70f411.js create mode 100644 assets/js/66286265.40f32996.js create mode 100644 assets/js/66a649c0.e07ee967.js create mode 100644 assets/js/676abc7a.3fa47bbb.js create mode 100644 assets/js/69fd9be6.e314faf1.js create mode 100644 assets/js/6adcc868.76866e35.js create mode 100644 assets/js/6bd3279d.672fa9ba.js create mode 100644 assets/js/70f31d65.a0d0f322.js create mode 100644 assets/js/72083b41.1610589e.js create mode 100644 assets/js/721cfe60.e2170e5a.js create mode 100644 assets/js/7514af75.b01e7195.js create mode 100644 assets/js/7557b935.1196147b.js create mode 100644 assets/js/7b02141e.87a39056.js create mode 100644 assets/js/7c623a68.34254eb2.js create mode 100644 assets/js/7cebed78.93942942.js create mode 100644 assets/js/7d3b81bb.55fae6e3.js create mode 100644 assets/js/7db788f5.47eeed9c.js create mode 100644 assets/js/7e6991bb.8ccfd93e.js create mode 100644 assets/js/81dd00c5.a58b205b.js create mode 100644 assets/js/841adc37.adf27db4.js create mode 100644 assets/js/8443.b56128a0.js create mode 100644 assets/js/8443.b56128a0.js.LICENSE.txt create mode 100644 assets/js/86262f09.2138a6d9.js create mode 100644 assets/js/880bbd08.f33bd122.js create mode 100644 assets/js/8961bfac.30c2f6cc.js create mode 100644 assets/js/90184672.9a24ac67.js create mode 100644 assets/js/935f2afb.b8482756.js create mode 100644 assets/js/97732f4b.f8435a1d.js create mode 100644 assets/js/977fea76.eec18e09.js create mode 100644 assets/js/9a118db7.20b551de.js create mode 100644 assets/js/9e136365.4646f1dd.js create mode 100644 assets/js/9e4a10de.e50eeb49.js create mode 100644 assets/js/9e7755e6.0a336fcc.js create mode 100644 assets/js/9e91bf8d.fd585101.js create mode 100644 assets/js/a2e97e20.8104584a.js create mode 100644 assets/js/a5dcc804.df6dead0.js create mode 100644 assets/js/a7bd4aaa.459ca90a.js create mode 100644 assets/js/a94703ab.320980da.js create mode 100644 assets/js/ad129716.7c8cb133.js create mode 100644 assets/js/af105519.63402ef0.js create mode 100644 assets/js/b0a5d2c7.07ceda06.js create mode 100644 assets/js/b15ba3bd.f6a45144.js create mode 100644 assets/js/b2781c74.5c448432.js create mode 100644 assets/js/b2b17913.d35b5c93.js create mode 100644 assets/js/b677d687.db13f5a3.js create mode 100644 assets/js/b8c59810.a9f6ce84.js create mode 100644 assets/js/bb45b332.4990f899.js create mode 100644 assets/js/bdf25f4c.568cf723.js create mode 100644 assets/js/bfdf430b.18d14d0c.js create mode 100644 assets/js/c21bc46a.5730133f.js create mode 100644 assets/js/c3d1f0cd.ca300b65.js create mode 100644 assets/js/c5daebe9.1b0a1002.js create mode 100644 assets/js/c8caddd1.c64588f9.js create mode 100644 assets/js/c90bf1e8.e9bf59db.js create mode 100644 assets/js/c93dcb87.cb01a7cb.js create mode 100644 assets/js/c9b29382.2e1f0cd7.js create mode 100644 assets/js/cb266b33.5e5e38c6.js create mode 100644 assets/js/cbe196b2.673dbdc3.js create mode 100644 assets/js/cc88a418.4afe2011.js create mode 100644 assets/js/ccf7588a.0cd7ba56.js create mode 100644 assets/js/cda37ba5.0a5bc595.js create mode 100644 assets/js/d17664a7.ec64c1f0.js create mode 100644 assets/js/d185ab52.0265950c.js create mode 100644 assets/js/d19423a2.5039dc89.js create mode 100644 assets/js/d2b7592b.95325593.js create mode 100644 assets/js/d2eeb42a.fe004971.js create mode 100644 assets/js/d547c67b.02d8c23d.js create mode 100644 assets/js/d5b0ea4b.09b9be2c.js create mode 100644 assets/js/d5cd246e.e9e603ab.js create mode 100644 assets/js/d77448ee.23c3c93d.js create mode 100644 assets/js/df203c0f.9fa2944e.js create mode 100644 assets/js/df3c944d.b47c244c.js create mode 100644 assets/js/dfbab2f3.87ea0b08.js create mode 100644 assets/js/e023757a.da0dad13.js create mode 100644 assets/js/e0edce1a.d7fa7b40.js create mode 100644 assets/js/e1df8231.23a94c3e.js create mode 100644 assets/js/e26167e6.6d4a867d.js create mode 100644 assets/js/e2712b99.7ac1a5ae.js create mode 100644 assets/js/e7fdd821.e3da5bd9.js create mode 100644 assets/js/e862d0e9.2b75446d.js create mode 100644 assets/js/e8ebc025.acf81b33.js create mode 100644 assets/js/e9e63826.8f9b6d55.js create mode 100644 assets/js/ebdd570f.862a7f20.js create mode 100644 assets/js/ec96df16.48e16b50.js create mode 100644 assets/js/edb3a98b.9f770347.js create mode 100644 assets/js/eee46244.ee073dd9.js create mode 100644 assets/js/f054b415.004ce3ac.js create mode 100644 assets/js/f52ed7e3.35da5637.js create mode 100644 assets/js/f54e894e.8575b06c.js create mode 100644 assets/js/f571fee5.672920cc.js create mode 100644 assets/js/f577f5c2.82507ca7.js create mode 100644 assets/js/f59fd0ba.cff0d5d3.js create mode 100644 assets/js/f5b92c38.b86ccf1d.js create mode 100644 assets/js/f85d2ba9.7e35db59.js create mode 100644 assets/js/f92867ed.ab8e538a.js create mode 100644 assets/js/fa0b6059.dd28e3aa.js create mode 100644 assets/js/fa17a3e5.4988ef2c.js create mode 100644 assets/js/fa3d98bd.fe953392.js create mode 100644 assets/js/fb7e7841.f28ee572.js create mode 100644 assets/js/fba8a418.ae904a92.js create mode 100644 assets/js/fd734e2c.fb46f962.js create mode 100644 assets/js/fe44757f.a7b3b924.js create mode 100644 assets/js/main.fec78e08.js create mode 100644 assets/js/main.fec78e08.js.LICENSE.txt create mode 100644 assets/js/runtime~main.65e8fb31.js create mode 100644 docs/about/getting_started/cli/faq/index.html create mode 100644 docs/about/getting_started/cli/index.html create mode 100644 docs/about/getting_started/index.html create mode 100644 docs/about/getting_started/library/index.html create mode 100644 docs/about/getting_started/yaml/index.html create mode 100644 docs/about/index.html create mode 100644 docs/about/migration_guides/index.html create mode 100644 docs/about/migration_guides/v7_to_v8/index.html create mode 100644 docs/about/migration_guides/v8-1_to_v8-2/index.html create mode 100644 docs/about/migration_guides/v8-2_to_v8-3/index.html create mode 100644 docs/about/migration_guides/v8-3_to_v8-4/index.html create mode 100644 docs/about/migration_guides/v8-5_to_v8-6/index.html create mode 100644 docs/about/migration_guides/v8-6_to_v8-7/index.html create mode 100644 docs/about/migration_guides/v8.7_to_v8.8/index.html create mode 100644 docs/about/migration_guides/v8_to_v81/index.html create mode 100644 docs/about/miscellaneous/index.html create mode 100644 docs/about/modelling/examples/advanced/index.html create mode 100644 docs/about/modelling/examples/drogon/index.html create mode 100644 docs/about/modelling/examples/index.html create mode 100644 docs/about/modelling/examples/simple/index.html create mode 100644 docs/about/modelling/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/generator_modelling/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/pump_modelling/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/sampled_compressor_model/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/tabular/index.html create mode 100644 docs/about/modelling/setup/file_format_and_syntax/expressions/index.html create mode 100644 docs/about/modelling/setup/file_format_and_syntax/index.html create mode 100644 docs/about/modelling/setup/fuel_types/index.html create mode 100644 docs/about/modelling/setup/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html create mode 100644 docs/about/modelling/setup/installations/direct_consumers/index.html create mode 100644 docs/about/modelling/setup/installations/generator_sets_in_calculations/index.html create mode 100644 docs/about/modelling/setup/installations/index.html create mode 100644 docs/about/modelling/setup/installations/pump_models_in_calculations/index.html create mode 100644 docs/about/modelling/setup/installations/tabular_models_in_calculations/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/index.html create mode 100644 docs/about/modelling/setup/models/fluid_model/index.html create mode 100644 docs/about/modelling/setup/models/index.html create mode 100644 docs/about/modelling/setup/models/turbine_modeling/index.html create mode 100644 docs/about/modelling/setup/time_series/index.html create mode 100644 docs/about/modelling/setup/variables/index.html create mode 100644 docs/about/modelling/theory/compressor_modelling/index.html create mode 100644 docs/about/modelling/theory/index.html create mode 100644 docs/about/modelling/theory/pump_modelling/index.html create mode 100644 docs/about/modelling/workflow/generic_workflow/index.html create mode 100644 docs/about/modelling/workflow/index.html create mode 100644 docs/about/references/api/index.html create mode 100644 docs/about/references/api/libecalc.html create mode 100644 docs/about/references/api/libecalc/common.html create mode 100644 docs/about/references/api/libecalc/common/component_info.html create mode 100644 docs/about/references/api/libecalc/common/component_info/component_level.html create mode 100644 docs/about/references/api/libecalc/common/component_info/compressor.html create mode 100644 docs/about/references/api/libecalc/common/datetime.html create mode 100644 docs/about/references/api/libecalc/common/datetime/utils.html create mode 100644 docs/about/references/api/libecalc/common/decorators.html create mode 100644 docs/about/references/api/libecalc/common/decorators/capturer.html create mode 100644 docs/about/references/api/libecalc/common/decorators/feature_flags.html create mode 100644 docs/about/references/api/libecalc/common/errors.html create mode 100644 docs/about/references/api/libecalc/common/errors/exceptions.html create mode 100644 docs/about/references/api/libecalc/common/graph.html create mode 100644 docs/about/references/api/libecalc/common/list.html create mode 100644 docs/about/references/api/libecalc/common/list/adjustment.html create mode 100644 docs/about/references/api/libecalc/common/list/list_utils.html create mode 100644 docs/about/references/api/libecalc/common/logger.html create mode 100644 docs/about/references/api/libecalc/common/math.html create mode 100644 docs/about/references/api/libecalc/common/math/math_utils.html create mode 100644 docs/about/references/api/libecalc/common/math/numbers.html create mode 100644 docs/about/references/api/libecalc/common/priorities.html create mode 100644 docs/about/references/api/libecalc/common/priority_optimizer.html create mode 100644 docs/about/references/api/libecalc/common/run_info.html create mode 100644 docs/about/references/api/libecalc/common/stream_conditions.html create mode 100644 docs/about/references/api/libecalc/common/string.html create mode 100644 docs/about/references/api/libecalc/common/string/string_utils.html create mode 100644 docs/about/references/api/libecalc/common/tabular_time_series.html create mode 100644 docs/about/references/api/libecalc/common/temporal_model.html create mode 100644 docs/about/references/api/libecalc/common/time_utils.html create mode 100644 docs/about/references/api/libecalc/common/units.html create mode 100644 docs/about/references/api/libecalc/common/version.html create mode 100644 docs/about/references/api/libecalc/domain.html create mode 100644 docs/about/references/api/libecalc/domain/stream_conditions.html create mode 100644 docs/about/references/api/libecalc/dto.html create mode 100644 docs/about/references/api/libecalc/dto/base.html create mode 100644 docs/about/references/api/libecalc/dto/component_graph.html create mode 100644 docs/about/references/api/libecalc/dto/components.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/base.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/base/operational_settings.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/compressor.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/compressor/operational_settings.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/pump.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/pump/operational_settings.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/system.html create mode 100644 docs/about/references/api/libecalc/dto/ecalc_model.html create mode 100644 docs/about/references/api/libecalc/dto/emission.html create mode 100644 docs/about/references/api/libecalc/dto/models.html create mode 100644 docs/about/references/api/libecalc/dto/models/base.html create mode 100644 docs/about/references/api/libecalc/dto/models/chart.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/base.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/chart.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/fluid.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/sampled.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/stage.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/train.html create mode 100644 docs/about/references/api/libecalc/dto/models/consumer_system.html create mode 100644 docs/about/references/api/libecalc/dto/models/direct.html create mode 100644 docs/about/references/api/libecalc/dto/models/generator_set.html create mode 100644 docs/about/references/api/libecalc/dto/models/pump.html create mode 100644 docs/about/references/api/libecalc/dto/models/sampled.html create mode 100644 docs/about/references/api/libecalc/dto/models/tabulated.html create mode 100644 docs/about/references/api/libecalc/dto/models/turbine.html create mode 100644 docs/about/references/api/libecalc/dto/node_info.html create mode 100644 docs/about/references/api/libecalc/dto/result.html create mode 100644 docs/about/references/api/libecalc/dto/result/base.html create mode 100644 docs/about/references/api/libecalc/dto/result/emission.html create mode 100644 docs/about/references/api/libecalc/dto/result/results.html create mode 100644 docs/about/references/api/libecalc/dto/result/tabular_time_series.html create mode 100644 docs/about/references/api/libecalc/dto/result/types.html create mode 100644 docs/about/references/api/libecalc/dto/result_options.html create mode 100644 docs/about/references/api/libecalc/dto/types.html create mode 100644 docs/about/references/api/libecalc/dto/utils.html create mode 100644 docs/about/references/api/libecalc/dto/utils/aggregators.html create mode 100644 docs/about/references/api/libecalc/dto/utils/validators.html create mode 100644 docs/about/references/api/libecalc/dto/variables.html create mode 100644 docs/about/references/api/libecalc/examples.html create mode 100644 docs/about/references/api/libecalc/examples/advanced.html create mode 100644 docs/about/references/api/libecalc/examples/simple.html create mode 100644 docs/about/references/api/libecalc/expression.html create mode 100644 docs/about/references/api/libecalc/expression/expression.html create mode 100644 docs/about/references/api/libecalc/expression/expression_evaluator.html create mode 100644 docs/about/references/api/libecalc/infrastructure.html create mode 100644 docs/about/references/api/libecalc/infrastructure/file_io.html create mode 100644 docs/about/references/api/libecalc/infrastructure/file_utils.html create mode 100644 docs/about/references/api/libecalc/version.html create mode 100644 docs/about/references/cli_reference/index.html create mode 100644 docs/about/references/index.html create mode 100644 docs/about/references/keywords/ADJUSTMENT/index.html create mode 100644 docs/about/references/keywords/CATEGORY/index.html create mode 100644 docs/about/references/keywords/COMPRESSOR_MODEL/index.html create mode 100644 docs/about/references/keywords/COMPRESSOR_SYSTEM/index.html create mode 100644 docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL/index.html create mode 100644 docs/about/references/keywords/CONDITION/index.html create mode 100644 docs/about/references/keywords/CONDITIONS/index.html create mode 100644 docs/about/references/keywords/CONSTANT/index.html create mode 100644 docs/about/references/keywords/CONSUMERS/index.html create mode 100644 docs/about/references/keywords/CONSUMPTION_RATE_TYPE/index.html create mode 100644 docs/about/references/keywords/CONTROL_MARGIN/index.html create mode 100644 docs/about/references/keywords/CONTROL_MARGIN_UNIT/index.html create mode 100644 docs/about/references/keywords/CROSSOVER/index.html create mode 100644 docs/about/references/keywords/CURVE/index.html create mode 100644 docs/about/references/keywords/CURVES/index.html create mode 100644 docs/about/references/keywords/DIRECT_EMITTERS/index.html create mode 100644 docs/about/references/keywords/DISCHARGE_PRESSURE/index.html create mode 100644 docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL/index.html create mode 100644 docs/about/references/keywords/EFFICIENCY/index.html create mode 100644 docs/about/references/keywords/ELECTRICITY2FUEL/index.html create mode 100644 docs/about/references/keywords/EMISSION/index.html create mode 100644 docs/about/references/keywords/EMISSIONS/index.html create mode 100644 docs/about/references/keywords/EMISSION_NAME/index.html create mode 100644 docs/about/references/keywords/EMISSION_RATE/index.html create mode 100644 docs/about/references/keywords/EMITTER_MODEL/index.html create mode 100644 docs/about/references/keywords/END/index.html create mode 100644 docs/about/references/keywords/ENERGYFUNCTION/index.html create mode 100644 docs/about/references/keywords/ENERGY_USAGE_MODEL/index.html create mode 100644 docs/about/references/keywords/EXPRESSION/index.html create mode 100644 docs/about/references/keywords/EXTRAPOLATION/index.html create mode 100644 docs/about/references/keywords/FACILITY_INPUTS/index.html create mode 100644 docs/about/references/keywords/FACTOR/index.html create mode 100644 docs/about/references/keywords/FILE/index.html create mode 100644 docs/about/references/keywords/FLUID_DENSITY/index.html create mode 100644 docs/about/references/keywords/FLUID_MODEL/index.html create mode 100644 docs/about/references/keywords/FUEL/index.html create mode 100644 docs/about/references/keywords/FUELCONSUMERS/index.html create mode 100644 docs/about/references/keywords/FUELRATE/index.html create mode 100644 docs/about/references/keywords/FUEL_TYPES/index.html create mode 100644 docs/about/references/keywords/GENERATORSETS/index.html create mode 100644 docs/about/references/keywords/HCEXPORT/index.html create mode 100644 docs/about/references/keywords/HEAD/index.html create mode 100644 docs/about/references/keywords/HEAD_MARGIN/index.html create mode 100644 docs/about/references/keywords/INFLUENCE_TIME_VECTOR/index.html create mode 100644 docs/about/references/keywords/INLET_TEMPERATURE/index.html create mode 100644 docs/about/references/keywords/INSTALLATIONS/index.html create mode 100644 docs/about/references/keywords/INTERPOLATION_TYPE/index.html create mode 100644 docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE/index.html create mode 100644 docs/about/references/keywords/LOAD/index.html create mode 100644 docs/about/references/keywords/LOWER_HEATING_VALUE/index.html create mode 100644 docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE/index.html create mode 100644 docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE/index.html create mode 100644 docs/about/references/keywords/MODELS/index.html create mode 100644 docs/about/references/keywords/NAME/index.html create mode 100644 docs/about/references/keywords/OPERATIONAL_SETTINGS/index.html create mode 100644 docs/about/references/keywords/POWERLOSSFACTOR/index.html create mode 100644 docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT/index.html create mode 100644 docs/about/references/keywords/PRESSURE_CONTROL/index.html create mode 100644 docs/about/references/keywords/PUMPS/index.html create mode 100644 docs/about/references/keywords/RATE/index.html create mode 100644 docs/about/references/keywords/RATE_FRACTIONS/index.html create mode 100644 docs/about/references/keywords/RATE_PER_STREAM/index.html create mode 100644 docs/about/references/keywords/REGULARITY/index.html create mode 100644 docs/about/references/keywords/STAGES/index.html create mode 100644 docs/about/references/keywords/START/index.html create mode 100644 docs/about/references/keywords/STREAM/index.html create mode 100644 docs/about/references/keywords/STREAMS/index.html create mode 100644 docs/about/references/keywords/SUCTION_PRESSURE/index.html create mode 100644 docs/about/references/keywords/TIME_SERIES/index.html create mode 100644 docs/about/references/keywords/TOTAL_SYSTEM_RATE/index.html create mode 100644 docs/about/references/keywords/TURBINE_EFFICIENCIES/index.html create mode 100644 docs/about/references/keywords/TURBINE_LOAD/index.html create mode 100644 docs/about/references/keywords/TURBINE_MODEL/index.html create mode 100644 docs/about/references/keywords/TYPE/index.html create mode 100644 docs/about/references/keywords/UNITS/index.html create mode 100644 docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL/index.html create mode 100644 docs/about/references/keywords/VARIABLES/index.html create mode 100644 docs/about/references/keywords/VENTING_EMITTERS/index.html create mode 100644 docs/about/references/keywords/include/index.html create mode 100644 docs/about/references/keywords/index.html create mode 100644 docs/category/documentation/index.html create mode 100644 docs/category/guides/index.html create mode 100644 docs/changelog/index.html create mode 100644 docs/changelog/latest/index.html create mode 100644 docs/changelog/separator/index.html create mode 100644 docs/changelog/v7-0-release/index.html create mode 100644 docs/changelog/v7-1-release/index.html create mode 100644 docs/changelog/v7-2-release/index.html create mode 100644 docs/changelog/v7-3-release/index.html create mode 100644 docs/changelog/v7-4-release/index.html create mode 100644 docs/changelog/v7-5-release/index.html create mode 100644 docs/changelog/v7-6-release/index.html create mode 100644 docs/changelog/v8.0-release/index.html create mode 100644 docs/changelog/v8.1-release/index.html create mode 100644 docs/changelog/v8.2-release/index.html create mode 100644 docs/changelog/v8.3-release/index.html create mode 100644 docs/changelog/v8.4-release/index.html create mode 100644 docs/changelog/v8.5-release/index.html create mode 100644 docs/changelog/v8.6-release/index.html create mode 100644 docs/changelog/v8.7-release/index.html create mode 100644 docs/changelog/v8.8-release/index.html create mode 100644 docs/contribute/documentation-guide/documentation/index.html create mode 100644 docs/contribute/documentation-guide/markdown/index.html create mode 100644 docs/contribute/get-started/index.html create mode 100644 docs/contribute/guides/conventional-commits/index.html create mode 100644 docs/contribute/guides/git/index.html create mode 100644 docs/tags/e-calc/index.html create mode 100644 docs/tags/index.html create mode 100644 docs/tags/release/index.html create mode 100644 img/docs/asgb/asgb_lpp3_pd.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_fuel_result_comparison.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage1.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage1_2031.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage2.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage2_2031.png create mode 100644 img/docs/asgb/asgb_lpp3_ps.png create mode 100644 img/docs/asgb/asgb_lpp3_sketch.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_capacity_and_rate.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd200.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd250.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pdsurface.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_stage1_at_ps31pd250.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_stage2_at_ps31pd250.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_capacity_and_rate.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_crossover_and_mode.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_gasrate.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_rate_and_mode.png create mode 100644 img/docs/asgb/asgb_lpp3_timeline.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage1.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage1_filtered.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage2.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage2_filtered.png create mode 100644 img/docs/asgb/asgb_sys27a_unisim_model.png create mode 100644 img/docs/asgb/asgb_sys27a_unisim_model_filtered.png create mode 100644 img/docs/asgb/ecalc_generic_chart_normalized.png create mode 100644 img/docs/asgb/ecalc_generic_chart_original.png create mode 100644 img/docs/changed_rate_resampling.png create mode 100644 img/docs/interpolation_plot.png create mode 100644 img/docusaurus.png create mode 100644 img/favicon.svg create mode 100644 img/logo.svg create mode 100644 img/undraw_docusaurus_mountain.svg create mode 100644 img/undraw_docusaurus_react.svg create mode 100644 img/undraw_docusaurus_tree.svg create mode 100644 index.html create mode 100644 katex/fonts/KaTeX_AMS-Regular.ttf create mode 100644 katex/fonts/KaTeX_AMS-Regular.woff create mode 100644 katex/fonts/KaTeX_AMS-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Caligraphic-Bold.ttf create mode 100644 katex/fonts/KaTeX_Caligraphic-Bold.woff create mode 100644 katex/fonts/KaTeX_Caligraphic-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Caligraphic-Regular.ttf create mode 100644 katex/fonts/KaTeX_Caligraphic-Regular.woff create mode 100644 katex/fonts/KaTeX_Caligraphic-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Fraktur-Bold.ttf create mode 100644 katex/fonts/KaTeX_Fraktur-Bold.woff create mode 100644 katex/fonts/KaTeX_Fraktur-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Fraktur-Regular.ttf create mode 100644 katex/fonts/KaTeX_Fraktur-Regular.woff create mode 100644 katex/fonts/KaTeX_Fraktur-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Main-Bold.ttf create mode 100644 katex/fonts/KaTeX_Main-Bold.woff create mode 100644 katex/fonts/KaTeX_Main-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Main-BoldItalic.ttf create mode 100644 katex/fonts/KaTeX_Main-BoldItalic.woff create mode 100644 katex/fonts/KaTeX_Main-BoldItalic.woff2 create mode 100644 katex/fonts/KaTeX_Main-Italic.ttf create mode 100644 katex/fonts/KaTeX_Main-Italic.woff create mode 100644 katex/fonts/KaTeX_Main-Italic.woff2 create mode 100644 katex/fonts/KaTeX_Main-Regular.ttf create mode 100644 katex/fonts/KaTeX_Main-Regular.woff create mode 100644 katex/fonts/KaTeX_Main-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Math-BoldItalic.ttf create mode 100644 katex/fonts/KaTeX_Math-BoldItalic.woff create mode 100644 katex/fonts/KaTeX_Math-BoldItalic.woff2 create mode 100644 katex/fonts/KaTeX_Math-Italic.ttf create mode 100644 katex/fonts/KaTeX_Math-Italic.woff create mode 100644 katex/fonts/KaTeX_Math-Italic.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Bold.ttf create mode 100644 katex/fonts/KaTeX_SansSerif-Bold.woff create mode 100644 katex/fonts/KaTeX_SansSerif-Bold.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Italic.ttf create mode 100644 katex/fonts/KaTeX_SansSerif-Italic.woff create mode 100644 katex/fonts/KaTeX_SansSerif-Italic.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Regular.ttf create mode 100644 katex/fonts/KaTeX_SansSerif-Regular.woff create mode 100644 katex/fonts/KaTeX_SansSerif-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Script-Regular.ttf create mode 100644 katex/fonts/KaTeX_Script-Regular.woff create mode 100644 katex/fonts/KaTeX_Script-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size1-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size1-Regular.woff create mode 100644 katex/fonts/KaTeX_Size1-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size2-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size2-Regular.woff create mode 100644 katex/fonts/KaTeX_Size2-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size3-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size3-Regular.woff create mode 100644 katex/fonts/KaTeX_Size3-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size4-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size4-Regular.woff create mode 100644 katex/fonts/KaTeX_Size4-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Typewriter-Regular.ttf create mode 100644 katex/fonts/KaTeX_Typewriter-Regular.woff create mode 100644 katex/fonts/KaTeX_Typewriter-Regular.woff2 create mode 100644 katex/katex.min.css create mode 100644 search-index.json create mode 100644 search/index.html create mode 100644 sitemap.xml create mode 100644 versions/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/404.html b/404.html new file mode 100644 index 0000000000..b571dcd1c4 --- /dev/null +++ b/404.html @@ -0,0 +1,13 @@ + + + + + +Page Not Found | eCalc™ Docs + + + + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + \ No newline at end of file diff --git a/assets/css/styles.f9d5607e.css b/assets/css/styles.f9d5607e.css new file mode 100644 index 0000000000..ff9e7ad3b2 --- /dev/null +++ b/assets/css/styles.f9d5607e.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.loadingRing_RJI3 div{box-sizing:border-box}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#2e8555;--ifm-color-primary-dark:#29784c;--ifm-color-primary-darker:#277148;--ifm-color-primary-darkest:#205d3b;--ifm-color-primary-light:#33925d;--ifm-color-primary-lighter:#359962;--ifm-color-primary-lightest:#3cad6e;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after,.searchBarContainer_NW3z.searchIndexLoading_EJ1f .searchBarLoadingRing_YnHq{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.content_knG7 a,.hitFooter_E9YW a,.suggestion_fB_2.cursor_eG29 mark{text-decoration:underline}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;pointer-events:none;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items,.searchResultItem_U687>h2{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}#nprogress,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}[data-theme=dark]{--ifm-color-primary:#25c2a0;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#29d5b0;--ifm-color-primary-lighter:#32d8b4;--ifm-color-primary-lightest:#4fddbf;--docusaurus-highlighted-code-line-bg:#0000004d}.code-block-old-line,.major-change-deprecation{background-color:#ff000020;border-left:3px solid #ff000080}.code-block-new-line,.code-block-old-line,.major-change-deprecation,.major-change-new-feature{display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.code-block-new-line,.major-change-new-feature{background-color:#0d8a0940;border-left:3px solid #0ec929e0}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.hideAction_vcyE>svg,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,#f5f6f7);border-radius:6px;box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 #ffffff80,0 3px 8px 0 #555a64);left:auto!important;margin-top:8px;padding:var(--search-local-spacing,12px);position:relative;right:0!important;width:var(--search-local-modal-width,560px)}html[data-theme=dark] .searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,var(--ifm-background-color));box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309)}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2{align-items:center;background:var(--search-local-hit-background,#fff);border-radius:4px;box-shadow:var(--search-local-hit-shadow,0 1px 3px 0 #d4d9e1);color:var(--search-local-hit-color,#444950);cursor:pointer;display:flex;flex-direction:row;height:var(--search-local-hit-height,56px);padding:0 var(--search-local-spacing,12px);width:100%}.hitTree_kk6K,.noResults_l6Q3{align-items:center;display:flex}html[data-theme=dark] .dropdownMenu_qbY6 .suggestion_fB_2{background:var(--search-local-hit-background,var(--ifm-color-emphasis-100));box-shadow:var(--search-local-hit-shadow,none);color:var(--search-local-hit-color,var(--ifm-font-color-base))}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2:not(:last-child){margin-bottom:4px}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2.cursor_eG29{background-color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitFooter_E9YW a,.hitIcon_a7Zy,.hitPath_ieM4,.hitTree_kk6K,.noResultsIcon_EBY5{color:var(--search-local-muted-color,#969faf)}html[data-theme=dark] .hitIcon_a7Zy,html[data-theme=dark] .hitPath_ieM4,html[data-theme=dark] .hitTree_kk6K,html[data-theme=dark] .noResultsIcon_EBY5{color:var(--search-local-muted-color,var(--ifm-color-secondary-darkest))}.hitTree_kk6K>svg{height:var(--search-local-hit-height,56px);opacity:.5;width:24px}.hitIcon_a7Zy,.hitTree_kk6K>svg{stroke-width:var(--search-local-icon-stroke-width,1.4)}.hitAction_NqkB,.hitIcon_a7Zy{height:20px;width:20px}.hitWrapper_sAK8{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;margin:0 8px;overflow-x:hidden;width:80%}.hitWrapper_sAK8 mark{background:none;color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitTitle_vyVt{font-size:.9em}.hitPath_ieM4{font-size:.75em}.hitPath_ieM4,.hitTitle_vyVt{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.noResults_l6Q3{flex-direction:column;justify-content:center;padding:var(--search-local-spacing,12px) 0}.noResultsIcon_EBY5{margin-bottom:var(--search-local-spacing,12px)}.hitFooter_E9YW{font-size:.85em;margin-top:var(--search-local-spacing,12px);text-align:center}.cursor_eG29 .hideAction_vcyE>svg,.tocCollapsibleContent_vkbj a{display:block}.suggestion_fB_2.cursor_eG29,.suggestion_fB_2.cursor_eG29 .hitIcon_a7Zy,.suggestion_fB_2.cursor_eG29 .hitPath_ieM4,.suggestion_fB_2.cursor_eG29 .hitTree_kk6K,.suggestion_fB_2.cursor_eG29 mark{color:var(--search-local-hit-active-color,var(--ifm-color-white))!important}.searchBarContainer_NW3z{margin-left:16px}.searchBarContainer_NW3z .searchBarLoadingRing_YnHq{display:none;left:10px;position:absolute;top:6px}.searchBarContainer_NW3z .searchClearButton_qk4g{background:none;border:none;line-height:1rem;padding:0;position:absolute;right:.8rem;top:50%;transform:translateY(-50%)}.navbar__search{position:relative}.searchIndexLoading_EJ1f .navbar__search-input{background-image:none}.searchHintContainer_Pkmr{align-items:center;display:flex;gap:4px;height:100%;justify-content:center;pointer-events:none;position:absolute;right:10px;top:0}.searchHint_iIMx{background-color:var(--ifm-navbar-search-input-background-color);border:1px solid var(--ifm-color-emphasis-500);box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-500);color:var(--ifm-navbar-search-input-placeholder-color)}.loadingRing_RJI3{display:inline-block;height:20px;opacity:var(--search-local-loading-icon-opacity,.5);position:relative;width:20px}.loadingRing_RJI3 div{animation:1.2s cubic-bezier(.5,0,.5,1) infinite a;border:2px solid var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color));border-color:var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color)) #0000 #0000 #0000;border-radius:50%;display:block;height:16px;margin:2px;position:absolute;width:16px}.loadingRing_RJI3 div:first-child{animation-delay:-.45s}.loadingRing_RJI3 div:nth-child(2){animation-delay:-.3s}.loadingRing_RJI3 div:nth-child(3){animation-delay:-.15s}@keyframes a{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@supports selector(:has(*)){.navbarSearchContainer_Bca1:not(:has(>*)){display:none}}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 #00000026;transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 #0003}.cardTitle_rnsV{font-size:1.2rem}.cardDescription_PWke{font-size:.8rem}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}.searchContextInput_mXoe,.searchQueryInput_CFBF{background:var(--ifm-background-color);border:var(--ifm-global-border-width) solid var(--ifm-color-content-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-font-color-base);font-size:var(--ifm-font-size-base);margin-bottom:1rem;padding:.5rem;width:100%}.searchResultItem_U687{border-bottom:1px solid #dfe3e8;padding:1rem 0}.searchResultItemPath_uIbk{color:var(--ifm-color-content-secondary);font-size:.8rem;margin:.5rem 0 0}.searchResultItemSummary_oZHr{font-style:italic;margin:.5rem 0 0}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.docSidebarContainer_YfHR,.sidebarLogo_isFc{display:none}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media not (max-width:996px){.searchBar_RVTs.searchBarLeft_MXDe .dropdownMenu_qbY6{left:0!important;right:auto!important}}@media only screen and (max-width:996px){.searchQueryColumn_q7nx{max-width:60%!important}.searchContextColumn_oWAF{max-width:40%!important}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.navbar__search-input:not(:focus){width:2rem}.searchBar_RVTs .dropdownMenu_qbY6{max-width:calc(100vw - var(--ifm-navbar-padding-horizontal)*2);width:var(--search-local-modal-width-sm,340px)}.searchBarContainer_NW3z:not(.focused_OWtg) .searchClearButton_qk4g,.searchHintContainer_Pkmr{display:none}}@media screen and (max-width:576px){.searchQueryColumn_q7nx{max-width:100%!important}.searchContextColumn_oWAF{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png b/assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png new file mode 100644 index 0000000000000000000000000000000000000000..07d2ee8c95711c1350623ada5abc2f3e6308626f GIT binary patch literal 44134 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 literal 0 HcmV?d00001 diff --git a/assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png b/assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png new file mode 100644 index 0000000000000000000000000000000000000000..001279ea62cb0b290286ecc16b38ce1b3dbe6390 GIT binary patch literal 237031 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≷?Gu@&hmiW*naLh2w>J!Zn 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%0Dr@ickf=UK0 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 I>bv0n3!y2J8~^|S literal 0 HcmV?d00001 diff --git a/assets/images/downstream_choking-e0ac6b7a8379c76a8f29199d7aa9086c.png b/assets/images/downstream_choking-e0ac6b7a8379c76a8f29199d7aa9086c.png new file mode 100644 index 0000000000000000000000000000000000000000..72c154ae4f13cce0b2b6e964b423c90db0b6a9d5 GIT binary patch literal 45513 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 literal 0 HcmV?d00001 diff --git a/assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png b/assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png new file mode 100644 index 0000000000000000000000000000000000000000..081590629fdec32ef2618b23c2ac8b2b9b847043 GIT binary patch literal 157773 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

>3-JXP1^3y0$N-5uTzF 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 literal 0 HcmV?d00001 diff --git a/assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png b/assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png new file mode 100644 index 0000000000000000000000000000000000000000..aa408a4e5bbe1828b0b13d557a07d7b340f08d1a GIT binary patch literal 38869 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 literal 0 HcmV?d00001 diff --git a/assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg b/assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg new file mode 100644 index 0000000000..9a1d6fc639 --- /dev/null +++ b/assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg @@ -0,0 +1,4330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Energy and Emission calculations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Injection + + + + + + + + Drilling + + + + + + + + + + + + + + + + + + + + + + Processing + + + + + + + + + + Export + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lift + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Power generation + + + + + + + + + + + + + + + + + + + + + + + + + Power from shore + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Emissions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png b/assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png new file mode 100644 index 0000000000000000000000000000000000000000..1539208055f52808dbf41c157105db23b214f01c GIT binary patch literal 43536 zcmeFZc|29?`!~L5AW0*dHY$=KB}Cg;lFZXK&zUl3&a5J(LJFBO&mnW>O6CyTCUY5L zW0QI2xt7lNbNYUt-|zYVdA*+VdVS8>pL1Gk-Rruq`?|09aIdF|@{$LrPEsKVazN_# zO=SexeH=l^yD9g=zrpy0+<<>vbCl3~eQ&aBj!t+AwBc&Zke9jrXS;6VLi7_oN*Qxo|UCSz21ETb1&q zukUT8Zj-3vMvRXlu9;$6s5~MKYU~p4R(GY5w|}5`EljNL$aM;#wYje z+WAq>ON9mqL4wWy-;H(x@&97938&m5;_KXc~#9;#!(&89pU3UnS@sQhkV zUFVX9hK7ub=RN1{Nqj=2lyBU4C>_dfg5AmajjTcMZCw_bFkZ|q??(^GLXyb$P~C3) zV33%Ycpw#BC_dZa(b4aelci&XiwJ3z=h6=(p22n*2<5;8FvI3jU*7mj7(bN2DEW$LpZcenS#6I!x(290P zA*dS9zTb#ftaqe*g9hs1p8XSFo*oSd47>`H5WI&xELn;aHTkA@eN5r;jR5&&jvj0E z_$ww(1nU@FkzRH5!F|X_*B|9aPFy(7^mIQRVxQPLW1gvNPS$>(f9*V#nM-!*pIQL zX%9wtw2ZlAYa|T*l2upU&|^uZ2%WN*x!QYe#!i!rmS#;gPVqWz#k8C1OrOds6>Uqy zAY?~~K+a7ns=c>|9`5n!GaimUp*1(_pLd!jlyZ$=_e*_yjnCiNijZQ?IPtwxPFh|{ zB?O-px7nxpZOK5W+*_K>-xc!bW4_syX%pq^N^I9=PE&;I`f*k1 zjP^Qr(DL&(CJgRFknNy(Y2!EpA7(BMr2YVBtb&SQQTv%y&aeyX`dM99>lkK<4 zHm`R-I-@%{exBeto^G|dOwuaB2|^^>-}Y|{)Ws`)%Nf7X#_mR1%-D)uj~GUf4+hcd zXLs${#ccP9Tr6qb?VHh>>$<#@a?P917K@#A*WUj8-9qZ&CGEoWm(Mbe2^=ff2nd`T zZ-;1=;62&3D(?iE?LltRwQ#(A0BiDt0U1-s<{Xh#3+oiX>95No?&b7mc19fIa07z1 zDKzSd(J9tq4PxbJm=4*t9TWJDd+&H6)Ydb+kxb=m_fwAzIk6N{MBMWg!=CilO`G>$K`B`|OdAMz5%Yvb0p>f|IF3(l2! z<7?B8Iy&NWu+c+Z=F8iIKYtXFvrkZFEXc{hpAxYbh}rv!9I-z#7FsU`#ZBiua>%@L zV*9;Uf1zXuj&12mp@&gIn^5-|1I;zNq28YS`wwWeLbeb3-SDc?=MKN`|JS@JGu!kgwZ;+?j}>c6Y?x0RuNBASH@)nyGAEs?cD!p_ z9#~p#W_I=a!!tD+=Im|+)r|EK1BtpXC*`S-diKB4i1~MF%3X`GPV7*iGS02Ehx%kj z2;an;K$DK_P?^Oh3R~juTw|6pVKaS~z2xldGAxsw>izz)FY&{x{`z~6L({OD_x`h* zZ(q)IkRcuTZgOxhAx?sWP?}RrylrT*`FdZ^YE3G3eE)^!QS7=KJSM;m!#-H_D8uPP zoxu&{W6jXNRpxVlf>%X>-HeD-JAox2y=HvhJiuj)DR#Y%D(~>y~(>O>?yeJuxH9Sv`EuJ^y2bCr?2b{PxomFyQR@g ze~&-Mm2<=F7vF_r?IuJK+KTdmi3L|R32A-9s~3jG}C^KYcZ4!COi(=aH7)VVJ?NiwA+oT&;>uTooF6KdM_Bx9of`%d*P z6G5=8MX`bqpZFR34VU5G z;&n1kGy0;v{7J()YP*C6D?}C3Eu!>sMx~*h#StIe^*TqF0XzmXUx3X-Inc)f%-?oaAsHh#n20H6!?YKL+&){nh2ah zZqob}5?`VVA6_I%rbSGVzn`E)n4Yk}9?82t^y`I|uzlQ8>|BG(FYbM2OmPCKxcuc; z>|JrQ+f~;N1*^Rara2uPKp%dRH@L+r6Sman|K?!5`8;EVr1n9EP-a~R6HPwMQp(Sp z^){(N44rwOJPU2NugBPzv6xW%K0mO6>s7g}{#d8oWl(B;X>*%Cl#`8+b4fLgNqD+HgsZsYO1qTGW}Hv- z!Dq_3yKwMYN8a$}q)&RDXV}AQ-g}iNo(%bbJm=YqFj0_n^KXcHErveiN)1?3Avm{_ z<6j0>M>7PSJm@N?e5<>_q0OVe+$*2CVaY|mz}}>G_^1#U8A55)2Mw_pjg%BNo8{60 zrO2jq2!3SMTp(OZ)VMsprswIjZ1f1n#7CNG+9S2Lx%|8vV5=`T3O?=Y>4gQyKlE}y zG*6ZGRnw6f3*7rrKHz-6rrnB$91;7a2!J+t*RSQRpr!7930U?2U4#b)|lx*3n-6uA!}pQ3bh%`1c61 zA&kCaUIQ`Fzi=VcaPC@6DO9^>>U9l2jUOD{y5UEqTo>qF`6?dAmTn|@ja{|4mroJP6g7-M&Tm64ZM`}A;+ z)6kcF5|WZpfxD2ymkcx`+j9MmoMyPTi;R!t7MpE@A8_RKEfZrh(*E*b*NOZSCwW(T z39sF|vO5mu98`ZOnzq0*W2a44GwLw0#`;$M=|tBrV|%1t?XO)}Z9PGq)mqd`naU5B zFKxo-X7ieOyFNLvW~SZcl2DeXoQ?RaQQ+vso_5NPO;&zHBX;(U*tP=2)Xj$ zuXV&O7=EcU+(<99m59q-;B|`34KCSVuSC|=?vit$?X7C2;}?w6(jv4cq3K!@2Pgue z!R3B)2;n;YZ^a6x4LQhaQM;+@_?e_cR;551^w9T{3FF4>cm2M`cC=s=Z!TR>Mw{2m zEET@8$$mmzmj3`I3zpV#D1Br8e~soH6zg05bkg_SM)JrldN#dOExKDAImJQ>9BPhi z@-ES`XoNVKG9}gJ;f9U`O^67~=Blf6M;}7APW&|-O^2B(8A17^+ws8`syQi-cRh{@ z+`ZB8Gp4t2uEwlj`({A9&WWID0rKlL*B)jJ%p2+wM%1AG{m4Nps574Ix7ncAdX`qP zP1c7G0^L?uo8JnrGY)Qdo5iM^<5L2jK2>sbESTub%9MCUH!7=v_^6d*Z&tCygfWMf zeGxD5c~7e{&ECKC)2wv)QF;bW=+>SMkv*rKH@Q-Oz3`TNWow(@#Q2;Ka}+rgf8qG& zZ$x~mYL*t?3yiy$_b2alQn5u(K{_3$MjWH}hSH0Ze9DuZS%qGkYgW+AeV=U(?|E-g zc;jl+oh;r$2GMFq<{$c_95{`O`rC^AW?t!$s_c`>-jVPJj_B%L)L%$GUu2n(3|Zx4 z5)nv+JYf<#d-#{t)hLne4TpZ`UTgXVr%(=cHGdk+LZ3rxOxJqJC?&$BV}Iviis=2I zkbVYAGx^ z+;2TU9uH9Y?dAp53>?k*-9GjFGYKNcG4sECo1mfWWgmfZ3)&2oaqdqTkRb)(yq z{a$iuXZHe|em6ObE{!U$tKE(_5wSNzho4?{i4VFh8*xQK*nO!Z`kF&WlGLjz&)C+n zSFK}$>+>Tc#-Z%00osAc4FkG`@ecd`S{+KwI4IIQbzxp#`DQ@ibB&8ggWb*lTC>dfM?q&kR1xh_&ITV`Si- zktY@|PO4q4RcculU1>gptW7_^wWx^5O{_9{E`AlaibfE{%f5*!sq*I4j}P>`H+;lw zzC7KJ{umk_W|7)lUsmtR)@`lyZhXx)(NmbI=eej#NLP`3`t+%^tZc{AqpY%DD13AP z4@Pd^E9Mc$TA)^YQj}$LSx!VC z1#Bg!a* z-;HcrEmag-ng!?=Dc&y3$w^%EY_&abIXDXQY%n=_lTo!?G%ZeecwMa~i&wX6eP3u* ziQi90#Qv}T??)`>sR4aan-z(?Zd|2-SK$fKen)1ecT+l*8kV)sJIGSiLyQmZRc$oE z%T*72Gcn2GjiwQ^L0j72Pj&;1V9@lib+Jj|6myiE9a*eaMRS125ARUR@3SNf|luW@F%Y0S~0H}~jTS`$g@>eLDREP`}DNB8NfL+?2+-rw+wadaQa z<>Z^_)oqhvOK2JiRM=bR8PMJP=j$Ka$lsBg>81_vAi`e1eV+63(dC zGTk;~N^1}QKv)^I>%;8+p^w&HwE6kSXcf&PUbR&!1#@urN1_grS5L6+$!s#y&y~!~Ll$yMUepq!p>{*3g;r3+p7K`g5 zsqU%Gc!Hh8sGNd&MpJV0`VqcdPlqfw2VdfS#77nlzF5fUJh7>=!m*Lma(rT?gK4yi zx7Lx9Nga@j#cU5n>3Y^a_Q~9)!<6g|B*Mgu+Qh5gsJk%X==#&yjdmx@&7^KU|2{n+ zdI(k?`Hh{Hcd{;XoIoc-8 zm9w-8XZM?vNwup=JWCr8-=tKL!*J5}dlZ)@^LvS1t#!yE3Alnac=U--u?HbBVsLDHm>0n%42@V2)#|IBbvO zi8e0g4L?MvAMW7b^tU>ft6il}ZKDDyk(E=RdH4u5%&iu@AFRfboSUNFX4md|d_h0{GvuE@ zwSyE{Ap^f0M$b(*nS>Hyn8o{r9-lnqDiYJ7HMBrO;Jp)qq-)Fl@zpjt(EM2NS!Q1; zw7rbk_fh|XR%Jquf^J-xup8S|VR*mSKNjvzPhOhDb6Goj4CctwzoV% z_UcbKGO!01xKB}jtjhTIu5fy5%93DxKapy+{n-27!aBx|kvfKN4<*ZB*pNa#LP0wr z+z{G4XWdhz5`t4ETCCRI%zuFB1iKwvR4LZnubM2oPa-)LU4TuW&aJ&4&eGbNV}b?9 zq>uDlXdN|G2; zkK|exXT|5Da%ZCC)<@dEp4r7$wvNGiF1&{d5X_1O(7r-KK{Ty`EQ&e(PQy@X_WHTU zN6G4G0Jvpj$9iXJ5wg)H4;ENVsz+qUybZct06Iml&qM_?`@-1sRjC&Rc{;y`h9%SG z$X$-66mzx|F!)d^7m*mi?Khgsnf#$|&B>))#9~m#a=^102=Mwsbnqo=Ln#Ne=82rp zE}^L&wU0+mk~~Yc0; zJjxW&dQvC+#3L@GMh30k2KM@DG|k7VpFmW7cmxZJqq$^;1|!VVk-KC~xp zGO}yr8I@<3K_tV)>sB)gbG~}I%aLJmN`VmgPC=8Q<5y4NG1Y@ zeeNlh)g?|~9pbYCInEc;euHL*qe?U31SWD)V}lFLri7h9hC02fHJ=~w3`uHVii@nc zGH~xK^0OAwsmAiC<9ZyuYTumH)hMrU6+DBt;vlsvDkMD7*m>-^pIxy9&P!uJB9wlO zO(|mhdIhsj>^O(grk2x|W3Gi-`n$9R$K+BStt!{dl)ko`(7SMB4kBl1#2L;!jb}s7 z#?Ev|$&uRSCHwV8WtKDh_a`3HE-58yAZNeiuIR3w23}H10v@lWr3^P#QF2@WWH86;EjwY{BS9L(jg- zh$60NBM93~w2+E@SxWl=nbES#v%_RaR`;hHOyT<7z{r7q3E;P= zzLVBSuN7WliwUJt!?Ja|eBOhs1<^x$xPv>~7DsJt%GIN$k%7CJ=+o`BS)C%T>eF80 zU|t+Hf}2w+$jVZLzRL|(3Vlb1&apFe-sLSC?629z6OtbTri%cIvO_yLBa%8LNyh&8Oth!2@lLJP|-ik@b-f$hG+BjD7+E zUffjzZ)iJ_9j>STG)_O{^^f0oJL6av2|Nd(F?)USZr-o{u7b^vhEnaL+0VDX zQ}{&V3Opp7qE|yFbo3=xH@#M)vAYO7RFDowmMjKN<%|R1HeU5e87318L`&sO-`7dQT37D8Z`Y9@ zU0x>)g}RI^+?TB*53U2=dLpo4-chBu7gry99vai7VOG9$BMwx&*ttQ%&J8Y2&%_Pe zw&2BunLBDlP%mH(pAzD#o}xQreK1kgg&|m z9lLL#s%=pFl6W1nlt~2*AH!Va&zs2a)@%#=%q<>=m)Tq=IEqb(uY0oyO<|U9{-)Tx zb$&ESdeJ2L+&QhJ$C;z!ruWCE)8$m=2)<>^9tu;)>n>2>YQCRP z9454l_9(#@(RdpY7uu@VOgr}fOMh^892WcXG*e3@MpXBmWu~es@a@XFT-M+7qA*Z%OG1n&DzPeg16b+qX`Y+#WapL7BB?gf+2@7%c;KegujrTwO^ z>K-1&l|9Xedhf#-?siscKjUPIaOx&hFsS$J+8;CNj6_1lLdann3{leH2MrX8@83)A zJni&e&jJ!8AUQR?c|BhiZeVp7)Tkc0=qyv+Y1PBtkq@2AoZl{4Du?$L+6?u=9X?9L zqZ8>jQvFm5>*nhrp90_9xH1TFI-yZqw2O|4{y!t71{Xe$c$W`22pS=WxKk^%t0mu zu+`ism-?%pwzDh8=a~O%&T6MLN^ei9XDip6s#v*2YE|(Ajet<@=N`>g_CKLdTytB5 zKJij4KK+IJvbp`bX-|nqE+paaaH#7ccXyMGltbN<^Zv~MtqgSJ9bQxZ?8nsG9XSz7 zL6n63TsKY7)4zSDOb%#Yb)A!0=-dHwggID$7^SdW&^|%uV;*mg%dL_hdE}+JU5Su6 zzxn6%PbLbAM5IQ|d{FV*FwZ;fY^{JzmcnQe$B2w5Ff`lQ8T-ohVjMpbUjma}*wdA9 zBfk@1ve@^`fmuDLh%4%&`+vOx62UG=eei2!yh2$)Ckm6HXrX&c3)-@gWaVEnhjJWB zeymV+SKu&E)*w6p+!N1o6HPgeCQQ`QiuhVmUBA|1=WSTLBX(%nIGu0ZM!&YY?t}*2 zX4P@B43AFR6I`VdPrtB3e8%g5SG{?FAUY>(s|a7^F9LfBFD=G^ZZ7qQrS`2akUnt3 zu6K;IOzg~M%(XZG79_MmH99e|K)j>MM#~B<-#MEc(}Po)v1YPYFbBjK#L?$E>-Tww z0~-XC1mQ#c+eUs1Q>Zv2*k-*GIeRZ^v4M)6+HZ3)id#-*?=sMKVhm`0*Q+%>UhV=; zK&m~|Z!Xhoa16kRPhV!IXNA+G&zS1>@Z1*r>M+t;xuy0V&L&4*#1#Py#?))2`Mbnx z)%+2peal=rp;rYBkxq_dR_TO*U5fPHO?XA!N}rSgf==Bsi4TU!wF5us;QtWRrjLxG`QwD|{wBEjNNIZ~F4L~-vz(GHd*mCBp1B9qLF;fFPR9Nkbi zGE4e<;VLbLzcR z2z%Ibf>S>uH!LZGfd5m5Q={$FRwpVktQHFcNXqLNDm?ggFFEY%Q501PwcErDP|w*F<5)B%8+_{(r+$W zLYss5vcaa)f6e3px@`y_?>Jnno=>qvXyrMNRyO~gDa;*jSf^$Dx-uEB9C0LrP#6xa zrqAtfQ=zjK-x5MmS3wV{Gw%ex!1x{`B<~0lEWwYOljmRH!z$L9rIJZxeBPtN)lU)R zWfD|wg6TI!P%#_qzZV)dIeQKiW|4=PU{Cs-Mgc@HGt0)>tIn1!9kMdraF8vR9x0&X zycq``ku>}lP4*LWGFPLVSIHyY)EzK`#a&SJcbG>eu(YgAlz2%ymAt+rtlO;bp*o%B z0c#C8i^F}ofpXWX7nBu?3~p2C>NUG1`4?SW`;1=v1XfdAiEz(kS}zBP?pT+;^zV%X z^r0i<#g#moP7__Qp}wA48qb`ywXDe$M-hS?tR$wO^*mdb8vp2!B-TLHi`7hL0F{FtLixKzl-uxuT`vTq-{*s@^^<#8yS&MwV6!nm3*NDW4~Ue3(|^( zX&v2MYRa3yy+6)EqKPr&!Lxh9?%fUn*k*y9l0#F*RkLl5mSESY6KdznEH!(^KgHQ5 z5g_LQ)?N3wcP8OGtYI&WmC^3_Kx@&J4k&^MK;Bfr)UWEH%62GGGqf}@|DTHeL2T#E zl9(}FAwM65I>UN+ralmcc82>ApM2mr^bP=Lg;EnA`n9eaMTQA2e}L_Z3+*gM$n^UL zuh$9d0fpB8ZIl80fQ{$_x02L~{X70j>`9t`6MG&_?2^8X0o{VuUtwT|OxICTwXN#i zxlpa)q*I6a5N9a$Ds0JR9%OPAnI(ZUy_T>dysx7de$ObDG+&Q53Q5Xi@CWU_86Y*X zrTc%%>1}j}uut#L44X`48N6_}I6Vy#W*`3+E}xT@ix%MSbs(qIcW`(9X15G@z29v-FHarl4dkN)$6#7SPtc}f zt{N&F7O}>(L+=_I;;2KlJISOeDP4tU>jdSS!2KgY7Z{E&5b+smS&_AY7fY#kv{^58|Sf(ucv$SEcDg}!U9lTL_ZGS#x)v0Kjo5B0HX#chP# zQ`q8@zPC*W{FuuTr5IuP-}VUW#I?Mk0GSsjrD6olHsw?%@wYPvFu@W$`z()kv_#U4v)hh1}#p|;drf#+D6 zrPOa;bAsLn*2O(NE9DxaJzKad9>Nw6*cmvOx~WIWKR^F>(@7s1*tGayn19-zCU!l= zb3Mr%pJd(p)pz&YWzgFU7AFW6?MV&Sa`-GeWi!=tuD+)9*(a#Z*|ug|rCM*J0*ZQJ z#P4+CZKOrzmDk0>!ukdW>Brk)`?a4%skt=}haVhb*%aR{vS$gBL9RW2 zc!vJAtSm0~PECtzmPYO!X)q>OSWM`9y=Wa%vA3VQ#)zC%pZj_9B1ZUzNU91*u!SC; z<$yZTrSg$c=5d9Bw@eAL@rssXM8s_>)^>Vz)5W|dAX<7iEI`-JCx_4B-Wz<%XH1q3 zMdw2T_}gEi-z8Z4^h(Id_{LX*1725thTW1rUaBgL%J+u-cPse&>-`@Guiay^9Hd~9 zQM^1to|~JCz5n~iwH%DleZ{u6wt#?uwWb{6U{#fTw1C~x@baK{>(ewO@6*G9ZKa1h z3_;2*K2-}>uX%06H#SG|qJTD+fK^cyW`lCXwdR=_X&o^}h0Hjc{!*bl@ z{Wg1ZX73Au9a>~;m)OXv&4MCHz)Lv<$5o}xf54*w7A5^;5D$Ih^YU2*9_VDQKiaF@ z5aPW~3{L8hnKLOrC>9tG>m*e^rv34OQw4_Ad!rQlc`zS#S^6B!OrI=csf!Q7>~}9jRd2%w9Q6U=^55I+xL~aF#(WGli_FBjCHq~;^r5xY)B{?gCJ!S##2AeC z``y?G-NVAlnrZOqA=YkaHzb=O3M>cWOK1ctfXU@6+diXux3dSP9{EbS`%00-X@OvF zhxqHeV&t(Y#C|~{fDEY4h4<}!cGNAl9XAO|#XPw@&p4H|OFqXcJ~%^H{gpl7q~dF* z+vWJBVz4F~_@9bfGDaO6eoE-ZMHp@Gx>S`myuK7EPc`BOo5G>%VO2u6t72~d1It^f zd7uIG`F%{iFvX_4IJHkrtN~cp`y(P~J61<-&j;J`lS92#Z&URv^;4l89a4+5@pOrV z#RddjW^X}PA%Fh`=tIF*+&t}EM!YSSjnXcMnb-_t!-71;p*?^|+F%5q!iJ1Q`@01# zbP-Hsq(XpDcW@s7qCVIi-5KBPM;AxC96Y`+EIEpSm^uDk0L2MUjyK<`$mB@460nM4 zmA7ng2#Pwedqf$1nP1RSKRVJ1Ten_LcH>~*XLP$cD<8FN#s&hQ)z!^Xld{fA(OM9f zyP$9Oxm@J2f{=tF&P$c%DSGkUzw;jY66EH2-~@Zmf9*&H)p*J|Yt#OLGpDXGmM%CG zT3@j@J*D>oy|(Ns{s!8h9Z1k}CWR#qD1%A^#X+X7JfT{!7=Yc#NpxtBVSmfC9rTnT z%KKBT0p~Ss1S%DrF$f6DNxK!a5DGZ4oz%9$%7{ay#atg9R9XBi3uMi9+ccKARBxnd zv2b7XAA~KItpvC?qdy_}^ryJM(nQ|WI$cx^(h&QSh`tz4aa{~{yz%&i#&GRk_OAD6 zF$C(N&|N5lowi9PK6t6OKN3JVsxhN1fT1z*n^#Y02$vMQKC>2dbKlS%*FNX`rSkZ> zJ@Zl_&dFL@9W!LrPkrjq=`_6a52ogMjNR*DvD#UOg1_L&LRZ@qY4*gv!SZ#NEH}%f zpEt!u63_wNv7Of!?~&Wk0s9%K^P3+WBZ|ImLo>sKwnjdN z;D*|$o9SXJ7Bos5ezhxfyZtyi|MfhmEVb5r5XhW{8OOV;>ocfz7((_0rClC_WaNyo z-x1RDmCotfiJwCeZM_3kIA`K{1z`?bw^I4Cey!hAuXgk|4Y8XjgnAT4J)Mb4z{-9J zeyTG+Q_;SbX@*@pCw^kUE;af=Twqy6q=PqWr#d-3+GYl#SwwKZ&Jgux%>k-Lao(VNt91mN=;vM$DhC7#{ZL#sy031i((IWAiBCFOb;mT4R zv-#wMYLr=niTRCA4)I<#d9 z2Cl0;<)R?76pJ{~V)6Xo9x{Zf4;2x@#vZfj@37$)8Lr+2FF0z2c#3vsALB9Fg>Dn9 zz%PP$mwo_vCRolamK{o)+m1jBDuPq6uyBzwQOjv3%JlI-rQvdo z-!Zd^jC`Z7zyd$wOOHO{*0c5HPB^|$M=MjC;T$B{3{Vz{XdfyB-$9GOEo;%Rci^iq z7dU)K1dUeIyVxt&qnxL}b`}CUtET}_0!TfTwdjVd9V#F!H04AU+O!M6(%R97x|!_e zZ+VJZmI58XwV0ev@{K^(iVx?|JuJcbGc_t>{&;WMJk{L;q&iW<2c}a9*Gv~=cBGD6BoQ6ov*wB!dCWD?Or4{O*g<(j z(_ifBlZw&+8@IS(D5l26lKa<|LO^MR`=Npo)BcMS%RWncdA9Cm;Zl4poZRct&2-ikp15GW_E)`0JXF2IgU2znj>{Vb(T%jgDg_X*8hRKV)AM0-&8W}O*Gk# zwTnb)>kEAYj^-mJ8ffx;Ra;4XvECUz{n;{`=@#ohQ+Fb9y2J5{26*_+N%gp1k<(xF z{(kQ)(-^u5oL`lX=}>Q7Q~~pd2T1c*{Z)*YA$m>2?QD}cElKxp+!uA_lu7Ngx#+RRy+haRuXl#Iy>}QzwT1J)*zXokUh&T8k$rCwO<6A@k0(3ZO)A#Ezw4S!p8)MeE#6b@Nd3P343jB?ts8BwPOBWais1?{Bp^Qb zy4?DBfqc}NJ(F6r^)`(>ry_36b1!6t@wI7#df)DRvnG-=+Ukrga(i!i#9*Bo9jy?0 zbJ9vz;l-c9%tZTC$EGL6C_qMDCiF`>pmN;xGC5JtV(A@U#=d&{zE8nYVAH!cBY4EL z`3~jjL+MM|y6KE`Ug>d7$;TmN@>&LH$eu9C2T5iPMy6?2lo5SiZ-zrT-2~GP!U(?>0aPeXnRCS9szeXiD_vTh%B$ z4q;X;S!36AsPq04lj+BGdox~NWRmKcn>^2AGXO$KFduq-{0%?chkHLoJ&&>DZYwD% zv8$v!-+PeZox$b1SazTJf;Cb&IJ~(*O|~gJdC;@piV4=RW#3%S`XBe&MAUUp**dbk z-Fw98A_VLb;AknY!AAsqw%Yk-t(`t(yKo6N_f-ITD}@%A&-Cl@iiLKWltglYgYI4L zz6HsI{THkr`~$1&C4fZl;N$0q1jO8PD;Oz(qhI7#UR*q)Ig%J8(w>=9nNc=fIyq$t zUA-D1Lv?YwY{sG?goRzVv;Yu63fZo`$7QL04DK)!;g9RbmL`r=>0i7RWR!LeimLr0 z12JclL;C_$>@YcPRagAp8ntX2@WZx!cy#93JFP-#Xy{k)lW1E%LCA!o2d>Y9f?9#z zuS~W;;f$nS@JMj=XI6IaV+BvLSl1 zmPHEdwva|e&lL?El#Y+C&N@s>vkX?JWreHXkRpI$GU-f4c zd8J2QK9gk5tLMlmPgo-LPBvYt>Tv4PWt9TIQB09dKM(?@(BQ88q;MMl_Q_Zl9E*gg za|N5XLyU`w0T)tFif(7@EYE{z@$4zSlRot5s&#Lvc&PWLl%1+2Xev6FwJ#i_ilBL^ zJ=L8rIa9fwU1Z&RUMfQ|{vpHtA7r{-tD~lmV*LN72S+Thx6nSF?l}V+sET)p<`cX| z@u%gn8ju(~sC|55Q`f1Hqy}mvYSY5M{7kju=nj@>$KyxsOSa}5Bm+;knS|?xRX^pT zrstf?!%H5t)C!W9ws%+kID?O|EzdlgoO5}nB6EYONRA`iBMV?bhKbB%SopwI44V~t zyydGw{aK8lbBDeY9|aubl;iJzJ^uiS4hI2gdRI&+2p+VQY1f1FK#fE`J^}lf5|M{r z(WW<726f1sqC^=iO=b}hJz=*6fw96}6g1;0Q8vmo0kj8_$$#6@32iX42nfN^iVW~c zC9Ao>k_BJidpcWr9Q5OW-kS7|-^J40yAJE99=yv176f(_4~D!B4vvemDV0*qR3iZ7 zq)y%STfNeqw1*_%{0Hd1*!zMPZHGpjRxiC!dZFE0|3?gy*kpjlO2Ah3a?@FEZtk^- z%p6>mm#0*Fx$8VG-&9WSt&pa(pfJrL8vqYUi-TFXdLr(R>bt{&AyVx?w<~S%KP#vU zDIz^ruPNkEO<6hsTg!I9D_c5t)r{A4m-OB>ykgCCCiO&Ooia|-_yg0hC5ciHjPn5- z@~I#u6rSdJ@B%szrgsI$*K_}vdlpDCk7(a>LI>h4@hNzp-+p?vmuDqfRzGa5O`^vv zJZEd@OJQlZR?;vD?M9v9PHp>&CBbcQ%3U}EYy>E|j@%1G1rpO<=N&uAoW(59LBQP` z9F->F`*NzbN{L`t|F%IPIO)SoY4MLB46S3bRzE}g0Ly;V?YGpwjx%qj3Qfm< zbmaVD+kL~kQ2X#0Day7|35ct6TS}Bmjb|^dERBBBTCT=|16$YisiZZl2b@=eTo9Fp zLak6*s18C)!WPcyZOH`%k)DPf>+j9;i{owL5d4Y0lKd2f*lfstXm&RINcye#*1;TA z(An)c$ynSA+p|S zaPwLB;A|^bQ^0l&5;hat|Aen>3Rkxw>Q{7oN4<0zLhb4n0tb&4SdJ<~Ctg*1?uaJm znKRcN###t{@I?&RgH+QLuUq#NC`Dbh#$~Eq#LsTg6`wv+44^H=I9_QB93u9Kqtz65`ya;wKRcQ@pWf`w18Oo<6r-yz41)yS>xTVPQUKk|k9fI^?W@ z2y1j|#Zn4ACXGD%l4ImQRIJ%7+|$)7Hhk-bBmenA@c0#!Q`}yAYj8O&Q8I}AIQ7IU z1(7!3h2HLJ;G%{Bz5)`%qVt?EXcTF2gQ;b;-tWfWXrTQulJ}(*FWSzZpTYqrCGW@@ z7P?J>mpTuFRyIPYRGG_+NY3(}N7vEK?WDjx0}VQAF`L7vg}b0Eq#r2LQ^Es5z@s1| z>;!CIV*h?KOEc+GFBzc(;Gxn%vw$T^?fR8{eTlT*+v>T!xt!NaDg~>&<4FC>)3SR; zgdN-q)Dt*hQM_2=PXosy+U0^;9%ieccE&prATUSWb7j;(O%CO#@nUgbf>B-ICUFr? zgk-qR{|ZSu!XiEX`)Bnv%z=8Iu*%;B&dDn*Qlrm~DQ=29+G!H%89?aC=pO~o^L31q zB(X_y2H(7R>JPo7v z#9vXiYOoe~?|h*YUixkX`b&w{$Gn0cv+J-Sfok3{-tgcb)f`amXV9YyXDYV8CLYnd zc>lvQIJZ@;p%SsLYGbY`R!7>(Y7ks*UTorT(FGk(nMf z5E($?)gAnOi{QRujv^w&zAu`AwAkB#1D_<{%&ZS!9ZRfo*q=kv@PV4*CewUk&^GJF zaO?KEQB-q^7?T0}FV~+BC78A5HjehZcg+Oo|2cV&(`4_fod)Cb=ebqhba4*M@_p4W zu_;{mUrof>H-Vuh=ut-oxjA%leOQ?Mj#o{jxegyDmf`j~;Fav?K8b>D= z9cN^dLnqX(YF(?q4`;ck_lTc=&8AZ8xSL4P$|mx6W;NG*C! z&G~CYHilKXU~)yuI$}GWy|A>}k#pn>B&u(T!x+1;@Mig7mBAEf5-$A7ZstQ34(P>q#<_4_nShd$ST~O~JoNkMU#vV2yHa0e5`QTu#kt9ao z9@9EGnd?W0p;J96RQR}ZR!VW2Y|P%BT=zWy+(Bst!%Nf-RII+AVJiq`O#J@Mvq#|@ zK&4KT=UZKA6r^Nintt6Bn_gOst1GBue9f#&>zc9!{)@VkE-xF)++^ z%C9M+zK)l{&j0~aYX66vkUpjY=TRaLKx1>r5JU%?`wMKStKGF+>-QmTmS9f+^1jIj z@FE>4m@>fR#_6Mzj5`?iPz35A;CQBcUaH5FT~4&sK;vp2#UAjlzWU&rsHPB`0pCfG zfrJt?{F6|JvsOQg9oZ;*LAz+`ny9G9%6nyHWn7x#87cT@ z$lPdCYJ$Ww3pn4j_sCn(&PpbouM>UB?z^0!$no86lP;W|{Ihdp=l*E3LCuX*pMp>J z+ofi>ly^BM&42!IzJn=m_sLRW6nPen?Cc zyQ$HU6TYezeiN^POgf zQey43ob8q2AXMclbYHd+Z)iFAf=PCLc6e5c+og!yxlFp3+(MKj^QX!r>vDuoJnOpE zU@w5{H0mO~`V|?tkb_nPK+9(-;IOrcrnj5$As&-%RQE3VVUPAoMZrp}Nr6WlSUqbXeS7G}KK z>}_}x6`X%uEjrVO_*4M@0>g__+!Il8q11WDN_3yn+kpr zph2gjOF!sxs)niT&%Z?P9<8P_!*!iJ251RJ7(1=m_-9R;9;(f92=(*sUR?#e6koxL|7vHI+ zQedxl7|i;7@Go7bZ4B+KtynMQ7fxb4U!Fc$DtZS?clMAtL;mgUtjKmGSKfm9XNFr2dxJ*rJrk2lBZ+%zepZ;C)%Byn=3a>98d)n6q@O*SblY|hJwxd z@Dte2p{tV6Ei;wXbHc_*%gGT~!gUhj#r-Xya{*iWPs2~c%M;5y{PLg7$)p3f?g)c}26en3fs|4%b%f~0EHAmJabGlpxJyQXEr<*i| zxeYyKU6{D%(E zkxdt+>~}wUta9dv9fdgE31PPaIF)%$>f{yUCnx!B-oatt$+@OWUB3H{a;4by?Tn3J9k%*TxH#etWbSKM04;Xj~TLpus2{p}o zbZEeKz0+&Xm7_E`9LBplF~6&TgP;r_ssIzZeYj(<$}U{IrX~LHVMCOw(6OtbHS>-Z z_4aykihnx6I}1hxdQc?{E*eIf2$QVa9La|VRF5mT+a_9p9`JPg6=Ajj4NaO}g6=|C;fw1w z^i&;fKxCvA54g#Mz}aFr@5?4USAPy2*w(_9Kckn1c9B(E2#ZWh<0}9Pr85XCyRU`tAwVB0w zrmU>ohyOw>_rieX2R+3N0<-9PWWSC2tMhUNZi^FD87%0eonDfw=zUlWJZ6i{^dEU-Q-Y3zhBFt=TMW? zF1FbO#U4;=;OT1#pn7v0qiV?GL?PX-z0@nc-a-E!e;%1{q1=e7uv8nb%c)fUHi}b% zE?Yj*b_YVe&4U9HJ)4W_|BJM@fU2_F`o1?7CK#ZA5=uyjph%}6AfYr!qX-BHA}Ngp zN=r(2ZAu9#2|-#w=?($u5Ts*&b8T$=ulbIm!|fBqKV z@YCfS-?b||BQDD(>VY%b`0co+uR zVphSBizXW9N98-owN#F>XmvbrjN(_QE(gTs$H=eJXeqaE~kGzJ&i zyunzCpx&Fan~AFny$Pqxv&WXC13>erjFmPR;L&>lz77n|T;h|zxByj)?%@7+&Re$C zpCfVpL5-J7WQjb)pc*7FvGSadn3;=fm95&t!a>-Z5QUBx5Oj>ffcXF2MX*}}$6 zEMh?xttr<+l`I_%h}}uf{z`Z1<5x~MWotX}Mp7QubuP2s2a{jp!msGN)72Y7%YcxM zobXQGeBr3?@~%z4c|lg`ss^ii&W(Zr+lWMHwUr6E^sNeBXsB*rK)_PU$xkDo-r6;H zPpKV!(%5qX+Bp_f_hxATA842gct%=lCEC%IWe;+PI1DAmtp&%emn?x3IZ{j zU4osuNv0jpkBDOZ)Ak^wv6+an!#?;H4<1?tY9zsL-=@OUH|c(N_slO-RJK~{xAHUT zz$Sqe&w!Kc0%u~gP`V}^P;5Jgh2-(U=T|2J5<4?BO<{RMAxn=W9gHdZml#$Gx7iQV zO(%L?c%*XrtY3De)wGo3i!CBq`WsFfLigNUa2rOje?l)=!+k7aM<|$4Tl83reiPjn z$OA6yKXSVLd$rfffZfnksICj*0-$;qr*Z4pGuKQaN za7}G(j8$zVxOEoDrC_?MZmlh-$;x^|YU%u``hdmz->ec=HK>!}6+9om;+J%-ap=y= zJjW%nMNHXvhhu8hFe5C_iMcN}Zd#~SIHODU!lQRDcju`b#+YV|fW%Be zyV&{)<^H-8L#3i^zR3O_0;^#G*xU{wc9kf{EzQJq%7%RWm`6e6B93nXJz2;TdH8A^ERRO6=Z+rW zblHC5ytC2;jZUUxmPO6>3zOdxtf2TX4lpkJ(&EV%eYByZUww!LGXB&qkFWlwx(Fq_ zsFIq<2)kssq5NT_skqEexXk$Zt6JPMj=MXXD-+uvVL=E;gf%&OnQt%k8_h4S?{bNF zK-HjH@ArQ zY!S54ySe5=OYO??nklIzpK`yn(u|!EY6-&}hf1`sY0t8AzUzVzJ#Hbq-lU`b9nPXt z_JUf19%j)G+N1Jjo4zgmZVIxTy%9|eA6tJ8+x7YLJ}0Da^4c}sf2@xEn)TeodfuGx zfVlmn(y5FML09;(wm`#UT2R~ym)$_ zB?;VUIp@MtqTjfWwBD6`a#8rUB>`6x&oatE-SS8MiTbX0IMlx`D80@}>R9B3`&@{J z`wR^!zb4NwmkiCbS(kuZCB*p|O>m69@9gfabZC0nO}H5Jz2OdrF%&J^m!>=;BCxl! zFFx@mv8Pf4Eq4!IcQcX#Pzz^3H2k(m?{4(38;g{b2P4%vrucFVTj^C6Hd68GpBpp} zL9xRlsaPqL`DBeXsYH-@5*mPhQn%IY1*rzTp1Q_L4g1`N`AedrW^E4j_&X;$Tx}CU zDWcEEaNL%M6T`#uFGz#a3AO*=8(g5->^8Mv#<*B?>+aB+QAU_G{P!bt{3>>&&(s*X zzc)O&P6%7Q&71K?j`YP>qc3JC;0^>oYDc|dkb4zCpGl_UGCk!@DO_84y|mq6rU~Ud z%%E2X;Zt-{jqZX8Q7NcnXX)jURF|0RzblC8Hm8O_D8^jxylN|wb6T| zw`7_h^gS(EVIP4+r8R3{!u}u#_93rPo~pB9By$rmsb7|RpoXRId00H1BZ^(S>5BJV zSLrt_;#H5%rR;1GO(yoy7D2T$bVErcxzomE@t2pt;luZ7vo6yRqdF6pc|W{8<`chW zKsSt^gcjdcv()2k^d*?jHwECngiF=BcFEe#Vom4Q{ia@tM1$UW>)V9k)$? z#|CQkW~5e!9pP>Eky~?j*d<@v`iUBK$tJU0=8KsY;=J=dI2|w!W3Uq`LUj-NVsaj_ zMe%`f<1y|N(s;mT4-}J{V#4DM#I}rwIy0gDUix-6UD`Y0Tl5W~Z9aP?a|}GM3REO3z034Vs~` z6Ee|`S^!D~{KflF?7Wy9Y8}EXE^sx6#oY?LI4SZqt^%G`gP_`e7W-3A7hm&dIesrVLNnYdQ{% z-NVa*9A@(Pr3ax~hJ1aGm>+B@boZ2+6uD4r<(zEYv&2t{D>rO4oSODsOU2XH4h{=| zJ1FXo+?xLiv@<|mWSI_%;$tr~Od0tLe%~JHHt$r0OL;(x2dNr+d6uh5>b>l&dwdt% zj-Vk{1a-qEA#-<$mc1mPT86RPQ^JrnNA%0>h^;v zYcV|TW5^8WQYXOkM@^d0EY$m2)1#Dc+~C1?+&WsDW9q{m&t*R4(YT8?)yI4QsNpY; zKKU7}M!ZD;OJWxUkJ9n0=q?a#ppXu_(@pbstKO|D4N6-_`Up+Sn-C@izw%Ofew~(- z@~jabgWDwuxZw*{B?Vn?z}K1%^-AEEcX&r*=RwZ3X*;RZ>pJ}IcF_R2DTCPg>clPO zADc5OxYrZv956Im10t8-r|Pl+Zih~aREAUyk6VN&8oty*d0kIejXt49MO%R**d23@MS|X?Vh^pFpXZw^yghS6^cr7YfO>>lF#zb3H)cZz5uB*p3_AFu9=Wr<+KUkeEyahQFtJA7fQX#5lcCm^{{yYPW`nuDvBe+dg zQm;dmL7^9B!2vPPW1Grl2AYVT1$RsaFYCs;BEk7qg#tA|h1&EE!~sk8x8mRnnjNfd z3{!5Ahr4klhOLT`U1=JALJ3gddh2_TMi%Vxgvm&tASt!w%>d?L)+E!C{zrI087ss# zq_i;|gEqpGulS{NO6a51!LkY|1h}OEFXXPY=O8yc@IF)=GwUhQg?Cj$rJSpPBHy;~CSP!mglU;;3B1tIa2rI~*Obis}4dUB?N)x(Uh{a z^GB9-BemmEd4{$wTkG`{$@3A~mePP!VOA(~n-*G*2d(P^m`Mj=k-Fi}3oUD@wW$4Q zW??qAJ3Sp==DZ+_5=z$*rn#XaO({qyAs$eN&6EH&HN`3;$)#gQF=t*rBY1UOceO~a zJf`SAODJ1907K6rmvuo3pYx@Q1^Y)P|Bsw+#unQ#cOHi81`in69(;*vUM2`itn)$P zzGS9&G0|}lMJBRx2!A8sCC%%j59QErx-S%JBG{^HU^1i!H?9SmuY*=UXH;iA_AirK z7m&P zO=I)yKeP%wfdO_Krq|0#H|MKU@^QmgqHIg(3)FyAcx@mh=a{+jfF$8N!;>N(M&!=W zcmwe0dTl>+TZ@F9KoJZYosEpNXjE8-r?s)lH}-6zkGoW=$<_IjSUE zlrCGl&))+q_U`1?`Jqup0JUyQafC>m6!`izAt*>m6+NSC+s}0^o0wMc;cVlXknG_|QYg1wylb-?8OGY{sBGEUT1LCfd{xaoH~awWE9uMI-C>XNeN!C?pp7u ztiTpXm~6$3LiH#|2l|%C@!J)3*O6R4W{5g{-;AFr!(LA-ck3qSQWbo4kYHFBwt3tU zm0Xxr8ykyP>6q}_$Kk(`5X2cnew0ZAjpg59K5atM^}jRA3VX-_j-sqLq)b3o$WIMm zkHAlQV(z#PLlY_kWgCc6+jj+j@{O!UYIE493ExV}O2fME)wx&4;r8mY)B$!nh;g?> zjOgvJy7O@r7Nq>sg@WJjA5*F{#)WYPMuSna9#S~nbi|~5wD0IcB=NOmR*tM z_hpa)ie}w}V#0M={47$hgIVOX&at@z<)=mDJ$LKu-d6|%N${%awspJrSU*I8OJ|5 znFE5+|Cgc_Gum6uTkVc zvu7O|l;;+AH=RcrD6JgnC#XARbrdAH1=lqK;viYBF_ivp0^h z=*Ol;M#>%xjkg(s8|+MKQ?A1l2-VCI5vkVZQYpt>!RJ&rFb5sMv2ooIT2hC0j_@n( zSNLKmgjSv*TO4+UTS^}!OBNi;{Cd6%2gLx}v}xh3lPpOD!-)T;{;)5e?bmWI_3ym9 zEpyZm|EhL}f%>8$G{!WCb9RNAjvbUc8iCQRosdi+umhne!SDt2aYm2^l~Hm_Oqu&Z zXGif$l$1cqA?Oo9O`4rPKw1B=}llvdW| zBQmS)rMKxfN;Kmjg#V#5ka8f`5T*k(*jqeBIh3yJ03FIE7pMNoCPlJF0Xer6CpWdm z+GpLrjDt{it4%q6JGgkND0I9i(G9$un=pi>mn)D<8~?m!P=psJ%&euL_)a9t@Tn;AwfO*m9I}Mw) zl{LH^dB#ioC=c$ogiHBpb5hMVX3%0@VMvZv*oXJ!mcsriG*%RUc&s0s*@dseUI2B@ zKN;N`%5kn{rBWQFNJ2Jy1vrS%-@!wS&m-IRfP~76RAIm)8Wq0XUIjJ(~#*Z&H`6}f@@(_rM?E5ZfKCHX_4?hw1$PquWKnP)>++HC$9pVpDF76+<G+KAuQ>j=)7MqIoHabu4b}#^ znkx7MG60=<3apCl64m;v)kLH1LQyS+U43Z1bNxAE6qs+{E6I1#`b?Fc$oVf z@JZJ{z(mV#73mO-vMb+EX{i!TkbCVk)wspyL?xvGO{_hMd(Z~pE0yO)s9JzoIu0Ku zK3QPaI&B>iQMHQZ)at5-}oo)?NA^%x#-MaS>X<9U)8S}$z zKMU_HvsrFCwDzFIS5Nl$4)Sq&x)esV=!ZP&2{}oHSu9{A^G~5S?~PqBYLc%QZ-qv{ z{Ec-hG~e03BcV}!vZ75hgY5skq+`l$Q!x(8jFVvpiK z*b2=3@;~{UKb2xJEiAnMY+x=-rAcSbvxA2_{t3Q!A|v7&^h(YLqO&{*J07-|pqJ#I zsah&1T~fX~4Mne#G5;lKi^#f}H@!lg{MJ$}45IA1{jPHjL3 zW}NEf{5Cy4#Qbd>sd!K5hG!M!WE9KoYMBkiNELzKz1sijxH}U4mN{>k^cOzHDy8`9 zxbE1Xp76d8W=h}U#c{u&(IPwfRs`Bh3+FTqkq%;vD|K9hU4BtsY9a5x%|(6bPE#(N zjz39P?e=0Uqh9E`wuY;DFrVkWWqcWSOF%Ho#5Jk5(K)A_-Y15k$R^_vVcir#43s`WXW0xv}!c6@^y$BR>4js6D+j!$W$s^be$ z6DeEDxu>xdgDxKU0zJ47^&ddqGH(1LXI=3_@oV(sKx|(QNoY$jIH1*I?x*%tR5u=( z2<~^|C#&=xTIli<-c8-z*@|&)GA~G%3S`hIby(4LX#(xBN`bld%KU())sHUo{Y5Cn!Xe*`jkPJXU;Ek!1 zChPr;NRNqDrjO5_o&R!<*Yd_wh{HTd`6pKHReKr(FWq&6v&43;m3zo3p=6;<6Ulzi zwz3D6!_BFwDGGrni}+^xKWOi^ukZdM^kMyR(nlme|bYccG@4;<*ofbO!x#??7~fFbnXqx%(}iC(DM#>#;L#g~i?O zD|n;^w}#8n@~88wrS+=~WG(lwxblCZTVi+~A?AhCWMFSOzs|*es`_y_)MHvkDa{m{ zdL1`HG6CB_qA!PwrYlzzI?~m;DqkLHA##C+ zA7RIoXLNvxmj*P2VvLZpbrWY-Ds*}|%)YPv1(KGCO;)n}e^{IK=3V2L(}2p2tZY~p zQMf<2@Tm}veSxLcxHm#uC4sxsW~Nx*;w(FqoSyx#i5Pkeo{3d(5`~lbaSToct5w zO_p)Z4q!2-vpaXQ3{b0SF$4&P|9yj}E6=fGNUo$lWBgUM812c;%|BGRf0;xB? z0fo*WBW&Ac_U4>UnKEG%)fCj)0o(Nb-r@A!Tw3MCU!<^YjXzcM)syr=s-!s&Un$#& z1_w$Lf&0*D33~R7uyactQ9Fk^{@hQm7)JeG)_rNMcxYLz`d!ZbD;3KE&#Yd`7j5GV+yYPE^^Ke{OZ$`^8gs zY9EIE2WmIniVTy^Lwj{$Lz%tK2hxDhj|Ry{9Od2gz9{_IrO4 zcD-n&q#u{ix8SnFKE^BPci1m7K?sXkI=A~n?6dktjl~>~r6@=$#DzjB1i29;M}+FV z&B(c(%@Ka-gWbDEO^M2xMvu_B7btdRhv@Ny!GtHh25zq4FmDth)N%!$L4K(Y?QD1G zyPK|gKC-DBfAg>zN-r`btnp_L5E+3vVB+;e_DKmvrY0pwLem`9Z74PuM$ZIU_f|}2*jr@Wr;tG7a3^gHq<5i1?a^Zb)6u%Yy z-wF$uN+?NOsND9LSFLpQ;OorD!V93_ehoTrQKV2>38~JTM0-qJF=~#?y&CP4#p$?U5WHs($*?t6)J@#SK{%7b>|_(s2@EDi{DZsb zOhlPr5Gfg*aEeSOwWDH^{`W6LhcLs>BZ)jh%K0Q5Loe6&8D7O^XdH8VT+?`>^Aq1r#->ZJriS2(O)xWc8gs!=8Xx7n0T+U(8Bj`f1&n=?-Vy9bXu8kq z=*z4#bSIPWVjH9dZcg{F9IayKKlql7g+&H*RjqK81PK+Dxh+pX;-f9$#45)%rYg3Z zw}sPdO+OV8iQkE2raYTYft#%iQpLFSl?BV>ZLa*379928(Yn$*ZJGA$9M)>#xych< zyFl7~7_H38x7jpohmZOz7ZT2foeI-f8;Ov{*}S}cKT6e5;6XHagv!q~$t_r|Gox zuz5Ih+MqXzkNn9u2aPKEG_43}kA2KJF0`DpJs!ts2`XwS2j8o(=s4*Ra@?Mh6>+00 z>XTJ9i%31~9L>oqiV<;H8h1+KiL1a!iJMkX-6>Fv5VF@LceG_`J8wXEz~Q604LS4N zyENr`d2!BC1s})Nkv>+;;)#ffFRku=Lki(-Ev3S8ZdGY-X}q#rGs>~_c^q)rihTK? zrQmpPcnzd;1SR?-PIK$irwpigQjb<)Bdvz4qb4S-nJSIdrgBac@BSp19l~Hy zZGBCfzYwZxJ@(AtG5wrvwS**ArS*wnGJ(hmwV>tT_!sDkF$6Q#Jb4E5XL^?h)c77x zzPoyfAZKfK;6A1r0=aHm)F zS~RzQUYm?`AvN`P8gWuvb>1+loXpq1c>U==yc~Dp~L272|xuaZpVF=a_91 zoc8WNaPwY;gZ_%6Qr=8SkF?!J{fM2p{>>`+9<7LYtg338&~p;?%;ci$d)yA?v?}G( z+4~bEQ#G_1=CmGbYB%}%U^RyTqjlo%oo$?F5maepINB9A;Ak`Z%%|a!d)&d2TS+n= zX^Joo@2uE%Jt#!pd~oa$&5T;gQ8c@3CrJgalQiRYhhuEYwB7VQ%NH1ouGpVZ}2vdNzs7Uo$Eo8-(&rO6a)^C^}p*a#AO%vg5tBe~YBg$d>XwwpCY z2FK4A6?rmgi*gg)R<+J_V30hBSyUNgDMNneie7e7la-i={bgR@|=TxW{RB*I2Rw1xHK78G*=)7ll|t8sjxDt zPo-(>tg`Us7(e&rKN>}}7&&k}AR_&$i+e+7MiPVHidvYb$}LY4%&yiZFf|QC0~F;V zcN3Zt8|CvFlc!%(wrAK0TkYM4Az}J^k4-s`SB-jinl2ffYx?>aS0Rvlwt?p%Gv$da z=GS& z$2KiKntPx#s7ohDGAy2e!{=W@p`V z43smg2C!`-I%RkFS%|yX&ydb-x*1%;5x%i&s~ymSDju(hR$PCO<4g zTeIM(tJKr;acGWWHaxRqVO=@e9bY+R@nCd<+O%c6r{POo>th@Z`I#nj#?f~y@meon zpUBU+S>#Gc8Iw2*gSWCtC;50Ji>!vWd%Tuy$HO71Th!C0XxeN)b*ko;hXa}qJXEl; zZn>T5IH5w>S9Ys5^0eK_$2zIdd_!R zYK~d+kevFSoh)}uHR(s@E#Ko%J^1_BrwPF@&hDR@8WfG!d2s`BVyKzU#}SGel^T-GWUh7 zKPh7K;`>9FFcla7wVHVt=uX$oveg}Sxv-13e}oMT+nF!8x4toe0}lwH52r-d`*ekF z&wGn9#pE(4%hN}~Pet!q#_$;k$;X);!TGMvOB%~iczg=;0!F>d$%&WTG)e#n`h;}zMmo9n2r zppi1_dZ{L#l{K@PIz4Eg4U6o{A>WuXm4^1NplN@{Ljgb#A`=!n<{)@I{SHRt{oh6D z^hOKJ*KbFj=RewUFo+!L8DuAc5U?}KE|-AP;zUYST=1jYU*}&Qv4(XwQTx4tO!~N$ zzDky~O<)34vCjSV$dAof9c{dASv68=&*Xh&F%nKN;U0=t-3gTSKFU5c_2nol6{kGm z+I-h*t6Ud2R+LrpXIF>XOq{+k6x0}3|JrH1UdHYstJ&7HtMnRiK(jOd*}IJjN$y=! zA&H@PWPI<9>orhhIvE5h=FZI@Q_Q>^8tls1!Rl@|GAV|G>1&NGmnaK zh)7X}(UD`|{=cWIwq_mK5_%X43=J^-_dZ(zRri{-GNHy5ucjVsSXE>T3blAgt@7Ay7x~F^=0y4Y= z1Od$-es~>OQd)j0B}?hi(#?f4-C5lwN#eT{ZN{*ZG~=+MfWj(R1l%6|T~)j)$E^+B zPcsN+4iP7ol&|C$Yk9us>sWv9f_*%L3p;n-KNLbRHl-TVmhUh5tUpO4)6d#g-;hY{ zc=woD={>ey0Sa0Xe_vL-MNSNFrg*{ulc5ik4SZc?E%(T#~qZi=5jbcYjXl+Iak4AHc(D-YgP z%IxD$RbOyPuJQP8jGHFa*qP=@if-b1j?37aV z^!&U&d?(g&)W>Ay%T2B?Rh$Js64H8w991D2dQbnX{b7YgHJ1rKd?OM3YvCh~iiTy` zO}U1Q18nj&Mfvkdv%Fa40^i=Fu3=15b!vELaI|xw+^qe5tZ=VvNKPM#W>Wk~_j1_? zDGVm-{J%G&-S@*aGssR?4Lh>1%T<&(khSi4#e~BlM^rkPi(6zpFTv5)WTSh+dht&3 zZNeuX!ZLb)aB;eRS2t{eV;V7kUry!PoMygk`E9C%=eAV?r`hSa)gF&aPlbF7B&DL% zw|uckuUQ_EIW*|1WZeAGjNzcqEIL$eO`^d~$Qa^T3;m&<({`hK?q74!2K!1lfGgq+=H!*ot zG!+K(*88tzdtUAX#yHcI@!XK3NXnj;thfSXmOR#NU+@2(p?5=^(?g6`X4shLtg|E| z>JM9{HkTJ;?@mx5`^Gf?yT-&XIGu4TEjLsCQFIwYa61KiLt+xgP~O7bUR^gm_2@xu zmoD=F1!L&S?A2GpS|0Z*pLcABjd&V=?M8l}qWbR(k6*WdSHZ=k-WS4VC+ERt(DKb@ zZb3O$a@Wk#x=?l2=(g$4BhPL0+D=ohJ>UpSC^S(C^1t@f7bIgO_x@Uv!ge>vcDHwl zjpb_6a<%sy6?@#EBDzG!_3V-;3L(bzW0Xv4q@sih&UlP#MbtB!;o?GobcR;p!ju1A z#%WHy>`voF29^QbY(Xy!8&=Kxn=pfH@KBM>#-gC+50|WC)VGzw+n7CKR9buJuUvtV znBB=U$&X-00nB_Hba^>dQTs}V$T0W~;rtGoznP8u+ zM5t2wL@laMV5r6ax-$R7wlMN=oVDDXU=&Me2ea2*#=(}Pz8X0N$P}80h(q7l&}qvA z5VEYSDf@8+j>D|!E_|&)Owq&;4b37vf96u1LB>_D#2s>tSb@Rm9$q+!%#i z$<5T;TaL268BexW2D3Eh;UA1--@i8$42HM)_$KvScdqUSE7RQsORM(pQ=hOQUz^7!Jws3uSmg>ennt8HJ4;@^`}RTcC?v0sRP(%Irn`^Y)LS03;$sYH{^TM@wkb`8!m%s5PCo`u#exrW z;4V;2-<4vJ{GplSn`l~}YGkvhSA1LNtKrqw=mbyh{@Bjv0aJqn7?CTIf30V|y`-Cwuf)K}S_r>ywv~ zwQo^0`=7eQQ`0$!8GfwIBsurk@@A^49~Jwl8fxxn?Af540qhU+e`UJZJI4cc-CdZ68)(_8ZDwpAe^^Pa zXVD+Yn{QGJGO;SswBF>^#_HK%A(BujS2}|Nc8vJ`zpp7amX+*^2+V%VM^1N|qZ1ee z9n*KU*TT;A=xT1P(#>tVWD#xbuYacn78#!i+BA)C`O|o>%4qWM6fvxWJ11`W)#*}l zKD6Tk)KVfl(jq*{Q<0w_YI*)Y%P3A!8pRtMXHXQ2$s+$dU){n``O7p}uH&24Ye%=X zH0dPi)Pc{&hgm7_nmn9};GPaWB*pjSd!8lKmaWM>ZF^L9aD3PvS{xUr5Ll4FzovNj zxwyXjgRN;!K5{ZTsl!eA=^9Pb$+InseG|BjkT7cITf3GTI55Ohvne&sF)G0!hxSuI za|q+$zt8mYC0OAO`@4eGMC#xk{4 zm1LATb!9P>go@nxmOeBC6_WgYG?BYjPB?ScbDNK#*LaMN`#B9CwdH;E|bZsx!uMJ%~is8Dk_utpSnHkNx z(qucH4PB{oEBRfeoKk7FRgeh9C><*niZ8YsjG!*x1IE+!pGO;*UQ2#Z)ulVVUgSfw zml6mPYSOs3JagC*?u;k;&uno#x*prGdeuk-DSMsQ|9Dvoo@b2v@AJ5^A-{LcA=dU` zcgC!h47qgo9QLuc;6T8&5xLMSk-TrxVgkX_XALxbjBUD4?g)u&CrV@wA3aq1qkJzY zOoy)j^=FIpMz`-z*IxHCUHEn?Cq}bZzB43YGiqM7E!tV2`PNWSJn1P3X3iP!lBUEC z1I7jewWigm_Fr*j`>BNCN*x#ey4Q8Ucz-bYxk$h_{I$o2=9t)(+a=*EXXBNO3G)p) zU4t21*BIWwqJK|xyW>~dCv5x2{Q7TjH(I>^d9*%A05V;+RFViIwKw%_$Su`b=ew%r zxT-(brozPTg_v3m9F%0gYq4VfD0<83Xd)`3~S2A9_3 z(L#KJ%$y29n))xUbIy6}7 z$Z0Vwl5gJBYZ6l@8}jWBKHnFZ$XqWXroUC09l$=k)_&p89KWH1UvJ>K!fRG zm&X64LhVs^(Pa4lmzI~?pj%tOmzvM|=C^P5TU`qPi*Q_(>t-KHRXjj(_m#Q}Bi#RJajLe@pNP z=Q6_rw8MC5tiGYSSv6ayluin`VrmZ`X4HV#Xn0t!BU^W9bO%svA&CNrgaB?s6%8`L zC^~@_c+F|uA}J*$T_HgNp*s4{3eOLf>#DN!8KFPL947XVOtymF?_YEhDt`a+QQ|57gP12idth3? z&mzVC1NdKtIS(Jj|MLHKp&yTIF^uPqR{7Hz7#M_|15b~^JmHH;iEPo7=Yj1cx~Z}H zz<@-cfCPeW4em+?jW}>+3~b2?k9u7{bTB~ca;Tz`66xvF3|`guYRbPR>NqXuOZF+Fw$Md<}yUfUVlUBl8US8h6Ck~@C^6#e@ zUAo6$`xkzm_>lj0*ykW>gunms>e||LSKMwxeLYj`gQqfE8xt`dfOV_>{JHMl`$^#T zZZ@u6(#X3Bjq$2*zgV^GEMQFNF7rGsx6E%@I-~0phj?&TuPTm=jF^0jfBB;&Mwk85 z9>(J&WNsJcfg*#Z0@4L#YL}=YWYN8Q@kG=@PW8)kwk3eANC6$*v@32a2BtomkxX1% zAKYjO1+?dK1@vo<0(RsEysNJvteU^TNT<;S;oJ_jiZ^?sb8>S#-rW_u6?S#pvw0}j z$gj8HQ8r*a80qQ7p{Ku%)=xn6-hno_()MzTa5`v|!nq$sBR2zolnSIpAWjT$`jUuT zkGn-L|C#gApcc|m?JmdQZXyc-;^#`clALj!|9SgnS8!z4?pE$I8z@#GARyRJdD%i; zZR?Wo##mr)j)51b8Ha^dzi_lXfT7SRwl;oReQcZDt2&;od|MIF*Tu8Ez&7bb4A94; z5^L`f$|Ni-3{AYlG}6P_+V#0kOu&6nnrM#VbXs3DJw@iWr~2rD*n_!!a~ipZKHy$v zgbedFIzE_b!kIMR0~W$KjC?in9>js}k(rrUdS#}otNXqFxHaDq=7%(X<;#~4c*e9d z<1t%8HyjcKwvoa=Uzh+c5Ta>P7J+DIDNw9^oXsU(KOEYa6nIe%D;svz&|?ox%z6YR zM1&LnM;8m&%uWEKBmycGIHUH^Hkbkk$b|lWEg!Ng@idhOme%=Omi7`0!~(DrK_agn z6$8Et2orf^=!UI;C(O1n3!ZW6OBl!DLx-*~U9I4Umy~lmiZ5wvzNBSV9y4~zkR7u) zY+0mS=45{>icbY`e&EHdz&OG%3|{5GHjG7931irC_R+^U(3nnpv6X#=*Bcxe`Ox+O zMt-*G?G>>E37=L31cC)5f|AJ1sS>?V7PYL%?d@#@_3#_@Afi;Xw*Eywq!cH*fB(LH zbuBF|&KYno(sFX401VR88|L&OFARd$d6Awz4dj~+V{atsq>fQslee|~;IKBIIT7Qk zqsqc*yY4l8%!bOeNtu;n3o&imQAQgeva|O*IB~>i_R&$@)_CzFenz^8 zA??v9v?X$Pwf)=Dhfc5LsySlkbNNjEvIZ zZvztN2TDum1OG}X?4pHGHy<7iWdXp;WVZYLbYDTXdifrjsp*(;0K!f;aSye_ zcp=cz&SDj@w6wG$u=E5CCo%iy+S8PzrKA+3r9BgK%@~yw74uwiE>f*uryjEr@u zKnuD8%<`%c3lfWV5goPVOA|kSP|!;HUITM9+($@w7M6JlkOz9h&okn4g%uzmJSJto z8|mue_-pbm9Ua}6y&Tw%Hw;z+ILaC{TZbR-JyX(a#C!hyh+GTd@YW^wPXY?R-8*Fn z$l%b=|DRQlQBTluRT+**a@wUT%K*wCgl_PkhA&^P@kh#FwTf~WROT7Xl#0g%z)!81zL&U9?T3T6=l98oOPCj_~ z;>D9wTu>)R3xDiQq1vmi0 zHGwan;4}&9%+_6qHW6~(w4NI%Q9JD=4iM6L)BA>o4fo!ItXn*QE~PCEfyjVOrf~D- zE409=={m1?jy5+mD8fIK?W}70jRH0-sj{-tdh?gD6grH`8XO8U9o-FdCkun60KiIX z)LBz(n>)*Ck_b^!vFnFBmmId{3OeG%2w%FpW5G9QyubI-cD_GN)4WKWUOGs=F@$y5 z$rsT1s-rbNXdMPSGigs%u;e)x>NCE*m?u6W_gKSIM}epp7zoMIoPO;_U3hV`S_i;9fcbtA0OUW2MD)SLt%7On~)t zI}<$}9l~0M!;%H#m<_G~(7$Ow#YO-*Wnc{@B_%O|^??g4i{C2Nx?EjdjVPPFAMJAy zn+%}Jw_}`Fdq_)#1q8H^1Q;0Y0=}+r7cgLfqGDpfQBj$nKi?3)abpq?dO-Kg{Wa<* zJPqFQV=?j6$$-E>{g7BHXJ_z`u$6H-ibgrK^p?70S#QDwdc`LU|?Xr%Z>xE!qs|9?6ON<9jB(wZV|?5 z1>~9aalsQ69pMIpXal3f>!E>itcX~SK-M$?b++0{$;8-LDv0#M`R%fRG?EHtkPa&h zWN*Q>_S8;`PaA?+QeXw00w`ZA8aBs;QZ-i15A6^)t@ycaivefO>df=YA>rXzwz73m zaEJCnf!*DAI{TOJ8_wXS?ZJsIT06@eRT)KYhp5S@SXG z!dJWnnEeR=BSym6AUn~p_E4y%cifbdD<2btjN`s+__g{`AqX0;NqCcu?5YP`f$V6l z1rkH}(gisBV5|FLjMF{v=q0XYV9MUWc6HENgY@$%vvR6M&rmiXs3eq?gYM?`Tz2%m zOI8E8dXt-1Z$}Flleyo$q*eIU|33T_w$#_xUjZZX8E*`A{I~|WCRefblx2^p?(}kD z5CBWhwg@bHZ%w>-u`dC}V?KtG$U^~+$Vhjg)Dok?(zN@UNQi04~sukKg=%v8v6$77A1;qYN?34Mme(Sbd;A8B|2Ff&0XSUuBdX370-q2KtA z9}bZmRzGBqo#T;5@dk7XAoqCa6a$Lf)tq8r&EJ{P#kGQiu?D2OX^l5II#ytN2e<3` zAyYM7vOm;QJ7CYAJ^eT*m*pxM$`XsTdVoDz!^$~Pq-tTYXfRszj^{#s=`1buCjfr( z{RLXue29tY85nk_82l&JqTa%Uzo)M+sB`4-;o{k?%LbJ%4x#e~IPI72b3XVgf) zmz|}4TxE+G-&WXmkCC;GwRK*6LIQ$S1~Vy1po3HZ+X;3a3l>>FVv!0fn5%uZSGMC% zBj}k_$Ghc77$0NsTdj{I&yf$@c8s3u%L(FW8ZE00a)! zz*v(BsCD-XK!+jZLmJ_{`Rg%tN$;ap`ZR!~0+~4qQm90z7D*vWj@`J9h1h+;DI%e@@d2yQe-$8v@knEHeH-mGsneDz(y8hh@ z^6yZ(Or6r+(a2>Es>|DJiqNsNfB$}C@R|0j*9tY@x^3Ea14$6G$hY?F`2_P4H8o{t zIWkRn?c<8L)!O586&JC7o#<=blsb<_cKlQNdB}8K=kpvGC++?T(@q_utpAzUk@#!8M$Z@yI z-CnBzYFTInfwVUpq9GP0CMm>^RlyNK?^7;}S4X}nIuBL6DT3Rsyc7NhD$&73dkY^Y zoW87;niB0Gjoi3gOL;e>HdsHQ&6@~22=lZZ5-2ArLl0R0VA+vJ$qcO92wvS3$;;6) zv7`nOaVpqrDSTruO7S2hgQG9}tiXBFLGFnbDs*fMkQtGUKix}+g`j&A)*lpbp@baf zRk6_e@bh%fICzjvaC~`A8pRE}L~>L1SFaN7wR8wZIeHUwpfr9}djZB9f9X^TK}sM+-qo8dx{Jy1st?@iR=G zpe;P0EVdfhXaL=B0qm7LGo1aYtyVOaJ^RyjyUX z_t*9P|CZj)+wJ@R=lOcQ>b<~$JS{~qPXVRc+ z9CkfylP&>vQ-GJtdIH+ilVkU;|0Z%IemW4&YcXD{Sa)>!RRw?BLGNvV{l0Gz0ZU`lvQ!I1~)J b^`E(9`39BPkSyTL0|RhVfS=1cr-UW|D53y@ literal 0 HcmV?d00001 diff --git a/assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png b/assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png new file mode 100644 index 0000000000000000000000000000000000000000..a73169a2d68a331d534865d391085d6c158cf199 GIT binary patch literal 16617 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�T+RaHT_$QDCP}4Z_^s?z1jCyA| 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 YOBFS4pG|IECNG(CSo2WkfzucMAI9d?W&i*H literal 0 HcmV?d00001 diff --git a/assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png b/assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa9815bb08e949f71a8ae32b772e600f24473a32 GIT binary patch literal 66545 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

  • 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

    9Cc{z(n$lD^%LlNnJBeGJI2? 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

    Hq13(;Pb8auH{F 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 z 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 literal 0 HcmV?d00001 diff --git a/assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png b/assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6d07508979697db9b52569d032fc3c94088287 GIT binary patch literal 46036 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%0A%{;l2R-P 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 Q%WY&&op7`z9`jE67tAbFCjbBd literal 0 HcmV?d00001 diff --git a/assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png b/assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png new file mode 100644 index 0000000000000000000000000000000000000000..d6810cbb41cb61e786a264d250b2b2e9802b8a76 GIT binary patch literal 150701 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.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>a});var s=r(5893),o=r(1151);const t={},c="CONDITION",i={id:"about/references/keywords/CONDITION",title:"CONDITION",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CONDITION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONDITION",permalink:"/ecalc/docs/about/references/keywords/CONDITION",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONDITION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"COMPRESSOR_TRAIN_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL"},next:{title:"CONDITIONS",permalink:"/ecalc/docs/about/references/keywords/CONDITIONS"}},d={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"condition",children:"CONDITION"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CONDITION",children:"CONDITION"})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Required"}),(0,s.jsx)(n.th,{children:"Child of"}),(0,s.jsx)(n.th,{children:"Children/Options"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})}),(0,s.jsx)(n.td,{children:"None"})]})})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["All energy usage models may have a keyword ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CONDITION",children:"CONDITION"}),"\nwhich specifies conditions for the consumer to be used. At points in the time series where the condition\nevaluates to ",(0,s.jsx)(n.code,{children:"0"})," (or ",(0,s.jsx)(n.code,{children:"False"}),"), the energy consumption will be ",(0,s.jsx)(n.code,{children:"0"}),".\nThis is practical for some otherwise\nconstant consumers.\nFor example, if you use the category ",(0,s.jsx)(n.code,{children:"FIXED-PRODUCTION-LOAD"})," and you want it to depend on whether or not there is production, the ",(0,s.jsx)(n.code,{children:"CONDITION"})," keyword can be specified."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"CONDITION"})," supports the functionality described in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EXPRESSION",children:"Expressions"}),", but is ",(0,s.jsx)(n.strong,{children:"required"})," to evaluate to ",(0,s.jsx)(n.code,{children:"True/False"})," or ",(0,s.jsx)(n.code,{children:"1/0"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"CONDITION: \n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.p,{children:"A simple example is shown below where the load is only present whenever the oil production is positive:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"- NAME: production_load\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n LOAD: 5\n CONDITION: SIM1;OIL_PROD:PLA > 0\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This condition is an expression. See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EXPRESSION",children:"Expressions"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>c});var s=r(7294);const o={},t=s.createContext(o);function c(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/00bdc23f.84c5401c.js b/assets/js/00bdc23f.84c5401c.js new file mode 100644 index 0000000000..b69d709a02 --- /dev/null +++ b/assets/js/00bdc23f.84c5401c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8088],{312:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>c,frontMatter:()=>l,metadata:()=>d,toc:()=>o});var t=i(5893),s=i(1151);const l={},a="Pump chart",d={id:"about/modelling/setup/facility_inputs/pump_modelling/pump_charts",title:"Pump chart",description:"Energy usage for pumps is not based on pre-sampled data between rates,",source:"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts.md",sourceDirName:"about/modelling/setup/facility_inputs/pump_modelling",slug:"/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/"},next:{title:"Sampled compressor model",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model"}},r={},o=[{value:"PUMP_CHART_SINGLE_SPEED",id:"pump_chart_single_speed",level:2},{value:"Header Requirements",id:"header-requirements",level:3},{value:"Required",id:"required",level:4},{value:"Optional",id:"optional",level:4},{value:"Format",id:"format",level:3},{value:"PUMP_CHART_VARIABLE_SPEED",id:"pump_chart_variable_speed",level:2},{value:"Description",id:"description",level:3},{value:"Header Requirements",id:"header-requirements-1",level:3},{value:"Format",id:"format-1",level:3},{value:"Examples",id:"examples",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"pump-chart",children:"Pump chart"}),"\n",(0,t.jsxs)(n.p,{children:["Energy usage for pumps is not based on pre-sampled data between rates,\npressures and energy usage, but on ",(0,t.jsx)(n.strong,{children:"equations and the pump chart"})," defining the pumps."]}),"\n",(0,t.jsx)(n.p,{children:"There are two types of pump models supported:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Variable speed pumps"}),"\n",(0,t.jsx)(n.li,{children:"Single speed pumps"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The pump chart defines the pump's operational area. When rates below minimum flow\n(a point with the lowest rate for a single speed pump and a line defined by the lowest rate vs.\nhead for each speed for variable speed) are requested, the rate is projected up and\nevaluated at minimum flow to mimic the ",(0,t.jsx)(n.code,{children:"ASV"})," (anti-surge valve)."]}),"\n",(0,t.jsx)(n.p,{children:"For heads below minimum head/minimum speed, i.e., when the requested pressure\ndifference between the outlet and the inlet is smaller than the minimum pressure difference,\nthe head will be lifted up to minimum head to mimic that the pump will then be run on\nits minimum speed and the pressure will be choked back downstream of the pump.\nFor single speed pumps, the minimum speed/minimum head curve is the same as\nthe head vs. rate curve."}),"\n",(0,t.jsxs)(n.admonition,{title:"Tip",type:"tip",children:[(0,t.jsx)(n.p,{children:"When calibrating pump charts to historical data, the head values for maximum speed could be\nput in the cloud of data to be unbiased. However, eCalc will treat all head values above the\nmaximum defined in the chart as infeasible (outside pump capacity)."}),(0,t.jsxs)(n.p,{children:["To mitigate this when\nrunning through historical data for power calibration, the keyword ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HEAD_MARGIN",children:"HEAD_MARGIN"})," may be used to move points outside capacity (but inside the margin) to the capacity limit."]})]}),"\n",(0,t.jsx)(n.h2,{id:"pump_chart_single_speed",children:"PUMP_CHART_SINGLE_SPEED"}),"\n",(0,t.jsxs)(n.p,{children:["Pump chart data for single speed pump. The required fields are ",(0,t.jsx)(n.code,{children:"RATE"})," and ",(0,t.jsx)(n.code,{children:"HEAD"}),". Optionally (and most likely) ",(0,t.jsx)(n.code,{children:"EFFICIENCY"})," and ",(0,t.jsx)(n.code,{children:"UNITS"})," should be supplied as well.\n(if not given, efficiency is set to 100%)."]}),"\n",(0,t.jsx)(n.h3,{id:"header-requirements",children:"Header Requirements"}),"\n",(0,t.jsx)(n.h4,{id:"required",children:"Required"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"RATE"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"HEAD"})}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"optional",children:"Optional"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"EFFICIENCY"}),", if not set the efficiency is assumed to be 100%."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"SPEED"}),", if set all values must be equal."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Note that speed is not used in any way for single speed pumps and is only included here to allow the speed column to be\npresent in the input file without the run failing. There is still a check that all speeds are equal if speed is present\nto avoid usage of the wrong pump model, i.e. avoid using the single speed model for variable speed pump chart data."}),"\n",(0,t.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: \n FILE: \n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: \n HEAD: \n EFFICIENCY: \n"})}),"\n",(0,t.jsx)(n.h2,{id:"pump_chart_variable_speed",children:"PUMP_CHART_VARIABLE_SPEED"}),"\n",(0,t.jsx)(n.h3,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["Pump chart data for variable speed (VSD) pump. The required fields are ",(0,t.jsx)(n.code,{children:"SPEED"}),",\n",(0,t.jsx)(n.code,{children:"RATE"})," and ",(0,t.jsx)(n.code,{children:"HEAD"}),". Optionally (and most likely) ",(0,t.jsx)(n.code,{children:"EFFICIENCY"})," and ",(0,t.jsx)(n.code,{children:"UNITS"})," should be supplied as well.\n(if not given, efficiency is set to 100%)."]}),"\n",(0,t.jsx)(n.h3,{id:"header-requirements-1",children:"Header Requirements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"RATE"}),", ",(0,t.jsx)(n.code,{children:"HEAD"})," and ",(0,t.jsx)(n.code,{children:"SPEED"})," required."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"EFFICIENCY"}),", ",(0,t.jsx)(n.code,{children:"UNITS"})," optional."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: \n FILE: \n TYPE: PUMP_CHART_VARIABLE_SPEED\n UNITS:\n RATE: \n HEAD: \n EFFICIENCY: \n"})}),"\n",(0,t.jsx)(n.h2,{id:"examples",children:"Examples"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: a_single_speed_pump\n FILE: inputs/single_speed_pumpchart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n \n - NAME: a_variable_speed_pump\n FILE: inputs/variable_speed_pumpchart.csv\n TYPE: PUMP_CHART_VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n\n - NAME: a_single_speed_pump_with_head_margin_applied\n FILE: inputs/single_speed_pumpchart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n HEAD_MARGIN: 10\n"})})]})}function c(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>d,a:()=>a});var t=i(7294);const s={},l=t.createContext(s);function a(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0425b884.39bfc638.js b/assets/js/0425b884.39bfc638.js new file mode 100644 index 0000000000..a05a685e47 --- /dev/null +++ b/assets/js/0425b884.39bfc638.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9336],{25:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=n(5893),i=n(1151);const o={title:"Python Library",sidebar_position:3,description:"Getting started with eCalc Python Library"},a="Python Library",s={id:"about/getting_started/library/index",title:"Python Library",description:"Getting started with eCalc Python Library",source:"@site/docs/about/getting_started/library/index.md",sourceDirName:"about/getting_started/library",slug:"/about/getting_started/library/",permalink:"/ecalc/docs/about/getting_started/library/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/library/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Python Library",sidebar_position:3,description:"Getting started with eCalc Python Library"},sidebar:"about",previous:{title:"FAQ / Troubleshooting",permalink:"/ecalc/docs/about/getting_started/cli/faq"},next:{title:"YAML",permalink:"/ecalc/docs/about/getting_started/yaml/"}},c={},d=[];function l(t){const e={a:"a",admonition:"admonition",h1:"h1",p:"p",strong:"strong",...(0,i.a)(),...t.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h1,{id:"python-library",children:"Python Library"}),"\n",(0,r.jsx)(e.admonition,{type:"warning",children:(0,r.jsxs)(e.p,{children:["It is currently ",(0,r.jsx)(e.strong,{children:"not recommended"})," to use the Python library due to upcoming breaking changes."]})}),"\n",(0,r.jsx)(e.p,{children:"If you choose to use the Python library programmatically when creating eCalc models, there is a greater flexibility in\ndynamically changing the eCalc models."}),"\n",(0,r.jsxs)(e.p,{children:["See all commands and options in the ",(0,r.jsx)(e.a,{href:"/ecalc/docs/about/references/api/",children:"API reference"})]})]})}function u(t={}){const{wrapper:e}={...(0,i.a)(),...t.components};return e?(0,r.jsx)(e,{...t,children:(0,r.jsx)(l,{...t})}):l(t)}},1151:(t,e,n)=>{n.d(e,{Z:()=>s,a:()=>a});var r=n(7294);const i={},o=r.createContext(i);function a(t){const e=r.useContext(o);return r.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:a(t.components),r.createElement(o.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/0477162f.e0c22ff2.js b/assets/js/0477162f.e0c22ff2.js new file mode 100644 index 0000000000..6e6240cf40 --- /dev/null +++ b/assets/js/0477162f.e0c22ff2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6173],{3954:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>E,frontMatter:()=>o,metadata:()=>t,toc:()=>d});var s=r(5893),c=r(1151);const o={},i="VENTING_EMITTERS",t={id:"about/references/keywords/VENTING_EMITTERS",title:"VENTING_EMITTERS",description:"New definition of VENTING_EMITTERS from eCalc v8.8!",source:"@site/docs/about/references/keywords/VENTING_EMITTERS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/VENTING_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/VENTING_EMITTERS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"VARIABLES",permalink:"/ecalc/docs/about/references/keywords/VARIABLES"},next:{title:"!include",permalink:"/ecalc/docs/about/references/keywords/include"}},a={},d=[{value:"eCalc version 8.7 and before: Description",id:"ecalc-version-87-and-before-description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"eCalc from version 8.8: Description",id:"ecalc-from-version-88-description",level:2},{value:"Format",id:"format-1",level:2},{value:"Example",id:"example-1",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"venting_emitters",children:"VENTING_EMITTERS"}),"\n",(0,s.jsx)("span",{className:"major-change-new-feature",children:(0,s.jsx)(n.p,{children:"New definition of VENTING_EMITTERS from eCalc v8.8!"})}),"\n",(0,s.jsx)("br",{}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Required"}),(0,s.jsx)(n.th,{children:"Child of"}),(0,s.jsx)(n.th,{children:"Children/Options"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"INSTALLATIONS"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"NAME"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(n.code,{children:"EMISSION_NAME"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(n.code,{children:"CATEGORY"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(n.code,{children:"EMITTER_MODEL"})]})]})})]}),"\n",(0,s.jsx)(n.admonition,{type:"important",children:(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["eCalc version 8.8: Updated definition of VENTING_EMITTERS. New keyword ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION",children:"EMISSION"})," is replacing ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION_NAME",children:"EMISSION_NAME"}),". Now possible to define ",(0,s.jsx)(n.code,{children:"UNIT"})," and ",(0,s.jsx)(n.code,{children:"TYPE"})," for emission rate."]}),"\n",(0,s.jsxs)(n.li,{children:["eCalc version 8.7: ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})," keyword is replacing the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",children:"DIRECT_EMITTERS"})," keyword."]}),"\n",(0,s.jsx)(n.li,{children:"eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before."}),"\n"]})}),"\n",(0,s.jsx)(n.h2,{id:"ecalc-version-87-and-before-description",children:"eCalc version 8.7 and before: Description"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})," keyword covers the direct emissions on the installation\nthat are not consuming energy. The attributes ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),",\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION_NAME",children:"EMISSION_NAME"}),", ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," and\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})," are required."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: \n EMISSION_NAME: \n CATEGORY: \n EMITTER_MODEL: \n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: SomeVentingEmitter\n EMISSION_NAME: CH4\n CATEGORY: COLD-VENTING-FUGITIVE\n EMITTER_MODEL:\n \n ...\n - NAME: SomeOtherVentingEmitter\n EMISSION_NAME: C2H6\n CATEGORY: COLD-VENTING-FUGITIVE\n EMITTER_MODEL:\n \n"})}),"\n",(0,s.jsx)(n.h2,{id:"ecalc-from-version-88-description",children:"eCalc from version 8.8: Description"}),"\n",(0,s.jsxs)(n.p,{children:["The attributes ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),", ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," and\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION",children:"EMISSION"})," are required."]}),"\n",(0,s.jsx)(n.h2,{id:"format-1",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: \n CATEGORY: \n EMISSION:\n \n\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example-1",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: SomeVentingEmitter\n CATEGORY: COLD-VENTING-FUGITIVE\n EMISSION:\n \n ...\n - NAME: SomeOtherVentingEmitter\n CATEGORY: COLD-VENTING-FUGITIVE\n EMISSION:\n \n"})})]})}function E(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>t,a:()=>i});var s=r(7294);const c={},o=s.createContext(c);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/06adec10.9980026a.js b/assets/js/06adec10.9980026a.js new file mode 100644 index 0000000000..3c1a7a3469 --- /dev/null +++ b/assets/js/06adec10.9980026a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2153],{904:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>c,contentTitle:()=>m,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>t});var n=a(5893),l=a(1151);const r={},m="POWERLOSSFACTOR",i={id:"about/references/keywords/POWERLOSSFACTOR",title:"POWERLOSSFACTOR",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/POWERLOSSFACTOR.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/POWERLOSSFACTOR",permalink:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/POWERLOSSFACTOR.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"OPERATIONAL_SETTINGS",permalink:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS"},next:{title:"POWER_ADJUSTMENT_CONSTANT",permalink:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT"}},c={},t=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function h(s){const e={a:"a",annotation:"annotation",code:"code",h1:"h1",h2:"h2",math:"math",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",p:"p",pre:"pre",semantics:"semantics",span:"span",...(0,l.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"powerlossfactor",children:"POWERLOSSFACTOR"}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",children:"POWERLOSSFACTOR"})]}),"\n",(0,n.jsx)(e.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(e.p,{children:["A factor that may be added to account for power line losses. E.g. if you have a subsea installation with a power line to\nanother installation, there may be line losses. For a power line loss of 5%, ",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",children:"POWERLOSSFACTOR"}),"\nis set to 0.05 and the power required from the power source (generator set) will be"]}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"q"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"d"})]})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"b"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"})]})]})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mn,{children:"1"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mi,{children:"O"}),(0,n.jsx)(e.mi,{children:"W"}),(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mi,{children:"L"}),(0,n.jsx)(e.mi,{children:"O"}),(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"A"}),(0,n.jsx)(e.mi,{children:"C"}),(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mi,{children:"O"}),(0,n.jsx)(e.mi,{children:"R"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"power_{required} = \\frac{power_{subsea}}{1-POWERLOSSFACTOR}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.7167em",verticalAlign:"-0.2861em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"re"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"q"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"re"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.8769em",verticalAlign:"-0.7693em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.1076em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord",children:"1"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"PO"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"W"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"ER"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"L"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"OSSF"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"A"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"CTOR"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"b"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"se"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"a"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.7693em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"b"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"power_{subsea}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"b"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"se"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"a"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is the power calculated from the energy function (before power loss is taken into account)."]}),"\n",(0,n.jsx)(e.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"POWERLOSSFACTOR: \n"})}),"\n",(0,n.jsx)(e.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"POWERLOSSFACTOR: 0.05\n"})}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"POWERLOSSFACTOR: SIM1;POWERLOSS {+} 0.05\n"})})]})}function d(s={}){const{wrapper:e}={...(0,l.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},1151:(s,e,a)=>{a.d(e,{Z:()=>i,a:()=>m});var n=a(7294);const l={},r=n.createContext(l);function m(s){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function i(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(l):s.components||l:m(s.components),n.createElement(r.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/06dd1efa.7c149191.js b/assets/js/06dd1efa.7c149191.js new file mode 100644 index 0000000000..2320370743 --- /dev/null +++ b/assets/js/06dd1efa.7c149191.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6039],{332:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>d,toc:()=>c});var r=n(5893),o=n(1151);const s={},a="END",d={id:"about/references/keywords/END",title:"END",description:"END",source:"@site/docs/about/references/keywords/END.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/END",permalink:"/ecalc/docs/about/references/keywords/END",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/END.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMITTER_MODEL",permalink:"/ecalc/docs/about/references/keywords/EMITTER_MODEL"},next:{title:"ENERGYFUNCTION",permalink:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION"}},i={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"end",children:"END"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/END",children:"END"})}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Required"}),(0,r.jsx)(t.th,{children:"Child of"}),(0,r.jsx)(t.th,{children:"Children/Options"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"None"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"None"})})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(t.p,{children:"Global end date for eCalc to stop energy and emission calculations. It is recommended that you have control of which date you want data to be calculated and exported for."}),"\n",(0,r.jsx)(t.p,{children:'If you specify the end date as 2080-01-01, the last period to be calculated is 2079 is included in the output. The hours, minutes and seconds of the day are implicitly set to "00:00:00", so the counting ends at midnight on January 1st 2080 (2079-12-31 23:59:59).'}),"\n",(0,r.jsx)(t.p,{children:"You can provide a date that is after the global time vector, but it is recommended to set it to the end of your timeseries data. Normally the timeseries do not provide this information directly. The last timestep provided in a timeseries is e.g. 2079-01-01, which would often mean that the data changed at that point,\nand will e.g. be valid 1 year from then (if we work with YEARLY output frequency). To make sure that eCalc stops at the correct place, you should therefore specify the exclusive date of the data."}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/START",children:"START"})," keyword have similar behaviour."]}),"\n",(0,r.jsxs)(t.p,{children:["If END is not specified, eCalc will make an educated (but possibly incorrect) ",(0,r.jsx)(t.em,{children:"guess"})," on when the output data should end."]}),"\n",(0,r.jsx)(t.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"END: \n"})}),"\n",(0,r.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,r.jsxs)(t.p,{children:["Given an input dataset from ",(0,r.jsx)(t.strong,{children:"01-01-2000 - 01-01-2040"}),", ignoring the last 20 years of data\ncan be achieved as follows:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"END: 2020-01-01\n"})})]})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>a});var r=n(7294);const o={},s=r.createContext(o);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0745e7f0.c743d298.js b/assets/js/0745e7f0.c743d298.js new file mode 100644 index 0000000000..8688f4e1e6 --- /dev/null +++ b/assets/js/0745e7f0.c743d298.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4069],{8273:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var r=a(5893),s=a(1151);const t={slug:"v8.5-release",title:"v8.5",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:15},i="eCalc",l={id:"changelog/v8-5",title:"v8.5",description:"New Features",source:"@site/docs/changelog/v8-5.md",sourceDirName:"changelog",slug:"/changelog/v8.5-release",permalink:"/ecalc/docs/changelog/v8.5-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-5.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:15,frontMatter:{slug:"v8.5-release",title:"v8.5",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:15},sidebar:"changelog",previous:{title:"v8.4",permalink:"/ecalc/docs/changelog/v8.4-release"},next:{title:"v8.6",permalink:"/ecalc/docs/changelog/v8.6-release"}},o={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,r.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added chart area flag NO_FLOW_RATE to the possible statuses for an operational point in a variable speed compressor chart. The chart area flags can currently only be found in the json result file, but we will also try to find a way of displaying this information in the WebApp as well."}),"\n",(0,r.jsx)(n.li,{children:"Whenever there is a variable speed compressor only recirculation fluid (can happen in a multiple streams and pressures compressor train) a warning will be logged."}),"\n",(0,r.jsx)(n.li,{children:"Add rate type to more equipment in results"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"nmvoc"})," emissions were incorrectly reported for the ltp categories ",(0,r.jsx)(n.code,{children:"HEATER"})," and ",(0,r.jsx)(n.code,{children:"BOILER"}),": The emission query filters included ",(0,r.jsx)(n.code,{children:"nox"}),", and are now corrected to ",(0,r.jsx)(n.code,{children:"nmvoc"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Instead of applying the surge control margin to the average of the minimum flow rate for all speed curves in the compressor chart, a more robust calculation is implemented for variable speed compressors: The updated minimum flow is calculated individually for each speed, using the control margin as the increase in minimum flow, in percentage or fraction of the rate difference between minimum- and maximum flow, for the given speed. This solves the problem of eCalc failing when the new calculated minimum rate was outside the compressor chart for a given speed."}),"\n",(0,r.jsx)(n.li,{children:"Improved error messages"}),"\n",(0,r.jsx)(n.li,{children:"Other fixes"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,r.jsx)(n.p,{children:"None"})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},1151:(e,n,a)=>{a.d(n,{Z:()=>l,a:()=>i});var r=a(7294);const s={},t=r.createContext(s);function i(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/074935d7.2591b66d.js b/assets/js/074935d7.2591b66d.js new file mode 100644 index 0000000000..0b3cebd532 --- /dev/null +++ b/assets/js/074935d7.2591b66d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1042],{2926:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>i,contentTitle:()=>c,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var s=n(5893),t=n(1151);const o={},c="RATE_PER_STREAM",a={id:"about/references/keywords/RATE_PER_STREAM",title:"RATE_PER_STREAM",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/RATE_PER_STREAM.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/RATE_PER_STREAM",permalink:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/RATE_PER_STREAM.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"RATE_FRACTIONS",permalink:"/ecalc/docs/about/references/keywords/RATE_FRACTIONS"},next:{title:"REGULARITY",permalink:"/ecalc/docs/about/references/keywords/REGULARITY"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function E(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"rate_per_stream",children:"RATE_PER_STREAM"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM",children:"RATE_PER_STREAM"})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["Used to define the rate for each stream for the VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," types using a list of ",(0,s.jsx)(r.code,{children:"expression"})]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"RATE_PER_STREAM:\n - \n - \n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"RATE_PER_STREAM:\n - SIM1:GAS_PROD\n - SIM1:GAS_SALES\n"})})]})}function l(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(E,{...e})}):E(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>c});var s=n(7294);const t={},o=s.createContext(t);function c(e){const r=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/07b341f3.56724c70.js b/assets/js/07b341f3.56724c70.js new file mode 100644 index 0000000000..176c25ece2 --- /dev/null +++ b/assets/js/07b341f3.56724c70.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8267],{3985:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var r=t(5893),s=t(1151);const o={},c="VARIABLES",a={id:"about/references/keywords/VARIABLES",title:"VARIABLES",description:"VARIABLES",source:"@site/docs/about/references/keywords/VARIABLES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/VARIABLES",permalink:"/ecalc/docs/about/references/keywords/VARIABLES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/VARIABLES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"UPSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL"},next:{title:"VENTING_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS"}},i={},d=[{value:"Description",id:"description",level:2}];function u(e){const n={a:"a",h1:"h1",h2:"h2",p:"p",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"variables",children:"VARIABLES"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"})}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(n.p,{children:"This keyword is used to define variables which can be used throughout the YAML file via the use of expressions.\nThese variables can be based on time or can be independent."}),"\n",(0,r.jsxs)(n.p,{children:["Information about defining and using variables can be seen ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/variables",children:"here"}),"."]})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>c});var r=t(7294);const s={},o=r.createContext(s);function c(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/084f7ebf.fbfeb6c7.js b/assets/js/084f7ebf.fbfeb6c7.js new file mode 100644 index 0000000000..949c079966 --- /dev/null +++ b/assets/js/084f7ebf.fbfeb6c7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3847],{4395:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>R,contentTitle:()=>E,default:()=>d,frontMatter:()=>t,metadata:()=>c,toc:()=>S});var s=n(5893),o=n(1151);const t={},E="DOWNSTREAM_PRESSURE_CONTROL",c={id:"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",title:"DOWNSTREAM_PRESSURE_CONTROL",description:"MODELS /",source:"@site/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE"},next:{title:"EFFICIENCY",permalink:"/ecalc/docs/about/references/keywords/EFFICIENCY"}},R={},S=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function a(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"downstream_pressure_control",children:"DOWNSTREAM_PRESSURE_CONTROL"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"}),"\n/ ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",children:"DOWNSTREAM_PRESSURE_CONTROL"})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["This keyword is used only for ",(0,s.jsx)(r.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})," type. It is used within the ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})," keyword."]}),"\n",(0,s.jsxs)(r.p,{children:["The pressure control method downstream (after) the interstage pressure is specified in this keyword.\nFor more explanation see ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n DOWNSTREAM_PRESSURE_CONTROL: \n ...\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: UPSTREAM_CHOKE\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE\n"})})]})}function d(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>c,a:()=>E});var s=n(7294);const o={},t=s.createContext(o);function E(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:E(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0aeda122.d9b45105.js b/assets/js/0aeda122.d9b45105.js new file mode 100644 index 0000000000..b07fa13337 --- /dev/null +++ b/assets/js/0aeda122.d9b45105.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7832],{8870:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>u,frontMatter:()=>c,metadata:()=>i,toc:()=>a});var r=s(5893),o=s(1151);const c={},t="HEAD",i={id:"about/references/keywords/HEAD",title:"HEAD",description:"Description",source:"@site/docs/about/references/keywords/HEAD.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/HEAD",permalink:"/ecalc/docs/about/references/keywords/HEAD",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/HEAD.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"HCEXPORT",permalink:"/ecalc/docs/about/references/keywords/HCEXPORT"},next:{title:"HEAD_MARGIN",permalink:"/ecalc/docs/about/references/keywords/HEAD_MARGIN"}},d={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"COMPRESSORS",id:"compressors",level:3},{value:"PUMPS",id:"pumps",level:3},{value:"Example",id:"example",level:2},{value:"COMPRESSORS",id:"compressors-1",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"head",children:"HEAD"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"HEAD"})," is a keyword that is used defining ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"PUMP"})," and ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"COMPRESSOR CHARTS"}),".\nHead can either be given as a M, KJ_PER_KG, JOULE_PER_KG."]}),"\n",(0,r.jsxs)(n.p,{children:["For compressors, it is used in two separate ways under the ",(0,r.jsx)(n.code,{children:"MODELS"})," or section:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Defining the ",(0,r.jsx)(n.code,{children:"UNITS"})," of ",(0,r.jsx)(n.code,{children:"HEAD"})]}),"\n",(0,r.jsxs)(n.li,{children:["Defining the set of values for ",(0,r.jsx)(n.code,{children:"HEAD"})," under ",(0,r.jsx)(n.code,{children:"CURVES"})," section. Here, this ",(0,r.jsx)(n.strong,{children:"must"})," be given as a set of values whose length (number of variables) match the correlating ",(0,r.jsx)(n.code,{children:"EFFICIENCY"})," and ",(0,r.jsx)(n.code,{children:"RATE"})," values."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For pumps, it is defined under the ",(0,r.jsx)(n.code,{children:"FACILITY_INPUTS"})," section."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.h3,{id:"compressors",children:"COMPRESSORS"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n ...\n UNITS:\n HEAD: \n ...\n ....\n"})}),"\n",(0,r.jsx)(n.h3,{id:"pumps",children:"PUMPS"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: \n ...\n UNITS:\n HEAD: \n ...\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.h3,{id:"compressors-1",children:"COMPRESSORS"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n"})})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>i,a:()=>t});var r=s(7294);const o={},c=r.createContext(o);function t(e){const n=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f7b5825.b7b38229.js b/assets/js/0f7b5825.b7b38229.js new file mode 100644 index 0000000000..9554a1204a --- /dev/null +++ b/assets/js/0f7b5825.b7b38229.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7238],{8418:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>i,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var t=n(5893),c=n(1151);const s={},o="ELECTRICITY2FUEL",a={id:"about/references/keywords/ELECTRICITY2FUEL",title:"ELECTRICITY2FUEL",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/ELECTRICITY2FUEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/ELECTRICITY2FUEL",permalink:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/ELECTRICITY2FUEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EFFICIENCY",permalink:"/ecalc/docs/about/references/keywords/EFFICIENCY"},next:{title:"EMISSION",permalink:"/ecalc/docs/about/references/keywords/EMISSION"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Example 1",id:"example-1",level:3},{value:"Example 2",id:"example-2",level:3}];function l(e){const r={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,c.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"electricity2fuel",children:"ELECTRICITY2FUEL"}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})]}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Required"}),(0,t.jsx)(r.th,{children:"Child of"}),(0,t.jsx)(r.th,{children:"Children/Options"})]})}),(0,t.jsx)(r.tbody,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Yes"}),(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"GENERATORSETS"})}),(0,t.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,t.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," specifies the correlation between the electric power\ndelivered and the fuel consumed by a generator set."]}),"\n",(0,t.jsx)(r.admonition,{type:"note",children:(0,t.jsxs)(r.p,{children:["Note that this describes the relation for a ",(0,t.jsx)(r.em,{children:"set"}),' of generators and if there is more than one\ngenerator, the power vs. fuel usually makes a "jump" when the capacity of the generator(s) is\nexceeded and an additional generator is started.']})}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," may be modelled with a constant function through time or\nwith different power vs. fuel relations for different time intervals."]}),"\n",(0,t.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"ELECTRICITY2FUEL: \n"})}),"\n",(0,t.jsx)(r.p,{children:"or"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"ELECTRICITY2FUEL:\n : \n : \n"})}),"\n",(0,t.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(r.h3,{id:"example-1",children:"Example 1"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"ELECTRICITY2FUEL: generatorset_electricity_to_fuel_reference\n"})}),"\n",(0,t.jsx)(r.h3,{id:"example-2",children:"Example 2"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"ELECTRICITY2FUEL:\n 2001-01-01: generatorset_electricity_to_fuel_reference1\n 2005-01-01: generatorset_electricity_to_fuel_reference2\n"})}),"\n",(0,t.jsxs)(r.p,{children:["Where ",(0,t.jsx)(r.code,{children:"generatorset_electricity_to_fuel_reference"})," is a ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),"\nof ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," ",(0,t.jsx)(r.code,{children:"ELECTRICITY2FUEL"}),"."]})]})}function h(e={}){const{wrapper:r}={...(0,c.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>o});var t=n(7294);const c={},s=t.createContext(c);function o(e){const r=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),t.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0fd76486.9d4cbe95.js b/assets/js/0fd76486.9d4cbe95.js new file mode 100644 index 0000000000..f4358f1dc7 --- /dev/null +++ b/assets/js/0fd76486.9d4cbe95.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8746],{9632:(e,n,l)=>{l.r(n),l.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>t,metadata:()=>i,toc:()=>r});var o=l(5893),a=l(1151);const t={sidebar_position:7,description:"Examples of eCalc usage"},s="Examples",i={id:"about/modelling/examples/index",title:"Examples",description:"Examples of eCalc usage",source:"@site/docs/about/modelling/examples/index.md",sourceDirName:"about/modelling/examples",slug:"/about/modelling/examples/",permalink:"/ecalc/docs/about/modelling/examples/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/examples/index.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,description:"Examples of eCalc usage"},sidebar:"about",previous:{title:"Generic Workflow",permalink:"/ecalc/docs/about/modelling/workflow/generic_workflow"},next:{title:"Simple model",permalink:"/ecalc/docs/about/modelling/examples/simple"}},c={},r=[];function d(e){const n={a:"a",h1:"h1",li:"li",p:"p",ul:"ul",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"examples",children:"Examples"}),"\n",(0,o.jsx)(n.p,{children:"Here you find some examples."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/ecalc/docs/about/modelling/examples/simple",children:"Simple example"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/ecalc/docs/about/modelling/examples/advanced",children:"Advanced example"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/ecalc/docs/about/modelling/examples/drogon",children:"Drogon example"})}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"The models are also available in the Python library under the libecalc.examples module."})]})}function m(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},1151:(e,n,l)=>{l.d(n,{Z:()=>i,a:()=>s});var o=l(7294);const a={},t=o.createContext(a);function s(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/10c684b0.55745dfa.js b/assets/js/10c684b0.55745dfa.js new file mode 100644 index 0000000000..13bb96f2de --- /dev/null +++ b/assets/js/10c684b0.55745dfa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5870],{47:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var r=n(5893),a=n(1151);const o={},s="START",i={id:"about/references/keywords/START",title:"START",description:"START",source:"@site/docs/about/references/keywords/START.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/START",permalink:"/ecalc/docs/about/references/keywords/START",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/START.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"STAGES",permalink:"/ecalc/docs/about/references/keywords/STAGES"},next:{title:"STREAM",permalink:"/ecalc/docs/about/references/keywords/STREAM"}},c={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"start",children:"START"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/START",children:"START"})}),"\n",(0,r.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(t.p,{children:"The global start date for eCalc to begin energy and emission calculations. It is recommended that you have control\nof which date you want data to be calculated and exported for, in particular when using LTP and FDE workflows."}),"\n",(0,r.jsx)(t.p,{children:'The is , meaning that if you specify 2020-01-01, the whole year of 2020 is included in the output. The hours, minutes and seconds\nof the day are implicitly set to "00:00:00", so the counting starts from midnight on January 1st 2020.'}),"\n",(0,r.jsxs)(t.p,{children:["You can provide a date that is before the global time vector, but it is recommended to set it to the start of your timeseries data. Normally the\ntimeseries data provides this information directly, when specifying the first time step e.g. 2020-01-01, meaning that the data is valid from January 1st 2020,\nbut data by default has (",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"}),"), which means that it backfills data, and then we will know how far back\nto backfill data (ie defines this for the first period)."]}),"\n",(0,r.jsxs)(t.p,{children:["The cousin of is ",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/END",children:"END"})," and have similar behaviour, but check the reference for details, to make sure you have the correct understanding."]}),"\n",(0,r.jsxs)(t.p,{children:["If is not specified, eCalc will make and educated ",(0,r.jsx)(t.em,{children:"GUESS"})," on when the output data should start, but that may be incorrect, therefore it is recommended that you\nstay in control of that to make sure you get correct output."]}),"\n",(0,r.jsx)(t.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"START: \n"})}),"\n",(0,r.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,r.jsxs)(t.p,{children:["Given an input dataset from ",(0,r.jsx)(t.strong,{children:"01-01-2000 - 01-01-2040"}),", ignoring the first 20 years of data\ncan be achieved as follows:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"START: 2020-01-01\n"})})]})}function h(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var r=n(7294);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/11516e85.71cc9aa4.js b/assets/js/11516e85.71cc9aa4.js new file mode 100644 index 0000000000..7ceb32e804 --- /dev/null +++ b/assets/js/11516e85.71cc9aa4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3054],{4788:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>R,contentTitle:()=>c,default:()=>d,frontMatter:()=>t,metadata:()=>E,toc:()=>a});var s=n(5893),o=n(1151);const t={},c="UPSTREAM_PRESSURE_CONTROL",E={id:"about/references/keywords/UPSTREAM_PRESSURE_CONTROL",title:"UPSTREAM_PRESSURE_CONTROL",description:"MODELS /",source:"@site/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"UNITS",permalink:"/ecalc/docs/about/references/keywords/UNITS"},next:{title:"VARIABLES",permalink:"/ecalc/docs/about/references/keywords/VARIABLES"}},R={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function S(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"upstream_pressure_control",children:"UPSTREAM_PRESSURE_CONTROL"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"}),"\n/ ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",children:"UPSTREAM_PRESSURE_CONTROL"})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["This keyword is used only for ",(0,s.jsx)(r.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})," type. It is used within the ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})," keyword."]}),"\n",(0,s.jsxs)(r.p,{children:["The pressure control method upstream (before) the interstage pressure is specified in this keyword.\nFor more explanation see ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: \n ...\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: UPSTREAM_CHOKE\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE\n"})})]})}function d(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(S,{...e})}):S(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>E,a:()=>c});var s=n(7294);const o={},t=s.createContext(o);function c(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function E(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1287dd43.e17ad200.js b/assets/js/1287dd43.e17ad200.js new file mode 100644 index 0000000000..c6f87ed359 --- /dev/null +++ b/assets/js/1287dd43.e17ad200.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3700],{9474:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>a});var i=t(5893),s=t(1151);const o={},r="Git",l={id:"contribute/guides/git",title:"Git",description:"Git is the version control system (VCS) that is responsible for tracking all changes done to the code base.",source:"@site/docs/contribute/guides/01-git.md",sourceDirName:"contribute/guides",slug:"/contribute/guides/git",permalink:"/ecalc/docs/contribute/guides/git",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/guides/01-git.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"contribute",previous:{title:"Guides",permalink:"/ecalc/docs/category/guides"},next:{title:"Conventional Commits",permalink:"/ecalc/docs/contribute/guides/conventional-commits"}},c={},a=[{value:"Setting up Git",id:"setting-up-git",level:2},{value:"Using Git",id:"using-git",level:2},{value:"Cloning a git repository",id:"cloning-a-git-repository",level:3},{value:"Tell Git who you are",id:"tell-git-who-you-are",level:3},{value:"Create your own branch",id:"create-your-own-branch",level:3},{value:"Switch between existing branches",id:"switch-between-existing-branches",level:3},{value:"Fetch changes from GitHub",id:"fetch-changes-from-github",level:3},{value:"Send your changes to GitHub",id:"send-your-changes-to-github",level:3},{value:"Check status of changes",id:"check-status-of-changes",level:3},{value:"Add files",id:"add-files",level:3},{value:"Commit changes",id:"commit-changes",level:3},{value:"Send changes to GitHub",id:"send-changes-to-github",level:3},{value:"Workflow examples",id:"workflow-examples",level:2},{value:"Pull Requests",id:"pull-requests",level:3},{value:"Fork the repository",id:"fork-the-repository",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"git",children:"Git"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://git-scm.com/",children:"Git"})," is the version control system (VCS) that is responsible for tracking all changes done to the code base.\nGit is a distributed version control system that tracks changes in any set of computer files, and allows for collaborative development\nof source code and documentation. We use Git as a service through GitHub. See ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started",children:"GitHub Docs"}),"\nfor more information about GitHub and how to get started."]}),"\n",(0,i.jsxs)(n.admonition,{type:"info",children:[(0,i.jsx)(n.p,{children:"If you do not want to work with files locally, GitHub lets you complete many Git-related actions directly in the browser, including:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/quickstart/set-up-git#:~:text=the%20browser%2C%20including%3A-,Creating%20a%20repository,-Forking%20a%20repository",children:"Creating a repository"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/quickstart/set-up-git#:~:text=Creating%20a%20repository-,Forking%20a%20repository,-Managing%20files",children:"Forking a repository"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/quickstart/set-up-git#:~:text=Forking%20a%20repository-,Managing%20files,-Being%20social",children:"Managing files"})}),"\n"]})]}),"\n",(0,i.jsx)(n.h2,{id:"setting-up-git",children:"Setting up Git"}),"\n",(0,i.jsxs)(n.p,{children:["Go to ",(0,i.jsx)(n.a,{href:"https://git-scm.com/downloads",children:"git-scm.com"})," to download the appropriate git client unless it is already installed on your system."]}),"\n",(0,i.jsx)(n.p,{children:"To verify that git is installed, you can run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git --version\n"})}),"\n",(0,i.jsxs)(n.p,{children:["See ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/quickstart/set-up-git",children:"GitHub Docs - Set up Git"})," for detailed instructions."]}),"\n",(0,i.jsx)(n.h2,{id:"using-git",children:"Using Git"}),"\n",(0,i.jsx)(n.p,{children:"Git is a powerful tool that can be used in many ways. We recommend the following resources:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Introduction to git - ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/using-git/about-git",children:"GitHub - About git"})]}),"\n",(0,i.jsxs)(n.li,{children:["How to get out of git trouble ",(0,i.jsx)(n.a,{href:"https://ohshitgit.com/",children:"Oh shit, Git!?!"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Below we will describe the most commonly used commands and scenarios when working with git."}),"\n",(0,i.jsxs)(n.admonition,{type:"info",children:[(0,i.jsx)(n.p,{children:"In the following sections we use the syntax <some text> where you should fill in your own values, such as:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"<change type>"}),": ",(0,i.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"conventional commits"})," change types such as feat, fix, docs, test, chore, refactor, etc."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"<issue number>"}),": the GitHub ",(0,i.jsx)(n.a,{href:"https://github.com/equinor/ecalc",children:"Issue Number"})," that you are solving. This may be omitted if you are fixing something tiny."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"<description>"}),": a short summary of the code changes, e.g., fix: array parsing issue when multiple spaces were contained in string."]}),"\n"]})]}),"\n",(0,i.jsx)(n.h3,{id:"cloning-a-git-repository",children:"Cloning a git repository"}),"\n",(0,i.jsx)(n.p,{children:"Navigate to the location where you want to store the code, and clone the repository:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git clone git@github.com:equinor/ecalc.git\n"})}),"\n",(0,i.jsx)(n.p,{children:"This will create a local copy of a project that already exists remotely. The copy will be stored in a sub-folder, with the\nsame name as the repository, ecalc/."}),"\n",(0,i.jsx)(n.h3,{id:"tell-git-who-you-are",children:"Tell Git who you are"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'git config --global user.name "My name"\ngit config --global user.email example@email.com\n'})}),"\n",(0,i.jsx)(n.p,{children:"This is what will show in the git log when you make changes."}),"\n",(0,i.jsx)(n.h3,{id:"create-your-own-branch",children:"Create your own branch"}),"\n",(0,i.jsx)(n.p,{children:"In order to create a new local branch and switch to it:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git checkout -b /-\n"})}),"\n",(0,i.jsx)(n.p,{children:"for new versions of git you may also use the more intuitive."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git switch -c /-\n"})}),"\n",(0,i.jsx)(n.h3,{id:"switch-between-existing-branches",children:"Switch between existing branches"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git checkout \n"})}),"\n",(0,i.jsx)(n.h3,{id:"fetch-changes-from-github",children:"Fetch changes from GitHub"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git pull\n"})}),"\n",(0,i.jsx)(n.p,{children:"This will update the local branch you are currently in, with changes done in GitHub."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git push --set-upstream origin /-\n"})}),"\n",(0,i.jsx)(n.h3,{id:"send-your-changes-to-github",children:"Send your changes to GitHub"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git push\n"})}),"\n",(0,i.jsx)(n.p,{children:"This will update the remove repository on GitHub. If it is the first time for a new branch you will also\nhave to tell git that you are creating a new remote branch by using the command:"}),"\n",(0,i.jsx)(n.h3,{id:"check-status-of-changes",children:"Check status of changes"}),"\n",(0,i.jsx)(n.p,{children:"List the files you have changed and those you still need to add or commit:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git status\n"})}),"\n",(0,i.jsx)(n.h3,{id:"add-files",children:"Add files"}),"\n",(0,i.jsx)(n.p,{children:"Add new or changed files"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git add \n"})}),"\n",(0,i.jsx)(n.p,{children:"or adding everything in and below your working directory"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git add .\n"})}),"\n",(0,i.jsx)(n.h3,{id:"commit-changes",children:"Commit changes"}),"\n",(0,i.jsx)(n.p,{children:"Commit any files you've added with git add, and also commit any files you've changed since then:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'git commit -m ": : /-\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Add the changed files","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git add \n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Commit your changes using the ",(0,i.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"conventional commits"})," formatting for the commit messages.","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'git commit -m ": "\n'})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["If your changes are in conflict with changes done by other, then you need to rebase and solve the change conflicts. This also ensures your code is running on the latest available code.","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git fetch\ngit rebase origin/main\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Push changes to GitHub","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git push --set-upstream origin /-\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["You can now ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request",children:"Create a Pull Request"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"fork-the-repository",children:"Fork the repository"}),"\n",(0,i.jsxs)(n.p,{children:["For external developers, you will ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/quickstart/contributing-to-projects",children:"contribute to the project through forking"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Here's a quick guide:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Create your own fork of the repository"}),"\n",(0,i.jsxs)(n.li,{children:["Clone the project to your machine","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git clone git@github.com:equinor/ecalc.git\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["To keep track of the original repository add another remote named upstream","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git remote add upstream git@github.com:equinor/template-fastapi-react.git\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Create a branch locally with a succinct but descriptive name and prefixed with change type.","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git checkout -b /-\n"})}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Make the changes in the created branch."}),"\n",(0,i.jsx)(n.li,{children:"Add and run tests for your changes if needed (we only take pull requests with passing tests)."}),"\n",(0,i.jsxs)(n.li,{children:["Add the changed files","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git add \n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Commit your changes using the ",(0,i.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"conventional commits"})," formatting for the commit messages.","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'git commit -m ": "\n'})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Before you send the pull request, be sure to rebase onto the upstream source. This ensures your code is running on the latest available code.","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git fetch upstream\ngit rebase upstream/main\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Push to your fork.","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git push origin feature/my-new-feature\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Submit a ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork",children:"Pull Request from a fork"}),". Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"That's it... thank you for your contribution!"}),"\n",(0,i.jsx)(n.p,{children:"After your pull request is merged, you can safely delete your branch."})]})}function d(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>r});var i=t(7294);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1300feb7.1e8c5801.js b/assets/js/1300feb7.1e8c5801.js new file mode 100644 index 0000000000..457fd362f6 --- /dev/null +++ b/assets/js/1300feb7.1e8c5801.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8269],{2256:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>a,default:()=>E,frontMatter:()=>o,metadata:()=>t,toc:()=>l});var s=r(5893),c=r(1151);const o={},a="RATE",t={id:"about/references/keywords/RATE",title:"RATE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/RATE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/RATE",permalink:"/ecalc/docs/about/references/keywords/RATE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/RATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"PUMPS",permalink:"/ecalc/docs/about/references/keywords/PUMPS"},next:{title:"RATE_FRACTIONS",permalink:"/ecalc/docs/about/references/keywords/RATE_FRACTIONS"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Use in EMISSION for VENTING_EMITTERS (from eCalc v8.8)",id:"use-in-emission-for-venting_emitters-from-ecalc-v88",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example-1",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"rate",children:"RATE"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/RATE",children:"RATE"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(n.p,{children:"This can be used in three ways:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Used to define the rate for some ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\ntypes using an ",(0,s.jsx)(n.code,{children:"Expression"})]}),"\n",(0,s.jsxs)(n.li,{children:["Used defining the units of a ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"PUMP"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"COMPRESSOR CHARTS"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["From eCalc v8.8: Used to define the rate for ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION",children:"EMISSION"})," in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"RATE: \n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: \n TYPE: \n ...\n UNITS:\n RATE: \n ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"RATE: SIM1:GAS_PROD\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: pump\n TYPE: PUMP_CHART_VARIABLE_SPEED\n ...\n UNITS:\n RATE: \n ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"use-in-emission-for-venting_emitters-from-ecalc-v88",children:"Use in EMISSION for VENTING_EMITTERS (from eCalc v8.8)"}),"\n",(0,s.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: \n CATEGORY: \n EMISSION:\n NAME: \n RATE:\n VALUE: \n UNIT: \n TYPE: \n"})}),"\n",(0,s.jsx)(n.h3,{id:"example-1",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: SomeVentingEmitter\n CATEGORY: COLD-VENTING-FUGITIVE\n EMISSION:\n NAME: CH4\n RATE:\n VALUE: 4\n UNIT: kg/d\n TYPE: STREAM_DAY\n"})})]})}function E(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>t,a:()=>a});var s=r(7294);const c={},o=s.createContext(c);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.5672d2a5.js b/assets/js/14eb3368.5672d2a5.js new file mode 100644 index 0000000000..4beacaa79c --- /dev/null +++ b/assets/js/14eb3368.5672d2a5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9817],{1310:(e,t,s)=>{s.d(t,{Z:()=>p});s(7294);var n=s(512),i=s(5281),a=s(2802),r=s(8596),c=s(3692),o=s(5999),l=s(4996),d=s(5893);function m(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const u={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,l.Z)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(c.Z,{"aria-label":(0,o.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(m,{className:u.breadcrumbHomeIcon})})})}const b={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function x(e){let{children:t,href:s,isLast:n}=e;const i="breadcrumbs__link";return n?(0,d.jsx)("span",{className:i,itemProp:"name",children:t}):s?(0,d.jsx)(c.Z,{className:i,href:s,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:t})}):(0,d.jsx)("span",{className:i,children:t})}function v(e){let{children:t,active:s,index:i,addMicrodata:a}=e;return(0,d.jsxs)("li",{...a&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,n.Z)("breadcrumbs__item",{"breadcrumbs__item--active":s}),children:[t,(0,d.jsx)("meta",{itemProp:"position",content:String(i+1)})]})}function p(){const e=(0,a.s1)(),t=(0,r.Ns)();return e?(0,d.jsx)("nav",{className:(0,n.Z)(i.k.docs.docBreadcrumbs,b.breadcrumbsContainer),"aria-label":(0,o.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,d.jsx)(h,{}),e.map(((t,s)=>{const n=s===e.length-1,i="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(v,{active:n,index:s,addMicrodata:!!i,children:(0,d.jsx)(x,{href:i,isLast:n,children:t.label})},s)}))]})}):null}},4228:(e,t,s)=>{s.r(t),s.d(t,{default:()=>I});s(7294);var n=s(1944),i=s(2802),a=s(4996),r=s(512),c=s(3692),o=s(3919),l=s(5999),d=s(2503);const m={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var u=s(5893);function h(e){let{href:t,children:s}=e;return(0,u.jsx)(c.Z,{href:t,className:(0,r.Z)("card padding--lg",m.cardContainer),children:s})}function b(e){let{href:t,icon:s,title:n,description:i}=e;return(0,u.jsxs)(h,{href:t,children:[(0,u.jsxs)(d.Z,{as:"h2",className:(0,r.Z)("text--truncate",m.cardTitle),title:n,children:[s," ",n]}),i&&(0,u.jsx)("p",{className:(0,r.Z)("text--truncate",m.cardDescription),title:i,children:i})]})}function x(e){let{item:t}=e;const s=(0,i.LM)(t);return s?(0,u.jsx)(b,{href:s,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function v(e){let{item:t}=e;const s=(0,o.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",n=(0,i.xz)(t.docId??void 0);return(0,u.jsx)(b,{href:t.href,icon:s,title:t.label,description:t.description??n?.description})}function p(e){let{item:t}=e;switch(t.type){case"link":return(0,u.jsx)(v,{item:t});case"category":return(0,u.jsx)(x,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function g(e){let{className:t}=e;const s=(0,i.jA)();return(0,u.jsx)(j,{items:s.items,className:t})}function j(e){const{items:t,className:s}=e;if(!t)return(0,u.jsx)(g,{...e});const n=(0,i.MN)(t);return(0,u.jsx)("section",{className:(0,r.Z)("row",s),children:n.map(((e,t)=>(0,u.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,u.jsx)(p,{item:e})},t)))})}var f=s(4966),N=s(3120),Z=s(4364),L=s(1310);const _={generatedIndexPage:"generatedIndexPage_vN6x",list:"list_eTzJ",title:"title_kItE"};function k(e){let{categoryGeneratedIndex:t}=e;return(0,u.jsx)(n.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,a.Z)(t.image)})}function T(e){let{categoryGeneratedIndex:t}=e;const s=(0,i.jA)();return(0,u.jsxs)("div",{className:_.generatedIndexPage,children:[(0,u.jsx)(N.Z,{}),(0,u.jsx)(L.Z,{}),(0,u.jsx)(Z.Z,{}),(0,u.jsxs)("header",{children:[(0,u.jsx)(d.Z,{as:"h1",className:_.title,children:t.title}),t.description&&(0,u.jsx)("p",{children:t.description})]}),(0,u.jsx)("article",{className:"margin-top--lg",children:(0,u.jsx)(j,{items:s.items,className:_.list})}),(0,u.jsx)("footer",{className:"margin-top--lg",children:(0,u.jsx)(f.Z,{previous:t.navigation.previous,next:t.navigation.next})})]})}function I(e){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(k,{...e}),(0,u.jsx)(T,{...e})]})}},4966:(e,t,s)=>{s.d(t,{Z:()=>o});s(7294);var n=s(5999),i=s(512),a=s(3692),r=s(5893);function c(e){const{permalink:t,title:s,subLabel:n,isNext:c}=e;return(0,r.jsxs)(a.Z,{className:(0,i.Z)("pagination-nav__link",c?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[n&&(0,r.jsx)("div",{className:"pagination-nav__sublabel",children:n}),(0,r.jsx)("div",{className:"pagination-nav__label",children:s})]})}function o(e){const{previous:t,next:s}=e;return(0,r.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,n.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,r.jsx)(c,{...t,subLabel:(0,r.jsx)(n.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),s&&(0,r.jsx)(c,{...s,subLabel:(0,r.jsx)(n.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},4364:(e,t,s)=>{s.d(t,{Z:()=>o});s(7294);var n=s(512),i=s(5999),a=s(5281),r=s(4477),c=s(5893);function o(e){let{className:t}=e;const s=(0,r.E)();return s.badge?(0,c.jsx)("span",{className:(0,n.Z)(t,a.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,c.jsx)(i.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:s.label},children:"Version: {versionLabel}"})}):null}},3120:(e,t,s)=>{s.d(t,{Z:()=>v});s(7294);var n=s(512),i=s(2263),a=s(3692),r=s(5999),c=s(143),o=s(5281),l=s(373),d=s(4477),m=s(5893);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:s}=e;return(0,m.jsx)(r.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,m.jsx)("b",{children:s.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:s}=e;return(0,m.jsx)(r.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,m.jsx)("b",{children:s.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=u[e.versionMetadata.banner];return(0,m.jsx)(t,{...e})}function b(e){let{versionLabel:t,to:s,onClick:n}=e;return(0,m.jsx)(r.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,m.jsx)("b",{children:(0,m.jsx)(a.Z,{to:s,onClick:n,children:(0,m.jsx)(r.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function x(e){let{className:t,versionMetadata:s}=e;const{siteConfig:{title:a}}=(0,i.Z)(),{pluginId:r}=(0,c.gA)({failfast:!0}),{savePreferredVersionName:d}=(0,l.J)(r),{latestDocSuggestion:u,latestVersionSuggestion:x}=(0,c.Jo)(r),v=u??(p=x).docs.find((e=>e.id===p.mainDocId));var p;return(0,m.jsxs)("div",{className:(0,n.Z)(t,o.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,m.jsx)("div",{children:(0,m.jsx)(h,{siteTitle:a,versionMetadata:s})}),(0,m.jsx)("div",{className:"margin-top--md",children:(0,m.jsx)(b,{versionLabel:x.label,to:v.path,onClick:()=>d(x.name)})})]})}function v(e){let{className:t}=e;const s=(0,d.E)();return s.banner?(0,m.jsx)(x,{className:t,versionMetadata:s}):null}}}]); \ No newline at end of file diff --git a/assets/js/15962da1.f6006d5c.js b/assets/js/15962da1.f6006d5c.js new file mode 100644 index 0000000000..9ec1048489 --- /dev/null +++ b/assets/js/15962da1.f6006d5c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[996],{5730:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>d,contentTitle:()=>c,default:()=>l,frontMatter:()=>t,metadata:()=>a,toc:()=>i});var s=n(5893),o=n(1151);const t={},c="GENERATORSETS",a={id:"about/references/keywords/GENERATORSETS",title:"GENERATORSETS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/GENERATORSETS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/GENERATORSETS",permalink:"/ecalc/docs/about/references/keywords/GENERATORSETS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/GENERATORSETS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FUEL_TYPES",permalink:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},next:{title:"HCEXPORT",permalink:"/ecalc/docs/about/references/keywords/HCEXPORT"}},d={},i=[{value:"Description",id:"description",level:2}];function E(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"generatorsets",children:"GENERATORSETS"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["Under ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})," one or\nseveral ",(0,s.jsx)(r.code,{children:"generator sets"})," (a 'set' of an engine of some sort and a generator) are specified in a list.\nEach generator set requires three sub-keywords, ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," and\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"})," and ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["This keyword is optional. However, the only requirement is that each\ninstallation must have at least one of ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"}),"\nand ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["See ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations",children:"GENERATOR SETS"})," for more details about usage."]})]})}function l(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(E,{...e})}):E(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>c});var s=n(7294);const o={},t=s.createContext(o);function c(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/163041ea.dbd3285c.js b/assets/js/163041ea.dbd3285c.js new file mode 100644 index 0000000000..488d4756eb --- /dev/null +++ b/assets/js/163041ea.dbd3285c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9480],{7498:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>c,frontMatter:()=>t,metadata:()=>l,toc:()=>a});var r=o(5893),n=o(1151);const t={title:"Single speed compressor train",sidebar_position:1},i=void 0,l={id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",title:"Single speed compressor train",description:"The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft.",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Single speed compressor train",sidebar_position:1},sidebar:"about",previous:{title:"Compressor train types",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"},next:{title:"Simplified variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model"}},d={},a=[{value:"Format",id:"format",level:2}];function m(e){const s={a:"a",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.p,{children:"The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft.\nBeing single speed compressors on a common shaft means that all compressors will run at the exact same fixed speed, and\nthis shaft speed can not be varied. Since the shaft speed can not vary, the problem is overdefined given the rate,\nsuction pressure and discharge pressure. A method for controlling the pressure also needs to be defined, to be able\nto calculate the energy usage for given rates, suction pressures and discharge pressures."}),"\n",(0,r.jsx)(s.p,{children:"This means that a single speed compressor model needs the following to be defined:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"A polytropic compressor chart for every compressor stage in the compressor train. For single speed trains, eCalc\nonly supports user defined single speed compressor charts."}),"\n",(0,r.jsxs)(s.li,{children:["A ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/fluid_model",children:"FLUID MODEL"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:["A ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",children:"PRESSURE_CONTROL"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["The model is defined under the main keyword ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," in the format"]}),"\n",(0,r.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: \n PRESSURE_CONTROL: \n MAXIMUM_DISCHARGE_PRESSURE: \n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n - ... and so forth for each stage in the train\n POWER_ADJUSTMENT_CONSTANT: \n MAXIMUM_POWER: \n CALCULATE_MAX_RATE: \n"})})]})}function c(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}},1151:(e,s,o)=>{o.d(s,{Z:()=>l,a:()=>i});var r=o(7294);const n={},t=r.createContext(n);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1772.61b36e2a.js b/assets/js/1772.61b36e2a.js new file mode 100644 index 0000000000..d5dabcc6c0 --- /dev/null +++ b/assets/js/1772.61b36e2a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1772],{5658:(e,t,n)=>{n.d(t,{Z:()=>r});n(7294);var i=n(512),o=n(5999),s=n(2503),a=n(5893);function r(e){let{className:t}=e;return(0,a.jsx)("main",{className:(0,i.Z)("container margin-vert--xl",t),children:(0,a.jsx)("div",{className:"row",children:(0,a.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,a.jsx)(s.Z,{as:"h1",className:"hero__title",children:(0,a.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,a.jsx)("p",{children:(0,a.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,a.jsx)("p",{children:(0,a.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},1772:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});n(7294);var i=n(5999),o=n(1944),s=n(8862),a=n(5658),r=n(5893);function d(){const e=(0,i.I)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.d,{title:e}),(0,r.jsx)(s.Z,{children:(0,r.jsx)(a.Z,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/17896441.bec7cf3d.js b/assets/js/17896441.bec7cf3d.js new file mode 100644 index 0000000000..e7683d1e5c --- /dev/null +++ b/assets/js/17896441.bec7cf3d.js @@ -0,0 +1 @@ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7918],{9047:(e,t,n)=>{"use strict";n.d(t,{Z:()=>w});var s=n(7294),a=n(5893);function o(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),o=t.filter((e=>e!==n)),i=n?.props.children;return{mdxAdmonitionTitle:i,rest:o.length>0?(0,a.jsx)(a.Fragment,{children:o}):null}}(e.children),o=e.title??t;return{...e,...o&&{title:o},children:n}}var i=n(512),l=n(5999),c=n(5281);const r={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:t,className:n,children:s}=e;return(0,a.jsx)("div",{className:(0,i.Z)(c.k.common.admonition,c.k.common.admonitionType(t),r.admonition,n),children:s})}function u(e){let{icon:t,title:n}=e;return(0,a.jsxs)("div",{className:r.admonitionHeading,children:[(0,a.jsx)("span",{className:r.admonitionIcon,children:t}),n]})}function m(e){let{children:t}=e;return t?(0,a.jsx)("div",{className:r.admonitionContent,children:t}):null}function h(e){const{type:t,icon:n,title:s,children:o,className:i}=e;return(0,a.jsxs)(d,{type:t,className:i,children:[(0,a.jsx)(u,{title:s,icon:n}),(0,a.jsx)(m,{children:o})]})}function p(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const f={icon:(0,a.jsx)(p,{}),title:(0,a.jsx)(l.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function x(e){return(0,a.jsx)(h,{...f,...e,className:(0,i.Z)("alert alert--secondary",e.className),children:e.children})}function b(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const g={icon:(0,a.jsx)(b,{}),title:(0,a.jsx)(l.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function v(e){return(0,a.jsx)(h,{...g,...e,className:(0,i.Z)("alert alert--success",e.className),children:e.children})}function j(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const N={icon:(0,a.jsx)(j,{}),title:(0,a.jsx)(l.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function C(e){return(0,a.jsx)(h,{...N,...e,className:(0,i.Z)("alert alert--info",e.className),children:e.children})}function k(e){return(0,a.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const L={icon:(0,a.jsx)(k,{}),title:(0,a.jsx)(l.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function y(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const Z={icon:(0,a.jsx)(y,{}),title:(0,a.jsx)(l.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const _={icon:(0,a.jsx)(k,{}),title:(0,a.jsx)(l.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const B={...{note:x,tip:v,info:C,warning:function(e){return(0,a.jsx)(h,{...L,...e,className:(0,i.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,a.jsx)(h,{...Z,...e,className:(0,i.Z)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,a.jsx)(x,{title:"secondary",...e}),important:e=>(0,a.jsx)(C,{title:"important",...e}),success:e=>(0,a.jsx)(v,{title:"success",...e}),caution:function(e){return(0,a.jsx)(h,{..._,...e,className:(0,i.Z)("alert alert--warning",e.className),children:e.children})}}};function w(e){const t=o(e),n=(s=t.type,B[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),B.info));var s;return(0,a.jsx)(n,{...t})}},1310:(e,t,n)=>{"use strict";n.d(t,{Z:()=>b});n(7294);var s=n(512),a=n(5281),o=n(2802),i=n(8596),l=n(3692),c=n(5999),r=n(4996),d=n(5893);function u(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,r.Z)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(l.Z,{"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}const p={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function f(e){let{children:t,href:n,isLast:s}=e;const a="breadcrumbs__link";return s?(0,d.jsx)("span",{className:a,itemProp:"name",children:t}):n?(0,d.jsx)(l.Z,{className:a,href:n,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:t})}):(0,d.jsx)("span",{className:a,children:t})}function x(e){let{children:t,active:n,index:a,addMicrodata:o}=e;return(0,d.jsxs)("li",{...o&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,s.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,d.jsx)("meta",{itemProp:"position",content:String(a+1)})]})}function b(){const e=(0,o.s1)(),t=(0,i.Ns)();return e?(0,d.jsx)("nav",{className:(0,s.Z)(a.k.docs.docBreadcrumbs,p.breadcrumbsContainer),"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,d.jsx)(h,{}),e.map(((t,n)=>{const s=n===e.length-1,a="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(x,{active:s,index:n,addMicrodata:!!a,children:(0,d.jsx)(f,{href:a,isLast:s,children:t.label})},n)}))]})}):null}},7382:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>nt});var s=n(7294),a=n(1944),o=n(902),i=n(5893);const l=s.createContext(null);function c(e){let{children:t,content:n}=e;const a=function(e){return(0,s.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return(0,i.jsx)(l.Provider,{value:a,children:t})}function r(){const e=(0,s.useContext)(l);if(null===e)throw new o.i6("DocProvider");return e}function d(){const{metadata:e,frontMatter:t,assets:n}=r();return(0,i.jsx)(a.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var u=n(512),m=n(7524),h=n(4966);function p(){const{metadata:e}=r();return(0,i.jsx)(h.Z,{previous:e.previous,next:e.next})}var f=n(3120),x=n(4364),b=n(5281),g=n(5999);function v(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return(0,i.jsx)(g.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,i.jsx)("b",{children:(0,i.jsx)("time",{dateTime:new Date(1e3*t).toISOString(),children:n})})},children:" on {date}"})}function j(e){let{lastUpdatedBy:t}=e;return(0,i.jsx)(g.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,i.jsx)("b",{children:t})},children:" by {user}"})}function N(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:s}=e;return(0,i.jsxs)("span",{className:b.k.common.lastUpdated,children:[(0,i.jsx)(g.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?(0,i.jsx)(v,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:s?(0,i.jsx)(j,{lastUpdatedBy:s}):""},children:"Last updated{atDate}{byUser}"}),!1]})}var C=n(3692);const k={iconEdit:"iconEdit_Z9Sw"};function L(e){let{className:t,...n}=e;return(0,i.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,u.Z)(k.iconEdit,t),"aria-hidden":"true",...n,children:(0,i.jsx)("g",{children:(0,i.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function y(e){let{editUrl:t}=e;return(0,i.jsxs)(C.Z,{to:t,className:b.k.common.editThisPage,children:[(0,i.jsx)(L,{}),(0,i.jsx)(g.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var Z=n(3008);const _={tags:"tags_jXut",tag:"tag_QGVx"};function B(e){let{tags:t}=e;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("b",{children:(0,i.jsx)(g.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,u.Z)(_.tags,"padding--none","margin-left--sm"),children:t.map((e=>{let{label:t,permalink:n}=e;return(0,i.jsx)("li",{className:_.tag,children:(0,i.jsx)(Z.Z,{label:t,permalink:n})},n)}))})]})}const w={lastUpdated:"lastUpdated_vwxv"};function T(e){return(0,i.jsx)("div",{className:(0,u.Z)(b.k.docs.docFooterTagsRow,"row margin-bottom--sm"),children:(0,i.jsx)("div",{className:"col",children:(0,i.jsx)(B,{...e})})})}function E(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s,formattedLastUpdatedAt:a}=e;return(0,i.jsxs)("div",{className:(0,u.Z)(b.k.docs.docFooterEditMetaRow,"row"),children:[(0,i.jsx)("div",{className:"col",children:t&&(0,i.jsx)(y,{editUrl:t})}),(0,i.jsx)("div",{className:(0,u.Z)("col",w.lastUpdated),children:(n||s)&&(0,i.jsx)(N,{lastUpdatedAt:n,formattedLastUpdatedAt:a,lastUpdatedBy:s})})]})}function H(){const{metadata:e}=r(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:s,lastUpdatedBy:a,tags:o}=e,l=o.length>0,c=!!(t||n||a);return l||c?(0,i.jsxs)("footer",{className:(0,u.Z)(b.k.docs.docFooter,"docusaurus-mt-lg"),children:[l&&(0,i.jsx)(T,{tags:o}),c&&(0,i.jsx)(E,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:a,formattedLastUpdatedAt:s})]}):null}var A=n(6043),I=n(6668);function M(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const s=n.slice(2,e.level);e.parentIndex=Math.max(...s),n[e.level]=t}));const s=[];return t.forEach((e=>{const{parentIndex:n,...a}=e;n>=0?t[n].children.push(a):s.push(a)})),s}function S(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:s}=e;return t.flatMap((e=>{const t=S({toc:e.children,minHeadingLevel:n,maxHeadingLevel:s});return function(e){return e.level>=n&&e.level<=s}(e)?[{...e,children:t}]:t}))}function U(e){const t=e.getBoundingClientRect();return t.top===t.bottom?U(e.parentNode):t}function z(e,t){let{anchorTopOffset:n}=t;const s=e.find((e=>U(e).top>=n));if(s){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function R(e){const t=(0,s.useRef)(void 0),n=V();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:a,minHeadingLevel:o,maxHeadingLevel:i}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),l=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const s=[];for(let a=t;a<=n;a+=1)s.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(s.join()))}({minHeadingLevel:o,maxHeadingLevel:i}),c=z(l,{anchorTopOffset:n.current}),r=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(a),e.classList.add(a),t.current=e):e.classList.remove(a)}(e,e===r)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,n])}function O(e){let{toc:t,className:n,linkClassName:s,isChild:a}=e;return t.length?(0,i.jsx)("ul",{className:a?void 0:n,children:t.map((e=>(0,i.jsxs)("li",{children:[(0,i.jsx)(C.Z,{to:`#${e.id}`,className:s??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,i.jsx)(O,{isChild:!0,toc:e.children,className:n,linkClassName:s})]},e.id)))}):null}const P=s.memo(O);function $(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:a="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:l,maxHeadingLevel:c,...r}=e;const d=(0,I.L)(),u=l??d.tableOfContents.minHeadingLevel,m=c??d.tableOfContents.maxHeadingLevel,h=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,s.useMemo)((()=>S({toc:M(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:u,maxHeadingLevel:m});return R((0,s.useMemo)((()=>{if(a&&o)return{linkClassName:a,linkActiveClassName:o,minHeadingLevel:u,maxHeadingLevel:m}}),[a,o,u,m])),(0,i.jsx)(P,{toc:h,className:n,linkClassName:a,...r})}const D={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function W(e){let{collapsed:t,...n}=e;return(0,i.jsx)("button",{type:"button",...n,className:(0,u.Z)("clean-btn",D.tocCollapsibleButton,!t&&D.tocCollapsibleButtonExpanded,n.className),children:(0,i.jsx)(g.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const F={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function q(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:a}=e;const{collapsed:o,toggleCollapsed:l}=(0,A.u)({initialState:!0});return(0,i.jsxs)("div",{className:(0,u.Z)(F.tocCollapsible,!o&&F.tocCollapsibleExpanded,n),children:[(0,i.jsx)(W,{collapsed:o,onClick:l}),(0,i.jsx)(A.z,{lazy:!0,className:F.tocCollapsibleContent,collapsed:o,children:(0,i.jsx)($,{toc:t,minHeadingLevel:s,maxHeadingLevel:a})})]})}const G={tocMobile:"tocMobile_ITEo"};function J(){const{toc:e,frontMatter:t}=r();return(0,i.jsx)(q,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,u.Z)(b.k.docs.docTocMobile,G.tocMobile)})}const Y={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},Q="table-of-contents__link toc-highlight",X="table-of-contents__link--active";function K(e){let{className:t,...n}=e;return(0,i.jsx)("div",{className:(0,u.Z)(Y.tableOfContents,"thin-scrollbar",t),children:(0,i.jsx)($,{...n,linkClassName:Q,linkActiveClassName:X})})}function ee(){const{toc:e,frontMatter:t}=r();return(0,i.jsx)(K,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:b.k.docs.docTocDesktop})}var te=n(2503),ne=n(1151),se=n(5742),ae=n(2389),oe=n(2949);function ie(){const{prism:e}=(0,I.L)(),{colorMode:t}=(0,oe.I)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var le=n(7594),ce=n.n(le);const re=/title=(?["'])(?.*?)\1/,de=/\{(?<range>[\d,-]+)\}/,ue={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},me={...ue,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},he=Object.keys(ue);function pe(e,t){const n=e.map((e=>{const{start:n,end:s}=me[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${s})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function fe(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:a,metastring:o}=t;if(o&&de.test(o)){const e=o.match(de).groups.range;if(0===a.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=a[0].className,s=ce()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(s),code:n}}if(void 0===s)return{lineClassNames:{},code:n};const i=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return pe(["js","jsBlock"],t);case"jsx":case"tsx":return pe(["js","jsBlock","jsx"],t);case"html":return pe(["js","jsBlock","html"],t);case"python":case"py":case"bash":return pe(["bash"],t);case"markdown":case"md":return pe(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return pe(["tex"],t);case"lua":case"haskell":case"sql":return pe(["lua"],t);case"wasm":return pe(["wasm"],t);case"vb":case"vba":case"visual-basic":return pe(["vb","rem"],t);case"vbnet":return pe(["vbnet","rem"],t);case"batch":return pe(["rem"],t);case"basic":return pe(["rem","f90"],t);case"fsharp":return pe(["js","ml"],t);case"ocaml":case"sml":return pe(["ml"],t);case"fortran":return pe(["f90"],t);case"cobol":return pe(["cobol"],t);default:return pe(he,t)}}(s,a),l=n.split("\n"),c=Object.fromEntries(a.map((e=>[e.className,{start:0,range:""}]))),r=Object.fromEntries(a.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),u=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let h=0;h<l.length;){const e=l[h].match(i);if(!e){h+=1;continue}const t=e.slice(1).find((e=>void 0!==e));r[t]?c[r[t]].range+=`${h},`:d[t]?c[d[t]].start=h:u[t]&&(c[u[t]].range+=`${c[u[t]].start}-${h-1},`),l.splice(h,1)}n=l.join("\n");const m={};return Object.entries(c).forEach((e=>{let[t,{range:n}]=e;ce()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const xe={codeBlockContainer:"codeBlockContainer_Ckt0"};function be(e){let{as:t,...n}=e;const s=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[s,a]=e;const o=t[s];o&&"string"==typeof a&&(n[o]=a)})),n}(ie());return(0,i.jsx)(t,{...n,style:s,className:(0,u.Z)(n.className,xe.codeBlockContainer,b.k.common.codeBlock)})}const ge={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function ve(e){let{children:t,className:n}=e;return(0,i.jsx)(be,{as:"pre",tabIndex:0,className:(0,u.Z)(ge.codeBlockStandalone,"thin-scrollbar",n),children:(0,i.jsx)("code",{className:ge.codeBlockLines,children:t})})}const je={attributes:!0,characterData:!0,childList:!0,subtree:!0};function Ne(e,t){const[n,a]=(0,s.useState)(),i=(0,s.useCallback)((()=>{a(e.current?.closest("[role=tabpanel][hidden]"))}),[e,a]);(0,s.useEffect)((()=>{i()}),[i]),function(e,t,n){void 0===n&&(n=je);const a=(0,o.zX)(t),i=(0,o.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(a);return e&&t.observe(e,i),()=>t.disconnect()}),[e,a,i])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),i())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var Ce=n(2573);const ke={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function Le(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:a,getTokenProps:o}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const l=a({line:t,className:(0,u.Z)(n,s&&ke.codeLine)}),c=t.map(((e,t)=>(0,i.jsx)("span",{...o({token:e,key:t})},t)));return(0,i.jsxs)("span",{...l,children:[s?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("span",{className:ke.codeLineNumber}),(0,i.jsx)("span",{className:ke.codeLineContent,children:c})]}):c,(0,i.jsx)("br",{})]})}function ye(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,i.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function Ze(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,i.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const _e={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function Be(e){let{code:t,className:n}=e;const[a,o]=(0,s.useState)(!1),l=(0,s.useRef)(void 0),c=(0,s.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const s=document.createElement("textarea"),a=document.activeElement;s.value=e,s.setAttribute("readonly",""),s.style.contain="strict",s.style.position="absolute",s.style.left="-9999px",s.style.fontSize="12pt";const o=document.getSelection(),i=o.rangeCount>0&&o.getRangeAt(0);n.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;let l=!1;try{l=document.execCommand("copy")}catch{}s.remove(),i&&(o.removeAllRanges(),o.addRange(i)),a&&a.focus()}(t),o(!0),l.current=window.setTimeout((()=>{o(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(l.current)),[]),(0,i.jsx)("button",{type:"button","aria-label":a?(0,g.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,g.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,g.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,u.Z)("clean-btn",n,_e.copyButton,a&&_e.copyButtonCopied),onClick:c,children:(0,i.jsxs)("span",{className:_e.copyButtonIcons,"aria-hidden":"true",children:[(0,i.jsx)(ye,{className:_e.copyButtonIcon}),(0,i.jsx)(Ze,{className:_e.copyButtonSuccessIcon})]})})}function we(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,i.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const Te={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function Ee(e){let{className:t,onClick:n,isEnabled:s}=e;const a=(0,g.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,i.jsx)("button",{type:"button",onClick:n,className:(0,u.Z)("clean-btn",t,s&&Te.wordWrapButtonEnabled),"aria-label":a,title:a,children:(0,i.jsx)(we,{className:Te.wordWrapButtonIcon,"aria-hidden":"true"})})}function He(e){let{children:t,className:n="",metastring:a,title:o,showLineNumbers:l,language:c}=e;const{prism:{defaultLanguage:r,magicComments:d}}=(0,I.L)(),m=function(e){return e?.toLowerCase()}(c??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??r),h=ie(),p=function(){const[e,t]=(0,s.useState)(!1),[n,a]=(0,s.useState)(!1),o=(0,s.useRef)(null),i=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),l=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");a(n)}),[o]);return Ne(o,l),(0,s.useEffect)((()=>{l()}),[e,l]),(0,s.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:i}}(),f=function(e){return e?.match(re)?.groups.title??""}(a)||o,{lineClassNames:x,code:b}=fe(t,{metastring:a,language:m,magicComments:d}),g=l??function(e){return Boolean(e?.includes("showLineNumbers"))}(a);return(0,i.jsxs)(be,{as:"div",className:(0,u.Z)(n,m&&!n.includes(`language-${m}`)&&`language-${m}`),children:[f&&(0,i.jsx)("div",{className:ge.codeBlockTitle,children:f}),(0,i.jsxs)("div",{className:ge.codeBlockContent,children:[(0,i.jsx)(Ce.y$,{theme:h,code:b,language:m??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:a,getTokenProps:o}=e;return(0,i.jsx)("pre",{tabIndex:0,ref:p.codeBlockRef,className:(0,u.Z)(t,ge.codeBlock,"thin-scrollbar"),style:n,children:(0,i.jsx)("code",{className:(0,u.Z)(ge.codeBlockLines,g&&ge.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,i.jsx)(Le,{line:e,getLineProps:a,getTokenProps:o,classNames:x[t],showLineNumbers:g},t)))})})}}),(0,i.jsxs)("div",{className:ge.buttonGroup,children:[(p.isEnabled||p.isCodeScrollable)&&(0,i.jsx)(Ee,{className:ge.codeButton,onClick:()=>p.toggle(),isEnabled:p.isEnabled}),(0,i.jsx)(Be,{className:ge.codeButton,code:b})]})]})]})}function Ae(e){let{children:t,...n}=e;const a=(0,ae.Z)(),o=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof o?He:ve;return(0,i.jsx)(l,{...n,children:o},String(a))}function Ie(e){return(0,i.jsx)("code",{...e})}var Me=n(8138);const Se={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function Ue(e){return!!e&&("SUMMARY"===e.tagName||Ue(e.parentElement))}function ze(e,t){return!!e&&(e===t||ze(e.parentElement,t))}function Ve(e){let{summary:t,children:n,...a}=e;(0,Me.Z)().collectAnchor(a.id);const o=(0,ae.Z)(),l=(0,s.useRef)(null),{collapsed:c,setCollapsed:r}=(0,A.u)({initialState:!a.open}),[d,m]=(0,s.useState)(a.open),h=s.isValidElement(t)?t:(0,i.jsx)("summary",{children:t??"Details"});return(0,i.jsxs)("details",{...a,ref:l,open:d,"data-collapsed":c,className:(0,u.Z)(Se.details,o&&Se.isBrowser,a.className),onMouseDown:e=>{Ue(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;Ue(t)&&ze(t,l.current)&&(e.preventDefault(),c?(r(!1),m(!0)):r(!0))},children:[h,(0,i.jsx)(A.z,{lazy:!1,collapsed:c,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{r(e),m(!e)},children:(0,i.jsx)("div",{className:Se.collapsibleContent,children:n})})]})}const Re={details:"details_b_Ee"},Oe="alert alert--info";function Pe(e){let{...t}=e;return(0,i.jsx)(Ve,{...t,className:(0,u.Z)(Oe,Re.details,t.className)})}function $e(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),a=(0,i.jsx)(i.Fragment,{children:t.filter((e=>e!==n))});return(0,i.jsx)(Pe,{...e,summary:n,children:a})}function De(e){return(0,i.jsx)(te.Z,{...e})}const We={containsTaskList:"containsTaskList_mC6p"};function Fe(e){if(void 0!==e)return(0,u.Z)(e,e?.includes("contains-task-list")&&We.containsTaskList)}const qe={img:"img_ev3q"};var Ge=n(9047);const Je={Head:se.Z,details:$e,Details:$e,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,i.jsx)(Ie,{...e}):(0,i.jsx)(Ae,{...e})},a:function(e){return(0,i.jsx)(C.Z,{...e})},pre:function(e){return(0,i.jsx)(i.Fragment,{children:e.children})},ul:function(e){return(0,i.jsx)("ul",{...e,className:Fe(e.className)})},li:function(e){return(0,Me.Z)().collectAnchor(e.id),(0,i.jsx)("li",{...e})},img:function(e){return(0,i.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,u.Z)(t,qe.img))});var t},h1:e=>(0,i.jsx)(De,{as:"h1",...e}),h2:e=>(0,i.jsx)(De,{as:"h2",...e}),h3:e=>(0,i.jsx)(De,{as:"h3",...e}),h4:e=>(0,i.jsx)(De,{as:"h4",...e}),h5:e=>(0,i.jsx)(De,{as:"h5",...e}),h6:e=>(0,i.jsx)(De,{as:"h6",...e}),admonition:Ge.Z,mermaid:()=>null};function Ye(e){let{children:t}=e;return(0,i.jsx)(ne.Z,{components:Je,children:t})}function Qe(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=r();return t.hide_title||void 0!==n?null:e.title}();return(0,i.jsxs)("div",{className:(0,u.Z)(b.k.docs.docMarkdown,"markdown"),children:[n&&(0,i.jsx)("header",{children:(0,i.jsx)(te.Z,{as:"h1",children:n})}),(0,i.jsx)(Ye,{children:t})]})}var Xe=n(1310),Ke=n(2212);const et={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function tt(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=r(),n=(0,m.i)(),s=e.hide_table_of_contents,a=!s&&t.length>0;return{hidden:s,mobile:a?(0,i.jsx)(J,{}):void 0,desktop:!a||"desktop"!==n&&"ssr"!==n?void 0:(0,i.jsx)(ee,{})}}(),{metadata:{unlisted:s}}=r();return(0,i.jsxs)("div",{className:"row",children:[(0,i.jsxs)("div",{className:(0,u.Z)("col",!n.hidden&&et.docItemCol),children:[s&&(0,i.jsx)(Ke.Z,{}),(0,i.jsx)(f.Z,{}),(0,i.jsxs)("div",{className:et.docItemContainer,children:[(0,i.jsxs)("article",{children:[(0,i.jsx)(Xe.Z,{}),(0,i.jsx)(x.Z,{}),n.mobile,(0,i.jsx)(Qe,{children:t}),(0,i.jsx)(H,{})]}),(0,i.jsx)(p,{})]})]}),n.desktop&&(0,i.jsx)("div",{className:"col col--3",children:n.desktop})]})}function nt(e){const t=`docs-doc-id-${e.content.metadata.id}`,n=e.content;return(0,i.jsx)(c,{content:e.content,children:(0,i.jsxs)(a.FG,{className:t,children:[(0,i.jsx)(d,{}),(0,i.jsx)(tt,{children:(0,i.jsx)(n,{})})]})})}},4966:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var s=n(5999),a=n(512),o=n(3692),i=n(5893);function l(e){const{permalink:t,title:n,subLabel:s,isNext:l}=e;return(0,i.jsxs)(o.Z,{className:(0,a.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[s&&(0,i.jsx)("div",{className:"pagination-nav__sublabel",children:s}),(0,i.jsx)("div",{className:"pagination-nav__label",children:n})]})}function c(e){const{previous:t,next:n}=e;return(0,i.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,s.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,i.jsx)(l,{...t,subLabel:(0,i.jsx)(s.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,i.jsx)(l,{...n,subLabel:(0,i.jsx)(s.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},4364:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var s=n(512),a=n(5999),o=n(5281),i=n(4477),l=n(5893);function c(e){let{className:t}=e;const n=(0,i.E)();return n.badge?(0,l.jsx)("span",{className:(0,s.Z)(t,o.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,l.jsx)(a.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}},3120:(e,t,n)=>{"use strict";n.d(t,{Z:()=>x});n(7294);var s=n(512),a=n(2263),o=n(3692),i=n(5999),l=n(143),c=n(5281),r=n(373),d=n(4477),u=n(5893);const m={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(i.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(i.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=m[e.versionMetadata.banner];return(0,u.jsx)(t,{...e})}function p(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,u.jsx)(i.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(o.Z,{to:n,onClick:s,children:(0,u.jsx)(i.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function f(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:o}}=(0,a.Z)(),{pluginId:i}=(0,l.gA)({failfast:!0}),{savePreferredVersionName:d}=(0,r.J)(i),{latestDocSuggestion:m,latestVersionSuggestion:f}=(0,l.Jo)(i),x=m??(b=f).docs.find((e=>e.id===b.mainDocId));var b;return(0,u.jsxs)("div",{className:(0,s.Z)(t,c.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:o,versionMetadata:n})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(p,{versionLabel:f.label,to:x.path,onClick:()=>d(f.name)})})]})}function x(e){let{className:t}=e;const n=(0,d.E)();return n.banner?(0,u.jsx)(f,{className:t,versionMetadata:n}):null}},3008:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});n(7294);var s=n(512),a=n(3692);const o={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var i=n(5893);function l(e){let{permalink:t,label:n,count:l}=e;return(0,i.jsxs)(a.Z,{href:t,className:(0,s.Z)(o.tag,l?o.tagWithCount:o.tagRegular),children:[n,l&&(0,i.jsx)("span",{children:l})]})}},2212:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});n(7294);var s=n(512),a=n(5999),o=n(5742),i=n(5893);function l(){return(0,i.jsx)(a.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function c(){return(0,i.jsx)(a.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function r(){return(0,i.jsx)(o.Z,{children:(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=n(5281),u=n(9047);function m(e){let{className:t}=e;return(0,i.jsx)(u.Z,{type:"caution",title:(0,i.jsx)(l,{}),className:(0,s.Z)(t,d.k.common.unlistedBanner),children:(0,i.jsx)(c,{})})}function h(e){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r,{}),(0,i.jsx)(m,{...e})]})}},7594:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,a,o]=t;if(s&&o){s=parseInt(s),o=parseInt(o);const e=s<o?1:-1;"-"!==a&&".."!==a&&"\u2025"!==a||(o+=e);for(let t=s;t!==o;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},1151:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l,a:()=>i});var s=n(7294);const a={},o=s.createContext(a);function i(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/17e50ecd.ebbf2f8c.js b/assets/js/17e50ecd.ebbf2f8c.js new file mode 100644 index 0000000000..8942e9d256 --- /dev/null +++ b/assets/js/17e50ecd.ebbf2f8c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7756],{4166:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>r,default:()=>d,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var n=a(5893),i=a(1151);const t={},r="ADJUSTMENT",l={id:"about/references/keywords/ADJUSTMENT",title:"ADJUSTMENT",description:"eCalc Model",source:"@site/docs/about/references/keywords/ADJUSTMENT.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/ADJUSTMENT",permalink:"/ecalc/docs/about/references/keywords/ADJUSTMENT",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/ADJUSTMENT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"YAML keywords",permalink:"/ecalc/docs/about/references/keywords/"},next:{title:"CATEGORY",permalink:"/ecalc/docs/about/references/keywords/CATEGORY"}},m={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function h(s){const e={a:"a",admonition:"admonition",annotation:"annotation",code:"code",h1:"h1",h2:"h2",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",p:"p",pre:"pre",semantics:"semantics",span:"span",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"adjustment",children:"ADJUSTMENT"}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/",children:"eCalc Model"}),"\n/ ",(0,n.jsx)(e.a,{href:"FACILITY_INPUTS",children:"FACILITY_INPUTS"}),"\n/ ",(0,n.jsx)(e.a,{href:"ADJUSTMENT",children:"ADJUSTMENT"})]}),"\n",(0,n.jsxs)(e.table,{children:[(0,n.jsx)(e.thead,{children:(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.th,{children:"Required"}),(0,n.jsx)(e.th,{children:"Child of"}),(0,n.jsx)(e.th,{children:"Children/Options"})]})}),(0,n.jsx)(e.tbody,{children:(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.td,{children:"No"}),(0,n.jsx)(e.td,{children:"FACILITY_INPUTS"}),(0,n.jsxs)(e.td,{children:["CONSTANT ",(0,n.jsx)("br",{})," FACTOR"]})]})})]}),"\n",(0,n.jsx)(e.h2,{id:"description",children:"Description"}),"\n",(0,n.jsx)(e.p,{children:"For various reasons (degenerated equipment, liquid pumps, etc.), the predicted energy usage from\nthe facility input does not always match the historic usage. To account for this, adjustments\nmay be added to the facility input. Currently, linear adjustment to the energy usage is supported."}),"\n",(0,n.jsx)(e.admonition,{type:"warning",children:(0,n.jsxs)(e.p,{children:["Even though The ",(0,n.jsx)(e.a,{href:"ADJUSTMENT",children:"ADJUSTMENT"})," factor and constant can be added to any\n",(0,n.jsx)(e.a,{href:"FACILITY_INPUTS",children:"FACILITY_INPUTS"}),", it is only\nimplemented and used for a small subset of equipment, namely: SAMPLED COMPRESSOR MODEL, TABULATED ENERGY USAGE MODEL,\n",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"}),"\n, PUMP MODEL (Single Speed, Variable Speed and System) and compressors in a compressor system.\nIf you are not sure, give it a test first."]})}),"\n",(0,n.jsx)(e.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"ADJUSTMENT:\n <ADJUSTMENT 1>: <VALUE>\n <ADJUSTMENT 2>: <VALUE>\n"})}),"\n",(0,n.jsx)(e.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(e.p,{children:"Say you have input that is off by a constant and percentage. You could fix this in the following way:"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"NAME: some_facility_input\nFILE: filename.csv\nTYPE: FACILITY_INPUT_TYPE\nADJUSTMENT:\n CONSTANT: 2\n FACTOR: 1.05\n"})}),"\n",(0,n.jsxs)(e.p,{children:["The resulting energy consumption ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),", i.e. fuel or power, will then be"]}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mn,{children:"2"}),(0,n.jsx)(e.mo,{children:"+"}),(0,n.jsx)(e.mn,{children:"1.05"}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted} = 2 + 1.05 \\times E_\\mathrm{original}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,n.jsx)(e.span,{className:"mord",children:"2"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"+"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1.05"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{original}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is the energy consumption before the adjustment."]})]})}function d(s={}){const{wrapper:e}={...(0,i.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},1151:(s,e,a)=>{a.d(e,{Z:()=>l,a:()=>r});var n=a(7294);const i={},t=n.createContext(i);function r(s){const e=n.useContext(t);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function l(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:r(s.components),n.createElement(t.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/18b0ec42.fda20e54.js b/assets/js/18b0ec42.fda20e54.js new file mode 100644 index 0000000000..3ea5a9a533 --- /dev/null +++ b/assets/js/18b0ec42.fda20e54.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2962],{946:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>i});var a=n(5893),s=n(1151);const r={slug:"v8.8-release",title:"v8.8 (Latest)",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:0},l="eCalc",c={id:"changelog/v8-8",title:"v8.8 (Latest)",description:"New Features",source:"@site/docs/changelog/v8-8.md",sourceDirName:"changelog",slug:"/changelog/v8.8-release",permalink:"/ecalc/docs/changelog/v8.8-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-8.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:0,frontMatter:{slug:"v8.8-release",title:"v8.8 (Latest)",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:0},sidebar:"changelog",next:{title:"Next",permalink:"/ecalc/docs/changelog/latest"}},o={},i=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const t={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,a.jsx)(t.h2,{id:"new-features",children:"New Features"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Updated NeqSim to version 2.5.9. This may lead to small numerical differences in the results when old models are re-run with the latest version of eCalc."}),"\n",(0,a.jsx)(t.li,{children:"Provide maximum rate in CompressorModelResult (if there are more than one stream, only max rate for the first one is reported)"}),"\n",(0,a.jsxs)(t.li,{children:["Support for specifying ",(0,a.jsx)(t.code,{children:"RATE_TYPE"})," (",(0,a.jsx)(t.code,{children:"STREAM_DAY"})," or ",(0,a.jsx)(t.code,{children:"CALENDAR_DAY"}),") for ",(0,a.jsx)(t.code,{children:"VENTING_EMITTERS"})]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"fixes",children:"Fixes"}),"\n",(0,a.jsx)(t.h2,{id:"breaking-changes",children:"Breaking changes"})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>l});var a=n(7294);const s={},r=a.createContext(s);function l(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.81b3ccb7.js b/assets/js/1a4e3797.81b3ccb7.js new file mode 100644 index 0000000000..eec3b20827 --- /dev/null +++ b/assets/js/1a4e3797.81b3ccb7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7920],{8824:(e,t,r)=>{r.d(t,{c:()=>u});var s=r(7294),a=r(2263);const n=["zero","one","two","few","many","other"];function c(e){return n.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:c(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,a.Z)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:c(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function u(){const e=o();return{selectMessage:(t,r)=>function(e,t,r){const s=e.split("|");if(1===s.length)return s[0];s.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const a=r.select(t),n=r.pluralForms.indexOf(a);return s[Math.min(n,s.length-1)]}(r,t,e)}}},1473:(e,t,r)=>{r.r(t),r.d(t,{default:()=>b});var s=r(7294),a=r(2263),n=r(8862),c=r(5742),l=r(3692),o=r(5999),u=r(8824),h=r(1728),i=r(6550),m=r(2389),d=r(1029);const p=function(){const e=(0,m.Z)(),t=(0,i.k6)(),r=(0,i.TH)(),{siteConfig:{baseUrl:s}}=(0,a.Z)(),n=e?new URLSearchParams(r.search):null,c=n?.get("q")||"",l=n?.get("ctx")||"",o=n?.get("version")||"",u=e=>{const t=new URLSearchParams(r.search);return e?t.set("q",e):t.delete("q"),t};return{searchValue:c,searchContext:l&&Array.isArray(d.Kc)&&d.Kc.some((e=>"string"==typeof e?e===l:e.path===l))?l:"",searchVersion:o,updateSearchPath:e=>{const r=u(e);t.replace({search:r.toString()})},updateSearchContext:e=>{const s=new URLSearchParams(r.search);s.set("ctx",e),t.replace({search:s.toString()})},generateSearchPageLink:e=>{const t=u(e);return`${s}search?${t.toString()}`}}};var g=r(22),x=r(8202),f=r(2539),y=r(726),S=r(1073),C=r(311),j=r(3926);const I={searchContextInput:"searchContextInput_mXoe",searchQueryInput:"searchQueryInput_CFBF",searchResultItem:"searchResultItem_U687",searchResultItemPath:"searchResultItemPath_uIbk",searchResultItemSummary:"searchResultItemSummary_oZHr",searchQueryColumn:"searchQueryColumn_q7nx",searchContextColumn:"searchContextColumn_oWAF"};var v=r(51),w=r(5893);function R(){const{siteConfig:{baseUrl:e},i18n:{currentLocale:t}}=(0,a.Z)(),{selectMessage:r}=(0,u.c)(),{searchValue:n,searchContext:l,searchVersion:i,updateSearchPath:m,updateSearchContext:f}=p(),[y,S]=(0,s.useState)(n),[j,R]=(0,s.useState)(),[b,_]=(0,s.useState)(),F=`${e}${i}`,A=(0,s.useMemo)((()=>y?(0,o.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:y}):(0,o.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"})),[y]);(0,s.useEffect)((()=>{m(y),j&&(y?j(y,(e=>{_(e)})):_(void 0))}),[y,j]);const $=(0,s.useCallback)((e=>{S(e.target.value)}),[]);return(0,s.useEffect)((()=>{n&&n!==y&&S(n)}),[n]),(0,s.useEffect)((()=>{!async function(){const{wrappedIndexes:e,zhDictionary:t}=!Array.isArray(d.Kc)||l||d.pQ?await(0,g.w)(F,l):{wrappedIndexes:[],zhDictionary:[]};R((()=>(0,x.v)(e,t,100)))}()}),[l,F]),(0,w.jsxs)(s.Fragment,{children:[(0,w.jsxs)(c.Z,{children:[(0,w.jsx)("meta",{property:"robots",content:"noindex, follow"}),(0,w.jsx)("title",{children:A})]}),(0,w.jsxs)("div",{className:"container margin-vert--lg",children:[(0,w.jsx)("h1",{children:A}),(0,w.jsxs)("div",{className:"row",children:[(0,w.jsx)("div",{className:(0,h.Z)("col",{[I.searchQueryColumn]:Array.isArray(d.Kc),"col--9":Array.isArray(d.Kc),"col--12":!Array.isArray(d.Kc)}),children:(0,w.jsx)("input",{type:"search",name:"q",className:I.searchQueryInput,"aria-label":"Search",onChange:$,value:y,autoComplete:"off",autoFocus:!0})}),Array.isArray(d.Kc)?(0,w.jsx)("div",{className:(0,h.Z)("col","col--3","padding-left--none",I.searchContextColumn),children:(0,w.jsxs)("select",{name:"search-context",className:I.searchContextInput,id:"context-selector",value:l,onChange:e=>f(e.target.value),children:[d.pQ&&(0,w.jsx)("option",{value:"",children:(0,o.I)({id:"theme.SearchPage.searchContext.everywhere",message:"everywhere"})}),d.Kc.map((e=>{const{label:r,path:s}=(0,v._)(e,t);return(0,w.jsx)("option",{value:s,children:r},s)}))]})}):null]}),!j&&y&&(0,w.jsx)("div",{children:(0,w.jsx)(C.Z,{})}),b&&(b.length>0?(0,w.jsx)("p",{children:r(b.length,(0,o.I)({id:"theme.SearchPage.documentsFound.plurals",message:"1 document found|{count} documents found",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)'},{count:b.length}))}):(0,w.jsx)("p",{children:(0,o.I)({id:"theme.SearchPage.noResultsText",message:"No documents were found",description:"The paragraph for empty search result"})})),(0,w.jsx)("section",{children:b&&b.map((e=>(0,w.jsx)(P,{searchResult:e},e.document.i)))})]})]})}function P(e){let{searchResult:{document:t,type:r,page:s,tokens:a,metadata:n}}=e;const c=0===r,o=2===r,u=(c?t.b:s.b).slice(),h=o?t.s:t.t;c||u.push(s.t);let i="";if(d.vc&&a.length>0){const e=new URLSearchParams;for(const t of a)e.append("_highlight",t);i=`?${e.toString()}`}return(0,w.jsxs)("article",{className:I.searchResultItem,children:[(0,w.jsx)("h2",{children:(0,w.jsx)(l.Z,{to:t.u+i+(t.h||""),dangerouslySetInnerHTML:{__html:o?(0,f.C)(h,a):(0,y.o)(h,(0,S.m)(n,"t"),a,100)}})}),u.length>0&&(0,w.jsx)("p",{className:I.searchResultItemPath,children:(0,j.e)(u)}),o&&(0,w.jsx)("p",{className:I.searchResultItemSummary,dangerouslySetInnerHTML:{__html:(0,y.o)(t.t,(0,S.m)(n,"t"),a,100)}})]})}const b=function(){return(0,w.jsx)(n.Z,{children:(0,w.jsx)(R,{})})}}}]); \ No newline at end of file diff --git a/assets/js/1c663d3d.8a9a9e25.js b/assets/js/1c663d3d.8a9a9e25.js new file mode 100644 index 0000000000..da5afa7e62 --- /dev/null +++ b/assets/js/1c663d3d.8a9a9e25.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8392],{6703:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var i=n(5893),o=n(1151);const a={title:"Getting started",sidebar_position:2,description:"Getting started with eCalc"},r="API Reference",c={id:"about/getting_started/index",title:"Getting started",description:"Getting started with eCalc",source:"@site/docs/about/getting_started/index.md",sourceDirName:"about/getting_started",slug:"/about/getting_started/",permalink:"/ecalc/docs/about/getting_started/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Getting started",sidebar_position:2,description:"Getting started with eCalc"},sidebar:"about",previous:{title:"Introduction",permalink:"/ecalc/docs/about/"},next:{title:"CLI",permalink:"/ecalc/docs/about/getting_started/cli/"}},s={},l=[{value:"What method should I choose?",id:"what-method-should-i-choose",level:2},{value:"eCalc CLI",id:"ecalc-cli",level:3},{value:"Python Library",id:"python-library",level:3}];function d(e){const t={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"api-reference",children:"API Reference"}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsxs)(t.p,{children:["Currently the ",(0,i.jsx)(t.em,{children:"only"})," officially supported method is the ",(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/cli/",children:"eCalc CLI"})," using eCalc YAML models."]})}),"\n",(0,i.jsx)(t.p,{children:"There are three options to run eCalc models:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/cli/",children:"eCalc CLI"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/library/",children:"eCalc Python library"})}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"what-method-should-i-choose",children:"What method should I choose?"}),"\n",(0,i.jsx)(t.h3,{id:"ecalc-cli",children:"eCalc CLI"}),"\n",(0,i.jsxs)(t.p,{children:["Choose the ",(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/cli/",children:"eCalc CLI"})," option if you:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Don't know much about programming"}),"\n",(0,i.jsx)(t.li,{children:"Have simple requirements"}),"\n",(0,i.jsx)(t.li,{children:"Can define the eCalc models statically"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"python-library",children:"Python Library"}),"\n",(0,i.jsxs)(t.p,{children:["Choose the ",(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/library/",children:"Python Library"})," option if you:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Are a developer or advanced user, and want to build eCalc models and get results programmatically"}),"\n",(0,i.jsx)(t.li,{children:"Use Python, and you need to use (parts of) eCalc as a dependency"}),"\n",(0,i.jsx)(t.li,{children:'Need access to "inner core functionality" of eCalc'}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsx)(t.p,{children:"Python Library is not yet officially available and not recommended to use due to upcoming breaking changes very soon"})})]})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>r});var i=n(7294);const o={},a=i.createContext(o);function r(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.8c894b14.js b/assets/js/1df93b7f.8c894b14.js new file mode 100644 index 0000000000..59b1f2f6eb --- /dev/null +++ b/assets/js/1df93b7f.8c894b14.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3237],{9754:(t,u,e)=>{e.r(u),e.d(u,{default:()=>a});e(7294);var n=e(6550),o=e(5893);function a(){return(0,o.jsx)(n.l_,{to:"docs/about/"})}}}]); \ No newline at end of file diff --git a/assets/js/1e7de7fe.c4a8e353.js b/assets/js/1e7de7fe.c4a8e353.js new file mode 100644 index 0000000000..cbb7acd147 --- /dev/null +++ b/assets/js/1e7de7fe.c4a8e353.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6124],{43:e=>{e.exports=JSON.parse('{"title":"Guides","description":"This section of the documentation lists reference documentations.","slug":"/category/guides","permalink":"/ecalc/docs/category/guides","navigation":{"previous":{"title":"Markdown","permalink":"/ecalc/docs/contribute/documentation-guide/markdown"},"next":{"title":"Git","permalink":"/ecalc/docs/contribute/guides/git"}}}')}}]); \ No newline at end of file diff --git a/assets/js/1f60d0d4.870364a2.js b/assets/js/1f60d0d4.870364a2.js new file mode 100644 index 0000000000..01261dffac --- /dev/null +++ b/assets/js/1f60d0d4.870364a2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6539],{4587:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>s,metadata:()=>r,toc:()=>d});var i=t(5893),o=t(1151);const s={title:"Introduction",sidebar_position:1,description:"Introduction to eCalc documentation"},a="Introduction to eCalc\u2122",r={id:"about/index",title:"Introduction",description:"Introduction to eCalc documentation",source:"@site/docs/about/index.md",sourceDirName:"about",slug:"/about/",permalink:"/ecalc/docs/about/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Introduction",sidebar_position:1,description:"Introduction to eCalc documentation"},sidebar:"about",next:{title:"Getting started",permalink:"/ecalc/docs/about/getting_started/"}},c={},d=[{value:"What is eCalc\u2122?",id:"what-is-ecalc",level:2},{value:"Why should I use eCalc\u2122?",id:"why-should-i-use-ecalc",level:3},{value:"How to use eCalc\u2122?",id:"how-to-use-ecalc",level:3}];function l(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",img:"img",p:"p",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"introduction-to-ecalc",children:"Introduction to eCalc\u2122"}),"\n",(0,i.jsx)(n.p,{children:"The eCalc\u2122 technology is being developed by Equinor within the Technology, Digital and Innovation (TDI) business area."}),"\n",(0,i.jsx)(n.h2,{id:"what-is-ecalc",children:"What is eCalc\u2122?"}),"\n",(0,i.jsx)(n.p,{children:"eCalc\u2122 is a software tool for calculation of energy demand and greenhouse gas emissions from oil and gas production and processing. It enables the cross-disciplinary collaboration required to achieve high-quality and transparent energy and GHG emission prognosis and decision support."}),"\n",(0,i.jsx)(n.p,{children:"eCalc\u2122 performs energy and emission calculations by integrating data, knowledge and future plans from different disciplines. This could be production and injection profiles from the reservoir engineer, characteristics of energy consuming equipment units such as gas turbines, compressors and pumps from the facility engineer, and emission factors for different fuels from the sustainability engineer. The main idea is using physical or data-driven models to relate production rates and pressures to the required processing energy and resulting emissions. Integrated bookkeeping for all emission sources is offered."}),"\n",(0,i.jsx)(n.p,{children:"eCalc\u2122 uses a bottom-up approach to give high-quality installation and portfolio level forecasts at the same time as detailed insights about the energy drivers and processing capacities for the individual installation."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:t(3676).Z+"",width:"4535",height:"2551"})}),"\n",(0,i.jsx)(n.h3,{id:"why-should-i-use-ecalc",children:"Why should I use eCalc\u2122?"}),"\n",(0,i.jsx)(n.p,{children:"By using eCalc\u2122 you will be able to forecast your energy consumption and emissions with consistency and transparency. You will also be enabled to study the effect on energy demand and emissions of your investment opportunities as well as studying emission reduction measures."}),"\n",(0,i.jsx)(n.h3,{id:"how-to-use-ecalc",children:"How to use eCalc\u2122?"}),"\n",(0,i.jsxs)(n.p,{children:["To use eCalc\u2122 you need to create a model setup of your asset.\nThis is described in the ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/modelling/",children:"Modelling"})," section."]}),"\n",(0,i.jsxs)(n.p,{children:["Once the model is ready, you can run the eCalc\u2122 calculator. Different user interfaces for the calculator are offered. These are described in detail in the ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/getting_started/",children:"Getting started"})," section."]})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},3676:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg"},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>a});var i=t(7294);const o={},s=i.createContext(o);function a(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1f7805b6.03fcb1fa.js b/assets/js/1f7805b6.03fcb1fa.js new file mode 100644 index 0000000000..2c423b5cb8 --- /dev/null +++ b/assets/js/1f7805b6.03fcb1fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2802],{1816:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=t(5893),r=t(1151);const s={slug:"v8.6-release",title:"v8.6",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:16},i="eCalc",l={id:"changelog/v8-6",title:"v8.6",description:"New Features",source:"@site/docs/changelog/v8-6.md",sourceDirName:"changelog",slug:"/changelog/v8.6-release",permalink:"/ecalc/docs/changelog/v8.6-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-6.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:16,frontMatter:{slug:"v8.6-release",title:"v8.6",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:16},sidebar:"changelog",previous:{title:"v8.5",permalink:"/ecalc/docs/changelog/v8.5-release"},next:{title:"v8.7 (Latest)",permalink:"/ecalc/docs/changelog/v8.7-release"}},o={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,a.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Added a ModelInputFailureStatus. If there are errors in the rate or pressure input to a compressor a failure code will be returned in the compressors failure_status (INVALID_RATE_INPUT or INVALID_SUCTION/INTERMEDIATE/DISCHARGE_PRESSURE_INPUT."}),"\n",(0,a.jsxs)(n.li,{children:["Rate type is included in header for csv export. E.g. ",(0,a.jsx)(n.code,{children:"Sm3/sd"})," for streaming day and ",(0,a.jsx)(n.code,{children:"Sm3/cd"})," for calendar day."]}),"\n",(0,a.jsx)(n.li,{children:"Generating generic variable speed compressor charts from input rates/heads has a new and improved algorithm. The new algorithm tends to favour increase in head compared to the previous one. Running old models with this new algorithm may lead to slight changes in the results."}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Fixed bug giving small numerical difficulties when calculating maximum standard rate for a simplified compressor train"}),"\n",(0,a.jsx)(n.li,{children:"Ensure that start date and end date in the global time vector is consistent with the requested output frequency. This makes sure that resampling (typically for monthly or yearly reporting) can be done even when the start or end date is outside of the requested reporting frequency (e.g. starting in August when the reporting frquency is yearly), and that the resampling is done without dropping volumes."}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Economic details have been deprecated from eCalc. Input data such as ",(0,a.jsx)(n.code,{children:"tax"}),", ",(0,a.jsx)(n.code,{children:"quota"})," and ",(0,a.jsx)(n.code,{children:"price"})," for fuel and emissions will now be ignored, and will hence also no longer be reported. If you have used those in your model, they will be ignored. It will be treated as an error in a future version of eCalc."]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>i});var a=t(7294);const r={},s=a.createContext(r);function i(e){const n=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/22f0e129.aaea21cc.js b/assets/js/22f0e129.aaea21cc.js new file mode 100644 index 0000000000..45d18bcb4e --- /dev/null +++ b/assets/js/22f0e129.aaea21cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6893],{3243:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>i,default:()=>E,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var r=n(5893),t=n(1151);const o={},i="MAXIMUM_DISCHARGE_PRESSURE",c={id:"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",title:"MAXIMUM_DISCHARGE_PRESSURE",description:"MODELS /",source:"@site/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"LOWER_HEATING_VALUE",permalink:"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE"},next:{title:"MAXIMUM_PRESSURE_RATIO_PER_STAGE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Functionality",id:"functionality",level:2},{value:"Format",id:"format",level:2}];function l(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"maximum_discharge_pressure",children:"MAXIMUM_DISCHARGE_PRESSURE"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",children:"MAXIMUM_DISCHARGE_PRESSURE"})]}),"\n",(0,r.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"MAXIMUM_DISCHARGE_PRESSURE"})," sets the highest possible discharge pressure that a compressor can deliver.\nIn reality, setting the maximum discharge pressure can be to avoid excessively high pressures which can be a safety concern on an installation."]}),"\n",(0,r.jsx)(s.h2,{id:"functionality",children:"Functionality"}),"\n",(0,r.jsxs)(s.p,{children:["This is an optional setting and is ",(0,r.jsx)(s.strong,{children:"only"})," supported for ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:"SINGLE SPEED COMPRESSORS"}),", and ",(0,r.jsx)(s.strong,{children:"only"})," if the ",(0,r.jsx)(s.code,{children:"PRESSURE_CONTROL"})," is ",(0,r.jsx)(s.code,{children:"DOWNSTREAM_CHOKE"}),"."]}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["If ",(0,r.jsx)(s.code,{children:"MAXIMUM_DISCHARGE_PRESSURE"})," has been defined and if any of the inputted discharge pressures exceeds the maximum value, a ValueError message will be raised."]}),"\n",(0,r.jsxs)(s.li,{children:["If any of the input rates and suction pressures result in a discharge pressure which is above the ",(0,r.jsx)(s.code,{children:"MAXIMUM_DISCHARGE_PRESSURE"}),", the suction pressure will be reduced until the calculations provide a discharge pressure below the maximum value (assuming an upstream choke can handle this)."]}),"\n",(0,r.jsxs)(s.li,{children:["The outlet stream will then be further choked from the ",(0,r.jsx)(s.code,{children:"MAXIMUM_DISCHARGE_PRESSURE"})," to the target discharge pressure using the ",(0,r.jsx)(s.code,{children:"DOWNSTREAM_CHOKE"})," pressure control."]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model>\n PRESSURE_CONTROL: <DOWNSTREAM_CHOKE>\n MAXIMUM_DISCHARGE_PRESSURE: <Maximum discharge pressure in bar>\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model>\n ...\n"})})]})}function E(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1151:(e,s,n)=>{n.d(s,{Z:()=>c,a:()=>i});var r=n(7294);const t={},o=r.createContext(t);function i(e){const s=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2781f0ad.52ab570d.js b/assets/js/2781f0ad.52ab570d.js new file mode 100644 index 0000000000..3e86d78577 --- /dev/null +++ b/assets/js/2781f0ad.52ab570d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3787],{9483:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>t,toc:()=>d});var r=s(5893),a=s(1151);const i={sidebar_position:2,title:"Advanced model",description:"An advanced model using consumer systems and two installations"},l="Advanced model example",t={id:"about/modelling/examples/advanced",title:"Advanced model",description:"An advanced model using consumer systems and two installations",source:"@site/docs/about/modelling/examples/advanced.md",sourceDirName:"about/modelling/examples",slug:"/about/modelling/examples/advanced",permalink:"/ecalc/docs/about/modelling/examples/advanced",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/examples/advanced.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Advanced model",description:"An advanced model using consumer systems and two installations"},sidebar:"about",previous:{title:"Simple model",permalink:"/ecalc/docs/about/modelling/examples/simple"},next:{title:"Drogon model",permalink:"/ecalc/docs/about/modelling/examples/drogon"}},o={},d=[{value:"YAML model overview",id:"yaml-model-overview",level:2},{value:"TIME_SERIES",id:"time_series",level:2},{value:"FACILITY_INPUTS",id:"facility_inputs",level:2},{value:"FUEL_TYPES",id:"fuel_types",level:2},{value:"MODELS",id:"models",level:2},{value:"VARIABLES",id:"variables",level:2},{value:"INSTALLATIONS",id:"installations",level:2},{value:"Installation A",id:"installation-a",level:3},{value:"Installation B",id:"installation-b",level:3},{value:"ENERGY_USAGE_MODEL",id:"energy_usage_model",level:2},{value:"Full eCalc YAML model",id:"full-ecalc-yaml-model",level:2},{value:"Input files",id:"input-files",level:3}];function E(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"advanced-model-example",children:"Advanced model example"}),"\n",(0,r.jsxs)(n.p,{children:["This is a model very similar to ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/examples/simple",children:"Simple example"}),". The main difference is the use of more advanced\nenergy usage models and consumer systems, and the addition of a second installation."]}),"\n",(0,r.jsxs)(n.p,{children:["Both installations exports oil (",(0,r.jsx)(n.code,{children:"OIL_PROD"}),") and gas (",(0,r.jsx)(n.code,{children:"GAS_PROD"}),").\nThe installations emits CO",(0,r.jsx)("sub",{children:"2"})," and CH",(0,r.jsx)("sub",{children:"4"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The following is an example with one installation called ",(0,r.jsx)(n.code,{children:"Installation A"})," and ",(0,r.jsx)(n.code,{children:"Installation B"}),"."]}),"\n",(0,r.jsx)(n.mermaid,{chart:"graph TD;\n Asset(Asset) --\x3e A(Installation A);\n A(Installation A) --\x3e AA(Flare A);\n A --\x3e AD(Generator set A);\n AD --\x3e AE(Base production load A);\n AD --\x3e AF(Gas export compressor A);\n AD --\x3e AG(Produced water reinjection pump A);\n AD --\x3e AH(Sea water injection pump A);\n \n Asset --\x3e B(Installation B);\n B --\x3e BA(Generator set B);\n B --\x3e BD(Gas export compressor B);\n BA --\x3e BC(Base production load B);\n B --\x3e BB(Flare B);\n style A stroke:red;\n style B stroke:red;\n style BC stroke:blue;\n style AE stroke:blue;\n style AF stroke:blue;\n style AG stroke:blue;\n style AH stroke:blue;"}),"\n",(0,r.jsx)(n.p,{children:"The results of a performed characterization of the equipment are listed below:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Consumer"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Generator set A"}),(0,r.jsx)(n.td,{children:"Generator set"}),(0,r.jsx)(n.td,{children:"Variable fuel consumer with electricity to fuel function"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Base production load A"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Production base load varying depending on a binary condition"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Gas export compressor A"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Variable consumption depending on gas sales rate"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Produced water reinjection pump A"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Variable consumption depending on water production rate and water injection rate. The pump suction pressure is 10 bar and discharge pressure is 200 bar."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Sea water injection pump A"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Variable consumption depending on a complex combination on water injection rate and water production rate"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Flare A"}),(0,r.jsx)(n.td,{children:"Direct fuel consumer"}),(0,r.jsx)(n.td,{children:"Flare A"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Generator set B"}),(0,r.jsx)(n.td,{children:"Generator set"}),(0,r.jsx)(n.td,{children:"Variable fuel consumption with electricity to fuel function"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Base production load B"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Production base load at 7.6 MW"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Gas export compressor B"}),(0,r.jsx)(n.td,{children:"Direct fuel consumer"}),(0,r.jsx)(n.td,{children:"Variable fuel consumption depending on gas sales rate"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Flare B"}),(0,r.jsx)(n.td,{children:"Direct fuel consumer"}),(0,r.jsx)(n.td,{children:"Flare B"})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"yaml-model-overview",children:"YAML model overview"}),"\n",(0,r.jsx)(n.p,{children:"The YAML model consist of these main components:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Time series inputs - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})]}),"\n",(0,r.jsxs)(n.li,{children:["Facility characterization input - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})]}),"\n",(0,r.jsxs)(n.li,{children:["Fuel input - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})]}),"\n",(0,r.jsxs)(n.li,{children:["Model specifications - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})]}),"\n",(0,r.jsxs)(n.li,{children:["Model variables - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"})]}),"\n",(0,r.jsxs)(n.li,{children:["Installation topology - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"The YAML setup file looks like this:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"TIME_SERIES:\n <placeholder>\nFACILITY_INPUTS:\n <placeholder>\nFUEL_TYPES:\n <placeholder>\nVARIABLES:\n <placeholder>\nINSTALLATIONS:\n <placeholder>\n"})}),"\n",(0,r.jsx)(n.p,{children:"We will now replace the placeholders for each of the main keywords above."}),"\n",(0,r.jsx)(n.h2,{id:"time_series",children:"TIME_SERIES"}),"\n",(0,r.jsxs)(n.p,{children:["The reservoir variables, in this case, are found in a CSV (Comma separated file) ",(0,r.jsx)(n.code,{children:"production_data.csv"}),".\nWe give the time-series data a name that can be referenced as variables elsewhere in the form ",(0,r.jsx)(n.code,{children:"<NAME>:<NAME OF COLUMN>"}),".\nSee ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," for further details."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"TIME_SERIES:\n - NAME: SIM\n TYPE: DEFAULT\n FILE: base_profile.csv\n"})}),"\n",(0,r.jsx)(n.h2,{id:"facility_inputs",children:"FACILITY_INPUTS"}),"\n",(0,r.jsxs)(n.p,{children:["We specify CSV input data for processing equipment using FACILITY_INPUTS. This is used for generatorsets,\ntabulated/sampled models and pump charts. See ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," for further details."]}),"\n",(0,r.jsxs)(n.p,{children:["Here we define a tabulated genset, a sampled compressor, and a single speed pump chart.\nNote that more complicated energy models are defined under the ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"}),"-keyword."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"FACILITY_INPUTS:\n - NAME: genset\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: gasexp\n FILE: compressor_sampled.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: pump_chart\n FILE: pump_chart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n"})}),"\n",(0,r.jsx)(n.h2,{id:"fuel_types",children:"FUEL_TYPES"}),"\n",(0,r.jsxs)(n.p,{children:["In this example there are two ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," - ",(0,r.jsx)(n.code,{children:"fuel_gas"})," and ",(0,r.jsx)(n.code,{children:"bad_fuel_gas"}),".\nThese are used for Installation A and Installation B respectively.\nHere we also define emissions in CO",(0,r.jsx)("sub",{children:"2"})," and CH",(0,r.jsx)("sub",{children:"4"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"FUEL_TYPES:\n - NAME: fuel_gas\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.20 #kg/Sm3\n - NAME: CH4\n FACTOR: 0.01 #kg/Sm3\n - NAME: bad_fuel_gas\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 5.0 #kg/Sm3\n - NAME: CH4\n FACTOR: 0.01 #kg/Sm3\n"})}),"\n",(0,r.jsx)(n.h2,{id:"models",children:"MODELS"}),"\n",(0,r.jsxs)(n.p,{children:["This advanced example requires some energy usage models to be defined under the model section. See ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," for details."]}),"\n",(0,r.jsx)(n.p,{children:"Here we specify:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Compressor chart based on design points"}),"\n",(0,r.jsx)(n.li,{children:"Compressor chart based on chart data"}),"\n",(0,r.jsx)(n.li,{children:"Medium density fluid"}),"\n",(0,r.jsx)(n.li,{children:"Gas turbine"}),"\n",(0,r.jsx)(n.li,{children:"Simplified compressor train model"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"MODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 10000\n DESIGN_HEAD: 80\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M # M or KJ_PER_KG\n EFFICIENCY: FRACTION\n CURVES:\n FILE: compressor_chart.csv\n - NAME: medium_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n - NAME: turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # [MJ/Sm3]\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: medium_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n"})}),"\n",(0,r.jsxs)(n.p,{children:["See ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," for further details."]}),"\n",(0,r.jsx)(n.h2,{id:"variables",children:"VARIABLES"}),"\n",(0,r.jsxs)(n.p,{children:["To run the model it is recommended to specify ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"}),",\ninstead of hard coding values in difference places. This makes it easier to develop, maintain and understand the model\nby allowing descriptive variable names and avoid duplications."]}),"\n",(0,r.jsx)(n.p,{children:"For our model, we specify the following variables:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"VARIABLES:\n hydrocarbon_export_sm3_per_day:\n VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000\n gas_export_rate_sm3_per_day:\n VALUE: SIM;GAS_PROD\n water_injection_rate:\n VALUE: SIM;WATER_INJ\n gas_export_condition:\n VALUE: SIM;GAS_PROD > 0\n base_production_load_mw:\n VALUE: 7.6 {+} 4.1 {*} (SIM;GAS_LIFT > 0)\n water_injection_condition:\n VALUE: SIM;WATER_PROD >0\n flare_a_fuel_rate_sm3_day:\n 2020-06-01:\n VALUE: 5000\n 2030-01-01:\n VALUE: 2000\n flare_b_fuel_rate_sm3_day:\n 2020-06-01:\n VALUE: 10000\n 2030-01-01:\n VALUE: 7000\n"})}),"\n",(0,r.jsxs)(n.p,{children:["We reference the ",(0,r.jsx)(n.a,{href:"#time_series",children:"TIME_SERIES"})," ",(0,r.jsx)(n.code,{children:"SIM"})," using the column names from the CSV file."]}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsx)(n.p,{children:"You can use boolean condition such as shown in base_production_load_mw and time varying variables such as shown in\nflare_a_fuel_rate_sm3_day and flare_b_fuel_rate_sm3_day to write simpler models with less duplicated code."}),(0,r.jsx)(n.p,{children:"The base_production_load_mw adds another 4.1 MW when the gas lift injection rate is positive."}),(0,r.jsx)(n.p,{children:"The flare rate changes in year 2030."})]}),"\n",(0,r.jsx)(n.h2,{id:"installations",children:"INSTALLATIONS"}),"\n",(0,r.jsx)(n.p,{children:"An installation is composed of hydrocarbon export, a default fuel for that installation and consumers in the form\nof generatorsets (with electric sub-consumers), and direct fuel consumers."}),"\n",(0,r.jsx)(n.p,{children:"We specify:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"NAME"}),": the installation name"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"HCEXPORT"}),": Hydrocarbon export in Sm",(0,r.jsx)("sup",{children:"3"}),"/day by referring to the variable $var.hydrocarbon_export_sm3_per_day specified under ",(0,r.jsx)(n.a,{href:"#variables",children:"VARIABLES"})," above."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"FUEl"}),": Default fuel specified in ",(0,r.jsx)(n.a,{href:"#fuel_types",children:"FUEL_TYPES"})," above. Note the different fuels used by the two installations."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"CATEGORY"}),": FIXED (installation) category is used to group result data for reporting. See ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," for details."]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n <placeholder>\n FUELCONSUMERS:\n <placeholder>\n - NAME: Installation B\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: bad_fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n <placeholder>\n FUELCONSUMERS:\n <placeholder>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"installation-a",children:"Installation A"}),"\n",(0,r.jsxs)(n.p,{children:["There is one generator set, ",(0,r.jsx)(n.code,{children:"Generator set A"}),". This has a power to fuel function defined in\n",(0,r.jsx)(n.a,{href:"#facility_inputs",children:"FACILITY_INPUTS"})," with the name ",(0,r.jsx)(n.code,{children:"genset"}),". Further, the consumers getting\npower from the generator set are ",(0,r.jsx)(n.em,{children:"Base production load"}),", ",(0,r.jsx)(n.em,{children:"Gas injection compressor"}),", ",(0,r.jsx)(n.em,{children:"Produced water reinjection pump"}),"\nand ",(0,r.jsx)(n.em,{children:"Sea-water injection pump"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The direct fuel consumers are ",(0,r.jsx)(n.strong,{children:"Flare"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The setup for ",(0,r.jsx)(n.code,{children:"Installation A"})," thus becomes:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n - NAME: Generator set A\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Fixed production loads A\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL: <placeholder>\n - NAME: Gas export compressors system A\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL: <placeholder>\n - NAME: Water injection pump system A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL: <placeholder>\n - NAME: Single pump A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL: <placeholder>\n FUELCONSUMERS:\n - NAME: Flare A\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL: <placeholder>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"installation-b",children:"Installation B"}),"\n",(0,r.jsxs)(n.p,{children:["There is one generator set, ",(0,r.jsx)(n.code,{children:"Generator set B"}),". This has a power to fuel function defined in\n",(0,r.jsx)(n.a,{href:"#facility_inputs",children:"FACILITY_INPUTS"})," with the name ",(0,r.jsx)(n.code,{children:"genset"}),". Further, the consumer getting\npower from the generator set is ",(0,r.jsx)(n.em,{children:"Base production load"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The direct fuel consumers are ",(0,r.jsx)(n.strong,{children:"Flare"})," and ",(0,r.jsx)(n.strong,{children:"Gas export compressor"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The setup for ",(0,r.jsx)(n.code,{children:"Installation B"})," thus becomes:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Installation B\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: bad_fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n - NAME: Generator set B\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Fixed production loads B\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL: <placeholder>\n FUELCONSUMERS:\n - NAME: Flare B\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL: <placeholder>\n - NAME: Gas export compressors B\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL: <placeholder>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"energy_usage_model",children:"ENERGY_USAGE_MODEL"}),"\n",(0,r.jsxs)(n.p,{children:["We will now fill in the final placeholders with detailed ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"s."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Base production loads A"})," has a load of 7.6 MW with additional 4.1 MW when the field gas injection rate is positive:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Fixed production loads A\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: $var.base_production_load_mw\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Gas export compressor system A"})," is represented by a consumer system of two simplified compressor train models.\nThe system has defined the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"gas_export_rate_sm3_per_day"})," and will run two different\nrate distributions between these two compressor trains. It will first send all rate to the first compressor train\nand nothing to the second ",(0,r.jsx)(n.code,{children:"RATE_FRACTIONS: [1.0, 0.0]"})," and then it will run the same input while distributing equal\nrates to the two compressor trains ",(0,r.jsx)(n.code,{children:"RATE_FRACTIONS: [0.5, 0.5]"}),". The final result will be composed of the first\nsetting that returns a valid result for the compressors.\nSee ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",children:"COMPRESSOR_SYSTEM"})," for further details."]}),"\n",(0,r.jsx)(n.p,{children:"The model compressor model is defined:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Gas export compressors system A\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: train1_A\n COMPRESSOR_MODEL: simplified_compressor_train_model\n - NAME: train2_A\n COMPRESSOR_MODEL: simplified_compressor_train_model\n TOTAL_SYSTEM_RATE: $var.gas_export_rate_sm3_per_day\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1.0, 0.0]\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 120\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 120\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Water injection pump system A"})," is variable and its energy function is dependent on the field's water\ninjection rate (",(0,r.jsx)(n.code,{children:"WATER_INJ"}),") that is set in the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"water_injection_rate"})," as ",(0,r.jsx)(n.code,{children:"SIM;WATER_INJ"}),".\nThe pump only runs when the variables ",(0,r.jsx)(n.a,{href:"#variables",children:"water_injection_condition"})," evaluates to true as ",(0,r.jsx)(n.code,{children:"SIM;WATER_PROD > 0"}),".\nThis is when the water injection rate is positive. Fluid density, suction pressure and discharge pressure\nis also defined."]}),"\n",(0,r.jsxs)(n.p,{children:["This PUMP_SYSTEM behaves much the same as the COMPRESSOR_SYSTEM above.\nSee ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations#pump_system-energy-usage-model",children:"PUMP_SYSTEM"})," for further details."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Water injection pump system A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: pump_chart\n - NAME: pump2\n CHART: pump_chart\n - NAME: pump3\n CHART: pump_chart\n - NAME: pump4\n CHART: pump_chart\n FLUID_DENSITY: 1026\n TOTAL_SYSTEM_RATE: $var.water_injection_rate\n CONDITION: $var.water_injection_condition\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0, 0, 0]\n SUCTION_PRESSURES: [3, 3, 3, 3]\n DISCHARGE_PRESSURES: [200, 200, 200, 200]\n CROSSOVER: [2, 0, 0, 0]\n - RATE_FRACTIONS: [0.5, 0.5, 0, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Single pump A"})," has an energy function that is dependent on the seawater injection rate, same as the system above.\nIt uses the pump_chart defined in ",(0,r.jsx)(n.a,{href:"#facility_inputs",children:"FACILITY_INPUTS"})," above."]}),"\n",(0,r.jsx)(n.p,{children:"The pump model is then defined:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Single pump A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: $var.water_injection_condition\n ENERGYFUNCTION: pump_chart\n RATE: 5000\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITY: 1026\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"Flare A"})," is changing on the 1st of July 2020 and 1st of January 2030. Therefore, we need to use a different constant\nfuel consumption value before and after this date. This is done using the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"flare_a_fuel_rate_sm3_day"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"The model becomes:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Flare A\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_a_fuel_rate_sm3_day\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Base production loads B"})," has a load of 7.6 :"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Fixed production loads B\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 7.6\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"Flare B"})," is changing on the 1st of July 2020 and 1st of January 2030. Therefore, we need to use a different constant\nfuel consumption value before and after this date. This is done using the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"flare_a_fuel_rate_sm3_day"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"The model becomes:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Flare B\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_b_fuel_rate_sm3_day\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"Gas export compressors B"})," is a variable fuel consumer whose energy function depends on the field gas production rate (",(0,r.jsx)(n.code,{children:"GAS_PROD"}),") defined\nin the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"gas_export_rate_sm3_per_day"})," as ",(0,r.jsx)(n.code,{children:"SIM;GAS_PROD"}),", and put to the condition ",(0,r.jsx)(n.a,{href:"#variables",children:"gas_export_condition"})," as ",(0,r.jsx)(n.code,{children:"SIM;GAS_PROD > 0"})]}),"\n",(0,r.jsx)(n.p,{children:"The model is specified:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Gas export compressors B\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: gasexp\n CONDITION: $var.gas_export_condition\n RATE: $var.gas_export_rate_sm3_per_day\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 200\n"})}),"\n",(0,r.jsx)(n.h2,{id:"full-ecalc-yaml-model",children:"Full eCalc YAML model"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"TIME_SERIES:\n - NAME: SIM\n TYPE: DEFAULT\n FILE: base_profile.csv\n\nFACILITY_INPUTS:\n - NAME: genset\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: gasexp\n FILE: compressor_sampled.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: pump_chart\n FILE: pump_chart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n\nFUEL_TYPES:\n - NAME: fuel_gas\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.20 #kg/Sm3\n - NAME: CH4\n FACTOR: 0.01 #kg/Sm3\n - NAME: bad_fuel_gas\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 5.0 #kg/Sm3\n - NAME: CH4\n FACTOR: 0.01 #kg/Sm3\n\nMODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 10000\n DESIGN_HEAD: 80\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M # M or KJ_PER_KG\n EFFICIENCY: FRACTION\n CURVES:\n FILE: compressor_chart.csv\n - NAME: medium_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n - NAME: turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: medium_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n\nVARIABLES:\n hydrocarbon_export_sm3_per_day:\n VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000\n gas_export_rate_sm3_per_day:\n VALUE: SIM;GAS_PROD\n water_injection_rate:\n VALUE: SIM;WATER_INJ\n gas_export_condition:\n VALUE: SIM;GAS_PROD > 0\n base_production_load_mw:\n VALUE: 7.6 {+} 4.1 {*} (SIM;GAS_LIFT > 0)\n water_injection_condition:\n VALUE: SIM;WATER_PROD >0\n flare_a_fuel_rate_sm3_day:\n 2020-06-01:\n VALUE: 5000\n 2030-01-01:\n VALUE: 2000\n flare_b_fuel_rate_sm3_day:\n 2020-06-01:\n VALUE: 10000\n 2030-01-01:\n VALUE: 7000\n\nINSTALLATIONS:\n - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n - NAME: Generator set A\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Fixed production loads A\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: $var.base_production_load_mw\n - NAME: Gas export compressors system A\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: train1_A\n COMPRESSOR_MODEL: simplified_compressor_train_model\n - NAME: train2_A\n COMPRESSOR_MODEL: simplified_compressor_train_model\n TOTAL_SYSTEM_RATE: $var.gas_export_rate_sm3_per_day\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1.0, 0.0]\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 120\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 120\n - NAME: Water injection pump system A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: pump_chart\n - NAME: pump2\n CHART: pump_chart\n - NAME: pump3\n CHART: pump_chart\n - NAME: pump4\n CHART: pump_chart\n FLUID_DENSITY: 1026\n TOTAL_SYSTEM_RATE: $var.water_injection_rate\n CONDITION: $var.water_injection_condition\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0, 0, 0]\n SUCTION_PRESSURES: [3, 3, 3, 3]\n DISCHARGE_PRESSURES: [200, 200, 200, 200]\n CROSSOVER: [2, 0, 0, 0]\n - RATE_FRACTIONS: [0.5, 0.5, 0, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - NAME: Single pump A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: $var.water_injection_condition\n ENERGYFUNCTION: pump_chart\n RATE: 5000\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITY: 1026\n FUELCONSUMERS:\n - NAME: Flare A\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_a_fuel_rate_sm3_day\n\n - NAME: Installation B\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: bad_fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n - NAME: Generator set B\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Fixed production loads B\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 7.6\n FUELCONSUMERS:\n - NAME: Flare B\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_b_fuel_rate_sm3_day\n - NAME: Gas export compressors B\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: gasexp\n CONDITION: $var.gas_export_condition\n RATE: $var.gas_export_rate_sm3_per_day\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 200\n"})}),"\n",(0,r.jsx)(n.h3,{id:"input-files",children:"Input files"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="compressor_chart.csv"',children:"RATE, HEAD, EFFICIENCY, SPEED\n# [m3/h], [m], [frac], [rpm]\n3000, 8500, 0.72, 7500\n3500, 8000, 0.75, 7500\n4000, 7500, 0.74, 7500\n4500, 6500, 0.70, 7500\n4100, 16500, 0.72, 10500\n4600, 16000, 0.73, 10500\n5000, 15500, 0.74, 10500\n5500, 14500, 0.74, 10500\n6000, 13500, 0.72, 10500\n6500, 12000, 0.70, 10500\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="compressor_sampled.csv"',children:"RATE, FUEL\n0, 0\n0.01, 100\n10, 500\n20, 1200\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="genset.csv"',children:"POWER, FUEL\n# [MW], [Sm3/d]\n0, 0\n0.1, 75000\n10, 80000\n20, 100000\n50, 500000\n100, 1000000\n\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="pump_chart.csv"',children:"RATE, HEAD, EFFICIENCY, SPEED\n# [m3/h], [m], [%], [rpm] \n250, 2350, 50, 10000\n300, 2300, 55, 10000\n350, 2250, 60, 10000\n400, 2200, 70, 10000\n450, 2150, 75, 10000\n500, 2100, 80, 10000\n550, 2050, 75, 10000\n600, 2000, 70, 10000\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="base_profile.csv"',children:"DATE, OIL_PROD, WATER_PROD, GAS_PROD, WATER_INJ, GAS_LIFT\n01.01.2020, 1000, 20000, 4000000, 30000, 1200000\n01.01.2021, 1000, 20000, 4000000, 30000, 1200000\n01.01.2022, 1000, 20000, 4000000, 30000, 1200000\n01.01.2023, 2500, 21000, 4000000, 30000, 1200000\n01.01.2024, 3000, 22000, 4500000, 28000, 1300000\n01.01.2025, 3500, 23000, 5000000, 26000, 1350000\n01.01.2026, 4000, 24000, 5500000, 25000, 1400000\n01.01.2027, 4000, 25000, 6000000, 24000, 1400000\n01.01.2028, 4000, 20000, 6000000, 23000, 1400000\n01.01.2029, 5000, 20000, 5500000, 22000, 1350000\n01.01.2030, 9000, 20000, 5000000, 21000, 1300000\n01.01.2031, 5000, 20000, 3000000, 22000, 1300000\n01.01.2032, 4000, 22100, 3000000, 23000, 2000000\n01.01.2033, 4000, 22100, 3000000, 23000, 2000000\n01.01.2034, 1200, 25000, 1000000, 21000, 2000000\n01.01.2035, 1100, 25000, 1000000, 20000, 1500000\n01.01.2036, 1000, 22000, 500000, 18000, 1400000\n01.01.2037, 900, 20000, 500000, 17000, 1400000\n01.01.2038, 800, 18000, 500000, 17000, 1400000\n01.01.2039, 700, 18000, 200000, 17000, 1400000\n01.01.2040, 600, 10000, 200000, 15000, 1400000\n01.01.2041, 0, 0, 0, 0, 0\n"})})]})}function c(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(E,{...e})}):E(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>l});var r=s(7294);const a={},i=r.createContext(a);function l(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/29367e59.11dc59ec.js b/assets/js/29367e59.11dc59ec.js new file mode 100644 index 0000000000..3d0c636f95 --- /dev/null +++ b/assets/js/29367e59.11dc59ec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3173],{3918:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>l,frontMatter:()=>s,metadata:()=>i,toc:()=>E});var r=n(5893),o=n(1151);const s={},c="INFLUENCE_TIME_VECTOR",i={id:"about/references/keywords/INFLUENCE_TIME_VECTOR",title:"INFLUENCE_TIME_VECTOR",description:"TIMESERIES /",source:"@site/docs/about/references/keywords/INFLUENCE_TIME_VECTOR.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INFLUENCE_TIME_VECTOR",permalink:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INFLUENCE_TIME_VECTOR.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"HEAD_MARGIN",permalink:"/ecalc/docs/about/references/keywords/HEAD_MARGIN"},next:{title:"INLET_TEMPERATURE",permalink:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE"}},a={},E=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"influence_time_vector",children:"INFLUENCE_TIME_VECTOR"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," /\n",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",children:"INFLUENCE_TIME_VECTOR"})]}),"\n",(0,r.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(t.p,{children:"Determines if the time steps in this input source will contribute to the global time vector."}),"\n",(0,r.jsxs)(t.p,{children:["If not specified, this will be defaulted to ",(0,r.jsx)(t.code,{children:"TRUE"}),".\nIt is a requirement that at least one time vector has an ",(0,r.jsx)(t.code,{children:"INFLUENCE_TIME_VECTOR"})," of ",(0,r.jsx)(t.code,{children:"TRUE"}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"\nINFLUENCE_TIME_VECTOR: <True/False>\n"})}),"\n",(0,r.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,r.jsxs)(t.p,{children:["See the ",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," ",(0,r.jsx)(t.code,{children:"time_series_format"}),"."]})]})}function l(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>c});var r=n(7294);const o={},s=r.createContext(o);function c(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/295f424e.6a44f23f.js b/assets/js/295f424e.6a44f23f.js new file mode 100644 index 0000000000..5f3b7558e4 --- /dev/null +++ b/assets/js/295f424e.6a44f23f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5133],{9579:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>l,frontMatter:()=>s,metadata:()=>d,toc:()=>i});var t=n(5893),c=n(1151);const s={},o="DIRECT_EMITTERS",d={id:"about/references/keywords/DIRECT_EMITTERS",title:"DIRECT_EMITTERS",description:"Deprecated from eCalc v8.7 (changed name to VENTING_EMITTERS).",source:"@site/docs/about/references/keywords/DIRECT_EMITTERS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/DIRECT_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/DIRECT_EMITTERS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CURVES",permalink:"/ecalc/docs/about/references/keywords/CURVES"},next:{title:"DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE"}},a={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function E(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"direct_emitters",children:"DIRECT_EMITTERS"}),"\n",(0,t.jsx)("span",{className:"major-change-deprecation",children:(0,t.jsxs)(r.p,{children:["Deprecated from eCalc v8.7 (changed name to ",(0,t.jsx)("strong",{children:"VENTING_EMITTERS"}),")."]})}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",children:"DIRECT_EMITTERS"})]}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Required"}),(0,t.jsx)(r.th,{children:"Child of"}),(0,t.jsx)(r.th,{children:"Children/Options"})]})}),(0,t.jsx)(r.tbody,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Yes"}),(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"INSTALLATIONS"})}),(0,t.jsxs)(r.td,{children:[(0,t.jsx)(r.code,{children:"NAME"})," ",(0,t.jsx)("br",{})," ",(0,t.jsx)(r.code,{children:"EMISSION_NAME"})," ",(0,t.jsx)("br",{})," ",(0,t.jsx)(r.code,{children:"CATEGORY"})," ",(0,t.jsx)("br",{})," ",(0,t.jsx)(r.code,{children:"EMITTER_MODEL"})]})]})})]}),"\n",(0,t.jsx)(r.admonition,{type:"important",children:(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:["eCalc version 8.7: DIRECT_EMITTERS are renamed to ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"}),"."]}),"\n",(0,t.jsx)(r.li,{children:"eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before."}),"\n"]})}),"\n",(0,t.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(r.p,{children:["The ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",children:"DIRECT_EMITTERS"})," keyword covers the direct emissions on the installation\nthat are not consuming energy. The attributes ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),",\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMISSION_NAME",children:"EMISSION_NAME"}),", ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," and\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})," are required."]}),"\n",(0,t.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"DIRECT_EMITTERS:\n - NAME: <emitter name>\n EMISSION_NAME: <emission name>\n CATEGORY: <category>\n EMITTER_MODEL: <emitter model>\n"})}),"\n",(0,t.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"DIRECT_EMITTERS:\n - NAME: SomeDirectEmitter\n EMISSION_NAME: CH4\n CATEGORY: COLD-VENTING-FUGITIVE\n EMITTER_MODEL:\n <emitter model data>\n ...\n - NAME: SomeOtherDirectEmitter\n EMISSION_NAME: C2H6\n CATEGORY: COLD-VENTING-FUGITIVE\n EMITTER_MODEL:\n <emitter model data>\n"})})]})}function l(e={}){const{wrapper:r}={...(0,c.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(E,{...e})}):E(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>o});var t=n(7294);const c={},s=t.createContext(c);function o(e){const r=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),t.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/29d00dd8.3e3bc7f1.js b/assets/js/29d00dd8.3e3bc7f1.js new file mode 100644 index 0000000000..313150e9e7 --- /dev/null +++ b/assets/js/29d00dd8.3e3bc7f1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8084],{4890:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>a,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var s=r(5893),c=r(1151);const o={},t="ENERGYFUNCTION",l={id:"about/references/keywords/ENERGYFUNCTION",title:"ENERGYFUNCTION",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/ENERGYFUNCTION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/ENERGYFUNCTION",permalink:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/ENERGYFUNCTION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"END",permalink:"/ecalc/docs/about/references/keywords/END"},next:{title:"ENERGY_USAGE_MODEL",permalink:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"}},d={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function E(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"energyfunction",children:"ENERGYFUNCTION"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION",children:"ENERGYFUNCTION"})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Required"}),(0,s.jsx)(n.th,{children:"Child of"}),(0,s.jsx)(n.th,{children:"Children/Options"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"None"})})]})})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["This refers to an energy function model defined in either ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY INPUTS"})," or in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," used for ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY USAGE MODEL"}),".\nThe following attributes can be utilised:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/",children:"COMPRESSOR MODEL"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations",children:"PUMP ENERGY USAGE MODEL"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"TABULATED ENERGY USAGE MODEL"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: <energy usage model type>\n ENERGYFUNCTION: <reference to energy function in facility inputs or models of compressor type>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"\nFACILITY_INPUTS:\n - NAME: compressor_model_reference\n TYPE: COMPRESSOR_TABULAR\n FILE: <file path>\n\n...\n\nINSTALLATIONS:\n - NAME: InstallationA\n CATEGORY: FIXED\n FUEL: fuel_gas\n GENERATORSETS:\n - NAME: gensetA\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_model_reference\n ...\n\n FUELCONSUMERS:\n - NAME: compressor\n CATEGORY: GAS-DRIVEN-COMPRESSOR \n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_model_reference\n ...\n\n"})})]})}function a(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(E,{...e})}):E(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>l,a:()=>t});var s=r(7294);const c={},o=s.createContext(c);function t(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:t(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2b15d891.3bb3344d.js b/assets/js/2b15d891.3bb3344d.js new file mode 100644 index 0000000000..90ece57c16 --- /dev/null +++ b/assets/js/2b15d891.3bb3344d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2225],{1015:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>t,metadata:()=>a,toc:()=>i});var s=r(5893),c=r(1151);const t={},o="NAME",a={id:"about/references/keywords/NAME",title:"NAME",description:"[...] /",source:"@site/docs/about/references/keywords/NAME.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/NAME",permalink:"/ecalc/docs/about/references/keywords/NAME",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/NAME.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"MODELS",permalink:"/ecalc/docs/about/references/keywords/MODELS"},next:{title:"OPERATIONAL_SETTINGS",permalink:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS"}},d={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"name",children:"NAME"}),"\n",(0,s.jsxs)(n.p,{children:["[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["Name of an entity.\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," names must be written with uppercase letters - see example below:"]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"NAME: <name>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["Usage in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"EMISSIONS:\n - NAME: CO2\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Usage in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORIES"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FUEL_TYPES:\n - NAME: diesel_turbine\n CATEGORY: DIESEL\n"})})]})}function u(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>o});var s=r(7294);const c={},t=s.createContext(c);function o(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2b2be347.20f2acd0.js b/assets/js/2b2be347.20f2acd0.js new file mode 100644 index 0000000000..6ca52d34aa --- /dev/null +++ b/assets/js/2b2be347.20f2acd0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1404],{7387:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>t,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=s(5893),l=s(1151);const r={slug:"v7-0-release",title:"v7.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:3},o="eCalc v7.0",a={id:"changelog/v7-0",title:"v7.0",description:"Features",source:"@site/docs/changelog/v7-0.md",sourceDirName:"changelog",slug:"/changelog/v7-0-release",permalink:"/ecalc/docs/changelog/v7-0-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-0.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:3,frontMatter:{slug:"v7-0-release",title:"v7.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:3},sidebar:"changelog",previous:{title:"---",permalink:"/ecalc/docs/changelog/separator"},next:{title:"v7.1",permalink:"/ecalc/docs/changelog/v7-1-release"}},t={},d=[{value:"<em>Features</em>",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2},{value:"CLI",id:"cli",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"ecalc-v70",children:"eCalc v7.0"}),"\n",(0,i.jsx)(n.h2,{id:"features",children:(0,i.jsx)(n.em,{children:"Features"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Add VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES compressor model. See ",(0,i.jsx)(n.code,{children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add GERG model to FLUID model as EOS_MODEL. Now available GERG_PR and GERG_SRK."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add UNITS: EFFICIENCY to compressor charts and pump charts. Plus additional input unit support."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add support for both water and H2O in fluid composition."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add POWER_ADJUSTMENT_CONSTANT for all applicable models to adjust power/energy usage with a constant factor."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Add water as allowed ",(0,i.jsx)(n.code,{children:"FLUID model"})," component."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Improve models documentation"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Deprecation: ",(0,i.jsx)(n.a,{href:"../about/references/keywords/CONDITION",children:"CONDITION"})," is now a single expression instead of list."]}),"\n",(0,i.jsxs)(n.p,{children:["If you previously had a list it is recommended to use the ",(0,i.jsx)(n.a,{href:"../about/references/keywords/CONDITIONS",children:"CONDITIONS"})," keyword instead. This will become a requirement in a future release."]}),"\n",(0,i.jsxs)(n.p,{children:["Alternatively you could merge the conditions to a single expression. This is what is done automatically when using the ",(0,i.jsx)(n.a,{href:"../about/references/keywords/CONDITIONS",children:"CONDITIONS"})," keyword."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" # This is new\n CONDITION: expression1 {*} expression2 \n # This is old\n CONDITION: \n # This is old\n - expression1 \n # This is old\n - expression2 \n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"fixes",children:(0,i.jsx)(n.em,{children:"Fixes"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Handle date columns year as year and not timestamps"}),"\n",(0,i.jsx)(n.li,{children:"Handle suppressed ecalc errors and division by zero"}),"\n",(0,i.jsx)(n.li,{children:"Handle timeseries with one entry"}),"\n",(0,i.jsx)(n.li,{children:"Handle poorly formatted csv data with tabs, multiple spaces and mixed float/integers."}),"\n",(0,i.jsx)(n.li,{children:"Handle 0 regularity"}),"\n",(0,i.jsx)(n.li,{children:"Handle emission intensity when only one timestep"}),"\n",(0,i.jsx)(n.li,{children:"Changed emission intensity to NaN when hydrocarbon export is zero"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"cli",children:"CLI"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"Feature"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Major revision of CLI for future development."}),"\n",(0,i.jsx)(n.li,{children:"Add Flow diagram support"}),"\n",(0,i.jsx)(n.li,{children:"Improve logging, warnings and error messages. DEBUG should now give a lot of information."}),"\n",(0,i.jsx)(n.li,{children:"Add support for list in 'CONDITION' keyword"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"Fix"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Fix issue when using dates in ELECTRICITY2FUEL"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var i=s(7294);const l={},r=i.createContext(l);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c19a041.c111a5f0.js b/assets/js/2c19a041.c111a5f0.js new file mode 100644 index 0000000000..86fb14f972 --- /dev/null +++ b/assets/js/2c19a041.c111a5f0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4507],{7509:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>d});var n=a(5893),r=a(1151);const t={},l="REGULARITY",i={id:"about/references/keywords/REGULARITY",title:"REGULARITY",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/REGULARITY.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/REGULARITY",permalink:"/ecalc/docs/about/references/keywords/REGULARITY",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/REGULARITY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"RATE_PER_STREAM",permalink:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM"},next:{title:"STAGES",permalink:"/ecalc/docs/about/references/keywords/STAGES"}},c={},d=[{value:"Description",id:"description",level:2},{value:"Use in a <code>DIRECT ENERGY USAGE MODEL</code>",id:"use-in-a-direct-energy-usage-model",level:3},{value:"Reporting",id:"reporting",level:3},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Constant regularity",id:"constant-regularity",level:3},{value:"Regularity from time series data",id:"regularity-from-time-series-data",level:3},{value:"Special: Combining calendar and stream day rates",id:"special-combining-calendar-and-stream-day-rates",level:3}];function m(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",math:"math",mfrac:"mfrac",mi:"mi",mo:"mo",mrow:"mrow",mtext:"mtext",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"regularity",children:"REGULARITY"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/REGULARITY",children:"REGULARITY"})]}),"\n",(0,n.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(s.p,{children:["In eCalc\u2122, consumers in an ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY USAGE MODEL"})," are evaluated with the actual rate passing through them whilst\nthey are in operation. This actual rate is referred to as ",(0,n.jsx)(s.em,{children:"stream day (sd) rates"}),".\nDespite the consumers being evaluated with stream day rates, input files are often given in ",(0,n.jsx)(s.em,{children:"calender day (cd) rates"}),". As expected from this definition, ",(0,n.jsx)(s.code,{children:"REGULARITY"})," is closely related to the production efficiency (PE) of a facility."]}),"\n",(0,n.jsx)(s.p,{children:"Stream day rates can be expressed as:"}),"\n",(0,n.jsx)(s.span,{className:"katex-display",children:(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"s"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"m"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"y"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsxs)(s.mfrac,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"c"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"l"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"n"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"y"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"e"})]}),(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"g"}),(0,n.jsx)(s.mi,{children:"u"}),(0,n.jsx)(s.mi,{children:"l"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"i"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"y"})]})]})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"stream\\ day\\ rate = \\frac{calendar\\ day\\ rate}{regularity}"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"re"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"am"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"2.2519em",verticalAlign:"-0.8804em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(s.span,{className:"mfrac",children:(0,n.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(s.span,{className:"vlist-r",children:[(0,n.jsxs)(s.span,{className:"vlist",style:{height:"1.3714em"},children:[(0,n.jsxs)(s.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",children:"re"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"gu"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"})]})]}),(0,n.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(s.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"})]})]})]}),(0,n.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.8804em"},children:(0,n.jsx)(s.span,{})})})]})}),(0,n.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})]})]})}),"\n",(0,n.jsxs)(s.p,{children:["To give an example of this, an input file may have a gas export rate for a whole year. However, this rate will take into account any downtime for the facility. So in reality, this ",(0,n.jsx)(s.em,{children:"calender day rate"})," is not the rate the compressor will process whilst in operation that year. This will rather be the higher ",(0,n.jsx)(s.em,{children:"stream day rate"}),"."]}),"\n",(0,n.jsx)(s.p,{children:"An example of this can be seen in the figure below:"}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Regularity work flow example",src:a(3173).Z+"",width:"1013",height:"110"})}),"\n",(0,n.jsxs)(s.p,{children:["For detailed modeling, it might be a better option to increase the resolution in the ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"}),"\ninputs to capture down periods and variations in conditions rather than using regularity."]}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Rates from reservoir simulations may be both stream day and calendar day."}),"\n",(0,n.jsxs)(s.li,{children:["If eCalc\u2122 is used\nwithout specifying ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/REGULARITY",children:"REGULARITY"}),", then regularity will default to 1."]}),"\n",(0,n.jsxs)(s.li,{children:["All user defined input rates used in ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," are ",(0,n.jsx)(s.strong,{children:"assumed to be calendar day rates"}),"."]}),"\n"]})}),"\n",(0,n.jsxs)(s.h3,{id:"use-in-a-direct-energy-usage-model",children:["Use in a ",(0,n.jsx)(s.code,{children:"DIRECT ENERGY USAGE MODEL"})]}),"\n",(0,n.jsxs)(s.p,{children:["It should be noted that not all ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY USAGE MODELS"})," are evaluated with ",(0,n.jsx)(s.em,{children:"stream day rates"}),".\n",(0,n.jsx)(s.code,{children:"DIRECT ENERGY USAGE MODELS"})," can be specified with the keyword ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",children:"CONSUMPTION_RATE_TYPE"})," - where either ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," or ",(0,n.jsx)(s.code,{children:"STREAM_DAY"})," can be specified.\nNote that the default input rate is ",(0,n.jsx)(s.code,{children:"STREAM_DAY"})," rate - the opposite of the other models."]}),"\n",(0,n.jsxs)(s.p,{children:["For further details on stream day rate vs. calendar day rate, see ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",children:"CONSUMPTION_RATE_TYPE"}),"."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"ENERGY_USAGE_MODEL Type"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Can use CONSUMPTION_RATE_TYPE?"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Evaluated rate type"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"DIRECT"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2611"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"Stream/calendar day"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"COMPRESSOR"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2610"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"Stream day"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"PUMP"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2610"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"Stream day"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"COMPRESSOR_SYSTEM"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2610"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"Stream day"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"PUMP_SYSTEM"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2610"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"Stream day"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"TABULATED"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2610"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"Stream day"})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"reporting",children:"Reporting"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"All fuel rates are reported in calendar days."}),"\n",(0,n.jsx)(s.li,{children:"All power and volume rates results are reported in stream day rates. Note that the volume rates are only present in the .json file."}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"The reason for reporting calendar day rate is to account for potential downtime for process units, i.e. some units may not run all the time throughout a year due to different reasons. Typically all process units have some downtime, and regularity is\non average something closer to 0.99 over a longer period such as a year."}),"\n",(0,n.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"REGULARITY"})," can be specified by a single number or as an expression."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: <installation name>\n CATEGORY: <installation category>\n REGULARITY: <regularity expression>\n"})}),"\n",(0,n.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(s.h3,{id:"constant-regularity",children:"Constant regularity"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"REGULARITY: 0.95\n"})}),"\n",(0,n.jsx)(s.h3,{id:"regularity-from-time-series-data",children:"Regularity from time series data"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"REGULARITY: SIM1;REGULARITY\n"})}),"\n",(0,n.jsx)(s.h3,{id:"special-combining-calendar-and-stream-day-rates",children:"Special: Combining calendar and stream day rates"}),"\n",(0,n.jsxs)(s.p,{children:["If there is a need to combine stream day and calendar day rates in an expression,\n(or to use a stream day rate from a ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," source), one can manually do\nwhat is necessary to obtain calendar day rates by dividing by regularity."]}),"\n",(0,n.jsxs)(s.p,{children:["For example, combining a calendar day rate (",(0,n.jsx)(s.code,{children:"SIM2;GAS_PROD_A"}),") with stream day rate\n(",(0,n.jsx)(s.code,{children:"SIM1;GAS_PROD_B"}),") on an installation with a fixed regularity of 0.95 can be done like:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"RATE: SIM2:GAS_PROD_A {+} SIM1;GAS_PROD_B {*} 0.95\n"})})]})}function h(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},3173:(e,s,a)=>{a.d(s,{Z:()=>n});const n=a.p+"assets/images/regularity-3e43516a1e0246a2e125d4980006b137.png"},1151:(e,s,a)=>{a.d(s,{Z:()=>i,a:()=>l});var n=a(7294);const r={},t=n.createContext(r);function l(e){const s=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),n.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c73e373.897a2d57.js b/assets/js/2c73e373.897a2d57.js new file mode 100644 index 0000000000..3462f9ba4a --- /dev/null +++ b/assets/js/2c73e373.897a2d57.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2655],{2498:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var o=t(5893),s=t(1151);const i={},r="Conventional Commits",c={id:"contribute/guides/conventional-commits",title:"Conventional Commits",description:"Git commits are required to follow conventional commits.",source:"@site/docs/contribute/guides/02-conventional-commits.md",sourceDirName:"contribute/guides",slug:"/contribute/guides/conventional-commits",permalink:"/ecalc/docs/contribute/guides/conventional-commits",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/guides/02-conventional-commits.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"contribute",previous:{title:"Git",permalink:"/ecalc/docs/contribute/guides/git"}},d={},a=[];function l(e){const n={a:"a",code:"code",h1:"h1",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"conventional-commits",children:"Conventional Commits"}),"\n",(0,o.jsxs)(n.p,{children:["Git commits are required to follow ",(0,o.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"conventional commits"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"The message should be structured like this:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"<type>[optional scope]: <description>\n\n[optional body]\n\n[optional footer(s)]\n"})}),"\n",(0,o.jsxs)(n.p,{children:["The type can be one of these types: ",(0,o.jsx)(n.strong,{children:"feat"}),", ",(0,o.jsx)(n.strong,{children:"fix"}),", ",(0,o.jsx)(n.strong,{children:"build"}),", ",(0,o.jsx)(n.strong,{children:"ci"}),", ",(0,o.jsx)(n.strong,{children:"docs"}),", ",(0,o.jsx)(n.strong,{children:"style"}),", ",(0,o.jsx)(n.strong,{children:"refactor"}),", ",(0,o.jsx)(n.strong,{children:"test"}),", and ",(0,o.jsx)(n.strong,{children:"chore"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["The description should be lower-case for the first letter. For description of optional parts, please refer to the\n",(0,o.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"conventional Commits Docs"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"Here are some simple example conventional commits:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"feat: implement new awesome feature\n"})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"docs: add developer guidelines\n"})}),"\n",(0,o.jsx)(n.p,{children:"A more advanced example:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"fix: prevent racing of requests\n\nIntroduce a request id and a reference to latest request. Dismiss\nincoming responses other than from latest request.\n\nRemove timeouts which were used to mitigate the racing issue but are\nobsolete now.\n\nReviewed-by: Z\nRefs: #123\n"})})]})}function m(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>r});var o=t(7294);const s={},i=o.createContext(s);function r(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2ce3b5da.7103e5f5.js b/assets/js/2ce3b5da.7103e5f5.js new file mode 100644 index 0000000000..2fb0c18ed7 --- /dev/null +++ b/assets/js/2ce3b5da.7103e5f5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9050],{806:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>n,metadata:()=>a,toc:()=>d});var r=o(5893),t=o(1151);const n={title:"Variable speed compressor train",sidebar_position:3},i=void 0,a={id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",title:"Variable speed compressor train",description:"In this model all compressors in the train have the same speed, and the model is build on a forward model of",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Variable speed compressor train",sidebar_position:3},sidebar:"about",previous:{title:"Simplified variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model"},next:{title:"Variable speed compressor train model with multiple streams and pressures",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"}},l={},d=[];function c(e){const s={a:"a",code:"code",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.p,{children:"In this model all compressors in the train have the same speed, and the model is build on a forward model of\nthe fluid properties/state where speed is a parameter. Then the speed is iterated until the discharge pressure of the\noutlet is equal to the requested discharge pressure."}),"\n",(0,r.jsxs)(s.p,{children:["This model only supports ",(0,r.jsx)(s.code,{children:"User defined variable speed compressor chart"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["In addition, a ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/fluid_model",children:"FLUID MODEL"})," must be specified."]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Control mechanisms"})}),"\n",(0,r.jsx)(s.p,{children:"The variable speed comporessor train model has the following automatic control mechanisms:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Antisurge control:"})," When the flowrate is too low, given the suction and discharge pressures, eCalc will use automatic anti-surge control. The use of the anti-surge valve (ASV) is mimicked by increasing the total flow through the compressor, until the head is at the surge line (minimum flow curve) of the compressor chart."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Speed increase below minimum speed:"})," If a rate/head point is below the compressor chart (below minimum speed), the speed is automatically increased to the minimum speed curve."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Stonewall speed increase:"})," When the flowrate is too high, given the suction and discharge pressures, eCalc will automatically increase the speed to meet the stonewall (maximum flow line) of the compressor chart. To achieve the requested discharge pressure, the outlet stream is choked. This control mechanism can be turned off, for cases where a downstream choke valve does not exist."]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.img,{src:o(4117).Z+"",width:"730",height:"457"}),"\n",(0,r.jsx)(s.strong,{children:"Format"})]}),"\n",(0,r.jsxs)(s.p,{children:["The model is defined under the main keyword ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," in the format"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model>\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Surge control margin for the compressor stage. Default value 0.0>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Surge control margin for the compressor stage. Default value 0.0>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n - ... and so forth for each stage in the train\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>\n CALCULATE_MAX_RATE: <Optional compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >\n PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE, COMMON_ASV or NONE>\n"})})]})}function m(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},4117:(e,s,o)=>{o.d(s,{Z:()=>r});const r=o.p+"assets/images/control_mech_variable_speed-91a2c845dc627195fee373c1c63d952d.PNG"},1151:(e,s,o)=>{o.d(s,{Z:()=>a,a:()=>i});var r=o(7294);const t={},n=r.createContext(t);function i(e){const s=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2cedaf2f.77a54e69.js b/assets/js/2cedaf2f.77a54e69.js new file mode 100644 index 0000000000..b5c72d88f0 --- /dev/null +++ b/assets/js/2cedaf2f.77a54e69.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5408],{4877:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>t,metadata:()=>s,toc:()=>l});var o=n(5893),r=n(1151);const t={title:"Generic Workflow",sidebar_position:1,description:"Generic workflow"},a=void 0,s={id:"about/modelling/workflow/generic_workflow",title:"Generic Workflow",description:"Generic workflow",source:"@site/docs/about/modelling/workflow/generic_workflow.md",sourceDirName:"about/modelling/workflow",slug:"/about/modelling/workflow/generic_workflow",permalink:"/ecalc/docs/about/modelling/workflow/generic_workflow",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/workflow/generic_workflow.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Generic Workflow",sidebar_position:1,description:"Generic workflow"},sidebar:"about",previous:{title:"eCalc\u2122 Workflow",permalink:"/ecalc/docs/about/modelling/workflow/"},next:{title:"Examples",permalink:"/ecalc/docs/about/modelling/examples/"}},d={},l=[{value:"Simplified Process Flow Diagram",id:"simplified-process-flow-diagram",level:2},{value:"Workflow",id:"workflow",level:2},{value:"Workflow Explanation",id:"workflow-explanation",level:2},{value:"Required Subsurface Profiles",id:"required-subsurface-profiles",level:3},{value:"Facility Information",id:"facility-information",level:3},{value:"Constant Power Loads",id:"constant-power-loads",level:4},{value:"Additional Information",id:"additional-information",level:4},{value:"Consumer Information",id:"consumer-information",level:3},{value:"Generator Set",id:"generator-set",level:4},{value:"Compressor Curves",id:"compressor-curves",level:4},{value:"Validation",id:"validation",level:3},{value:"Calibration",id:"calibration",level:3}];function c(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",mermaid:"mermaid",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.h2,{id:"simplified-process-flow-diagram",children:"Simplified Process Flow Diagram"}),"\n",(0,o.jsxs)(i.p,{children:["The image below illustrates a simplified process flow diagram for a generic offshore oil and gas facility. Each unit included in this diagram can be modelled with the use of eCalc.\nThe ",(0,o.jsx)(i.a,{href:"#workflow",children:"workflow"})," below will outline what is necessary to obtain for each step. In addition, there are some accompanied ",(0,o.jsx)(i.a,{href:"#workflow-explanation",children:"explanations"})," to the workflow."]}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{src:n(15).Z+"",width:"5863",height:"4444"})}),"\n",(0,o.jsx)(i.h2,{id:"workflow",children:"Workflow"}),"\n",(0,o.jsx)(i.mermaid,{chart:' flowchart TD;\n subgraph ide1 ["`**Required Subsurface Profiles [All in Sm3/d]**`"]\n ide1_A[Oil Produced];\n ide1_B[Gas Produced];\n ide1_C[Water Produced];\n ide1_D[Gas Injected];\n ide1_E[Water Injected];\n end\n subgraph ide2 ["`**Facility Information Needed**`"]\n\n ide2_A[[Power Generation System]] --\x3e ide2_A_1([Gas Turbines]);\n ide2_A_1 --\x3e ide2_A_2(["`Number of Gas Turbines `"]);\n ide2_A_2 --\x3e ide2_A_3(["`Maximum capacity per generator and spinning reserve`"]);\n \n ide2_B[["Water Injection System"]] --\x3e ide2_B_1(["`Suction Pressure`"]);\n ide2_B_1 --\x3e ide2_B_2(["`Discharge Pressure`"]);\n ide2_B_2 --\x3e ide2_B_3(["`Injected Water Density`"]);\n ide2_B_3 --\x3e ide2_B_4(["`Maximum capacity per pump`"]);\n \n ide2_D[[Gas Compression System]] --\x3e ide2_D_1(["`Export Compressor`"]);\n ide2_D --\x3e ide2_D_1_1(["`Re-Injection Compressor`"]);\n ide2_D_1 --\x3e ide2_D_2(["`Suction Pressure per compressor`"]);\n ide2_D_1_1 --\x3eide2_D_2\n ide2_D_2 --\x3e ide2_D_3(["`Discharge Pressure per compressor`"]);\n ide2_D_3 --\x3e ide2_D_4(["`Suction Temperature per compressor`"]);\n ide2_C[["Constant Power Loads"]] --\x3e ide2_C_1(["`Base Load`"]);\n ide2_C_1 --\x3e ide2_C_2(["`Oil Export Pumps`"]);\n ide2_C_2 --\x3e ide2_C_3(["`Gas Recompressor`"])\n \n ide2_E[[Additional Emissions]] --\x3e ide2_E_1([Flaring]);\n ide2_E_1 --\x3e ide2_E_2(["`Electrical Submersible Pumps (ESP)`"])\n ide2_E_2 --\x3e ide2_E_3(["`Drilling rigs`"])\n \n end\n\n subgraph ide3 ["`**Consumer Data Needed**`"]\n\n ide3_A[[Generator Set]]--\x3e ide3_A_1(["`Fuel vs Power relationship. Linear lines relating fuel and power`"]);\n ide3_A_1 --\x3e ide3_A_2(["`Generating switching. At max capacity of the generator, impose another generate on the existing`"]);\n \n ide3_B[[Compressors]] --\x3e ide3_B_1(["`Variable/single speed drive`"]);\n ide3_B_1 --\x3e ide3_B_2{Available charts?};\n ide3_B_2 -. yes .-> ide3_B_4(["`Use suppliers compressor chart (head vs flow, efficiency vs flow)`"]);\n ide3_B_2 -. no .-> ide3_B_3(["`Use generic chart functionality`"]);\n \n ide3_C[[Water Injectors]] --\x3e ide3_C_1(["`Variable/single speed drive`"]);\n ide3_C_1 --\x3e ide3_C_2{Available charts?};\n ide3_C_2 -. yes .-> ide3_C_4(["`Use suppliers pump chart (head vs flow, efficiency vs flow)`"]);\n ide3_C_2 -. no .-> ide3_C_3(["`Generate synthetic charts using expected head and flow ranges`"]);\n\n end\n\n subgraph ide4 ["`**Validation**`"]\n\n ide4_A{"Invalid data?"} \n\n ide4_A -. yes .-> ide4_A_1{"`Invalid Compressors?`"};\n ide4_A_1 -. yes .-> ide4_A_1_1(["`Either head or rate is too high`"]);\n ide4_A_1_1 --\x3e ide4_A_1_2(["`Plot operational points and adjust charts to fit historical data`"]);\n \n ide4_A -. yes .-> ide4_A_3{"`Invalid Pumps?`"};\n ide4_A_3 -. yes .-> ide4_A_3_1(["`Either head or rate is too high`"]);\n ide4_A_3_1 --\x3e ide4_A_3_2(["`Plot operational points and adjust charts to fit historical data`"]);\n \n ide4_A -. yes .-> ide4_A_4{"`Invalid Generator Set?`"};\n ide4_A_4 -. yes .-> ide4_A_4_1(["`Check maximum and minimum facility power consumption values are within the range of the specified generator set`"]);\n ide4_A_4_1 --\x3e ide4_A_4_2(["`Adjust generator set`"]);\n\n end\n\n subgraph ide5 ["`Calibration`"]\n\n ide5_A["`Calibration`"] --\x3e ide5_A_1(["`Compare measured power against eCalc power`"]) ;\n ide5_A_1 --\x3e ide5_A_2{"`Do they correlate`"}\n ide5_A_2 -. yes .-> ide5_A_3_1{"`Are all points valid?`"};\n ide5_A_3_1 -. yes .-> ide5_A_3_2(["`No further calibration needed`"])\n ide5_A_2 -. no .-> ide5_A_2_1(["`Consider using POWERLOSSFACTOR to adjust modelled to measured power`"])\n ide5_A_2_1 --\x3e ide5_A_3_1\n ide5_A_4_1(["`Plot operational points on the same figure as the performance chart`"]) --\x3e ide5_A_4_2(["`Alter the head vs flow curves (using fan law theory)`"])\n ide5_A_4_2 --\x3e ide5_A_1\n ide5_A_3_1 -. no .-> ide5_A_4_1\n end\n \n ide1 ~~~ ide2\n ide2 ~~~ ide3\n ide3 ~~~ ide4\n ide4 ~~~ ide5'}),"\n",(0,o.jsx)(i.h2,{id:"workflow-explanation",children:"Workflow Explanation"}),"\n",(0,o.jsx)(i.h3,{id:"required-subsurface-profiles",children:"Required Subsurface Profiles"}),"\n",(0,o.jsxs)(i.p,{children:["All subsurface profiles must be in Sm",(0,o.jsx)("sup",{children:"3"}),"/day. This data must be inputted as a ",(0,o.jsx)(i.code,{children:"TIME-SERIES"})," and references to how it is used in the facility or by a relevant consumer."]}),"\n",(0,o.jsx)(i.h3,{id:"facility-information",children:"Facility Information"}),"\n",(0,o.jsx)(i.h4,{id:"constant-power-loads",children:"Constant Power Loads"}),"\n",(0,o.jsx)(i.p,{children:"To simplify certain models, there are some common assumptions made. Here are some examples:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Base Load"}),': As eCalc\u2122 is not simulating the whole facility there are often energy consumers that are not modelled.\nTypically these energy consumers relate to things such as the energy consumption of living quarters and are often constant loads.\nThese smaller constant loads are then grouped into a larger term, called the "baseload". This is assumed to be constant and independent of the production rate of the facility.']}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Recompressor"}),": The main function of a recompressor is to compressor gas from separator pressures back up to the inlet separator pressure.\nThese compressors are often smaller and have little fluctuation in their load.\nThus, to simplify modelling, these recompressors are often modelled as constant loads. And at times, are included within the facility's base load"]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Oil Export Pumps"}),": As eCalc\u2122 does not model oil pumps, these are often modelled as constant loads or modelled with a table (that relates oil rate to power consumption). The method in which they are modelled depends from facility to facility"]}),"\n"]}),"\n",(0,o.jsx)(i.h4,{id:"additional-information",children:"Additional Information"}),"\n",(0,o.jsx)(i.p,{children:"Any emissions that do not fall within the defined categories can still be considered for a given platform. For example, if there are drilling activities, an additional fuel type can be specified and related to the fuel consumption of a drilling rig."}),"\n",(0,o.jsx)(i.h3,{id:"consumer-information",children:"Consumer Information"}),"\n",(0,o.jsx)(i.h4,{id:"generator-set",children:"Generator Set"}),"\n",(0,o.jsx)(i.p,{children:'As eCalc\u2122 does not indepthly model gas turbine generators, alternative methods are used.\nHere, fuel consumed and power generated is related in tabular form. These are typically linear relationships, and if more than one generator is used, "generator switching" is modelled by adding another generator curve on top of the existing.'}),"\n",(0,o.jsx)(i.p,{children:"This means that the facility will operate in the most efficient manner, i.e. meaning that if one generator will satisfy the power demand, only one generator will always be used."}),"\n",(0,o.jsx)(i.h4,{id:"compressor-curves",children:"Compressor Curves"}),"\n",(0,o.jsx)(i.p,{children:"eCalc\u2122 has generic compressor curve functionality which can be used when compressor curves are not available.\nHowever, if a manufactor compressor chart is available, it is always recommended to use this over a generic chart.\nThe generic compressor curves, use the assumption of constant polytropic efficiency, which is only a good assumption if the compressor is running near the design points."}),"\n",(0,o.jsx)(i.h3,{id:"validation",children:"Validation"}),"\n",(0,o.jsx)(i.p,{children:"Checking whether an eCalc\u2122 model is valid or not, is an essential task. If a model is not valid, this means that input requirements set by the user are not being fulfilled, or that some consumers are giving unrealistic solutions."}),"\n",(0,o.jsx)(i.p,{children:"Validity can be checked by consumer, and there are often specific reasons why certain consumers are invalid. For example:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Compressors and Pumps"}),": It is common that either too high a head or rate value is specified. This means that the invalid point is outside the limits of the performance chart. To determine the issue, it is recommended that the operational points (Head, and actual flowrate) are plotted together with the chart."]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Generator Set"}),": The most common issue here is that the amount of power required is higher than the maximum value in the utilised genset."]}),"\n"]}),"\n",(0,o.jsx)(i.h3,{id:"calibration",children:"Calibration"}),"\n",(0,o.jsx)(i.p,{children:"The term calibration in eCalc\u2122 often refers to the history matching of the facility. Essentially, real operational data is compared against the eCalc\u2122 model results. If they do not correlate various changes are made to the model."}),"\n",(0,o.jsxs)(i.p,{children:["The main workflow with this would be to match every individual consumer, e.g. each pump and compressor. After that, it is the recommended to compare on the facility level (e.g. total power consumed or total fuel used), then various adjustments can be made.\nThese adjustments can mean changes to the base load, shifting the compressor curves, or simply by using a ",(0,o.jsx)(i.a,{href:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",children:"POWERLOSSFACTOR"}),"."]})]})}function h(e={}){const{wrapper:i}={...(0,r.a)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},15:(e,i,n)=>{n.d(i,{Z:()=>o});const o=n.p+"assets/images/simple_facility_pfd-ad59578d69ea3d3267f646b9d8141822.jpg"},1151:(e,i,n)=>{n.d(i,{Z:()=>s,a:()=>a});var o=n(7294);const r={},t=o.createContext(r);function a(e){const i=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function s(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),o.createElement(t.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2df92a48.5f0f22e6.js b/assets/js/2df92a48.5f0f22e6.js new file mode 100644 index 0000000000..535b6764ca --- /dev/null +++ b/assets/js/2df92a48.5f0f22e6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3596],{9134:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var n=s(5893),r=s(1151);const o={},c="FUEL_TYPES",a={id:"about/references/keywords/FUEL_TYPES",title:"FUEL_TYPES",description:"FUELTYPES",source:"@site/docs/about/references/keywords/FUEL_TYPES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FUEL_TYPES",permalink:"/ecalc/docs/about/references/keywords/FUEL_TYPES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FUEL_TYPES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FUELRATE",permalink:"/ecalc/docs/about/references/keywords/FUELRATE"},next:{title:"GENERATORSETS",permalink:"/ecalc/docs/about/references/keywords/GENERATORSETS"}},i={},d=[{value:"Description",id:"description",level:2}];function u(e){const t={a:"a",h1:"h1",h2:"h2",p:"p",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"fuel_types",children:"FUEL_TYPES"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})}),"\n",(0,n.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(t.p,{children:["This part of the setup specifies the various fuel types and associated emissions\nused in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the\n",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup by its name."]}),"\n",(0,n.jsxs)(t.p,{children:["The use of fuel can lead to one or more emission types, specified in ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"}),".\nYou can optionally specify a ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["See ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/fuel_types",children:"FUEL TYPES"})," for more details about usage."]})]})}function l(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},1151:(e,t,s)=>{s.d(t,{Z:()=>a,a:()=>c});var n=s(7294);const r={},o=n.createContext(r);function c(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2f04f592.bf49cec0.js b/assets/js/2f04f592.bf49cec0.js new file mode 100644 index 0000000000..8c991cf5ed --- /dev/null +++ b/assets/js/2f04f592.bf49cec0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7495],{2787:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>c,metadata:()=>s,toc:()=>i});var n=a(5893),o=a(1151);const c={slug:"separator",title:"---",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:2},r=void 0,s={id:"changelog/separator",title:"---",description:"",source:"@site/docs/changelog/separator.md",sourceDirName:"changelog",slug:"/changelog/separator",permalink:"/ecalc/docs/changelog/separator",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/separator.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:2,frontMatter:{slug:"separator",title:"---",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:2},sidebar:"changelog",previous:{title:"Next",permalink:"/ecalc/docs/changelog/latest"},next:{title:"v7.0",permalink:"/ecalc/docs/changelog/v7-0-release"}},l={},i=[];function u(e){return(0,n.jsx)(n.Fragment,{})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u()}},1151:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>r});var n=a(7294);const o={},c=n.createContext(o);function r(e){const t=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3261da49.279e9591.js b/assets/js/3261da49.279e9591.js new file mode 100644 index 0000000000..8586ae1409 --- /dev/null +++ b/assets/js/3261da49.279e9591.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3091],{9333:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var s=t(5893),r=t(1151);const i={},o="INTERPOLATION_TYPE",c={id:"about/references/keywords/INTERPOLATION_TYPE",title:"INTERPOLATION_TYPE",description:"TIMESERIES /",source:"@site/docs/about/references/keywords/INTERPOLATION_TYPE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INTERPOLATION_TYPE",permalink:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INTERPOLATION_TYPE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INSTALLATIONS",permalink:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},next:{title:"INTERSTAGE_CONTROL_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"interpolation_type",children:"INTERPOLATION_TYPE"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})]}),"\n",(0,s.jsxs)(n.p,{children:["New in ",(0,s.jsx)(n.strong,{children:"v8.1"}),", previously known as ",(0,s.jsx)(n.code,{children:"RATE_INTERPOLATION_TYPE"})," that was renamed to ",(0,s.jsx)(n.code,{children:"INTERPOLATION_TYPE"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.admonition,{title:"Caution",type:"caution",children:[(0,s.jsxs)(n.p,{children:["Only valid for CSV data of source ",(0,s.jsx)(n.code,{children:"MISCELLANEOUS"}),". For ",(0,s.jsx)(n.code,{children:"TIME_SERIES"})," of ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"}),"\n",(0,s.jsx)(n.code,{children:"DEFAULT"})," the keyword is not allowed as input. The following applies:"]}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"MISCELLANEOUS: Interpolation type is mandatory."}),"\n",(0,s.jsxs)(n.li,{children:["DEFAULT: Interpolation type not allowed. Default ",(0,s.jsx)(n.code,{children:"RIGHT"})," is used."]}),"\n"]})]}),"\n",(0,s.jsx)(n.admonition,{title:"Caution",type:"caution",children:(0,s.jsxs)(n.p,{children:["Different data types may require different types of interpolation. While reservoir rates are\ntypically interpolated ",(0,s.jsx)(n.code,{children:"RIGHT"})," or ",(0,s.jsx)(n.code,{children:"LEFT"}),", other data such as pressure is often interpolated\nlinearly (",(0,s.jsx)(n.code,{children:"LINEAR"}),"). Data that should be interpolated differently must be specified in\ndifferent input files, as it is not possible to have multiple interpolation types for vectors\nwithin the same file."]})}),"\n",(0,s.jsxs)(n.p,{children:["Rates are given at defined time steps in the data source but are in essence valid for a time\ninterval. The ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"}),"\nwill determine how rates are interpolated between the given time steps."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"LEFT"}),": The rate given at the current time step is defining the rate in the time interval between the current and\nprevious time step. This is in data science also known as backwards filling of missing values."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"RIGHT"}),": The rate given at the current time step is defining the rate in the time interval between the current and\nnext time step. This is in data science also known as forward filling of missing values."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"LINEAR"}),": The rate will be linearly interpolated between the time steps."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The plot below shows how the different choices for ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})," works in practice."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:t(1856).Z+"",width:"512",height:"384"})}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>\n"})}),"\n",(0,s.jsx)(n.h3,{id:"requirements",children:"Requirements"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})," has to be specified if\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," is set to ",(0,s.jsx)(n.code,{children:"MISCELLANEOUS"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})," can not be specified if ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," is set to ",(0,s.jsx)(n.code,{children:"DEFAULT"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["See the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," ",(0,s.jsx)(n.code,{children:"time_series_format"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1856:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png"},1151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>o});var s=t(7294);const r={},i=s.createContext(r);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/33498b04.0fa0d93a.js b/assets/js/33498b04.0fa0d93a.js new file mode 100644 index 0000000000..fd3eb1e22f --- /dev/null +++ b/assets/js/33498b04.0fa0d93a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[381],{4180:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>m});var r=s(5893),o=s(1151);const i={title:"Simplified variable speed compressor train",sidebar_position:2},t=void 0,a={id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",title:"Simplified variable speed compressor train",description:"The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Simplified variable speed compressor train",sidebar_position:2},sidebar:"about",previous:{title:"Single speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model"},next:{title:"Variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"}},d={},m=[{value:"Format",id:"format",level:2},{value:"Simplified compressor train model with known compressor stages",id:"simplified-compressor-train-model-with-known-compressor-stages",level:3},{value:"Simplified compressor train model with unknown number of compressor stages",id:"simplified-compressor-train-model-with-unknown-number-of-compressor-stages",level:3},{value:"Examples",id:"examples",level:2},{value:"A (single) compressor with a user-defined variable speed compressor chart and fluid composition",id:"a-single-compressor-with-a-user-defined-variable-speed-compressor-chart-and-fluid-composition",level:3},{value:"A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition",id:"a-single-turbine-driven-compressor-with-a-generic-compressor-chart-with-design-point-and-predefined-composition",level:3},{value:"A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart",id:"a-compressor-train-with-two-stages-where-the-first-stage-has-unknown-spec-while-the-second-has-a-predefined-chart",level:3},{value:"A compressor train where the number of stages are unknown",id:"a-compressor-train-where-the-number-of-stages-are-unknown",level:3}];function l(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures\nare assumed based on an assumption of equal pressure fractions for each stage. Based on this, the compressor work is\ncalculated independently for each compressor as if it was a standalone compressor, neglecting that they are in fact on\nthe same shaft and thus have a common speed."}),"\n",(0,r.jsxs)(n.p,{children:["This model supports both ",(0,r.jsx)(n.code,{children:"user defined compressor charts"})," and\n",(0,r.jsx)(n.code,{children:"generic compressor charts"}),". See ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"compressor charts"})," for more information."]}),"\n",(0,r.jsxs)(n.p,{children:["In addition, a ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/fluid_model",children:"FLUID MODEL"})," must be specified."]}),"\n",(0,r.jsx)(n.p,{children:"The model comes in two versions, one where the compressor stages are known (pre defined), and one where the compressor\nstages are calculated at run-time based on input data."}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS\n COMPRESSOR_TRAIN: <compressor train specification>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>\n CALCULATE_MAX_RATE: <Optional. compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >\n"})}),"\n",(0,r.jsx)(n.h3,{id:"simplified-compressor-train-model-with-known-compressor-stages",children:"Simplified compressor train model with known compressor stages"}),"\n",(0,r.jsx)(n.p,{children:"When the compressor stages are known, each stage is defined with a compressor chart and an inlet temperature:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model>\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>\n - ... and so forth for each stage in the train\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"simplified-compressor-train-model-with-unknown-number-of-compressor-stages",children:"Simplified compressor train model with unknown number of compressor stages"}),"\n",(0,r.jsx)(n.p,{children:"When the number of compressor stages are not known, one may specify the maximum pressure ratio per stage.\nWhen the maximum pressure ratio is set, the number of compressors will be determined at run time (based on input data)\nsuch that the number of compressors is large enough to ensure no pressure ratios are above a given maximum pressure\nratio per stage, but not larger."}),"\n",(0,r.jsx)(n.p,{children:"This model is intended for (but not limited to) the use of a generic compressor chart. Especially one can test with the\ngeneric compressor chart which are adjusted at run time (based on input data), for example to explore future\nrebuilds/designs where no specifications/data is yet available from vendors et.c."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model>\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: <maximum pressure ratio per stage>\n COMPRESSOR_CHART: <reference to compressor chart model used for all stages, must be defined in [MODELS] or [FACILITY_INPUTS]>\n INLET_TEMPERATURE: <inlet temperature for all stages>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"examples",children:"Examples"}),"\n",(0,r.jsx)(n.h3,{id:"a-single-compressor-with-a-user-defined-variable-speed-compressor-chart-and-fluid-composition",children:"A (single) compressor with a user-defined variable speed compressor chart and fluid composition"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 10767\n RATE: [4052, 4500, 4999, 5492, 6000, 6439,]\n HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]\n EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]\n\n - NAME: fluid_model_1\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: SRK\n COMPOSITION:\n nitrogen: 0.74373\n CO2: 2.415619\n methane: 85.60145\n ethane: 6.707826\n propane: 2.611471\n i_butane: 0.45077\n n_butane: 0.691702\n i_pentane: 0.210714\n n_pentane: 0.197937\n n_hexane: 0.368786\n\n - NAME: simplified_compressor_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model_1\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n"})}),"\n",(0,r.jsx)(n.h3,{id:"a-single-turbine-driven-compressor-with-a-generic-compressor-chart-with-design-point-and-predefined-composition",children:"A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 7000\n DESIGN_HEAD: 50\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n\n - NAME: medium_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n - NAME: simplified_compressor_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: medium_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362] # fractions between 0 and 1\n\n - NAME: simplified_compressor_model_with_turbine\n TYPE: COMPRESSOR_WITH_TURBINE\n COMPRESSOR_MODEL: simplified_compressor_model\n TURBINE_MODEL: compressor_train_turbine\n"})}),"\n",(0,r.jsx)(n.h3,{id:"a-compressor-train-with-two-stages-where-the-first-stage-has-unknown-spec-while-the-second-has-a-predefined-chart",children:"A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" MODELS:\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 10767\n RATE: [4052, 4500, 4999, 5492, 6000, 6439,]\n HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]\n EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]\n\n - NAME: dry_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: DRY\n\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: dry_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n"})}),"\n",(0,r.jsx)(n.h3,{id:"a-compressor-train-where-the-number-of-stages-are-unknown",children:"A compressor train where the number of stages are unknown"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" MODELS:\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n - NAME: dry_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: DRY\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: dry_fluid\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n INLET_TEMPERATURE: 30\n"})})]})}function c(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var r=s(7294);const o={},i=r.createContext(o);function t(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3409ab5c.1a5df7d3.js b/assets/js/3409ab5c.1a5df7d3.js new file mode 100644 index 0000000000..cfd9d5e529 --- /dev/null +++ b/assets/js/3409ab5c.1a5df7d3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2017],{9384:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>m,metadata:()=>r,toc:()=>t});var n=a(5893),l=a(1151);const m={title:"Pump modelling",sidebar_position:1,description:"Pump modelling theory"},i=void 0,r={id:"about/modelling/theory/pump_modelling",title:"Pump modelling",description:"Pump modelling theory",source:"@site/docs/about/modelling/theory/pump_modelling.md",sourceDirName:"about/modelling/theory",slug:"/about/modelling/theory/pump_modelling",permalink:"/ecalc/docs/about/modelling/theory/pump_modelling",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/theory/pump_modelling.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Pump modelling",sidebar_position:1,description:"Pump modelling theory"},sidebar:"about",previous:{title:"Theory",permalink:"/ecalc/docs/about/modelling/theory/"},next:{title:"Compressor modelling",permalink:"/ecalc/docs/about/modelling/theory/compressor_modelling"}},c={},t=[];function h(s){const e={annotation:"annotation",img:"img",math:"math",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",p:"p",semantics:"semantics",span:"span",...(0,l.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:"As liquid can be assumed incompressible, pump calculations are simpler compared to compressor calculations. The pumped fluid can be characterized with its density, and no fluid calculations are necessary."}),"\n",(0,n.jsx)(e.p,{children:"The power demand of a pump is calculated as"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"e"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"y"})]})]}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"power = \\frac{head * mass\\_rate}{efficiency}."})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"er"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"2.2749em",verticalAlign:"-0.8804em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3944em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"ff"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"cy"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ma"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ss"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.8804em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsx)(e.span,{className:"mord",children:"."})]})]})]})}),"\n",(0,n.jsx)(e.p,{children:"Here, the relationship between head and pressures is given by"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"("}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"2"})]}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:")"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"q"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"y"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"g"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"head = \\frac{(P_2-P_1)}{liquid\\_density * g}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"2.423em",verticalAlign:"-0.996em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.427em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"q"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"g"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen",children:"("}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"2"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:")"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.996em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"1"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P_1"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," and ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"2"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P_2"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"2"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," are the pump suction and discharge pressures, respectively, and ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"g"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"g"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"g"})]})})]})," is the gravitational constant."]}),"\n",(0,n.jsx)(e.p,{children:"eCalc uses the pump chart to relate liquid flow, head and efficiency for the pump, as well as defining the operational envelope for the pump."}),"\n",(0,n.jsx)(e.p,{children:"For single speed pumps, eCalc does extrapolations corresponding to minflow (liquid recirculation) and choking to keep the pump operation within the operational envelope."}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.img,{src:a(4854).Z+"",width:"502",height:"449"})," ",(0,n.jsx)(e.img,{src:a(9258).Z+"",width:"484",height:"443"})]})]})}function d(s={}){const{wrapper:e}={...(0,l.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},4854:(s,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG"},9258:(s,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG"},1151:(s,e,a)=>{a.d(e,{Z:()=>r,a:()=>i});var n=a(7294);const l={},m=n.createContext(l);function i(s){const e=n.useContext(m);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function r(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(l):s.components||l:i(s.components),n.createElement(m.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/3720c009.462e617c.js b/assets/js/3720c009.462e617c.js new file mode 100644 index 0000000000..ca4cd71b6a --- /dev/null +++ b/assets/js/3720c009.462e617c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3751],{9861:(t,e,a)=>{a.r(e),a.d(e,{default:()=>p});a(7294);var s=a(512),n=a(1944),r=a(5281),l=a(5999);const c=()=>(0,l.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var i=a(3008),o=a(2503);const g={tag:"tag_Nnez"};var u=a(5893);function h(t){let{letterEntry:e}=t;return(0,u.jsxs)("article",{children:[(0,u.jsx)(o.Z,{as:"h2",id:e.letter,children:e.letter}),(0,u.jsx)("ul",{className:"padding--none",children:e.tags.map((t=>(0,u.jsx)("li",{className:g.tag,children:(0,u.jsx)(i.Z,{...t})},t.permalink)))}),(0,u.jsx)("hr",{})]})}function d(t){let{tags:e}=t;const a=function(t){const e={};return Object.values(t).forEach((t=>{const a=function(t){return t[0].toUpperCase()}(t.label);e[a]??=[],e[a].push(t)})),Object.entries(e).sort(((t,e)=>{let[a]=t,[s]=e;return a.localeCompare(s)})).map((t=>{let[e,a]=t;return{letter:e,tags:a.sort(((t,e)=>t.label.localeCompare(e.label)))}}))}(e);return(0,u.jsx)("section",{className:"margin-vert--lg",children:a.map((t=>(0,u.jsx)(h,{letterEntry:t},t.letter)))})}var j=a(197);function m(t){let{title:e}=t;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(n.d,{title:e}),(0,u.jsx)(j.Z,{tag:"doc_tags_list"})]})}function x(t){let{tags:e,title:a}=t;return(0,u.jsx)(n.FG,{className:(0,s.Z)(r.k.page.docsTagsListPage),children:(0,u.jsx)("div",{className:"container margin-vert--lg",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("main",{className:"col col--8 col--offset-2",children:[(0,u.jsx)(o.Z,{as:"h1",children:a}),(0,u.jsx)(d,{tags:e})]})})})})}function p(t){const e=c();return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(m,{...t,title:e}),(0,u.jsx)(x,{...t,title:e})]})}},3008:(t,e,a)=>{a.d(e,{Z:()=>c});a(7294);var s=a(512),n=a(3692);const r={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var l=a(5893);function c(t){let{permalink:e,label:a,count:c}=t;return(0,l.jsxs)(n.Z,{href:e,className:(0,s.Z)(r.tag,c?r.tagWithCount:r.tagRegular),children:[a,c&&(0,l.jsx)("span",{children:c})]})}}}]); \ No newline at end of file diff --git a/assets/js/3810e8e5.450a30d2.js b/assets/js/3810e8e5.450a30d2.js new file mode 100644 index 0000000000..70dc100dcf --- /dev/null +++ b/assets/js/3810e8e5.450a30d2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6887],{2177:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var r=s(5893),t=s(1151);const o={},a="HCEXPORT",i={id:"about/references/keywords/HCEXPORT",title:"HCEXPORT",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/HCEXPORT.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/HCEXPORT",permalink:"/ecalc/docs/about/references/keywords/HCEXPORT",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/HCEXPORT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"GENERATORSETS",permalink:"/ecalc/docs/about/references/keywords/GENERATORSETS"},next:{title:"HEAD",permalink:"/ecalc/docs/about/references/keywords/HEAD"}},c={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Basic usage",id:"basic-usage",level:3},{value:"With time dependency",id:"with-time-dependency",level:3},{value:"Full example",id:"full-example",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"hcexport",children:"HCEXPORT"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HCEXPORT",children:"HCEXPORT"})]}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HCEXPORT",children:"HCEXPORT"})," defines the export of hydrocarbons as a number of oil equivalents in Sm",(0,r.jsx)("sup",{children:"3"}),".\nThis keyword is required for the output of emission intensity (i.e., kg CO",(0,r.jsx)("sub",{children:"2"}),"/boe).\nThis could be a single time series variable or an ",(0,r.jsx)(n.code,{children:"expression <expressions>"})," containing multiple time series variables.\nTypically it would be the sum of exported oil and gas in units of oil equivalents."]}),"\n",(0,r.jsx)(n.admonition,{title:"What is hydrocarbon export?",type:"info",children:(0,r.jsxs)(n.p,{children:["Hydrocarbon export is the oil equivalents of what is exported for sale and only these volumes should\nbe included here. I.e., it is important to distinguish between ",(0,r.jsx)(n.em,{children:"produced gas"})," and ",(0,r.jsx)(n.em,{children:"sales gas"}),".\nSee ",(0,r.jsx)(n.a,{href:"https://docmap.equinor.com/Docmap/page/doc/dmDocIndex.html?DOCVIEW=FALSE?DOCID=1042144",children:"GL0093"})," in Docmap."]})}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"HCEXPORT: <EXPRESSION> # [Sm3/day]\n"})}),"\n",(0,r.jsx)(n.p,{children:"or"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"HCEXPORT:\n <DATE>: <EXPRESSION> # [Sm3/day]\n <DATE>: <EXPRESSION> # [Sm3/day]\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.h3,{id:"basic-usage",children:"Basic usage"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"HCEXPORT: SIM;OIL_PROD {+} SIM;GAS_SALES {/} 1000\n"})}),"\n",(0,r.jsx)(n.h3,{id:"with-time-dependency",children:"With time dependency"}),"\n",(0,r.jsx)(n.p,{children:"In this example the gas export starts later than production start up:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"HCEXPORT:\n 2001-01-01: SIM1;OIL_PROD\n 2005-01-01: SIM2:OIL_PROD {+} SIM1;GAS_SALES {/} 1000\n"})}),"\n",(0,r.jsx)(n.h3,{id:"full-example",children:"Full example"}),"\n",(0,r.jsxs)(n.p,{children:["Example showing ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HCEXPORT",children:"HCEXPORT"})," the modelling hierarchy:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: installation_A\n FUEL: fuel_gas\n HCEXPORT: SIM;OIL_PROD:FIELD_A {+} SIM;GAS_SALES:FIELD_A {/} 1000\n GENERATORSETS:\n <Data for the generator sets to be put her>\n FUELCONSUMERS:\n <Data for the fuel consumers to be put here>\n - NAME: installation_B\n HCEXPORT: SIM;OIL_PROD:FIELD_B {+} SIM;GAS_SALES:FIELD_B{/} 1000\n GENERATORSETS:\n <Data for the generator sets to be put her>\n FUELCONSUMERS:\n <Data for the fuel consumers to be put here>\n"})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>i,a:()=>a});var r=s(7294);const t={},o=r.createContext(t);function a(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/382d59b5.177e6432.js b/assets/js/382d59b5.177e6432.js new file mode 100644 index 0000000000..5817bcd6dd --- /dev/null +++ b/assets/js/382d59b5.177e6432.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9306],{4706:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>E,frontMatter:()=>c,metadata:()=>i,toc:()=>d});var s=n(5893),t=n(1151);const c={},o="CURVES",i={id:"about/references/keywords/CURVES",title:"CURVES",description:"Description",source:"@site/docs/about/references/keywords/CURVES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CURVES",permalink:"/ecalc/docs/about/references/keywords/CURVES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CURVES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CURVE",permalink:"/ecalc/docs/about/references/keywords/CURVE"},next:{title:"DIRECT_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"curves",children:"CURVES"}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["When using a detailed variable speed compressor model, it is necessary to specify the variable speed ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/#user-defined-variable-speed-compressor-chart",children:"COMPRESSOR CHART"}),". This can be defined from a .csv file, or it can be defined directly in the YAML file.\nIn either case, the keyword ",(0,s.jsx)(r.code,{children:"CURVES"})," needs to be used, and curves for at least two different speeds must be defined. If a .csv file is being used, under the ",(0,s.jsx)(r.code,{children:"CURVES"})," keyword, ",(0,s.jsx)(r.code,{children:"FILE"})," must be used. If specified directly in the YAML file, ",(0,s.jsx)(r.code,{children:"SPEED"}),", ",(0,s.jsx)(r.code,{children:"RATE"}),", ",(0,s.jsx)(r.code,{children:"HEAD"})," and ",(0,s.jsx)(r.code,{children:"EFFICIENCY"})," must be defined for each speed."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n ...\n CURVES:\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n ... \n CURVES:\n - FILE: <filepath to compressor curve>\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n ...\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 9886\n RATE: [3708, 4502, 4993.6, 5507, 5924]\n HEAD: [13845, 13182, 12425, 11276, 10054]\n EFFICIENCY: [ 0.72, 0.75, 0.748, 0.73, 0.70]\n\n - NAME: compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n ... \n CURVES:\n - FILE: compressor_chart.csv\n"})})]})}function E(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>i,a:()=>o});var s=n(7294);const t={},c=s.createContext(t);function o(e){const r=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/38d592cf.b53c36f3.js b/assets/js/38d592cf.b53c36f3.js new file mode 100644 index 0000000000..8492a1a2fa --- /dev/null +++ b/assets/js/38d592cf.b53c36f3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1398],{8874:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>t,contentTitle:()=>m,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var n=a(5893),l=a(1151);const i={title:"Compressor modelling",sidebar_position:2,description:"Compressor modelling theory"},m=void 0,r={id:"about/modelling/theory/compressor_modelling",title:"Compressor modelling",description:"Compressor modelling theory",source:"@site/docs/about/modelling/theory/compressor_modelling.md",sourceDirName:"about/modelling/theory",slug:"/about/modelling/theory/compressor_modelling",permalink:"/ecalc/docs/about/modelling/theory/compressor_modelling",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/theory/compressor_modelling.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Compressor modelling",sidebar_position:2,description:"Compressor modelling theory"},sidebar:"about",previous:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/theory/pump_modelling"},next:{title:"Setup an eCalc\u2122 Model",permalink:"/ecalc/docs/about/modelling/setup/"}},t={},c=[];function h(s){const e={a:"a",annotation:"annotation",code:"code",img:"img",math:"math",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",msubsup:"msubsup",msup:"msup",p:"p",semantics:"semantics",span:"span",...(0,l.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:"A compressor model describes what happens to a fluid going through a compressor and calculates how much power is\nrequired in the process."}),"\n",(0,n.jsxs)(e.p,{children:["At the suction side, one need information about the fluid (natural gas) which has a (static) specification of the\ncomposition, a specified rate, a temperature and a pressure. As the fluid is going through the compressor in a fluid\ndynamic process, the enthalpy changes, resulting in a new state and both the pressure and the\ntemperature of the fluid is increased, while the volume is decreased. This change is calculated using an\nequation-of-state (EOS) model. See ",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/modelling/setup/models/fluid_model",children:(0,n.jsx)(e.code,{children:"Fluid model"})})]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{src:a(3026).Z+"",width:"1626",height:"738"})}),"\n",(0,n.jsx)(e.p,{children:"eCalc does not perform fluid dynamic modeling. Instead, the behaviour of the compressor is described by a polytropic\ncompressor chart which specifies both the operational domain of the compressor, but also relates volume rate, head and\nefficiency for the compressor."}),"\n",(0,n.jsxs)(e.p,{children:["An isentropic (adiabatic) compression is the process where no heat is added or removed from a system. In a polytropic\nprocess, changes in the gas characteristics is considered. Dynamic natural gas compressors typically follow a polytropic\nprocess defined by the formula ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mn,{children:"1"}),(0,n.jsx)(e.mi,{children:"n"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"2"})]}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mn,{children:"2"}),(0,n.jsx)(e.mi,{children:"n"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P_\\mathrm{1} V_\\mathrm{1}^n = P_\\mathrm{2} V_\\mathrm{2}^n"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9314em",verticalAlign:"-0.2481em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.6644em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.4519em",marginLeft:"-0.2222em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"1"})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2481em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9314em",verticalAlign:"-0.2481em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"2"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.6644em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.4519em",marginLeft:"-0.2222em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"2"})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2481em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]}),", where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"n"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"n"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"})]})})]})," is the\npolytropic exponent which is experimentally determined for a given compressor."]}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.img,{src:a(8778).Z+"",width:"901",height:"762"}),"\nThe power need for compression is given by"]}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"y"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"e"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"y"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"power = \\frac{polytropic\\_head * mass\\_rate}{efficiency}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"er"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"2.2749em",verticalAlign:"-0.8804em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3944em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"ff"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"cy"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ro"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ma"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ss"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.8804em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})]})]})}),"\n",(0,n.jsx)(e.p,{children:"and the relationship between polytropic head and the pressures are"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"y"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"})]})]}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"Z"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"1"})]})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"M"}),(0,n.jsx)(e.mi,{children:"W"})]})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"("}),(0,n.jsxs)(e.msup,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"("}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"2"})]})]}),(0,n.jsx)(e.mo,{fence:"true",children:")"})]}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsx)(e.mi,{children:"n"})]})]}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"}),(0,n.jsx)(e.mo,{fence:"true",children:")"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"polytropic\\_head = \\frac{n}{n-1} \\frac{Z R T_1}{MW} \\left( \\left(\\frac{P_1}{P_2} \\right)^{\\frac{n-1}{n}} -1 \\right)"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0044em",verticalAlign:"-0.31em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ro"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.044em",verticalAlign:"-1.25em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.1076em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.7693em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3603em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"M"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"W"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"ZR"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.686em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size4",children:"("})}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size3",children:"("})}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3603em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"2"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.836em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size3",children:")"})})]}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsx)(e.span,{className:"vlist-t",children:(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.7939em"},children:(0,n.jsxs)(e.span,{style:{top:"-4.2029em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter sizing reset-size3 size6"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.8443em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.656em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.2255em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line mtight",style:{borderBottomWidth:"0.049em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.384em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mbin mtight",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})]})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.344em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter sizing reset-size3 size6"})]})})})]})})})})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1"}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size4",children:")"})})]})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"n"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"n"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"})]})})]})," is the polytropic exponent, ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"Z"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"Z"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"Z"})]})})]})," the compressibility, ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"R"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"R"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})})]})," is the gas constant, ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"1"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"T_1"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is the inlet temperature and ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"M"}),(0,n.jsx)(e.mi,{children:"W"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"MW"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"M"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"W"})]})})]})," the molecular weight."]}),"\n",(0,n.jsx)(e.p,{children:"Further, the polytropic exponent is approximated as"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"\u03ba"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"y"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"y"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"\u03ba"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\frac{\\kappa * polytropic\\_efficiency}{\\kappa -1}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"2.1638em",verticalAlign:"-0.7693em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3944em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"\u03ba"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"\u03ba"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ro"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"ff"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"cy"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.7693em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"\u03ba"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\kappa"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"\u03ba"})]})})]})," is the heat capacity ratio of the fluid."]}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"\u03ba"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\kappa"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"\u03ba"})]})})]})," and ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"Z"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"Z"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"Z"})]})})]})," are not for inlet conditions, but average values for the fluid throughout the process, and\nthe polytropic process and the calculations are iterated until these converge."]}),"\n",(0,n.jsx)(e.p,{children:"If there is only one compressor, the outlet pressure for each compressor is known, and the polytropic head and\nefficiency may be calculated from directly from the above polytropic head and efficiency formulas."}),"\n",(0,n.jsx)(e.p,{children:"However, for compressor trains, the intermediate pressures are not known ahead, instead one may use the fact that all\ncompressors run with the same speed as they are mounted on the same shaft."}),"\n",(0,n.jsxs)(e.p,{children:["To calculate the energy usage for the compressor train using the common speed, eCalc uses a forward model to\ncalculate the outlet stream given the inlet stream and a given speed. Then, this model is iterated until the discharge pressure is equal to the requested discharge pressure for evaluation. To use this model, see\n",(0,n.jsx)(e.code,{children:"Variable speed compressor train model"})," An alternative is to neglect the common speed property of the train, an instead assume (incorrectly but maybe good\nenough for some purposes) that the pressure fraction is equal for all stages. With this assumption, the intermediate pressures can be calculated and each stage may be calculated independently without the speed iteration. To use this model, see\n",(0,n.jsx)(e.code,{children:"Simplified variable speed compressor train model"}),"."]}),"\n",(0,n.jsxs)(e.p,{children:["In some cases, the shaft of the compressor train can only run on a single fixed speed. In these cases eCalc needs\ninformation about how the pressure should be controlled to meet the required discharge pressure. Available pressure\ncontrol options are choking and recirculating using anti-surge valves. To use this model, see ",(0,n.jsx)(e.code,{children:"Single speed compressor train model"}),"."]}),"\n",(0,n.jsxs)(e.p,{children:["In other cases, the compressor trains have more complex setup and process control which needs a more flexible model. The\nfigure below shows an example where one may have two inlet streams with different pressures and potentially different\ngas compositions and one outlet stream for export gas with a pressure control. To use a model suitable for such cases,\nsee ",(0,n.jsx)(e.code,{children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{src:a(5113).Z+"",width:"1475",height:"659"})})]})}function d(s={}){const{wrapper:e}={...(0,l.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},3026:(s,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/process_compressor-3493b127c832898d93b5231594efa8d3.png"},8778:(s,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png"},5113:(s,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png"},1151:(s,e,a)=>{a.d(e,{Z:()=>r,a:()=>m});var n=a(7294);const l={},i=n.createContext(l);function m(s){const e=n.useContext(i);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function r(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(l):s.components||l:m(s.components),n.createElement(i.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/3aeef25a.c9e431e8.js b/assets/js/3aeef25a.c9e431e8.js new file mode 100644 index 0000000000..4aca1b6ba0 --- /dev/null +++ b/assets/js/3aeef25a.c9e431e8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7396],{1984:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var t=a(5893),r=a(1151);const i={},o="HEAD_MARGIN",s={id:"about/references/keywords/HEAD_MARGIN",title:"HEAD_MARGIN",description:"FACILITYINPUTS /",source:"@site/docs/about/references/keywords/HEAD_MARGIN.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/HEAD_MARGIN",permalink:"/ecalc/docs/about/references/keywords/HEAD_MARGIN",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/HEAD_MARGIN.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"HEAD",permalink:"/ecalc/docs/about/references/keywords/HEAD"},next:{title:"INFLUENCE_TIME_VECTOR",permalink:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR"}},c={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"head_margin",children:"HEAD_MARGIN"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HEAD_MARGIN",children:"HEAD_MARGIN"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.p,{children:"When calibrating pump charts to historical data, the head values at maximum speed\ncould be put in the cloud of data to be unbiased. However, eCalc will treat all\nhead values above the maximum defined area in the chart infeasible (i.e.,\noutside pump capacity). To mitigate this when running through historical data for\npower calibration, one can adjust the head margin with this keyword."}),"\n",(0,t.jsxs)(n.p,{children:["Calculated head values above maximum head values from the chart will be set equal to\nmaximum head values before power calculations ",(0,t.jsx)(n.strong,{children:"if"})," they are within the margin given.\nCalculated head values larger than maximum + margin will still be infeasible."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsxs)(n.p,{children:["The head margin can be specified in ",(0,t.jsx)(n.code,{children:"mlc"})," (meter liquid column):"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"HEAD_MARGIN: <margin>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:" NAME: pump_name\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\n FILE: <path_to_chart_file>.csv\n HEAD_MARGIN: 10.0\n"})})]})}function u(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1151:(e,n,a)=>{a.d(n,{Z:()=>s,a:()=>o});var t=a(7294);const r={},i=t.createContext(r);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3b0e82f8.c1b09a81.js b/assets/js/3b0e82f8.c1b09a81.js new file mode 100644 index 0000000000..a5f512c0fe --- /dev/null +++ b/assets/js/3b0e82f8.c1b09a81.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[925],{1850:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>E,frontMatter:()=>t,metadata:()=>i,toc:()=>a});var s=r(5893),c=r(1151);const t={},o="CURVE",i={id:"about/references/keywords/CURVE",title:"CURVE",description:"Description",source:"@site/docs/about/references/keywords/CURVE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CURVE",permalink:"/ecalc/docs/about/references/keywords/CURVE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CURVE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CROSSOVER",permalink:"/ecalc/docs/about/references/keywords/CROSSOVER"},next:{title:"CURVES",permalink:"/ecalc/docs/about/references/keywords/CURVES"}},d={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"curve",children:"CURVE"}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["When using a detailed single speed compressor model, it is necessary to specify the single speed ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/#user-defined-single-speed-compressor-chart",children:"COMPRESSOR CHART"}),". This can be defined from a .csv file, or it can be defined directly in the YAML file.\nIn either case, the keyword ",(0,s.jsx)(n.code,{children:"CURVE"})," needs to be used. If a .csv file is being used, under the ",(0,s.jsx)(n.code,{children:"CURVE"})," keyword, ",(0,s.jsx)(n.code,{children:"FILE"})," must be used. If specified directly in the YAML file, ",(0,s.jsx)(n.code,{children:"SPEED"}),", ",(0,s.jsx)(n.code,{children:"RATE"}),", ",(0,s.jsx)(n.code,{children:"HEAD"})," and ",(0,s.jsx)(n.code,{children:"EFFICIENCY"})," must be defined."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n ...\n CURVE:\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n ... \n CURVE:\n - FILE: <filepath to compressor curve>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_single_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n ...\n CURVE:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n\n - NAME: compressor_chart\n TYPE: COMPRESSOR_CHART\n ... \n CURVE:\n - FILE: compressor_chart.csv\n"})})]})}function E(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>o});var s=r(7294);const c={},t=s.createContext(c);function o(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3e38e310.366f25a9.js b/assets/js/3e38e310.366f25a9.js new file mode 100644 index 0000000000..fdde177d33 --- /dev/null +++ b/assets/js/3e38e310.366f25a9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8094],{9424:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var s=a(5893),t=a(1151);const i={slug:"v8.3-release",title:"v8.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:13},l="eCalc v8.3",r={id:"changelog/v8-3",title:"v8.3",description:"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See",source:"@site/docs/changelog/v8-3.md",sourceDirName:"changelog",slug:"/changelog/v8.3-release",permalink:"/ecalc/docs/changelog/v8.3-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-3.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:13,frontMatter:{slug:"v8.3-release",title:"v8.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:13},sidebar:"changelog",previous:{title:"v8.2",permalink:"/ecalc/docs/changelog/v8.2-release"},next:{title:"v8.4",permalink:"/ecalc/docs/changelog/v8.4-release"}},o={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Input: YAML / Resource files",id:"input-yaml--resource-files",level:3}];function d(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"ecalc-v83",children:"eCalc v8.3"}),"\n",(0,s.jsx)(n.p,{children:"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See\r\nthe migration guide for details on changes, where relevant."}),"\n",(0,s.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"To save time in calibration and help diagnose pump issues: When calibrating or seeing why a pump is invalid, the most important thing to look at is the head. Now the head is available in the JSON file."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A bug in the mixing of fluid-streams in compressor trains were fixed. This bug caused the density at standard conditions not to be updated, leading to the standard rates being wrong. This is expected to change the results of some eCalc Models"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,s.jsx)(n.p,{children:"Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:"}),"\n",(0,s.jsx)(n.h3,{id:"input-yaml--resource-files",children:"Input: YAML / Resource files"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["It is no longer accepted to change ",(0,s.jsx)(n.code,{children:"ENERGY_USAGE_MODEL TYPE"})," over time, within one consumer. In case ",(0,s.jsx)(n.code,{children:"TYPE"})," evolution is needed, the model can be split in two consumers."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,n,a)=>{a.d(n,{Z:()=>r,a:()=>l});var s=a(7294);const t={},i=s.createContext(t);function l(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3fbb770c.54126050.js b/assets/js/3fbb770c.54126050.js new file mode 100644 index 0000000000..d789ca47f8 --- /dev/null +++ b/assets/js/3fbb770c.54126050.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4838],{5894:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var s=r(5893),t=r(1151);const o={},c="SUCTION_PRESSURE",a={id:"about/references/keywords/SUCTION_PRESSURE",title:"SUCTION_PRESSURE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/SUCTION_PRESSURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/SUCTION_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/SUCTION_PRESSURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"STREAMS",permalink:"/ecalc/docs/about/references/keywords/STREAMS"},next:{title:"TIME_SERIES",permalink:"/ecalc/docs/about/references/keywords/TIME_SERIES"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"suction_pressure",children:"SUCTION_PRESSURE"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",children:"SUCTION_PRESSURE"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["Used to define the suction pressure for some ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\ntypes and in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",children:"OPERATIONAL_SETTINGS"})," using\na fixed value or an expression. If an expression is used, a time series can be used so that the suction pressure of the unit can vary over the lifespan of the model."]}),"\n",(0,s.jsxs)(n.p,{children:["Note that pressure values ",(0,s.jsx)(n.strong,{children:"must"})," be inputted in ",(0,s.jsx)(n.code,{children:"bar"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"SUCTION_PRESSURE: <suction pressure value/expression>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"SUCTION_PRESSURE: 10 \n"})})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var s=r(7294);const t={},o=s.createContext(t);function c(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/40d6382c.0f0252a9.js b/assets/js/40d6382c.0f0252a9.js new file mode 100644 index 0000000000..1226907621 --- /dev/null +++ b/assets/js/40d6382c.0f0252a9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9814],{3334:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>s,toc:()=>u});var n=i(5893),o=i(1151);const r={title:"Migrating eCalc versions",sidebar_position:1e3,description:"Getting started with eCalc"},a=void 0,s={id:"about/migration_guides/index",title:"Migrating eCalc versions",description:"Getting started with eCalc",source:"@site/docs/about/migration_guides/index.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/",permalink:"/ecalc/docs/about/migration_guides/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/index.md",tags:[],version:"current",sidebarPosition:1e3,frontMatter:{title:"Migrating eCalc versions",sidebar_position:1e3,description:"Getting started with eCalc"},sidebar:"about",previous:{title:"CLI",permalink:"/ecalc/docs/about/references/cli_reference"},next:{title:"v7 to v8",permalink:"/ecalc/docs/about/migration_guides/v7_to_v8"}},c={},u=[];function d(t){return(0,n.jsx)(n.Fragment,{})}function l(t={}){const{wrapper:e}={...(0,o.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(d,{...t})}):d()}},1151:(t,e,i)=>{i.d(e,{Z:()=>s,a:()=>a});var n=i(7294);const o={},r=n.createContext(o);function a(t){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:a(t.components),n.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/4147f87e.5e3a7fec.js b/assets/js/4147f87e.5e3a7fec.js new file mode 100644 index 0000000000..0969c0fa3e --- /dev/null +++ b/assets/js/4147f87e.5e3a7fec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9786],{2718:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>E,contentTitle:()=>a,default:()=>l,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var t=r(5893),s=r(1151);const o={},a="STAGES",i={id:"about/references/keywords/STAGES",title:"STAGES",description:"MODELS /",source:"@site/docs/about/references/keywords/STAGES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/STAGES",permalink:"/ecalc/docs/about/references/keywords/STAGES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/STAGES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"REGULARITY",permalink:"/ecalc/docs/about/references/keywords/REGULARITY"},next:{title:"START",permalink:"/ecalc/docs/about/references/keywords/START"}},E={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Use in <code>VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES</code>",id:"use-in-variable_speed_compressor_train_multiple_streams_and_pressures",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"stages",children:"STAGES"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STREAMS",children:"STREAMS"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.p,{children:"This keyword is used to define each stage in a compression train model. This is to be defined for all compressor models types."}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: <compressor type>\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n ....\n"})}),"\n",(0,t.jsxs)(n.h2,{id:"use-in-variable_speed_compressor_train_multiple_streams_and_pressures",children:["Use in ",(0,t.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"STAGES"})," is a list of all the stages in the compressor train."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"For each stage, a temperature in Celsius must be defined. It\nis assumed that the gas is cooled down to this temperature ahead of the compression at this stage."}),"\n",(0,t.jsx)(n.li,{children:"A reference to a\ncompressor chart needs to be specified for each stage."}),"\n",(0,t.jsxs)(n.li,{children:["For the first stage, it is required to have ",(0,t.jsx)(n.strong,{children:"at least"})," one stream of INGOING type. In addition, ",(0,t.jsx)(n.code,{children:"INTERSTAGE_CONTROL_PRESSURE"})," cannot be used on the first stage."]}),"\n",(0,t.jsx)(n.li,{children:"Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream\nwill be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the\nmolar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will\nbe subtracted the rate of the outgoing stream."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>\n CONTROL_MARGIN: <Default value 0.0>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n - ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n CONTROL_MARGIN: <Default value 0.0>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: <pressure control>\n DOWNSTREAM_PRESSURE_CONTROL: <pressure control>\n - ...\n"})}),"\n",(0,t.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STAGES:\n - COMPRESSOR_CHART: 1_stage_chart\n INLET_TEMPERATURE: 20\n STREAM: \n - 1_stage_inlet\n - COMPRESSOR_CHART: 2_stage_chart \n INLET_TEMPERATURE: 30\n - COMPRESSOR_CHART: 3_stage_chart \n INLET_TEMPERATURE: 35\n STREAM: \n - 2_stage_outlet\n - 3_stage_inlet\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage\n - COMPRESSOR_CHART: 4_stage_chart \n INLET_TEMPERATURE: 15\n"})})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>a});var t=r(7294);const s={},o=t.createContext(s);function a(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/41d1792a.f1d4fa7e.js b/assets/js/41d1792a.f1d4fa7e.js new file mode 100644 index 0000000000..b3f94dd570 --- /dev/null +++ b/assets/js/41d1792a.f1d4fa7e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1748],{2977:e=>{e.exports=JSON.parse('{"label":"release","permalink":"/ecalc/docs/tags/release","allTagsPath":"/ecalc/docs/tags","count":18,"items":[{"id":"changelog/separator","title":"---","description":"","permalink":"/ecalc/docs/changelog/separator"},{"id":"changelog/next","title":"Next","description":"New Features","permalink":"/ecalc/docs/changelog/latest"},{"id":"changelog/v7-0","title":"v7.0","description":"Features","permalink":"/ecalc/docs/changelog/v7-0-release"},{"id":"changelog/v7-1","title":"v7.1","description":"Features","permalink":"/ecalc/docs/changelog/v7-1-release"},{"id":"changelog/v7-2","title":"v7.2","description":"Features","permalink":"/ecalc/docs/changelog/v7-2-release"},{"id":"changelog/v7-3","title":"v7.3","description":"Features","permalink":"/ecalc/docs/changelog/v7-3-release"},{"id":"changelog/v7-4","title":"v7.4","description":"Features","permalink":"/ecalc/docs/changelog/v7-4-release"},{"id":"changelog/v7-5","title":"v7.5","description":"Features","permalink":"/ecalc/docs/changelog/v7-5-release"},{"id":"changelog/v7-6","title":"v7.6","description":"Breaking changes","permalink":"/ecalc/docs/changelog/v7-6-release"},{"id":"changelog/v8-0","title":"v8.0","description":"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some","permalink":"/ecalc/docs/changelog/v8.0-release"},{"id":"changelog/v8-1","title":"v8.1","description":"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:","permalink":"/ecalc/docs/changelog/v8.1-release"},{"id":"changelog/v8-2","title":"v8.2","description":"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.2-release"},{"id":"changelog/v8-3","title":"v8.3","description":"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.3-release"},{"id":"changelog/v8-4","title":"v8.4","description":"New Features","permalink":"/ecalc/docs/changelog/v8.4-release"},{"id":"changelog/v8-5","title":"v8.5","description":"New Features","permalink":"/ecalc/docs/changelog/v8.5-release"},{"id":"changelog/v8-6","title":"v8.6","description":"New Features","permalink":"/ecalc/docs/changelog/v8.6-release"},{"id":"changelog/v8-7","title":"v8.7 (Latest)","description":"New Features","permalink":"/ecalc/docs/changelog/v8.7-release"},{"id":"changelog/v8-8","title":"v8.8 (Latest)","description":"New Features","permalink":"/ecalc/docs/changelog/v8.8-release"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/428320b6.0ed894e1.js b/assets/js/428320b6.0ed894e1.js new file mode 100644 index 0000000000..f6e4be670c --- /dev/null +++ b/assets/js/428320b6.0ed894e1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6193],{683:(e,c,i)=>{i.r(c),i.d(c,{assets:()=>h,contentTitle:()=>r,default:()=>d,frontMatter:()=>t,metadata:()=>a,toc:()=>o});var s=i(5893),n=i(1151);const t={},r="Changelog",a={id:"changelog/changelog",title:"Changelog",description:"8.9.0 (2024-01-11)",source:"@site/docs/changelog/changelog.md",sourceDirName:"changelog",slug:"/changelog/",permalink:"/ecalc/docs/changelog/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/changelog.md",tags:[],version:"current",frontMatter:{},sidebar:"changelog",previous:{title:"v8.7 (Latest)",permalink:"/ecalc/docs/changelog/v8.7-release"}},h={},o=[{value:"8.9.0 (2024-01-11)",id:"890-2024-01-11",level:2},{value:"Bug Fixes",id:"bug-fixes",level:3},{value:"Documentation",id:"documentation",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores",level:3},{value:"Code Refactoring",id:"code-refactoring",level:3},{value:"8.8.0 (2023-12-27)",id:"880-2023-12-27",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes",level:3},{value:"Features",id:"features",level:3},{value:"Bug Fixes",id:"bug-fixes-1",level:3},{value:"Documentation",id:"documentation-1",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-1",level:3},{value:"Code Refactoring",id:"code-refactoring-1",level:3},{value:"Tests",id:"tests",level:3},{value:"Continuous Integration",id:"continuous-integration",level:3},{value:"8.7.0 (2023-12-05)",id:"870-2023-12-05",level:2},{value:"Bug Fixes",id:"bug-fixes-2",level:3},{value:"Documentation",id:"documentation-2",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-2",level:3},{value:"Code Refactoring",id:"code-refactoring-2",level:3},{value:"Continuous Integration",id:"continuous-integration-1",level:3},{value:"8.7.0",id:"870",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-1",level:3},{value:"8.6.0 (2023-11-21)",id:"860-2023-11-21",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-2",level:3},{value:"Features",id:"features-1",level:3},{value:"Bug Fixes",id:"bug-fixes-3",level:3},{value:"Documentation",id:"documentation-3",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-3",level:3},{value:"Code Refactoring",id:"code-refactoring-3",level:3},{value:"8.5.0 (2023-10-30)",id:"850-2023-10-30",level:2},{value:"Features",id:"features-2",level:3},{value:"Bug Fixes",id:"bug-fixes-4",level:3},{value:"Documentation",id:"documentation-4",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-4",level:3},{value:"Code Refactoring",id:"code-refactoring-4",level:3},{value:"8.4.0 (2023-09-25)",id:"840-2023-09-25",level:2},{value:"Features",id:"features-3",level:3},{value:"Bug Fixes",id:"bug-fixes-5",level:3},{value:"Documentation",id:"documentation-5",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-5",level:3},{value:"Code Refactoring",id:"code-refactoring-5",level:3},{value:"8.3.0 (2023-08-11)",id:"830-2023-08-11",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-3",level:3},{value:"Features",id:"features-4",level:3},{value:"Bug Fixes",id:"bug-fixes-6",level:3},{value:"Documentation",id:"documentation-6",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-6",level:3},{value:"Code Refactoring",id:"code-refactoring-6",level:3},{value:"Tests",id:"tests-1",level:3},{value:"Continuous Integration",id:"continuous-integration-2",level:3},{value:"8.2.2 (2023-05-28)",id:"822-2023-05-28",level:2},{value:"Bug Fixes",id:"bug-fixes-7",level:3},{value:"Continuous Integration",id:"continuous-integration-3",level:3},{value:"Tests",id:"tests-2",level:3},{value:"Code Refactoring",id:"code-refactoring-7",level:3},{value:"Documentation",id:"documentation-7",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-7",level:3},{value:"8.2.1 (2023-05-09)",id:"821-2023-05-09",level:2},{value:"Miscellaneous Chores",id:"miscellaneous-chores-8",level:3},{value:"Continuous Integration",id:"continuous-integration-4",level:3}];function l(e){const c={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.h1,{id:"changelog",children:"Changelog"}),"\n",(0,s.jsxs)(c.h2,{id:"890-2024-01-11",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.8.0...v8.9.0",children:"8.9.0"})," (2024-01-11)"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["don't run pdoc on application module (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/abbb704d00def3149db3ae9d6e0e8932f655c740",children:"abbb704"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["maximum pressure ratio per stage in docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/338",children:"#338"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/261749f34c3e1955ac9d66d6b33f63bef431f984",children:"261749f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove docstring for number of compressors (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/339",children:"#339"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/be148baea2312778df4d9b5b373cb4044d8b9e1d",children:"be148ba"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update migration guide economics (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/335",children:"#335"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c4b50d6243acd52b5cc9deb80cdc94b061776417",children:"c4b50d6"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["upgrade deps (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/343",children:"#343"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b183db7864e62cd83fa2c3622ee66d60f78cedfd",children:"b183db7"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["move energy calculator to application (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/78b601ffb6f34d577ce214c8e01a0f40a0f627fe",children:"78b601f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move graph results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b44f8c8b28ca15f085c25de4574cad8958e0c813",children:"b44f8c8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/59be31741903845388068cfbadc23b39cb48b35b",children:"59be317"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"880-2023-12-27",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.7.0...v8.8.0",children:"8.8.0"})," (2023-12-27)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["include direct emitter results in ltp export (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/305",children:"#305"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"features",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add emitter rate type to venting emitters (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/312",children:"#312"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d6e16faa341a8517c82f4295c1fc92014b0a9b92",children:"d6e16fa"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-1",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["correct changelog for venting emitters (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/324",children:"#324"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/eff911ea8064fb22d96e31ca3302da792bc5f6b3",children:"eff911e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["correct fallback to pydantic v1 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/332",children:"#332"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4f89e48e60de0f5ecd79244021c31a77285a2fc9",children:"4f89e48"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["include direct emitter results in ltp export (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/305",children:"#305"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f6b63715ddb1d1794274515edf87bb8dbb422203",children:"f6b6371"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove interpolation method (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/321",children:"#321"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d1255527c7b715569fe503db6eae9f008bc0c8f1",children:"d125552"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support mismatching timesteps in ltp delta profile (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/319",children:"#319"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/32f02890f53c0a58aecf988cca41c8ffef25d33f",children:"32f0289"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-1",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["remove costs mentioned in docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/322",children:"#322"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ee0396544ce07410bfbaa89af23fe1a3337d477c",children:"ee03965"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove reference to fuel price- and tax in drogon example (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/323",children:"#323"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/963d9ea858c6b39ca6d478def7a367fad1e3f69a",children:"963d9ea"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update docs for v8.8 release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/334",children:"#334"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/153f7c408d1ffb4adbf39a006faa3ee1417b90b0",children:"153f7c4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update PR template with checkboxes for stuff we forget (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/09f52bd08cae4bd7ccc4d6e173fb23917acf1bb5",children:"09f52bd"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-1",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add maximum_rate to CompressorModelResult (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/285",children:"#285"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2cb09e20bec5c3031dfbff6042c93c749e97be23",children:"2cb09e2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["change ltp-filter for oil loaded/stored (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/331",children:"#331"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3cfe8084979176ebdff8eeace12769fd9bb2b95b",children:"3cfe808"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["define yaml classes for remaining elements in MODELS (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/307",children:"#307"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fedb807c83a33190fe90862948a39fc8e3451ab0",children:"fedb807"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"ecalc-neqsim-wrapper:"})," update to neqsim 2.5.9 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/302",children:"#302"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/28885f292c745d1afaf1afb0014e6ad8244cbfd3",children:"28885f2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support pydantic v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/326",children:"#326"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b1b4acf1fd41b7a2c6c888af5ea46d89ddff9b34",children:"b1b4acf"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/315",children:"#315"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/49a42deac51fe25ca8ed8188ef01285ca4069c67",children:"49a42de"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/333",children:"#333"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0b027ef27e2e0f17f0da970ec3ed2d32ca3cc7b6",children:"0b027ef"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update pydantic (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/327",children:"#327"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4a325192ab3a81d0bfea4bb5d76db2346200b1c4",children:"4a32519"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshot (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2cb09e20bec5c3031dfbff6042c93c749e97be23",children:"2cb09e2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-1",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["move simple result to presentation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/318",children:"#318"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e90a6eb3fd79022bf6e963043d709a8cf61be0f7",children:"e90a6eb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use time series collection yaml classes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/328",children:"#328"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c36f62be4cc788ee832974aa63692e3d7ae2cb8d",children:"c36f62b"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"tests",children:"Tests"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update tests with maximum rate (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2cb09e20bec5c3031dfbff6042c93c749e97be23",children:"2cb09e2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add trufflehog pre-commit (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/320",children:"#320"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8459ca686fe97f0b2225984c703d8b6c778ea1ba",children:"8459ca6"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"870-2023-12-05",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.6.0...v8.7.0",children:"8.7.0"})," (2023-12-05)"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-2",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["bug in compressor with turbine models with multiple streams and only one date (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/296",children:"#296"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8c2c786f93f0cec9cebb92ee02ac94080b7becb5",children:"8c2c786"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["deep copy when aggregating model results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/311",children:"#311"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/53c8df4af5105ad7b91439c76a05b2bb32aee4bb",children:"53c8df4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["do not merge model results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/304",children:"#304"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/34cebc4551ab1aa3d3e1b6bdabf681e7abd4f306",children:"34cebc4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["error message when model/facility input does not exist (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4437032bd59ca1708376303b78e7778143f58e1d",children:"4437032"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-2",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update documentation with info about direct emitters name change (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/310",children:"#310"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/990f3c2c932c0be9189828b3dae6b4034105574e",children:"990f3c2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-2",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["fix typo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/293",children:"#293"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/648997109e48e77727f511567af0bbd3a53d8cca",children:"6489971"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-2",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["change emission rate type to calendar day (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/300",children:"#300"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f8e5052d19088bb709d48d6563962e5f98d358d2",children:"f8e5052"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["change name from direct to venting emitter (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/303",children:"#303"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8d038221c88946730e3badbcc4a4c9ab4d082c16",children:"8d03822"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove duplicated function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba48dcd4d858bcaacdd183636157fe9c0eeaef61",children:"ba48dcd"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-1",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["skip spellchecking changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/294",children:"#294"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9329ae28acbc4673260e8f80f45037ab7949598d",children:"9329ae2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h2,{id:"870",children:(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.6.0...v8.7.0",children:"8.7.0"})}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-1",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["Change name from ",(0,s.jsx)(c.code,{children:"DIRECT_EMITTERS"})," to ",(0,s.jsx)(c.code,{children:"VENTING_EMITTERS"})," in input Yaml-file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/pull/303",children:"#303"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"860-2023-11-21",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.5.0...v8.6.0",children:"8.6.0"})," (2023-11-21)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-2",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["remove economy from ecalc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/282",children:"#282"}),")"]}),"\n",(0,s.jsx)(c.li,{children:"graph.components and graph.get_component renamed to nodes and get_node"}),"\n",(0,s.jsx)(c.li,{children:"add type to consumers in system"}),"\n",(0,s.jsxs)(c.li,{children:["change name from DIRECT_EMITTERS to VENTING_EMITTERS in input Yaml-file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/pull/303",children:"#303"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"features-1",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["expose yaml variables (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1fe9dd0e3ceae658afaba24a2b18b91b3a11da43",children:"1fe9dd0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["include rate type in header for csv export (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/279",children:"#279"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5edd0ccff2b2f1dbfe746a666266b59c714a5eef",children:"5edd0cc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support bfs_tree in graph (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a4fff168dfa32d04588bb7e3b71de8c12e9dd6d0",children:"a4fff16"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["train v2 yaml and dto (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/272",children:"#272"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b0e346618bb3b39a186eb814dd40be2f7d905122",children:"b0e3466"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-3",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["ensure that start date in global time vector is consistent with the requested output frequency (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/269",children:"#269"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e8ef9b98901603c0a9e328c2c8923c5facca962c",children:"e8ef9b9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make iteration loops for simplified train consistent (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/263",children:"#263"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b066c74e41fcbb6c32e51781c0225490f61e9690",children:"b066c74"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["wrong handling of values and timesteps in temporal models (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/261",children:"#261"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4e202648e6288508d67fee52c651d125166e68e7",children:"4e20264"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-3",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/264",children:"#264"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/22ef8f7ca2a1e1800050c8f55624677a2f282e43",children:"22ef8f7"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-3",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add INVALID_INPUT and INVALID_MAX_RATE (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d651ed6822ba180ba4a490e1245a0f406cc64e43",children:"d651ed6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add test of get_max_standard_rate for single speed compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d651ed6822ba180ba4a490e1245a0f406cc64e43",children:"d651ed6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["clean up common module (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/277",children:"#277"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e1959aba2a91c4abec2d820b6cb9378ac1dea281",children:"e1959ab"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["extend tests of time series resampling (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e8ef9b98901603c0a9e328c2c8923c5facca962c",children:"e8ef9b9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve algorithm to generate generic variable speed compressor charts from input points (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/276",children:"#276"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b257567230000a92b5fcca8f8becdbcc4c880092",children:"b257567"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make sure no mismatch between timestamps and time series values (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/251",children:"#251"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ae6ade9fafb9b0ccf2afec5e633c2190a2f1009b",children:"ae6ade9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["only calculate max standard rate for time steps with valid model input (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/252",children:"#252"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d651ed6822ba180ba4a490e1245a0f406cc64e43",children:"d651ed6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["possibility to include start and end date in resampling (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e8ef9b98901603c0a9e328c2c8923c5facca962c",children:"e8ef9b9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog for v8.6 release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/288",children:"#288"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/af32274c17cb8a84895bf85c7b83360cd76bc533",children:"af32274"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies for new v8.6 release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/289",children:"#289"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5a245a397761ed69c2ffab151a7a33567f3c7282",children:"5a245a3"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-3",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add option to skip header validation on resource files (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/260",children:"#260"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/883b7e6888d5ff4ddca41cbeac0f7c7dd96e60a6",children:"883b7e6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["calculate timesteps separately (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/284",children:"#284"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/bd9d684467698edbd88d7a089846310b3cea5ea4",children:"bd9d684"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["collect results in priority optimizer (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/16b9ccc3687a6f2910c1df5602c82dd75706089b",children:"16b9ccc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["common consumer system type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fe09263acaf8d3ea8518759e695d6f368dfb214a",children:"fe09263"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["common yaml system v2 class (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/98198fc7a19575f6b949527993999ae929a7590c",children:"98198fc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["consistent naming of nodes in graph (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/676c7b84f99e1ca79446321ab06eba43df36abef",children:"676c7b8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generic graph class (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6f63e40af1b2f57380852ef6403b6f4ac2474d50",children:"6f63e40"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move into presentation layer (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/271",children:"#271"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/52530e0b72aa0f07de93b6c231798dd5c9a20eb4",children:"52530e0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove economy from ecalc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/282",children:"#282"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a50148c8bce3bfdb491dbab65620ac964a80e65c",children:"a50148c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename Stream to StreamConditions (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cf908ece731c6dcd2755ed6b08b8748cff5ac508",children:"cf908ec"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename to component graph (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9629f221a0370559a7b89bbede0b5576eb916c20",children:"9629f22"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["system v2 stream conditions format (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/257",children:"#257"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e228e8b1180a3dd22a408fa199e52797aef43fc6",children:"e228e8b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use common consumer system dto class (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/267",children:"#267"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3c58b53e0731cbae9219bfb6eef96e5e5d4ea144",children:"3c58b53"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use PriorityOptimizer outside ConsumerSystem (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f1af9e6c701d8899450aacaa94ba02071b032dc6",children:"f1af9e6"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"850-2023-10-30",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.4.0...v8.5.0",children:"8.5.0"})," (2023-10-30)"]}),"\n",(0,s.jsx)(c.h3,{id:"features-2",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add pump results to system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8cf9e1b0d3ab8438291303663fc83092de1c808a",children:"8cf9e1b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add stream conditions to compressor v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/194",children:"#194"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/232f83bf91044b706ba4c7715ceddf71f9456644",children:"232f83b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["multiple streams in system (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/242",children:"#242"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/419c2e9cef6f6bb768b5e140a5092650cacd245b",children:"419c2e9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support name for crossover streams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/236",children:"#236"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c801f3f0fa4b967c15c5122ac8997695f38bae12",children:"c801f3f"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-4",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["don't require HCEXPORT in editor (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/254",children:"#254"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e497245c9ec4e6d10e9def5999d24c5e0ba58134",children:"e497245"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["ensure unique names in system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/238",children:"#238"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3634a9e1a4f2a4181ea1679fa1edcce0bb57a06e",children:"3634a9e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rate when multiple streams model (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/214",children:"#214"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/892720e781978be0210b7488ad6c68466db51700",children:"892720e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["set_regularity fixture (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/213",children:"#213"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e9ea04f74c2262343fbde5d5aed46ffc15404e29",children:"e9ea04f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update ecalc validation for yaml file in web (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/243",children:"#243"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2981f2c71b7aba0271f72c8ec5f1d764a0d36387",children:"2981f2c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use file reference instead of urls in docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/216",children:"#216"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/35c4f6853c9452d1963daf321cce3e2ebe087f9e",children:"35c4f68"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["wrong data for boilers and heaters in ltp-results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/237",children:"#237"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/851e83141c1971a8fc1fdec47e05b4e5a26d0861",children:"851e831"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-4",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add missing keywords surge control margin (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/239",children:"#239"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8b97673b001231b6960bda817d50241135df65df",children:"8b97673"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog for upcoming release v8.4 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/203",children:"#203"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/66671e07ce678f4444f6428b776b60c607d35957",children:"66671e0"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-4",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add ",(0,s.jsx)(c.strong,{children:"init"})," file to ecalc_cli (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/af6bee96ae3ac69137f38117013a305f474acd87",children:"af6bee9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add chart area flag to test of full recirculation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0c452515226beec76a4db3c674d4fa102771dbe7",children:"0c45251"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add check for zero efficiency in stage (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3ea3035c659ee922a41c70b157f9d6a1a1f8214d",children:"3ea3035"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add dependabot actions monitoring (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/219",children:"#219"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d5f5dfd12103fb60104057fd2f3b5ce4484e3494",children:"d5f5dfd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add ModelInputFailureStatus (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6b0c72875e667ca1abce5b9b1f2ef4a9548d0d1e",children:"6b0c728"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add NO_FLOW ChartAreaFlag (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0c452515226beec76a4db3c674d4fa102771dbe7",children:"0c45251"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add rate type to pump model result (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/209",children:"#209"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/21deeb7a70cd64f47db87494314a0119ee4598d5",children:"21deeb7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"cli:"})," add all energy usage models load_results test (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/220",children:"#220"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e09febb517a62d27e2d794946d016f1ba0af8fd1",children:"e09febb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/cache from 3.0.11 to 3.3.2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/223",children:"#223"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/087867c19fc087702ae7829b3d6cddfc1ac62f9d",children:"087867c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/checkout from 2 to 4 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/221",children:"#221"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/bcc2f81d9eed20f3021c1e13fead3f8c8d009267",children:"bcc2f81"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/setup-node from 3 to 4 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cb7e816932e73d091cfa4211abe086620ab320fd",children:"cb7e816"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump snok/install-poetry from 1.3.3 to 1.3.4 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/222",children:"#222"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/80dab720f352995121a1cd470e14eef9779a45fb",children:"80dab72"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6b0c72875e667ca1abce5b9b1f2ef4a9548d0d1e",children:"6b0c728"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["handle requested pressures correct for compressors without system (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/233",children:"#233"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/445fc9d856db729181e48f04d58cf05d324a8c50",children:"445fc9d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["handle requested pressures for compressor systems (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/215",children:"#215"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6b054390fe86fe5067a908854f0dd6d48ba114ff",children:"6b05439"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["more robust surge control margin calculation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/229",children:"#229"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/74b4e599ff2336567e7a86e57bb4287030ccea08",children:"74b4e59"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move feature experimental to main method for requested pressures (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/230",children:"#230"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/00ad854cc23822690e662338f6592142344a59f3",children:"00ad854"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["pre-commit (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a310df21ebb9dc27e9999b577cc7ae7a106aa68c",children:"a310df2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["show correct version (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/211",children:"#211"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f8de992b6d2621a604f9b31b6eea0ff644df30dd",children:"f8de992"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/212",children:"#212"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c9b850672357fd48a0b1f40f5b429ae615fbd914",children:"c9b8506"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/259",children:"#259"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e7f031f73dc3320352cd6087e32b281dbf01e6bc",children:"e7f031f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update python deps (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/247",children:"#247"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/514da161158200bc18a8963cb10be141c9847fb8",children:"514da16"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update system v2 tests to only use one crossover (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/205",children:"#205"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/aa6516367fd217b3868af2c1b56119ec548c77ad",children:"aa65163"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update zero efficiency error message (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/258",children:"#258"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5be6fe433791bee1f25dfcc265ffb94c87633836",children:"5be6fe4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["upgrade packages (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/255",children:"#255"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/035aad15b41bb16676ec33d33dcb78d139e2bc6c",children:"035aad1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["version must be updated in version.py (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/63eb672ff5a28c5c4b14294c8d9dcc38a3481089",children:"63eb672"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["warn user about full recirculation of fluids in a compressor stage in a multiple streams and pressures compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/196",children:"#196"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0c452515226beec76a4db3c674d4fa102771dbe7",children:"0c45251"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-4",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["implement evaluate streams in models (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/232",children:"#232"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/df6b6b01099fe87738594544512c28d0bceb0d07",children:"df6b6b0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc.core:"})," stream as input (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/224",children:"#224"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e06f970147e5539fa2c8db0ca53675d24c56ae33",children:"e06f970"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move crossover to component_conditions for system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/204",children:"#204"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/018b47291cbfd5b8b92bbff9c79846b32696d316",children:"018b472"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move RateType into common module (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/253",children:"#253"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c7f5a9955c55fdc970f60b6aade8a0793acab27a",children:"c7f5a99"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move validate operational conditions from compressor train, rename to validate model input (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/256",children:"#256"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6b0c72875e667ca1abce5b9b1f2ef4a9548d0d1e",children:"6b0c728"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove regularity our of core/domain (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/246",children:"#246"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/714888bfa69460174c1b3917470018e8e688b3e1",children:"714888b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove temporal operational settings system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/244",children:"#244"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a1d2ce62c4cfde50665bd1fdfa41402a64548672",children:"a1d2ce6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename streamCondition to stream (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/32885b5b054008cbfb682454daaa29d443fd561f",children:"32885b5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["separate optimization from system (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/245",children:"#245"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b580e3d80ab5392410c438f6ff355fdf1326f121",children:"b580e3d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use Graph object to build graph (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/250",children:"#250"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ce65dbad024fc9afae74a2c533767152ce2efa20",children:"ce65dba"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"840-2023-09-25",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.3.0...v8.4.0",children:"8.4.0"})," (2023-09-25)"]}),"\n",(0,s.jsx)(c.h3,{id:"features-3",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add compressor inlet- and outlet pressures to models/train level (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/152",children:"#152"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9b95ee50fd78d77c59dfe2533c10dbcdc41461a7",children:"9b95ee5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add input compressor pressures to output (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/140",children:"#140"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/74e3e5673bad36bf30d8b217609819a79d7e76bb",children:"74e3e56"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add support for system v2 in FDE (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e6d1f938d62d68479835f90932bc09b49203a6c9",children:"e6d1f93"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add support for temporal operational settings in v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f2b217acaaf445df03fba077cd7407a4c37375d2",children:"f2b217a"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-5",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add system v2 subcomponents to components list (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b61a0feba9d28c27992128a2e02262c58dedcbdb",children:"b61a0fe"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add system v2 to generator set consumers (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/166",children:"#166"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d40558eb0c727723ba1cf952dfbd58b73dca0cd0",children:"d40558e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["avoid name conflicts with ecalc cli package (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/197",children:"#197"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/140c4481b8a860b203b338b51a883c41bd6b4dc6",children:"140c448"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["bug in asset_result_dto (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/170",children:"#170"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c45a7acfb4bf3c89f8c89e71561a90e2831ccb17",children:"c45a7ac"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["correct type for total system rate in pump system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/167",children:"#167"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5559cdd478511b050a3f344da33110621f221b76",children:"5559cdd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["do not return actual rate in results for compressor sampled since it can not be calculated (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/190",children:"#190"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/74fcfd8ffc4835d6ddec442374f1389f24df66d7",children:"74fcfd8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["expression type in system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5318fb536945cd2aeb82f03cb922fa1a4ed950e1",children:"5318fb5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["forbid extra attributes in TimeSeries (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/195",children:"#195"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/24c27bb0d3f9ee5570dc76e6d6cf3a45bc006e27",children:"24c27bb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["full run with system v2 components (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/147",children:"#147"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2279ef430f04673bc91926316663cdbd97cfc61d",children:"2279ef4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate system v2 schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/161",children:"#161"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a27c39253d91a3f1c7cc559164874c2d5f9443d3",children:"a27c392"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["handle all situations where zero mass rate is entering a compressor stage in a multiple streams compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/164",children:"#164"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba9235efd01f8b6cfc1dd776f6355d076c3fb93b",children:"ba9235e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["handle dates in yaml correctly (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e9c28d057413aa801ec9af86b89f3c4d5b3de8e5",children:"e9c28d0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["issue with crossover rate calculation in system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/188",children:"#188"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/623a1cfa1e9ee888d69543dc2050cf4c25945baf",children:"623a1cf"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make ecalc installable again (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/58693debf2cdb774a7b9659214ba9aa9453af8d0",children:"58693de"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rate_type was snake_case in json output (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/172",children:"#172"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/dc82a88930e158fc5b6a762cd1fe7d75534d86d7",children:"dc82a88"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["requested pressures not always an attribute (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/155",children:"#155"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0078405e3ad2d254b320239fc8636c3c2bdfbebf",children:"0078405"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["system v2 evaluation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6494257c5d67f8a19582b2c152d73ec550289196",children:"6494257"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use results base (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/199",children:"#199"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cebde330135210bcc25a5950a2416a8fcf747b09",children:"cebde33"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["wrongly accessed rate in pump system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/56da4b2a07188200589795ab8a2e7f1ebfe3fe95",children:"56da4b2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-5",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add further explanation to generic workflow (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ddcb462ba1eda072df2abfd40e95fa677832ef91",children:"ddcb462"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add generic workflow (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/30553e0e7282ef35e616d2f3629de57e104d7e42",children:"30553e0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add powerlossfactor in generic workflow (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3d152c880b9d8b33e3ac496ddc96eb2b2f588fb1",children:"3d152c8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["changelog v8.4 add input compressor pressures to output (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/150",children:"#150"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/46e308fba1c1f4001bd1eaa340880c8409c8841b",children:"46e308f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["correct order of diagrams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/71a07f5315a28d053557db25209d543d4a570307",children:"71a07f5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make mermaid diagram of workflow render correctly (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b1c5b233907fa705832e55621e6917efb8620df7",children:"b1c5b23"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make mermaid workflow diagram render correctly (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/7a99b5b062804b0f0661ac4d6a62f8d6f32a2fdb",children:"7a99b5b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog for v8.3 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b424176c1dad13f4a29ba7c84cc2354e37b75c2a",children:"b424176"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update workflow with comments (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a71abfe32f02a056a0253ec7e4596b0b10fb94b2",children:"a71abfe"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-5",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add pressure drop ahead of stage to inlet pressure before choking (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/146",children:"#146"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e5368de941febf44f7e5e13c11b1fc3509c2e95d",children:"e5368de"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add rate type to compressor model results and convert to time series (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/187",children:"#187"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c86bf3f940224ca765f5705f10df676eb6e5d557",children:"c86bf3f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add validation for missing headers in csv resource file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/191",children:"#191"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/60e84032d932deaf0591c6f5d5d68d70d23dc753",children:"60e8403"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["adding test of full recirculation in multiple streams compressor trains (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba9235efd01f8b6cfc1dd776f6355d076c3fb93b",children:"ba9235e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["calculate correct standard condition density when mixing two streams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba9235efd01f8b6cfc1dd776f6355d076c3fb93b",children:"ba9235e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["clarify neqsim depenedency in ecalc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/198",children:"#198"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d6635a988de18799563c09c51ae7f3f7944c8915",children:"d6635a9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," fix equations showing twice (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/141",children:"#141"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2455e34cbaf047bc416a287052c12d9fbbdc963e",children:"2455e34"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enable mypy for cli (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/189",children:"#189"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/da713fcdac9d2c32ed6b60b788de31a765c1644a",children:"da713fc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix spelling errors in changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/de3c2eb0cf74068dd6c04e7710eaeb1d2dd27a77",children:"de3c2eb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unnecessary folders (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/186",children:"#186"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e861d8782aa2d3280a7e3e5c24f757558e5656f5",children:"e861d87"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename conflicting file names (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/153",children:"#153"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/654175e9be0e40b521c6c68871b8a0b85906605c",children:"654175e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["revert nan to num in expressions (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/202",children:"#202"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2f95c2966ebfc906ebeda2f12ad1fe72ec0a59b4",children:"2f95c29"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update archive (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/181",children:"#181"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/03abf64e9267374b8cd641c09d870631200a2ec5",children:"03abf64"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update deps to latest (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0f30f49db6febd033cfd139727c85c31c4676fd2",children:"0f30f49"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-5",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["change typ to rate_type for TimeSeriesRate (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/89",children:"#89"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8be87ddff732592e16ff337fe9927ead438d5928",children:"8be87dd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate asset/ecalc model schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/157",children:"#157"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6818848afa5f9c390d9214597b8ea938eeb43037",children:"6818848"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate direct emitter schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/180",children:"#180"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/924526ad7958cfce6e75aa43791224edbcf6db70",children:"924526a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate facility type schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/182",children:"#182"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/942897921d8f38115878bdd95349c43c449240b7",children:"9428979"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate fuel consumer schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/160",children:"#160"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9f580c16f6f25e22d30e8d36dd05536303ec6929",children:"9f580c1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate fuel types schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/179",children:"#179"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e17ef3be779921e029db5c7ca10ed86a2e71f797",children:"e17ef3b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate generator set schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/165",children:"#165"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ab25e055de634a4ecc59ae580834ee2e537fd991",children:"ab25e05"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate installation schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/159",children:"#159"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/030a44baf61719a8de6ed48b772a47eccd7d923c",children:"030a44b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate time series schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/176",children:"#176"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b02d68dbc615b9802c54d6e9806430aceee1b354",children:"b02d68d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error message when wrong CURVE-keyword input to single speed compressor (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/173",children:"#173"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9502bcc8ee504d490e293f4bada839e96e011092",children:"9502bcc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error message when wrong CURVES-keyword input to variable speed compressor (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/175",children:"#175"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/714e867f7593527078480e4d9c7bca62da163d7a",children:"714e867"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["merge functionality for results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/193",children:"#193"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/db1e9b1d52d9dfce48d54dfa6cd77ac4a1bbf92f",children:"db1e9b1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move common properties for system v2 operational settings (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/10b5e07915d52ce6b08f508dd87d31c4d8dc8778",children:"10b5e07"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move yaml system into package (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b477b159cc60df96c5ec230cd8d8db519f721f85",children:"b477b15"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove condition and power_loss_factor from system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2507bb92730cd4e9b5bd35d2f7e429d493fb5478",children:"2507bb9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove rate_fractions from system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba788fdd8dff754c3ca16315d098e00911d91fa0",children:"ba788fd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use common Period,Periods classes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/76366cec64da5c7585635db69adf457fbb36775e",children:"76366ce"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use common to_camel_case function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/171",children:"#171"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f5f0c2f8da6e07ad666f8fc203876eece646e6e8",children:"f5f0c2f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use yaml prefix for yaml klasses/modules (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/174",children:"#174"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e91ac2a77345556d8a53c10a4be049eb8ec2c7ce",children:"e91ac2a"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"830-2023-08-11",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.2.2...v8.3.0",children:"8.3.0"})," (2023-08-11)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-3",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["energy model type not allowed to change over time (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/131",children:"#131"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"features-4",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["output pump head to json-file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/49",children:"#49"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/60720f429cb5da82cd839740eca8d3039c9d5969",children:"60720f4"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-6",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["avoid zero discharge pressure after validation of operational conditions (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/830c75e27a29549157658c606e618da381c24e81",children:"830c75e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["bug fix to joining results from different temporal models with compressor train models having multiple inlet or outlet streams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/63",children:"#63"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/da3144a0cbb3e6121809c8eeee86e62a2a3ed5e1",children:"da3144a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["json schema accepts MAXIMUM_DISCHARGE_PRESSURE for single speed train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/86",children:"#86"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a18de1eae60085211b640b67a4f372346382fdc8",children:"a18de1e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["json schema allow stages to have control_margin and control_margin_unit (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/90",children:"#90"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2415534053df4e50496fd2ae4504cff76ab14346",children:"2415534"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make apply_condition work for 2D numpy arrays also (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/78",children:"#78"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/bce91cb0b6b821e1b1a579c40f19311e847577b3",children:"bce91cb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make sure that suction pressure is less than or equal to discharge pressure for compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/104",children:"#104"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d2182730c2fdcd98e54fef8625cd289dc206b2bf",children:"d218273"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["parse scientific notation numbers in expression (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/85",children:"#85"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fdf322bafa9a3379b6481e57ca1e761475f42b25",children:"fdf322b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["parse spaces as thousand separators from excel (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/107",children:"#107"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5a3bd6a2b8e85dcc248435b30677e278d64c7f93",children:"5a3bd6a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["pump results wrong when resampled (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/71",children:"#71"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/daffdb3d969add106bbbfd782cfae418cfd8650d",children:"daffdb3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["resample emissions correctly to create valid json (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3c9b52e40c1c88a11db3d088c0fbb320a4920daa",children:"3c9b52e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["result of validation of operational conditions when rate is zero should always be valid (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9de403c8b92895fafabea875d970fc1901a4ba89",children:"9de403c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["validate time steps where rate is different from zero, not only when larger than zero (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6ce07c41e82b397d9512566a42fd8fd2017c14d1",children:"6ce07c4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["wrong standard_conditions_density when mixing two fluids (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a16a695736125dc4b662ab31ab9a83186b14f369",children:"a16a695"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-6",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["fix generic compressor example (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/38870a3f735e7397502345dda69f646240328490",children:"38870a3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix links (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/116",children:"#116"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/62cadfcf581b101d7bb33b3772ffb65eefbf670b",children:"62cadfc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["how to migrate from 8.1 to 8.2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4d3be58f5af44cbdee4158017b163361371dc23c",children:"4d3be58"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unnecessary information from migration guide (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/47305386db82d826245c67e6c10a8597a36bfc09",children:"4730538"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["specify only gensets for boiler/heater (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/53",children:"#53"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2df3bdf299bcb6cf47289259e4fedd21c2de141c",children:"2df3bdf"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog 8.2 with changes for ltp- and stp (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/43",children:"#43"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6fe4b773a156d01eec67e8e70b764d4e18d374ce",children:"6fe4b77"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog for 8.2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3ccea743332f0d1950ff61ca6747bb507ea37bd4",children:"3ccea74"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update docs and changelog for energy models (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/133",children:"#133"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8f0d71633d80a99da369dffa05f386e554f3c0bb",children:"8f0d716"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update documentation for heaters and boilers (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/52",children:"#52"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2bef70731be94ace7d0a2269f2ebf07bd01e82b2",children:"2bef707"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update migration guide with ltp- and stp changes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/42",children:"#42"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4b0b23011a9d2161741dd52031070307fc6c1b68",children:"4b0b230"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-6",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add 8.3 changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9f4a4af545126922a38807c51268bd84dfb868db",children:"9f4a4af"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add fluid mixing checks (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/53c1626ebf10edc71c0ba4ef5fcdbe1cd6a32ac0",children:"53c1626"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add fluid mixing checks (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0f3ddcaca1164acad3f5d213b2e8daac05333042",children:"0f3ddca"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add installation filter to flare nmvoc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/87",children:"#87"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f37b76d0b3c2f6941585299998205c3a907b41a8",children:"f37b76d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add installation filter to remaining ltp-columns (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/91",children:"#91"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/39df7923d79a393981285986016311e9f1b0848f",children:"39df792"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add power adjustment constant also for compressor trains with interstage pressure (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/136",children:"#136"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c8a486114ec713358798a5dba2a5500dfbbef21d",children:"c8a4861"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add test for adjust energy usage on multiple streams and pressures compressor trains (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c8a486114ec713358798a5dba2a5500dfbbef21d",children:"c8a4861"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add test of count_parentheses (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0d1ce6feff7a6aaeecab57fd9a661122b691d3b5",children:"0d1ce6f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add test of validation of operational conditions when suction pressure exceeds discharge pressure (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d2182730c2fdcd98e54fef8625cd289dc206b2bf",children:"d218273"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["added changelog entry about interstage pressure fix (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/95",children:"#95"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2a1e8b085ed87dcbb8da874b64f737721f0ceaae",children:"2a1e8b0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["count parentheses in list of tokens only among the elements that are strings (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/94",children:"#94"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0d1ce6feff7a6aaeecab57fd9a661122b691d3b5",children:"0d1ce6f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["energy model type not allowed to change over time (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/131",children:"#131"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/670cff2154e2881aea25903557a7f187bdab05ee",children:"670cff2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enforce unique fuel type names, and unique emission names within one fuel type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/84",children:"#84"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4ea9c630510015e2030f0840b933ea399cc0734b",children:"4ea9c63"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix broken link in documentation of GENERATORSETS keyword (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/103",children:"#103"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/329c8e993c217e7685c082b7671a12c4115bba87",children:"329c8e9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix typing of fluid composition (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c0d98b3a6f4dfb411edfa9bdd8be3c887b28f6da",children:"c0d98b3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve documentation on defining compressor charts using CURVE and CURVES (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/97",children:"#97"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1bde68a38e75255c8f2d6cd88fb5b6ba1ddb97c9",children:"1bde68a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error message when bad yaml file name (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/77",children:"#77"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d2eb733264b2d5b2114a785096c9d6abbffea21b",children:"d2eb733"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["merge queue (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d4489c604b807c07a7e41a038cbdfeca9720ade1",children:"d4489c6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["numpy ndarray typing (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/46",children:"#46"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9b7b308ea6ce5c0aee5acdf8226cd94b90b448aa",children:"9b7b308"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["pin numpy to compatible numpy version (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/35a3640a96c376f4d37e74fd62aec0f0a0bf458b",children:"35a3640"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove limiting dependency typer-cli (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/820844475c29460f29a44bb7917ed5bd37d4ad45",children:"8208444"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["simplify dependencies for use with komodo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/39c5c365aea85ba333a5a509fe5cfbee1be5d9d0",children:"39c5c36"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies to be aligned with external requirements (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fbfbfeb4292011c04d9107218a5b4188e052f7ff",children:"fbfbfeb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshots after power adjustment constant fix for compressor trains with interstage pressure (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c8a486114ec713358798a5dba2a5500dfbbef21d",children:"c8a4861"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-6",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["consumer system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/248dabb595a12ed6ca9a0f8ef519f5439a3b0964",children:"248dabb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["ensure neqsim fluid is contained to FluidStream object (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/118",children:"#118"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d1d6ad6fa1c6cfdf4eee428477995c6f163fa11a",children:"d1d6ad6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enthalpy calculations (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/109",children:"#109"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a01a2153fe904d191150c4ced09257dc45484194",children:"a01a215"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enthalpy calculations (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/110",children:"#110"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cf7d1a9e975fece41b98f4ab6c7bbb3edb562735",children:"cf7d1a9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve naming and documentation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/94be7fa714a0db20944e9b35d1867d11a0748e7f",children:"94be7fa"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["molar_mass_kg_per_mol is not used in the code (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3ea535ef68ead2b600b33319c1ed70907e7ba681",children:"3ea535e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move NeqSimfluid creation into NeqSim wrapper (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/57c4b244d6449c6b43bcea75a1f7ed1f82ccfc8c",children:"57c4b24"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["NeqSim mapping (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/120",children:"#120"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0a0b2fea564c1695bb920145086f23bccac91528",children:"0a0b2fe"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove FluidStream copy (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/119",children:"#119"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0e30ab288b18fecbde62067564ac235d6c58dae1",children:"0e30ab2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["Use a list comprehension to create a transformed list (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/112",children:"#112"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5d7292bdafd16bc74b2e9b8bc13e97cf279fd9f7",children:"5d7292b"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"tests-1",children:"Tests"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add test for fluid stream mixing (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0ba8f8fff9503b791b6edaf16c45cb3d922d6c2b",children:"0ba8f8f"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-2",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["create release-please pr against correct branch (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/be9426a774b8704b2f22e9a83544e07bd92a8808",children:"be9426a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix issue with api reference docs generation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/44",children:"#44"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/42c140269a9e8a6d5f09e9354d14ae51d02f3e81",children:"42c1402"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix syntax for gh action workflow (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d8700dd9bccd40cb4b3bdb75119e0bd47baf3985",children:"d8700dd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["Lock pydantic version in CI and update hooks (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/106",children:"#106"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2ea517e79a34195e561a4897798bd24ef9cae6ae",children:"2ea517e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove duplicate build of docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/62",children:"#62"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e5b896b9f46a7e13c6d806237c4d4bef44833b77",children:"e5b896b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["set default ownership for source (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/16d54f1a30368d92ead377baceef98820754c25f",children:"16d54f1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support hotfix releases (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/03469295d20526e391938a5830d1513088a8803f",children:"0346929"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update pre-commit settings (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6092255da9ca373537b162b21190bfe9f138a027",children:"6092255"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"822-2023-05-28",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.2.1...v8.2.2",children:"8.2.2"})," (2023-05-28)"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-7",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["allow electrical driven consumers in consumer system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/92cb4faa7bfa525af6527892eab2dd38606b2033",children:"92cb4fa"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["cast float to numpy array in function call (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/39",children:"#39"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/250928c2b573f6148129ec32bc54932cbb2cb4a0",children:"250928c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"NeqSim Wrapper:"})," inconsistent return type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/94824210b4c2da666d9280ee581e3a98463e4742",children:"9482421"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["output emissions in fixed and predicted order (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/059dab592bf396eb20d4b825b8358fc10793ca5d",children:"059dab5"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-3",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["enable mypy for neqsim wrapper (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/871c038c756ba40fc1c43bfbee7f83b0f4fd5390",children:"871c038"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["parallelize tests in docker (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4e73b680147c558e4e7cb0d44a78cfaa0e1a357f",children:"4e73b68"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove docker tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a2b5c1a7158d81094982724a63748ca4798f14ca",children:"a2b5c1a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use xdist to parallelize test suite (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2895ae7361878ea94d0d5be4a04a6ffbe0067b3d",children:"2895ae7"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"tests-2",children:"Tests"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["compare consumer system v1 vs v2 both fuel and power consumers (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/74fafce276b93c9495bcfa1c2800c2a866bfa388",children:"74fafce"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-7",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["even more typing! (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a7b22e23fa73d4e0cd35750f7ea6cea5e52f8abd",children:"a7b22e2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix more typing (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/08394a3ce3969976674532ccf8c3876265315035",children:"08394a3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make units lowercase in function names (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/272f0d7274986bc54c0717e7964d5a48c9a06723",children:"272f0d7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["raise exceptions from error (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ee6e4742da1c3201abe8969d2dfedb1c2d4b369b",children:"ee6e474"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove duplicate function for converting to standard rate (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/93de4f4d10b10763428d933e7afc3dea277a31ac",children:"93de4f4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unused code (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/7ccf2c1dfd6d51242032d1b7bf45c52f6b7e90f5",children:"7ccf2c1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename function variables (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c56693a9e982c7e2275cc277939624c7812e9b65",children:"c56693a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["typing and typos (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/936b9417da0723871d6c46f258d256a8967f934c",children:"936b941"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-7",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add docstrings to undocumented functions (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/064adfa204c2c9f21588c30dc2c2cf3d2375c8a7",children:"064adfa"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update compressor pressure control (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/14",children:"#14"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1da1999ac4dfaf21abd50e9d9ecc94102a0427e2",children:"1da1999"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-7",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add consumer function utils (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add consumer system v2 sub results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b78b03504c4a46114062aded6661f00400c6ca06",children:"b78b035"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add testing of condition in consumer system consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["capture return values from a decorated function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/09ef23e92bf2755c7b83c7de5e9cbe9ee862db05",children:"09ef23e"}),"), closes ",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/4489",children:"#4489"})]}),"\n",(0,s.jsxs)(c.li,{children:["capture valid neqsim states (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f9c8b09f36d1f9a965b94cd32ef2d7b47c910a75",children:"f9c8b09"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["change to absolute image links in readme (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/16",children:"#16"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9a54f516613509bd6d5595f8afc1e5dce7ac860a",children:"9a54f51"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["conditions in tabular consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["correct link to documentation from README.md (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f185a7f8c389d4f9f5e087b68bfc83cc4fddad74",children:"f185a7f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["coverage from coverage.py is not directly supported (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8e76c8ab90d455613868e4343d6a2f61ccfb2a68",children:"8e76c8a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enable B904 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/65ac18ba23178c57886c1a77b74b2ee52c6d7a60",children:"65ac18b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["evaluate consumer system v2 consumers according to input order (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/00882321d823f74cf37f0b42e9771775b8eb34db",children:"0088232"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix badges (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/dd2fd6be194d306ae1ef969b13c43aea7352db58",children:"dd2fd6b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["migration guide changed resampling method (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/38",children:"#38"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d4f11dc49ce5eef29f6982f9514f6664ef18c764",children:"d4f11dc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move conditioning for consumer system consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move conditions for compressor consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move conditions for direct consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move conditions in pump consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move evaluation of conditions before calculations (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/24",children:"#24"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove energy usage before conditioning from tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove energy_usage_before_conditioning from results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["set power to zero when rate (and fuel consumption) is zero (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/27",children:"#27"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1ee5bfd2af30482683698172cd2a9c512f793b77",children:"1ee5bfd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["typo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9c3af00b4bcf5e3e57a99c97d3cc9028faeca307",children:"9c3af00"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["typo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/389db6f29e7a7ff9044b7bac5fb0e6fddba1687d",children:"389db6f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies to latest compatible (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/58098624c64693d20591bc96d79c2cbc61e3b5a6",children:"5809862"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update description etc in readme (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f37dbb7b97ade6c358b89e288ba644b06d546187",children:"f37dbb7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update docstring for numeric_methods (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/be435c3c96bc378614c4f761410c005be77025a4",children:"be435c3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update test snapshots (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1ee5bfd2af30482683698172cd2a9c512f793b77",children:"1ee5bfd"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h2,{id:"821-2023-05-09",children:"8.2.1 (2023-05-09)"}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-8",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["initial commit (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e4a59f03f716c7ceb1d3df50af6ef3cc76c405cd",children:"e4a59f0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["release 8.2.1 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9d66de6199b35d3bfd279fd1fe96806b05e6d594",children:"9d66de6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update documentation url (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6443ecf7324e6ee33d02bfa1a3f7b9168f19a612",children:"6443ecf"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-4",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["enable publish to pypi (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/15",children:"#15"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fe6f069b12119b62d054a635eb038b37a4394415",children:"fe6f069"}),")"]}),"\n"]})]})}function d(e={}){const{wrapper:c}={...(0,n.a)(),...e.components};return c?(0,s.jsx)(c,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,c,i)=>{i.d(c,{Z:()=>a,a:()=>r});var s=i(7294);const n={},t=s.createContext(n);function r(e){const c=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(c):{...c,...e}}),[c,e])}function a(e){let c;return c=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),s.createElement(t.Provider,{value:c},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/43a1031a.18b5a55b.js b/assets/js/43a1031a.18b5a55b.js new file mode 100644 index 0000000000..2db08d1a9c --- /dev/null +++ b/assets/js/43a1031a.18b5a55b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8010],{4629:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var n=i(5893),s=i(1151);const r={title:"Facility inputs",sidebar_position:3,description:"Guide on how to use facility inputs"},o=void 0,a={id:"about/modelling/setup/facility_inputs/index",title:"Facility inputs",description:"Guide on how to use facility inputs",source:"@site/docs/about/modelling/setup/facility_inputs/index.md",sourceDirName:"about/modelling/setup/facility_inputs",slug:"/about/modelling/setup/facility_inputs/",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Facility inputs",sidebar_position:3,description:"Guide on how to use facility inputs"},sidebar:"about",previous:{title:"Time series",permalink:"/ecalc/docs/about/modelling/setup/time_series"},next:{title:"Generator modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling"}},l={},c=[{value:"Format",id:"format",level:2},{value:"Supported types",id:"supported-types",level:3}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," keyword is ",(0,n.jsx)(t.strong,{children:"mandatory"})," within the eCalc\u2122 YAML file."]})}),"\n",(0,n.jsxs)(t.p,{children:["This part of the setup defines input files that characterize various facility elements. Each facility element is\nspecified in a list. These are later used as input in the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup by referencing their ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["All facility inputs are in essence a ",(0,n.jsx)(t.code,{children:"CSV"})," (Comma separated file) file that specifies input data to a model that\ncalculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple\n",(0,n.jsx)(t.a,{href:"#supported-types",children:"supported types"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"There are four categories of data that can be used here:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Files describing the performance of a ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling",children:"generator set"})]}),"\n",(0,n.jsxs)(t.li,{children:["Files describing the performance of pumps ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"(pump charts)"})]}),"\n",(0,n.jsxs)(t.li,{children:["Files describing the performance of ",(0,n.jsx)(t.strong,{children:"only"})," tabular compressors ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",children:"(sampled compressor data)"})]}),"\n",(0,n.jsx)(t.li,{children:"Other energy consuming equipment modeled variable w.r.t. reservoir management\n(tabulated relationship between variables and consumption)"}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["eCalc\u2122 supports making simple adjustments to a table by using the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/ADJUSTMENT",children:"ADJUSTMENT"}),"\nkeyword as well as modification of the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/HEAD_MARGIN",children:"HEAD_MARGIN"}),"\nwhich can be used while calibrating pump charts."]}),"\n",(0,n.jsx)(t.h2,{id:"format",children:"Format"}),"\n",(0,n.jsxs)(t.p,{children:["Each facility input has the skeleton as seen below. However, some inputs require further information. For example, ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"pump models"})]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: <reference name>\n FILE: <file_path.csv>\n TYPE: <consumer type>\n"})}),"\n",(0,n.jsx)(t.h3,{id:"supported-types",children:"Supported types"}),"\n",(0,n.jsxs)(t.p,{children:["The facility input type is defined using the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," keyword and defines the type of model applied\nto the data in this file. The input files are in ",(0,n.jsx)(t.code,{children:"CSV"})," (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file."]}),"\n",(0,n.jsx)(t.p,{children:"The supported types are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"ELECTRICITY2FUEL"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"TABULAR"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"COMPRESSOR_TABULAR"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"PUMP_CHART_SINGLE_SPEED"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"PUMP_CHART_VARIABLE_SPEED"})}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,t,i)=>{i.d(t,{Z:()=>a,a:()=>o});var n=i(7294);const s={},r=n.createContext(s);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/43a26e71.efb35fa2.js b/assets/js/43a26e71.efb35fa2.js new file mode 100644 index 0000000000..5812e9acd7 --- /dev/null +++ b/assets/js/43a26e71.efb35fa2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4845],{2414:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>s,default:()=>r,frontMatter:()=>l,metadata:()=>a,toc:()=>d});var i=t(5893),o=t(1151);const l={sidebar_position:2,description:"Pump modelling"},s="Pump modelling",a={id:"about/modelling/setup/facility_inputs/pump_modelling/index",title:"Pump modelling",description:"Pump modelling",source:"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/index.md",sourceDirName:"about/modelling/setup/facility_inputs/pump_modelling",slug:"/about/modelling/setup/facility_inputs/pump_modelling/",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/pump_modelling/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Pump modelling"},sidebar:"about",previous:{title:"Generator modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling"},next:{title:"Pump chart",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"}},p={},d=[];function u(e){const n={a:"a",admonition:"admonition",h1:"h1",p:"p",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"pump-modelling",children:"Pump modelling"}),"\n",(0,i.jsx)(n.h1,{id:"attention",children:"Attention"}),"\n",(0,i.jsx)(n.p,{children:"Pumps can both be single speed and variable speed. Often, the pumping capacity on an installation is filled with a system of several pumps in parallel."}),"\n",(0,i.jsx)(n.admonition,{title:"Attention",type:"warning",children:(0,i.jsx)(n.p,{children:"The pump models in eCalc\u2122 are intended for water, i.e., there is no friction dependency.\nThus, for usage in other types of pumps (e.g., where the\nfluid viscosity changes with the fluid mixture), the results might not be as intended."})}),"\n",(0,i.jsxs)(n.p,{children:["Core theory behind the modelling of pumps in eCalc\u2122 can be found ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/modelling/theory/pump_modelling",children:"here"}),"."]})]})}function r(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>s});var i=t(7294);const o={},l=i.createContext(o);function s(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/45c974ba.dd19411b.js b/assets/js/45c974ba.dd19411b.js new file mode 100644 index 0000000000..0abdeb170a --- /dev/null +++ b/assets/js/45c974ba.dd19411b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2459],{3948:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>i,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var t=s(5893),o=s(1151);const r={slug:"v7-2-release",title:"v7.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:5},a="eCalc v7.2",l={id:"changelog/v7-2",title:"v7.2",description:"Features",source:"@site/docs/changelog/v7-2.md",sourceDirName:"changelog",slug:"/changelog/v7-2-release",permalink:"/ecalc/docs/changelog/v7-2-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-2.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:5,frontMatter:{slug:"v7-2-release",title:"v7.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:5},sidebar:"changelog",previous:{title:"v7.1",permalink:"/ecalc/docs/changelog/v7-1-release"},next:{title:"v7.3",permalink:"/ecalc/docs/changelog/v7-3-release"}},i={},c=[{value:"<em>Features</em>",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"ecalc-v72",children:"eCalc v7.2"}),"\n",(0,t.jsx)(n.h2,{id:"features",children:(0,t.jsx)(n.em,{children:"Features"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add :code:",(0,t.jsx)(n.code,{children:"ecalc show yaml model.yaml"})," command."]}),"\n",(0,t.jsx)(n.p,{children:"The command will only read the yaml file, include the files that should be included, then show the resulting yaml.\nThere is no need to run the model beforehand."}),"\n",(0,t.jsxs)(n.p,{children:["This should help figure out problems with :code:",(0,t.jsx)(n.code,{children:"!include"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["BREAKING CHANGE!: ",(0,t.jsx)(n.a,{href:"../about/references/keywords/CATEGORY",children:"CATEGORY"})," is MANDATORY for Generator Sets. To be able to handle this, the ",(0,t.jsx)(n.code,{children:"MISCELLANEOUS"})," category\nhas been introduced for Generator sets for users to be able to set this to generator sets that do not apply to other categories,\nand to e.g. except for LTP output."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"GENERATORSETS:\n - NAME: genset\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: A_genset\n ...\n ...\n - NAME: power_from_shore\n CATEGORY: POWER-FROM-SHORE\n ELECTRICITY2FUEL: onshore_power\n ...\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"EXPERIMENTAL: Add show results command to cli."}),"\n",(0,t.jsxs)(n.p,{children:["When running ecalc, either by ",(0,t.jsx)(n.code,{children:"ecalc run model.yaml"})," or ",(0,t.jsx)(n.code,{children:"ecalc model.yaml"})," we will store the results in your\nhome-directory. You don't have to specify any specific arguments for this to happen."]}),"\n",(0,t.jsxs)(n.p,{children:["A new command ",(0,t.jsx)(n.code,{children:"ecalc show results"})," is introduced. This command can be used to display all the results, or you can use\nthe argument ",(0,t.jsx)(n.code,{children:"--name"})," to only show results for a specific component."]}),"\n",(0,t.jsx)(n.p,{children:"What is a component? Currently the supported component names are the name of the model (filename without the yaml ending),\ninstallation names, generator set names, electricity consumer names and fuel consumer names."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:'ecalc show results --name "component name"'})," will give a json file with only the specified component results."]}),"\n",(0,t.jsxs)(n.p,{children:["The output format can be changed to csv by specifying ",(0,t.jsx)(n.code,{children:"--output-format csv"}),". This will try to give all the data represented\nin the json output, but some of it will be filtered as it does not fit the tabular csv format."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Examples"})}),"\n",(0,t.jsxs)(n.p,{children:["Show all results in json format: ",(0,t.jsx)(n.code,{children:"ecalc show results"})," or ",(0,t.jsx)(n.code,{children:"ecalc show results --output-format json"}),"\nShow model results (totals) in json format ",(0,t.jsx)(n.code,{children:"ecalc show results --name model"})," (if using the model.yaml file as shown above)\nShow model results (totals) in csv format ",(0,t.jsx)(n.code,{children:"ecalc show results --name model --output-format csv"})]}),"\n",(0,t.jsxs)(n.p,{children:["Deprecation warning: Running ecalc without the 'run' argument is deprecated. Use 'ecalc run arg1 ... argN' instead.\nAs this is an experimental feature ",(0,t.jsx)(n.code,{children:"ecalc run"})," might see breaking changes in future releases, you are free to ignore\nthe deprecation warning for a while if you don't want to be exposed to those changes. ",(0,t.jsx)(n.code,{children:"ecalc show"})," will still work as\nexpected."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"fixes",children:(0,t.jsx)(n.em,{children:"Fixes"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Deprecate json_v2 output, json_v3 should be used instead. json_v2 (and json_v1) will be removed in the next release."}),"\n",(0,t.jsx)(n.li,{children:"Allow Single and Variable Speed Compressor Trains to run regardless of non-convergence in numeric root finding algorithms. This is a rate situation and caused by numeric instability. If this happens there will be logged an error in the log together with relevant data. Use result with caution."}),"\n",(0,t.jsx)(n.li,{children:"Use Brent's method instead of secant method to find roots used in numeric iterations for compressor models. Faster and more robust compared to old secant method."}),"\n",(0,t.jsx)(n.li,{children:"Correct prioritazion of compressor system when the compressor system is more complex than only splitting rates on more and more duplicate compressor trains."}),"\n",(0,t.jsxs)(n.li,{children:["Added warning both in documentation and code about using ",(0,t.jsx)(n.code,{children:"Generic compressor chart with design point calculated from input data"})," in a ",(0,t.jsx)(n.code,{children:"COMPRESSOR_SYSTEM energy usage model"})]}),"\n",(0,t.jsx)(n.li,{children:"Improved units and results mapping. The consumed energy is now reported under energy_usage, and power_rate is included if relevant regardless of energy_usage."}),"\n",(0,t.jsx)(n.li,{children:"Suction pressures were not correctly set, and defaulting to 0, in some cases when a list of pressures were given."}),"\n",(0,t.jsx)(n.li,{children:"In cases when only one timestep was evaluated in a consumer system, and the first prioritized operational setting was outside capacity, it was nevertheless chosen."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>a});var t=s(7294);const o={},r=t.createContext(o);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/47daf389.1c4ae3c9.js b/assets/js/47daf389.1c4ae3c9.js new file mode 100644 index 0000000000..de23194401 --- /dev/null +++ b/assets/js/47daf389.1c4ae3c9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8082],{514:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>o,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>i});var n=r(5893),t=r(1151);const a={slug:"v8.4-release",title:"v8.4",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:14},c="eCalc",l={id:"changelog/v8-4",title:"v8.4",description:"New Features",source:"@site/docs/changelog/v8-4.md",sourceDirName:"changelog",slug:"/changelog/v8.4-release",permalink:"/ecalc/docs/changelog/v8.4-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-4.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:14,frontMatter:{slug:"v8.4-release",title:"v8.4",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:14},sidebar:"changelog",previous:{title:"v8.3",permalink:"/ecalc/docs/changelog/v8.3-release"},next:{title:"v8.5",permalink:"/ecalc/docs/changelog/v8.5-release"}},o={},i=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const s={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,n.jsx)(s.h2,{id:"new-features",children:"New Features"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Add ",(0,n.jsx)(s.code,{children:"requested inlet- and outlet compressor pressures"})," from input data to results. In cases where active pressure control mechanisms are active, requested inlet- and outlet pressures may differ from ",(0,n.jsx)(s.code,{children:"calculated pressures"}),". It is now possible to analyse both requested- and calculated pressures."]}),"\n",(0,n.jsxs)(s.li,{children:["Specify ",(0,n.jsx)(s.code,{children:"rate type"})," for majority of output ",(0,n.jsx)(s.code,{children:"rate"})," results as either ",(0,n.jsx)(s.code,{children:"stream day"})," or ",(0,n.jsx)(s.code,{children:"calendar day"}),"."]}),"\n",(0,n.jsx)(s.li,{children:"Improved error messages"}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"fixes",children:"Fixes"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"Actual rate"})," was incorrectly returned for ",(0,n.jsx)(s.code,{children:"compressor sampled"}),". Actual rate cannot be known for ",(0,n.jsx)(s.code,{children:"compressor sampled"})," since we need to know ",(0,n.jsx)(s.code,{children:"fluid properties"})," in order to do that. ",(0,n.jsx)(s.code,{children:"Actual rate"})," has therefore been removed from ",(0,n.jsx)(s.code,{children:"compressor sampled"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Handle bug in ",(0,n.jsx)(s.code,{children:"Variable Speed Compressor Train With Multiple Streams And Pressures"})," when no rate is entering a compressor stage wrt. recirculation."]}),"\n",(0,n.jsx)(s.li,{children:"Other minor fixes"}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"breaking-changes",children:"Breaking changes"})]})}function u(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,s,r)=>{r.d(s,{Z:()=>l,a:()=>c});var n=r(7294);const t={},a=n.createContext(t);function c(e){const s=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),n.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/496ed8d5.479344d0.js b/assets/js/496ed8d5.479344d0.js new file mode 100644 index 0000000000..4fea7ea288 --- /dev/null +++ b/assets/js/496ed8d5.479344d0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2206],{9388:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var t=i(5893),o=i(1151);const s={sidebar_position:8,description:"eCalc FAQ"},r="FAQ / Troubleshooting",a={id:"about/getting_started/cli/faq",title:"FAQ / Troubleshooting",description:"eCalc FAQ",source:"@site/docs/about/getting_started/cli/faq.md",sourceDirName:"about/getting_started/cli",slug:"/about/getting_started/cli/faq",permalink:"/ecalc/docs/about/getting_started/cli/faq",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/cli/faq.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"eCalc FAQ"},sidebar:"about",previous:{title:"CLI",permalink:"/ecalc/docs/about/getting_started/cli/"},next:{title:"Python Library",permalink:"/ecalc/docs/about/getting_started/library/"}},l={},c=[{value:"Indentation errors",id:"indentation-errors",level:2},{value:"Error messages due to YAML read problems",id:"error-messages-due-to-yaml-read-problems",level:3},{value:"Error messages due to invalid eCalc configuration",id:"error-messages-due-to-invalid-ecalc-configuration",level:3},{value:"Proposed solution",id:"proposed-solution",level:3},{value:"Special characters in Unicode",id:"special-characters-in-unicode",level:2},{value:"Proposed solution",id:"proposed-solution-1",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"faq--troubleshooting",children:"FAQ / Troubleshooting"}),"\n",(0,t.jsx)(n.p,{children:"While running eCalc as a Unix command-line tool, you may come across seemingly incomprehensible error messages.\nThis page tries to explain some common error messages and proposes how to fix them."}),"\n",(0,t.jsx)(n.h2,{id:"indentation-errors",children:"Indentation errors"}),"\n",(0,t.jsx)(n.p,{children:"In YAML, the indentation is very important and specifies the level in the hierarchy for the input.\nIf you have the wrong indentation somewhere, you may get both YAML read errors and/or eCalc setup errors."}),"\n",(0,t.jsx)(n.h3,{id:"error-messages-due-to-yaml-read-problems",children:"Error messages due to YAML read problems"}),"\n",(0,t.jsx)(n.p,{children:"The following error messages are common when you have formatting issues in your YAML file:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"mapping values are not allowed here\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"while scanning a simple key in \"<setupfile.yml>\", line <n>, column <m>\ncould not find expected ':', line <n>, column <m>\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"while parsing a block mapping in <setupfile>, line <n>, column <m>\nexpected <block end>, but found '<block mapping start>'\n"})}),"\n",(0,t.jsx)(n.h3,{id:"error-messages-due-to-invalid-ecalc-configuration",children:"Error messages due to invalid eCalc configuration"}),"\n",(0,t.jsx)(n.p,{children:"The configuration expects a sub-hierarchy of data. After reading YAML, this data sub-hierarchy would be of object type\ndictionary (dict) and in some cases contain lists or other objects. If invalid data is input, the error message would\nindicate that the type is wrong because it is not a 'dict'/'list' or other type"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"None should be instance of 'dict'\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"None should be instance of 'list'\n"})}),"\n",(0,t.jsx)(n.h3,{id:"proposed-solution",children:"Proposed solution"}),"\n",(0,t.jsx)(n.p,{children:"Check your YAML setup file for correct indentation and correct format of values for each eCalc key."}),"\n",(0,t.jsx)(n.h2,{id:"special-characters-in-unicode",children:"Special characters in Unicode"}),"\n",(0,t.jsxs)(n.p,{children:["eCalc uses ",(0,t.jsx)(n.a,{href:"https://pypi.org/project/ruamel.yaml/",children:"ruamel.yaml"})," to read the YAML setup files. Some (text) files have an encoding not supported and will thus result in an error message."]}),"\n",(0,t.jsxs)(n.p,{children:['One example of this is an unrecognized "',(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Byte_order_mark",children:"BOM"}),'" character in "',(0,t.jsx)(n.a,{href:"https://nl.wikipedia.org/wiki/UTF-8",children:"UTF-8 Unicode"}),'".']}),"\n",(0,t.jsx)(n.p,{children:"Error message"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"while scanning a simple key in \"<setupfile.yml>\", line <n>, column 1\ncould not find expected ':', line <n>, column 1\n"})}),"\n",(0,t.jsx)(n.h3,{id:"proposed-solution-1",children:"Proposed solution"}),"\n",(0,t.jsx)(n.p,{children:"Check the encoding of your setupfile (and inputfiles):"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"$ file <setupfile>.yml\n"})}),"\n",(0,t.jsxs)(n.p,{children:['If the output of this is not "ASCII text", convert your file to "US-ASCII" using ',(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/iconv",children:"iconv"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Example when ",(0,t.jsx)(n.code,{children:"<setupfile>.yml"}),' is of type "UTF-8"']}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"$ iconv -f UTF-8 -t US-ASCII//TRANSLIT -o <new_setup_file_name_ascii>.yml <old_setup_file_name_utf-8>.yml\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Now try to run again using the new file ",(0,t.jsx)(n.code,{children:"<new_setup_file_name_ascii>.yml"}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>a,a:()=>r});var t=i(7294);const o={},s=t.createContext(o);function r(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/498bfcff.5b524ea2.js b/assets/js/498bfcff.5b524ea2.js new file mode 100644 index 0000000000..cbcfaa64df --- /dev/null +++ b/assets/js/498bfcff.5b524ea2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[749],{8084:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var s=t(5893),i=t(1151);const o={title:"Fuel types",sidebar_position:5,description:"Guide on how to use fuel types"},a=void 0,l={id:"about/modelling/setup/fuel_types",title:"Fuel types",description:"Guide on how to use fuel types",source:"@site/docs/about/modelling/setup/fuel_types.md",sourceDirName:"about/modelling/setup",slug:"/about/modelling/setup/fuel_types",permalink:"/ecalc/docs/about/modelling/setup/fuel_types",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/fuel_types.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Fuel types",sidebar_position:5,description:"Guide on how to use fuel types"},sidebar:"about",previous:{title:"Turbine modelling",permalink:"/ecalc/docs/about/modelling/setup/models/turbine_modeling"},next:{title:"Variables",permalink:"/ecalc/docs/about/modelling/setup/variables"}},r={},c=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," keyword is ",(0,s.jsx)(n.strong,{children:"mandatory"})," within the eCalc\u2122 YAML file."]})}),"\n",(0,s.jsxs)(n.p,{children:["This part of the setup specifies the various fuel types and associated emissions\nused in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/",children:"INSTALLATIONS"})," part of the setup by its name."]}),"\n",(0,s.jsxs)(n.p,{children:["The use of fuel can lead to one or more emission types, specified in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["You can optionally specify a ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FUEL_TYPES:\n - NAME: <name_1>\n CATEGORY: <category_1>\n EMISSIONS: <emissions data>\n - NAME: <name_2>\n CATEGORY: <category_2>\n EMISSIONS: <emissions data>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["This is a full example where there are 3 fuel type definitions, i.e., there are 3 different\nfuels defined that can be used in your ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/",children:"INSTALLATIONS"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FUEL_TYPES:\n - NAME: fuel_gas # Name of this fuel, use this when referencing this fuel in the FUEL specification in the INSTALLATIONS part\n EMISSIONS:\n - NAME: CO2 # Name of the emission type\n FACTOR: 2.15 # kg/Sm3\n - NAME: CH4\n FACTOR: 0.00091 # kg/Sm3\n - NAME: flare_gas\n CATEGORY: FUEL_GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.73\n - NAME: CH4\n FACTOR: 0.00024\n - NAME: diesel\n CATEGORY: DIESEL\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.7085 # kg/l - input diesel usage in l/d\n"})})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>a});var s=t(7294);const i={},o=s.createContext(i);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4aa4fc36.be58ac26.js b/assets/js/4aa4fc36.be58ac26.js new file mode 100644 index 0000000000..6e006b0f61 --- /dev/null +++ b/assets/js/4aa4fc36.be58ac26.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1044],{1075:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=t(5893),o=t(1151);const r={title:"v8 to v8.1",description:"v8 to v8.1 migration",sidebar_position:1},s="v8 to v8.1",a={id:"about/migration_guides/v8_to_v81",title:"v8 to v8.1",description:"v8 to v8.1 migration",source:"@site/docs/about/migration_guides/v8_to_v81.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8_to_v81",permalink:"/ecalc/docs/about/migration_guides/v8_to_v81",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8_to_v81.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"v8 to v8.1",description:"v8 to v8.1 migration",sidebar_position:1},sidebar:"about",previous:{title:"v7 to v8",permalink:"/ecalc/docs/about/migration_guides/v7_to_v8"},next:{title:"v8.1 to v8.2",permalink:"/ecalc/docs/about/migration_guides/v8-1_to_v8-2"}},l={},d=[{value:"Yaml migration",id:"yaml-migration",level:2},{value:"Migration overview",id:"migration-overview",level:3},{value:"1. Changes to TIME_SERIES",id:"1-changes-to-time_series",level:3},{value:"2. Not possible to have different interpolation types for vectors within one file",id:"2-not-possible-to-have-different-interpolation-types-for-vectors-within-one-file",level:3},{value:"3. Empty data in time series columns no longer allowed",id:"3-empty-data-in-time-series-columns-no-longer-allowed",level:3},{value:"4. New LTP Category: STEAM-TURBINE-GENERATOR",id:"4--new-ltp-category-steam-turbine-generator",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"v8-to-v81",children:"v8 to v8.1"}),"\n",(0,i.jsx)(n.p,{children:"In this migration guide you will find:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#yaml-migration",children:"YAML changes"})}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"yaml-migration",children:"Yaml migration"}),"\n",(0,i.jsx)(n.h3,{id:"migration-overview",children:"Migration overview"}),"\n",(0,i.jsx)(n.p,{children:"This doc guides you through migrating an existing eCalc\u2122 model from version v8 to v8.1."}),"\n",(0,i.jsx)(n.p,{children:"We try to make this as easy as possible, and provide a step-by-step migration guide."}),"\n",(0,i.jsx)(n.h3,{id:"1-changes-to-time_series",children:"1. Changes to TIME_SERIES"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"RATE_INTERPOLATION_TYPE"})," is renamed to ",(0,i.jsx)(n.a,{href:"../references/keywords/INTERPOLATION_TYPE",children:(0,i.jsx)(n.code,{children:"INTERPOLATION_TYPE"})})]}),"\n",(0,i.jsxs)(n.li,{children:["New time series type: ",(0,i.jsx)(n.code,{children:"DEFAULT"})," with default ",(0,i.jsx)(n.code,{children:"RIGHT"})," interpolation"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"RESERVOIR"})," type is removed"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Previously, it looked like this:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: <time series reference name>\n # This is old\n TYPE: <MISCELLANEOUS/RESERVOIR>\n FILE: <path to file>\n INFLUENCE_TIME_VECTOR: <True/False>\n EXTRAPOLATION: <True/False>\n # This is old\n RATE_INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>\n"})}),"\n",(0,i.jsx)(n.p,{children:"But the new valid definition of time series in the yaml is now:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: <time series reference name>\n # This is new\n TYPE: <MISCELLANEOUS/DEFAULT>\n FILE: <path to file>\n INFLUENCE_TIME_VECTOR: <True/False>\n EXTRAPOLATION: <True/False>\n # This is new\n INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"important",children:(0,i.jsxs)(n.p,{children:["We have understood that the previous definitions lead to misunderstandings and errors. It is therefore of high importance\nthat you now go through the reservoir data timeseries one-by-one and make sure that the correct type and interpolation type\nis set. See below for the 2 possibilities of migrating from the old ",(0,i.jsx)(n.code,{children:"RESERVOIR"})," type."]})}),"\n",(0,i.jsxs)(n.p,{children:["If you previously used the ",(0,i.jsx)(n.code,{children:"RESERVOIR"})," type, you know have 2 options. See below."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: <time series reference name>\n # This is old\n TYPE: RESERVOIR\n ...\n"})}),"\n",(0,i.jsxs)(n.p,{children:["If you know that the reservoir data comes from Centuries, and/or that the data is right-interpolated, then you should\nchange to the new ",(0,i.jsx)(n.code,{children:"DEFAULT"})," type, like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: <time series reference name>\n # This is new\n TYPE: DEFAULT\n ...\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"important",children:(0,i.jsxs)(n.p,{children:["If you do NOT know the origin of the timeseries or whether it uses ",(0,i.jsx)(n.code,{children:"LEFT"})," or ",(0,i.jsx)(n.code,{children:"RIGHT"})," interpolation, you ",(0,i.jsx)(n.strong,{children:"MUST"})," contact\nsomebody that can help you out to make this right. The consequences of doing it wrong is that the calculations is\neasily offset by 1 year."]})}),"\n",(0,i.jsx)(n.h3,{id:"2-not-possible-to-have-different-interpolation-types-for-vectors-within-one-file",children:"2. Not possible to have different interpolation types for vectors within one file"}),"\n",(0,i.jsxs)(n.p,{children:["Previously eCalc\u2122 tried to recognize vectors as rates- or non-rates for time series.\nHence, rate-vectors were set to use ",(0,i.jsx)(n.code,{children:"LEFT"})," interpolation type, or if the type was\nMISCELLANEOUS it was set to the method given by the user. If the vector was not recognized\nas a rate, the interpolation method was automatically set to ",(0,i.jsx)(n.code,{children:"LINEAR"}),", regardless of user input."]}),"\n",(0,i.jsx)(n.p,{children:"This behaviour is now changed:"}),"\n",(0,i.jsx)(n.admonition,{type:"important",children:(0,i.jsx)(n.p,{children:"eCalc\u2122 will no longer auto-detect rates and set interpolation type based on recognized\nrate vectors. If different vectors (e.g. pressures and rates) should be interpolated differently, they now need\nto be in separate files."})}),"\n",(0,i.jsx)(n.h3,{id:"3-empty-data-in-time-series-columns-no-longer-allowed",children:"3. Empty data in time series columns no longer allowed"}),"\n",(0,i.jsx)(n.p,{children:"Each column in a time series resource should have data for all time steps, eCalc\u2122 will now show an error if this is not the case.\nThe reason behind this is that it can be ambiguous to know whether missing data should be interpolated or considered as 0. Now\nusers will have to be explicit, and this will lead to fewer ambiguities and errors."}),"\n",(0,i.jsx)(n.h3,{id:"4--new-ltp-category-steam-turbine-generator",children:"4. New LTP Category: STEAM-TURBINE-GENERATOR"}),"\n",(0,i.jsx)(n.p,{children:"A new LTP requirement to report steam turbine generator consumption/generation. This affects the total generator production\nnegatively (reduced load), as some energy is provided through this steam turbine generator. It is therefore modelled as a consumer\nwith a negative load in order to subtract from the total energy provided by the generator set."}),"\n",(0,i.jsx)(n.p,{children:"The load on the steam turbine generator is reported separately in a new column in LTP Export."}),"\n",(0,i.jsxs)(n.p,{children:["Added new ",(0,i.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:"CATEGORY"})," with name ",(0,i.jsx)(n.em,{children:"STEAM-TURBINE-GENERATOR"})," to report power generated by a steam turbine.\nShould be negative load to deduct from genset. See excerpt example below:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" - NAME: steamgen\n CATEGORY: STEAM-TURBINE-GENERATOR\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: -1.1 # MW\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"important",children:(0,i.jsxs)(n.p,{children:["Set ",(0,i.jsx)(n.strong,{children:"negative"})," load for ",(0,i.jsx)(n.code,{children:"STEAM-TURBINE-GENERATOR"})," (similar to the way ",(0,i.jsx)(n.code,{children:"OFFSHORE-WIND"})," is being used)"]})})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>s});var i=t(7294);const o={},r=i.createContext(o);function s(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4b5a01f9.ef3c9946.js b/assets/js/4b5a01f9.ef3c9946.js new file mode 100644 index 0000000000..5b96dd8faa --- /dev/null +++ b/assets/js/4b5a01f9.ef3c9946.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3211],{9150:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>m,frontMatter:()=>t,metadata:()=>s,toc:()=>r});var i=o(5893),l=o(1151);const t={title:"Fluid model",sidebar_position:1,description:"Selecting a fluid model in eCalc"},a="Fluid model",s={id:"about/modelling/setup/models/fluid_model",title:"Fluid model",description:"Selecting a fluid model in eCalc",source:"@site/docs/about/modelling/setup/models/fluid_model.md",sourceDirName:"about/modelling/setup/models",slug:"/about/modelling/setup/models/fluid_model",permalink:"/ecalc/docs/about/modelling/setup/models/fluid_model",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/fluid_model.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Fluid model",sidebar_position:1,description:"Selecting a fluid model in eCalc"},sidebar:"about",previous:{title:"Models",permalink:"/ecalc/docs/about/modelling/setup/models/"},next:{title:"Compressor modelling",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/"}},d={},r=[{value:"Fluid model using predefined composition",id:"fluid-model-using-predefined-composition",level:2},{value:"Format",id:"format",level:3},{value:"Examples",id:"examples",level:3},{value:"Fluid model with user-specified composition",id:"fluid-model-with-user-specified-composition",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example",level:3}];function c(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"fluid-model",children:"Fluid model"}),"\n",(0,i.jsx)(n.p,{children:"To calculate the energy usage related to compression of a natural gas, information about the composition is needed, i.e.\nwhich components it consist of and the (mole) fraction of each. Typical components for natural gas are alkanes such as\nmethane, ethane, propane, butane, pentane, hexane in addition to water, nitrogen and carbone dioxide. Alkanes with seven\nor more carbon atoms may occur, but these are often just part of the liquid (oil) phase and not significant in dry gas\ncompression."}),"\n",(0,i.jsx)(n.p,{children:"As the fluid is going through the compressor in a fluid dynamic process, the enthalpy changes, resulting in a new state\nwith increased pressure and temperature, and decreased volume. To estimate these changes, an equation-of-state (EOS)\nmodel is used. The default EOS model in eCalc is SRK (Soave-Redlich-Kwong)."}),"\n",(0,i.jsx)(n.p,{children:"The GERG models (GERG 2008) are used to calculate enthalpy, gamma and density, whilst other properties such as molar mass\nis based on either SRK or PR."}),"\n",(0,i.jsx)(n.p,{children:"Available EOS models"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"SRK (Soave-Redlich-Kwong)"}),"\n",(0,i.jsx)(n.li,{children:"PR (Peng-Robinson)"}),"\n",(0,i.jsx)(n.li,{children:"GERG_SRK"}),"\n",(0,i.jsx)(n.li,{children:"GERG_PR"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"fluid-model-using-predefined-composition",children:"Fluid model using predefined composition"}),"\n",(0,i.jsx)(n.p,{children:"Available predefined fluid compositions (with mole weights) are"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"ULTRA_DRY (17.1 kg/kmol)"}),"\n",(0,i.jsx)(n.li,{children:"DRY (18.3 kg/kmol)"}),"\n",(0,i.jsx)(n.li,{children:"MEDIUM (19.4 kg/kmol)"}),"\n",(0,i.jsx)(n.li,{children:"RICH (21.1 kg/kmol)"}),"\n",(0,i.jsx)(n.li,{children:"ULTRA_RICH (24.6 kg/kmol)"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of fluid model, for reference>\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: <eos model>\n GAS_TYPE: <name of a predefined composition>\n"})}),"\n",(0,i.jsx)(n.h3,{id:"examples",children:"Examples"}),"\n",(0,i.jsx)(n.p,{children:"Examples with predefined fluid"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: fluid_model_reference_name\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: fluid_model_reference_name\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: PR\n GAS_TYPE: ULTRA_DRY\n"})}),"\n",(0,i.jsx)(n.p,{children:"Example where EOS is defaulted to SRK and GAS_TYPE defaulted to MEDIUM"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: fluid_model_reference_name\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n"})}),"\n",(0,i.jsx)(n.h2,{id:"fluid-model-with-user-specified-composition",children:"Fluid model with user-specified composition"}),"\n",(0,i.jsxs)(n.p,{children:["The composition is specified by setting the mole fraction of each component. Setting the mole fraction for ",(0,i.jsx)(n.strong,{children:"methane is\nrequired"}),", all other components are optional and will be set to 0 if not specified. If methane is not part of your\ncomposition, simply put 0.0 for it."]}),"\n",(0,i.jsx)(n.p,{children:"It is not important that the fractions sum to one as they will be normalized by eCalc. It is the relative amount of each\nthat will be important."}),"\n",(0,i.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of fluid model, for reference>\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: <eos model>\n COMPOSITION:\n water: <mole fraction>\n nitrogen: <mole fraction>\n CO2: <mole fraction>\n methane: <mole fraction, required>\n ethane: <mole fraction>\n propane: <mole fraction>\n i_butane: <mole fraction>\n n_butane: <mole fraction>\n i_pentane: <mole fraction>\n n_pentane: <mole fraction>\n n_hexane: <mole fraction>\n"})}),"\n",(0,i.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of fluid model, for reference>\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: srk\n COMPOSITION:\n water: 0.1\n nitrogen: 0.74373\n CO2: 2.415619\n methane: 85.60145\n ethane: 6.707826\n propane: 2.611471\n i_butane: 0.45077\n n_butane: 0.691702\n i_pentane: 0.210714\n n_pentane: 0.197937\n n_hexane: 0.368786\n"})})]})}function m(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>s,a:()=>a});var i=o(7294);const l={},t=i.createContext(l);function a(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:a(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4b80f681.e11f3e27.js b/assets/js/4b80f681.e11f3e27.js new file mode 100644 index 0000000000..8d94e798fd --- /dev/null +++ b/assets/js/4b80f681.e11f3e27.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9842],{8186:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var n=r(5893),t=r(1151);const o={title:"Variable speed compressor train model with multiple streams and pressures",sidebar_position:4},i=void 0,a={id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",title:"Variable speed compressor train model with multiple streams and pressures",description:"This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like.",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Variable speed compressor train model with multiple streams and pressures",sidebar_position:4},sidebar:"about",previous:{title:"Variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"},next:{title:"Fixed speed pressure control",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/"}},l={},d=[{value:"Format",id:"format",level:2},{value:"Keyword usage",id:"keyword-usage",level:2},{value:"INTERSTAGE_PRESSURE_CONTROL",id:"interstage_pressure_control",level:3},{value:"Fixed pressure control",id:"fixed-pressure-control",level:3},{value:"Example",id:"example",level:2}];function c(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.p,{children:"This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Compressor train with multiple streams and pressures",src:r(9317).Z+"",width:"1475",height:"659"})}),"\n",(0,n.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,n.jsxs)(s.p,{children:["The model is defined under the main keyword ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," in the format:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n # All streams defined ahead of stage\n # Default outlet stream after last stage should not be defined\n STREAMS: # All inlet streams must have fluid models with the same eos model\n - NAME: <name of stream 1>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - NAME: <name of stream 2>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - ...\n - NAME: <name of stream N>\n TYPE: OUTGOING # NB: No fluid definition for outgoing streams!\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>\n CONTROL_MARGIN: <Default value 0.0>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n - ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n CONTROL_MARGIN: <Default value 0.0>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: <pressure control>\n DOWNSTREAM_PRESSURE_CONTROL: <pressure control>\n - ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n CONTROL_MARGIN: <Default value 0.0>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n - ...\n MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>\n"})}),"\n",(0,n.jsx)(s.h2,{id:"keyword-usage",children:"Keyword usage"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/STREAMS",children:"STREAMS"})," is a list of all in- and out-going streams for the compressor train."]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"The same equation of state (EOS) must be used for each INGOING stream fluid models"}),"\n",(0,n.jsxs)(s.li,{children:["OUTGOING fluid models ",(0,n.jsx)(s.strong,{children:"cannot"})," be specified."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"STAGES"})," is a list of all the stages in the compressor train."]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"For each stage, a temperature in Celsius must be defined. It\nis assumed that the gas is cooled down to this temperature ahead of the compression at this stage."}),"\n",(0,n.jsx)(s.li,{children:"A reference to a\ncompressor chart needs to be specified for each stage."}),"\n",(0,n.jsxs)(s.li,{children:["For the first stage, it is required to have ",(0,n.jsx)(s.strong,{children:"at least"})," one stream of INGOING type. In addition, ",(0,n.jsx)(s.code,{children:"INTERSTAGE_CONTROL_PRESSURE"})," cannot be used on the first stage."]}),"\n",(0,n.jsx)(s.li,{children:"Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream\nwill be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the\nmolar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will\nbe subtracted the rate of the outgoing stream."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"PRESSURE_DROP_AHEAD_OF_STAGE"})," is optional, but if defined it will reduce the inlet pressure of that particular stage by a fixed value.\nAs of now, only a single value is supported - i.e. a time series cannot be used here."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"CONTROL_MARGIN"})," is a surge control margin, see ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"Surge control margin for variable speed compressor chart"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"CONTROL_MARGIN_UNIT"})," is the unit of the surge control margin."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"interstage_pressure_control",children:"INTERSTAGE_PRESSURE_CONTROL"}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"INTERSTAGE_CONTROL_PRESSURE"})," may be specified for one (only one!) of the stages 2, ..., N. It may ",(0,n.jsx)(s.strong,{children:"not"})," be specified for the first stage. See ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})," for more usage details"]})}),"\n",(0,n.jsxs)(s.p,{children:["This is optional but essentially when this is specified the compression train is split into two parts - before and after the ",(0,n.jsx)(s.code,{children:"INTERSTAGE_CONTROL_PRESSURE"}),". As all rates and pressures (suction, discharge and interstage) are known, each side of the compression train can be solved independently."]}),"\n",(0,n.jsx)(s.p,{children:"Thus, given this, the rotational speed needed to match the suction and interstage pressure can be found. This speed will be for the first section of the compression train. The same is done for the second part of the train, only here the rotational speed is found to match the interstage and discharge pressure, for the given rates."}),"\n",(0,n.jsxs)(s.p,{children:["The highest speed between the first and second parts of the train is then taken as the rotational speed of the compression train.\nThis speed will essentially be needed to meet the most demanding pressure interval.\nThe section with the lower rotational speed must then be run with a form of pressure control (see ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",children:"UPSTREAM_PRESSURE_CONTROL"}),"/",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",children:"DOWNSTREAM_PRESSURE_CONTROL"}),")."]}),"\n",(0,n.jsx)(s.p,{children:"In a given simulation, the section of the compression train that requires either upstream or downstream pressure control is not fixed. This means that for different time steps, the part of the train with the highest rotational speed is not set to either the first or second section. Thus, both pressure control methods must be specified but only one of them will be used for each time step."}),"\n",(0,n.jsx)(s.p,{children:"Technically, the INTERSTAGE_PRESSURE_CONTROL may be set independent of where the streams are defined. I.e. it may be\ndefined at a stage where there is an in- or out-going stream defined, or at a stage where there is no defined stream.\nIn reality, the INTERSTAGE_PRESSURE_CONTROL is linked to a stream, for example an outgoing stream for export where the\nexport pressure is defined, and where the rest of the gas continues through the compressor train for example for\ninjection at a higher pressure."}),"\n",(0,n.jsx)(s.h3,{id:"fixed-pressure-control",children:"Fixed pressure control"}),"\n",(0,n.jsx)(s.p,{children:"The available pressure controls are"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"DOWNSTREAM_CHOKE"}),"\n",(0,n.jsx)(s.li,{children:"UPSTREAM_CHOKE"}),"\n",(0,n.jsx)(s.li,{children:"INDIVIDUAL_ASV_PRESSURE"}),"\n",(0,n.jsx)(s.li,{children:"INDIVIDUAL_ASV_RATE"}),"\n",(0,n.jsx)(s.li,{children:"COMMON_ASV"}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"The sub-train where the pressure control is used, is now modeling wise equal to a single speed train as the speed is\ndetermined from the other sub-train. The inlet and outlet pressures for a sub-train, may be either the suction pressure\nand the interstage control pressure or interstage control pressure and the discharge pressure, depending on which sub\npart governs the speed of the full train."}),"\n",(0,n.jsxs)(s.p,{children:["See ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",children:"FIXED PRESSURE CONTROL"})," for more details."]}),"\n",(0,n.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS: \n - NAME: 1_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_1\n - NAME: 3_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_2\n - NAME: 2_stage_outlet\n TYPE: OUTGOING\n STAGES:\n - COMPRESSOR_CHART: 1_stage_chart\n INLET_TEMPERATURE: 20\n STREAM: \n - 1_stage_inlet\n - COMPRESSOR_CHART: 2_stage_chart \n INLET_TEMPERATURE: 30\n - COMPRESSOR_CHART: 3_stage_chart \n INLET_TEMPERATURE: 35\n STREAM: \n - 2_stage_outlet\n - 3_stage_inlet\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage\n - COMPRESSOR_CHART: 4_stage_chart \n INLET_TEMPERATURE: 15\n"})})]})}function m(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},9317:(e,s,r)=>{r.d(s,{Z:()=>n});const n=r.p+"assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png"},1151:(e,s,r)=>{r.d(s,{Z:()=>a,a:()=>i});var n=r(7294);const t={},o=n.createContext(t);function i(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4c3c1dc2.919c82cc.js b/assets/js/4c3c1dc2.919c82cc.js new file mode 100644 index 0000000000..669a64dd82 --- /dev/null +++ b/assets/js/4c3c1dc2.919c82cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6686],{9999:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>u,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var o=r(5893),s=r(1151);const t={},c="PRESSURE_CONTROL",l={id:"about/references/keywords/PRESSURE_CONTROL",title:"PRESSURE_CONTROL",description:"Description",source:"@site/docs/about/references/keywords/PRESSURE_CONTROL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/PRESSURE_CONTROL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"POWER_ADJUSTMENT_CONSTANT",permalink:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT"},next:{title:"PUMPS",permalink:"/ecalc/docs/about/references/keywords/PUMPS"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"pressure_control",children:"PRESSURE_CONTROL"}),"\n",(0,o.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"PRESSURE_CONTROL"})," is required when a compressor model is defined. This dictates how the compressor will be controlled, the method for pressure control are as follows:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"DOWNSTREAM_CHOKE (default)"}),"\n",(0,o.jsx)(n.li,{children:"UPSTREAM_CHOKE"}),"\n",(0,o.jsx)(n.li,{children:"INDIVIDUAL_ASV_PRESSURE"}),"\n",(0,o.jsx)(n.li,{children:"INDIVIDUAL_ASV_RATE"}),"\n",(0,o.jsx)(n.li,{children:"COMMON_ASV"}),"\n",(0,o.jsx)(n.li,{children:"NONE"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Further description on how each pressure control method works can be found in ",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",children:"COMPRESSOR MODELLING"})]}),"\n",(0,o.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: <compressor model type>\n ...\n PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE, COMMON_ASV or NONE>\n"})}),"\n",(0,o.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: variable_compressor\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n ...\n PRESSURE_CONTROL: INDIVIDUAL_ASV_PRESSURE\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>l,a:()=>c});var o=r(7294);const s={},t=o.createContext(s);function c(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4da8ac19.7a0c3adf.js b/assets/js/4da8ac19.7a0c3adf.js new file mode 100644 index 0000000000..8151d4710d --- /dev/null +++ b/assets/js/4da8ac19.7a0c3adf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6038],{4571:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>t,default:()=>E,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var r=s(5893),c=s(1151);const o={},t="EFFICIENCY",i={id:"about/references/keywords/EFFICIENCY",title:"EFFICIENCY",description:"Description",source:"@site/docs/about/references/keywords/EFFICIENCY.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EFFICIENCY",permalink:"/ecalc/docs/about/references/keywords/EFFICIENCY",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EFFICIENCY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"DOWNSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL"},next:{title:"ELECTRICITY2FUEL",permalink:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"COMPRESSORS",id:"compressors",level:3},{value:"PUMPS",id:"pumps",level:3},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,c.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"efficiency",children:"EFFICIENCY"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"EFFICIENCY"})," is a keyword that is used defining ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"PUMP"})," and ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"COMPRESSOR CHARTS"}),".\nEfficiency can either be given as a fraction or percentage."]}),"\n",(0,r.jsxs)(n.p,{children:["For compressors, it is used in two separate ways under the ",(0,r.jsx)(n.code,{children:"MODELS"})," or section:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Defining the ",(0,r.jsx)(n.code,{children:"UNITS"})," of ",(0,r.jsx)(n.code,{children:"EFFICIENCY"})]}),"\n",(0,r.jsxs)(n.li,{children:["Defining the set of values for ",(0,r.jsx)(n.code,{children:"EFFICIENCY"})," under ",(0,r.jsx)(n.code,{children:"CURVES"})," section. Here, this ",(0,r.jsx)(n.strong,{children:"must"})," be given as a set of values whose length (number of variables) match the correlating ",(0,r.jsx)(n.code,{children:"HEAD"})," and ",(0,r.jsx)(n.code,{children:"RATE"})," values."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For pumps, it is defined under the ",(0,r.jsx)(n.code,{children:"FACILITY_INPUTS"})," section."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.h3,{id:"compressors",children:"COMPRESSORS"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <compressor chart name>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: <compressor chart type>\n UNITS:\n ...\n EFFICIENCY: <FRACTION or PERCENTAGE>\n CURVES:\n ...\n EFFICIENCY: <set of values>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"pumps",children:"PUMPS"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: <FACILITY_INPUT_NAME>\n FILE: <path_to_file.csv>\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n ...\n EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n"})})]})}function E(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>i,a:()=>t});var r=s(7294);const c={},o=r.createContext(c);function t(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:t(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4ee97ba8.5e12f8d7.js b/assets/js/4ee97ba8.5e12f8d7.js new file mode 100644 index 0000000000..27efe2e539 --- /dev/null +++ b/assets/js/4ee97ba8.5e12f8d7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1668],{9158:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>l,frontMatter:()=>c,metadata:()=>s,toc:()=>d});var o=n(5893),r=n(1151);const c={title:"Reference documentation",sidebar_position:999,description:"Getting started with eCalc"},i=void 0,s={id:"about/references/index",title:"Reference documentation",description:"Getting started with eCalc",source:"@site/docs/about/references/index.md",sourceDirName:"about/references",slug:"/about/references/",permalink:"/ecalc/docs/about/references/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/index.md",tags:[],version:"current",sidebarPosition:999,frontMatter:{title:"Reference documentation",sidebar_position:999,description:"Getting started with eCalc"},sidebar:"about",previous:{title:"Drogon model",permalink:"/ecalc/docs/about/modelling/examples/drogon"},next:{title:"YAML keywords",permalink:"/ecalc/docs/about/references/keywords/"}},a={},d=[];function u(e){return(0,o.jsx)(o.Fragment,{})}function l(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u()}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>i});var o=n(7294);const r={},c=o.createContext(r);function i(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/502e1773.6da73989.js b/assets/js/502e1773.6da73989.js new file mode 100644 index 0000000000..a6e7982b4f --- /dev/null +++ b/assets/js/502e1773.6da73989.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2693],{56:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>i,contentTitle:()=>c,default:()=>m,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var s=n(5893),o=n(1151);const t={},c="CONTROL_MARGIN_UNIT",a={id:"about/references/keywords/CONTROL_MARGIN_UNIT",title:"CONTROL_MARGIN_UNIT",description:"MODELS /",source:"@site/docs/about/references/keywords/CONTROL_MARGIN_UNIT.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONTROL_MARGIN_UNIT",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONTROL_MARGIN_UNIT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONTROL_MARGIN",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN"},next:{title:"CROSSOVER",permalink:"/ecalc/docs/about/references/keywords/CROSSOVER"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3}];function d(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"control_margin_unit",children:"CONTROL_MARGIN_UNIT"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/STAGES",children:"STAGES"})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["This keyword defines the unit of the ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN",children:"surge control margin"})," for a variable speed compressor chart."]}),"\n",(0,s.jsxs)(r.p,{children:["The ",(0,s.jsx)(r.code,{children:"CONTROL_MARGIN_UNIT"})," is given as a percentage or fraction of the rate difference between minimum- and maximum flow."]}),"\n",(0,s.jsxs)(r.p,{children:["It is defined when setting up the stages in a ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:"Variable speed compressor train model"})," or ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,s.jsx)(r.p,{children:"It is currently only possible to define a surge control margin for variable speed compressors."}),"\n",(0,s.jsxs)(r.p,{children:["See ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"Surge control margin for variable speed compressor chart"})," for more details."]}),"\n",(0,s.jsx)(r.h3,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Default value is zero>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n ....\n"})}),"\n",(0,s.jsx)(r.h3,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 20\n COMPRESSOR_CHART: 1_stage_chart\n CONTROL_MARGIN: 0.1\n CONTROL_MARGIN_UNIT: FRACTION\n ....\n"})})]})}function m(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>c});var s=n(7294);const o={},t=s.createContext(o);function c(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/51ad0f66.a3936ebe.js b/assets/js/51ad0f66.a3936ebe.js new file mode 100644 index 0000000000..b6ce682cbc --- /dev/null +++ b/assets/js/51ad0f66.a3936ebe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5713],{6778:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>c,metadata:()=>d,toc:()=>i});var s=n(5893),t=n(1151);const c={},o="EMISSION_RATE",d={id:"about/references/keywords/EMISSION_RATE",title:"EMISSION_RATE",description:"Deprecated from eCalc v8.8 (is included in EMISSION).",source:"@site/docs/about/references/keywords/EMISSION_RATE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMISSION_RATE",permalink:"/ecalc/docs/about/references/keywords/EMISSION_RATE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMISSION_RATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMISSION_NAME",permalink:"/ecalc/docs/about/references/keywords/EMISSION_NAME"},next:{title:"EMITTER_MODEL",permalink:"/ecalc/docs/about/references/keywords/EMITTER_MODEL"}},a={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"emission_rate",children:"EMISSION_RATE"}),"\n",(0,s.jsx)("span",{className:"major-change-deprecation",children:(0,s.jsxs)(r.p,{children:["Deprecated from eCalc v8.8 (is included in ",(0,s.jsx)("strong",{children:"EMISSION"}),")."]})}),"\n",(0,s.jsx)("br",{}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})," /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMISSION_RATE",children:"EMISSION_RATE"})]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Required"}),(0,s.jsx)(r.th,{children:"Child of"}),(0,s.jsx)(r.th,{children:"Children/Options"})]})}),(0,s.jsx)(r.tbody,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Yes"}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"EMITTER_MODEL"})}),(0,s.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["Used to define the emission rate for some ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})," types\nusing an ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EXPRESSION",children:"Expressions"})]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"EMISSION_RATE: <emission rate [kg/day] expression or time series>\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"EMISSION_RATE: 10.0 # [kg/day]\n"})})]})}function h(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>o});var s=n(7294);const t={},c=s.createContext(t);function o(e){const r=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/54094f37.b8d43f63.js b/assets/js/54094f37.b8d43f63.js new file mode 100644 index 0000000000..546336733e --- /dev/null +++ b/assets/js/54094f37.b8d43f63.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3172],{655:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>o,contentTitle:()=>d,default:()=>E,frontMatter:()=>c,metadata:()=>a,toc:()=>i});var s=n(5893),t=n(1151);const c={},d="EMITTER_MODEL",a={id:"about/references/keywords/EMITTER_MODEL",title:"EMITTER_MODEL",description:"Deprecated from eCalc v8.8 (replaced by EMISSION).",source:"@site/docs/about/references/keywords/EMITTER_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMITTER_MODEL",permalink:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMITTER_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMISSION_RATE",permalink:"/ecalc/docs/about/references/keywords/EMISSION_RATE"},next:{title:"END",permalink:"/ecalc/docs/about/references/keywords/END"}},o={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"emitter_model",children:"EMITTER_MODEL"}),"\n",(0,s.jsx)("span",{className:"major-change-deprecation",children:(0,s.jsxs)(r.p,{children:["Deprecated from eCalc v8.8 (replaced by ",(0,s.jsx)("strong",{children:"EMISSION"}),")."]})}),"\n",(0,s.jsx)("br",{}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Required"}),(0,s.jsx)(r.th,{children:"Child of"}),(0,s.jsx)(r.th,{children:"Children/Options"})]})}),(0,s.jsx)(r.tbody,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"No"}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"VENTING_EMITTERS"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"EMISSION_RATE"})})]})})]}),"\n",(0,s.jsx)(r.admonition,{type:"important",children:(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["eCalc version 8.8: ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})," is deprecated, and replaced by new ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMISSION",children:"EMISSION"})," keyword."]}),"\n",(0,s.jsxs)(r.li,{children:["eCalc version 8.7: ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})," keyword is replacing the ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",children:"DIRECT_EMITTERS"})," keyword."]}),"\n",(0,s.jsx)(r.li,{children:"eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before."}),"\n"]})}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(r.p,{children:"The emitter model specifies the data to calculate the direct emissions on an installation. This data is used to set up\na function that may be evaluated for a set of time series and return an emission result."}),"\n",(0,s.jsxs)(r.p,{children:["The ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMISSION_RATE",children:"EMISSION_RATE"})," describes the rate [kg/day] of emissions, and is required."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"EMITTER_MODEL:\n - EMISSION_RATE: <emission rate [kg/day]>\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"EMITTER_MODEL:\n - EMISSION_RATE: 4 # [kg/day]\n"})})]})}function E(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>d});var s=n(7294);const t={},c=s.createContext(t);function d(e){const r=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),s.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/54d7341e.1a1a4e8a.js b/assets/js/54d7341e.1a1a4e8a.js new file mode 100644 index 0000000000..f3c037a6d6 --- /dev/null +++ b/assets/js/54d7341e.1a1a4e8a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[510],{7379:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>_,frontMatter:()=>t,metadata:()=>c,toc:()=>E});var r=s(5893),o=s(1151);const t={},i="MAXIMUM_PRESSURE_RATIO_PER_STAGE",c={id:"about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE",title:"MAXIMUM_PRESSURE_RATIO_PER_STAGE",description:"MODELS /",source:"@site/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"MAXIMUM_DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE"},next:{title:"MODELS",permalink:"/ecalc/docs/about/references/keywords/MODELS"}},a={},E=[{value:"Description",id:"description",level:2},{value:"Functionality",id:"functionality",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"maximum_pressure_ratio_per_stage",children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE",children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"})]}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"})," is used in the process of determining (at run time) the number of compressors\nin a ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"}),"\nwith unknown stages. The number of compressors is set such that there are just enough compressors to ensure no pressure ratios are above the given\n",(0,r.jsx)(n.code,{children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"functionality",children:"Functionality"}),"\n",(0,r.jsxs)(n.p,{children:["This is an optional setting and is ",(0,r.jsx)(n.strong,{children:"only"})," supported for ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"})," with unknown stages, i.e. if ",(0,r.jsx)(n.code,{children:"STAGES"})," are not specified."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in [MODELS]>\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: <maximum pressure ratio per stage>\n COMPRESSOR_CHART: <reference to compressor chart model used for all stages, must be defined in [MODELS] or [FACILITY_INPUTS]>\n INLET_TEMPERATURE: <inlet temperature for all stages>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n ...\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: some_fluid_model\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5\n COMPRESSOR_CHART: some_compressor_chart\n INLET_TEMPERATURE: 30\n ...\n"})})]})}function _(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>i});var r=s(7294);const o={},t=r.createContext(o);function i(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5525.97a2f6fd.js b/assets/js/5525.97a2f6fd.js new file mode 100644 index 0000000000..091be103fd --- /dev/null +++ b/assets/js/5525.97a2f6fd.js @@ -0,0 +1 @@ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5525],{5525:()=>{}}]); \ No newline at end of file diff --git a/assets/js/55960ee5.157a89b5.js b/assets/js/55960ee5.157a89b5.js new file mode 100644 index 0000000000..9ac577c218 --- /dev/null +++ b/assets/js/55960ee5.157a89b5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4121],{8070:e=>{e.exports=JSON.parse('[{"label":"release","permalink":"/ecalc/docs/tags/release","count":18},{"label":"eCalc","permalink":"/ecalc/docs/tags/e-calc","count":18}]')}}]); \ No newline at end of file diff --git a/assets/js/577efb1d.c28ef874.js b/assets/js/577efb1d.c28ef874.js new file mode 100644 index 0000000000..8df7eb15f0 --- /dev/null +++ b/assets/js/577efb1d.c28ef874.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[628],{6095:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>l,frontMatter:()=>t,metadata:()=>a,toc:()=>d});var o=r(5893),s=r(1151);const t={},c="STREAM",a={id:"about/references/keywords/STREAM",title:"STREAM",description:"MODELS /",source:"@site/docs/about/references/keywords/STREAM.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/STREAM",permalink:"/ecalc/docs/about/references/keywords/STREAM",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/STREAM.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"START",permalink:"/ecalc/docs/about/references/keywords/START"},next:{title:"STREAMS",permalink:"/ecalc/docs/about/references/keywords/STREAMS"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function S(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"stream",children:"STREAM"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] / ",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STAGES",children:"STAGES"}),"\n",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STREAMS",children:"STREAMS"})]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["This keyword is not to be confused with ",(0,o.jsx)(n.code,{children:"STREAMS"})," - which is also utilised for ",(0,o.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})]})}),"\n",(0,o.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,o.jsxs)(n.p,{children:["This keyword can ",(0,o.jsx)(n.strong,{children:"only"})," be utilised for a ",(0,o.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})," model type and is used under the ",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STAGES",children:"STAGES"})," keyword."]}),"\n",(0,o.jsxs)(n.p,{children:["This is used to refer a ",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STAGES",children:"STAGE"})," to a previously defined ",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STREAMS",children:"STREAMS"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>\n - ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n"})}),"\n",(0,o.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n - COMPRESSOR_CHART: 1_stage_chart\n INLET_TEMPERATURE: 20\n STREAM: \n - 1_stage_inlet\n ...\n"})})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(S,{...e})}):S(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var o=r(7294);const s={},t=o.createContext(s);function c(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5989d566.c10564e2.js b/assets/js/5989d566.c10564e2.js new file mode 100644 index 0000000000..408a7a02a7 --- /dev/null +++ b/assets/js/5989d566.c10564e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1709],{8039:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>d,toc:()=>i});var s=n(5893),t=n(1151);const o={},c="EMISSIONS",d={id:"about/references/keywords/EMISSIONS",title:"EMISSIONS",description:"FUELTYPES /",source:"@site/docs/about/references/keywords/EMISSIONS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMISSIONS",permalink:"/ecalc/docs/about/references/keywords/EMISSIONS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMISSIONS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMISSION",permalink:"/ecalc/docs/about/references/keywords/EMISSION"},next:{title:"EMISSION_NAME",permalink:"/ecalc/docs/about/references/keywords/EMISSION_NAME"}},a={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"emissions",children:"EMISSIONS"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"})]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Required"}),(0,s.jsx)(r.th,{children:"Child of"}),(0,s.jsx)(r.th,{children:"Children/Options"})]})}),(0,s.jsx)(r.tbody,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"No"}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"FUEL_TYPES"})}),(0,s.jsxs)(r.td,{children:[(0,s.jsx)(r.code,{children:"FACTOR"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(r.code,{children:"NAME"})]})]})})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["In ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"})," one or more emissions related to the use of fuel is specified as\na list. Each emission entry is ",(0,s.jsx)(r.strong,{children:"required"})," to have a ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"})," and a ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FACTOR",children:"FACTOR"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"EMISSIONS:\n - NAME: <name>\n FACTOR: <factor>\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(r.p,{children:["For example, if you want to add CO",(0,s.jsx)("sub",{children:"2"})," emissions associated to the usage of a ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"}),"\nyou write the following:"]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"EMISSIONS:\n - NAME: CO2\n FACTOR: 2.5 # [kg/Sm3]\n"})})]})}function h(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>c});var s=n(7294);const t={},o=s.createContext(t);function c(e){const r=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5a5e553d.a052ee43.js b/assets/js/5a5e553d.a052ee43.js new file mode 100644 index 0000000000..0ccc6ed27b --- /dev/null +++ b/assets/js/5a5e553d.a052ee43.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1110],{3007:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>i,contentTitle:()=>c,default:()=>h,frontMatter:()=>d,metadata:()=>o,toc:()=>l});var n=t(5893),s=t(1151);const d={},c="EXTRAPOLATION",o={id:"about/references/keywords/EXTRAPOLATION",title:"EXTRAPOLATION",description:"TIMESERIES /",source:"@site/docs/about/references/keywords/EXTRAPOLATION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EXTRAPOLATION",permalink:"/ecalc/docs/about/references/keywords/EXTRAPOLATION",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EXTRAPOLATION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EXPRESSION",permalink:"/ecalc/docs/about/references/keywords/EXPRESSION"},next:{title:"FACILITY_INPUTS",permalink:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Example",id:"example",level:2}];function a(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h1,{id:"extrapolation",children:"EXTRAPOLATION"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," /\n",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EXTRAPOLATION",children:"EXTRAPOLATION"})]}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Required"}),(0,n.jsx)(r.th,{children:"Child of"}),(0,n.jsx)(r.th,{children:"Children/Options"})]})}),(0,n.jsx)(r.tbody,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"N/A"}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"TIME_SERIES"})}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"None"})})]})})]}),"\n",(0,n.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,n.jsx)(r.admonition,{type:"caution",children:(0,n.jsxs)(r.p,{children:["Only valid for ",(0,n.jsx)(r.code,{children:"TIME_SERIES"})," of ",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," ",(0,n.jsx)(r.code,{children:"MISCELLANEOUS"}),". For type\n",(0,n.jsx)(r.code,{children:"DEFAULT"})," the keyword is not supported as input, and the functionality is defaulted to ",(0,n.jsx)(r.code,{children:"False"}),"."]})}),"\n",(0,n.jsxs)(r.p,{children:["Defines whether the rates in the source should be set to 0 after the last time step (",(0,n.jsx)(r.code,{children:"False"}),"), or equal\nto value at last time step after the time interval (",(0,n.jsx)(r.code,{children:"True"}),")."]}),"\n",(0,n.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:"EXTRAPOLATION: <True/False>\n"})}),"\n",(0,n.jsx)(r.h3,{id:"requirements",children:"Requirements"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsxs)(r.th,{children:[(0,n.jsx)(r.code,{children:"TYPE"})," set to"]}),(0,n.jsxs)(r.th,{children:[(0,n.jsx)(r.code,{children:"EXTRAPOLATION"})," default"]})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"DEFAULT"})}),(0,n.jsxs)(r.td,{children:["always ",(0,n.jsx)(r.code,{children:"False"})]})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"MISCELLANEOUS"})}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"False"})})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,n.jsxs)(r.p,{children:["See the ",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," ",(0,n.jsx)(r.code,{children:"time_series_format"}),"."]})]})}function h(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},1151:(e,r,t)=>{t.d(r,{Z:()=>o,a:()=>c});var n=t(7294);const s={},d=n.createContext(s);function c(e){const r=n.useContext(d);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),n.createElement(d.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5c08a402.5b8ee9e1.js b/assets/js/5c08a402.5b8ee9e1.js new file mode 100644 index 0000000000..bf2477599a --- /dev/null +++ b/assets/js/5c08a402.5b8ee9e1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8846],{3135:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var t=i(5893),s=i(1151);const o={title:"v8.1 to v8.2",description:"v8.1 to v8.2 migration",sidebar_position:2},r="v8.1 to v8.2",l={id:"about/migration_guides/v8-1_to_v8-2",title:"v8.1 to v8.2",description:"v8.1 to v8.2 migration",source:"@site/docs/about/migration_guides/v8-1_to_v8-2.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8-1_to_v8-2",permalink:"/ecalc/docs/about/migration_guides/v8-1_to_v8-2",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8-1_to_v8-2.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"v8.1 to v8.2",description:"v8.1 to v8.2 migration",sidebar_position:2},sidebar:"about",previous:{title:"v8 to v8.1",permalink:"/ecalc/docs/about/migration_guides/v8_to_v81"},next:{title:"v8.2 to v8.3",permalink:"/ecalc/docs/about/migration_guides/v8-2_to_v8-3"}},a={},d=[{value:"Modelling",id:"modelling",level:2},{value:"YAML",id:"yaml",level:3},{value:"LTP",id:"ltp",level:4},{value:"Result",id:"result",level:2},{value:"Operational settings used is now 1-based",id:"operational-settings-used-is-now-1-based",level:3},{value:"Resampling of rates changed from forward filling to average rates",id:"resampling-of-rates-changed-from-forward-filling-to-average-rates",level:3},{value:"LTP .tsv file",id:"ltp-tsv-file",level:3},{value:"STP .tsv file",id:"stp-tsv-file",level:3},{value:"Emissions, structure and order",id:"emissions-structure-and-order",level:3},{value:"Behaviour",id:"behaviour",level:2},{value:"Conditions",id:"conditions",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"v81-to-v82",children:"v8.1 to v8.2"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#modelling",children:"Model changes"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#result",children:"Result changes"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#behaviour",children:"Behaviour"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"modelling",children:"Modelling"}),"\n",(0,t.jsx)(n.h3,{id:"yaml",children:"YAML"}),"\n",(0,t.jsx)(n.h4,{id:"ltp",children:"LTP"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Two new consumer categories are added: ",(0,t.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:(0,t.jsx)(n.code,{children:"HEATER"})})," and ",(0,t.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:(0,t.jsx)(n.code,{children:"BOILER"})})]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"result",children:"Result"}),"\n",(0,t.jsx)(n.h3,{id:"operational-settings-used-is-now-1-based",children:"Operational settings used is now 1-based"}),"\n",(0,t.jsxs)(n.p,{children:["Consumer systems will now refer to the first operational setting as ",(0,t.jsx)(n.strong,{children:"1"})," instead of ",(0,t.jsx)(n.strong,{children:"0"}),". ",(0,t.jsx)(n.strong,{children:"0"}),' means that "No setting was used", indicating that none of the operational settings was able to handle the stream. This will make it easier for users to find the corresponding operational setting that is/was active for the different timesteps.']}),"\n",(0,t.jsx)(n.h3,{id:"resampling-of-rates-changed-from-forward-filling-to-average-rates",children:"Resampling of rates changed from forward filling to average rates"}),"\n",(0,t.jsxs)(n.p,{children:["All calculations are performed on a global time vector, which is the union of all dates found in the\ninput resource files (csv files) where ",(0,t.jsx)(n.a,{href:"../references/keywords/INFLUENCE_TIME_VECTOR",children:"INFLUENCE_TIME_VECTOR"})," is set to\nTrue, dates found in the eCalc model yaml-file (temporal models), and dates in the requested output frequency."]}),"\n",(0,t.jsx)(n.p,{children:"If the global time vector and the dates in the requested output frequency does not coincide fully, a resampling of the\nresults needs to be performed. Previously this was done by simply picking the first\navailable rate in the time interval (forward filling). The rates are thought to be constant in a period between two\ndates, hence the forward filling will disconnect the rates and the cumulative volumes. This has now been changed to\ncalculating the average rate from all dates in the global time vector within a date range in the requested output\nfrequency, to keep the rate and cumulative consistent with each other. This average will take into\naccount the lengths of the periods and the regularity within each period. The figure below shows a comparison of how the\nresampling would previously have been done compared to how it is done now when making quarterly output from monthly results."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:i(7698).Z+"",width:"1790",height:"1116"})}),"\n",(0,t.jsx)(n.p,{children:"TLDR; this change will make it possible to use the rate output data (rate from a point in time) from eCalc correctly."}),"\n",(0,t.jsx)(n.h3,{id:"ltp-tsv-file",children:"LTP .tsv file"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Column Total CO2 is removed from LTP output (both for fixed & mobile installations)"}),"\n",(0,t.jsxs)(n.li,{children:["Add relevant columns in ltp-file for the two new consumer categories ",(0,t.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:(0,t.jsx)(n.code,{children:"HEATER"})})," and ",(0,t.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:(0,t.jsx)(n.code,{children:"BOILER"})})]}),"\n",(0,t.jsx)(n.li,{children:"Re-order some of the columns in the ltp-file, for more logical order"}),"\n",(0,t.jsxs)(n.li,{children:["Turbine-columns are now filtered on the two consumer categories ",(0,t.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:(0,t.jsx)(n.code,{children:"TURBINE-GENERATOR"})})," and ",(0,t.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:(0,t.jsx)(n.code,{children:"GAS-DRIVEN-COMPRESSOR"})}),", as it is no longer only turbines that are consumers of FUEL-GAS"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"stp-tsv-file",children:"STP .tsv file"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Report CO2 emissions for both fixed- and mobile installations"}),"\n",(0,t.jsx)(n.li,{children:"Report CH4 emissions for fixed installations"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"emissions-structure-and-order",children:"Emissions, structure and order"}),"\n",(0,t.jsx)(n.p,{children:"The JSON result file has changed format for emissions. Emissions were previously listed in a list, but is now listed in a map:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:' # This is old\n "emissions":\n [\n {\n "name": "co2"\n ...\n'})}),"\n",(0,t.jsx)(n.p,{children:"to"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:' # This is new\n "emissions":\n {\n "co2":\n {\n "name": "co2"\n ...\n'})}),"\n",(0,t.jsx)(n.p,{children:"This will/may also affect the order of which emissions are presented in the result file, but should from now on be consistent."}),"\n",(0,t.jsx)(n.h2,{id:"behaviour",children:"Behaviour"}),"\n",(0,t.jsx)(n.h2,{id:"conditions",children:"Conditions"}),"\n",(0,t.jsxs)(n.p,{children:["eCalc will now consistently NOT evaluate and run calculations if a ",(0,t.jsx)(n.a,{href:"../references/keywords/CONDITION",children:"CONDITION"}),' is not fulfilled. Conditions can be set on most energy consumers, to indicate whether the consumer is active or not at a given timestep. Previously the consumer was evaluated even though a condition was not fulfilled to reflect "what would have happened if it was active". However this has proven to be difficult for users to understand and remember when the overall model result is being evaluated and analyzed. In order to prevent user errors, we have decided to consistently ',(0,t.jsx)(n.strong,{children:"NOT"})," evaluate a consumer for timesteps where it is disabled (conditions evaluated to true)."]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},7698:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png"},1151:(e,n,i)=>{i.d(n,{Z:()=>l,a:()=>r});var t=i(7294);const s={},o=t.createContext(s);function r(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5c8ec56d.f43991ba.js b/assets/js/5c8ec56d.f43991ba.js new file mode 100644 index 0000000000..6e07b3f31c --- /dev/null +++ b/assets/js/5c8ec56d.f43991ba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4070],{959:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>a,contentTitle:()=>n,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var r=o(5893),i=o(1151);const t={sidebar_position:2,description:"Compressor modelling"},n="Compressor modelling",l={id:"about/modelling/setup/models/compressor_modelling/index",title:"Compressor modelling",description:"Compressor modelling",source:"@site/docs/about/modelling/setup/models/compressor_modelling/index.md",sourceDirName:"about/modelling/setup/models/compressor_modelling",slug:"/about/modelling/setup/models/compressor_modelling/",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Compressor modelling"},sidebar:"about",previous:{title:"Fluid model",permalink:"/ecalc/docs/about/modelling/setup/models/fluid_model"},next:{title:"Compressor charts",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"}},a={},d=[];function c(e){const s={a:"a",code:"code",h1:"h1",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"compressor-modelling",children:"Compressor modelling"}),"\n",(0,r.jsx)(s.p,{children:"Compressors may be single speed or variable speed, they may be stand-alone or there may be multiple compressors mounted\non a common shaft (compressor train), they may be run with an electric motor or be driven by a turbine coupled\ndirectly to the shaft, there may be one or many compressors/compressor trains in parallel connected to a common\nmanifold from which the gas is distributed between these in different operational settings."}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{src:o(3960).Z+"",width:"1049",height:"438"})}),"\n",(0,r.jsx)(s.p,{children:"In eCalc\u2122, single compressors and compressor trains are modeled the same way, a single compressor is just a train with\njust one stage. There are multiple modeling options for compressor trains:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",children:(0,r.jsx)(s.code,{children:"Sampled compressor model"})}),": The compressor model is setup in an external tool, and this model is sampled by\nrunning a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a csv file and input to eCalc\u2122. Note, this is ",(0,r.jsx)(s.strong,{children:"not"})," inputted in the ",(0,r.jsx)(s.code,{children:"MODELS"})," section, rather in the ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY_INPUTS"})," section"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:(0,r.jsx)(s.code,{children:"Single speed compressor train model"})}),": The compressor train modeling is done in eCalc\u2122. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage. In addition, since the speed is fixed, defining a pressure control method is required. This pressure control is used to meet the required discharge pressure."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:(0,r.jsx)(s.code,{children:"Variable speed compressor train model"})}),": The compressor train modelling is done in eCalc\u2122. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:(0,r.jsx)(s.code,{children:"Simplified variable speed compressor train model"})}),": Model the same compressor train as the above, but is more\nlightweight in that instead of iterating to meet the requested discharge pressure, it assumes all stages has equal\npressure fractions and solves for each stage independently. As the shaft speed is not used in the calculations, this\nmodel supports using generic compressor charts, see the ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:(0,r.jsx)(s.code,{children:"Compressor charts"})})," section."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:(0,r.jsx)(s.code,{children:"Variable speed compressor train model with multiple streams and pressures"})}),": This is a more complex model, where it is\npossible to define fluid streams going in and out at different stages in the compressor train. Also, an additional\npressure requirement may be specified between two stages. This model is suitable in cases where for example a part of\nthe fluid stream is taken out after one stage at a specified pressure for export, and the rest is further compressed\nfor injection at a higher pressure."]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["Core theory behind the modelling of compressors in eCalc\u2122 can be found ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/theory/compressor_modelling",children:"here"}),"."]})]})}function m(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},3960:(e,s,o)=>{o.d(s,{Z:()=>r});const r=o.p+"assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png"},1151:(e,s,o)=>{o.d(s,{Z:()=>l,a:()=>n});var r=o(7294);const i={},t=r.createContext(i);function n(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:n(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e10e9e1.dbc2223c.js b/assets/js/5e10e9e1.dbc2223c.js new file mode 100644 index 0000000000..8185ada088 --- /dev/null +++ b/assets/js/5e10e9e1.dbc2223c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[443],{4021:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var s=t(5893),a=t(1151);const i={title:"Tabular models",sidebar_position:4,description:"Using tabular models in calculations"},o=void 0,l={id:"about/modelling/setup/installations/tabular_models_in_calculations",title:"Tabular models",description:"Using tabular models in calculations",source:"@site/docs/about/modelling/setup/installations/tabular_models_in_calculations.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/tabular_models_in_calculations",permalink:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/tabular_models_in_calculations.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Tabular models",sidebar_position:4,description:"Using tabular models in calculations"},sidebar:"about",previous:{title:"Variable speed compressor train multiple streams and pressures",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},next:{title:"Direct consumers",permalink:"/ecalc/docs/about/modelling/setup/installations/direct_consumers"}},r={},c=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"COMPRESSOR_TABULAR input type",id:"compressor_tabular-input-type",level:2}];function u(e){const n={a:"a",code:"code",h2:"h2",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"This type is a pure interpolation model where the user may freely choose all the variables. No extrapolation is done, thus the user\nmust ensure to cover the entire variable space in the input data. For points outside the input data, the output is\ninvalid and no energy usage is given (shown in the output vector extrapolations)."}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n CONDITION: <condition expression>\n ENERGYFUNCTION: <reference to energy function in facility inputs of type tabular>\n VARIABLES:\n - NAME: <name of variable>\n EXPRESSION: <expression defining the variable>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: tabulated_energy_function_reference\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_PROD\n - NAME: Gas oil ratio\n EXPRESSION: SIM1;GOR\n - NAME: GAS_TEMPERATURE\n EXPRESSION: SIM1;TEMP\n"})}),"\n",(0,s.jsx)(n.h2,{id:"compressor_tabular-input-type",children:"COMPRESSOR_TABULAR input type"}),"\n",(0,s.jsx)(n.p,{children:"Consumer energy function for the compressor (or compressor train) is in a tabulated format,\nwhere each line is a point defining the energy consumption for the given variables."}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",children:"Sampled compressor model"})," for details."]}),"\n",(0,s.jsx)(n.p,{children:"As a single compressor/compressor train (no system), it can be set up in the following way:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: <facility_inputs_key>\n RATE: <rate expression [Sm3/day]>\n SUCTION_PRESSURE: <suction pressure expression>\n DISCHARGE_PRESSURE: <discharge pressure expression>\n"})})]})}function d(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>o});var s=t(7294);const a={},i=s.createContext(a);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e3ed04b.b32bf413.js b/assets/js/5e3ed04b.b32bf413.js new file mode 100644 index 0000000000..2542fa237c --- /dev/null +++ b/assets/js/5e3ed04b.b32bf413.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2205],{5502:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var s=n(5893),r=n(1151);const i={},c="FACILITY_INPUTS",d={id:"about/references/keywords/FACILITY_INPUTS",title:"FACILITY_INPUTS",description:"FACILITYINPUTS",source:"@site/docs/about/references/keywords/FACILITY_INPUTS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FACILITY_INPUTS",permalink:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FACILITY_INPUTS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EXTRAPOLATION",permalink:"/ecalc/docs/about/references/keywords/EXTRAPOLATION"},next:{title:"FACTOR",permalink:"/ecalc/docs/about/references/keywords/FACTOR"}},o={},l=[{value:"Description",id:"description",level:2},{value:"Supported types",id:"supported-types",level:2}];function a(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"facility_inputs",children:"FACILITY_INPUTS"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Child of"}),(0,s.jsx)(t.th,{children:"Children/Options"})]})}),(0,s.jsx)(t.tbody,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"None"}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.code,{children:"ADJUSTMENT"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(t.code,{children:"FILE"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(t.code,{children:"HEAD_MARGIN"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(t.code,{children:"TYPE"})]})]})})]}),"\n",(0,s.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(t.p,{children:["This part of the setup defines input files that characterize various facility elements. Each facility element is\nspecified in a list. These are later used as input in the ",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup by referencing their\n",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["All facility inputs are in essence a ",(0,s.jsx)(t.code,{children:"CSV"})," (Comma separated file) file that specifies input data to a model that\ncalculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple\n",(0,s.jsx)(t.a,{href:"#supported-types",children:"supported types"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"supported-types",children:"Supported types"}),"\n",(0,s.jsxs)(t.p,{children:["The facility input type is defined using the ",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," keyword and defines the type of model applied\nto the data in this file. The input files are in ",(0,s.jsx)(t.code,{children:"CSV"})," (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file."]}),"\n",(0,s.jsx)(t.p,{children:"The supported types are:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"ELECTRICITY2FUEL"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"TABULAR"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"COMPRESSOR_TABULAR"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"PUMP_CHART_SINGLE_SPEED"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"PUMP_CHART_VARIABLE_SPEED"})}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["See ",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY INPUTS"})," for details about each of the above supported types and their usage."]})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>c});var s=n(7294);const r={},i=s.createContext(r);function c(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.19959f50.js b/assets/js/5e95c892.19959f50.js new file mode 100644 index 0000000000..eebb2a0c73 --- /dev/null +++ b/assets/js/5e95c892.19959f50.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9661],{1892:(e,s,n)=>{n.r(s),n.d(s,{default:()=>d});n(7294);var r=n(512),t=n(1944),u=n(5281),a=n(8790),c=n(8862),o=n(5893);function d(e){return(0,o.jsx)(t.FG,{className:(0,r.Z)(u.k.wrapper.docsPages),children:(0,o.jsx)(c.Z,{children:(0,a.H)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/60746895.892808be.js b/assets/js/60746895.892808be.js new file mode 100644 index 0000000000..44dd9a6579 --- /dev/null +++ b/assets/js/60746895.892808be.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8282],{3652:(e,t,d)=>{d.r(t),d.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>a,frontMatter:()=>s,metadata:()=>c,toc:()=>o});var n=d(5893),i=d(1151);const s={},r="Markdown",c={id:"contribute/documentation-guide/markdown",title:"Markdown",description:"Docusaurus uses standard Markdown syntax plus Docusaurus Extended Markdown functionality.",source:"@site/docs/contribute/documentation-guide/02-markdown.md",sourceDirName:"contribute/documentation-guide",slug:"/contribute/documentation-guide/markdown",permalink:"/ecalc/docs/contribute/documentation-guide/markdown",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/documentation-guide/02-markdown.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"contribute",previous:{title:"Overview",permalink:"/ecalc/docs/contribute/documentation-guide/documentation"},next:{title:"Guides",permalink:"/ecalc/docs/category/guides"}},l={},o=[{value:"Standard Markdown",id:"standard-markdown",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",del:"del",em:"em",h1:"h1",h2:"h2",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"markdown",children:"Markdown"}),"\n",(0,n.jsxs)(t.p,{children:["Docusaurus uses ",(0,n.jsx)(t.a,{href:"https://daringfireball.net/projects/markdown/syntax",children:"standard Markdown syntax"})," plus ",(0,n.jsx)(t.a,{href:"https://docusaurus.io/docs/next/markdown-features",children:"Docusaurus Extended Markdown"})," functionality."]}),"\n",(0,n.jsx)(t.h2,{id:"standard-markdown",children:"Standard Markdown"}),"\n",(0,n.jsx)(t.p,{children:"Here is a quick summary or standard Markdown syntax:"}),"\n",(0,n.jsx)(t.p,{children:"summary = md`"}),"\n",(0,n.jsx)(t.h1,{id:"markdown-summary",children:"Markdown summary"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Desired style"}),(0,n.jsx)(t.th,{children:"Use the following Markdown annotation"}),(0,n.jsx)(t.th,{children:"Produces the following sample HTML"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Heading 1"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"# Title"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<h1>Title</h1>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Heading 2"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"## Title"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<h2>Title</h2>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Heading 3"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"### Title"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<h3>Title</h3>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Heading 4"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"#### Title"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<h4>Title</h4>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Heading 5"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"##### Title"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<h5>Title</h5>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Heading 6"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"###### Title"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<h6>Title</h6>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Paragraph"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"Just start typing"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<p>Just start typing<p>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"Bold"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"**Text**"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<strong>Text</strong>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.em,{children:"Italic"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"*Text*"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<em>Text</em>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.del,{children:"Strike"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"~~Text~~"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<del>Text</del>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Quoted (indent)"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"> Text"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<blockquote><p>Text</p></blockquote>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.code,{children:"Code"})," (inline)"]}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"Statement"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<code>Statement</code>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.code,{children:"Code"})," (fenced)"]}),(0,n.jsxs)(t.td,{children:["Statement 1",(0,n.jsx)("br",{}),"Statement 2",(0,n.jsx)("br",{}),"Statement 3"]}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<pre><code><span>Statement 1</span><span>Statement 2</span><span>Statement 3</span></code></pre>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"List (unordered)"}),(0,n.jsxs)(t.td,{children:["* List item 1",(0,n.jsx)("br",{}),"* List item 2",(0,n.jsx)("br",{}),"* List item 3"]}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"List (ordered)"}),(0,n.jsxs)(t.td,{children:["1. List item 1",(0,n.jsx)("br",{}),"2. List item 2",(0,n.jsx)("br",{}),"3. List item 3"]}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Images"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"![Alternate text for image](path/to/image)"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:'<img src="path/image.jpg" alt="Alternative text for image>'})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Hyperlinks"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"[Link text](https://www.google.com/)"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:'<a href="https://www.google.com/">Link text</a>'})})]})]})]}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["You may want to escape special html characters using ",(0,n.jsx)(t.code,{children:"\\"}),", and replace the great than symbol with ",(0,n.jsx)(t.code,{children:"<"}),", otherwise Docusaurus\nwill confuse it with html code."]})})]})}function a(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},1151:(e,t,d)=>{d.d(t,{Z:()=>c,a:()=>r});var n=d(7294);const i={},s=n.createContext(i);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/61639be2.f98a3aa9.js b/assets/js/61639be2.f98a3aa9.js new file mode 100644 index 0000000000..b642304aad --- /dev/null +++ b/assets/js/61639be2.f98a3aa9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4075],{192:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>i,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var s=r(5893),o=r(1151);const t={},c="FUELCONSUMERS",a={id:"about/references/keywords/FUELCONSUMERS",title:"FUELCONSUMERS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/FUELCONSUMERS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FUELCONSUMERS",permalink:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FUELCONSUMERS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FUEL",permalink:"/ecalc/docs/about/references/keywords/FUEL"},next:{title:"FUELRATE",permalink:"/ecalc/docs/about/references/keywords/FUELRATE"}},d={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function E(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"fuelconsumers",children:"FUELCONSUMERS"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"})," keyword covers the fuel consumers on the installation\nthat are not generators. The attributes ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),",\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," and\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," are required, while\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL",children:"FUEL"})," is optional and may be used to\noverride the installation's default fuel type."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FUELCONSUMERS:\n - NAME: <consumer name>\n CATEGORY: <category>\n ENERGY_USAGE_MODEL: <energy usage model>\n FUEL: <fuel specification>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FUELCONSUMERS:\n - NAME: CompressorFuelConsumer\n CATEGORY: GAS-DRIVEN-COMPRESSOR\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n - NAME: FlareFuelConsumer\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n ...\n - NAME: SomeOtherFuelConsumer\n CATEGORY: MISCELLANEOUS\n FUEL: fuel_gas\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n"})})]})}function i(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(E,{...e})}):E(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var s=r(7294);const o={},t=s.createContext(o);function c(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/63ecd22d.ee70f411.js b/assets/js/63ecd22d.ee70f411.js new file mode 100644 index 0000000000..21af8c8262 --- /dev/null +++ b/assets/js/63ecd22d.ee70f411.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8980],{990:(t,o,e)=>{e.r(o),e.d(o,{assets:()=>c,contentTitle:()=>s,default:()=>v,frontMatter:()=>r,metadata:()=>a,toc:()=>u});var n=e(5893),i=e(1151);const r={title:"v8.6 to v8.7",description:"v8.6 to v8.7 migration",sidebar_position:6},s="v8.6 to v8.7",a={id:"about/migration_guides/v8-6_to_v8-7",title:"v8.6 to v8.7",description:"v8.6 to v8.7 migration",source:"@site/docs/about/migration_guides/v8-6_to_v8-7.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8-6_to_v8-7",permalink:"/ecalc/docs/about/migration_guides/v8-6_to_v8-7",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8-6_to_v8-7.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"v8.6 to v8.7",description:"v8.6 to v8.7 migration",sidebar_position:6},sidebar:"about",previous:{title:"v8.5 to v8.6",permalink:"/ecalc/docs/about/migration_guides/v8-5_to_v8-6"},next:{title:"v8.7 to v8.8",permalink:"/ecalc/docs/about/migration_guides/v8.7_to_v8.8"}},c={},u=[];function d(t){const o={code:"code",h1:"h1",p:"p",...(0,i.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.h1,{id:"v86-to-v87",children:"v8.6 to v8.7"}),"\n",(0,n.jsxs)(o.p,{children:["Change name from ",(0,n.jsx)(o.code,{children:"DIRECT_EMITTERS"})," to ",(0,n.jsx)(o.code,{children:"VENTING_EMITTERS"})," in the Yaml input-file."]})]})}function v(t={}){const{wrapper:o}={...(0,i.a)(),...t.components};return o?(0,n.jsx)(o,{...t,children:(0,n.jsx)(d,{...t})}):d(t)}},1151:(t,o,e)=>{e.d(o,{Z:()=>a,a:()=>s});var n=e(7294);const i={},r=n.createContext(i);function s(t){const o=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(o):{...o,...t}}),[o,t])}function a(t){let o;return o=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:s(t.components),n.createElement(r.Provider,{value:o},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/66286265.40f32996.js b/assets/js/66286265.40f32996.js new file mode 100644 index 0000000000..7c8aac1521 --- /dev/null +++ b/assets/js/66286265.40f32996.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[180],{9067:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var r=t(5893),a=t(1151);const s={title:"Tabular models",sidebar_position:4,description:"Tabular models"},i=void 0,o={id:"about/modelling/setup/facility_inputs/tabular",title:"Tabular models",description:"Tabular models",source:"@site/docs/about/modelling/setup/facility_inputs/tabular.md",sourceDirName:"about/modelling/setup/facility_inputs",slug:"/about/modelling/setup/facility_inputs/tabular",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/tabular",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/tabular.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Tabular models",sidebar_position:4,description:"Tabular models"},sidebar:"about",previous:{title:"Sampled compressor model",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model"},next:{title:"Models",permalink:"/ecalc/docs/about/modelling/setup/models/"}},l={},d=[{value:"Header and unit requirements",id:"header-and-unit-requirements",level:2},{value:"Example",id:"example",level:3},{value:"1D tabular energy function",id:"1d-tabular-energy-function",level:4},{value:"3D tabular energy function",id:"3d-tabular-energy-function",level:4}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["Additional equipment that are considered to be energy consumers can be specified using the keyword ",(0,r.jsx)(n.code,{children:"TABULAR"}),".\nThis is given that a form of reservoir rates (oil/gas production) can be linked to either fuel or power consumption."]}),"\n",(0,r.jsx)(n.p,{children:"This is considered to be a consumer energy function for pure barycentric interpolation, no extrapolation outside\nconvex area. One column defines the function value, the rest of the columns defines the\nvariables for a 1D (if one variable column) or multidimensional interpolation."}),"\n",(0,r.jsx)(n.h2,{id:"header-and-unit-requirements",children:"Header and unit requirements"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Header"}),(0,r.jsx)(n.th,{children:"Unit"}),(0,r.jsx)(n.th,{children:"Comment"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Power"}),(0,r.jsx)(n.td,{children:"MW"}),(0,r.jsx)(n.td,{children:"For power driven consumers"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Fuel"}),(0,r.jsxs)(n.td,{children:["Sm",(0,r.jsx)("sup",{children:"3"}),"/day"]}),(0,r.jsx)(n.td,{children:"For fuel (turbine) driven consumers"})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"Variable headers can be chosen freely as long as these correspond to the defined variables for the function."}),"\n",(0,r.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.h4,{id:"1d-tabular-energy-function",children:"1D tabular energy function"}),"\n",(0,r.jsxs)(n.p,{children:["Contents of the file ",(0,r.jsx)(n.code,{children:"energyfunc_1d_rate_fuel.csv"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"RATE, FUEL\n0, 0\n1, 137750\n1000000, 137750\n2000000, 145579\n3000000, 153335\n4000000, 161022\n5000000, 168644\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The entry in ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: gasinjectiondata\n FILE: energyfunc_1d_rate_fuel.csv\n TYPE: TABULAR\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The entry in ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," under a fuel consumer:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n ....\n - NAME: gasinjection\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: gasinjectiondata\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_INJ # [Sm3/day]\n"})}),"\n",(0,r.jsx)(n.admonition,{title:"Note",type:"note",children:(0,r.jsxs)(n.p,{children:["Note that the name ",(0,r.jsx)(n.code,{children:"RATE"})," in the input file (under ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY_INPUT"}),") and the variable name ",(0,r.jsx)(n.code,{children:"RATE"})," under ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"}),"\nmust be equal!"]})}),"\n",(0,r.jsx)(n.h4,{id:"3d-tabular-energy-function",children:"3D tabular energy function"}),"\n",(0,r.jsxs)(n.p,{children:["Contents of file ",(0,r.jsx)(n.code,{children:"energyfunc_3d_rate_ps_pd_power.csv"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:" RATE, SUCTION_PRESSURE, DISCHARGE_PRESSURE, POWER\n# [Sm3/d], [bar], [bar], [MW]\n 1.00E+06, 10, 12.72, 0.3664\n 1.00E+06, 10, 26.21, 2.293\n 1.00E+06, 26, 31.36, 0.2739\n 1.00E+06, 26, 70.77, 6.28\n 1.00E+06, 34, 41.21, 0.368\n 1.00E+06, 34, 94.24, 8.435\n 1.00E+06, 78, 94.12, 0.7401\n 1.00E+06, 78, 231.6, 22.46\n 6.00E+06, 26, 36.93, 4.197\n 6.00E+06, 26, 57.43, 7.32\n 6.00E+06, 38, 46.96, 2.156\n 6.00E+06, 38, 106.2, 9.557\n 6.00E+06, 54, 67.26, 1.95\n 6.00E+06, 54, 155.6, 14.35\n 6.00E+06, 78, 94.17, 1.399\n 6.00E+06, 78, 231.6, 22.46\n 1.10E+07, 42, 66.92, 9.712\n 1.10E+07, 42, 81.63, 11.89\n 1.10E+07, 62, 75.64, 3.678\n 1.10E+07, 62, 180.8, 16.94\n 1.10E+07, 78, 97.79, 3.452\n 1.10E+07, 78, 231.6, 22.46\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The entry in ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: booster\n FILE: energyfunc_3d_rate_ps_pd_power.csv\n TYPE: TABULAR\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The entry in ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," under a fuel consumer (for 3-d tabular):"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n ...\n - NAME: gasexport\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: booster\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_SALES # [Sm3/day]\n - NAME: SUCTION_PRESSURE\n EXPRESSION: SIM1;SUCTION_PRESSURE {+} 3 # [bara]\n - NAME: DISCHARGE_PRESSURE\n EXPRESSION: 100 # [bara]\n"})})]})}function u(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>i});var r=t(7294);const a={},s=r.createContext(a);function i(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/66a649c0.e07ee967.js b/assets/js/66a649c0.e07ee967.js new file mode 100644 index 0000000000..b03876e600 --- /dev/null +++ b/assets/js/66a649c0.e07ee967.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3240],{6262:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>d});var o=s(5893),n=s(1151);const t={},c="CROSSOVER",i={id:"about/references/keywords/CROSSOVER",title:"CROSSOVER",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CROSSOVER.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CROSSOVER",permalink:"/ecalc/docs/about/references/keywords/CROSSOVER",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CROSSOVER.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONTROL_MARGIN_UNIT",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT"},next:{title:"CURVE",permalink:"/ecalc/docs/about/references/keywords/CURVE"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.h1,{id:"crossover",children:"CROSSOVER"}),"\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] / ",(0,o.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,o.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",children:"OPERATIONAL_SETTINGS"})," / ",(0,o.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL",children:"CROSSOVER"})]}),"\n",(0,o.jsxs)(r.table,{children:[(0,o.jsx)(r.thead,{children:(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.th,{children:"Required"}),(0,o.jsx)(r.th,{children:"Child of"}),(0,o.jsx)(r.th,{children:"Children/Options"})]})}),(0,o.jsx)(r.tbody,{children:(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:"Yes"}),(0,o.jsx)(r.td,{children:(0,o.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",children:"OPERATIONAL_SETTINGS"})}),(0,o.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,o.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.code,{children:"CROSSOVER"}),' specifies what rates will be crossed over from one consumer to another if rate capacity is exceed.\nIf the energy consumption calculation is not successful for a consumer, and the consumer has a valid cross-over defined, the consumer will be allocated its maximum rate and the exceeding rate will be added to the cross-over consumer.\nTo avoid loops, a consumer can only be either receiving or giving away rate. For a cross-over to be valid, the discharge pressure at the consumer "receiving" overshooting rate must be higher than or equal to the discharge pressure of the "sending" consumer. This is because it is possible to choke pressure down to meet the outlet pressure in a flow line with lower pressure, but not possible to "pressure up" in the crossover flow line. Some examples show how the crossover logic works:']}),"\n",(0,o.jsx)(r.p,{children:"Crossover is given as and list of integer values for the first position is the first consumer, second position is the second consumer, etc. The number specifies which consumer to send cross-over flow to, and 0 signifies no cross-over possible. Note that we use 1-index here."}),"\n",(0,o.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,o.jsx)(r.pre,{children:(0,o.jsx)(r.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT\n OPERATIONAL_SETTINGS:\n ...\n CROSSOVER: [3, 3, 0]\n"})})]})}function h(e={}){const{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,o.jsx)(r,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},1151:(e,r,s)=>{s.d(r,{Z:()=>i,a:()=>c});var o=s(7294);const n={},t=o.createContext(n);function c(e){const r=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),o.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/676abc7a.3fa47bbb.js b/assets/js/676abc7a.3fa47bbb.js new file mode 100644 index 0000000000..5cdbd45b93 --- /dev/null +++ b/assets/js/676abc7a.3fa47bbb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5654],{577:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>a,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var s=t(5893),n=t(1151);const i={},d="TIME_SERIES",o={id:"about/references/keywords/TIME_SERIES",title:"TIME_SERIES",description:"TIMESERIES /",source:"@site/docs/about/references/keywords/TIME_SERIES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TIME_SERIES",permalink:"/ecalc/docs/about/references/keywords/TIME_SERIES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TIME_SERIES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"SUCTION_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE"},next:{title:"TOTAL_SYSTEM_RATE",permalink:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE"}},a={},c=[{value:"Description",id:"description",level:2},{value:"Required attributes",id:"required-attributes",level:3},{value:"Attributes dependent on time series type",id:"attributes-dependent-on-time-series-type",level:3},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"time_series",children:"TIME_SERIES"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," /"]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(r.p,{children:'This keyword defines the inputs for time dependent variables, or "reservoir\nvariables". For many fields, this may be only one reservoir simulation model. But in some\ncases, one might have several sources for reservoir and other relevant time series variables.'}),"\n",(0,s.jsxs)(r.p,{children:["For example, a field may have a reservoir simulation model for some areas and decline curves in other area of\nthe reservoir. There may also be tie-ins which are affecting the energy/emissions on the field\ninstallations. Also, there may be time profiles for other variables.\nTherefore, a set of sources may be specified with a name, path to data and type. The name is\nlater referred to in the system of energy consumers defined under ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["Reservoir variables and other time varying data not coming from a reservoir simulation model can\nbe specified in a ",(0,s.jsx)(r.a,{href:"https://en.wikipedia.org/wiki/Comma-separated_values",children:"CSV"})," file."]}),"\n",(0,s.jsx)(r.h3,{id:"required-attributes",children:"Required attributes"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Attributes"}),(0,s.jsx)(r.th,{children:"Description"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"})}),(0,s.jsx)(r.td,{children:"Reference name of time series"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})}),(0,s.jsx)(r.td,{children:"Time series type; DEFAULT or MISCELLANEOUS"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FILE",children:"FILE"})}),(0,s.jsx)(r.td,{children:"Path to input file"})]})]})]}),"\n",(0,s.jsx)(r.h3,{id:"attributes-dependent-on-time-series-type",children:"Attributes dependent on time series type"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{}),(0,s.jsx)(r.th,{children:"DEFAULT"}),(0,s.jsx)(r.th,{children:"MISCELLANEOUS"}),(0,s.jsx)(r.th,{children:"Description"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})}),(0,s.jsx)(r.td,{children:"RIGHT"}),(0,s.jsx)(r.td,{children:"Required: LEFT, RIGHT or LINEAR"}),(0,s.jsx)(r.td,{children:"Defines how rates are interpolated between the given time steps (LEFT/RIGHT/LINEAR)."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EXTRAPOLATION",children:"EXTRAPOLATION"})}),(0,s.jsx)(r.td,{children:"FALSE"}),(0,s.jsx)(r.td,{children:"Optional. Default: FALSE"}),(0,s.jsx)(r.td,{children:"Defines whether the rates in the source should be set to 0 after the last time step (FALSE), or equal to value at last time step after the time interval (TRUE)."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",children:"INFLUENCE_TIME_VECTOR"})}),(0,s.jsx)(r.td,{children:"Optional. Default: TRUE"}),(0,s.jsx)(r.td,{children:"Optional. Default: TRUE"}),(0,s.jsx)(r.td,{children:"Determine if time steps should contribute to global time vector. TRUE or FALSE. At least one time vector is required to be TRUE."})]})]})]}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: SIM1\n TYPE: DEFAULT\n FILE: /path_to_model1/model_data.csv\n - NAME: DATA2\n TYPE: MISCELLANEOUS # e.g. variable flare, compressor suction and discharge pressures\n FILE: inputs/somecsvdata.csv\n INFLUENCE_TIME_VECTOR: FALSE\n EXTRAPOLATION: TRUE\n INTERPOLATION_TYPE: RIGHT\n"})}),"\n",(0,s.jsxs)(r.p,{children:["See ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/time_series",children:"TIME SERIES"})," for more details about usage."]})]})}function h(e={}){const{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,r,t)=>{t.d(r,{Z:()=>o,a:()=>d});var s=t(7294);const n={},i=s.createContext(n);function d(e){const r=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),s.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/69fd9be6.e314faf1.js b/assets/js/69fd9be6.e314faf1.js new file mode 100644 index 0000000000..362f4320fc --- /dev/null +++ b/assets/js/69fd9be6.e314faf1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8570],{9364:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>t,metadata:()=>i,toc:()=>_});var o=r(5893),n=r(1151);const t={title:"Variable speed compressor train multiple streams and pressures",sidebar_position:3,description:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES Energy Usage Model"},a="VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model",i={id:"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",title:"Variable speed compressor train multiple streams and pressures",description:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES Energy Usage Model",source:"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",sourceDirName:"about/modelling/setup/installations/compressor_models_in_calculations",slug:"/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Variable speed compressor train multiple streams and pressures",sidebar_position:3,description:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES Energy Usage Model"},sidebar:"about",previous:{title:"Compressor system",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system"},next:{title:"Tabular models",permalink:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations"}},l={},_=[{value:"Format",id:"format",level:2}];function c(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h1,{id:"variable_speed_compressor_train_multiple_streams_and_pressures-energy-usage-model",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model"}),"\n",(0,o.jsxs)(s.p,{children:["This energy usage model allows the compressor train model type\n",(0,o.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,o.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-yaml",children:"NAME: <Reference name>\nTYPE: COMPRESSOR\nENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n CONDITION: <condition expression>\n COMPRESSOR_TRAIN_MODEL: <reference a Variable speed compressor train model with multiple streams and pressures model>\n RATE_PER_STREAM:\n - <Expression for stream 1>\n - <Expression for stream 2>\n - ...\n - <Expression for stream N>\n SUCTION_PRESSURE: <suction pressure expression>\n DISCHARGE_PRESSURE: <discharge pressure expression>\n INTERSTAGE_CONTROL_PRESSURE: <interstage control pressure expression>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n"})}),"\n",(0,o.jsxs)(s.p,{children:["The number of elements in ",(0,o.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM",children:"RATE_PER_STREAM"})," must correspond to the number of streams defined for the model referenced in\n",(0,o.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",children:"COMPRESSOR_TRAIN_MODEL"}),"."]}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})," is required if the model referenced in ",(0,o.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",children:"COMPRESSOR_TRAIN_MODEL"})," has has an\ninterstage control pressure defined. If there is no interstage control pressure defined in ",(0,o.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",children:"COMPRESSOR_TRAIN_MODEL"}),",\n",(0,o.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})," should not be defined."]})]})}function d(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},1151:(e,s,r)=>{r.d(s,{Z:()=>i,a:()=>a});var o=r(7294);const n={},t=o.createContext(n);function a(e){const s=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),o.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6adcc868.76866e35.js b/assets/js/6adcc868.76866e35.js new file mode 100644 index 0000000000..d59b5b94eb --- /dev/null +++ b/assets/js/6adcc868.76866e35.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8122],{6408:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>a,contentTitle:()=>l,default:()=>m,frontMatter:()=>t,metadata:()=>i,toc:()=>c});var n=o(5893),r=o(1151);const t={title:"Compressor system",sidebar_position:2,description:"COMPRESSOR_SYSTEM Energy Usage Model"},l="COMPRESSOR_SYSTEM energy usage model",i={id:"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",title:"Compressor system",description:"COMPRESSOR_SYSTEM Energy Usage Model",source:"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system.md",sourceDirName:"about/modelling/setup/installations/compressor_models_in_calculations",slug:"/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Compressor system",sidebar_position:2,description:"COMPRESSOR_SYSTEM Energy Usage Model"},sidebar:"about",previous:{title:"Compressor",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor"},next:{title:"Variable speed compressor train multiple streams and pressures",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"}},a={},c=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"compressor_system-energy-usage-model",children:"COMPRESSOR_SYSTEM energy usage model"}),"\n",(0,n.jsxs)(s.p,{children:["When ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",children:"COMPRESSOR_SYSTEM"})," is specified under ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," a fully defined compressor model (with charts) can be used. Here, the following are allowed under the\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",children:"COMPRESSOR_SYSTEM"})," keyword:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:"Simplified variable speed compressor train model"}),","]}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:"Variable speed compressor train model"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",children:"Sampled compressor model"})}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["The key difference between this model and the ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor",children:"COMPRESSOR"})," keyword is that multiple compression trains can be specified."]}),"\n",(0,n.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"NAME: <Reference name>\nTYPE: COMPRESSOR\nENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n CONDITION: <condition expression>\n COMPRESSORS:\n - NAME: <name of compressor>\n COMPRESSOR_MODEL: <reference to compressor model in facility inputs>\n TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>\n OPERATIONAL_SETTINGS:\n <operational settings data>\n"})}),"\n",(0,n.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT\n OPERATIONAL_SETTINGS:\n - RATES:\n - SIM1;GAS_SALES\n - 0\n - SIM1;GAS_INJ\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURES:\n - 150\n - 150\n - SIM1;INJ_PRESSURE\n - RATES:\n - SIM1;GAS_SALES {/} 2\n - SIM1;GAS_SALES {/} 2\n - SIM1;GAS_INJ\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURES:\n - 150\n - 150\n - SIM1;INJ_PRESSURE\n"})})]})}function m(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,s,o)=>{o.d(s,{Z:()=>i,a:()=>l});var n=o(7294);const r={},t=n.createContext(r);function l(e){const s=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),n.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6bd3279d.672fa9ba.js b/assets/js/6bd3279d.672fa9ba.js new file mode 100644 index 0000000000..4e486650c7 --- /dev/null +++ b/assets/js/6bd3279d.672fa9ba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[639],{7597:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>d,toc:()=>a});var s=r(5893),c=r(1151);const t={},o="EMISSION_NAME",d={id:"about/references/keywords/EMISSION_NAME",title:"EMISSION_NAME",description:"Deprecated from eCalc v8.8 (is included in EMISSION).",source:"@site/docs/about/references/keywords/EMISSION_NAME.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMISSION_NAME",permalink:"/ecalc/docs/about/references/keywords/EMISSION_NAME",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMISSION_NAME.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMISSIONS",permalink:"/ecalc/docs/about/references/keywords/EMISSIONS"},next:{title:"EMISSION_RATE",permalink:"/ecalc/docs/about/references/keywords/EMISSION_RATE"}},i={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"emission_name",children:"EMISSION_NAME"}),"\n",(0,s.jsx)("span",{className:"major-change-deprecation",children:(0,s.jsxs)(n.p,{children:["Deprecated from eCalc v8.8 (is included in ",(0,s.jsx)("strong",{children:"EMISSION"}),")."]})}),"\n",(0,s.jsx)("br",{}),"\n",(0,s.jsxs)(n.p,{children:["[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION_NAME",children:"EMISSION_NAME"})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Required"}),(0,s.jsx)(n.th,{children:"Child of"}),(0,s.jsx)(n.th,{children:"Children/Options"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"VENTING_EMITTERS"})}),(0,s.jsx)(n.td,{children:"None"})]})})]}),"\n",(0,s.jsx)(n.admonition,{type:"important",children:(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["eCalc version 8.8: ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMISSION_NAME"})," is deprecated, instead NAME is given in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION",children:"EMISSION"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["eCalc version 8.7: ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})," keyword is replacing the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",children:"DIRECT_EMITTERS"})," keyword."]}),"\n",(0,s.jsx)(n.li,{children:"eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before."}),"\n"]})}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(n.p,{children:"Name of an entity."}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"EMISSION_NAME: <name>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["Usage in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - EMISSION_NAME: CH4\n"})})]})}function h(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>d,a:()=>o});var s=r(7294);const c={},t=s.createContext(c);function o(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/70f31d65.a0d0f322.js b/assets/js/70f31d65.a0d0f322.js new file mode 100644 index 0000000000..d26f0954a5 --- /dev/null +++ b/assets/js/70f31d65.a0d0f322.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7337],{6151:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>l,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var t=r(5893),s=r(1151);const o={},c="TURBINE_EFFICIENCIES",i={id:"about/references/keywords/TURBINE_EFFICIENCIES",title:"TURBINE_EFFICIENCIES",description:"Description",source:"@site/docs/about/references/keywords/TURBINE_EFFICIENCIES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TURBINE_EFFICIENCIES",permalink:"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TURBINE_EFFICIENCIES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TOTAL_SYSTEM_RATE",permalink:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE"},next:{title:"TURBINE_LOAD",permalink:"/ecalc/docs/about/references/keywords/TURBINE_LOAD"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function E(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"turbine_efficiencies",children:"TURBINE_EFFICIENCIES"}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"TURBINE_EFFICIENCIES"})," is a required to be specified under the ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TURBINE_MODEL",children:"TURBINE_MODEL"})," keyword."]}),"\n",(0,t.jsxs)(n.p,{children:["This ",(0,t.jsx)(n.strong,{children:"must"})," be specified as a fraction and ",(0,t.jsx)(n.strong,{children:"must"})," have equal length to the corresponding ",(0,t.jsx)(n.code,{children:"TURBINE_LOAD"})," values."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n ...\n TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n"})})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(E,{...e})}):E(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>c});var t=r(7294);const s={},o=t.createContext(s);function c(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/72083b41.1610589e.js b/assets/js/72083b41.1610589e.js new file mode 100644 index 0000000000..b2218a943a --- /dev/null +++ b/assets/js/72083b41.1610589e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5178],{3740:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>E,frontMatter:()=>i,metadata:()=>l,toc:()=>t});var c=s(5893),r=s(1151);const i={},d="TYPE",l={id:"about/references/keywords/TYPE",title:"TYPE",description:"[...] /",source:"@site/docs/about/references/keywords/TYPE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TYPE",permalink:"/ecalc/docs/about/references/keywords/TYPE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TYPE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TURBINE_MODEL",permalink:"/ecalc/docs/about/references/keywords/TURBINE_MODEL"},next:{title:"UNITS",permalink:"/ecalc/docs/about/references/keywords/UNITS"}},o={},t=[{value:"Description",id:"description",level:2},{value:"Use in FACILITY_INPUTS",id:"use-in-facility_inputs",level:3},{value:"Use in TIME_SERIES",id:"use-in-time_series",level:3},{value:"Use in ENERGY_USAGE_MODEL",id:"use-in-energy_usage_model",level:3},{value:"Use in MODELS",id:"use-in-models",level:3},{value:"Format",id:"format",level:2}];function h(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(n.h1,{id:"type",children:"TYPE"}),"\n",(0,c.jsxs)(n.p,{children:["[...] /\n",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," /"]}),"\n",(0,c.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," is always a string. The allowed strings, and the resulting change in behavior,\nwill depend on where ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," is used:"]}),"\n",(0,c.jsxs)(n.h3,{id:"use-in-facility_inputs",children:["Use in ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"ELECTRICITY2FUEL"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"TABULAR"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"COMPRESSOR_TABULAR"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"PUMP_CHART_SINGLE_SPEED"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"PUMP_CHART_VARIABLE_SPEED"})}),"\n"]}),"\n",(0,c.jsxs)(n.h3,{id:"use-in-time_series",children:["Use in ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"MISCELLANEOUS"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"DEFAULT"})}),"\n"]}),"\n",(0,c.jsxs)(n.h3,{id:"use-in-energy_usage_model",children:["Use in ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"DIRECT"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"COMPRESSOR"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"PUMP"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"COMPRESSOR_SYSTEM"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"PUMP_SYSTEM"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"TABULATED"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})}),"\n"]}),"\n",(0,c.jsxs)(n.h3,{id:"use-in-models",children:["Use in ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"FLUID"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"SINGLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"TURBINE"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"COMPRESSOR_WITH_TURBINE"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n"]}),"\n",(0,c.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-yaml",children:"TYPE: <type>\n"})})]})}function E(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,c.jsx)(n,{...e,children:(0,c.jsx)(h,{...e})}):h(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>d});var c=s(7294);const r={},i=c.createContext(r);function d(e){const n=c.useContext(i);return c.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),c.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/721cfe60.e2170e5a.js b/assets/js/721cfe60.e2170e5a.js new file mode 100644 index 0000000000..f78dcc7570 --- /dev/null +++ b/assets/js/721cfe60.e2170e5a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3802],{808:(t,o,e)=>{e.r(o),e.d(o,{assets:()=>c,contentTitle:()=>s,default:()=>v,frontMatter:()=>r,metadata:()=>a,toc:()=>u});var n=e(5893),i=e(1151);const r={title:"v8.3 to v8.4",description:"v8.3 to v8.4 migration",sidebar_position:4},s="v8.3 to v8.4",a={id:"about/migration_guides/v8-3_to_v8-4",title:"v8.3 to v8.4",description:"v8.3 to v8.4 migration",source:"@site/docs/about/migration_guides/v8-3_to_v8-4.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8-3_to_v8-4",permalink:"/ecalc/docs/about/migration_guides/v8-3_to_v8-4",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8-3_to_v8-4.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"v8.3 to v8.4",description:"v8.3 to v8.4 migration",sidebar_position:4},sidebar:"about",previous:{title:"v8.2 to v8.3",permalink:"/ecalc/docs/about/migration_guides/v8-2_to_v8-3"},next:{title:"v8.5 to v8.6",permalink:"/ecalc/docs/about/migration_guides/v8-5_to_v8-6"}},c={},u=[];function d(t){const o={h1:"h1",p:"p",...(0,i.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.h1,{id:"v83-to-v84",children:"v8.3 to v8.4"}),"\n",(0,n.jsx)(o.p,{children:"No migration is needed."})]})}function v(t={}){const{wrapper:o}={...(0,i.a)(),...t.components};return o?(0,n.jsx)(o,{...t,children:(0,n.jsx)(d,{...t})}):d(t)}},1151:(t,o,e)=>{e.d(o,{Z:()=>a,a:()=>s});var n=e(7294);const i={},r=n.createContext(i);function s(t){const o=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(o):{...o,...t}}),[o,t])}function a(t){let o;return o=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:s(t.components),n.createElement(r.Provider,{value:o},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/7514af75.b01e7195.js b/assets/js/7514af75.b01e7195.js new file mode 100644 index 0000000000..6649c29233 --- /dev/null +++ b/assets/js/7514af75.b01e7195.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6305],{917:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>E,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var t=r(5893),s=r(1151);const o={},c="FUELRATE",a={id:"about/references/keywords/FUELRATE",title:"FUELRATE",description:"INSTALLATIONS",source:"@site/docs/about/references/keywords/FUELRATE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FUELRATE",permalink:"/ecalc/docs/about/references/keywords/FUELRATE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FUELRATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FUELCONSUMERS",permalink:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"},next:{title:"FUEL_TYPES",permalink:"/ecalc/docs/about/references/keywords/FUEL_TYPES"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"fuelrate",children:"FUELRATE"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),"\n/\n[...] /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUELRATE",children:"FUELRATE"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["Used for direct fuel ",(0,t.jsx)(n.code,{children:"energy usage models<ENERGY_USAGE_MODEL>"})," to define fuel consumption directly with an\n",(0,t.jsx)(n.code,{children:"expression <Expressions>"})]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: <fuel rate expression [m3/day]>\n CONSUMPTION_RATE_TYPE: <consumption rate type>\n CONDITION: <condition expression>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.p,{children:"Constant fuel rate:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: 100000 # [m3/day]\n"})}),"\n",(0,t.jsx)(n.p,{children:"Fuel rate varying in time:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: fueldata;FUEL_RATE # [m3/day]\n"})})]})}function E(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var t=r(7294);const s={},o=t.createContext(s);function c(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7557b935.1196147b.js b/assets/js/7557b935.1196147b.js new file mode 100644 index 0000000000..6493a496f0 --- /dev/null +++ b/assets/js/7557b935.1196147b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[856],{7398:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var s=i(5893),o=i(1151);const t={title:"v7 to v8",description:"v7 to v8 migration",sidebar_position:0},r="v7 to v8",l={id:"about/migration_guides/v7_to_v8",title:"v7 to v8",description:"v7 to v8 migration",source:"@site/docs/about/migration_guides/v7_to_v8.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v7_to_v8",permalink:"/ecalc/docs/about/migration_guides/v7_to_v8",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v7_to_v8.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"v7 to v8",description:"v7 to v8 migration",sidebar_position:0},sidebar:"about",previous:{title:"Migrating eCalc versions",permalink:"/ecalc/docs/about/migration_guides/"},next:{title:"v8 to v8.1",permalink:"/ecalc/docs/about/migration_guides/v8_to_v81"}},a={},d=[{value:"Yaml migration",id:"yaml-migration",level:2},{value:"Migration overview",id:"migration-overview",level:3},{value:"Main differences",id:"main-differences",level:3},{value:"1. All component names must be unique",id:"1-all-component-names-must-be-unique",level:4},{value:"2. UNITS for pump and compressor charts",id:"2-units-for-pump-and-compressor-charts",level:4},{value:"3. Restrict allowed characters in component names and emission names",id:"3-restrict-allowed-characters-in-component-names-and-emission-names",level:4},{value:"4. NAME no longer used for LTP reporting, use CATEGORY instead",id:"4-name-no-longer-used-for-ltp-reporting-use-category-instead",level:4},{value:"5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)",id:"5-not-possible-to-use-custom-category-names-pre-defined-categories-must-be-uppercase-with-hyphen-as-separator-ie-fuel-gas",level:4},{value:"CLI migration",id:"cli-migration",level:2},{value:"1. Invoking eCalc\u2122 directly is no longer supported, use <code>ecalc run</code> instead.",id:"1-invoking-ecalc-directly-is-no-longer-supported-use-ecalc-run-instead",level:4},{value:"2. Log level should be specified as the first argument + log to file",id:"2-log-level-should-be-specified-as-the-first-argument--log-to-file",level:4},{value:"3. Model yaml-file needs to come last",id:"3-model-yaml-file-needs-to-come-last",level:4},{value:"4. Extrapolation correction is no longer optional",id:"4-extrapolation-correction-is-no-longer-optional",level:4},{value:"5. Argument for LTP export has changed from: <code>--centuries-ltp-export</code> to <code>--ltp-export</code>",id:"5-argument-for-ltp-export-has-changed-from---centuries-ltp-export-to---ltp-export",level:4},{value:"6. Simple results are now default for json",id:"6-simple-results-are-now-default-for-json",level:4}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"v7-to-v8",children:"v7 to v8"}),"\n",(0,s.jsx)(n.p,{children:"In this migration guide you will find:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#yaml-migration",children:"YAML changes"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#cli-migration",children:"CLI changes"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"yaml-migration",children:"Yaml migration"}),"\n",(0,s.jsx)(n.h3,{id:"migration-overview",children:"Migration overview"}),"\n",(0,s.jsx)(n.p,{children:"This doc guides you through migrating an existing eCalc\u2122 model from version v7 to v8."}),"\n",(0,s.jsx)(n.p,{children:"We try to make this as easy as possible, and provide a step-by-step migration guide."}),"\n",(0,s.jsx)(n.h3,{id:"main-differences",children:"Main differences"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"All component names must be unique to avoid ambiguity in reporting"}),"\n",(0,s.jsx)(n.li,{children:"UNITS are required when setting up compressor and pump charts"}),"\n",(0,s.jsx)(n.li,{children:"Restrict allowed characters in component names and emission names"}),"\n",(0,s.jsx)(n.li,{children:"NAME no longer used for LTP reporting, use CATEGORY instead"}),"\n",(0,s.jsx)(n.li,{children:"Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)"}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"1-all-component-names-must-be-unique",children:"1. All component names must be unique"}),"\n",(0,s.jsx)(n.p,{children:"All component names must be unique in order to avoid ambiguity in reporting. Components include asset/ecalc-model, installation,\ngenerator sets, electricity consumers, fuel consumers and direct emitters."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml"',children:"INSTALLATIONS:\n # This is old\n - NAME: Installation\n ...\n \n GENERATORSETS:\n # This is old\n - NAME: Genset\n ...\n CONSUMERS:\n # This is old\n - NAME: Consumer\n ...\n # This is old\n - NAME: Consumer\n ...\n # This is old\n - NAME: Genset\n ...\n \n FUELCONSUMERS:\n # This is old\n - NAME: FuelConsumer\n ...\n # This is old\n - NAME: FuelConsumer\n ...\n \n DIRECT_EMITTER:\n # This is old\n - NAME: DirectEmitter\n ...\n # This is old\n - NAME: DirectEmitter\n ...\n # This is old\n - NAME: Installation\n ...\n"})}),"\n",(0,s.jsx)(n.p,{children:"This model is no longer valid, and the duplicated installation names are highlighted.\nTo make this model valid these names needs to be changed. For example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml"',children:"INSTALLATIONS:\n # This is new\n - NAME: Installation_A\n ...\n \n GENERATORSETS:\n # This is new\n - NAME: Genset_A\n ...\n CONSUMERS:\n # This is new\n - NAME: Consumer_A\n ...\n # This is new\n - NAME: Consumer_B\n ...\n # This is new\n - NAME: Genset_B\n ...\n \n FUELCONSUMERS:\n # This is new\n - NAME: FuelConsumer_A\n ...\n # This is new\n - NAME: FuelConsumer_B\n ...\n \n DIRECT_EMITTER:\n # This is new\n - NAME: DirectEmitter_A\n ...\n # This is new\n - NAME: DirectEmitter_B\n ...\n # This is new\n - NAME: Installation_B\n ...\n"})}),"\n",(0,s.jsx)(n.p,{children:"This will make it possible to attribute results to each consumer by name, and removes any an ambiguity\nwhen interpreting eCalc\u2122 results."}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATION"}),",\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSET"}),",\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"}),",\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"}),",\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTER"}),"\nfor more details about the relevant keywords."]}),"\n",(0,s.jsxs)(n.admonition,{title:"Are you using power from shore?",type:"tip",children:[(0,s.jsx)(n.p,{children:"We have implemented temporal categories for consumers to support the power from shore implementation in use."}),(0,s.jsxs)(n.p,{children:["Instead of duplicating the generator set and setting the ",(0,s.jsx)(n.code,{children:"POWER-FROM-SHORE"})," category,\nit is now possible to change the category at a certain date. This is the same syntax as other temporal models."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"CATEGORY:\n 2020-01-01: TURBINE-GENERATOR\n 2030-01-01: POWER-FROM-SHORE\n"})}),(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations#power-from-shore",children:"Power from shore"})," for more information."]})]}),"\n",(0,s.jsx)(n.h4,{id:"2-units-for-pump-and-compressor-charts",children:"2. UNITS for pump and compressor charts"}),"\n",(0,s.jsx)(n.p,{children:"Compressor and pump charts has previously had implicit units, without requiring the operator to specify what\nunits are actually being used. This increases the risk of wrong specification, and makes it more difficult to hand\nover models."}),"\n",(0,s.jsx)(n.p,{children:"To amend this issue, and to open up for more flexibility in regard to units, it is now mandatory to specify."}),"\n",(0,s.jsx)(n.p,{children:"To keep the old defaults you can do the following:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml"',children:"FACILITY_INPUTS:\n - NAME: single_speed_pump_chart\n FILE: <some input csv>\n # highlight-next-line\n TYPE: PUMP_CHART_SINGLE_SPEED\n # highlight-new-start\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n # highlight-new-end\n - NAME: variable_speed_pump_chart\n FILE: <some input csv>\n # highlight-next-line\n TYPE: PUMP_CHART_VARIABLE_SPEED\n # highlight-new-start\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n # highlight-new-end\n\nMODELS:\n - NAME: single_speed_compressor_chart\n # highlight-start\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n # highlight-end\n # highlight-new-start\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: FRACTION\n # highlight-new-end\n CURVES:\n ...\n - NAME: variable_speed_compressor_chart\n # highlight-start\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n # highlight-end\n # highlight-new-start\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: FRACTION\n # highlight-new-end\n CURVES:\n ...\n\n...\n"})}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"COMPRESSOR CHART"}),"\nand ",(0,s.jsx)(n.a,{href:"../modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"PUMP CHART"}),"\nfor more details about the relevant keywords."]}),"\n",(0,s.jsx)(n.h4,{id:"3-restrict-allowed-characters-in-component-names-and-emission-names",children:"3. Restrict allowed characters in component names and emission names"}),"\n",(0,s.jsxs)(n.p,{children:["Component names can now only consist of letters (a-z, upper and lower case), numbers (0-9), underscore (",(0,s.jsx)(n.code,{children:"_"}),"), hyphen (",(0,s.jsx)(n.code,{children:"-"}),") and space (",(0,s.jsx)(n.code,{children:" "}),")."]}),"\n",(0,s.jsxs)(n.p,{children:["Emission names can now only consist of letters (a-z, upper and lower case), numbers (0-9) and underscore (",(0,s.jsx)(n.code,{children:"_"}),")."]}),"\n",(0,s.jsx)(n.h4,{id:"4-name-no-longer-used-for-ltp-reporting-use-category-instead",children:"4. NAME no longer used for LTP reporting, use CATEGORY instead"}),"\n",(0,s.jsx)(n.p,{children:"We have categories for FLARE and COLD-VENTING-FUGITIVE, and have introduced categories for LOADING and STORAGE. These should now be used instead of NAME."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml"',children:"INSTALLATIONS:\n - NAME: Installation_A\n ...\n \n GENERATORSETS:\n - NAME: Genset_A\n ...\n CONSUMERS:\n - NAME: Consumer_A\n ...\n \n FUELCONSUMERS:\n # This is old\n - NAME: loading # Name will no longer be used in LTP reporting\n # This is new\n CATEGORY: LOADING # Category must be used to include it in LTP reporting\n FUEL: Fuel_A\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: Oil_rate_per_timestep\n ...\n # This is old\n - NAME: storage # Name will no longer be used in LTP reporting\n # This is new\n CATEGORY: STORAGE # Category must be used to include it in LTP reporting\n FUEL: Fuel_B\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: Oil_rate_per_timestep\n ... \n # This is old\n - NAME: flare # Name will no longer be used in LTP reporting\n # This is new\n CATEGORY: FLARE # Category must be used to include it in LTP reporting\n FUEL: Fuel_C\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: Oil_rate_per_timestep\n ...\n # This is old\n - NAME: cold_venting_fugitives_nmvoc # Name will no longer be used in LTP reporting\n # This is new\n CATEGORY: COLD-VENTING-FUGITIVE # Category must be used to include it in LTP reporting\n FUEL: Fuel_D # The fuel specification determines what emissions will be used in LTP\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: Oil_rate_per_timestep\n ... \n \n...\n"})}),"\n",(0,s.jsx)(n.h4,{id:"5-not-possible-to-use-custom-category-names-pre-defined-categories-must-be-uppercase-with-hyphen-as-separator-ie-fuel-gas",children:"5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)"}),"\n",(0,s.jsxs)(n.p,{children:["Only a limited pre-defined set of categories is valid input to the CATEGORY-keyword, it is no longer possible to use custom names.\nThe input is case-sensitive and must match exactly with the pre-defined names. See ",(0,s.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:"CLI Docs"})," for full documentation."]}),"\n",(0,s.jsx)(n.h2,{id:"cli-migration",children:"CLI migration"}),"\n",(0,s.jsx)(n.p,{children:"This version includes some changes to how the CLI is invoked and changes to default behavior."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Invoking eCalc\u2122 directly is no longer supported, use ",(0,s.jsx)(n.code,{children:"ecalc run"})," instead."]}),"\n",(0,s.jsx)(n.li,{children:"Log level should be specified as the first argument + log to file"}),"\n",(0,s.jsx)(n.li,{children:"Model yaml-file needs to come last"}),"\n",(0,s.jsx)(n.li,{children:"Extrapolation (correction) is now always used and cannot be disabled"}),"\n",(0,s.jsxs)(n.li,{children:["Argument for LTP export has changed from: ",(0,s.jsx)(n.code,{children:"--centuries-ltp-export"})," to ",(0,s.jsx)(n.code,{children:"--ltp-export"})]}),"\n",(0,s.jsx)(n.li,{children:"Simple results are now default for json"}),"\n"]}),"\n",(0,s.jsxs)(n.h4,{id:"1-invoking-ecalc-directly-is-no-longer-supported-use-ecalc-run-instead",children:["1. Invoking eCalc\u2122 directly is no longer supported, use ",(0,s.jsx)(n.code,{children:"ecalc run"})," instead."]}),"\n",(0,s.jsxs)(n.p,{children:["To make it possible to add ",(0,s.jsx)(n.code,{children:"ecalc show"})," we added the ",(0,s.jsx)(n.code,{children:"ecalc run"})," command. In v8 it is required to specify ",(0,s.jsx)(n.code,{children:"run"})," when calculating a model."]}),"\n",(0,s.jsx)(n.p,{children:"If you previously ran eCalc\u2122 with this command"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"$ ecalc ./my-model.yaml\n"})}),"\n",(0,s.jsx)(n.p,{children:"you should now use"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"$ ecalc run ./my-model.yaml\n"})}),"\n",(0,s.jsx)(n.h4,{id:"2-log-level-should-be-specified-as-the-first-argument--log-to-file",children:"2. Log level should be specified as the first argument + log to file"}),"\n",(0,s.jsxs)(n.p,{children:["Previously you could specify the ",(0,s.jsx)(n.code,{children:"--log"})," argument after ",(0,s.jsx)(n.code,{children:"run"}),", this is no longer possible."]}),"\n",(0,s.jsx)(n.p,{children:"This is the new way of specifying log level."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"$ ecalc --log DEBUG run ./my-model.yaml\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In addition we are introducing ",(0,s.jsx)(n.code,{children:"--log-folder <path>"})," where you can direct and store the log in a given path to easily\nlook at the log of running later than scrolling in the terminal window. Due to the excessive amount of logs that eCalc\nproduces when running at low log levels, we have set the log to only log at WARNING and above (WARNING + ERROR messages).\nThe user must make sure that the path/folder exists before running and that you have correct permissions, as eCalc will NOT\ndo that for you."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"$ ecalc --log DEBUG --log-folder . run ./my-model.yaml\n"})}),"\n",(0,s.jsxs)(n.p,{children:["As you see above, the argument ",(0,s.jsx)(n.strong,{children:"MUST"})," be added ",(0,s.jsx)(n.strong,{children:"BEFORE"})," the ",(0,s.jsx)(n.code,{children:"run"})," argument."]}),"\n",(0,s.jsx)(n.h4,{id:"3-model-yaml-file-needs-to-come-last",children:"3. Model yaml-file needs to come last"}),"\n",(0,s.jsx)(n.p,{children:"When running eCalc\u2122 you will now need to set the model file argument last."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.code,{children:"ecalc [OPTIONS] COMMAND [ARGS] [MODEL YAML-file]"})}),"\n",(0,s.jsxs)(n.p,{children:["See the ",(0,s.jsx)(n.a,{href:"../references/cli_reference",children:"CLI Docs"})," or run ",(0,s.jsx)(n.code,{children:"ecalc --help"})," for the full documentation."]}),"\n",(0,s.jsx)(n.h4,{id:"4-extrapolation-correction-is-no-longer-optional",children:"4. Extrapolation correction is no longer optional"}),"\n",(0,s.jsx)(n.p,{children:'We have removed the extrapolation correction argument. eCalc\u2122 will now always "extrapolate" values.\nThe main reason for making this change was that the feature was in general always used, in addition to being a confusing term.\nLet us know if you have a use-case where this was needed.'}),"\n",(0,s.jsxs)(n.h4,{id:"5-argument-for-ltp-export-has-changed-from---centuries-ltp-export-to---ltp-export",children:["5. Argument for LTP export has changed from: ",(0,s.jsx)(n.code,{children:"--centuries-ltp-export"})," to ",(0,s.jsx)(n.code,{children:"--ltp-export"})]}),"\n",(0,s.jsxs)(n.p,{children:["To prepare for Open Source and to make the LTP export more agnostic (even though the column names are heavily\naffected by Centuries), we simplify the argument to get LTP results. See ",(0,s.jsx)(n.a,{href:"../references/cli_reference",children:"CLI Docs"})," for\nfull documentation."]}),"\n",(0,s.jsx)(n.h4,{id:"6-simple-results-are-now-default-for-json",children:"6. Simple results are now default for json"}),"\n",(0,s.jsxs)(n.p,{children:["Detailed output (or any json) should mainly be used for QA and advanced users, and is no longer shown by default. To keep old behavior, the user now\nneeds to use the --detailed-output option when running the CLI. See ",(0,s.jsx)(n.a,{href:"../references/cli_reference#ecalc-run",children:"CLI reference docs"}),"\nfor more details."]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>l,a:()=>r});var s=i(7294);const o={},t=s.createContext(o);function r(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7b02141e.87a39056.js b/assets/js/7b02141e.87a39056.js new file mode 100644 index 0000000000..255c582a67 --- /dev/null +++ b/assets/js/7b02141e.87a39056.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2638],{9519:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>a});var n=t(5893),i=t(1151);const l={title:"eCalc\u2122 Workflow",sidebar_position:4,description:"eCalc modelling"},r=void 0,c={id:"about/modelling/workflow/index",title:"eCalc\u2122 Workflow",description:"eCalc modelling",source:"@site/docs/about/modelling/workflow/index.md",sourceDirName:"about/modelling/workflow",slug:"/about/modelling/workflow/",permalink:"/ecalc/docs/about/modelling/workflow/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/workflow/index.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"eCalc\u2122 Workflow",sidebar_position:4,description:"eCalc modelling"},sidebar:"about",previous:{title:"Direct consumers",permalink:"/ecalc/docs/about/modelling/setup/installations/direct_consumers"},next:{title:"Generic Workflow",permalink:"/ecalc/docs/about/modelling/workflow/generic_workflow"}},s={},a=[];function d(e){const o={p:"p",...(0,i.a)(),...e.components};return(0,n.jsx)(o.p,{children:"This section will outline the method and workflow required when setting up an eCalc\u2122 model for the first time."})}function u(e={}){const{wrapper:o}={...(0,i.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,o,t)=>{t.d(o,{Z:()=>c,a:()=>r});var n=t(7294);const i={},l=n.createContext(i);function r(e){const o=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function c(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(l.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7c623a68.34254eb2.js b/assets/js/7c623a68.34254eb2.js new file mode 100644 index 0000000000..7202db780f --- /dev/null +++ b/assets/js/7c623a68.34254eb2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1310],{2047:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>t,contentTitle:()=>c,default:()=>h,frontMatter:()=>l,metadata:()=>i,toc:()=>d});var n=a(5893),r=a(1151);const l={},c="CONSUMPTION_RATE_TYPE",i={id:"about/references/keywords/CONSUMPTION_RATE_TYPE",title:"CONSUMPTION_RATE_TYPE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CONSUMPTION_RATE_TYPE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONSUMPTION_RATE_TYPE",permalink:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONSUMPTION_RATE_TYPE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONSUMERS",permalink:"/ecalc/docs/about/references/keywords/CONSUMERS"},next:{title:"CONTROL_MARGIN",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN"}},t={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function m(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",h1:"h1",h2:"h2",math:"math",mfrac:"mfrac",mi:"mi",mo:"mo",mrow:"mrow",mtext:"mtext",p:"p",pre:"pre",semantics:"semantics",span:"span",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"consumption_rate_type",children:"CONSUMPTION_RATE_TYPE"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",children:"CONSUMPTION_RATE_TYPE"})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Required"}),(0,n.jsx)(s.th,{children:"Child of"}),(0,n.jsx)(s.th,{children:"Children/Options"})]})}),(0,n.jsx)(s.tbody,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"No"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"ENERGY_USAGE_MODEL"})}),(0,n.jsx)(s.td,{children:"None"})]})})]}),"\n",(0,n.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,n.jsx)(s.admonition,{type:"important",children:(0,n.jsxs)(s.p,{children:["You must have good control of the input rates - which are stream day rates and which are calendar day rates - and\nspecify ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," as input if necessary."]})}),"\n",(0,n.jsxs)(s.p,{children:["When ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/REGULARITY",children:"REGULARITY"})," is used,the consumption rate type may be specified for\n",(0,n.jsx)(s.code,{children:"DIRECT ENERGY USAGE MODEL"}),"(",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/LOAD",children:"LOAD"})," or ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUELRATE",children:"FUELRATE"}),")\nby setting ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",children:"CONSUMPTION_RATE_TYPE"})," to either ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," or\n",(0,n.jsx)(s.code,{children:"STREAM_DAY"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The default behaviour, is that these will be interpreted as ",(0,n.jsx)(s.code,{children:"STREAM_DAY"})," if not set explicitly. This will result in\nfuel rates being multiplied by regularity to obtain (average) calendar day fuel rates, while the loads will be kept\nstream day when passed to the generator set calculation."]}),"\n",(0,n.jsxs)(s.admonition,{type:"note",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"CALENDAR_DAY"}),": The average rate over a period after adjusting for operating conditions that keeps the\naverage throughput below the maximum achievable throughput for a single day, known as stream day."]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"STREAM_DAY"}),": The actual rate at a given moment. When multiplied with a ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/REGULARITY",children:"REGULARITY"}),"\nfactor you get the calendar day rate which needs to be used when evaluating the economics of a process unit."]}),(0,n.jsx)(s.span,{className:"katex-display",children:(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"s"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"m"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"y"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsxs)(s.mfrac,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"c"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"l"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"n"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"y"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"e"})]}),(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"g"}),(0,n.jsx)(s.mi,{children:"u"}),(0,n.jsx)(s.mi,{children:"l"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"i"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"y"})]})]})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"stream\\ day\\ rate = \\frac{calendar\\ day\\ rate}{regularity}"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"re"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"am"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"2.2519em",verticalAlign:"-0.8804em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(s.span,{className:"mfrac",children:(0,n.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(s.span,{className:"vlist-r",children:[(0,n.jsxs)(s.span,{className:"vlist",style:{height:"1.3714em"},children:[(0,n.jsxs)(s.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",children:"re"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"gu"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"})]})]}),(0,n.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(s.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"})]})]})]}),(0,n.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.8804em"},children:(0,n.jsx)(s.span,{})})})]})}),(0,n.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})]})]})})]}),"\n",(0,n.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"CONSUMPTION_RATE_TYPE: <consumption_rate_type>\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Where ",(0,n.jsx)(s.code,{children:"<consumption_rate_type>"})," can either be ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," or ",(0,n.jsx)(s.code,{children:"STREAM_DAY"}),"."]}),"\n",(0,n.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(s.p,{children:"Specifying consumption rate type for fixed/direct consumers:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"LOAD: 10\nCONSUMPTION_RATE_TYPE: CALENDAR_DAY\n...\nFUELRATE: 10000\nCONSUMPTION_RATE_TYPE: STREAM_DAY\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Given ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," input the rate will be converted to ",(0,n.jsx)(s.code,{children:"STREAM_DAY"})," when evaluating, and any fuel rate in output\nwill be converted back again to ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," rate equivalent in the results."]}),"\n",(0,n.jsxs)(s.p,{children:["Given ",(0,n.jsx)(s.code,{children:"STREAM_DAY"})," input, and a ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/REGULARITY",children:"REGULARITY"})," factor of 0.5 (50%), the\ninterpretation is that the process unit will run at full capacity half of the time. The resulting fuel rate reported\nfor a fuel consumer will be halved compared to 1 (100%) regularity."]})]})}function h(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},1151:(e,s,a)=>{a.d(s,{Z:()=>i,a:()=>c});var n=a(7294);const r={},l=n.createContext(r);function c(e){const s=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7cebed78.93942942.js b/assets/js/7cebed78.93942942.js new file mode 100644 index 0000000000..90f6c2f420 --- /dev/null +++ b/assets/js/7cebed78.93942942.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9376],{6582:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>E,frontMatter:()=>i,metadata:()=>l,toc:()=>o});var s=r(5893),a=r(1151);const i={sidebar_position:1,title:"Simple model",description:"A simple model with a single installation"},t="Simple model example",l={id:"about/modelling/examples/simple",title:"Simple model",description:"A simple model with a single installation",source:"@site/docs/about/modelling/examples/simple.md",sourceDirName:"about/modelling/examples",slug:"/about/modelling/examples/simple",permalink:"/ecalc/docs/about/modelling/examples/simple",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/examples/simple.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,title:"Simple model",description:"A simple model with a single installation"},sidebar:"about",previous:{title:"Examples",permalink:"/ecalc/docs/about/modelling/examples/"},next:{title:"Advanced model",permalink:"/ecalc/docs/about/modelling/examples/advanced"}},d={},o=[{value:"YAML model overview",id:"yaml-model-overview",level:2},{value:"TIME_SERIES",id:"time_series",level:2},{value:"FACILITY_INPUTS",id:"facility_inputs",level:2},{value:"FUEL_TYPES",id:"fuel_types",level:2},{value:"VARIABLES",id:"variables",level:2},{value:"INSTALLATION",id:"installation",level:2},{value:"GENERATORSETS",id:"generatorsets",level:3},{value:"FUELCONSUMERS",id:"fuelconsumers",level:3},{value:"ENERGY_USAGE_MODEL",id:"energy_usage_model",level:2},{value:"Full eCalc YAML model",id:"full-ecalc-yaml-model",level:2},{value:"Input files",id:"input-files",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"simple-model-example",children:"Simple model example"}),"\n",(0,s.jsxs)(n.p,{children:["The following is an example with one installation called ",(0,s.jsx)(n.code,{children:"Installation A"})," that exports oil (",(0,s.jsx)(n.code,{children:"OIL_PROD"}),") and gas (",(0,s.jsx)(n.code,{children:"GAS_PROD"}),").\nThe installation emits CO",(0,s.jsx)("sub",{children:"2"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"On this installation, the following components are identified:"}),"\n",(0,s.jsx)(n.mermaid,{chart:"graph TD;\n A(Installation A) --\x3e B(Flare);\n A --\x3e C(Gas export compressor);\n A --\x3e D(Generator set A);\n D --\x3e E(Base production load);\n D --\x3e F(Gas injection compressor);\n D --\x3e G(Produced water reinjection pump);\n D --\x3e H(Sea water injection pump);\n style A stroke:red;\n style E stroke:blue;\n style F stroke:blue;\n style G stroke:blue;\n style H stroke:blue;"}),"\n",(0,s.jsx)(n.p,{children:"The results of a performed characterization of the equipment are listed below:"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Consumer"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Generator set A"}),(0,s.jsx)(n.td,{children:"Generator set"}),(0,s.jsx)(n.td,{children:"Variable fuel consumer with electricity to fuel function"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Base production load"}),(0,s.jsx)(n.td,{children:"Power consumer"}),(0,s.jsx)(n.td,{children:"Constant load 11.8 MW"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Gas injection compressor"}),(0,s.jsx)(n.td,{children:"Power consumer"}),(0,s.jsx)(n.td,{children:"Variable consumption depending on gas injection rate and lift gas rate"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Produced water reinjection pump"}),(0,s.jsx)(n.td,{children:"Power consumer"}),(0,s.jsx)(n.td,{children:"Variable consumption depending on water production rate and water injection rate. The pump suction pressure is 10 bar and discharge pressure is 200 bar."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Sea water injection pump"}),(0,s.jsx)(n.td,{children:"Power consumer"}),(0,s.jsx)(n.td,{children:"Variable consumption depending on a complex combination on water injection rate and water production rate"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Flare"}),(0,s.jsx)(n.td,{children:"Direct fuel consumer"}),(0,s.jsxs)(n.td,{children:["Before 1.1.2005: Constant fuel rate 10000 Sm",(0,s.jsx)("sup",{children:"3"}),"/day, From 1.1.2005: Constant fuel rate 7000 Sm",(0,s.jsx)("sup",{children:"3"}),"/day"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Gas export compressor"}),(0,s.jsx)(n.td,{children:"Direct fuel consumer"}),(0,s.jsx)(n.td,{children:"Variable fuel consumer depending on gas sales rate"})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"yaml-model-overview",children:"YAML model overview"}),"\n",(0,s.jsx)(n.p,{children:"The YAML model consist of these main components:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Time series inputs - ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})]}),"\n",(0,s.jsxs)(n.li,{children:["Facility characterization input - ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})]}),"\n",(0,s.jsxs)(n.li,{children:["Fuel input - ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})]}),"\n",(0,s.jsxs)(n.li,{children:["Model variables - ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"})]}),"\n",(0,s.jsxs)(n.li,{children:["Installation topology - ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The YAML setup file looks like this:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"TIME_SERIES:\n <placeholder>\nFACILITY_INPUTS:\n <placeholder>\nFUEL_TYPES:\n <placeholder>\nVARIABLES:\n <placeholder>\nINSTALLATIONS:\n <placeholder>\n"})}),"\n",(0,s.jsx)(n.p,{children:"We will now replace the placeholders for each of the main keywords above."}),"\n",(0,s.jsx)(n.h2,{id:"time_series",children:"TIME_SERIES"}),"\n",(0,s.jsxs)(n.p,{children:["The reservoir variables, in this case, are found in a CSV (Comma separated file) ",(0,s.jsx)(n.code,{children:"production_data.csv"}),".\nWe give the time-series data a name that can be referenced as variables elsewhere in the form ",(0,s.jsx)(n.code,{children:"<NAME>:<NAME OF COLUMN>"}),".\nSee ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," for further details."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"TIME_SERIES:\n - NAME: SIM\n FILE: production_data.csv\n TYPE: DEFAULT\n"})}),"\n",(0,s.jsx)(n.h2,{id:"facility_inputs",children:"FACILITY_INPUTS"}),"\n",(0,s.jsxs)(n.p,{children:["We specify CSV input data for processing equipment using FACILITY_INPUTS. This is used for generatorsets,\ntabulated/sampled models and pump charts.\nSee ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," for further details."]}),"\n",(0,s.jsxs)(n.p,{children:["Here we define a tabulated genset, a sampled compressor, a sampled compressor driven by a turbine, a sampled pump,\nand a single speed pump chart. These will be used in the final model for illustration.\nNote that more complicated energy models are defined under the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS-keyword"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"See the input data further down to understand the input formats."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"FACILITY_INPUTS:\n - NAME: genset\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: compressor_sampled\n FILE: compressor_sampled.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: compressor_with_turbine_sampled\n FILE: compressor_sampled_with_turbine.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: pump_sampled\n FILE: pump_sampled.csv\n TYPE: TABULAR\n - NAME: pump_chart\n FILE: pump_chart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\n"})}),"\n",(0,s.jsx)(n.h2,{id:"fuel_types",children:"FUEL_TYPES"}),"\n",(0,s.jsxs)(n.p,{children:["In this example there is only one ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," - ",(0,s.jsx)(n.code,{children:"fuel_gas"}),". The emissions we model with the fuel is CO",(0,s.jsx)("sub",{children:"2"}),". The CO",(0,s.jsx)("sub",{children:"2"})," factor\nis 2.19 kg CO2 per Sm",(0,s.jsx)("sup",{children:"3"})," fuel gas burned."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"FUEL_TYPES:\n - NAME: fuel_gas\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.19 #CO2/Sm3 fuel gas burned\n"})}),"\n",(0,s.jsx)(n.h2,{id:"variables",children:"VARIABLES"}),"\n",(0,s.jsxs)(n.p,{children:["To run the model it is recommended to specify ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"}),",\ninstead of hard coding values in difference places. This makes it easier to develop, maintain and understand the model\nby allowing descriptive variable names and avoid duplications."]}),"\n",(0,s.jsx)(n.p,{children:"For our model, we specify the following variables:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"VARIABLES:\n hydrocarbon_export_sm3_per_day:\n VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent\n sea_water_injection_rate_m3_per_day:\n VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500)\n gas_export_rate_sm3_per_day:\n VALUE: SIM;GAS_PROD\n gas_injection_rate_sm3_per_day:\n VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT\n produced_water_reinjection_condition:\n VALUE: SIM;WATER_PROD > 1500\n produced_water_reinjection_total_system_rate_m3_per_day:\n VALUE: SIM;WATER_PROD\n flare_fuel_rate_sm3_day:\n 1995-10-01:\n VALUE: 10000\n 2005-01-01:\n VALUE: 7000\n"})}),"\n",(0,s.jsxs)(n.p,{children:["We reference the ",(0,s.jsx)(n.a,{href:"#time_series",children:"TIME_SERIES"})," ",(0,s.jsx)(n.code,{children:"SIM"})," using the column names from the CSV file. Here we use for example\n",(0,s.jsx)(n.code,{children:"SIM:OIL_PROD"})," (Field Oil Production Rate) ",(0,s.jsx)(n.code,{children:"SIM:GAS_PROD"})," (Field Gas Sales Rate)."]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsx)(n.p,{children:"It is possible to specify if-else conditions by multiplying with boolean values.\nThis has been done in the $var.salt_water_injection_rate_m3_per_day variable example above."})}),"\n",(0,s.jsx)(n.h2,{id:"installation",children:"INSTALLATION"}),"\n",(0,s.jsx)(n.p,{children:"An installation is composed of hydrocarbon export, a default fuel for that installation and consumers in the form\nof generatorsets (with electric sub-consumers), and direct fuel consumers."}),"\n",(0,s.jsx)(n.p,{children:"We specify:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"NAME"}),": the installation name"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"HCEXPORT"}),": Hydrocarbon export in Sm",(0,s.jsx)("sup",{children:"3"}),"/day by referring to the variable specified under ",(0,s.jsx)(n.a,{href:"#variables",children:"VARIABLES"})," above."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"FUEl"}),": Default fuel specified in ",(0,s.jsx)(n.a,{href:"#fuel_types",children:"FUEL_TYPES"})," above."]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n GENERATORSETS:\n <placeholder>\n FUELCONSUMERS:\n <placeholder>\n"})}),"\n",(0,s.jsx)(n.h3,{id:"generatorsets",children:"GENERATORSETS"}),"\n",(0,s.jsxs)(n.p,{children:["There is one generator set, ",(0,s.jsx)(n.code,{children:"Generator set A"}),". This has a power to fuel function defined in\n",(0,s.jsx)(n.a,{href:"#facility_inputs",children:"FACILITY_INPUTS"})," with the name ",(0,s.jsx)(n.code,{children:"genset"}),". Further, the consumers getting\npower from the generator set are ",(0,s.jsx)(n.em,{children:"Base production load"}),", ",(0,s.jsx)(n.em,{children:"Gas injection compressor"}),", ",(0,s.jsx)(n.em,{children:"Produced water re-injection pump"}),"\nand ",(0,s.jsx)(n.em,{children:"Sea-water injection pump"}),". The setup for ",(0,s.jsx)(n.code,{children:"Generator set A"})," thus becomes:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" GENERATORSETS:\n - NAME: Generator set A\n ELECTRICITY2FUEL: genset\n CATEGORY: TURBINE-GENERATOR\n CONSUMERS:\n - NAME: Base production load\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n <placeholder>\n - NAME: Gas injection compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n <placeholder>\n - NAME: Produced water reinjection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n <placeholder>\n - NAME: Sea water injection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n <placeholder>\n"})}),"\n",(0,s.jsx)(n.h3,{id:"fuelconsumers",children:"FUELCONSUMERS"}),"\n",(0,s.jsxs)(n.p,{children:["The direct fuel consumers are ",(0,s.jsx)(n.strong,{children:"Flare"})," and ",(0,s.jsx)(n.strong,{children:"Gas export compressor"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:" FUELCONSUMERS:\n - NAME: Flare\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n <placeholder>\n - NAME: Gas export compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n <placeholder>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"energy_usage_model",children:"ENERGY_USAGE_MODEL"}),"\n",(0,s.jsxs)(n.p,{children:["We will now fill in the final placeholders with detailed ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"s."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Base production load"})," has a constant load of 11.8 MW:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: Base production load\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 11.8 # MW\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Gas injection compressor"})," is represented by a tabulated (sampled) energy usage model defining the relationship\nbetween the gas injection rate [Sm",(0,s.jsx)("sup",{children:"3"}),"/day] and the corresponding power requirement. The gas rate is already defined\nin the variable ",(0,s.jsx)(n.a,{href:"#variables",children:"gas_injection_rate_sm3_per_day"})," as ",(0,s.jsx)(n.code,{children:"SIM;GAS_INJ {+} SIM;GAS_LIFT"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: Gas injection compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_sampled\n RATE: $var.gas_injection_rate_sm3_per_day\n SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc\n DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Produced water reinjection pump"})," is variable and its energy function is dependent on the field's water\nproduction rate (",(0,s.jsx)(n.code,{children:"WATER_PROD"}),") that is set in the variable ",(0,s.jsx)(n.a,{href:"#variables",children:"produced_water_reinjection_condition"})," as ",(0,s.jsx)(n.code,{children:"SIM;WATER_PROD"}),".\nThe pump only runs when the variables ",(0,s.jsx)(n.a,{href:"#variables",children:"produced_water_reinjection_condition"})," evaluates to true as ",(0,s.jsx)(n.code,{children:"SIM;WATER_PROD > 1500"}),".\nThis is when the water production is above 1500 Sm3/day. Fluid density, suction pressure and discharge pressure\nis also defined:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: Produced water reinjection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: $var.produced_water_reinjection_condition\n ENERGYFUNCTION: pump_chart\n RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day\n FLUID_DENSITY: 1010\n SUCTION_PRESSURE: 10 # [bara]\n DISCHARGE_PRESSURE: 200 # [bara]\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Sea water injection pump"})," has an energy function that is dependent on the seawater injection rate.\nThis rate is not modeled explicitly in the reservoir input source, but it may be computed\nfrom the injection (",(0,s.jsx)(n.code,{children:"WATER_INJ"}),") and production (",(0,s.jsx)(n.code,{children:"WATER_PROD"}),") rate by the following rules:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In general, the seawater injection rate (",(0,s.jsx)(n.code,{children:"SEAWATER_INJ"}),"), is the difference between injected and\nproduced water: ",(0,s.jsx)(n.code,{children:"SEAWATER_INJ = WATER_INJ - WATER_PROD"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["When the produced water rate is below 1500 SM3/day, this goes directly to sea, such that\n",(0,s.jsx)(n.code,{children:"SEAWATER_INJ = WATER_INJ"})," when ",(0,s.jsx)(n.code,{children:"WATER_PROD < 1500"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["When the produced water rate is between 17000 and 18500 SM3/day, everything above 17000 SM3/day\ngoes directly to the sea, thus ",(0,s.jsx)(n.code,{children:"SEAWATER_INJ = WATER_INJ - 17000"})," when ",(0,s.jsx)(n.code,{children:"17000 < WATER_PROD < 18500"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["This is specified as the variable ",(0,s.jsx)(n.a,{href:"#variables",children:"sea_water_injection_rate_m3_per_day"})," above and is defined as:"]}),"\n",(0,s.jsx)(n.p,{children:"The model is specified:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: Sea water injection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: pump_sampled\n VARIABLES:\n - NAME: RATE\n EXPRESSION: $var.sea_water_injection_rate_m3_per_day\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The flare is changing on the 1st of January 2005. Therefore, we need to use a different constant\nfuel consumption value before and after this date. This is done using the variable ",(0,s.jsx)(n.a,{href:"#variables",children:"flare_fuel_rate_sm3_day"}),"\nabove."]}),"\n",(0,s.jsx)(n.p,{children:"The model is specified:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: Flare\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_fuel_rate_sm3_day\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Gasexport is a variable fuel consumer whose energy function depends on the field gas sales rate (",(0,s.jsx)(n.code,{children:"GAS_PROD"}),") defined\nin the variable ",(0,s.jsx)(n.a,{href:"#variables",children:"gas_export_rate_sm3_per_day"})," as ",(0,s.jsx)(n.code,{children:"SIM;GAS_PROD"}),". Even though it is not used in the eCalc model, suction and discharge pressure needs to be specified in order for the model to run."]}),"\n",(0,s.jsx)(n.p,{children:"The model is specified:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: Gas export compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: GAS-DRIVEN-COMPRESSOR\n ENERGYFUNCTION: compressor_with_turbine_sampled\n RATE: $var.gas_export_rate_sm3_per_day\n SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc\n DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc\n"})}),"\n",(0,s.jsx)(n.h2,{id:"full-ecalc-yaml-model",children:"Full eCalc YAML model"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"TIME_SERIES:\n - NAME: SIM\n FILE: production_data.csv\n TYPE: DEFAULT\nFACILITY_INPUTS:\n - NAME: genset\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: compressor_sampled\n FILE: compressor_sampled.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: compressor_with_turbine_sampled\n FILE: compressor_sampled_with_turbine.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: pump_sampled\n FILE: pump_sampled.csv\n TYPE: TABULAR\n - NAME: pump_chart\n FILE: pump_chart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\n\nFUEL_TYPES:\n - NAME: fuel_gas\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.19 # CO2/Sm3 fuel gas burned\n\nVARIABLES:\n hydrocarbon_export_sm3_per_day:\n VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent\n sea_water_injection_rate_m3_per_day:\n VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500)\n gas_export_rate_sm3_per_day:\n VALUE: SIM;GAS_PROD\n gas_injection_rate_sm3_per_day:\n VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT\n produced_water_reinjection_condition:\n VALUE: SIM;WATER_PROD > 1500\n produced_water_reinjection_total_system_rate_m3_per_day:\n VALUE: SIM;WATER_PROD\n flare_fuel_rate_sm3_day:\n 1995-10-01:\n VALUE: 10000\n 2005-01-01:\n VALUE: 7000\n\nINSTALLATIONS:\n - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n GENERATORSETS:\n - NAME: Generator set A\n ELECTRICITY2FUEL: genset\n CATEGORY: TURBINE-GENERATOR\n CONSUMERS:\n - NAME: Base production load\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 11.8 # MW\n - NAME: Gas injection compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_sampled\n RATE: $var.gas_injection_rate_sm3_per_day\n SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc\n DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc\n - NAME: Produced water reinjection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: $var.produced_water_reinjection_condition\n ENERGYFUNCTION: pump_chart\n RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day\n FLUID_DENSITY: 1010\n SUCTION_PRESSURE: 10 # bara\n DISCHARGE_PRESSURE: 200 # bara\n - NAME: Sea water injection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: pump_sampled\n VARIABLES:\n - NAME: RATE\n EXPRESSION: $var.salt_water_injection_rate_m3_per_day\n FUELCONSUMERS:\n - NAME: Flare\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_fuel_rate_sm3_day\n - NAME: Gas export compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: GAS-DRIVEN-COMPRESSOR\n ENERGYFUNCTION: compressor_with_turbine_sampled\n RATE: $var.gas_export_rate_sm3_per_day\n SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc\n DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc\n"})}),"\n",(0,s.jsx)(n.h2,{id:"input-files",children:"Input files"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",metastring:'title="compressor_sampled.csv"',children:"RATE,POWER\n#[Sm3/day],[MW]\n0,0\n1,4.1\n100000000,4.1\n200000000,4.1\n210000000,4.1\n220000000,4.4\n230000000,4.8\n240000000,5.1\n250000000,5.4\n260000000,5.8\n270000000,6.1\n280000000,6.4\n290000000,6.8\n300000000,7.1\n500000000,14.2\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",metastring:'title="compressor_sampled_with_turbine.csv"',children:"RATE,FUEL\n#[Sm3/day],[Sm3/day]\n0,0\n0.1,50000\n3000000,50000\n3500000,130000\n7000000,170000\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",metastring:'title="genset.csv"',children:"POWER,FUEL\n#[MW],[Sm3/day]\n0, 0\n0.1, 65000\n10.0, 75000\n20.0, 126000\n40.0, 250000\n100.0, 750000\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",metastring:'title="pump_chart.csv"',children:"SPEED,RATE,HEAD,EFFICIENCY\n3250,250,2640,59\n3250,360,2490,68\n3250,500,2342,77\n3250,600,2210,80\n3250,667,2068,78\n3250,735,1870,74\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",metastring:'title="pump_sampled.csv"',children:"RATE,POWER\n#[Sm3/day],[MW]\n0,0\n1,3\n8500,4\n9000,4\n17000,6\n17500,9\n36000,13\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",metastring:'title="production_data.csv"',children:"Dates, OIL_PROD, GAS_PROD, WATER_PROD, WATER_INJ, GAS_INJ, GAS_LIFT\n#, Sm3/d, Sm3/d, m3/d, m3/d, Sm3/d, Sm3/d\n2020-01-01 00:00:00, 9000, 3500000, 18000, 34000, 2200000, 130000\n2021-01-01 00:00:00, 8000, 3600000, 19000, 33000, 2200000, 170000\n2022-01-01 00:00:00, 7000, 3700000, 15000, 30000, 2200000, 210000\n2023-01-01 00:00:00, 6000, 3800000, 16000, 33000, 2300000, 240000\n2024-01-01 00:00:00, 6000, 3900000, 14000, 35000, 2300000, 280000\n2024-12-01 00:00:00, 6000, 4000000, 15000, 36000, 2400000, 310000\n2026-01-01 00:00:00, 7000, 4100000, 18000, 36000, 2400000, 350000\n2027-01-01 00:00:00, 6000, 4500000, 15000, 38000, 2400000, 390000\n2028-01-01 00:00:00, 6000, 3500000, 12000, 33000, 2400000, 430000\n2029-01-01 00:00:00, 5000, 2500000, 14000, 36000, 2400000, 460000\n2030-01-01 00:00:00, 6000, 2000000, 16000, 35000, 2400000, 500000\n2031-01-01 00:00:00, 4000, 3000000, 14000, 33000, 2400000, 530000\n"})})]})}function E(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>l,a:()=>t});var s=r(7294);const a={},i=s.createContext(a);function t(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7d3b81bb.55fae6e3.js b/assets/js/7d3b81bb.55fae6e3.js new file mode 100644 index 0000000000..79d1a853c8 --- /dev/null +++ b/assets/js/7d3b81bb.55fae6e3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8230],{8886:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>t,metadata:()=>a,toc:()=>c});var r=s(5893),i=s(1151);const t={slug:"v7-4-release",title:"v7.4",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:7},o="eCalc v7.4",a={id:"changelog/v7-4",title:"v7.4",description:"Features",source:"@site/docs/changelog/v7-4.md",sourceDirName:"changelog",slug:"/changelog/v7-4-release",permalink:"/ecalc/docs/changelog/v7-4-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-4.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:7,frontMatter:{slug:"v7-4-release",title:"v7.4",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:7},sidebar:"changelog",previous:{title:"v7.3",permalink:"/ecalc/docs/changelog/v7-3-release"},next:{title:"v7.5",permalink:"/ecalc/docs/changelog/v7-5-release"}},l={},c=[{value:"<em>Features</em>",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2}];function d(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"ecalc-v74",children:"eCalc v7.4"}),"\n",(0,r.jsx)(n.h2,{id:"features",children:(0,r.jsx)(n.em,{children:"Features"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Added is_valid and is_extrapolation flags in JSON-output."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Added is_valid flags to all energy usage model and consumer model results."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add additional result data when compressors are running outside of capacity"}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add Direct Emitters to JSON-output."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add power capacity margin for generator set results."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add design head, rate and efficiency for generic compressor charts from design point."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add UNITS to PUMP_CHART_SINGLE_SPEED and PUMP_CHART_VARIABLE_SPEED"}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Added FixedSpeedPressureControl to VariableSpeedCompressorTrainCommonShaft and VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPressures, enabling eCalc to possibly find a solution either along the minimum speed curve or through choking if the discharge pressure at minimum speed it too high. Default set to DOWNSTREAM_CHOKING."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"BREAKING CHANGE!"}),": When specifying a stage in a VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPRessures, the STREAM yaml keyword has been changed from a string to a list, to allow for multiple streams entering or leaving the compressor train at the same stage."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"BREAKING CHANGE!"}),": A CONSUMER with a CONSUMER_SYSTEM. Mixing between SYSTEM and non-system is no longer supported."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"BREAKING CHANGE!"}),": User MUST specify FUEL or POWER as one of the headers in TABULAR format. This was documented as mandatory, but not validated properly, hence eCalc would be allowed to run assuming POWER (incorrectly)."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"fixes",children:(0,r.jsx)(n.em,{children:"Fixes"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Having several ingoing/outgoing streams at the same compressor train stage should now actually work."}),"\n",(0,r.jsx)(n.li,{children:"Extrapolation flag in JSON/CSV-output now correctly indicates if data has been extrapolated. is_valid now indicates if datapoint is valid when extrapolation is turned off."}),"\n",(0,r.jsx)(n.li,{children:"Speed-column no longer required for single speed compressor chart read from file"}),"\n",(0,r.jsx)(n.li,{children:"Support time-slots for CONSUMER with ENERGY_USAGE_MODEL TYPE: CONSUMER_SYSTEM"}),"\n",(0,r.jsx)(n.li,{children:"Re-add support for FUEL timeslots"}),"\n",(0,r.jsx)(n.li,{children:'Failing compressor train when target pressure is too low and pressure control is used. Now correctly runs with valid result and chart area flag "below minimum flow rate".'}),"\n",(0,r.jsx)(n.li,{children:"Use of TABULATED energy_usage_model was not supported in new json result format causing error, will now work."}),"\n",(0,r.jsx)(n.li,{children:"Incorrect default energy_usage_type POWER was always set for TABULATED energy_usage_model. Now it will be set based on FUEL or POWER column specified in facility input. eCalc will fail if neither FUEL nor POWER is specified in the facility inputs file. Patched in v7.4.1"}),"\n",(0,r.jsx)(n.li,{children:"Correct LTP gasTurbineCompressorConsumption calculation when a consumer is not initialized at first timestep of global time vector. Patched in v7.4.2"}),"\n",(0,r.jsx)(n.li,{children:"Choke discharge pressure when using DOWNSTREAM_PRESSURE_CONTROL for variable speed compressor train. Patched in v7.4.2"}),"\n",(0,r.jsx)(n.li,{children:"eCalc must support when using more than one energy usage model for calculating FuelConsumerPowerConsumption for LTP. Previously this resulted in missing calculations. Patched in v7.4.3."}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var r=s(7294);const i={},t=r.createContext(i);function o(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7db788f5.47eeed9c.js b/assets/js/7db788f5.47eeed9c.js new file mode 100644 index 0000000000..0f5f5b02c3 --- /dev/null +++ b/assets/js/7db788f5.47eeed9c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3074],{7422:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var s=i(5893),t=i(1151);const r={title:"Installations",sidebar_position:7,description:"Guide on how to use installations"},o=void 0,a={id:"about/modelling/setup/installations/index",title:"Installations",description:"Guide on how to use installations",source:"@site/docs/about/modelling/setup/installations/index.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/",permalink:"/ecalc/docs/about/modelling/setup/installations/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/index.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Installations",sidebar_position:7,description:"Guide on how to use installations"},sidebar:"about",previous:{title:"Variables",permalink:"/ecalc/docs/about/modelling/setup/variables"},next:{title:"Generator sets",permalink:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations"}},l={},d=[{value:"Referring to time series",id:"referring-to-time-series",level:3},{value:"Time intervals for variables/expressions and models",id:"time-intervals-for-variablesexpressions-and-models",level:3},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"General structure",id:"general-structure",level:3},{value:"Referring to time series",id:"referring-to-time-series-1",level:3},{value:"Time intervals",id:"time-intervals",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," keyword is ",(0,s.jsx)(n.strong,{children:"mandatory"})," within the eCalc\u2122 YAML file."]})}),"\n",(0,s.jsxs)(n.p,{children:["In ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Essentially installations on which fuel is burned to generate energy for the consumers."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The structure of the keywords under ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),"\nis linked to the structure in the general consumer overview for an installation."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," is optional, and generally reserved for use with LTP."]}),"\n",(0,s.jsx)(n.h3,{id:"referring-to-time-series",children:"Referring to time series"}),"\n",(0,s.jsxs)(n.p,{children:["In the installations set up, one may refer to variables from ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"}),"\nin many places by using ",(0,s.jsx)(n.code,{children:"expressions"})," to build up custom, or changing, configurations."]}),"\n",(0,s.jsx)(n.p,{children:"Referring to variables is done on the format:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"<KEY>;<VARIABLE_NAME>\n"})}),"\n",(0,s.jsxs)(n.p,{children:["where ",(0,s.jsx)(n.code,{children:"<KEY>"})," must be defined in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/time_series",children:"TIME_SERIES"}),", defining the time series input source\n(e.g., CSV file), and ",(0,s.jsx)(n.code,{children:"<VARIABLE_NAME>"})," is the name of the variable.\nSee ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/time_series",children:"TIME SERIES"})," for more examples"]}),"\n",(0,s.jsx)(n.h3,{id:"time-intervals-for-variablesexpressions-and-models",children:"Time intervals for variables/expressions and models"}),"\n",(0,s.jsxs)(n.p,{children:["For various reasons, the data in the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," section may vary in time.\nThe consumers may need to be modeled differently due to rebuilds or degeneration. It could be that the user wants to\nmake a simple model for some periods and a more detailed model for others (e.g., a rate only model early time periods and a pressure\ndependent model in the field's late life)."]}),"\n",(0,s.jsxs)(n.p,{children:["For the fields that support multiple time intervals, the syntax is generally to insert a\ndate on the format ",(0,s.jsx)(n.code,{children:"YYYY-MM-DD"})," followed by the expression/model for the time interval between\nthis date and the next entered date. See ",(0,s.jsx)(n.code,{children:"Time intervals"})," for an example."]}),"\n",(0,s.jsx)(n.admonition,{title:"Note",type:"note",children:(0,s.jsx)(n.p,{children:"When time dependency is used, the values before the first time default to 0 (zero)"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HCEXPORT",children:"HCEXPORT"})," is zero before the first time given."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," will have 0 fuel usage before the first time defined, despite a non-zero power load."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL",children:"FUEL"}),": The fuel rate will be 0 before the first entered date."]}),"\n",(0,s.jsx)(n.li,{children:"Consumer energy consumption will be 0 before the first defined time."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: <name of installation 1>\n GENERATORSETS: <generator set specifications for installation 1>\n FUELCONSUMERS: <fuel consumer specifications for installation 1>\n FUEL: <fuel specification for installation 1>\n HCEXPORT: <hydrocarbon export specification for installation 1>\n REGULARITY: <regularity specification for installation 1>\n VENTING_EMITTERS: <direct emissions specification for installation 1>\n CATEGORY: <category for installation 1>\n - NAME: <name of installation 2>\n GENERATORSETS: <generator set specifications for installation 2>\n FUELCONSUMERS: <fuel consumer specifications for installation 2>\n FUEL: <fuel specification for installation 2>\n HCEXPORT: <hydrocarbon export specification for installation 2>\n REGULARITY: <regularity specification for installation 2>\n VENTING_EMITTERS: <direct emissions specification for installation 2>\n CATEGORY: <category for installation 2>\n - ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.h3,{id:"general-structure",children:"General structure"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS\n - NAME: Platform_A\n CATEGORY: FIXED\n <The data for installation 1 to be put here>\n - NAME: Platform_B\n CATEGORY: MOBILE\n <The data for installation 2 to be put here>\n"})}),"\n",(0,s.jsx)(n.h3,{id:"referring-to-time-series-1",children:"Referring to time series"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"SIM;OIL_PROD\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"SIM"})," is the key defined in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The user can define expressions of variables,\nsee ",(0,s.jsx)(n.code,{children:"expressions"})," for details. The following is an example of using expressions:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"SIM1;WATER_PROD:FIELD_A {+} SIM2;WATER_PROD:FIELD_B\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"SIM1"})," and ",(0,s.jsx)(n.code,{children:"SIM2"})," are here different reservoir sources with potential different time steps.\nThis is not a problem and handled by eCalc automatically."]}),"\n",(0,s.jsx)(n.h3,{id:"time-intervals",children:"Time intervals"}),"\n",(0,s.jsxs)(n.p,{children:["This example uses the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HCEXPORT",children:"HCEXPORT"})," keyword."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Example: same expression for the entire time frame"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"HCEXPORT: SIM;OIL_PROD\n"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Example: expression varies through time"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"HCEXPORT:\n 2001-01-01: SIM1;OIL_PROD\n 2005-01-01: SIM2:OIL_PROD {+} SIM2;GAS_SALES\n"})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>a,a:()=>o});var s=i(7294);const t={},r=s.createContext(t);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7e6991bb.8ccfd93e.js b/assets/js/7e6991bb.8ccfd93e.js new file mode 100644 index 0000000000..7e4c331a7f --- /dev/null +++ b/assets/js/7e6991bb.8ccfd93e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2040],{8148:(e,s,d)=>{d.r(s),d.d(s,{assets:()=>c,contentTitle:()=>t,default:()=>a,frontMatter:()=>i,metadata:()=>l,toc:()=>h});var r=d(5893),n=d(1151);const i={title:"Sampled compressor model",sidebar_position:3,description:"Sampled compressor model"},t=void 0,l={id:"about/modelling/setup/facility_inputs/sampled_compressor_model",title:"Sampled compressor model",description:"Sampled compressor model",source:"@site/docs/about/modelling/setup/facility_inputs/sampled_compressor_model.md",sourceDirName:"about/modelling/setup/facility_inputs",slug:"/about/modelling/setup/facility_inputs/sampled_compressor_model",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/sampled_compressor_model.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Sampled compressor model",sidebar_position:3,description:"Sampled compressor model"},sidebar:"about",previous:{title:"Pump chart",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"},next:{title:"Tabular models",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/tabular"}},c={},h=[{value:"Format",id:"format",level:2},{value:"Header requirements for the sampled compressor csv file",id:"header-requirements-for-the-sampled-compressor-csv-file",level:2},{value:"Units",id:"units",level:2},{value:"Example tables",id:"example-tables",level:2},{value:"1D example",id:"1d-example",level:3},{value:"3D example",id:"3d-example",level:3}];function o(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(s.p,{children:["The compressor model is set up in an external tool, and this model is sampled by\nrunning a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a ",(0,r.jsx)(s.code,{children:".csv"})," file and\ninputted into eCalc\u2122. Each line in the ",(0,r.jsx)(s.code,{children:".csv"})," defines a point (rate, suction pressure, discharge pressure) and the total energy usage."]}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:["For ",(0,r.jsx)(s.strong,{children:"electrically driven"})," compressor trains. The total energy usage should be given in megawatts (MW)."]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:["For ",(0,r.jsx)(s.strong,{children:"turbine driven"})," compressor trains. It is recommended to give the total energy usage in megawatts (MW) and couple the compressor model to a turbine model. However, it is possible (for backward compatibility) to give the total energy usage as fuel usage in standard cubic meters per day (Sm",(0,r.jsx)("sup",{children:"3"}),"/day) and use the model directly. In this case, you can also provide a POWER (MW) column to calculate power for the shaft based on fuel usage."]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"The latter (turbine driven compressor train) will at some point become deprecated as it is replaced by COMPRESSOR_WITH_TURBINE mentioned above.*"}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:["Inside the convex hull defined by the input variables, there is a\n",(0,r.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Barycentric_coordinate_system#Interpolation_on_a_triangular_unstructured_grid",children:(0,r.jsx)(s.code,{children:"barycentric interpolation"})}),"\nbased on a ",(0,r.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Delaunay_triangulation",children:(0,r.jsx)(s.code,{children:"Delaunay triangulation"})}),"."]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"Outside the defined area, there may be extrapolations where this is reasonable, i.e.,"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"for rates lower than the defined rates, the table is extrapolated up to minimum\nflow (to mimic ASV (anti-surge valve)/recirculation valve)"}),"\n",(0,r.jsx)(s.li,{children:"the suction pressure is extrapolated down to the defined area"}),"\n",(0,r.jsx)(s.li,{children:"the discharge pressure is extrapolated up to defined area to mimic choking when the required\nhead is lower than the compressor operational area."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,r.jsxs)(s.p,{children:["The sampled compressor model is defined under the main keyword ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:(0,r.jsx)(s.code,{children:"FACILITY_INPUTS"})})," in the format"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:" NAME: <model name>\n FILE: <sampled_data>.csv\n TYPE: COMPRESSOR_TABULAR\n"})}),"\n",(0,r.jsx)(s.h2,{id:"header-requirements-for-the-sampled-compressor-csv-file",children:"Header requirements for the sampled compressor csv file"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"POWER"})," (and/or ",(0,r.jsx)(s.code,{children:"FUEL"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["A minimum of one (but more are allowed) of the following:","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"RATE"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"SUCTION_PRESSURE"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURE"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["In cases where the model is directly used as a turbine/fuel driven compressor without coupling it to an eCalc turbine\nmodel, ",(0,r.jsx)(s.code,{children:"POWER"})," may be replaced by ",(0,r.jsx)(s.code,{children:"FUEL"}),"."]}),"\n",(0,r.jsx)(s.admonition,{title:"Shaft power reporting",type:"info",children:(0,r.jsxs)(s.p,{children:["In the case ",(0,r.jsx)(s.code,{children:"FUEL"})," is provided, it is also possible to specify ",(0,r.jsx)(s.code,{children:"POWER"})," in the csv-file in order to calculate shaft power usage for fuel driven compressors"]})}),"\n",(0,r.jsxs)(s.p,{children:["If only ",(0,r.jsx)(s.code,{children:"POWER"})," is provided, we assume that the compressor is electrical-driven\nIf ",(0,r.jsx)(s.code,{children:"FUEL"})," is provided, we assume that the compressor is turbine-driven (also when both ",(0,r.jsx)(s.code,{children:"FUEL"})," and ",(0,r.jsx)(s.code,{children:"POWER"})," is given)"]}),"\n",(0,r.jsx)(s.h2,{id:"units",children:"Units"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Quantity"}),(0,r.jsx)(s.th,{children:"Units"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"POWER"})}),(0,r.jsx)(s.td,{children:"MW"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"RATE"})}),(0,r.jsxs)(s.td,{children:["Sm",(0,r.jsx)("sup",{children:"3"}),"/day"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"SUCTION_PRESSURE"})}),(0,r.jsx)(s.td,{children:"bar"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURE"})}),(0,r.jsx)(s.td,{children:"bar"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"FUEL"})}),(0,r.jsxs)(s.td,{children:["Sm",(0,r.jsx)("sup",{children:"3"}),"/day"]})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"example-tables",children:"Example tables"}),"\n",(0,r.jsx)(s.h3,{id:"1d-example",children:"1D example"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"RATE"}),(0,r.jsx)(s.th,{children:"POWER"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"0"}),(0,r.jsx)(s.td,{children:"0"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"100000"}),(0,r.jsx)(s.td,{children:"10"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1000000"}),(0,r.jsx)(s.td,{children:"10"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2600000"}),(0,r.jsx)(s.td,{children:"15"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4400000"}),(0,r.jsx)(s.td,{children:"20"})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"3d-example",children:"3D example"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"RATE"}),(0,r.jsx)(s.th,{children:"SUCTION_PRESSURE"}),(0,r.jsx)(s.th,{children:"DISCHARGE_PRESSURE"}),(0,r.jsx)(s.th,{children:"POWER"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"10"}),(0,r.jsx)(s.td,{children:"12.72"}),(0,r.jsx)(s.td,{children:"0.3664"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"10"}),(0,r.jsx)(s.td,{children:"26.21"}),(0,r.jsx)(s.td,{children:"2.293"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"26"}),(0,r.jsx)(s.td,{children:"31.36"}),(0,r.jsx)(s.td,{children:"0.2739"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"26"}),(0,r.jsx)(s.td,{children:"70.77"}),(0,r.jsx)(s.td,{children:"6.28"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"34"}),(0,r.jsx)(s.td,{children:"41.21"}),(0,r.jsx)(s.td,{children:"0.368"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"34"}),(0,r.jsx)(s.td,{children:"94.24"}),(0,r.jsx)(s.td,{children:"8.435"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"78"}),(0,r.jsx)(s.td,{children:"94.12"}),(0,r.jsx)(s.td,{children:"0.7401"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"78"}),(0,r.jsx)(s.td,{children:"231.6"}),(0,r.jsx)(s.td,{children:"22.46"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"26"}),(0,r.jsx)(s.td,{children:"36.93"}),(0,r.jsx)(s.td,{children:"4.197"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"26"}),(0,r.jsx)(s.td,{children:"57.43"}),(0,r.jsx)(s.td,{children:"7.32"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"38"}),(0,r.jsx)(s.td,{children:"46.96"}),(0,r.jsx)(s.td,{children:"2.156"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"38"}),(0,r.jsx)(s.td,{children:"106.2"}),(0,r.jsx)(s.td,{children:"9.557"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"54"}),(0,r.jsx)(s.td,{children:"67.26"}),(0,r.jsx)(s.td,{children:"1.95"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"54"}),(0,r.jsx)(s.td,{children:"155.6"}),(0,r.jsx)(s.td,{children:"14.35"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"78"}),(0,r.jsx)(s.td,{children:"94.17"}),(0,r.jsx)(s.td,{children:"1.399"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"78"}),(0,r.jsx)(s.td,{children:"231.6"}),(0,r.jsx)(s.td,{children:"22.46"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.10E+07"}),(0,r.jsx)(s.td,{children:"42"}),(0,r.jsx)(s.td,{children:"66.92"}),(0,r.jsx)(s.td,{children:"9.712"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.10E+07"}),(0,r.jsx)(s.td,{children:"42"}),(0,r.jsx)(s.td,{children:"81.63"}),(0,r.jsx)(s.td,{children:"11.89"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.10E+07"}),(0,r.jsx)(s.td,{children:"62"}),(0,r.jsx)(s.td,{children:"75.64"}),(0,r.jsx)(s.td,{children:"3.678"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.10E+07"}),(0,r.jsx)(s.td,{children:"62"}),(0,r.jsx)(s.td,{children:"180.8"}),(0,r.jsx)(s.td,{children:"16.94"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.10E+07"}),(0,r.jsx)(s.td,{children:"78"}),(0,r.jsx)(s.td,{children:"97.79"}),(0,r.jsx)(s.td,{children:"3.452"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.10E+07"}),(0,r.jsx)(s.td,{children:"78"}),(0,r.jsx)(s.td,{children:"231.6"}),(0,r.jsx)(s.td,{children:"22.46"})]})]})]})]})}function a(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},1151:(e,s,d)=>{d.d(s,{Z:()=>l,a:()=>t});var r=d(7294);const n={},i=r.createContext(n);function t(e){const s=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:t(e.components),r.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/81dd00c5.a58b205b.js b/assets/js/81dd00c5.a58b205b.js new file mode 100644 index 0000000000..0a1c82c7ad --- /dev/null +++ b/assets/js/81dd00c5.a58b205b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2548],{7206:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>a,contentTitle:()=>s,default:()=>v,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var n=o(5893),i=o(1151);const r={title:"v8.5 to v8.6",description:"v8.5 to v8.6 migration",sidebar_position:5},s="v8.5 to v8.6",c={id:"about/migration_guides/v8-5_to_v8-6",title:"v8.5 to v8.6",description:"v8.5 to v8.6 migration",source:"@site/docs/about/migration_guides/v8-5_to_v8-6.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8-5_to_v8-6",permalink:"/ecalc/docs/about/migration_guides/v8-5_to_v8-6",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8-5_to_v8-6.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"v8.5 to v8.6",description:"v8.5 to v8.6 migration",sidebar_position:5},sidebar:"about",previous:{title:"v8.3 to v8.4",permalink:"/ecalc/docs/about/migration_guides/v8-3_to_v8-4"},next:{title:"v8.6 to v8.7",permalink:"/ecalc/docs/about/migration_guides/v8-6_to_v8-7"}},a={},d=[{value:"Economics",id:"economics",level:2}];function u(t){const e={code:"code",h1:"h1",h2:"h2",p:"p",...(0,i.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"v85-to-v86",children:"v8.5 to v8.6"}),"\n",(0,n.jsx)(e.h2,{id:"economics",children:"Economics"}),"\n",(0,n.jsxs)(e.p,{children:["Economic details have been deprecated from eCalc.\nIf you have used input data such as ",(0,n.jsx)(e.code,{children:"TAX"}),", ",(0,n.jsx)(e.code,{children:"QUOTA"})," and ",(0,n.jsx)(e.code,{children:"PRICE"})," for fuel and emissions in your model,\nthey will be ignored and hence not reported. It will be treated as an error in a future version of eCalc."]})]})}function v(t={}){const{wrapper:e}={...(0,i.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(u,{...t})}):u(t)}},1151:(t,e,o)=>{o.d(e,{Z:()=>c,a:()=>s});var n=o(7294);const i={},r=n.createContext(i);function s(t){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:s(t.components),n.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/841adc37.adf27db4.js b/assets/js/841adc37.adf27db4.js new file mode 100644 index 0000000000..14609b8e0d --- /dev/null +++ b/assets/js/841adc37.adf27db4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6768],{7057:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>t,contentTitle:()=>l,default:()=>o,frontMatter:()=>m,metadata:()=>r,toc:()=>c});var a=n(5893),i=n(1151);const m={sidebar_position:4,description:"Turbine modelling"},l="Turbine modelling",r={id:"about/modelling/setup/models/turbine_modeling",title:"Turbine modelling",description:"Turbine modelling",source:"@site/docs/about/modelling/setup/models/turbine_modeling.md",sourceDirName:"about/modelling/setup/models",slug:"/about/modelling/setup/models/turbine_modeling",permalink:"/ecalc/docs/about/modelling/setup/models/turbine_modeling",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/turbine_modeling.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,description:"Turbine modelling"},sidebar:"about",previous:{title:"Fixed speed pressure control",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/"},next:{title:"Fuel types",permalink:"/ecalc/docs/about/modelling/setup/fuel_types"}},t={},c=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Combining a compressor train and a turbine into one model",id:"combining-a-compressor-train-and-a-turbine-into-one-model",level:3},{value:"Format",id:"format-1",level:2},{value:"Examples",id:"examples",level:2}];function d(e){const s={annotation:"annotation",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",math:"math",mfrac:"mfrac",mi:"mi",mo:"mo",mrow:"mrow",p:"p",pre:"pre",semantics:"semantics",span:"span",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h1,{id:"turbine-modelling",children:"Turbine modelling"}),"\n",(0,a.jsx)(s.p,{children:"The turbine model requires values for efficiencies vs corresponding loads. Currently also a lower heating value needs to\nbe specified (planned feature is to get this from the fuel type used)"}),"\n",(0,a.jsx)(s.p,{children:"The load values are given in MW, while efficiency values are numbers between 0 and 1."}),"\n",(0,a.jsx)(s.p,{children:"The fuel usage for a turbine is equal to"}),"\n",(0,a.jsx)(s.span,{className:"katex-display",children:(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"F"}),(0,a.jsx)(s.mi,{children:"U"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"L"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"U"}),(0,a.jsx)(s.mi,{children:"S"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"G"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mo,{children:"="}),(0,a.jsxs)(s.mfrac,{children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"L"}),(0,a.jsx)(s.mi,{children:"O"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"D"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"I"}),(0,a.jsx)(s.mi,{children:"N"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"M"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"G"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"W"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mo,{children:"\u2217"}),(0,a.jsx)(s.mi,{children:"S"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"C"}),(0,a.jsx)(s.mi,{children:"O"}),(0,a.jsx)(s.mi,{children:"N"}),(0,a.jsx)(s.mi,{children:"D"}),(0,a.jsx)(s.mi,{children:"S"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"P"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"R"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"D"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"Y"})]}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"L"}),(0,a.jsx)(s.mi,{children:"O"}),(0,a.jsx)(s.mi,{children:"W"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"R"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"H"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mi,{children:"I"}),(0,a.jsx)(s.mi,{children:"N"}),(0,a.jsx)(s.mi,{children:"G"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"V"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"L"}),(0,a.jsx)(s.mi,{children:"U"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mo,{children:"\u2217"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"F"}),(0,a.jsx)(s.mi,{children:"F"}),(0,a.jsx)(s.mi,{children:"I"}),(0,a.jsx)(s.mi,{children:"C"}),(0,a.jsx)(s.mi,{children:"I"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"N"}),(0,a.jsx)(s.mi,{children:"C"}),(0,a.jsx)(s.mi,{children:"Y"})]})]})]}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"FUEL\\_USAGE = \\frac{LOAD\\_IN\\_MEGAWATT * SECONDS\\_PER\\_DAY}{LOWER\\_HEATING\\_VALUE * EFFICIENCY}"})]})})}),(0,a.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.9933em",verticalAlign:"-0.31em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"U"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"L"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"U"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"GE"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel",children:"="}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"2.3793em",verticalAlign:"-0.996em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,a.jsx)(s.span,{className:"mfrac",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsxs)(s.span,{className:"vlist",style:{height:"1.3833em"},children:[(0,a.jsxs)(s.span,{style:{top:"-2.314em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",children:"L"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"O"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"W"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"ER"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.08125em"},children:"H"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07847em"},children:"I"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"NG"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"LU"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\u2217"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"EFF"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07847em"},children:"I"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07847em"},children:"I"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"ENC"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"Y"})]})]}),(0,a.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,a.jsxs)(s.span,{style:{top:"-3.7em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",children:"L"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"O"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"D"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07847em"},children:"I"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"N"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"MEG"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"W"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"TT"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\u2217"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"SECON"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"D"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"PER"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"D"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"Y"})]})]})]}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.996em"},children:(0,a.jsx)(s.span,{})})})]})}),(0,a.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})]})]})}),"\n",(0,a.jsx)(s.p,{children:"When evaluated for a load (in units MW), the efficiency is evaluated by linearly interpolating the input load vs\nefficiency data."}),"\n",(0,a.jsx)(s.p,{children:"The input values for load and efficiency are lists which both MUST START WITH 0! The user is thus responsible for the\nbehaviour also for small load values."}),"\n",(0,a.jsx)(s.p,{children:"For load values equal to 0, the fuel usage is also set to 0."}),"\n",(0,a.jsxs)(s.p,{children:["Lower heating value is given in units ",(0,a.jsxs)(s.em,{children:["MJ/Sm",(0,a.jsx)("sup",{children:"3"})]})]}),"\n",(0,a.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>\n TURBINE_LOADS: <list of power values in mega watt>\n TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n"})}),"\n",(0,a.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n"})}),"\n",(0,a.jsx)(s.h3,{id:"combining-a-compressor-train-and-a-turbine-into-one-model",children:"Combining a compressor train and a turbine into one model"}),"\n",(0,a.jsx)(s.p,{children:"To model a turbine driven compressor train, a compressor train model needs to be combined with a turbine model. The\ncalculated shaft power required for the compressor train, will then be the input of the turbine model to calculate\nfuel usage."}),"\n",(0,a.jsx)(s.h2,{id:"format-1",children:"Format"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of turbine model, for reference>\n TYPE: COMPRESSOR_WITH_TURBINE\n COMPRESSOR_MODEL: <reference to compressor train model defined in [MODELS](../references/keywords/MODELS) or [FACILITY_INPUTS](../references/keywords/FACILITY_INPUTS) (of type COMPRESSOR_TABULAR)>\n TURBINE_MODEL: <reference to a turbine model defined in [MODELS](../references/keywords/MODELS) (of type TURBINE)>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n"})}),"\n",(0,a.jsx)(s.h2,{id:"examples",children:"Examples"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: simplified_compressor_train_model_with_turbine\n TYPE: COMPRESSOR_WITH_TURBINE\n COMPRESSOR_MODEL: simplified_compressor_train_model\n TURBINE_MODEL: compressor_train_turbine\n POWER_ADJUSTMENT_CONSTANT: 10\n"})}),"\n",(0,a.jsxs)(s.p,{children:["Turbine combined with presampled compressor model (",(0,a.jsx)(s.code,{children:"COMPRESSOR_TABULAR<COMPRESSOR_TABULAR facility input type>"}),")"]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_sampled_tabulated_model_with_turbine\n TYPE: COMPRESSOR_WITH_TURBINE\n COMPRESSOR_MODEL: compressor_sampled_tabulated_model\n TURBINE_MODEL: compressor_train_turbine\n POWER_ADJUSTMENT_CONSTANT: 10\n"})})]})}function o(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},1151:(e,s,n)=>{n.d(s,{Z:()=>r,a:()=>l});var a=n(7294);const i={},m=a.createContext(i);function l(e){const s=a.useContext(m);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),a.createElement(m.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8443.b56128a0.js b/assets/js/8443.b56128a0.js new file mode 100644 index 0000000000..6d410e191a --- /dev/null +++ b/assets/js/8443.b56128a0.js @@ -0,0 +1,2 @@ +/*! For license information please see 8443.b56128a0.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8443],{8443:(t,e,n)=>{"use strict";t.exports=n(295)},1228:(t,e,n)=>{"use strict";var i=n(2856),s={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};i.isMsie()&&i.mixin(s.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&i.isMsie()<=7&&i.mixin(s.input,{marginTop:"-1px"}),t.exports=s},9050:(t,e,n)=>{"use strict";var i="aaDataset",s="aaValue",r="aaDatum",o=n(2856),a=n(4910),u=n(3561),c=n(1228),l=n(3109);function h(t){var e;(t=t||{}).templates=t.templates||{},t.source||o.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&o.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?o.getUniqueId():t.name,this.source=t.source,this.displayFn=function(t){return t=t||"value",o.isFunction(t)?t:e;function e(e){return e[t]}}(t.display||t.displayKey),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=function(t,e){return{empty:t.empty&&o.templatify(t.empty),header:t.header&&o.templatify(t.header),footer:t.footer&&o.templatify(t.footer),suggestion:t.suggestion||n};function n(t){return"<p>"+e(t)+"</p>"}}(t.templates,this.displayFn),this.css=o.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=o.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var n=o.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(n+"-"+this.name).length>0?a.element(t.$menu.find(n+"-"+this.name)[0]):a.element(u.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(t){return a.element(t).data(i)},h.extractValue=function(t){return a.element(t).data(s)},h.extractDatum=function(t){var e=a.element(t).data(r);return"string"==typeof e&&(e=JSON.parse(e)),e},o.mixin(h.prototype,l,{_render:function(t,e){if(this.$el){var n,c=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(function(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),c.templates.empty.apply(this,e)}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(n)this.$el.html(function(){var t,n,l=[].slice.call(arguments,0),h=this,p=u.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=a.element(p).css(this.css.suggestions),n=o.map(e,f),t.append.apply(t,n),t;function f(t){var e,n=u.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(e=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(c.templates.suggestion.apply(this,[t].concat(l)))).data(i,c.name),e.data(s,c.displayFn(t)||void 0),e.data(r,JSON.stringify(t)),e.children().each((function(){a.element(this).css(h.css.suggestionChild)})),e}}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.header.apply(this,e)}function p(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,i=function(){n.canceled||n.source(t,e.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,i()}),this.debounce)}else i()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.$el&&(this.cancel(),this.$el.empty(),this.trigger("rendered",""))},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=h},3354:(t,e,n)=>{"use strict";var i=n(2856),s=n(4910),r=n(3109),o=n(9050),a=n(1228);function u(t){var e,n,r,o=this;(t=t||{}).menu||i.error("menu is required"),i.isArray(t.datasets)||i.isObject(t.datasets)||i.error("1 or more datasets required"),t.datasets||i.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=i.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=i.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=i.bind(this._onSuggestionClick,this),n=i.bind(this._onSuggestionMouseEnter,this),r=i.bind(this._onSuggestionMouseLeave,this);var c=i.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=s.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,r).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=i.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=i.templatify(t.templates.empty),this.$empty=s.element('<div class="'+i.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=i.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(i.mixin({$menu:t,cssClasses:n},e))}(o.$menu,e,t.cssClasses)})),i.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&o.$menu.append(e),t.onSync("rendered",o._onRendered,o)})),t.templates&&t.templates.footer&&(this.templates.footer=i.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;s.element(window).resize((function(){l._redraw()}))}i.mixin(u.prototype,r,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",s.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=s.element(t.currentTarget);if(!e.hasClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){if(t.relatedTarget&&s.element(t.relatedTarget).closest("."+i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(t,e){if(this.isEmpty=i.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length<this.minLength)this._hide();else{var n=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(n),this.$empty.show(),this._show()}else i.any(this.datasets,(function(t){return t.templates&&t.templates.empty}))?e.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),e.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,i,s;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!==(i=((i=e.index(n)+t)+1)%(e.length+1)-1)?(i<-1&&(i=e.length-1),this._setCursor(s=e.eq(i),!0),this._ensureVisible(s)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,i,s;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),i=this.$menu.scrollTop(),s=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(i+e):s<n&&this.$menu.scrollTop(i+(n-s))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(t){this.$menu.css("ltr"===t?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(t){var e=null;return t.length&&(e={raw:o.extractDatum(t),value:o.extractValue(t),datasetName:o.extractDatasetName(t)}),e},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(t){i.each(this.datasets,(function(e){e.update(t)}))},empty:function(){i.each(this.datasets,(function(t){t.clear()})),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){this.$menu.off(".aa"),this.$menu=null,i.each(this.datasets,(function(t){t.destroy()}))}}),u.Dataset=o,t.exports=u},50:(t,e,n)=>{"use strict";var i=n(2856),s=n(4910);function r(t){t&&t.el||i.error("EventBus initialized without el"),this.$el=s.element(t.el)}i.mixin(r.prototype,{trigger:function(t,e,n,s){var r=i.Event("autocomplete:"+t);return this.$el.trigger(r,[e,n,s]),r}}),t.exports=r},3109:(t,e,n)=>{"use strict";var i=n(624),s=/\s+/;function r(t,e,n,i){var r;if(!n)return this;for(e=e.split(s),n=i?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(n,i):n,this._callbacks=this._callbacks||{};r=e.shift();)this._callbacks[r]=this._callbacks[r]||{sync:[],async:[]},this._callbacks[r][t].push(n);return this}function o(t,e,n){return function(){for(var i,s=0,r=t.length;!i&&s<r;s+=1)i=!1===t[s].apply(e,n);return!i}}t.exports={onSync:function(t,e,n){return r.call(this,"sync",t,e,n)},onAsync:function(t,e,n){return r.call(this,"async",t,e,n)},off:function(t){var e;if(!this._callbacks)return this;t=t.split(s);for(;e=t.shift();)delete this._callbacks[e];return this},trigger:function(t){var e,n,r,a,u;if(!this._callbacks)return this;t=t.split(s),r=[].slice.call(arguments,1);for(;(e=t.shift())&&(n=this._callbacks[e]);)a=o(n.sync,this,[e].concat(r)),u=o(n.async,this,[e].concat(r)),a()&&i(u);return this}}},3561:t=>{"use strict";t.exports={wrapper:'<span class="%ROOT%"></span>',dropdown:'<span class="%PREFIX%%DROPDOWN_MENU%"></span>',dataset:'<div class="%PREFIX%%DATASET%-%CLASS%"></div>',suggestions:'<span class="%PREFIX%%SUGGESTIONS%"></span>',suggestion:'<div class="%PREFIX%%SUGGESTION%"></div>'}},2534:(t,e,n)=>{"use strict";var i;i={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var s=n(2856),r=n(4910),o=n(3109);function a(t){var e,n,o,a,u,c=this;(t=t||{}).input||s.error("input is missing"),e=s.bind(this._onBlur,this),n=s.bind(this._onFocus,this),o=s.bind(this._onKeydown,this),a=s.bind(this._onInput,this),this.$hint=r.element(t.hint),this.$input=r.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",o),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=s.noop),s.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){i[t.which||t.keyCode]||s.defer(s.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,r.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},s.mixin(a.prototype,o,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=i[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,i,s;switch(t){case"tab":i=this.getHint(),s=this.getInputValue(),n=i&&i!==s&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;if("tab"===t)n=!u(e);else n=!0;return n},_checkInputValue:function(){var t,e,n,i,s;t=this.getInputValue(),i=t,s=this.query,n=!(!(e=a.normalizeQuery(i)===a.normalizeQuery(s))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,s.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},6549:(t,e,n)=>{"use strict";var i="aaAttrs",s=n(2856),r=n(4910),o=n(50),a=n(2534),u=n(3354),c=n(3561),l=n(1228);function h(t){var e,n;if((t=t||{}).input||s.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=s.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=s.mixin({},l,t.appendTo?l.appendTo:{}),this.cssClasses=t.cssClasses=s.mixin({},l.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=s.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",s.getUniqueId()].join("-");var a=function(t){var e,n,o,a;e=r.element(t.input),n=r.element(c.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var u=c.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=r.element(u).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(s.templatify(t.templates.dropdownMenu)());a=e.clone().css(t.css.hint).css(function(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}(e)),a.val("").addClass(s.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),a.removeData&&a.removeData();e.data(i,{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(s.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(l){}return n=t.appendTo?n.appendTo(r.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent(),n.prepend(t.hint?a:null).append(o),{wrapper:n,input:e,hint:a,menu:o}}(t);this.$node=a.wrapper;var u=this.$input=a.input;e=a.menu,n=a.hint,t.dropdownMenuContainer&&r.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),u.on("blur.aa",(function(t){var n=document.activeElement;s.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),s.defer((function(){u.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:u}),this.dropdown=new h.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:u,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}s.mixin(h.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];s.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),r.element(document).keydown((function(t){var i=t.target||t.srcElement,s=i.tagName;if(!i.isContentEditable&&"INPUT"!==s&&"SELECT"!==s&&"TEXTAREA"!==s){var r=t.which||t.keyCode;-1!==n.indexOf(r)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),i=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(i),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var i=t.left-e.left;this.$node.css("left",i+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&t?this._select(t,n):this.autoselectOnBlur&&e?this._select(e,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,i;n=this.dropdown.getDatumForCursor(),i=this.dropdown.getDatumForTopSuggestion();var s={selectionMethod:"enterKey"};n?(this._select(n,s),e.preventDefault()):this.autoselect&&i&&(this._select(i,s),e.preventDefault())},_onTabKeyed:function(t,e){if(this.tabAutocomplete){var n;(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),e.preventDefault()):this._autocomplete(!0)}else this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,r;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=a.normalizeQuery(e),i=s.escapeRegExChars(n),(r=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+r[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,i,s;e=this.input.getHint(),n=this.input.getQuery(),i=t||this.input.isCursorAtEnd(),e&&n!==e&&i&&((s=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(s.value),this.eventBus.trigger("autocompleted",s.raw,s.datasetName))},_select:function(t,e){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName,e).isDefaultPrevented()&&(this.dropdown.close(),s.defer(s.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=s.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(t,e){var n=t.find(s.className(e.prefix,e.input));s.each(n.data(i),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(s.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData(i);t.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=u,h.Input=a,h.sources=n(8840),t.exports=h},4910:t=>{"use strict";t.exports={element:null}},6177:t=>{"use strict";t.exports=function(t){var e=t.match(/Algolia for JavaScript \((\d+\.)(\d+\.)(\d+)\)/)||t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},2856:(t,e,n)=>{"use strict";var i,s=n(8820),r=n(4910);function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,i){t&&(n.isArray(t)?e[i]=[].concat(t):n.isObject(t)&&(e[i]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(i,s){n&&(n=e.call(null,i,s,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(i,s){if(e.call(null,i,s,t))return n=!0,!1})),n):n},getUniqueId:(i=0,function(){return i++}),templatify:function(t){if(this.isFunction(t))return t;var e=r.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return n?t+e:"."+s(t+e,{isIdentifier:!0})},escapeHighlightedString:function(t,e,n){e=e||"<em>";var i=document.createElement("div");i.appendChild(document.createTextNode(e)),n=n||"</em>";var s=document.createElement("div");s.appendChild(document.createTextNode(n));var r=document.createElement("div");return r.appendChild(document.createTextNode(t)),r.innerHTML.replace(RegExp(o(i.innerHTML),"g"),e).replace(RegExp(o(s.innerHTML),"g"),n)}}},9983:(t,e,n)=>{"use strict";var i=n(2856),s=n(533),r=n(6177);var o,a,u=(o=[],a=window.Promise.resolve(),function(t,e){return function(n,s){(function(t,e){return window.Promise.resolve().then((function(){return o.length&&(a=t.search(o),o=[]),a})).then((function(t){if(t)return t.results[e]}))})(t.as,o.push({indexName:t.indexName,query:n,params:e})-1).then((function(t){t&&s(t.hits,t)})).catch((function(t){i.error(t.message)}))}});t.exports=function(t,e){var n=r(t.as._ua);if(n&&n[0]>=3&&n[1]>20){var i="autocomplete.js "+s;-1===t.as._ua.indexOf(i)&&(t.as._ua+="; "+i)}return u(t,e)}},8840:(t,e,n)=>{"use strict";t.exports={hits:n(9983),popularIn:n(4445)}},4445:(t,e,n)=>{"use strict";var i=n(2856),s=n(533),r=n(6177);t.exports=function(t,e,n,o){var a=r(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+s),!n.source)return i.error("Missing 'source' key");var u=i.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return i.error("Missing 'index' key");var c=n.index;return o=o||{},function(a,l){t.search(a,e,(function(t,a){if(t)i.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],p=i.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var f=r(c.as._ua);return f&&f[0]>=3&&f[1]>20&&(e.additionalUA="autocomplete.js "+s),void c.search(u(h),p,(function(t,e){if(t)i.error(t.message);else{var n=[];if(o.includeAll){var s=o.allTitle||"All departments";n.push(i.mixin({facet:{value:s,count:e.nbHits}},i.cloneDeep(h)))}i.each(e.facets,(function(t,e){i.each(t,(function(t,s){n.push(i.mixin({facet:{facet:e,value:s,count:t}},i.cloneDeep(h)))}))}));for(var r=1;r<a.hits.length;++r)n.push(a.hits[r]);l(n,a)}}))}l([])}}))}}},295:(t,e,n)=>{"use strict";var i=n(6990);n(4910).element=i;var s=n(2856);s.isArray=i.isArray,s.isFunction=i.isFunction,s.isObject=i.isPlainObject,s.bind=i.proxy,s.each=function(t,e){i.each(t,(function(t,n){return e(n,t)}))},s.map=i.map,s.mixin=i.extend,s.Event=i.Event;var r="aaAutocomplete",o=n(6549),a=n(50);function u(t,e,n,u){n=s.isArray(n)?n:[].slice.call(arguments,2);var c=i(t).each((function(t,s){var c=i(s),l=new a({el:c}),h=u||new o({input:c,eventBus:l,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth,ariaLabel:e.ariaLabel||s.getAttribute("aria-label")});c.data(r,h)}));return c.autocomplete={},s.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){c.autocomplete[t]=function(){var e,n=arguments;return c.each((function(s,o){var a=i(o).data(r);e=a[t].apply(a,n)})),e}})),c}u.sources=o.sources,u.escapeHighlightedString=s.escapeHighlightedString;var c="autocomplete"in window,l=window.autocomplete;u.noConflict=function(){return c?window.autocomplete=l:delete window.autocomplete,u},t.exports=u},533:t=>{t.exports="0.38.1"},6990:t=>{var e;e=window,t.exports=function(t){var e,n,i=function(){var e,n,i,s,r,o,a=[],u=a.concat,c=a.filter,l=a.slice,h=t.document,p={},f={},d={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},g=/^\s*<(\w+|!)[^>]*>/,m=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,w=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],C=["after","prepend","before","append"],x=h.createElement("table"),_=h.createElement("tr"),S={tr:h.createElement("tbody"),tbody:x,thead:x,tfoot:x,td:_,th:_,"*":h.createElement("div")},E=/complete|loaded|interactive/,A=/^[\w-]*$/,$={},T=$.toString,O={},D=h.createElement("div"),N={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},k=Array.isArray||function(t){return t instanceof Array};function I(t){return null==t?String(t):$[T.call(t)]||"object"}function P(t){return"function"==I(t)}function L(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function F(t){return"object"==I(t)}function R(t){return F(t)&&!L(t)&&Object.getPrototypeOf(t)==Object.prototype}function q(t){var e=!!t&&"length"in t&&t.length,n=i.type(t);return"function"!=n&&!L(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function V(t){return c.call(t,(function(t){return null!=t}))}function H(t){return t.length>0?i.fn.concat.apply([],t):t}function B(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function K(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function j(t,e){return"number"!=typeof e||d[B(t)]?e:e+"px"}function z(t){var e,n;return p[t]||(e=h.createElement(t),h.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),p[t]=n),p[t]}function U(t){return"children"in t?l.call(t.children):i.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function Q(t,e){var n,i=t?t.length:0;for(n=0;n<i;n++)this[n]=t[n];this.length=i,this.selector=e||""}function W(t,i,s){for(n in i)s&&(R(i[n])||k(i[n]))?(R(i[n])&&!R(t[n])&&(t[n]={}),k(i[n])&&!k(t[n])&&(t[n]=[]),W(t[n],i[n],s)):i[n]!==e&&(t[n]=i[n])}function Z(t,e){return null==e?i(t):i(t).filter(e)}function X(t,e,n,i){return P(e)?e.call(t,n,i):e}function G(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function J(t,n){var i=t.className||"",s=i&&i.baseVal!==e;if(n===e)return s?i.baseVal:i;s?i.baseVal=n:t.className=n}function Y(t){try{return t?"true"==t||"false"!=t&&("null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?i.parseJSON(t):t):t}catch(e){return t}}function tt(t,e){e(t);for(var n=0,i=t.childNodes.length;n<i;n++)tt(t.childNodes[n],e)}return O.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var i,s=t.parentNode,r=!s;return r&&(s=D).appendChild(t),i=~O.qsa(s,e).indexOf(t),r&&D.removeChild(t),i},r=function(t){return t.replace(/-+(.)?/g,(function(t,e){return e?e.toUpperCase():""}))},o=function(t){return c.call(t,(function(e,n){return t.indexOf(e)==n}))},O.fragment=function(t,n,s){var r,o,a;return m.test(t)&&(r=i(h.createElement(RegExp.$1))),r||(t.replace&&(t=t.replace(v,"<$1></$2>")),n===e&&(n=g.test(t)&&RegExp.$1),n in S||(n="*"),(a=S[n]).innerHTML=""+t,r=i.each(l.call(a.childNodes),(function(){a.removeChild(this)}))),R(s)&&(o=i(r),i.each(s,(function(t,e){b.indexOf(t)>-1?o[t](e):o.attr(t,e)}))),r},O.Z=function(t,e){return new Q(t,e)},O.isZ=function(t){return t instanceof O.Z},O.init=function(t,n){var s;if(!t)return O.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&g.test(t))s=O.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}else{if(P(t))return i(h).ready(t);if(O.isZ(t))return t;if(k(t))s=V(t);else if(F(t))s=[t],t=null;else if(g.test(t))s=O.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}}return O.Z(s,t)},(i=function(t,e){return O.init(t,e)}).extend=function(t){var e,n=l.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){W(t,n,e)})),t},O.qsa=function(t,e){var n,i="#"==e[0],s=!i&&"."==e[0],r=i||s?e.slice(1):e,o=A.test(r);return t.getElementById&&o&&i?(n=t.getElementById(r))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:l.call(o&&!i&&t.getElementsByClassName?s?t.getElementsByClassName(r):t.getElementsByTagName(e):t.querySelectorAll(e))},i.contains=h.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},i.type=I,i.isFunction=P,i.isWindow=L,i.isArray=k,i.isPlainObject=R,i.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},i.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},i.inArray=function(t,e,n){return a.indexOf.call(e,t,n)},i.camelCase=r,i.trim=function(t){return null==t?"":String.prototype.trim.call(t)},i.uuid=0,i.support={},i.expr={},i.noop=function(){},i.map=function(t,e){var n,i,s,r=[];if(q(t))for(i=0;i<t.length;i++)null!=(n=e(t[i],i))&&r.push(n);else for(s in t)null!=(n=e(t[s],s))&&r.push(n);return H(r)},i.each=function(t,e){var n,i;if(q(t)){for(n=0;n<t.length;n++)if(!1===e.call(t[n],n,t[n]))return t}else for(i in t)if(!1===e.call(t[i],i,t[i]))return t;return t},i.grep=function(t,e){return c.call(t,e)},t.JSON&&(i.parseJSON=JSON.parse),i.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(t,e){$["[object "+e+"]"]=e.toLowerCase()})),i.fn={constructor:O.Z,length:0,forEach:a.forEach,reduce:a.reduce,push:a.push,sort:a.sort,splice:a.splice,indexOf:a.indexOf,concat:function(){var t,e,n=[];for(t=0;t<arguments.length;t++)e=arguments[t],n[t]=O.isZ(e)?e.toArray():e;return u.apply(O.isZ(this)?this.toArray():this,n)},map:function(t){return i(i.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return i(l.apply(this,arguments))},ready:function(t){return E.test(h.readyState)&&h.body?t(i):h.addEventListener("DOMContentLoaded",(function(){t(i)}),!1),this},get:function(t){return t===e?l.call(this):this[t>=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return a.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return P(t)?this.not(this.not(t)):i(c.call(this,(function(e){return O.matches(e,t)})))},add:function(t,e){return i(o(this.concat(i(t,e))))},is:function(t){return this.length>0&&O.matches(this[0],t)},not:function(t){var n=[];if(P(t)&&t.call!==e)this.each((function(e){t.call(this,e)||n.push(this)}));else{var s="string"==typeof t?this.filter(t):q(t)&&P(t.item)?l.call(t):i(t);this.forEach((function(t){s.indexOf(t)<0&&n.push(t)}))}return i(n)},has:function(t){return this.filter((function(){return F(t)?i.contains(this,t):i(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!F(t)?t:i(t)},last:function(){var t=this[this.length-1];return t&&!F(t)?t:i(t)},find:function(t){var e=this;return t?"object"==typeof t?i(t).filter((function(){var t=this;return a.some.call(e,(function(e){return i.contains(e,t)}))})):1==this.length?i(O.qsa(this[0],t)):this.map((function(){return O.qsa(this,t)})):i()},closest:function(t,e){var n=[],s="object"==typeof t&&i(t);return this.each((function(i,r){for(;r&&!(s?s.indexOf(r)>=0:O.matches(r,t));)r=r!==e&&!M(r)&&r.parentNode;r&&n.indexOf(r)<0&&n.push(r)})),i(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=i.map(n,(function(t){if((t=t.parentNode)&&!M(t)&&e.indexOf(t)<0)return e.push(t),t}));return Z(e,t)},parent:function(t){return Z(o(this.pluck("parentNode")),t)},children:function(t){return Z(this.map((function(){return U(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||l.call(this.childNodes)}))},siblings:function(t){return Z(this.map((function(t,e){return c.call(U(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return i.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=z(this.nodeName))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=P(t);if(this[0]&&!e)var n=i(t).get(0),s=n.parentNode||this.length>1;return this.each((function(r){i(this).wrapAll(e?t.call(this,r):s?n.cloneNode(!0):n)}))},wrapAll:function(t){if(this[0]){var e;for(i(this[0]).before(t=i(t));(e=t.children()).length;)t=e.first();i(t).append(this)}return this},wrapInner:function(t){var e=P(t);return this.each((function(n){var s=i(this),r=s.contents(),o=e?t.call(this,n):t;r.length?r.wrapAll(o):s.append(o)}))},unwrap:function(){return this.parent().each((function(){i(this).replaceWith(i(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var n=i(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()}))},prev:function(t){return i(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return i(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var n=this.innerHTML;i(this).empty().append(X(this,t,e,n))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=X(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,i){var s;return"string"!=typeof t||1 in arguments?this.each((function(e){if(1===this.nodeType)if(F(t))for(n in t)G(this,n,t[n]);else G(this,t,X(this,i,e,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(s=this[0].getAttribute(t))?s:e},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){G(this,t)}),this)}))},prop:function(t,e){return t=N[t]||t,1 in arguments?this.each((function(n){this[t]=X(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=N[t]||t,this.each((function(){delete this[t]}))},data:function(t,n){var i="data-"+t.replace(w,"-$1").toLowerCase(),s=1 in arguments?this.attr(i,n):this.attr(i);return null!==s?Y(s):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=X(this,t,e,this.value)}))):this[0]&&(this[0].multiple?i(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var n=i(this),s=X(this,e,t,n.offset()),r=n.offsetParent().offset(),o={top:s.top-r.top,left:s.left-r.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)}));if(!this.length)return null;if(h.documentElement!==this[0]&&!i.contains(h.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var s=this[0];if("string"==typeof t){if(!s)return;return s.style[r(t)]||getComputedStyle(s,"").getPropertyValue(t)}if(k(t)){if(!s)return;var o={},a=getComputedStyle(s,"");return i.each(t,(function(t,e){o[e]=s.style[r(e)]||a.getPropertyValue(e)})),o}}var u="";if("string"==I(t))e||0===e?u=B(t)+":"+j(t,e):this.each((function(){this.style.removeProperty(B(t))}));else for(n in t)t[n]||0===t[n]?u+=B(n)+":"+j(n,t[n])+";":this.each((function(){this.style.removeProperty(B(n))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(i(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&a.some.call(this,(function(t){return this.test(J(t))}),K(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){s=[];var n=J(this);X(this,t,e,n).split(/\s+/g).forEach((function(t){i(this).hasClass(t)||s.push(t)}),this),s.length&&J(this,n+(n?" ":"")+s.join(" "))}})):this},removeClass:function(t){return this.each((function(n){if("className"in this){if(t===e)return J(this,"");s=J(this),X(this,t,n,s).split(/\s+/g).forEach((function(t){s=s.replace(K(t)," ")})),J(this,s.trim())}}))},toggleClass:function(t,n){return t?this.each((function(s){var r=i(this);X(this,t,s,J(this)).split(/\s+/g).forEach((function(t){(n===e?!r.hasClass(t):n)?r.addClass(t):r.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),s=y.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(i(t).css("margin-top"))||0,n.left-=parseFloat(i(t).css("margin-left"))||0,s.top+=parseFloat(i(e[0]).css("border-top-width"))||0,s.left+=parseFloat(i(e[0]).css("border-left-width"))||0,{top:n.top-s.top,left:n.left-s.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||h.body;t&&!y.test(t.nodeName)&&"static"==i(t).css("position");)t=t.offsetParent;return t}))}},i.fn.detach=i.fn.remove,["width","height"].forEach((function(t){var n=t.replace(/./,(function(t){return t[0].toUpperCase()}));i.fn[t]=function(s){var r,o=this[0];return s===e?L(o)?o["inner"+n]:M(o)?o.documentElement["scroll"+n]:(r=this.offset())&&r[t]:this.each((function(e){(o=i(this)).css(t,X(this,s,e,o[t]()))}))}})),C.forEach((function(n,s){var r=s%2;i.fn[n]=function(){var n,o,a=i.map(arguments,(function(t){var s=[];return"array"==(n=I(t))?(t.forEach((function(t){return t.nodeType!==e?s.push(t):i.zepto.isZ(t)?s=s.concat(t.get()):void(s=s.concat(O.fragment(t)))})),s):"object"==n||null==t?t:O.fragment(t)})),u=this.length>1;return a.length<1?this:this.each((function(e,n){o=r?n:n.parentNode,n=0==s?n.nextSibling:1==s?n.firstChild:2==s?n:null;var c=i.contains(h.documentElement,o);a.forEach((function(e){if(u)e=e.cloneNode(!0);else if(!o)return i(e).remove();o.insertBefore(e,n),c&&tt(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},i.fn[r?n+"To":"insert"+(s?"Before":"After")]=function(t){return i(t)[n](this),this}})),O.Z.prototype=Q.prototype=i.fn,O.uniq=o,O.deserializeValue=Y,i.zepto=O,i}();return function(e){var n,i=1,s=Array.prototype.slice,r=e.isFunction,o=function(t){return"string"==typeof t},a={},u={},c="onfocusin"in t,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function p(t){return t._zid||(t._zid=i++)}function f(t,e,n,i){if((e=d(e)).ns)var s=g(e.ns);return(a[p(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||s.test(t.ns))&&(!n||p(t.fn)===p(n))&&(!i||t.sel==i)}))}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function g(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!c&&t.e in l||!!e}function v(t){return h[t]||c&&l[t]||t}function y(t,i,s,r,o,u,c){var l=p(t),f=a[l]||(a[l]=[]);i.split(/\s/).forEach((function(i){if("ready"==i)return e(document).ready(s);var a=d(i);a.fn=s,a.sel=o,a.e in h&&(s=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return a.fn.apply(this,arguments)}),a.del=u;var l=u||s;a.proxy=function(e){if(!(e=S(e)).isImmediatePropagationStopped()){try{var i=Object.getOwnPropertyDescriptor(e,"data");i&&!i.writable||(e.data=r)}catch(e){}var s=l.apply(t,e._args==n?[e]:[e].concat(e._args));return!1===s&&(e.preventDefault(),e.stopPropagation()),s}},a.i=f.length,f.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,m(a,c))}))}function w(t,e,n,i,s){var r=p(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,i).forEach((function(e){delete a[r][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,m(e,s))}))}))}u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:w},e.proxy=function(t,n){var i=2 in arguments&&s.call(arguments,2);if(r(t)){var a=function(){return t.apply(n,i?i.concat(s.call(arguments)):arguments)};return a._zid=p(t),a}if(o(n))return i?(i.unshift(t[n],t),e.proxy.apply(null,i)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var b=function(){return!0},C=function(){return!1},x=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function S(t,i){if(i||!t.isDefaultPrevented){i||(i=t),e.each(_,(function(e,n){var s=i[e];t[e]=function(){return this[n]=b,s&&s.apply(i,arguments)},t[n]=C}));try{t.timeStamp||(t.timeStamp=Date.now())}catch(s){}(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?!1===i.returnValue:i.getPreventDefault&&i.getPreventDefault())&&(t.isDefaultPrevented=b)}return t}function E(t){var e,i={originalEvent:t};for(e in t)x.test(e)||t[e]===n||(i[e]=t[e]);return S(i,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,i,a,u,c){var l,h,p=this;return t&&!o(t)?(e.each(t,(function(t,e){p.on(t,i,a,e,c)})),p):(o(i)||r(u)||!1===u||(u=a,a=i,i=n),u!==n&&!1!==a||(u=a,a=n),!1===u&&(u=C),p.each((function(n,r){c&&(l=function(t){return w(r,t.type,u),u.apply(this,arguments)}),i&&(h=function(t){var n,o=e(t.target).closest(i,r).get(0);if(o&&o!==r)return n=e.extend(E(t),{currentTarget:o,liveFired:r}),(l||u).apply(o,[n].concat(s.call(arguments,1)))}),y(r,t,u,a,i,h||l)})))},e.fn.off=function(t,i,s){var a=this;return t&&!o(t)?(e.each(t,(function(t,e){a.off(t,i,e)})),a):(o(i)||r(s)||!1===s||(s=i,i=n),!1===s&&(s=C),a.each((function(){w(this,t,s,i)})))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):S(t))._args=n,this.each((function(){t.type in l&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var i,s;return this.each((function(r,a){(i=E(o(t)?e.Event(t):t))._args=n,i.target=a,e.each(f(a,t.type||t),(function(t,e){if(s=e.proxy(i),i.isImmediatePropagationStopped())return!1}))})),s},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){o(t)||(t=(e=t).type);var n=document.createEvent(u[t]||"Events"),i=!0;if(e)for(var s in e)"bubbles"==s?i=!!e[s]:n[s]=e[s];return n.initEvent(t,i,!0),S(n)}}(i),n=[],i.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,i=t.camelCase,s=t.expando="Zepto"+ +new Date,r=[];function o(r,o){var u=r[s],c=u&&e[u];if(void 0===o)return c||a(r);if(c){if(o in c)return c[o];var l=i(o);if(l in c)return c[l]}return n.call(t(r),o)}function a(n,r,o){var a=n[s]||(n[s]=++t.uuid),c=e[a]||(e[a]=u(n));return void 0!==r&&(c[i(r)]=o),c}function u(e){var n={};return t.each(e.attributes||r,(function(e,s){0==s.name.indexOf("data-")&&(n[i(s.name.replace("data-",""))]=t.zepto.deserializeValue(s.value))})),n}t.fn.data=function(e,n){return void 0===n?t.isPlainObject(e)?this.each((function(n,i){t.each(e,(function(t,e){a(i,t,e)}))})):0 in this?o(this[0],e):void 0:this.each((function(){a(this,e,n)}))},t.data=function(e,n,i){return t(e).data(n,i)},t.hasData=function(n){var i=n[s],r=i&&e[i];return!!r&&!t.isEmptyObject(r)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var r=this[s],o=r&&e[r];o&&t.each(n||o,(function(t){delete o[n?i(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(i),i}(e)},8820:t=>{"use strict";var e={}.hasOwnProperty,n=/[ -,\.\/:-@\[-\^`\{-~]/,i=/[ -,\.\/:-@\[\]\^`\{-~]/,s=/(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g,r=function t(r,o){"single"!=(o=function(t,n){if(!t)return n;var i={};for(var s in n)i[s]=e.call(t,s)?t[s]:n[s];return i}(o,t.options)).quotes&&"double"!=o.quotes&&(o.quotes="single");for(var a="double"==o.quotes?'"':"'",u=o.isIdentifier,c=r.charAt(0),l="",h=0,p=r.length;h<p;){var f=r.charAt(h++),d=f.charCodeAt(),g=void 0;if(d<32||d>126){if(d>=55296&&d<=56319&&h<p){var m=r.charCodeAt(h++);56320==(64512&m)?d=((1023&d)<<10)+(1023&m)+65536:h--}g="\\"+d.toString(16).toUpperCase()+" "}else g=o.escapeEverything?n.test(f)?"\\"+f:"\\"+d.toString(16).toUpperCase()+" ":/[\t\n\f\r\x0B]/.test(f)?"\\"+d.toString(16).toUpperCase()+" ":"\\"==f||!u&&('"'==f&&a==f||"'"==f&&a==f)||u&&i.test(f)?"\\"+f:f;l+=g}return u&&(/^-[-\d]/.test(l)?l="\\-"+l.slice(1):/\d/.test(c)&&(l="\\3"+c+" "+l.slice(1))),l=l.replace(s,(function(t,e,n){return e&&e.length%2?t:(e||"")+n})),!u&&o.wrap?a+l+a:l};r.options={escapeEverything:!1,isIdentifier:!1,quotes:"single",wrap:!1},r.version="3.0.0",t.exports=r},624:(t,e,n)=>{"use strict";var i,s,r,o=[n(5525),n(4785),n(8291),n(2709),n(2506),n(9176)],a=-1,u=[],c=!1;function l(){i&&s&&(i=!1,s.length?u=s.concat(u):a=-1,u.length&&h())}function h(){if(!i){c=!1,i=!0;for(var t=u.length,e=setTimeout(l);t;){for(s=u,u=[];s&&++a<t;)s[a].run();a=-1,t=u.length}s=null,a=-1,i=!1,clearTimeout(e)}}for(var p=-1,f=o.length;++p<f;)if(o[p]&&o[p].test&&o[p].test()){r=o[p].install(h);break}function d(t,e){this.fun=t,this.array=e}d.prototype.run=function(){var t=this.fun,e=this.array;switch(e.length){case 0:return t();case 1:return t(e[0]);case 2:return t(e[0],e[1]);case 3:return t(e[0],e[1],e[2]);default:return t.apply(null,e)}},t.exports=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];u.push(new d(t,e)),c||i||(c=!0,r())}},2709:(t,e,n)=>{"use strict";e.test=function(){return!n.g.setImmediate&&void 0!==n.g.MessageChannel},e.install=function(t){var e=new n.g.MessageChannel;return e.port1.onmessage=t,function(){e.port2.postMessage(0)}}},8291:(t,e,n)=>{"use strict";var i=n.g.MutationObserver||n.g.WebKitMutationObserver;e.test=function(){return i},e.install=function(t){var e=0,s=new i(t),r=n.g.document.createTextNode("");return s.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}},4785:(t,e,n)=>{"use strict";e.test=function(){return"function"==typeof n.g.queueMicrotask},e.install=function(t){return function(){n.g.queueMicrotask(t)}}},2506:(t,e,n)=>{"use strict";e.test=function(){return"document"in n.g&&"onreadystatechange"in n.g.document.createElement("script")},e.install=function(t){return function(){var e=n.g.document.createElement("script");return e.onreadystatechange=function(){t(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},n.g.document.documentElement.appendChild(e),t}}},9176:(t,e)=>{"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}}}]); \ No newline at end of file diff --git a/assets/js/8443.b56128a0.js.LICENSE.txt b/assets/js/8443.b56128a0.js.LICENSE.txt new file mode 100644 index 0000000000..4f7ccd8a76 --- /dev/null +++ b/assets/js/8443.b56128a0.js.LICENSE.txt @@ -0,0 +1 @@ +/*! https://mths.be/cssesc v3.0.0 by @mathias */ diff --git a/assets/js/86262f09.2138a6d9.js b/assets/js/86262f09.2138a6d9.js new file mode 100644 index 0000000000..568e124b30 --- /dev/null +++ b/assets/js/86262f09.2138a6d9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8318],{8643:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>c,metadata:()=>i,toc:()=>d});var t=n(5893),s=n(1151);const c={},o="EXPRESSION",i={id:"about/references/keywords/EXPRESSION",title:"EXPRESSION",description:"VARIABLES /",source:"@site/docs/about/references/keywords/EXPRESSION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EXPRESSION",permalink:"/ecalc/docs/about/references/keywords/EXPRESSION",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EXPRESSION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"ENERGY_USAGE_MODEL",permalink:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},next:{title:"EXTRAPOLATION",permalink:"/ecalc/docs/about/references/keywords/EXTRAPOLATION"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"expression",children:"EXPRESSION"}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EXPRESSION",children:"EXPRESSION"})]}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Required"}),(0,t.jsx)(r.th,{children:"Child of"}),(0,t.jsx)(r.th,{children:"Children/Options"})]})}),(0,t.jsx)(r.tbody,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"No"}),(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"VARIABLES"})}),(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"None"})})]})})]}),"\n",(0,t.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(r.p,{children:["Expression for a ",(0,t.jsx)(r.code,{children:"variable<VARIABLES>"})," using ",(0,t.jsx)(r.code,{children:"EXPRESSIONS"})]}),"\n",(0,t.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"EXPRESSION: <expression>\n"})}),"\n",(0,t.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(r.p,{children:"With time series reference"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"EXPRESSION: time_series_ref_1;vector_name_1 {+} time_series_ref_2;vector_name_2 {*} (time_series_ref_3;vector_name_3 > 0)\n"})}),"\n",(0,t.jsx)(r.p,{children:"With variable reference"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"EXPRESSION: $var.variable_name1 {+} $var.variable_name2\n"})})]})}function h(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>i,a:()=>o});var t=n(7294);const s={},c=t.createContext(s);function o(e){const r=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/880bbd08.f33bd122.js b/assets/js/880bbd08.f33bd122.js new file mode 100644 index 0000000000..a86e9c6049 --- /dev/null +++ b/assets/js/880bbd08.f33bd122.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3315],{1471:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>t,metadata:()=>i,toc:()=>d});var r=s(5893),o=s(1151);const t={},c="UNITS",i={id:"about/references/keywords/UNITS",title:"UNITS",description:"Description",source:"@site/docs/about/references/keywords/UNITS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/UNITS",permalink:"/ecalc/docs/about/references/keywords/UNITS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/UNITS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TYPE",permalink:"/ecalc/docs/about/references/keywords/TYPE"},next:{title:"UPSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Pumps",id:"pumps",level:3},{value:"Compressors",id:"compressors",level:3},{value:"Example",id:"example",level:2},{value:"Pumps",id:"pumps-1",level:3},{value:"Compressors",id:"compressors-1",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"units",children:"UNITS"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"UNITS"})," is a keyword that can be specified for ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"PUMP"})," and ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"COMPRESSOR CHARTS"}),". This is a requirement and ",(0,r.jsx)(n.strong,{children:"must"})," be specified."]}),"\n",(0,r.jsxs)(n.p,{children:["For pumps this must be specified in ",(0,r.jsx)(n.code,{children:"FACILITY_INPUTS"}),", whilst for compressors it must be within ",(0,r.jsx)(n.code,{children:"MODELS"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.h3,{id:"pumps",children:"Pumps"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: <pump chart name>\n ...\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"compressors",children:"Compressors"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n ...\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n ....\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.h3,{id:"pumps-1",children:"Pumps"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: single_speed_pump\n TYPE: PUMP_CHART_SINGLE_SPEED\n ...\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n"})}),"\n",(0,r.jsx)(n.h3,{id:"compressors-1",children:"Compressors"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n ...\n"})})]})}function p(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>i,a:()=>c});var r=s(7294);const o={},t=r.createContext(o);function c(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8961bfac.30c2f6cc.js b/assets/js/8961bfac.30c2f6cc.js new file mode 100644 index 0000000000..51a81ed8c9 --- /dev/null +++ b/assets/js/8961bfac.30c2f6cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9128],{66:(s,e,n)=>{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>t,metadata:()=>r,toc:()=>d});var a=n(5893),i=n(1151);const t={sidebar_position:3,description:"eCalc EXPRESSIONS"},l="Expressions",r={id:"about/modelling/setup/file_format_and_syntax/expressions",title:"Expressions",description:"eCalc EXPRESSIONS",source:"@site/docs/about/modelling/setup/file_format_and_syntax/expressions.md",sourceDirName:"about/modelling/setup/file_format_and_syntax",slug:"/about/modelling/setup/file_format_and_syntax/expressions",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/file_format_and_syntax/expressions.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,description:"eCalc EXPRESSIONS"},sidebar:"about",previous:{title:"File format and syntax",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/"},next:{title:"Time series",permalink:"/ecalc/docs/about/modelling/setup/time_series"}},c={},d=[{value:"Available operators",id:"available-operators",level:2},{value:"Examples",id:"examples",level:2},{value:"Combining data from different reservoir inputs",id:"combining-data-from-different-reservoir-inputs",level:3},{value:"Model of additional rate",id:"model-of-additional-rate",level:3}];function h(s){const e={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msqrt:"msqrt",msub:"msub",p:"p",path:"path",pre:"pre",semantics:"semantics",span:"span",svg:"svg",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...s.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(e.h1,{id:"expressions",children:"Expressions"}),"\n",(0,a.jsx)(e.p,{children:"The variables needed in the energy functions for the variable consumers, may not always be directly found in the\nreservoir inputs. For example, there may be two group rates that should be added to be\nconsistent with the net rate through a compressor system. Or, it may be that a pressure defined in a network node is\nnot equal to the pressure at the inlet/outlet of a compressor system and some delta pressure must be added."}),"\n",(0,a.jsxs)(e.p,{children:["To avoid forcing the users to define new variables in the simulation files/CSV data and also keep the data in the\nconsumer\u2019s energy function consistent, the calculator supports expressions to define variables (and conditions in the\n",(0,a.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/CONDITIONS",children:"CONDITIONS"}),"."]}),"\n",(0,a.jsx)(e.admonition,{type:"warning",children:(0,a.jsxs)(e.p,{children:["When creating new variables from CSV files make sure to choose the right interpolation type!\nSee ",(0,a.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})," for more information."]})}),"\n",(0,a.jsx)(e.h2,{id:"available-operators",children:"Available operators"}),"\n",(0,a.jsxs)(e.p,{children:["As reservoir simulation vectors (and also CSV headers) may include mathematical operators\nlike ",(0,a.jsx)(e.code,{children:"+"}),", ",(0,a.jsx)(e.code,{children:"-"})," in their names, the operators must be surrounded by curly brackets, ",(0,a.jsx)(e.code,{children:"{}"}),",\nin the expressions. Logical operators (",(0,a.jsx)(e.code,{children:">"}),", ",(0,a.jsx)(e.code,{children:">="}),", ",(0,a.jsx)(e.code,{children:"<"}),", ",(0,a.jsx)(e.code,{children:"<="}),", ",(0,a.jsx)(e.code,{children:"=="}),", ",(0,a.jsx)(e.code,{children:"!="}),")\nevaluates to ",(0,a.jsx)(e.code,{children:"0"})," or ",(0,a.jsx)(e.code,{children:"1"}),"."]}),"\n",(0,a.jsx)(e.p,{children:"The following operators are supported:"}),"\n",(0,a.jsxs)(e.table,{children:[(0,a.jsx)(e.thead,{children:(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.th,{children:"Operator"}),(0,a.jsx)(e.th,{children:"Description"}),(0,a.jsx)(e.th,{children:"Example"})]})}),(0,a.jsxs)(e.tbody,{children:[(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"{+}"})}),(0,a.jsx)(e.td,{children:"Addition"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"2 {+} 1"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"{-}"})}),(0,a.jsx)(e.td,{children:"Subtraction"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {-} 10"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"{*}"})}),(0,a.jsx)(e.td,{children:"Multiplication"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {*} 2"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"{/}"})}),(0,a.jsx)(e.td,{children:"Division"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {/} 2"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"{^}"})}),(0,a.jsx)(e.td,{children:"Power"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {^} 2"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"( )"})}),(0,a.jsx)(e.td,{children:"Parentheses"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"( SIM;GAS {+} 2 ) {/} 2"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"<"})}),(0,a.jsx)(e.td,{children:"Less than"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {+} (SIM1;OIL < 150) {*} 1000000"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"<="})}),(0,a.jsx)(e.td,{children:"Less than or equal"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {+} (SIM1;OIL <= 150) {*} 1000000"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:">"})}),(0,a.jsx)(e.td,{children:"Greater than"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {+} (SIM1;OIL > 150) {*} 1000000"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:">="})}),(0,a.jsx)(e.td,{children:"Greater than or equal"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {+} (SIM1;OIL >= 150) {*} 1000000"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"=="})}),(0,a.jsx)(e.td,{children:"Equal"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {+} (SIM;FLAG == 1) {*} 1000000"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"!="})}),(0,a.jsx)(e.td,{children:"Not equal"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {-} (SIM;FLAG != 1) {*} 1000000"})})]})]})]}),"\n",(0,a.jsx)(e.h2,{id:"examples",children:"Examples"}),"\n",(0,a.jsx)(e.h3,{id:"combining-data-from-different-reservoir-inputs",children:"Combining data from different reservoir inputs"}),"\n",(0,a.jsxs)(e.p,{children:["The rate through a gas injection compressor is the sum of injection rate for the field plus\nsome additional injection rate for a tie-in (whose data is specified in a CSV file with\nkey ",(0,a.jsx)(e.code,{children:"SIM2"}),"):"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-yaml",children:"VARIABLES:\n total_rate_through_compressor:\n VALUE: SIM1;GAS_INJ {+} SIM2;GAS_INJ\n"})}),"\n",(0,a.jsx)(e.h3,{id:"model-of-additional-rate",children:"Model of additional rate"}),"\n",(0,a.jsxs)(e.p,{children:["The rate through a compressor is the produced rate plus some additional term. This term ",(0,a.jsx)(e.em,{children:"Q"})," is a function of pressures ",(0,a.jsxs)(e.span,{className:"katex",children:[(0,a.jsx)(e.span,{className:"katex-mathml",children:(0,a.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(e.semantics,{children:[(0,a.jsx)(e.mrow,{children:(0,a.jsxs)(e.msub,{children:[(0,a.jsx)(e.mi,{children:"P"}),(0,a.jsx)(e.mn,{children:"1"})]})}),(0,a.jsx)(e.annotation,{encoding:"application/x-tex",children:"P_{1}"})]})})}),(0,a.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(e.span,{className:"base",children:[(0,a.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,a.jsxs)(e.span,{className:"mord",children:[(0,a.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,a.jsx)(e.span,{className:"msupsub",children:(0,a.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(e.span,{className:"vlist-r",children:[(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,a.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,a.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:"1"})})})]})}),(0,a.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(e.span,{className:"vlist-r",children:(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(e.span,{})})})]})})]})]})})]})," and ",(0,a.jsxs)(e.span,{className:"katex",children:[(0,a.jsx)(e.span,{className:"katex-mathml",children:(0,a.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(e.semantics,{children:[(0,a.jsx)(e.mrow,{children:(0,a.jsxs)(e.msub,{children:[(0,a.jsx)(e.mi,{children:"P"}),(0,a.jsx)(e.mn,{children:"2"})]})}),(0,a.jsx)(e.annotation,{encoding:"application/x-tex",children:"P_{2}"})]})})}),(0,a.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(e.span,{className:"base",children:[(0,a.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,a.jsxs)(e.span,{className:"mord",children:[(0,a.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,a.jsx)(e.span,{className:"msupsub",children:(0,a.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(e.span,{className:"vlist-r",children:[(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,a.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,a.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:"2"})})})]})}),(0,a.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(e.span,{className:"vlist-r",children:(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(e.span,{})})})]})})]})]})})]}),","]}),"\n",(0,a.jsx)(e.span,{className:"katex-display",children:(0,a.jsxs)(e.span,{className:"katex",children:[(0,a.jsx)(e.span,{className:"katex-mathml",children:(0,a.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,a.jsxs)(e.semantics,{children:[(0,a.jsxs)(e.mrow,{children:[(0,a.jsx)(e.mi,{children:"Q"}),(0,a.jsx)(e.mo,{children:"="}),(0,a.jsx)(e.mn,{children:"25000"}),(0,a.jsx)(e.mo,{children:"\u22c5"}),(0,a.jsx)(e.msqrt,{children:(0,a.jsxs)(e.mrow,{children:[(0,a.jsxs)(e.msub,{children:[(0,a.jsx)(e.mi,{children:"P"}),(0,a.jsx)(e.mn,{children:"1"})]}),(0,a.jsx)(e.mo,{children:"\u22c5"}),(0,a.jsxs)(e.mrow,{children:[(0,a.jsx)(e.mo,{fence:"true",children:"("}),(0,a.jsxs)(e.msub,{children:[(0,a.jsx)(e.mi,{children:"P"}),(0,a.jsx)(e.mn,{children:"2"})]}),(0,a.jsx)(e.mo,{children:"\u2212"}),(0,a.jsxs)(e.msub,{children:[(0,a.jsx)(e.mi,{children:"P"}),(0,a.jsx)(e.mn,{children:"1"})]}),(0,a.jsx)(e.mo,{fence:"true",children:")"})]})]})})]}),(0,a.jsx)(e.annotation,{encoding:"application/x-tex",children:"Q = 25000 \\cdot \\sqrt{P_{1} \\cdot \\left( P_{2} - P_{1} \\right)}"})]})})}),(0,a.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,a.jsxs)(e.span,{className:"base",children:[(0,a.jsx)(e.span,{className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,a.jsx)(e.span,{className:"mord mathnormal",children:"Q"}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(e.span,{className:"mrel",children:"="}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,a.jsxs)(e.span,{className:"base",children:[(0,a.jsx)(e.span,{className:"strut",style:{height:"0.6444em"}}),(0,a.jsx)(e.span,{className:"mord",children:"25000"}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(e.span,{className:"mbin",children:"\u22c5"}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,a.jsxs)(e.span,{className:"base",children:[(0,a.jsx)(e.span,{className:"strut",style:{height:"1.24em",verticalAlign:"-0.2561em"}}),(0,a.jsx)(e.span,{className:"mord sqrt",children:(0,a.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(e.span,{className:"vlist-r",children:[(0,a.jsxs)(e.span,{className:"vlist",style:{height:"0.9839em"},children:[(0,a.jsxs)(e.span,{className:"svg-align",style:{top:"-3.2em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"3.2em"}}),(0,a.jsxs)(e.span,{className:"mord",style:{paddingLeft:"1em"},children:[(0,a.jsxs)(e.span,{className:"mord",children:[(0,a.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,a.jsx)(e.span,{className:"msupsub",children:(0,a.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(e.span,{className:"vlist-r",children:[(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,a.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,a.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:"1"})})})]})}),(0,a.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(e.span,{className:"vlist-r",children:(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(e.span,{})})})]})})]}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(e.span,{className:"mbin",children:"\u22c5"}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsxs)(e.span,{className:"minner",children:[(0,a.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:"("}),(0,a.jsxs)(e.span,{className:"mord",children:[(0,a.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,a.jsx)(e.span,{className:"msupsub",children:(0,a.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(e.span,{className:"vlist-r",children:[(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,a.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,a.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:"2"})})})]})}),(0,a.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(e.span,{className:"vlist-r",children:(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(e.span,{})})})]})})]}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsxs)(e.span,{className:"mord",children:[(0,a.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,a.jsx)(e.span,{className:"msupsub",children:(0,a.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(e.span,{className:"vlist-r",children:[(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,a.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,a.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:"1"})})})]})}),(0,a.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(e.span,{className:"vlist-r",children:(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(e.span,{})})})]})})]}),(0,a.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:")"})]})]})]}),(0,a.jsxs)(e.span,{style:{top:"-2.9439em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"3.2em"}}),(0,a.jsx)(e.span,{className:"hide-tail",style:{minWidth:"1.02em",height:"1.28em"},children:(0,a.jsx)(e.svg,{xmlns:"http://www.w3.org/2000/svg",width:"400em",height:"1.28em",viewBox:"0 0 400000 1296",preserveAspectRatio:"xMinYMin slice",children:(0,a.jsx)(e.path,{d:"M263,681c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl0 -0\nc4.7,-7.3,11,-11,19,-11\nH40000v40H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM1001 80h400000v40h-400000z"})})})]})]}),(0,a.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(e.span,{className:"vlist-r",children:(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.2561em"},children:(0,a.jsx)(e.span,{})})})]})})]})]})]})}),"\n",(0,a.jsx)(e.p,{children:"The addition is only added when the reservoir gas rate is positive."}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-yaml",children:"VARIABLES:\n rate:\n VALUE: SIM;GAS_PROD {+} ( SIM;GAS_PROD > 0 ) {*} 25000 {*} ( SIM;P1 {*} ( SIM;P2 {-} SIM;P1 ) ) {^} 0.5\n"})})]})}function m(s={}){const{wrapper:e}={...(0,i.a)(),...s.components};return e?(0,a.jsx)(e,{...s,children:(0,a.jsx)(h,{...s})}):h(s)}},1151:(s,e,n)=>{n.d(e,{Z:()=>r,a:()=>l});var a=n(7294);const i={},t=a.createContext(i);function l(s){const e=a.useContext(t);return a.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function r(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:l(s.components),a.createElement(t.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/90184672.9a24ac67.js b/assets/js/90184672.9a24ac67.js new file mode 100644 index 0000000000..96c3c05b7e --- /dev/null +++ b/assets/js/90184672.9a24ac67.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5932],{9353:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>E,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var t=r(5893),s=r(1151);const o={},c="INLET_TEMPERATURE",a={id:"about/references/keywords/INLET_TEMPERATURE",title:"INLET_TEMPERATURE",description:"MODELS / INLETTEMPERATURE",source:"@site/docs/about/references/keywords/INLET_TEMPERATURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INLET_TEMPERATURE",permalink:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INLET_TEMPERATURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INFLUENCE_TIME_VECTOR",permalink:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR"},next:{title:"INSTALLATIONS",permalink:"/ecalc/docs/about/references/keywords/INSTALLATIONS"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"inlet_temperature",children:"INLET_TEMPERATURE"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," / ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE",children:"INLET_TEMPERATURE"})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Required"}),(0,t.jsx)(n.th,{children:"Child of"}),(0,t.jsx)(n.th,{children:"Children/Options"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Yes"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})}),(0,t.jsx)(n.td,{children:"None"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["This is a keyword used in ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",children:"COMPRESSOR MODELLING"}),". It is a necessary input parameter which describes the inlet temperature to a compressor stage. Temperature ",(0,t.jsx)(n.strong,{children:"must"})," be given in ",(0,t.jsx)("sup",{children:"o"}),"C."]}),"\n",(0,t.jsx)(n.p,{children:"As of now, this is can only be given as a single value. Time-series are not accepted here."}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n ...\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 20 #degC\n ...\n"})})]})}function E(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var t=r(7294);const s={},o=t.createContext(s);function c(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.b8482756.js b/assets/js/935f2afb.b8482756.js new file mode 100644 index 0000000000..3ccf11bcc0 --- /dev/null +++ b/assets/js/935f2afb.b8482756.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"about":[{"type":"link","label":"Introduction","href":"/ecalc/docs/about/","docId":"about/index","unlisted":false},{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"CLI","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"FAQ / Troubleshooting","href":"/ecalc/docs/about/getting_started/cli/faq","docId":"about/getting_started/cli/faq","unlisted":false}],"href":"/ecalc/docs/about/getting_started/cli/"},{"type":"link","label":"Python Library","href":"/ecalc/docs/about/getting_started/library/","docId":"about/getting_started/library/index","unlisted":false},{"type":"link","label":"YAML","href":"/ecalc/docs/about/getting_started/yaml/","docId":"about/getting_started/yaml/index","unlisted":false}],"href":"/ecalc/docs/about/getting_started/"},{"type":"category","label":"Modelling guide","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Theory","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Pump modelling","href":"/ecalc/docs/about/modelling/theory/pump_modelling","docId":"about/modelling/theory/pump_modelling","unlisted":false},{"type":"link","label":"Compressor modelling","href":"/ecalc/docs/about/modelling/theory/compressor_modelling","docId":"about/modelling/theory/compressor_modelling","unlisted":false}],"href":"/ecalc/docs/about/modelling/theory/"},{"type":"category","label":"Setup an eCalc\u2122 Model","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"File format and syntax","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Expressions","href":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","docId":"about/modelling/setup/file_format_and_syntax/expressions","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/"},{"type":"link","label":"Time series","href":"/ecalc/docs/about/modelling/setup/time_series","docId":"about/modelling/setup/time_series","unlisted":false},{"type":"category","label":"Facility inputs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Generator modelling","href":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","docId":"about/modelling/setup/facility_inputs/generator_modelling","unlisted":false},{"type":"category","label":"Pump modelling","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Pump chart","href":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","docId":"about/modelling/setup/facility_inputs/pump_modelling/pump_charts","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/"},{"type":"link","label":"Sampled compressor model","href":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","docId":"about/modelling/setup/facility_inputs/sampled_compressor_model","unlisted":false},{"type":"link","label":"Tabular models","href":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","docId":"about/modelling/setup/facility_inputs/tabular","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/facility_inputs/"},{"type":"category","label":"Models","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Fluid model","href":"/ecalc/docs/about/modelling/setup/models/fluid_model","docId":"about/modelling/setup/models/fluid_model","unlisted":false},{"type":"category","label":"Compressor modelling","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Compressor charts","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","docId":"about/modelling/setup/models/compressor_modelling/compressor_charts/index","unlisted":false},{"type":"category","label":"Compressor train types","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Single speed compressor train","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","docId":"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","unlisted":false},{"type":"link","label":"Simplified variable speed compressor train","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","docId":"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","unlisted":false},{"type":"link","label":"Variable speed compressor train","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","docId":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","unlisted":false},{"type":"link","label":"Variable speed compressor train model with multiple streams and pressures","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","docId":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"},{"type":"link","label":"Fixed speed pressure control","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","docId":"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/"},{"type":"link","label":"Turbine modelling","href":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","docId":"about/modelling/setup/models/turbine_modeling","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/models/"},{"type":"link","label":"Fuel types","href":"/ecalc/docs/about/modelling/setup/fuel_types","docId":"about/modelling/setup/fuel_types","unlisted":false},{"type":"link","label":"Variables","href":"/ecalc/docs/about/modelling/setup/variables","docId":"about/modelling/setup/variables","unlisted":false},{"type":"category","label":"Installations","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Generator sets","href":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","docId":"about/modelling/setup/installations/generator_sets_in_calculations","unlisted":false},{"type":"link","label":"Pump models","href":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","docId":"about/modelling/setup/installations/pump_models_in_calculations","unlisted":false},{"type":"category","label":"Compressor models","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Compressor","href":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","docId":"about/modelling/setup/installations/compressor_models_in_calculations/compressor","unlisted":false},{"type":"link","label":"Compressor system","href":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","docId":"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","unlisted":false},{"type":"link","label":"Variable speed compressor train multiple streams and pressures","href":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","docId":"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/"},{"type":"link","label":"Tabular models","href":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","docId":"about/modelling/setup/installations/tabular_models_in_calculations","unlisted":false},{"type":"link","label":"Direct consumers","href":"/ecalc/docs/about/modelling/setup/installations/direct_consumers","docId":"about/modelling/setup/installations/direct_consumers","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/installations/"}],"href":"/ecalc/docs/about/modelling/setup/"},{"type":"category","label":"eCalc\u2122 Workflow","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Generic Workflow","href":"/ecalc/docs/about/modelling/workflow/generic_workflow","docId":"about/modelling/workflow/generic_workflow","unlisted":false}],"href":"/ecalc/docs/about/modelling/workflow/"},{"type":"category","label":"Examples","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Simple model","href":"/ecalc/docs/about/modelling/examples/simple","docId":"about/modelling/examples/simple","unlisted":false},{"type":"link","label":"Advanced model","href":"/ecalc/docs/about/modelling/examples/advanced","docId":"about/modelling/examples/advanced","unlisted":false},{"type":"link","label":"Drogon model","href":"/ecalc/docs/about/modelling/examples/drogon","docId":"about/modelling/examples/drogon","unlisted":false}],"href":"/ecalc/docs/about/modelling/examples/"}],"href":"/ecalc/docs/about/modelling/"},{"type":"category","label":"Reference Documentation","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"YAML keywords","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"ADJUSTMENT","href":"/ecalc/docs/about/references/keywords/ADJUSTMENT","docId":"about/references/keywords/ADJUSTMENT","unlisted":false},{"type":"link","label":"CATEGORY","href":"/ecalc/docs/about/references/keywords/CATEGORY","docId":"about/references/keywords/CATEGORY","unlisted":false},{"type":"link","label":"COMPRESSOR_MODEL","href":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","docId":"about/references/keywords/COMPRESSOR_MODEL","unlisted":false},{"type":"link","label":"COMPRESSORS","href":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","docId":"about/references/keywords/COMPRESSOR_SYSTEM","unlisted":false},{"type":"link","label":"COMPRESSOR_TRAIN_MODEL","href":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","docId":"about/references/keywords/COMPRESSOR_TRAIN_MODEL","unlisted":false},{"type":"link","label":"CONDITION","href":"/ecalc/docs/about/references/keywords/CONDITION","docId":"about/references/keywords/CONDITION","unlisted":false},{"type":"link","label":"CONDITIONS","href":"/ecalc/docs/about/references/keywords/CONDITIONS","docId":"about/references/keywords/CONDITIONS","unlisted":false},{"type":"link","label":"CONSTANT","href":"/ecalc/docs/about/references/keywords/CONSTANT","docId":"about/references/keywords/CONSTANT","unlisted":false},{"type":"link","label":"CONSUMERS","href":"/ecalc/docs/about/references/keywords/CONSUMERS","docId":"about/references/keywords/CONSUMERS","unlisted":false},{"type":"link","label":"CONSUMPTION_RATE_TYPE","href":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","docId":"about/references/keywords/CONSUMPTION_RATE_TYPE","unlisted":false},{"type":"link","label":"CONTROL_MARGIN","href":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","docId":"about/references/keywords/CONTROL_MARGIN","unlisted":false},{"type":"link","label":"CONTROL_MARGIN_UNIT","href":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","docId":"about/references/keywords/CONTROL_MARGIN_UNIT","unlisted":false},{"type":"link","label":"CROSSOVER","href":"/ecalc/docs/about/references/keywords/CROSSOVER","docId":"about/references/keywords/CROSSOVER","unlisted":false},{"type":"link","label":"CURVE","href":"/ecalc/docs/about/references/keywords/CURVE","docId":"about/references/keywords/CURVE","unlisted":false},{"type":"link","label":"CURVES","href":"/ecalc/docs/about/references/keywords/CURVES","docId":"about/references/keywords/CURVES","unlisted":false},{"type":"link","label":"DIRECT_EMITTERS","href":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","docId":"about/references/keywords/DIRECT_EMITTERS","unlisted":false},{"type":"link","label":"DISCHARGE_PRESSURE","href":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","docId":"about/references/keywords/DISCHARGE_PRESSURE","unlisted":false},{"type":"link","label":"DOWNSTREAM_PRESSURE_CONTROL","href":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","docId":"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","unlisted":false},{"type":"link","label":"EFFICIENCY","href":"/ecalc/docs/about/references/keywords/EFFICIENCY","docId":"about/references/keywords/EFFICIENCY","unlisted":false},{"type":"link","label":"ELECTRICITY2FUEL","href":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","docId":"about/references/keywords/ELECTRICITY2FUEL","unlisted":false},{"type":"link","label":"EMISSION","href":"/ecalc/docs/about/references/keywords/EMISSION","docId":"about/references/keywords/EMISSION","unlisted":false},{"type":"link","label":"EMISSIONS","href":"/ecalc/docs/about/references/keywords/EMISSIONS","docId":"about/references/keywords/EMISSIONS","unlisted":false},{"type":"link","label":"EMISSION_NAME","href":"/ecalc/docs/about/references/keywords/EMISSION_NAME","docId":"about/references/keywords/EMISSION_NAME","unlisted":false},{"type":"link","label":"EMISSION_RATE","href":"/ecalc/docs/about/references/keywords/EMISSION_RATE","docId":"about/references/keywords/EMISSION_RATE","unlisted":false},{"type":"link","label":"EMITTER_MODEL","href":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","docId":"about/references/keywords/EMITTER_MODEL","unlisted":false},{"type":"link","label":"END","href":"/ecalc/docs/about/references/keywords/END","docId":"about/references/keywords/END","unlisted":false},{"type":"link","label":"ENERGYFUNCTION","href":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","docId":"about/references/keywords/ENERGYFUNCTION","unlisted":false},{"type":"link","label":"ENERGY_USAGE_MODEL","href":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","docId":"about/references/keywords/ENERGY_USAGE_MODEL","unlisted":false},{"type":"link","label":"EXPRESSION","href":"/ecalc/docs/about/references/keywords/EXPRESSION","docId":"about/references/keywords/EXPRESSION","unlisted":false},{"type":"link","label":"EXTRAPOLATION","href":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","docId":"about/references/keywords/EXTRAPOLATION","unlisted":false},{"type":"link","label":"FACILITY_INPUTS","href":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","docId":"about/references/keywords/FACILITY_INPUTS","unlisted":false},{"type":"link","label":"FACTOR","href":"/ecalc/docs/about/references/keywords/FACTOR","docId":"about/references/keywords/FACTOR","unlisted":false},{"type":"link","label":"FILE","href":"/ecalc/docs/about/references/keywords/FILE","docId":"about/references/keywords/FILE","unlisted":false},{"type":"link","label":"FLUID_DENSITY","href":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","docId":"about/references/keywords/FLUID_DENSITY","unlisted":false},{"type":"link","label":"FLUID_MODEL","href":"/ecalc/docs/about/references/keywords/FLUID_MODEL","docId":"about/references/keywords/FLUID_MODEL","unlisted":false},{"type":"link","label":"FUEL","href":"/ecalc/docs/about/references/keywords/FUEL","docId":"about/references/keywords/FUEL","unlisted":false},{"type":"link","label":"FUELCONSUMERS","href":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","docId":"about/references/keywords/FUELCONSUMERS","unlisted":false},{"type":"link","label":"FUELRATE","href":"/ecalc/docs/about/references/keywords/FUELRATE","docId":"about/references/keywords/FUELRATE","unlisted":false},{"type":"link","label":"FUEL_TYPES","href":"/ecalc/docs/about/references/keywords/FUEL_TYPES","docId":"about/references/keywords/FUEL_TYPES","unlisted":false},{"type":"link","label":"GENERATORSETS","href":"/ecalc/docs/about/references/keywords/GENERATORSETS","docId":"about/references/keywords/GENERATORSETS","unlisted":false},{"type":"link","label":"HCEXPORT","href":"/ecalc/docs/about/references/keywords/HCEXPORT","docId":"about/references/keywords/HCEXPORT","unlisted":false},{"type":"link","label":"HEAD","href":"/ecalc/docs/about/references/keywords/HEAD","docId":"about/references/keywords/HEAD","unlisted":false},{"type":"link","label":"HEAD_MARGIN","href":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","docId":"about/references/keywords/HEAD_MARGIN","unlisted":false},{"type":"link","label":"INFLUENCE_TIME_VECTOR","href":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","docId":"about/references/keywords/INFLUENCE_TIME_VECTOR","unlisted":false},{"type":"link","label":"INLET_TEMPERATURE","href":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","docId":"about/references/keywords/INLET_TEMPERATURE","unlisted":false},{"type":"link","label":"INSTALLATIONS","href":"/ecalc/docs/about/references/keywords/INSTALLATIONS","docId":"about/references/keywords/INSTALLATIONS","unlisted":false},{"type":"link","label":"INTERPOLATION_TYPE","href":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","docId":"about/references/keywords/INTERPOLATION_TYPE","unlisted":false},{"type":"link","label":"INTERSTAGE_CONTROL_PRESSURE","href":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","docId":"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","unlisted":false},{"type":"link","label":"LOAD","href":"/ecalc/docs/about/references/keywords/LOAD","docId":"about/references/keywords/LOAD","unlisted":false},{"type":"link","label":"LOWER_HEATING_VALUE","href":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","docId":"about/references/keywords/LOWER_HEATING_VALUE","unlisted":false},{"type":"link","label":"MAXIMUM_DISCHARGE_PRESSURE","href":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","docId":"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","unlisted":false},{"type":"link","label":"MAXIMUM_PRESSURE_RATIO_PER_STAGE","href":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","docId":"about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","unlisted":false},{"type":"link","label":"MODELS","href":"/ecalc/docs/about/references/keywords/MODELS","docId":"about/references/keywords/MODELS","unlisted":false},{"type":"link","label":"NAME","href":"/ecalc/docs/about/references/keywords/NAME","docId":"about/references/keywords/NAME","unlisted":false},{"type":"link","label":"OPERATIONAL_SETTINGS","href":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","docId":"about/references/keywords/OPERATIONAL_SETTINGS","unlisted":false},{"type":"link","label":"POWERLOSSFACTOR","href":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","docId":"about/references/keywords/POWERLOSSFACTOR","unlisted":false},{"type":"link","label":"POWER_ADJUSTMENT_CONSTANT","href":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","docId":"about/references/keywords/POWER_ADJUSTMENT_CONSTANT","unlisted":false},{"type":"link","label":"PRESSURE_CONTROL","href":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","docId":"about/references/keywords/PRESSURE_CONTROL","unlisted":false},{"type":"link","label":"PUMPS","href":"/ecalc/docs/about/references/keywords/PUMPS","docId":"about/references/keywords/PUMPS","unlisted":false},{"type":"link","label":"RATE","href":"/ecalc/docs/about/references/keywords/RATE","docId":"about/references/keywords/RATE","unlisted":false},{"type":"link","label":"RATE_FRACTIONS","href":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","docId":"about/references/keywords/RATE_FRACTIONS","unlisted":false},{"type":"link","label":"RATE_PER_STREAM","href":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","docId":"about/references/keywords/RATE_PER_STREAM","unlisted":false},{"type":"link","label":"REGULARITY","href":"/ecalc/docs/about/references/keywords/REGULARITY","docId":"about/references/keywords/REGULARITY","unlisted":false},{"type":"link","label":"STAGES","href":"/ecalc/docs/about/references/keywords/STAGES","docId":"about/references/keywords/STAGES","unlisted":false},{"type":"link","label":"START","href":"/ecalc/docs/about/references/keywords/START","docId":"about/references/keywords/START","unlisted":false},{"type":"link","label":"STREAM","href":"/ecalc/docs/about/references/keywords/STREAM","docId":"about/references/keywords/STREAM","unlisted":false},{"type":"link","label":"STREAMS","href":"/ecalc/docs/about/references/keywords/STREAMS","docId":"about/references/keywords/STREAMS","unlisted":false},{"type":"link","label":"SUCTION_PRESSURE","href":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","docId":"about/references/keywords/SUCTION_PRESSURE","unlisted":false},{"type":"link","label":"TIME_SERIES","href":"/ecalc/docs/about/references/keywords/TIME_SERIES","docId":"about/references/keywords/TIME_SERIES","unlisted":false},{"type":"link","label":"TOTAL_SYSTEM_RATE","href":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","docId":"about/references/keywords/TOTAL_SYSTEM_RATE","unlisted":false},{"type":"link","label":"TURBINE_EFFICIENCIES","href":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","docId":"about/references/keywords/TURBINE_EFFICIENCIES","unlisted":false},{"type":"link","label":"TURBINE_LOAD","href":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","docId":"about/references/keywords/TURBINE_LOAD","unlisted":false},{"type":"link","label":"TURBINE_MODEL","href":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","docId":"about/references/keywords/TURBINE_MODEL","unlisted":false},{"type":"link","label":"TYPE","href":"/ecalc/docs/about/references/keywords/TYPE","docId":"about/references/keywords/TYPE","unlisted":false},{"type":"link","label":"UNITS","href":"/ecalc/docs/about/references/keywords/UNITS","docId":"about/references/keywords/UNITS","unlisted":false},{"type":"link","label":"UPSTREAM_PRESSURE_CONTROL","href":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","docId":"about/references/keywords/UPSTREAM_PRESSURE_CONTROL","unlisted":false},{"type":"link","label":"VARIABLES","href":"/ecalc/docs/about/references/keywords/VARIABLES","docId":"about/references/keywords/VARIABLES","unlisted":false},{"type":"link","label":"VENTING_EMITTERS","href":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","docId":"about/references/keywords/VENTING_EMITTERS","unlisted":false},{"type":"link","label":"!include","href":"/ecalc/docs/about/references/keywords/include","docId":"about/references/keywords/include","unlisted":false}],"href":"/ecalc/docs/about/references/keywords/"},{"type":"link","label":"API reference","href":"/ecalc/docs/about/references/api/","docId":"about/references/api/index","unlisted":false},{"type":"link","label":"CLI","href":"/ecalc/docs/about/references/cli_reference","docId":"about/references/cli_reference","unlisted":false}],"href":"/ecalc/docs/about/references/"},{"type":"category","label":"Migrating eCalc versions","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"v7 to v8","href":"/ecalc/docs/about/migration_guides/v7_to_v8","docId":"about/migration_guides/v7_to_v8","unlisted":false},{"type":"link","label":"v8 to v8.1","href":"/ecalc/docs/about/migration_guides/v8_to_v81","docId":"about/migration_guides/v8_to_v81","unlisted":false},{"type":"link","label":"v8.1 to v8.2","href":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","docId":"about/migration_guides/v8-1_to_v8-2","unlisted":false},{"type":"link","label":"v8.2 to v8.3","href":"/ecalc/docs/about/migration_guides/v8-2_to_v8-3","docId":"about/migration_guides/v8-2_to_v8-3","unlisted":false},{"type":"link","label":"v8.3 to v8.4","href":"/ecalc/docs/about/migration_guides/v8-3_to_v8-4","docId":"about/migration_guides/v8-3_to_v8-4","unlisted":false},{"type":"link","label":"v8.5 to v8.6","href":"/ecalc/docs/about/migration_guides/v8-5_to_v8-6","docId":"about/migration_guides/v8-5_to_v8-6","unlisted":false},{"type":"link","label":"v8.6 to v8.7","href":"/ecalc/docs/about/migration_guides/v8-6_to_v8-7","docId":"about/migration_guides/v8-6_to_v8-7","unlisted":false},{"type":"link","label":"v8.7 to v8.8","href":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","docId":"about/migration_guides/v8.7_to_v8.8","unlisted":false}],"href":"/ecalc/docs/about/migration_guides/"},{"type":"link","label":"Output data","href":"/ecalc/docs/about/miscellaneous/","docId":"about/miscellaneous/index","unlisted":false}],"contribute":[{"type":"link","label":"Get started","href":"/ecalc/docs/contribute/get-started","docId":"contribute/get-started","unlisted":false},{"type":"category","label":"Documentation","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/ecalc/docs/contribute/documentation-guide/documentation","docId":"contribute/documentation-guide/documentation","unlisted":false},{"type":"link","label":"Markdown","href":"/ecalc/docs/contribute/documentation-guide/markdown","docId":"contribute/documentation-guide/markdown","unlisted":false}],"href":"/ecalc/docs/category/documentation"},{"type":"category","label":"Guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Git","href":"/ecalc/docs/contribute/guides/git","docId":"contribute/guides/git","unlisted":false},{"type":"link","label":"Conventional Commits","href":"/ecalc/docs/contribute/guides/conventional-commits","docId":"contribute/guides/conventional-commits","unlisted":false}],"href":"/ecalc/docs/category/guides"}],"changelog":[{"type":"link","label":"v8.8 (Latest)","href":"/ecalc/docs/changelog/v8.8-release","docId":"changelog/v8-8","unlisted":false},{"type":"link","label":"Next","href":"/ecalc/docs/changelog/latest","docId":"changelog/next","unlisted":false},{"type":"link","label":"---","href":"/ecalc/docs/changelog/separator","docId":"changelog/separator","unlisted":false},{"type":"link","label":"v7.0","href":"/ecalc/docs/changelog/v7-0-release","docId":"changelog/v7-0","unlisted":false},{"type":"link","label":"v7.1","href":"/ecalc/docs/changelog/v7-1-release","docId":"changelog/v7-1","unlisted":false},{"type":"link","label":"v7.2","href":"/ecalc/docs/changelog/v7-2-release","docId":"changelog/v7-2","unlisted":false},{"type":"link","label":"v7.3","href":"/ecalc/docs/changelog/v7-3-release","docId":"changelog/v7-3","unlisted":false},{"type":"link","label":"v7.4","href":"/ecalc/docs/changelog/v7-4-release","docId":"changelog/v7-4","unlisted":false},{"type":"link","label":"v7.5","href":"/ecalc/docs/changelog/v7-5-release","docId":"changelog/v7-5","unlisted":false},{"type":"link","label":"v7.6","href":"/ecalc/docs/changelog/v7-6-release","docId":"changelog/v7-6","unlisted":false},{"type":"link","label":"v8.0","href":"/ecalc/docs/changelog/v8.0-release","docId":"changelog/v8-0","unlisted":false},{"type":"link","label":"v8.1","href":"/ecalc/docs/changelog/v8.1-release","docId":"changelog/v8-1","unlisted":false},{"type":"link","label":"v8.2","href":"/ecalc/docs/changelog/v8.2-release","docId":"changelog/v8-2","unlisted":false},{"type":"link","label":"v8.3","href":"/ecalc/docs/changelog/v8.3-release","docId":"changelog/v8-3","unlisted":false},{"type":"link","label":"v8.4","href":"/ecalc/docs/changelog/v8.4-release","docId":"changelog/v8-4","unlisted":false},{"type":"link","label":"v8.5","href":"/ecalc/docs/changelog/v8.5-release","docId":"changelog/v8-5","unlisted":false},{"type":"link","label":"v8.6","href":"/ecalc/docs/changelog/v8.6-release","docId":"changelog/v8-6","unlisted":false},{"type":"link","label":"v8.7 (Latest)","href":"/ecalc/docs/changelog/v8.7-release","docId":"changelog/v8-7","unlisted":false},{"type":"link","label":"Changelog","href":"/ecalc/docs/changelog/","docId":"changelog/changelog","unlisted":false}]},"docs":{"about/getting_started/cli/faq":{"id":"about/getting_started/cli/faq","title":"FAQ / Troubleshooting","description":"eCalc FAQ","sidebar":"about"},"about/getting_started/cli/index":{"id":"about/getting_started/cli/index","title":"CLI","description":"Getting started with eCalc CLI","sidebar":"about"},"about/getting_started/index":{"id":"about/getting_started/index","title":"Getting started","description":"Getting started with eCalc","sidebar":"about"},"about/getting_started/library/index":{"id":"about/getting_started/library/index","title":"Python Library","description":"Getting started with eCalc Python Library","sidebar":"about"},"about/getting_started/yaml/index":{"id":"about/getting_started/yaml/index","title":"YAML","description":"Getting started with YAML","sidebar":"about"},"about/index":{"id":"about/index","title":"Introduction","description":"Introduction to eCalc documentation","sidebar":"about"},"about/migration_guides/index":{"id":"about/migration_guides/index","title":"Migrating eCalc versions","description":"Getting started with eCalc","sidebar":"about"},"about/migration_guides/v7_to_v8":{"id":"about/migration_guides/v7_to_v8","title":"v7 to v8","description":"v7 to v8 migration","sidebar":"about"},"about/migration_guides/v8_to_v81":{"id":"about/migration_guides/v8_to_v81","title":"v8 to v8.1","description":"v8 to v8.1 migration","sidebar":"about"},"about/migration_guides/v8-1_to_v8-2":{"id":"about/migration_guides/v8-1_to_v8-2","title":"v8.1 to v8.2","description":"v8.1 to v8.2 migration","sidebar":"about"},"about/migration_guides/v8-2_to_v8-3":{"id":"about/migration_guides/v8-2_to_v8-3","title":"v8.2 to v8.3","description":"v8.2 to v8.3 migration","sidebar":"about"},"about/migration_guides/v8-3_to_v8-4":{"id":"about/migration_guides/v8-3_to_v8-4","title":"v8.3 to v8.4","description":"v8.3 to v8.4 migration","sidebar":"about"},"about/migration_guides/v8-5_to_v8-6":{"id":"about/migration_guides/v8-5_to_v8-6","title":"v8.5 to v8.6","description":"v8.5 to v8.6 migration","sidebar":"about"},"about/migration_guides/v8-6_to_v8-7":{"id":"about/migration_guides/v8-6_to_v8-7","title":"v8.6 to v8.7","description":"v8.6 to v8.7 migration","sidebar":"about"},"about/migration_guides/v8.7_to_v8.8":{"id":"about/migration_guides/v8.7_to_v8.8","title":"v8.7 to v8.8","description":"v8.7 to v8.8 migration","sidebar":"about"},"about/miscellaneous/index":{"id":"about/miscellaneous/index","title":"Output data","description":"Output data","sidebar":"about"},"about/modelling/examples/advanced":{"id":"about/modelling/examples/advanced","title":"Advanced model","description":"An advanced model using consumer systems and two installations","sidebar":"about"},"about/modelling/examples/drogon":{"id":"about/modelling/examples/drogon","title":"Drogon model","description":"Model using Drogon input data","sidebar":"about"},"about/modelling/examples/index":{"id":"about/modelling/examples/index","title":"Examples","description":"Examples of eCalc usage","sidebar":"about"},"about/modelling/examples/simple":{"id":"about/modelling/examples/simple","title":"Simple model","description":"A simple model with a single installation","sidebar":"about"},"about/modelling/index":{"id":"about/modelling/index","title":"Modelling guide","description":"eCalc modelling","sidebar":"about"},"about/modelling/setup/facility_inputs/generator_modelling":{"id":"about/modelling/setup/facility_inputs/generator_modelling","title":"Generator modelling","description":"Generator modelling","sidebar":"about"},"about/modelling/setup/facility_inputs/index":{"id":"about/modelling/setup/facility_inputs/index","title":"Facility inputs","description":"Guide on how to use facility inputs","sidebar":"about"},"about/modelling/setup/facility_inputs/pump_modelling/index":{"id":"about/modelling/setup/facility_inputs/pump_modelling/index","title":"Pump modelling","description":"Pump modelling","sidebar":"about"},"about/modelling/setup/facility_inputs/pump_modelling/pump_charts":{"id":"about/modelling/setup/facility_inputs/pump_modelling/pump_charts","title":"Pump chart","description":"Energy usage for pumps is not based on pre-sampled data between rates,","sidebar":"about"},"about/modelling/setup/facility_inputs/sampled_compressor_model":{"id":"about/modelling/setup/facility_inputs/sampled_compressor_model","title":"Sampled compressor model","description":"Sampled compressor model","sidebar":"about"},"about/modelling/setup/facility_inputs/tabular":{"id":"about/modelling/setup/facility_inputs/tabular","title":"Tabular models","description":"Tabular models","sidebar":"about"},"about/modelling/setup/file_format_and_syntax/expressions":{"id":"about/modelling/setup/file_format_and_syntax/expressions","title":"Expressions","description":"eCalc EXPRESSIONS","sidebar":"about"},"about/modelling/setup/file_format_and_syntax/index":{"id":"about/modelling/setup/file_format_and_syntax/index","title":"File format and syntax","description":"YAML file format and syntax guide","sidebar":"about"},"about/modelling/setup/fuel_types":{"id":"about/modelling/setup/fuel_types","title":"Fuel types","description":"Guide on how to use fuel types","sidebar":"about"},"about/modelling/setup/index":{"id":"about/modelling/setup/index","title":"Setup an eCalc\u2122 Model","description":"Guide on how to setup an eCalc\u2122 model","sidebar":"about"},"about/modelling/setup/installations/compressor_models_in_calculations/compressor":{"id":"about/modelling/setup/installations/compressor_models_in_calculations/compressor","title":"Compressor","description":"COMPRESSOR Energy Usage Model","sidebar":"about"},"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system":{"id":"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","title":"Compressor system","description":"COMPRESSOR_SYSTEM Energy Usage Model","sidebar":"about"},"about/modelling/setup/installations/compressor_models_in_calculations/index":{"id":"about/modelling/setup/installations/compressor_models_in_calculations/index","title":"Compressor models","description":"Using compressor models in calculations","sidebar":"about"},"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures":{"id":"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","title":"Variable speed compressor train multiple streams and pressures","description":"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES Energy Usage Model","sidebar":"about"},"about/modelling/setup/installations/direct_consumers":{"id":"about/modelling/setup/installations/direct_consumers","title":"Direct consumers","description":"This energy model usage type allows for defining energy usage directly with an expression. It needs to be either","sidebar":"about"},"about/modelling/setup/installations/generator_sets_in_calculations":{"id":"about/modelling/setup/installations/generator_sets_in_calculations","title":"Generator sets","description":"Using generator sets in calculations","sidebar":"about"},"about/modelling/setup/installations/index":{"id":"about/modelling/setup/installations/index","title":"Installations","description":"Guide on how to use installations","sidebar":"about"},"about/modelling/setup/installations/pump_models_in_calculations":{"id":"about/modelling/setup/installations/pump_models_in_calculations","title":"Pump models","description":"Using pumps in calculations","sidebar":"about"},"about/modelling/setup/installations/tabular_models_in_calculations":{"id":"about/modelling/setup/installations/tabular_models_in_calculations","title":"Tabular models","description":"Using tabular models in calculations","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_charts/index":{"id":"about/modelling/setup/models/compressor_modelling/compressor_charts/index","title":"Compressor charts","description":"Introduction into compressor charts","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/index":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/index","title":"Compressor train types","description":"This section outlines the various compressor train types that are available in eCalc\u2122.","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","title":"Simplified variable speed compressor train","description":"The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","title":"Single speed compressor train","description":"The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft.","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","title":"Variable speed compressor train","description":"In this model all compressors in the train have the same speed, and the model is build on a forward model of","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","title":"Variable speed compressor train model with multiple streams and pressures","description":"This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like.","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index":{"id":"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index","title":"Fixed speed pressure control","description":"Introduction to fixed speed pressure control","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/index":{"id":"about/modelling/setup/models/compressor_modelling/index","title":"Compressor modelling","description":"Compressor modelling","sidebar":"about"},"about/modelling/setup/models/fluid_model":{"id":"about/modelling/setup/models/fluid_model","title":"Fluid model","description":"Selecting a fluid model in eCalc","sidebar":"about"},"about/modelling/setup/models/index":{"id":"about/modelling/setup/models/index","title":"Models","description":"Guide on how to use models in eCalc\u2122","sidebar":"about"},"about/modelling/setup/models/turbine_modeling":{"id":"about/modelling/setup/models/turbine_modeling","title":"Turbine modelling","description":"Turbine modelling","sidebar":"about"},"about/modelling/setup/time_series":{"id":"about/modelling/setup/time_series","title":"Time series","description":"Time series guide and description","sidebar":"about"},"about/modelling/setup/variables":{"id":"about/modelling/setup/variables","title":"Variables","description":"Variables guide and description","sidebar":"about"},"about/modelling/theory/compressor_modelling":{"id":"about/modelling/theory/compressor_modelling","title":"Compressor modelling","description":"Compressor modelling theory","sidebar":"about"},"about/modelling/theory/index":{"id":"about/modelling/theory/index","title":"Theory","description":"Core theory about eCalc\u2122","sidebar":"about"},"about/modelling/theory/pump_modelling":{"id":"about/modelling/theory/pump_modelling","title":"Pump modelling","description":"Pump modelling theory","sidebar":"about"},"about/modelling/workflow/generic_workflow":{"id":"about/modelling/workflow/generic_workflow","title":"Generic Workflow","description":"Generic workflow","sidebar":"about"},"about/modelling/workflow/index":{"id":"about/modelling/workflow/index","title":"eCalc\u2122 Workflow","description":"eCalc modelling","sidebar":"about"},"about/references/api/index":{"id":"about/references/api/index","title":"API reference","description":"Generated API reference for the libecalc library can be found here.","sidebar":"about"},"about/references/cli_reference":{"id":"about/references/cli_reference","title":"ecalc","description":"Args:","sidebar":"about"},"about/references/index":{"id":"about/references/index","title":"Reference documentation","description":"Getting started with eCalc","sidebar":"about"},"about/references/keywords/ADJUSTMENT":{"id":"about/references/keywords/ADJUSTMENT","title":"ADJUSTMENT","description":"eCalc Model","sidebar":"about"},"about/references/keywords/CATEGORY":{"id":"about/references/keywords/CATEGORY","title":"CATEGORY","description":"eCalc Model","sidebar":"about"},"about/references/keywords/COMPRESSOR_MODEL":{"id":"about/references/keywords/COMPRESSOR_MODEL","title":"COMPRESSOR_MODEL","description":"ENERGYUSAGEMODEL / COMPRESSORMODEL","sidebar":"about"},"about/references/keywords/COMPRESSOR_SYSTEM":{"id":"about/references/keywords/COMPRESSOR_SYSTEM","title":"COMPRESSORS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/COMPRESSOR_TRAIN_MODEL":{"id":"about/references/keywords/COMPRESSOR_TRAIN_MODEL","title":"COMPRESSOR_TRAIN_MODEL","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONDITION":{"id":"about/references/keywords/CONDITION","title":"CONDITION","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONDITIONS":{"id":"about/references/keywords/CONDITIONS","title":"CONDITIONS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONSTANT":{"id":"about/references/keywords/CONSTANT","title":"CONSTANT","description":"FACILITYINPUTS /","sidebar":"about"},"about/references/keywords/CONSUMERS":{"id":"about/references/keywords/CONSUMERS","title":"CONSUMERS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONSUMPTION_RATE_TYPE":{"id":"about/references/keywords/CONSUMPTION_RATE_TYPE","title":"CONSUMPTION_RATE_TYPE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONTROL_MARGIN":{"id":"about/references/keywords/CONTROL_MARGIN","title":"CONTROL_MARGIN","description":"MODELS /","sidebar":"about"},"about/references/keywords/CONTROL_MARGIN_UNIT":{"id":"about/references/keywords/CONTROL_MARGIN_UNIT","title":"CONTROL_MARGIN_UNIT","description":"MODELS /","sidebar":"about"},"about/references/keywords/CROSSOVER":{"id":"about/references/keywords/CROSSOVER","title":"CROSSOVER","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CURVE":{"id":"about/references/keywords/CURVE","title":"CURVE","description":"Description","sidebar":"about"},"about/references/keywords/CURVES":{"id":"about/references/keywords/CURVES","title":"CURVES","description":"Description","sidebar":"about"},"about/references/keywords/DIRECT_EMITTERS":{"id":"about/references/keywords/DIRECT_EMITTERS","title":"DIRECT_EMITTERS","description":"Deprecated from eCalc v8.7 (changed name to VENTING_EMITTERS).","sidebar":"about"},"about/references/keywords/DISCHARGE_PRESSURE":{"id":"about/references/keywords/DISCHARGE_PRESSURE","title":"DISCHARGE_PRESSURE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL":{"id":"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","title":"DOWNSTREAM_PRESSURE_CONTROL","description":"MODELS /","sidebar":"about"},"about/references/keywords/EFFICIENCY":{"id":"about/references/keywords/EFFICIENCY","title":"EFFICIENCY","description":"Description","sidebar":"about"},"about/references/keywords/ELECTRICITY2FUEL":{"id":"about/references/keywords/ELECTRICITY2FUEL","title":"ELECTRICITY2FUEL","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/EMISSION":{"id":"about/references/keywords/EMISSION","title":"EMISSION","description":"New keyword from eCalc v8.8!","sidebar":"about"},"about/references/keywords/EMISSION_NAME":{"id":"about/references/keywords/EMISSION_NAME","title":"EMISSION_NAME","description":"Deprecated from eCalc v8.8 (is included in EMISSION).","sidebar":"about"},"about/references/keywords/EMISSION_RATE":{"id":"about/references/keywords/EMISSION_RATE","title":"EMISSION_RATE","description":"Deprecated from eCalc v8.8 (is included in EMISSION).","sidebar":"about"},"about/references/keywords/EMISSIONS":{"id":"about/references/keywords/EMISSIONS","title":"EMISSIONS","description":"FUELTYPES /","sidebar":"about"},"about/references/keywords/EMITTER_MODEL":{"id":"about/references/keywords/EMITTER_MODEL","title":"EMITTER_MODEL","description":"Deprecated from eCalc v8.8 (replaced by EMISSION).","sidebar":"about"},"about/references/keywords/END":{"id":"about/references/keywords/END","title":"END","description":"END","sidebar":"about"},"about/references/keywords/ENERGY_USAGE_MODEL":{"id":"about/references/keywords/ENERGY_USAGE_MODEL","title":"ENERGY_USAGE_MODEL","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/ENERGYFUNCTION":{"id":"about/references/keywords/ENERGYFUNCTION","title":"ENERGYFUNCTION","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/EXPRESSION":{"id":"about/references/keywords/EXPRESSION","title":"EXPRESSION","description":"VARIABLES /","sidebar":"about"},"about/references/keywords/EXTRAPOLATION":{"id":"about/references/keywords/EXTRAPOLATION","title":"EXTRAPOLATION","description":"TIMESERIES /","sidebar":"about"},"about/references/keywords/FACILITY_INPUTS":{"id":"about/references/keywords/FACILITY_INPUTS","title":"FACILITY_INPUTS","description":"FACILITYINPUTS","sidebar":"about"},"about/references/keywords/FACTOR":{"id":"about/references/keywords/FACTOR","title":"FACTOR","description":"[...] /","sidebar":"about"},"about/references/keywords/FILE":{"id":"about/references/keywords/FILE","title":"FILE","description":"... /","sidebar":"about"},"about/references/keywords/FLUID_DENSITY":{"id":"about/references/keywords/FLUID_DENSITY","title":"FLUID_DENSITY","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/FLUID_MODEL":{"id":"about/references/keywords/FLUID_MODEL","title":"FLUID_MODEL","description":"Description","sidebar":"about"},"about/references/keywords/FUEL":{"id":"about/references/keywords/FUEL","title":"FUEL","description":"... /","sidebar":"about"},"about/references/keywords/FUEL_TYPES":{"id":"about/references/keywords/FUEL_TYPES","title":"FUEL_TYPES","description":"FUELTYPES","sidebar":"about"},"about/references/keywords/FUELCONSUMERS":{"id":"about/references/keywords/FUELCONSUMERS","title":"FUELCONSUMERS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/FUELRATE":{"id":"about/references/keywords/FUELRATE","title":"FUELRATE","description":"INSTALLATIONS","sidebar":"about"},"about/references/keywords/GENERATORSETS":{"id":"about/references/keywords/GENERATORSETS","title":"GENERATORSETS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/HCEXPORT":{"id":"about/references/keywords/HCEXPORT","title":"HCEXPORT","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/HEAD":{"id":"about/references/keywords/HEAD","title":"HEAD","description":"Description","sidebar":"about"},"about/references/keywords/HEAD_MARGIN":{"id":"about/references/keywords/HEAD_MARGIN","title":"HEAD_MARGIN","description":"FACILITYINPUTS /","sidebar":"about"},"about/references/keywords/include":{"id":"about/references/keywords/include","title":"!include","description":"Description","sidebar":"about"},"about/references/keywords/index":{"id":"about/references/keywords/index","title":"YAML keywords","description":"eCalc KEYWORDS","sidebar":"about"},"about/references/keywords/INFLUENCE_TIME_VECTOR":{"id":"about/references/keywords/INFLUENCE_TIME_VECTOR","title":"INFLUENCE_TIME_VECTOR","description":"TIMESERIES /","sidebar":"about"},"about/references/keywords/INLET_TEMPERATURE":{"id":"about/references/keywords/INLET_TEMPERATURE","title":"INLET_TEMPERATURE","description":"MODELS / INLETTEMPERATURE","sidebar":"about"},"about/references/keywords/INSTALLATIONS":{"id":"about/references/keywords/INSTALLATIONS","title":"INSTALLATIONS","description":"INSTALLATIONS","sidebar":"about"},"about/references/keywords/INTERPOLATION_TYPE":{"id":"about/references/keywords/INTERPOLATION_TYPE","title":"INTERPOLATION_TYPE","description":"TIMESERIES /","sidebar":"about"},"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE":{"id":"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","title":"INTERSTAGE_CONTROL_PRESSURE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/LOAD":{"id":"about/references/keywords/LOAD","title":"LOAD","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/LOWER_HEATING_VALUE":{"id":"about/references/keywords/LOWER_HEATING_VALUE","title":"LOWER_HEATING_VALUE","description":"Description","sidebar":"about"},"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE":{"id":"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","title":"MAXIMUM_DISCHARGE_PRESSURE","description":"MODELS /","sidebar":"about"},"about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE":{"id":"about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","title":"MAXIMUM_PRESSURE_RATIO_PER_STAGE","description":"MODELS /","sidebar":"about"},"about/references/keywords/MODELS":{"id":"about/references/keywords/MODELS","title":"MODELS","description":"MODELS","sidebar":"about"},"about/references/keywords/NAME":{"id":"about/references/keywords/NAME","title":"NAME","description":"[...] /","sidebar":"about"},"about/references/keywords/OPERATIONAL_SETTINGS":{"id":"about/references/keywords/OPERATIONAL_SETTINGS","title":"OPERATIONAL_SETTINGS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/POWER_ADJUSTMENT_CONSTANT":{"id":"about/references/keywords/POWER_ADJUSTMENT_CONSTANT","title":"POWER_ADJUSTMENT_CONSTANT","description":"MODELS /","sidebar":"about"},"about/references/keywords/POWERLOSSFACTOR":{"id":"about/references/keywords/POWERLOSSFACTOR","title":"POWERLOSSFACTOR","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/PRESSURE_CONTROL":{"id":"about/references/keywords/PRESSURE_CONTROL","title":"PRESSURE_CONTROL","description":"Description","sidebar":"about"},"about/references/keywords/PUMPS":{"id":"about/references/keywords/PUMPS","title":"PUMPS","description":"INSTALLATIONS / [...] /","sidebar":"about"},"about/references/keywords/RATE":{"id":"about/references/keywords/RATE","title":"RATE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/RATE_FRACTIONS":{"id":"about/references/keywords/RATE_FRACTIONS","title":"RATE_FRACTIONS","description":"Description","sidebar":"about"},"about/references/keywords/RATE_PER_STREAM":{"id":"about/references/keywords/RATE_PER_STREAM","title":"RATE_PER_STREAM","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/REGULARITY":{"id":"about/references/keywords/REGULARITY","title":"REGULARITY","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/STAGES":{"id":"about/references/keywords/STAGES","title":"STAGES","description":"MODELS /","sidebar":"about"},"about/references/keywords/START":{"id":"about/references/keywords/START","title":"START","description":"START","sidebar":"about"},"about/references/keywords/STREAM":{"id":"about/references/keywords/STREAM","title":"STREAM","description":"MODELS /","sidebar":"about"},"about/references/keywords/STREAMS":{"id":"about/references/keywords/STREAMS","title":"STREAMS","description":"MODELS /","sidebar":"about"},"about/references/keywords/SUCTION_PRESSURE":{"id":"about/references/keywords/SUCTION_PRESSURE","title":"SUCTION_PRESSURE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/TIME_SERIES":{"id":"about/references/keywords/TIME_SERIES","title":"TIME_SERIES","description":"TIMESERIES /","sidebar":"about"},"about/references/keywords/TOTAL_SYSTEM_RATE":{"id":"about/references/keywords/TOTAL_SYSTEM_RATE","title":"TOTAL_SYSTEM_RATE","description":"INSTALLATIONS / [...] /","sidebar":"about"},"about/references/keywords/TURBINE_EFFICIENCIES":{"id":"about/references/keywords/TURBINE_EFFICIENCIES","title":"TURBINE_EFFICIENCIES","description":"Description","sidebar":"about"},"about/references/keywords/TURBINE_LOAD":{"id":"about/references/keywords/TURBINE_LOAD","title":"TURBINE_LOAD","description":"Description","sidebar":"about"},"about/references/keywords/TURBINE_MODEL":{"id":"about/references/keywords/TURBINE_MODEL","title":"TURBINE_MODEL","description":"Description","sidebar":"about"},"about/references/keywords/TYPE":{"id":"about/references/keywords/TYPE","title":"TYPE","description":"[...] /","sidebar":"about"},"about/references/keywords/UNITS":{"id":"about/references/keywords/UNITS","title":"UNITS","description":"Description","sidebar":"about"},"about/references/keywords/UPSTREAM_PRESSURE_CONTROL":{"id":"about/references/keywords/UPSTREAM_PRESSURE_CONTROL","title":"UPSTREAM_PRESSURE_CONTROL","description":"MODELS /","sidebar":"about"},"about/references/keywords/VARIABLES":{"id":"about/references/keywords/VARIABLES","title":"VARIABLES","description":"VARIABLES","sidebar":"about"},"about/references/keywords/VENTING_EMITTERS":{"id":"about/references/keywords/VENTING_EMITTERS","title":"VENTING_EMITTERS","description":"New definition of VENTING_EMITTERS from eCalc v8.8!","sidebar":"about"},"changelog/changelog":{"id":"changelog/changelog","title":"Changelog","description":"8.9.0 (2024-01-11)","sidebar":"changelog"},"changelog/next":{"id":"changelog/next","title":"Next","description":"New Features","sidebar":"changelog"},"changelog/separator":{"id":"changelog/separator","title":"---","description":"","sidebar":"changelog"},"changelog/v7-0":{"id":"changelog/v7-0","title":"v7.0","description":"Features","sidebar":"changelog"},"changelog/v7-1":{"id":"changelog/v7-1","title":"v7.1","description":"Features","sidebar":"changelog"},"changelog/v7-2":{"id":"changelog/v7-2","title":"v7.2","description":"Features","sidebar":"changelog"},"changelog/v7-3":{"id":"changelog/v7-3","title":"v7.3","description":"Features","sidebar":"changelog"},"changelog/v7-4":{"id":"changelog/v7-4","title":"v7.4","description":"Features","sidebar":"changelog"},"changelog/v7-5":{"id":"changelog/v7-5","title":"v7.5","description":"Features","sidebar":"changelog"},"changelog/v7-6":{"id":"changelog/v7-6","title":"v7.6","description":"Breaking changes","sidebar":"changelog"},"changelog/v8-0":{"id":"changelog/v8-0","title":"v8.0","description":"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some","sidebar":"changelog"},"changelog/v8-1":{"id":"changelog/v8-1","title":"v8.1","description":"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:","sidebar":"changelog"},"changelog/v8-2":{"id":"changelog/v8-2","title":"v8.2","description":"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See","sidebar":"changelog"},"changelog/v8-3":{"id":"changelog/v8-3","title":"v8.3","description":"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See","sidebar":"changelog"},"changelog/v8-4":{"id":"changelog/v8-4","title":"v8.4","description":"New Features","sidebar":"changelog"},"changelog/v8-5":{"id":"changelog/v8-5","title":"v8.5","description":"New Features","sidebar":"changelog"},"changelog/v8-6":{"id":"changelog/v8-6","title":"v8.6","description":"New Features","sidebar":"changelog"},"changelog/v8-7":{"id":"changelog/v8-7","title":"v8.7 (Latest)","description":"New Features","sidebar":"changelog"},"changelog/v8-8":{"id":"changelog/v8-8","title":"v8.8 (Latest)","description":"New Features","sidebar":"changelog"},"contribute/documentation-guide/documentation":{"id":"contribute/documentation-guide/documentation","title":"Overview","description":"This site was generated from the contents of your documentation folder using Docusaurus.","sidebar":"contribute"},"contribute/documentation-guide/markdown":{"id":"contribute/documentation-guide/markdown","title":"Markdown","description":"Docusaurus uses standard Markdown syntax plus Docusaurus Extended Markdown functionality.","sidebar":"contribute"},"contribute/get-started":{"id":"contribute/get-started","title":"Get started","description":"Welcome! We are glad that you want to contribute to our project! \ud83d\udc96","sidebar":"contribute"},"contribute/guides/conventional-commits":{"id":"contribute/guides/conventional-commits","title":"Conventional Commits","description":"Git commits are required to follow conventional commits.","sidebar":"contribute"},"contribute/guides/git":{"id":"contribute/guides/git","title":"Git","description":"Git is the version control system (VCS) that is responsible for tracking all changes done to the code base.","sidebar":"contribute"}}}')}}]); \ No newline at end of file diff --git a/assets/js/97732f4b.f8435a1d.js b/assets/js/97732f4b.f8435a1d.js new file mode 100644 index 0000000000..4b9d3d4113 --- /dev/null +++ b/assets/js/97732f4b.f8435a1d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7594],{4111:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>T,frontMatter:()=>c,metadata:()=>a,toc:()=>i});var r=t(5893),o=t(1151);const c={},s="POWER_ADJUSTMENT_CONSTANT",a={id:"about/references/keywords/POWER_ADJUSTMENT_CONSTANT",title:"POWER_ADJUSTMENT_CONSTANT",description:"MODELS /",source:"@site/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/POWER_ADJUSTMENT_CONSTANT",permalink:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"POWERLOSSFACTOR",permalink:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR"},next:{title:"PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL"}},d={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"power_adjustment_constant",children:"POWER_ADJUSTMENT_CONSTANT"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT",children:"POWER_ADJUSTMENT_CONSTANT"})]}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(n.p,{children:"Optional constant MW adjustment added to the model. Only added if (electrical) POWER > 0."}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: <model type>\n ...\n POWER_ADJUSTMENT_CONSTANT: <value in MW>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: simple_compressor\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n ...\n POWER_ADJUSTMENT_CONSTANT: 10 #MW\n"})})]})}function T(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>s});var r=t(7294);const o={},c=r.createContext(o);function s(e){const n=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/977fea76.eec18e09.js b/assets/js/977fea76.eec18e09.js new file mode 100644 index 0000000000..a9ae0612c1 --- /dev/null +++ b/assets/js/977fea76.eec18e09.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8023],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/9a118db7.20b551de.js b/assets/js/9a118db7.20b551de.js new file mode 100644 index 0000000000..8028af5c84 --- /dev/null +++ b/assets/js/9a118db7.20b551de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9364],{4607:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>u,frontMatter:()=>t,metadata:()=>r,toc:()=>c});var a=i(5893),s=i(1151);const t={title:"Variables",sidebar_position:6,description:"Variables guide and description"},l=void 0,r={id:"about/modelling/setup/variables",title:"Variables",description:"Variables guide and description",source:"@site/docs/about/modelling/setup/variables.md",sourceDirName:"about/modelling/setup",slug:"/about/modelling/setup/variables",permalink:"/ecalc/docs/about/modelling/setup/variables",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/variables.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Variables",sidebar_position:6,description:"Variables guide and description"},sidebar:"about",previous:{title:"Fuel types",permalink:"/ecalc/docs/about/modelling/setup/fuel_types"},next:{title:"Installations",permalink:"/ecalc/docs/about/modelling/setup/installations/"}},o={},c=[{value:"Defining variables",id:"defining-variables",level:2},{value:"Format",id:"format",level:3},{value:"Examples",id:"examples",level:3},{value:"Using variables",id:"using-variables",level:2},{value:"Example",id:"example",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"})," keyword is ",(0,a.jsx)(n.strong,{children:"optional"})," for an eCalc\u2122 model to run."]})}),"\n",(0,a.jsx)(n.h2,{id:"defining-variables",children:"Defining variables"}),"\n",(0,a.jsx)(n.p,{children:"Variables are defined in their own section in the YAML file, they can either be defined without link to time, or linked to time."}),"\n",(0,a.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n <variable name>:\n VALUE: <expression>\n"})}),"\n",(0,a.jsx)(n.p,{children:"With time link:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n <variable name>:\n <YYYY-MM-DD [HH:mm:ss]>:\n VALUE: <expression>\n"})}),"\n",(0,a.jsx)(n.h3,{id:"examples",children:"Examples"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n salt_water_injection:\n VALUE: SIM1:COL1 {*} 2\n"})}),"\n",(0,a.jsx)(n.p,{children:"With time link:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n salt_water_injection:\n 2010-01-01:\n VALUE: SIM1:COL1 {*} 2\n 2020-01-01:\n VALUE: SIM1:COL1\n"})}),"\n",(0,a.jsx)(n.h2,{id:"using-variables",children:"Using variables"}),"\n",(0,a.jsx)(n.p,{children:"Variables can be used in any expression throughout the YAML file and can even be used within defining other variables."}),"\n",(0,a.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,a.jsxs)(n.p,{children:["Using variables in the ",(0,a.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/",children:"INSTALLATION"})," section:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n gas_rateA:\n VALUE: SIM;COL1\n gas_rateB:\n VALUE: SIM;COL2\n\nINSTALLATIONS: \n - NAME: installationA\n CATEGORY: FIXED\n ...\n - NAME: sample_compressor\n CATEGORY: COMPRESSOR\n ENERGYFUNCTION: compressorA\n RATE: $var.gas_rateA {+} $var.gas_rateB\n ...\n"})}),"\n",(0,a.jsx)(n.p,{children:"Using variables in defining another variable:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n salt_water_injection:\n VALUE: SIM1:COL1 {*} 2\n double_injection_rate:\n VALUE: $var.salt_water_injection {*} 2\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>r,a:()=>l});var a=i(7294);const s={},t=a.createContext(s);function l(e){const n=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),a.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e136365.4646f1dd.js b/assets/js/9e136365.4646f1dd.js new file mode 100644 index 0000000000..511c20cfc6 --- /dev/null +++ b/assets/js/9e136365.4646f1dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9591],{3507:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>d,contentTitle:()=>n,default:()=>a,frontMatter:()=>t,metadata:()=>i,toc:()=>c});var r=o(5893),l=o(1151);const t={title:"Compressor train types",sidebar_position:2},n=void 0,i={id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/index",title:"Compressor train types",description:"This section outlines the various compressor train types that are available in eCalc\u2122.",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Compressor train types",sidebar_position:2},sidebar:"about",previous:{title:"Compressor charts",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},next:{title:"Single speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model"}},d={},c=[];function m(e){const s={a:"a",code:"code",li:"li",p:"p",ul:"ul",...(0,l.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.p,{children:"This section outlines the various compressor train types that are available in eCalc\u2122.\nThese are as follows:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:(0,r.jsx)(s.code,{children:"Single speed compressor train model"})})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:(0,r.jsx)(s.code,{children:"Variable speed compressor train model"})})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:(0,r.jsx)(s.code,{children:"Simplified variable speed compressor train model"})})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:(0,r.jsx)(s.code,{children:"Variable speed compressor train model with multiple streams and pressures"})})}),"\n"]})]})}function a(e={}){const{wrapper:s}={...(0,l.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}},1151:(e,s,o)=>{o.d(s,{Z:()=>i,a:()=>n});var r=o(7294);const l={},t=r.createContext(l);function n(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:n(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e4a10de.e50eeb49.js b/assets/js/9e4a10de.e50eeb49.js new file mode 100644 index 0000000000..2f8d4cf4f7 --- /dev/null +++ b/assets/js/9e4a10de.e50eeb49.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4395],{331:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>E,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var r=t(5893),o=t(1151);const s={},c="TURBINE_MODEL",i={id:"about/references/keywords/TURBINE_MODEL",title:"TURBINE_MODEL",description:"Description",source:"@site/docs/about/references/keywords/TURBINE_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TURBINE_MODEL",permalink:"/ecalc/docs/about/references/keywords/TURBINE_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TURBINE_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TURBINE_LOAD",permalink:"/ecalc/docs/about/references/keywords/TURBINE_LOAD"},next:{title:"TYPE",permalink:"/ecalc/docs/about/references/keywords/TYPE"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"turbine_model",children:"TURBINE_MODEL"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:["When using a ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/turbine_modeling",children:"TURBINE"})," it is required for a ",(0,r.jsx)(n.code,{children:"TURBINE_MODEL"})," to be specified. This is done under the ",(0,r.jsx)(n.code,{children:"MODELS"})," section."]}),"\n",(0,r.jsxs)(n.p,{children:["A turbine model describes a gas-fired turbine that is coupled to a compressor or compression train. It is specified in a similar way to a ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSET"}),". ",(0,r.jsx)(n.code,{children:"TURBINE_LOAD"}),", ",(0,r.jsx)(n.code,{children:"TURBINE_EFFICIENCY"})," and ",(0,r.jsx)(n.code,{children:"LOWER_HEATING_VALUE"})," needs to be inputted here."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>\n TURBINE_LOADS: <list of power values in mega watt>\n TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n"})})]})}function E(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>c});var r=t(7294);const o={},s=r.createContext(o);function c(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e7755e6.0a336fcc.js b/assets/js/9e7755e6.0a336fcc.js new file mode 100644 index 0000000000..7b2328dff6 --- /dev/null +++ b/assets/js/9e7755e6.0a336fcc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7212],{8412:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>E,frontMatter:()=>c,metadata:()=>d,toc:()=>i});var s=n(5893),t=n(1151);const c={},o="DISCHARGE_PRESSURE",d={id:"about/references/keywords/DISCHARGE_PRESSURE",title:"DISCHARGE_PRESSURE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/DISCHARGE_PRESSURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/DISCHARGE_PRESSURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"DIRECT_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS"},next:{title:"DOWNSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL"}},a={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"discharge_pressure",children:"DISCHARGE_PRESSURE"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n[...] / ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",children:"DISCHARGE_PRESSURE"})]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Required"}),(0,s.jsx)(r.th,{children:"Child of"}),(0,s.jsx)(r.th,{children:"Children/Options"})]})}),(0,s.jsx)(r.tbody,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Yes"}),(0,s.jsxs)(r.td,{children:[(0,s.jsx)(r.code,{children:"ENERGY_USAGE_MODEL"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(r.code,{children:"OPERATIONAL_SETTINGS"})]}),(0,s.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["Used to define the discharge pressure for some ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\ntypes and in ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",children:"OPERATIONAL_SETTINGS"})," using an\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EXPRESSION",children:"Expressions"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"DISCHARGE_PRESSURE: <discharge pressure expression>\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"DISCHARGE_PRESSURE: 200 # [bar]\n"})})]})}function E(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>o});var s=n(7294);const t={},c=s.createContext(t);function o(e){const r=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e91bf8d.fd585101.js b/assets/js/9e91bf8d.fd585101.js new file mode 100644 index 0000000000..eef9dcb14a --- /dev/null +++ b/assets/js/9e91bf8d.fd585101.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4631],{1064:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>a,toc:()=>c});var t=r(5893),o=r(1151);const n={title:"Fixed speed pressure control",sidebar_position:3,description:"Introduction to fixed speed pressure control"},i="Fixed speed pressure control",a={id:"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index",title:"Fixed speed pressure control",description:"Introduction to fixed speed pressure control",source:"@site/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control",slug:"/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Fixed speed pressure control",sidebar_position:3,description:"Introduction to fixed speed pressure control"},sidebar:"about",previous:{title:"Variable speed compressor train model with multiple streams and pressures",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},next:{title:"Turbine modelling",permalink:"/ecalc/docs/about/modelling/setup/models/turbine_modeling"}},l={},c=[{value:"Theory",id:"theory",level:2},{value:"Control modelling in eCalc\u2122",id:"control-modelling-in-ecalc",level:2},{value:"Pressure control methods - choking options",id:"pressure-control-methods---choking-options",level:3},{value:"UPSTREAM_CHOKE",id:"upstream_choke",level:4},{value:"DOWNSTREAM_CHOKE",id:"downstream_choke",level:4},{value:"Pressure control methods - recirculation options",id:"pressure-control-methods---recirculation-options",level:3},{value:"INDIVIDUAL_ASV_PRESSURE",id:"individual_asv_pressure",level:4},{value:"INDIVIDUAL_ASV_RATE",id:"individual_asv_rate",level:4},{value:"COMMON_ASV",id:"common_asv",level:4}];function h(e){const s={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"fixed-speed-pressure-control",children:"Fixed speed pressure control"}),"\n",(0,t.jsx)(s.h2,{id:"theory",children:"Theory"}),"\n",(0,t.jsxs)(s.p,{children:["Compressors are typically controlled by changing the rotational speed of the compressor train shaft, which can either increase or decrease the work performed.\nIn the case where this is not possible (",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:"single speed compressors"}),"), or this is not sufficient to control the compressor, other methods of control need to be used.\nIn eCalc\u2122, there are three main compressor control methods considered (aside from rotational speed control), these are:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Upstream choking/throttling"}),"\n",(0,t.jsx)(s.li,{children:"Downstream choking/throttling"}),"\n",(0,t.jsx)(s.li,{children:"Anti-surge recycling"}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Each of these methods are used depending on the situation and placement of the compressor's operating points.\nA summary of how these methods work in practice are seen below.\nIn these figures, the red point represents a singular operating point, which is shifted with the given control mechanism. The operating point first starts below the compressor curve and is then adjusted toward the curve (by either changing head or rate). The different pressure control methods will change the operating points in the follow way:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Upstream throttling will decrease the inlet pressure, and in turn increase the head and the inlet volumetric flow rate (lower pressure = lower density = lower flow rate)."}),"\n",(0,t.jsx)(s.li,{children:"Downstream throttling will increase the head, as the outlet pressure is increased. There is no influence on the inlet rate in this case.\nHowever, when the operating points is on the compressor curve, and the head is further increased (by increasing the outlet pressure), the rate of the compressor will thus be reduced."}),"\n",(0,t.jsx)(s.li,{children:"ASV recycling will simply increase the throughout of the compressor without influencing the head.\nHowever, when the operating points is on the compressor curve, and the mass rate through is further increased, compressor head will in turn be reduced (along the curve)."}),"\n"]}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{style:{textAlign:"center"},children:"Upstream Choking"}),(0,t.jsx)(s.th,{style:{textAlign:"center"},children:"Downstream Choking"})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{style:{textAlign:"center"},children:(0,t.jsx)(s.img,{src:r(3232).Z+"",width:"2990",height:"1906"})}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:(0,t.jsx)(s.img,{src:r(4548).Z+"",width:"2990",height:"1906"})})]})})]}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsx)(s.tr,{children:(0,t.jsx)(s.th,{style:{textAlign:"center"},children:"ASV Recycling"})})}),(0,t.jsx)(s.tbody,{children:(0,t.jsx)(s.tr,{children:(0,t.jsx)(s.td,{style:{textAlign:"center"},children:(0,t.jsx)(s.img,{src:r(2366).Z+"",width:"2990",height:"1906"})})})})]}),"\n",(0,t.jsx)(s.h2,{id:"control-modelling-in-ecalc",children:"Control modelling in eCalc\u2122"}),"\n",(0,t.jsxs)(s.p,{children:["In eCalc\u2122, upstream and downstream choking is modelled as described in the ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/#theory",children:"theory section"}),".\nASV recycling on the other hand is done in three separate ways.\nThese three modelling methods are important for a compression train with more than one stage. This is due the fact that when each compressor stage has an individual ASV, the solution is under determined.\nFor a single stage compressor, the results of these methods will be identical.\nThis will further be elaborated upon in the ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/#pressure-control-methods---recirculation-options",children:"recirculation options"})," section."]}),"\n",(0,t.jsx)(s.p,{children:"Some scenarios where additional pressure control is required can be when:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["The compressor train only operates at one speed (",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:"SINGLE_SPEED_COMPRESSOR_TRAIN"}),"),\nand the given rate and suction pressure gives a too high discharge pressure."]}),"\n",(0,t.jsxs)(s.li,{children:["The compressor train is a ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN"}),",\nbut it already operates at the minimum speed, and still the discharge pressure is too high."]}),"\n",(0,t.jsxs)(s.li,{children:["The compressor train is a ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"}),"\nrequired to meet an export pressure, before compressing gas further for injection. Here the\nrotational speed required to bring the gas from inlet pressure to export pressure may be higher than the speed\nrequired to bring the gas from export pressure to discharge pressure. Hence, the rotational speed giving\nthe correct export pressure will give a too high discharge pressure."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"pressure-control-methods---choking-options",children:"Pressure control methods - choking options"}),"\n",(0,t.jsx)(s.p,{children:"In a situation where the rotational speed of the shaft can not be varied here are only two degrees of freedom.\nThis means that if you give the suction pressure and the flow rate as input, the discharge pressure is decided by those\ntwo inputs. Similarly, if you give the rate and the discharge pressure as input, the suction pressure is decided by\nthose two inputs. Hence, to calculate the energy usage for a given rate, suction pressure and discharge pressure, a\nmethod for fixed speed pressure control must be defined. This can be done by a choke valve upstream or downstream\nof the compressor train, or by recirculating fluid inside the compressor train."}),"\n",(0,t.jsx)(s.p,{children:"Currently, there are two options for choking the pressure in eCalc\u2122:"}),"\n",(0,t.jsx)(s.h4,{id:"upstream_choke",children:"UPSTREAM_CHOKE"}),"\n",(0,t.jsx)(s.p,{children:"The suction pressure is reduced such that the resulting suction pressure after choking together with the given speed results in the required discharge pressure.\nAs the inlet pressure is reduced, the inlet flow rate will also increase."}),"\n",(0,t.jsx)(s.h4,{id:"downstream_choke",children:"DOWNSTREAM_CHOKE"}),"\n",(0,t.jsx)(s.p,{children:"The pressure is choked to the required discharge pressure after the compressor train. So the compressor's head will increase, as the compressor will compress the gas to a higher discharge pressure - which will subsequently be choked to the desired pressure."}),"\n",(0,t.jsx)(s.h3,{id:"pressure-control-methods---recirculation-options",children:"Pressure control methods - recirculation options"}),"\n",(0,t.jsx)(s.p,{children:"As previously mentioned, there are three different methods in eCalc\u2122 for modelling ASV recycling.\nThis is necessary as when there is more than one compressor stage, there will be individual ASVs per stage.\nThus, the problem is under determined, and there are multiple possible solutions.\nTherefore, some modelling choices must\nbe done.\nThere are currently three options available in eCalc\u2122:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"INDIVIDUAL_ASV_PRESSURE"}),"\n",(0,t.jsx)(s.li,{children:"INDIVIDUAL_ASV_RATE"}),"\n",(0,t.jsx)(s.li,{children:"COMMON_ASV"}),"\n"]}),"\n",(0,t.jsxs)(s.admonition,{title:"Note",type:"note",children:[(0,t.jsx)(s.p,{children:"With only one compressor stage or only one recirculation loop (common asv over the entire compressor train),\na unique solution to how much volume to recirculate is available."}),(0,t.jsx)(s.p,{children:"For a single stage compressor, all recirculation options should give the same result."})]}),"\n",(0,t.jsx)(s.p,{children:"A further explanation of ASV recycling can be seen in the figure below.\nHere, it can be seen that the head of a compressor is reduced when the rate is increased.\nThis means that recirculation can reduce the\ndischarge pressure for a single speed compressor."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{src:r(6374).Z+"",width:"512",height:"384"})}),"\n",(0,t.jsx)(s.p,{children:"Looking at the figure above, for an actual volume rate of 1882 am3/hr, the head is 93 kJ/kg (blue dashed line). If this head leads to a too large discharge pressure, it can be reduced by recirculation\nusing the anti-surge valve. As the actual flow rate through the compressor increases, the head is also reduced,\nmeaning that a higher actual flow rate leads to a lower discharge pressure."}),"\n",(0,t.jsx)(s.p,{children:"For example, by increasing the actual volume rate\nto 2322 am3/hr (by recirculating 440 am3/hr through the ASV), the head is reduced to about 81.3 kJ/kg (red dashed lines)\n, in turn leading to a lower discharge pressure. The head can be reduced further down to 42.5 kJ/kg at the maximum flow\nrate (3201 am3/hr) for the compressor (yellow dashed lines). The difference between the flow rate entering the\ncompressor train and the maximum flow rate for the compressor gives the amount of additional volume that can be\nrecirculated through the compressor - the available capacity."}),"\n",(0,t.jsx)(s.h4,{id:"individual_asv_pressure",children:"INDIVIDUAL_ASV_PRESSURE"}),"\n",(0,t.jsx)(s.p,{children:"The pressure ratio (discharge pressure/suction pressure) over each compressor stage is constant.\nEssentially, with each time step there will be no change in the pressure ratio, but the volume flow will adjust to keep the pressure ratio constant."}),"\n",(0,t.jsx)(s.h4,{id:"individual_asv_rate",children:"INDIVIDUAL_ASV_RATE"}),"\n",(0,t.jsx)(s.p,{children:"The flow rate through each compressor stage is increased with the same fraction of the available capacity in that stage."}),"\n",(0,t.jsxs)(s.p,{children:["For example, if you have a 2-stage compressor and the first stage has 500 Am",(0,t.jsx)("sup",{children:"3"}),"/h available capacity and the second has 400 Am",(0,t.jsx)("sup",{children:"3"}),"/h available capacity.\nIf the first stage increases by 25 % of the available capacity (125 Am",(0,t.jsx)("sup",{children:"3"}),"/h), the second stage increase by 25 % too (100 Am",(0,t.jsx)("sup",{children:"3"}),"/h) - given that this matches the required output."]}),"\n",(0,t.jsx)(s.h4,{id:"common_asv",children:"COMMON_ASV"}),"\n",(0,t.jsx)(s.p,{children:"The same volume is recirculated through the entire compressor train.\nThus, each compression stage will have the same mass throughput."})]})}function d(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},2366:(e,s,r)=>{r.d(s,{Z:()=>t});const t=r.p+"assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png"},4548:(e,s,r)=>{r.d(s,{Z:()=>t});const t=r.p+"assets/images/downstream_choking-e0ac6b7a8379c76a8f29199d7aa9086c.png"},6374:(e,s,r)=>{r.d(s,{Z:()=>t});const t=r.p+"assets/images/make_recirculation_pressure_control_plot-527cac79a8c53527147492b170308459.png"},3232:(e,s,r)=>{r.d(s,{Z:()=>t});const t=r.p+"assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png"},1151:(e,s,r)=>{r.d(s,{Z:()=>a,a:()=>i});var t=r(7294);const o={},n=t.createContext(o);function i(e){const s=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a2e97e20.8104584a.js b/assets/js/a2e97e20.8104584a.js new file mode 100644 index 0000000000..f673fd34d1 --- /dev/null +++ b/assets/js/a2e97e20.8104584a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8988],{1009:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>d,toc:()=>c});var t=o(5893),s=o(1151);const i={title:"Models",sidebar_position:4,description:"Guide on how to use models in eCalc\u2122"},r=void 0,d={id:"about/modelling/setup/models/index",title:"Models",description:"Guide on how to use models in eCalc\u2122",source:"@site/docs/about/modelling/setup/models/index.md",sourceDirName:"about/modelling/setup/models",slug:"/about/modelling/setup/models/",permalink:"/ecalc/docs/about/modelling/setup/models/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/index.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Models",sidebar_position:4,description:"Guide on how to use models in eCalc\u2122"},sidebar:"about",previous:{title:"Tabular models",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/tabular"},next:{title:"Fluid model",permalink:"/ecalc/docs/about/modelling/setup/models/fluid_model"}},l={},c=[{value:"Format",id:"format",level:2},{value:"Supported types",id:"supported-types",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," keyword is ",(0,t.jsx)(n.strong,{children:"optional"})," for an eCalc\u2122 model to run. However, it is critical for compressor and turbine modelling."]})}),"\n",(0,t.jsxs)(n.p,{children:["This part of the setup defines input files that characterize various fluid, compressor and turbine models. These are later used as input in the ",(0,t.jsx)(n.a,{href:"../../../references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup by referencing their ",(0,t.jsx)(n.a,{href:"../../../references/keywords/NAME",children:"NAME"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of model, for reference>\n TYPE: <model type>\n <other keywords according to TYPE>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"supported-types",children:"Supported types"}),"\n",(0,t.jsx)(n.p,{children:"The supported types are:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"FLUID"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"COMPRESSOR_CHART"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"SINGLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"TURBINE"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"COMPRESSOR_WITH_TURBINE"})}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>d,a:()=>r});var t=o(7294);const s={},i=t.createContext(s);function r(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a5dcc804.df6dead0.js b/assets/js/a5dcc804.df6dead0.js new file mode 100644 index 0000000000..d4906925f9 --- /dev/null +++ b/assets/js/a5dcc804.df6dead0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8276],{4814:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>r,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var n=t(5893),a=t(1151);const s={title:"Output data",sidebar_position:1e3,description:"Output data"},o="Output data",l={id:"about/miscellaneous/index",title:"Output data",description:"Output data",source:"@site/docs/about/miscellaneous/index.md",sourceDirName:"about/miscellaneous",slug:"/about/miscellaneous/",permalink:"/ecalc/docs/about/miscellaneous/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/miscellaneous/index.md",tags:[],version:"current",sidebarPosition:1e3,frontMatter:{title:"Output data",sidebar_position:1e3,description:"Output data"},sidebar:"about",previous:{title:"v8.7 to v8.8",permalink:"/ecalc/docs/about/migration_guides/v8.7_to_v8.8"}},r={},c=[{value:"Decimals and significant digits in eCalc",id:"decimals-and-significant-digits-in-ecalc",level:2},{value:"Quality control",id:"quality-control",level:2}];function d(e){const i={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"output-data",children:"Output data"}),"\n",(0,n.jsx)(i.p,{children:"In general, each model is outputted to a .csv file with what is viewed as necessary information for an operator.\nFurther details, if necessary, can be seen in a .json file."}),"\n",(0,n.jsx)(i.h2,{id:"decimals-and-significant-digits-in-ecalc",children:"Decimals and significant digits in eCalc"}),"\n",(0,n.jsxs)(i.p,{children:['Output numbers/result in eCalc are currently given at "6 significant digits/figures accuracy". This statement is valid\nfor positive and negative integers and float numbers. Read more about significant digits ',(0,n.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Significant_figures",children:"here"}),"."]}),"\n",(0,n.jsx)(i.admonition,{type:"caution",children:(0,n.jsx)(i.p,{children:'Be aware that the output is never more accurate than the input (ie the measurements/prognosis). So, e.g. if your input\nis rounded off to "nearest million", then that is also how you should consider the accuracy of the output. The output accuracy\nis not more reliable than the lowest input accuracy given.'})}),"\n",(0,n.jsx)(i.p,{children:"In practice, for the output, this means:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"Numbers higher than 1e6 (and lower than -1e6) will not have digits after decimal sign"}),"\n",(0,n.jsx)(i.li,{children:"Numbers smaller than 1e-6 (and -1e-6) is considered to be 0 (rounded to 0), and we will\nnot operate with more than 6 digits after the decimal sign."}),"\n",(0,n.jsx)(i.li,{children:'We only round numbers in the decimal part, to within the "significant digits"'}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"We may in the future allow user to specify number of significant digits in output, but for now it is fixed."}),"\n",(0,n.jsx)(i.h2,{id:"quality-control",children:"Quality control"}),"\n",(0,n.jsxs)(i.p,{children:["eCalc\u2122 has a quality control function, which is represented by a validity flag. This validity flag gives the user information to whether or not their model is valid.\nThis flag can either be seen in the .csv or .json output file.\nEssentially, if the ",(0,n.jsx)(i.code,{children:"<name>.is_valid"})," is shown as a ",(0,n.jsx)(i.code,{children:"1"}),", the level is considered to be valid, and on the opposite end if it is shown to be ",(0,n.jsx)(i.code,{children:"0"}),", it can be considered invalid."]}),"\n",(0,n.jsx)(i.p,{children:"The most likely reason for an invalid flag is that a consumer (pump, compressor) is operating outside its operational limit (potentially outside the pump/compressor chart)."}),"\n",(0,n.jsx)(i.p,{children:"This validity flag can be seen on multiple component levels:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"The highest level being the eCalc\u2122 model (or otherwise known as the asset level). If the highest level flag is given as invalid, this means that any number of the installations in the model can have one or more invalid consumer."}),"\n",(0,n.jsx)(i.li,{children:"If you dig further down in the component levels, the next would be on installation level. This means that if this flag is given as invalid, any consumer within that installation can be invalid."}),"\n",(0,n.jsx)(i.li,{children:"Past the installation level, is the consumer level. Here, the validity of the individual consumers can be seen."}),"\n",(0,n.jsx)(i.li,{children:"If the consumer is a multi-stage compressor (for example), the validity of each compression stage can be viewed (only in the .json file when detailed output is selected)"}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"This is further illustrated in the diagram below:"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"Validity flag example",src:t(3773).Z+"",width:"4331",height:"2500"})})]})}function u(e={}){const{wrapper:i}={...(0,a.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},3773:(e,i,t)=>{t.d(i,{Z:()=>n});const n=t.p+"assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png"},1151:(e,i,t)=>{t.d(i,{Z:()=>l,a:()=>o});var n=t(7294);const a={},s=n.createContext(a);function o(e){const i=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),n.createElement(s.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.459ca90a.js b/assets/js/a7bd4aaa.459ca90a.js new file mode 100644 index 0000000000..b4841b8ae3 --- /dev/null +++ b/assets/js/a7bd4aaa.459ca90a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8518],{8564:(n,e,s)=>{s.r(e),s.d(e,{default:()=>l});s(7294);var o=s(1944),r=s(3320),t=s(4477),i=s(8790),c=s(197),u=s(5893);function a(n){const{version:e}=n;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(c.Z,{version:e.version,tag:(0,r.os)(e.pluginId,e.version)}),(0,u.jsx)(o.d,{children:e.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function d(n){const{version:e,route:s}=n;return(0,u.jsx)(o.FG,{className:e.className,children:(0,u.jsx)(t.q,{version:e,children:(0,i.H)(s.routes)})})}function l(n){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(a,{...n}),(0,u.jsx)(d,{...n})]})}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.320980da.js b/assets/js/a94703ab.320980da.js new file mode 100644 index 0000000000..50c6933956 --- /dev/null +++ b/assets/js/a94703ab.320980da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4368],{2674:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(7294),o=n(512),i=n(1944),s=n(5281),l=n(2802),r=n(1116),c=n(5999),d=n(2466),u=n(5936);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(5893);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.Ct)();return(0,d.RF)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,u.S)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",s.k.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(1442),x=n(6550),f=n(7524),j=n(6668),k=n(1327);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const v={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function g(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",v.collapseSidebarButton),onClick:t,children:(0,b.jsx)(_,{className:v.collapseSidebarButtonIcon})})}var C=n(9689),S=n(902);const I=Symbol("EmptyContext"),N=a.createContext(I);function T(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var B=n(6043),Z=n(8596),A=n(3692),L=n(2389);function y(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.I)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.I)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),type:"button",className:"clean-btn menu__caret",onClick:a})}function w(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.L)(),k=function(e){const t=(0,L.Z)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.LM)(e):void 0),[e,t])}(t),_=(0,l._F)(t,i),v=(0,Z.Mg)(x,i),{collapsed:g,setCollapsed:C}=(0,B.u)({initialState:()=>!!h&&(!_&&t.collapsed)}),{expandedItem:T,setExpandedItem:w}=function(){const e=(0,a.useContext)(N);if(e===I)throw new S.i6("DocSidebarItemsExpandedStateProvider");return e}(),E=function(e){void 0===e&&(e=!g),w(e?null:c),C(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,S.D9)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:_,collapsed:g,updateCollapsed:E}),(0,a.useEffect)((()=>{h&&null!=T&&T!==c&&f&&C(!0)}),[h,T,c,C,f]),(0,b.jsxs)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemCategory,s.k.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":g},p),children:[(0,b.jsxs)("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v}),children:[(0,b.jsx)(A.Z,{className:(0,o.Z)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":_}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":h?!g:void 0,href:h?k??"#":k,...d,children:m}),x&&h&&(0,b.jsx)(y,{collapsed:g,categoryLabel:m,onClick:e=>{e.preventDefault(),E()}})]}),(0,b.jsx)(B.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(V,{items:u,tabIndex:g?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var E=n(3919),H=n(9471);const M={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l._F)(t,a),x=(0,E.Z)(d);return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(A.Z,{className:(0,o.Z)("menu__link",!x&&M.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.Z,{})]})},u)}const W={menuHtmlItem:"menuHtmlItem_M9Kj"};function F(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(n),l&&[W.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function P(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(w,{item:t,...n});case"html":return(0,b.jsx)(F,{item:t,...n});default:return(0,b.jsx)(R,{item:t,...n})}}function D(e){let{items:t,...n}=e;const a=(0,l.f)(t,n.activePath);return(0,b.jsx)(T,{children:a.map(((e,t)=>(0,b.jsx)(P,{item:e,index:t,...n},t)))})}const V=(0,a.memo)(D),U={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function K(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,C.nT)(),[t,n]=(0,a.useState)(e);return(0,d.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",U.menu,l&&U.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:n,activePath:t,level:1})})})}const Y="sidebar_njMd",z="sidebarWithHideableNavbar_wUlq",G="sidebarHidden_VK0M",O="sidebarLogo_isFc";function q(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.L)();return(0,b.jsxs)("div",{className:(0,o.Z)(Y,s&&z,i&&G),children:[s&&(0,b.jsx)(k.Z,{tabIndex:-1,className:O}),(0,b.jsx)(K,{path:t,sidebar:n}),l&&(0,b.jsx)(g,{onClick:a})]})}const J=a.memo(q);var Q=n(3102),X=n(2961);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,X.e)();return(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(Q.Zo,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.i)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(J,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(_,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function se(e){let{children:t}=e;const n=(0,r.V)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.TH)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.n)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.Z)(s.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.Z)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.V)();return(0,b.jsx)("main",{className:(0,o.Z)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function ue(e){let{children:t}=e;const n=(0,r.V)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(5658);function be(e){const t=(0,l.SN)(e);if(!t)return(0,b.jsx)(me.Z,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.FG,{className:(0,o.Z)(s.k.page.docsDocPage),children:(0,b.jsx)(r.b,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},5658:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var a=n(512),o=n(5999),i=n(2503),s=n(5893);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.Z)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.Z,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/ad129716.7c8cb133.js b/assets/js/ad129716.7c8cb133.js new file mode 100644 index 0000000000..178f376942 --- /dev/null +++ b/assets/js/ad129716.7c8cb133.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[754],{2635:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>r,toc:()=>a});var n=o(5893),t=o(1151);const i={title:"Compressor models",sidebar_position:3,description:"Using compressor models in calculations"},l="Compressor models in calculations",r={id:"about/modelling/setup/installations/compressor_models_in_calculations/index",title:"Compressor models",description:"Using compressor models in calculations",source:"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.md",sourceDirName:"about/modelling/setup/installations/compressor_models_in_calculations",slug:"/about/modelling/setup/installations/compressor_models_in_calculations/",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Compressor models",sidebar_position:3,description:"Using compressor models in calculations"},sidebar:"about",previous:{title:"Pump models",permalink:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations"},next:{title:"Compressor",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor"}},c={},a=[];function d(e){const s={a:"a",code:"code",h1:"h1",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"compressor-models-in-calculations",children:"Compressor models in calculations"}),"\n",(0,n.jsxs)(s.p,{children:["There are different options on how to utilise compressor models in the calculations within the\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," section in ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),". Three different options will be illustrated here:"]}),"\n",(0,n.jsx)(s.p,{children:"No matter the compressor model type, it can either be placed in two sections, which can be:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Under the ",(0,n.jsx)(s.code,{children:"CONSUMERS"})," section under ",(0,n.jsx)(s.code,{children:"GENERATORSETS"}),". This is applicable for electrical motor driven compressors where electricity is generated in de-coupled gas turbines and distributed to the individual process units."]}),"\n",(0,n.jsxs)(s.li,{children:["Under the ",(0,n.jsx)(s.code,{children:"FUELCONSUMERS"})," section. Here it is necessary for the compressor model to be coupled to a gas turbine model. The coupled turbine is solely driving the compressor system to which it is attached to."]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Example"})}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: InstallationA\n CATEGORY: FIXED\n FUEL: fuel_gas\n GENERATORSETS:\n - NAME: gensetA\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Gas injection compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n ...\n\n FUELCONSUMERS:\n - NAME: Gas export compressor\n CATEGORY: GAS-DRIVEN-COMPRESSOR \n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n ...\n"})})]})}function m(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,s,o)=>{o.d(s,{Z:()=>r,a:()=>l});var n=o(7294);const t={},i=n.createContext(t);function l(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/af105519.63402ef0.js b/assets/js/af105519.63402ef0.js new file mode 100644 index 0000000000..eb10bca75d --- /dev/null +++ b/assets/js/af105519.63402ef0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4199],{1071:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>a,contentTitle:()=>r,default:()=>v,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var n=o(5893),i=o(1151);const s={title:"v8.2 to v8.3",description:"v8.2 to v8.3 migration",sidebar_position:3},r="v8.2 to v8.3",c={id:"about/migration_guides/v8-2_to_v8-3",title:"v8.2 to v8.3",description:"v8.2 to v8.3 migration",source:"@site/docs/about/migration_guides/v8-2_to_v8-3.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8-2_to_v8-3",permalink:"/ecalc/docs/about/migration_guides/v8-2_to_v8-3",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8-2_to_v8-3.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"v8.2 to v8.3",description:"v8.2 to v8.3 migration",sidebar_position:3},sidebar:"about",previous:{title:"v8.1 to v8.2",permalink:"/ecalc/docs/about/migration_guides/v8-1_to_v8-2"},next:{title:"v8.3 to v8.4",permalink:"/ecalc/docs/about/migration_guides/v8-3_to_v8-4"}},a={},d=[];function u(t){const e={code:"code",h1:"h1",p:"p",...(0,i.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"v82-to-v83",children:"v8.2 to v8.3"}),"\n",(0,n.jsxs)(e.p,{children:["It is no longer accepted to change ",(0,n.jsx)(e.code,{children:"ENERGY_USAGE_MODEL TYPE"})," over time, within one consumer. In case ",(0,n.jsx)(e.code,{children:"TYPE"})," evolution is needed, the model can be split in two consumers."]})]})}function v(t={}){const{wrapper:e}={...(0,i.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(u,{...t})}):u(t)}},1151:(t,e,o)=>{o.d(e,{Z:()=>c,a:()=>r});var n=o(7294);const i={},s=n.createContext(i);function r(t){const e=n.useContext(s);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:r(t.components),n.createElement(s.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/b0a5d2c7.07ceda06.js b/assets/js/b0a5d2c7.07ceda06.js new file mode 100644 index 0000000000..93ca3a53c2 --- /dev/null +++ b/assets/js/b0a5d2c7.07ceda06.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3414],{1003:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>a,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var s=r(5893),o=r(1151);const t={},a="CONTROL_MARGIN",l={id:"about/references/keywords/CONTROL_MARGIN",title:"CONTROL_MARGIN",description:"MODELS /",source:"@site/docs/about/references/keywords/CONTROL_MARGIN.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONTROL_MARGIN",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONTROL_MARGIN.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONSUMPTION_RATE_TYPE",permalink:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE"},next:{title:"CONTROL_MARGIN_UNIT",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Use in Variable speed compressor train model",id:"use-in-variable-speed-compressor-train-model",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3},{value:"Use in Variable speed compressor train model with multiple streams and pressures",id:"use-in-variable-speed-compressor-train-model-with-multiple-streams-and-pressures",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example-1",level:3}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"control_margin",children:"CONTROL_MARGIN"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STAGES",children:"STAGES"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(n.p,{children:"This keyword defines the surge control margin for a variable speed compressor chart."}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"CONTROL_MARGIN"})," behaves as an alternate to the minimum flow line: The input will be 'cropped' to only include points to the right of the control line - modelling recirculation (ASV) from the correct control line."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"CONTROL_MARGIN"})," is given as a percentage or fraction (",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT",children:"CONTROL_MARGIN_UNIT"}),") of the rate difference between minimum- and maximum flow,\nfor the given speed. It is used to calculate the increase in minimum flow for each individual speed curve.\nIt is defined when setting up the stages in a ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:"Variable speed compressor train model"})," or ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"It is currently only possible to define a surge control margin for variable speed compressors."}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"Surge control margin for variable speed compressor chart"})," for more details."]}),"\n",(0,s.jsxs)(n.h2,{id:"use-in-variable-speed-compressor-train-model",children:["Use in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:"Variable speed compressor train model"})]}),"\n",(0,s.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Default value is zero>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n ....\n"})}),"\n",(0,s.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 20\n COMPRESSOR_CHART: 1_stage_chart\n CONTROL_MARGIN: 0.1\n CONTROL_MARGIN_UNIT: FRACTION\n ....\n"})}),"\n",(0,s.jsxs)(n.h2,{id:"use-in-variable-speed-compressor-train-model-with-multiple-streams-and-pressures",children:["Use in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"})]}),"\n",(0,s.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STREAMS:\n - NAME: <name of stream 1>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - NAME: <name of stream 2>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - ...\n - NAME: <name of stream N>\n TYPE: OUTGOING # NB: No fluid definition for outgoing streams!\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n CONTROL_MARGIN: <Default value 0.0>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: <pressure control>\n DOWNSTREAM_PRESSURE_CONTROL: <pressure control>\n - ...\n"})}),"\n",(0,s.jsx)(n.h3,{id:"example-1",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STREAMS:\n - NAME: 1_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_1\n - NAME: 3_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_2\n - NAME: 2_stage_outlet\n TYPE: OUTGOING\n STAGES:\n - COMPRESSOR_CHART: 1_stage_chart\n INLET_TEMPERATURE: 20\n STREAM: \n - 1_stage_inlet\n CONTROL_MARGIN: 10\n CONTROL_MARGIN_UNIT: PERCENTAGE\n - COMPRESSOR_CHART: 2_stage_chart \n INLET_TEMPERATURE: 30\n CONTROL_MARGIN: 15\n CONTROL_MARGIN_UNIT: PERCENTAGE\n - COMPRESSOR_CHART: 3_stage_chart \n INLET_TEMPERATURE: 35\n STREAM: \n - 2_stage_outlet\n - 3_stage_inlet\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage\n - COMPRESSOR_CHART: 4_stage_chart \n INLET_TEMPERATURE: 15\n"})})]})}function m(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>l,a:()=>a});var s=r(7294);const o={},t=s.createContext(o);function a(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b15ba3bd.f6a45144.js b/assets/js/b15ba3bd.f6a45144.js new file mode 100644 index 0000000000..b4f63cbc42 --- /dev/null +++ b/assets/js/b15ba3bd.f6a45144.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2547],{4040:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>o,default:()=>l,frontMatter:()=>a,metadata:()=>s,toc:()=>E});var t=r(5893),c=r(1151);const a={},o="PUMPS",s={id:"about/references/keywords/PUMPS",title:"PUMPS",description:"INSTALLATIONS / [...] /",source:"@site/docs/about/references/keywords/PUMPS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/PUMPS",permalink:"/ecalc/docs/about/references/keywords/PUMPS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/PUMPS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL"},next:{title:"RATE",permalink:"/ecalc/docs/about/references/keywords/RATE"}},i={},E=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example 1",id:"example-1",level:2},{value:"Example 2 (Detailed)",id:"example-2-detailed",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,c.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"pumps",children:"PUMPS"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," / [...] /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/PUMPS",children:"PUMPS"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["Used to define a list of pumps in a ",(0,t.jsx)(n.code,{children:"PUMP_SYSTEM ENERGY USAGE MODEL"}),". Each pump is defined with a name and with a\n",(0,t.jsx)(n.code,{children:"facility input<FACILITY_INPUTS>"})," reference to a pump type energy function."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: <name of compressor>\n CHART: <reference to pump model in facility inputs>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example-1",children:"Example 1"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: water_injection_pump_reference\n - NAME: pump2\n CHART: water_injection_pump_reference\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example-2-detailed",children:"Example 2 (Detailed)"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"- NAME: waterinjection\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n 2019-01-01:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump_a\n CHART: winj_pumpchart_PA03A\n - NAME: pump_b\n CHART: winj_pumpchart_PA03B\n - NAME: pump_c\n CHART: winj_pumpchart_PA03C\n - NAME: pump_d\n CHART: winj_pumpchart_PA03D\n - NAME: pump_e\n CHART: winj_pumpchart_PA03E\n TOTAL_SYSTEM_RATE: SIM8;WATER_INJ\n FLUID_DENSITY: 1030\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0, 0, 0, 0]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n - RATE_FRACTIONS: [0.5, 0.5, 0, 0, 0]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0, 0]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25, 0]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n - RATE_FRACTIONS: [0.2, 0.2, 0.2, 0.2, 0.2]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n"})})]})}function l(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>s,a:()=>o});var t=r(7294);const c={},a=t.createContext(c);function o(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b2781c74.5c448432.js b/assets/js/b2781c74.5c448432.js new file mode 100644 index 0000000000..ad30f9ba45 --- /dev/null +++ b/assets/js/b2781c74.5c448432.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4278],{2776:e=>{e.exports=JSON.parse('{"name":"@easyops-cn/docusaurus-search-local","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/b2b17913.d35b5c93.js b/assets/js/b2b17913.d35b5c93.js new file mode 100644 index 0000000000..8e2e49887a --- /dev/null +++ b/assets/js/b2b17913.d35b5c93.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3190],{3011:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>t,default:()=>a,frontMatter:()=>c,metadata:()=>i,toc:()=>o});var n=r(5893),d=r(1151);const c={},t="CATEGORY",i={id:"about/references/keywords/CATEGORY",title:"CATEGORY",description:"eCalc Model",source:"@site/docs/about/references/keywords/CATEGORY.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CATEGORY",permalink:"/ecalc/docs/about/references/keywords/CATEGORY",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CATEGORY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"ADJUSTMENT",permalink:"/ecalc/docs/about/references/keywords/ADJUSTMENT"},next:{title:"COMPRESSOR_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL"}},l={},o=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function h(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,d.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"category",children:"CATEGORY"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/",children:"eCalc Model"}),"\n/ ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),"\n/ [...] / ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Required"}),(0,n.jsx)(s.th,{children:"Child of"}),(0,n.jsx)(s.th,{children:"Children/Options"})]})}),(0,n.jsx)(s.tbody,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Yes"}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"})," ",(0,n.jsx)("br",{})," ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"})," ",(0,n.jsx)("br",{})," ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," ",(0,n.jsx)("br",{})," ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," ",(0,n.jsx)("br",{})]}),(0,n.jsx)(s.td,{children:"None"})]})})]}),"\n",(0,n.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," keyword is used to specify which category certain data types belong to - these data types are:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"})," and ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"}),": Required"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),": Optional"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPE"}),": Optional"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Only a limited pre-defined set of categories is valid input to the\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," keyword. The complete list of possible categories is given below.\nPlease note that the input is case-sensitive. The names should be in upper-case and the spelling/dash must match the names in the list exactly."]}),"\n",(0,n.jsxs)(s.p,{children:["Allowed categories for ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"})," and ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"}),":"]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Category"}),(0,n.jsx)(s.th,{children:"Description/Examples"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"BASE-LOAD"})}),(0,n.jsx)(s.td,{children:"Consumers that do not vary with production"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"COLD-VENTING-FUGITIVE"})}),(0,n.jsx)(s.td,{children:"Direct emissions through cold venting and fugitive emissions"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"COMPRESSOR"})}),(0,n.jsx)(s.td,{children:"Gas injection compressors, export compressors, etc."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"FIXED-PRODUCTION-LOAD"})}),(0,n.jsxs)(s.td,{children:["Consumer that is fixed/constant when production stream is on. Note that this is simply the name of the category. eCalc\u2122 does ",(0,n.jsx)(s.strong,{children:"not"})," imply any condition (that production must be > 0) when this keyword is applied. For this to occur, ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONDITION",children:"CONDITION"})," must be used. See example below."]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"FLARE"})}),(0,n.jsx)(s.td,{children:"Flaring related energy usage/emissions"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"MISCELLANEOUS"})}),(0,n.jsxs)(s.td,{children:["Anything that don't apply other categories. Compressor and Genset (New in ",(0,n.jsx)(s.strong,{children:"v7.2"}),")"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"PUMP"})}),(0,n.jsx)(s.td,{children:"Single speed pumps, variable speed pumps."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"GAS-DRIVEN-COMPRESSOR"})}),(0,n.jsxs)(s.td,{children:["Compressor only. New in ",(0,n.jsx)(s.strong,{children:"v7.1"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"TURBINE-GENERATOR"})}),(0,n.jsxs)(s.td,{children:["Genset only. New in ",(0,n.jsx)(s.strong,{children:"v7.1"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"POWER-FROM-SHORE"})}),(0,n.jsxs)(s.td,{children:["Genset only. Dummy Genset (should have e.g. 0 fuel). New in ",(0,n.jsx)(s.strong,{children:"v7.1"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"OFFSHORE-WIND"})}),(0,n.jsxs)(s.td,{children:["Direct load consumer only. Negative load. Indicate external power. New in ",(0,n.jsx)(s.strong,{children:"v7.1"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"LOADING"})}),(0,n.jsxs)(s.td,{children:["Direct load consumer only. Indicate oil volume to be loaded. New in ",(0,n.jsx)(s.strong,{children:"v8.0"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"STORAGE"})}),(0,n.jsxs)(s.td,{children:["Direct load consumer only. Indicate oil volume to be stored. New in ",(0,n.jsx)(s.strong,{children:"v8.0"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"STEAM-TURBINE-GENERATOR"})}),(0,n.jsxs)(s.td,{children:["Direct load consumer only. Negative load. Indicate power generated steam turbine. New in ",(0,n.jsx)(s.strong,{children:"v8.1"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"BOILER"})}),(0,n.jsxs)(s.td,{children:["Genset only. Indicate steam generated. New in ",(0,n.jsx)(s.strong,{children:"v8.2"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"HEATER"})}),(0,n.jsxs)(s.td,{children:["Genset only. Indicate hot medium generated. New in ",(0,n.jsx)(s.strong,{children:"v8.2"})]})]})]})]}),"\n",(0,n.jsxs)(s.p,{children:["Allowed categories for ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),":"]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Category"}),(0,n.jsx)(s.th,{children:"Description/Examples"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"FIXED"})}),(0,n.jsx)(s.td,{children:"Fixed installation"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"MOBILE"})}),(0,n.jsx)(s.td,{children:"Mobile/satellite installation."})]})]})]}),"\n",(0,n.jsxs)(s.p,{children:["Allowed categories for ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"}),":"]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Category"}),(0,n.jsx)(s.th,{children:"Description/Examples"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"FUEL-GAS"})}),(0,n.jsx)(s.td,{children:"Normally associated with a fixed installation"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"DIESEL"})}),(0,n.jsx)(s.td,{children:"Normally associated with a mobile installation"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"CATEGORY: <CATEGORY>\n"})}),"\n",(0,n.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"- NAME: name_of_my_electrical_consumer\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n LOAD: 5\n CONDITION: SIM;OIL_PROD > 0\n"})})]})}function a(e={}){const{wrapper:s}={...(0,d.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},1151:(e,s,r)=>{r.d(s,{Z:()=>i,a:()=>t});var n=r(7294);const d={},c=n.createContext(d);function t(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:t(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b677d687.db13f5a3.js b/assets/js/b677d687.db13f5a3.js new file mode 100644 index 0000000000..6ffc535d51 --- /dev/null +++ b/assets/js/b677d687.db13f5a3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[262],{9574:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>E,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var r=t(5893),o=t(1151);const i={},s="RATE_FRACTIONS",c={id:"about/references/keywords/RATE_FRACTIONS",title:"RATE_FRACTIONS",description:"Description",source:"@site/docs/about/references/keywords/RATE_FRACTIONS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/RATE_FRACTIONS",permalink:"/ecalc/docs/about/references/keywords/RATE_FRACTIONS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/RATE_FRACTIONS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"RATE",permalink:"/ecalc/docs/about/references/keywords/RATE"},next:{title:"RATE_PER_STREAM",permalink:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"rate_fractions",children:"RATE_FRACTIONS"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:["A list with one expression per consumer specifying the rate fraction for each consumer. If this is used, ",(0,r.jsx)(n.code,{children:"TOTAL_SYSTEM_RATE"})," for the ",(0,r.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})," is also required. You can use either ",(0,r.jsx)(n.code,{children:"RATES"})," or ",(0,r.jsx)(n.code,{children:"RATE_FRACTIONS"}),"; however, not both in one operational setting."]}),"\n",(0,r.jsx)(n.p,{children:"When specifying the rate fraction, the first fraction will relate to the first operational unit mentioned - i.e. if a pump system has two pumps, the first pump mentioned will relate to the rate fraction."}),"\n",(0,r.jsx)(n.p,{children:"Note that in the case of a compressor, the same method is utilised for specifying rate fractions."}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: <pump name>\n CHART: <chart reference>\n - NAME: <pump name>\n CHART: <chart reference>\n TOTAL_SYSTEM_RATE: <system rate>\n FLUID_DENSITY: <fluid density>\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: <[fraction 1, fraction 2]>\n ...\n - RATE_FRACTIONS: <[fraction 1, fraction 2]>\n ...\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: water_injection_pump_reference\n - NAME: pump2\n CHART: water_injection_pump_reference\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: 1030\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITIES:\n - 1000\n - 1050\n"})})]})}function E(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>s});var r=t(7294);const o={},i=r.createContext(o);function s(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b8c59810.a9f6ce84.js b/assets/js/b8c59810.a9f6ce84.js new file mode 100644 index 0000000000..20c7af09a1 --- /dev/null +++ b/assets/js/b8c59810.a9f6ce84.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9643],{1414:e=>{e.exports=JSON.parse('{"label":"eCalc","permalink":"/ecalc/docs/tags/e-calc","allTagsPath":"/ecalc/docs/tags","count":18,"items":[{"id":"changelog/separator","title":"---","description":"","permalink":"/ecalc/docs/changelog/separator"},{"id":"changelog/next","title":"Next","description":"New Features","permalink":"/ecalc/docs/changelog/latest"},{"id":"changelog/v7-0","title":"v7.0","description":"Features","permalink":"/ecalc/docs/changelog/v7-0-release"},{"id":"changelog/v7-1","title":"v7.1","description":"Features","permalink":"/ecalc/docs/changelog/v7-1-release"},{"id":"changelog/v7-2","title":"v7.2","description":"Features","permalink":"/ecalc/docs/changelog/v7-2-release"},{"id":"changelog/v7-3","title":"v7.3","description":"Features","permalink":"/ecalc/docs/changelog/v7-3-release"},{"id":"changelog/v7-4","title":"v7.4","description":"Features","permalink":"/ecalc/docs/changelog/v7-4-release"},{"id":"changelog/v7-5","title":"v7.5","description":"Features","permalink":"/ecalc/docs/changelog/v7-5-release"},{"id":"changelog/v7-6","title":"v7.6","description":"Breaking changes","permalink":"/ecalc/docs/changelog/v7-6-release"},{"id":"changelog/v8-0","title":"v8.0","description":"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some","permalink":"/ecalc/docs/changelog/v8.0-release"},{"id":"changelog/v8-1","title":"v8.1","description":"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:","permalink":"/ecalc/docs/changelog/v8.1-release"},{"id":"changelog/v8-2","title":"v8.2","description":"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.2-release"},{"id":"changelog/v8-3","title":"v8.3","description":"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.3-release"},{"id":"changelog/v8-4","title":"v8.4","description":"New Features","permalink":"/ecalc/docs/changelog/v8.4-release"},{"id":"changelog/v8-5","title":"v8.5","description":"New Features","permalink":"/ecalc/docs/changelog/v8.5-release"},{"id":"changelog/v8-6","title":"v8.6","description":"New Features","permalink":"/ecalc/docs/changelog/v8.6-release"},{"id":"changelog/v8-7","title":"v8.7 (Latest)","description":"New Features","permalink":"/ecalc/docs/changelog/v8.7-release"},{"id":"changelog/v8-8","title":"v8.8 (Latest)","description":"New Features","permalink":"/ecalc/docs/changelog/v8.8-release"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/bb45b332.4990f899.js b/assets/js/bb45b332.4990f899.js new file mode 100644 index 0000000000..272ec6d0bb --- /dev/null +++ b/assets/js/bb45b332.4990f899.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4103],{5062:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var o=t(5893),i=t(1151);const a={title:"Modelling guide",sidebar_position:4,description:"eCalc modelling"},d="Modelling",c={id:"about/modelling/index",title:"Modelling guide",description:"eCalc modelling",source:"@site/docs/about/modelling/index.md",sourceDirName:"about/modelling",slug:"/about/modelling/",permalink:"/ecalc/docs/about/modelling/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/index.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Modelling guide",sidebar_position:4,description:"eCalc modelling"},sidebar:"about",previous:{title:"YAML",permalink:"/ecalc/docs/about/getting_started/yaml/"},next:{title:"Theory",permalink:"/ecalc/docs/about/modelling/theory/"}},l={},s=[];function r(e){const n={admonition:"admonition",code:"code",h1:"h1",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"modelling",children:"Modelling"}),"\n",(0,o.jsx)(n.p,{children:"This section describes how to use eCalc."}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsx)(n.p,{children:"It is good practice when writing the eCalc YAML setup file to include, as comments, the version it was written for, your name and a \u2018change log\u2019 which should include the date and changes made."})}),"\n",(0,o.jsx)(n.p,{children:"The YAML setup file:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"# ecalc version v5.3.1\n# input by: john.doe@example.com\n#\n# change log - add comments regarding relevant changes made to the file\n# date: YYYYMMDD, john doe\n# extended suction and discharge pressure range for precompressor\n# date: YYYYMMDD, jane doe\n# updated gensetA\n\nTIME_SERIES:\n - NAME: SIM1\n FILE: examplecase_inputvariables.csv\n TYPE: DEFAULT\nFACILITY_INPUTS:\n...\n"})})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(r,{...e})}):r(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>d});var o=t(7294);const i={},a=o.createContext(i);function d(e){const n=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),o.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bdf25f4c.568cf723.js b/assets/js/bdf25f4c.568cf723.js new file mode 100644 index 0000000000..f83a322338 --- /dev/null +++ b/assets/js/bdf25f4c.568cf723.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4025],{5710:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>t,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var s=r(5893),l=r(1151);const o={slug:"v7-1-release",title:"v7.1",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:4},i="eCalc v7.1",a={id:"changelog/v7-1",title:"v7.1",description:"Features",source:"@site/docs/changelog/v7-1.md",sourceDirName:"changelog",slug:"/changelog/v7-1-release",permalink:"/ecalc/docs/changelog/v7-1-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-1.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:4,frontMatter:{slug:"v7-1-release",title:"v7.1",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:4},sidebar:"changelog",previous:{title:"v7.0",permalink:"/ecalc/docs/changelog/v7-0-release"},next:{title:"v7.2",permalink:"/ecalc/docs/changelog/v7-2-release"}},t={},c=[{value:"<em>Features</em>",id:"features",level:2},{value:"CLI",id:"cli",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"ecalc-v71",children:"eCalc v7.1"}),"\n",(0,s.jsx)(n.h2,{id:"features",children:(0,s.jsx)(n.em,{children:"Features"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add new ",(0,s.jsx)(n.a,{href:"../about/references/keywords/CATEGORY",children:"CATEGORY"})," with name ",(0,s.jsx)(n.em,{children:"OFFSHORE-WIND"})," to report power usage from offshore windfarms. Should be negative load to deduct from genset, if what is supplied externally. Also added to ",(0,s.jsx)(n.code,{children:"LTP Reporting"}),". See excerpt example below:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"- NAME: wind_turbine\n CATEGORY: OFFSHORE-WIND\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: -4.4 # MW\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add new ",(0,s.jsx)(n.a,{href:"../about/references/keywords/CATEGORY",children:"CATEGORY"})," with name ",(0,s.jsx)(n.em,{children:"TURBINE-GENERATOR"})," and ",(0,s.jsx)(n.em,{children:"POWER-FROM-SHORE"})," to report power consumption separately from installation and onshore (land) for generators. If not set,\ndefaults to ",(0,s.jsx)(n.em,{children:"TURBINE-GENERATOR"}),". See excerpt example below:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"GENERATORSETS:\n - NAME: genset\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: A_genset\n ...\n ...\n - NAME: power_from_shore\n CATEGORY: POWER-FROM-SHORE\n ELECTRICITY2FUEL: onshore_power\n ...\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["where ",(0,s.jsx)(n.em,{children:"electricity2fuel"})," for onshore power in general would have power map to 0 fuel usage"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add new ",(0,s.jsx)(n.a,{href:"../about/references/keywords/CATEGORY",children:"CATEGORY"})," with name ",(0,s.jsx)(n.em,{children:"GAS-DRIVEN-COMPRESSOR"})," to report power consumption for gas(-turbine)-driven compressors for LTP. Also added to ",(0,s.jsx)(n.code,{children:"LTP Reporting"}),". See excerpt example below:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"- NAME: gascompression_2\n CATEGORY: GAS-DRIVEN-COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Allow single speed and variable speed compressor train to run with zero pressure and non-zero rate. Will raise warning, and affected time steps will not be calculated, but eCalc will run."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add a ",(0,s.jsx)(n.em,{children:"POWER"})," column data to the ",(0,s.jsx)(n.em,{children:"COMPRESSOR_TABULAR"})," csv-file for a fuel-driven ",(0,s.jsx)(n.em,{children:"SAMPLED_COMPRESSOR"})," in order to also get energy reported as power (MW). See ",(0,s.jsx)(n.code,{children:"Header requirements for the sampled compressor csv file"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add surge control margin to variable speed compressor charts. See ",(0,s.jsx)(n.code,{children:"Surge control margin for variable speed compressor chart"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Ensure non-infinite loops by setting max 50 iterations for compressor models. Will raise warning in the logger if not converged."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Bug in max rate calculation for simplified compressor train. Wrong convergence criterion leading to too early exit from iteration."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"VARIABLES can be specified in yaml and referred to in expressions."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n salt_water_injection:\n VALUE: SIM1:COL1 {*} 2\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Use this variable by referencing it as ",(0,s.jsx)(n.code,{children:"$var.salt_water_injection"})," in an\nexpression."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'EXPRESSION: "$var.salt_water_injection {/} 2"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"../about/references/keywords/VARIABLES",children:"VARIABLES"})," for more information."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"Breaking changes"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"CONVERT_TO_RATE no longer supported. If this was something you used, let us know so we can know the use case."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"cli",children:"CLI"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Experimental: Add JSON v3 output to cover needs that are no longer supported by v2 because of tight coupling with core code. Both new and old format is provided, and will be stored when using the --json argument."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>i});var s=r(7294);const l={},o=s.createContext(l);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bfdf430b.18d14d0c.js b/assets/js/bfdf430b.18d14d0c.js new file mode 100644 index 0000000000..9fff93ada6 --- /dev/null +++ b/assets/js/bfdf430b.18d14d0c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8583],{8952:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var l=s(5893),i=s(1151);const r={slug:"v8.0-release",title:"v8.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:10},a="eCalc v8.0",t={id:"changelog/v8-0",title:"v8.0",description:"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some",source:"@site/docs/changelog/v8-0.md",sourceDirName:"changelog",slug:"/changelog/v8.0-release",permalink:"/ecalc/docs/changelog/v8.0-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-0.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:10,frontMatter:{slug:"v8.0-release",title:"v8.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:10},sidebar:"changelog",previous:{title:"v7.6",permalink:"/ecalc/docs/changelog/v7-6-release"},next:{title:"v8.1",permalink:"/ecalc/docs/changelog/v8.1-release"}},o={},c=[{value:"New features",id:"new-features",level:2},{value:"Experimental features",id:"experimental-features",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"YAML",id:"yaml",level:3},{value:"CLI",id:"cli",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.h1,{id:"ecalc-v80",children:"eCalc v8.0"}),"\n",(0,l.jsx)(n.p,{children:"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some\nof the highlights:"}),"\n",(0,l.jsx)(n.h2,{id:"new-features",children:"New features"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Improved the accuracy of the compressor and pump models"}),"\n",(0,l.jsxs)(n.li,{children:["Changes to CSV output","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"reduced the number of columns"}),"\n",(0,l.jsx)(n.li,{children:"simplified headers, added units"}),"\n",(0,l.jsx)(n.li,{children:"renamed power_rate to power"}),"\n",(0,l.jsx)(n.li,{children:"the is_invalid column is now reported as is_valid"}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Changes to LTP:","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"renamed loading and storage columns"}),"\n",(0,l.jsx)(n.li,{children:"added categories for flare, fugitive emissions, name should no longer be used"}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Changes to JSON:","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"json_v1 and json_v2 has been removed."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"experimental-features",children:"Experimental features"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Add maximum power limit for compressor models"}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,l.jsx)(n.p,{children:"Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:"}),"\n",(0,l.jsx)(n.h3,{id:"yaml",children:"YAML"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsx)(n.li,{children:"All component names must be unique to avoid ambiguity in reporting"}),"\n",(0,l.jsx)(n.li,{children:"UNITS are required when setting up compressor and pump charts"}),"\n",(0,l.jsx)(n.li,{children:"Restrict allowed characters in component names and emission names"}),"\n",(0,l.jsx)(n.li,{children:"NAME no longer used for LTP reporting, use CATEGORY instead"}),"\n",(0,l.jsx)(n.li,{children:"Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"cli",children:"CLI"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Invoking eCalc\u2122 directly is no longer supported, use ",(0,l.jsx)(n.code,{children:"ecalc run"})," instead."]}),"\n",(0,l.jsx)(n.li,{children:"Log level should be specified as the first argument + log to file"}),"\n",(0,l.jsx)(n.li,{children:"Model yaml-file needs to come last"}),"\n",(0,l.jsx)(n.li,{children:"Extrapolation (correction) is now always used and cannot be disabled"}),"\n",(0,l.jsxs)(n.li,{children:["Argument for LTP export has changed from: ",(0,l.jsx)(n.code,{children:"--centuries-ltp-export"})," to ",(0,l.jsx)(n.code,{children:"--ltp-export"})]}),"\n",(0,l.jsx)(n.li,{children:"Simple results are now default for json"}),"\n"]}),"\n",(0,l.jsxs)(n.p,{children:["Check out the ",(0,l.jsx)(n.a,{href:"../about/migration_guides/v7_to_v8",children:"migration guide"})]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>a});var l=s(7294);const i={},r=l.createContext(i);function a(e){const n=l.useContext(r);return l.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),l.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c21bc46a.5730133f.js b/assets/js/c21bc46a.5730133f.js new file mode 100644 index 0000000000..b3b12fb7c2 --- /dev/null +++ b/assets/js/c21bc46a.5730133f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3443],{734:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>t,default:()=>h,frontMatter:()=>c,metadata:()=>d,toc:()=>l});var s=r(5893),o=r(1151);const c={},t="MODELS",d={id:"about/references/keywords/MODELS",title:"MODELS",description:"MODELS",source:"@site/docs/about/references/keywords/MODELS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/MODELS",permalink:"/ecalc/docs/about/references/keywords/MODELS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/MODELS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"MAXIMUM_PRESSURE_RATIO_PER_STAGE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE"},next:{title:"NAME",permalink:"/ecalc/docs/about/references/keywords/NAME"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Supported Model types",id:"supported-model-types",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"models",children:"MODELS"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["Each element is specified in a list. These are later used as input to other models, or in the\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup by referencing their\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["This part of the setup specifies models not having any input data and/or multi level models, that is models which use\nother models (from both ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," and from ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),")."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of model, for reference>\n TYPE: <model type>\n <other keywords according to TYPE>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"supported-model-types",children:"Supported Model types"}),"\n",(0,s.jsx)(n.p,{children:"The supported types are:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"FLUID"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"COMPRESSOR_CHART"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"SINGLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"TURBINE"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"COMPRESSOR_WITH_TURBINE"})}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The documentation of each of these is found on the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",children:"Compressor Modelling"})," page."]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>d,a:()=>t});var s=r(7294);const o={},c=s.createContext(o);function t(e){const n=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),s.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c3d1f0cd.ca300b65.js b/assets/js/c3d1f0cd.ca300b65.js new file mode 100644 index 0000000000..8fa2ae1468 --- /dev/null +++ b/assets/js/c3d1f0cd.ca300b65.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4733],{6204:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>r,contentTitle:()=>t,default:()=>h,frontMatter:()=>c,metadata:()=>o,toc:()=>d});var l=n(5893),i=n(1151);const c={sidebar_label:"CLI"},t="ecalc",o={id:"about/references/cli_reference",title:"ecalc",description:"Args:",source:"@site/docs/about/references/cli_reference.md",sourceDirName:"about/references",slug:"/about/references/cli_reference",permalink:"/ecalc/docs/about/references/cli_reference",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/cli_reference.md",tags:[],version:"current",frontMatter:{sidebar_label:"CLI"},sidebar:"about",previous:{title:"API reference",permalink:"/ecalc/docs/about/references/api/"},next:{title:"Migrating eCalc versions",permalink:"/ecalc/docs/about/migration_guides/"}},r={},d=[{value:"<code>ecalc run</code>",id:"ecalc-run",level:2},{value:"<code>ecalc selftest</code>",id:"ecalc-selftest",level:2},{value:"<code>ecalc show</code>",id:"ecalc-show",level:2},{value:"<code>ecalc show results</code>",id:"ecalc-show-results",level:3},{value:"<code>ecalc show yaml</code>",id:"ecalc-show-yaml",level:3}];function a(e){const s={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(s.h1,{id:"ecalc",children:(0,l.jsx)(s.code,{children:"ecalc"})}),"\n",(0,l.jsx)(s.p,{children:"Args:\nlog_level: Log level of the CLI logger, defaults to INFO\nlog_folder: Path to location of log files\nversion: Option to show libecalc version."}),"\n",(0,l.jsx)(s.p,{children:"Returns:"}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc [OPTIONS] COMMAND [ARGS]...\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--log [ERROR|WARNING|INFO|DEBUG]"}),": Set the loglevel. [default: INFO]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--log-folder PATH"}),": Store log files in a folder"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--version"}),": Show current eCalc\u2122 version."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--install-completion [bash|zsh|fish|powershell|pwsh]"}),": Install completion for the specified shell."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--show-completion [bash|zsh|fish|powershell|pwsh]"}),": Show completion for the specified shell, to copy it or customize the installation."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Commands"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"run"}),": CLI command to run a ecalc model."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"selftest"}),": Test that eCalc has been successfully..."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"show"}),": Command to show information in the model..."]}),"\n"]}),"\n",(0,l.jsx)(s.h2,{id:"ecalc-run",children:(0,l.jsx)(s.code,{children:"ecalc run"})}),"\n",(0,l.jsx)(s.p,{children:"CLI command to run a ecalc model."}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc run [OPTIONS] MODEL_FILE\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Arguments"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"MODEL_FILE"}),": The Model YAML-file specifying time series inputs, facility inputs and the relationship between energy consumers. [required]"]}),"\n"]}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-f, --output-frequency, --outputfrequency [NONE|YEAR|MONTH|DAY]"}),": Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-c, --csv"}),": Toggle output of csv data. [default: True]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--json"}),": Toggle output of json output."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-o, --output-folder, --outputfolder PATH"}),": Outputfolder. Defaults to output/ relative to the yml setup file"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-n, --name-prefix, --nameprefix TEXT"}),": Name prefix for output data. Defaults to name of setup file."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--ltp-export"}),": In addition to standard output, a specific Long Term Prognosis (LTP) file will be provided for simple export of LTP relevant data (Tabular Separated Values)."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--stp-export"}),": In addition to standard output, a specific Short Term Prognosis (STP) file will be provided for simple export of STP relevant data (Tabular Separated Values)."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--flow-diagram"}),": Output the input model formatted to be displayed in a custom flow diagram format in JSON"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--detailed-output, --detailedoutput"}),": Output detailed output. When False you will get basic results such as energy usage, power, time vector."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--date-format-option [0|1|2]"}),': Date format option. 0: "YYYY-MM-DD HH:MM',":SS",'" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM',":SS",'" (ISO8601), 2: "DD.MM.YYYY HH:MM',":SS",'". Default 0 (ISO 8601) [default: 0]']}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsx)(s.h2,{id:"ecalc-selftest",children:(0,l.jsx)(s.code,{children:"ecalc selftest"})}),"\n",(0,l.jsx)(s.p,{children:"Test that eCalc has been successfully installed"}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc selftest [OPTIONS]\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsx)(s.h2,{id:"ecalc-show",children:(0,l.jsx)(s.code,{children:"ecalc show"})}),"\n",(0,l.jsx)(s.p,{children:"Command to show information in the model or results."}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc show [OPTIONS] COMMAND [ARGS]...\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Commands"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"results"}),": Show results."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"yaml"}),": Show yaml model."]}),"\n"]}),"\n",(0,l.jsx)(s.h3,{id:"ecalc-show-results",children:(0,l.jsx)(s.code,{children:"ecalc show results"})}),"\n",(0,l.jsx)(s.p,{children:"Show results. You need to run eCalc\u2122 before this will be available."}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc show results [OPTIONS]\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-n, --name TEXT"}),": Filter the results to only show the component with this name"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--output-format [csv|json]"}),": Show the data in this format. [default: json]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--file PATH"}),": Write the data to a file with the specified name."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--output-folder PATH"}),": Output folder. Defaults to current working directory"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--detailed-output"}),": Output detailed output. When False you will get basic energy usage and emissions results"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--date-format-option [0|1|2]"}),': Date format option. 0: "YYYY-MM-DD HH:MM',":SS",'" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM',":SS",'" (ISO8601), 2: "DD.MM.YYYY HH:MM',":SS",'". Default 0 (ISO 8601) [default: 0]']}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-f, --output-frequency [NONE|YEAR|MONTH|DAY]"}),": Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsx)(s.h3,{id:"ecalc-show-yaml",children:(0,l.jsx)(s.code,{children:"ecalc show yaml"})}),"\n",(0,l.jsx)(s.p,{children:"Show yaml model. This will show the yaml after processing !include."}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc show yaml [OPTIONS] MODEL_FILE\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Arguments"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"MODEL_FILE"}),": YAML file specifying time series inputs, facility inputs and the relationship between energy consumers. [required]"]}),"\n"]}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--file PATH"}),": Write the data to a file with the specified name."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,l.jsx)(s,{...e,children:(0,l.jsx)(a,{...e})}):a(e)}},1151:(e,s,n)=>{n.d(s,{Z:()=>o,a:()=>t});var l=n(7294);const i={},c=l.createContext(i);function t(e){const s=l.useContext(c);return l.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),l.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c5daebe9.1b0a1002.js b/assets/js/c5daebe9.1b0a1002.js new file mode 100644 index 0000000000..ae9c70b068 --- /dev/null +++ b/assets/js/c5daebe9.1b0a1002.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2013],{7442:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var t=r(5893),s=r(1151);const o={},c="TURBINE_LOAD",a={id:"about/references/keywords/TURBINE_LOAD",title:"TURBINE_LOAD",description:"Description",source:"@site/docs/about/references/keywords/TURBINE_LOAD.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TURBINE_LOAD",permalink:"/ecalc/docs/about/references/keywords/TURBINE_LOAD",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TURBINE_LOAD.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TURBINE_EFFICIENCIES",permalink:"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES"},next:{title:"TURBINE_MODEL",permalink:"/ecalc/docs/about/references/keywords/TURBINE_MODEL"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"turbine_load",children:"TURBINE_LOAD"}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"TURBINE_LOAD"})," is a required to be specified under the ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TURBINE_MODEL",children:"TURBINE_MODEL"})," keyword."]}),"\n",(0,t.jsxs)(n.p,{children:["This ",(0,t.jsx)(n.strong,{children:"must"})," be specified in MW (Mega-Watts) and ",(0,t.jsx)(n.strong,{children:"must"})," have equal length to the corresponding ",(0,t.jsx)(n.code,{children:"TURBINE_EFFICIENCY"})," values."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n ...\n TURBINE_LOADS: <list of power values in mega watt>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var t=r(7294);const s={},o=t.createContext(s);function c(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c8caddd1.c64588f9.js b/assets/js/c8caddd1.c64588f9.js new file mode 100644 index 0000000000..40119dccf9 --- /dev/null +++ b/assets/js/c8caddd1.c64588f9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6721],{9166:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var n=i(5893),o=i(1151);const s={},r="Get started",l={id:"contribute/get-started",title:"Get started",description:"Welcome! We are glad that you want to contribute to our project! \ud83d\udc96",source:"@site/docs/contribute/01-get-started.md",sourceDirName:"contribute",slug:"/contribute/get-started",permalink:"/ecalc/docs/contribute/get-started",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/01-get-started.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"contribute",next:{title:"Documentation",permalink:"/ecalc/docs/category/documentation"}},a={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"How to contribute",id:"how-to-contribute",level:2},{value:"Initiate change",id:"initiate-change",level:3},{value:"Make a Pull Request",id:"make-a-pull-request",level:3},{value:"Get code review",id:"get-code-review",level:3},{value:"Guidelines",id:"guidelines",level:2},{value:"Pull Requests",id:"pull-requests",level:2},{value:"Git commit format",id:"git-commit-format",level:2},{value:"Readability",id:"readability",level:2},{value:"Code style",id:"code-style",level:3}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"get-started",children:"Get started"}),"\n",(0,n.jsx)(t.p,{children:"Welcome! We are glad that you want to contribute to our project! \ud83d\udc96"}),"\n",(0,n.jsx)(t.p,{children:"This project accepts contributions via GitHub Pull Requests."}),"\n",(0,n.jsx)(t.p,{children:"This document outlines the process to help get your contribution accepted."}),"\n",(0,n.jsx)(t.p,{children:"There are many ways to contribute:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Suggest ",(0,n.jsx)(t.a,{href:"https://github.com/equinor/ecalc/issues/new?assignees=&labels=&template=feature_request.md&title=",children:"features"})]}),"\n",(0,n.jsxs)(t.li,{children:["Suggest ",(0,n.jsx)(t.a,{href:"https://github.com/equinor/ecalc/issues/new?assignees=&labels=bug&template=code-maintainer.md&title=",children:"changes"})]}),"\n",(0,n.jsxs)(t.li,{children:["Report ",(0,n.jsx)(t.a,{href:"https://github.com/equinor/ecalc/issues/new?assignees=&labels=bug&template=bug_report.md&title=",children:"bugs"})]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["You can start by looking through the ",(0,n.jsx)(t.a,{href:"https://github.com/equinor/ecalc/issues",children:"GitHub Issues"})," filtered by labels."]}),"\n",(0,n.jsxs)(t.admonition,{type:"info",children:[(0,n.jsxs)(t.p,{children:["We follow some contributor guidelines that you will find in our ",(0,n.jsx)(t.a,{href:"#guidelines",children:"contributor guidelines"}),"."]}),(0,n.jsxs)(t.p,{children:["Don't worry if your contribution does not follow all the guidelines. We will guide you in the ",(0,n.jsx)(t.a,{href:"#get-code-review",children:"code review process"}),".\nThe threshold for contributing is low, and we appreciate any contribution great or small. \ud83d\ude4f"]})]}),"\n",(0,n.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["See ",(0,n.jsx)(t.a,{href:"/ecalc/docs/contribute/documentation-guide/documentation",children:"Documentation guide"})," for how to get started with contributions to this\ndocumentation."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"how-to-contribute",children:"How to contribute"}),"\n",(0,n.jsx)(t.p,{children:"Contribution is done in 3 simple steps:"}),"\n",(0,n.jsx)(t.h3,{id:"initiate-change",children:"Initiate change"}),"\n",(0,n.jsx)(t.p,{children:"For major changes, please open an issue first to discuss what you would like to change. For smaller changes, it is sufficient\nto explain the change without referring to an issue."}),"\n",(0,n.jsx)(t.h3,{id:"make-a-pull-request",children:"Make a Pull Request"}),"\n",(0,n.jsx)(t.p,{children:"To contribute to the project, you will have to make the change and create a Pull Request on GitHub. How you do this depends on your role."}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["Equinor internal contributors, you may open a ",(0,n.jsx)(t.a,{href:"guides/git#pull-requests",children:"Pull Request directly"}),","]}),"\n",(0,n.jsxs)(t.li,{children:["Independent contributors, you will ",(0,n.jsx)(t.a,{href:"guides/git#fork-the-repository",children:"Fork the repository"}),"."]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"get-code-review",children:"Get code review"}),"\n",(0,n.jsx)(t.p,{children:"Once a Pull Request has been made, we will give you feedback and maybe suggest changes."}),"\n",(0,n.jsxs)(t.p,{children:["The core team looks at pull requests on a regular basis, we review the code and guide you if needed.\nHere you will find more information about the\n",(0,n.jsx)(t.a,{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews",children:"GitHub Code Review Process"})]}),"\n",(0,n.jsx)(t.h2,{id:"guidelines",children:"Guidelines"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"For major changes, please open an issue first to discuss what you would like to change"}),"\n",(0,n.jsx)(t.li,{children:"Work on your own fork of the main repo"}),"\n",(0,n.jsx)(t.li,{children:"Use a separate branch for each issue you\u2019re working on"}),"\n",(0,n.jsxs)(t.li,{children:["Use conventional commit. See our ",(0,n.jsx)(t.a,{href:"#git-commit-format",children:"Git commit format"})," for details,\nand our ",(0,n.jsx)(t.a,{href:"/ecalc/docs/contribute/guides/git",children:"Git guide"})," for our full guide"]}),"\n",(0,n.jsxs)(t.li,{children:["Please include ",(0,n.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Unit_testing",children:"unit tests"})," with all your code changes"]}),"\n",(0,n.jsxs)(t.li,{children:["We follow ",(0,n.jsx)(t.a,{href:"https://trunkbaseddevelopment.com/",children:"Trunk Based Development"})," style of working with short-lived feature\nbranches."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"pull-requests",children:"Pull Requests"}),"\n",(0,n.jsxs)(t.p,{children:["Please try to make your ",(0,n.jsx)(t.a,{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests",children:"Pull Requests"})," easy to review for us."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Make small pull requests. The smaller, the faster to review and the more likely it will be merged soon."}),"\n",(0,n.jsx)(t.li,{children:"Don't make changes unrelated to the goals of your PR."}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["While you're writing up the pull request, you can add ",(0,n.jsx)(t.code,{children:"closes #<issue number>"})," in the message body where issue number\nis the issue you're fixing. Therefore, an example would be ",(0,n.jsx)(t.code,{children:"closes #42"})," would close issue #42."]}),"\n",(0,n.jsx)(t.h2,{id:"git-commit-format",children:"Git commit format"}),"\n",(0,n.jsxs)(t.p,{children:["Git commits are required to follow ",(0,n.jsx)(t.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"conventional commits"}),". Please see\nour ",(0,n.jsx)(t.a,{href:"/ecalc/docs/contribute/guides/conventional-commits",children:"Conventional Commit Guide"})," for examples."]}),"\n",(0,n.jsx)(t.h2,{id:"readability",children:"Readability"}),"\n",(0,n.jsxs)(t.p,{children:["We use the ",(0,n.jsx)(t.a,{href:"https://pre-commit.com/",children:"pre-commit hooks"})," in order to ensure uniform formatting and to exclude potential code issues."]}),"\n",(0,n.jsx)(t.p,{children:"We strive for readable code. A few good tips are:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Self-documenting_code",children:"Self-documenting code"})," with self-explaining variable names"]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Composition_over_inheritance",children:"Composition over inheritance"})}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Functional_programming",children:"Functional code"})," over Object-Oriented Code"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.a,{href:"https://ruggedsoftware.org/",children:"Rugged code"})," to write more robust code"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Domain-driven_design",children:"Domain Driven Design"})," to to match the code with the domain we are working on"]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"code-style",children:"Code style"}),"\n",(0,n.jsx)(t.p,{children:"Except for the pre-commits hooks mentioned above, we also strive to follow the following code style:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Use capital letters for constants i.e. SECONDS_PER_HOUR"}),"\n",(0,n.jsx)(t.li,{children:"Try to split methods/modules/classes into smaller bits of code"}),"\n",(0,n.jsx)(t.li,{children:"Remove, do not comment out, unused code"}),"\n",(0,n.jsx)(t.li,{children:"Use types and type hinting"}),"\n",(0,n.jsx)(t.li,{children:"We comment the code when it is not self-explanatory"}),"\n",(0,n.jsxs)(t.li,{children:["Be consistent with existing code style - try to make it look like the code is written by ",(0,n.jsx)(t.strong,{children:"one"})," developer"]}),"\n",(0,n.jsxs)(t.li,{children:["For Python, we follow ",(0,n.jsx)(t.a,{href:"https://peps.python.org/pep-0008/",children:"PEP 8 \u2013 Style Guide for Python Code"})," and ",(0,n.jsx)(t.a,{href:"https://peps.python.org/pep-0020/",children:"PEP 20 - The Zen of Python"}),":"]}),"\n"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:"Beautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.\nComplex is better than complicated.\nFlat is better than nested.\nSparse is better than dense.\nReadability counts.\nSpecial cases aren't special enough to break the rules.\nAlthough practicality beats purity.\nErrors should never pass silently.\nUnless explicitly silenced.\nIn the face of ambiguity, refuse the temptation to guess.\nThere should be one-- and preferably only one --obvious way to do it.\nAlthough that way may not be obvious at first unless you're Dutch.\nNow is better than never.\nAlthough never is often better than *right* now.\nIf the implementation is hard to explain, it's a bad idea.\nIf the implementation is easy to explain, it may be a good idea.\nNamespaces are one honking great idea -- let's do more of those!\n"})}),"\n",(0,n.jsx)(t.p,{children:"Please reach out to us if you have any questions. \ud83d\udc4b"}),"\n",(0,n.jsx)(t.p,{children:"Thank you for your contribution! \ud83c\udf89"})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,t,i)=>{i.d(t,{Z:()=>l,a:()=>r});var n=i(7294);const o={},s=n.createContext(o);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c90bf1e8.e9bf59db.js b/assets/js/c90bf1e8.e9bf59db.js new file mode 100644 index 0000000000..31aa67c02c --- /dev/null +++ b/assets/js/c90bf1e8.e9bf59db.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8186],{6378:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>i});var t=s(5893),r=s(1151);const o={slug:"v7-3-release",title:"v7.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:6},l="eCalc v7.3",c={id:"changelog/v7-3",title:"v7.3",description:"Features",source:"@site/docs/changelog/v7-3.md",sourceDirName:"changelog",slug:"/changelog/v7-3-release",permalink:"/ecalc/docs/changelog/v7-3-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-3.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:6,frontMatter:{slug:"v7-3-release",title:"v7.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:6},sidebar:"changelog",previous:{title:"v7.2",permalink:"/ecalc/docs/changelog/v7-2-release"},next:{title:"v7.4",permalink:"/ecalc/docs/changelog/v7-4-release"}},a={},i=[{value:"<em>Features</em>",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2}];function d(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"ecalc-v73",children:"eCalc v7.3"}),"\n",(0,t.jsx)(n.h2,{id:"features",children:(0,t.jsx)(n.em,{children:"Features"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["BREAKING CHANGE!:\n",(0,t.jsx)(n.code,{children:"Fixed speed pressure control"})," options changed. One option is added, where the ASV is modelled as\nbeing common for the entire train, and the names of the options with individual ASVs have changed.\nThe available options for pressure control in a single speed compressor train are now:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"UPSTREAM_CHOKE"}),"\n",(0,t.jsx)(n.li,{children:"DOWNSTREAM_CHOKE"}),"\n",(0,t.jsx)(n.li,{children:"COMMON_ASV (NEW)"}),"\n",(0,t.jsx)(n.li,{children:"INDIVIDUAL_ASV_RATE (changed from ASV_BALANCED_MARGIN)"}),"\n",(0,t.jsx)(n.li,{children:"INDIVIDUAL_ASV_PRESSURE (changed from ASV_WITH_BALANCED_PRESSURE_RATIOS)"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"fixes",children:(0,t.jsx)(n.em,{children:"Fixes"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Power rate reporting now works for consumer systems for supported compressor models for LTP reporting."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>l});var t=s(7294);const r={},o=t.createContext(r);function l(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c93dcb87.cb01a7cb.js b/assets/js/c93dcb87.cb01a7cb.js new file mode 100644 index 0000000000..6cf29fe539 --- /dev/null +++ b/assets/js/c93dcb87.cb01a7cb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4168],{9219:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>E,frontMatter:()=>c,metadata:()=>d,toc:()=>l});var t=n(5893),s=n(1151);const c={},o="CONSUMERS",d={id:"about/references/keywords/CONSUMERS",title:"CONSUMERS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CONSUMERS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONSUMERS",permalink:"/ecalc/docs/about/references/keywords/CONSUMERS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONSUMERS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONSTANT",permalink:"/ecalc/docs/about/references/keywords/CONSTANT"},next:{title:"CONSUMPTION_RATE_TYPE",permalink:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE"}},a={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function i(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"consumers",children:"CONSUMERS"}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"})]}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Required"}),(0,t.jsx)(r.th,{children:"Child of"}),(0,t.jsx)(r.th,{children:"Children/Options"})]})}),(0,t.jsx)(r.tbody,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Yes"}),(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"GENERATORSETS"})}),(0,t.jsxs)(r.td,{children:[(0,t.jsx)(r.code,{children:"CATEGORY"})," ",(0,t.jsx)("br",{})," ",(0,t.jsx)(r.code,{children:"NAME"})," ",(0,t.jsx)("br",{})," ",(0,t.jsx)(r.code,{children:"ENERGY_USAGE_MODEL"})]})]})})]}),"\n",(0,t.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(r.p,{children:["Consumers getting electrical power from the generator set. The attributes ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),",\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," and ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\nare all required"]}),"\n",(0,t.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"CONSUMERS:\n - NAME: <consumer name>\n CATEGORY: <category>\n ENERGY_USAGE_MODEL: <energy usage model>\n"})}),"\n",(0,t.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"CONSUMERS:\n - NAME: SomeElectricalConsumer\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n - NAME: SomeOtherElectricalConsumer\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n ...\n - NAME: ElectricalConsumerN\n CATEGORY: MISCELLANEOUS\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n"})})]})}function E(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>o});var t=n(7294);const s={},c=t.createContext(s);function o(e){const r=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c9b29382.2e1f0cd7.js b/assets/js/c9b29382.2e1f0cd7.js new file mode 100644 index 0000000000..d158726f50 --- /dev/null +++ b/assets/js/c9b29382.2e1f0cd7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8285],{9222:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>E,frontMatter:()=>t,metadata:()=>d,toc:()=>S});var s=r(5893),o=r(1151);const t={},c="COMPRESSORS",d={id:"about/references/keywords/COMPRESSOR_SYSTEM",title:"COMPRESSORS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/COMPRESSOR_SYSTEM.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/COMPRESSOR_SYSTEM",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/COMPRESSOR_SYSTEM.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"COMPRESSOR_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL"},next:{title:"COMPRESSOR_TRAIN_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL"}},a={},S=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example 1",id:"example-1",level:2},{value:"Example 2 (Detailed)",id:"example-2-detailed",level:2}];function i(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"compressors",children:"COMPRESSORS"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",children:"COMPRESSOR_SYSTEM"})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Required"}),(0,s.jsx)(n.th,{children:"Child of"}),(0,s.jsx)(n.th,{children:"Children/Options"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})}),(0,s.jsx)(n.td,{children:"None"})]})})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(n.p,{children:"Used to define a list of compressors in a compressor system model ("}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," of type ",(0,s.jsx)(n.code,{children:"COMPRESSOR_SYSTEM"}),").\nEach compressor is defined with a name and a reference to a compressor energy function defined in either\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," or ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: <name of compressor>\n COMPRESSOR_MODEL: <reference to compressor model in facility inputs>\n TOTAL_SYSTEM_RATE: <optional total system rate [Sm3/day]>\n OPERATIONAL_SETTINGS: <operational settings>\n"})}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",children:"OPERATIONAL_SETTINGS"})," for details."]}),"\n",(0,s.jsx)(n.h2,{id:"example-1",children:"Example 1"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example-2-detailed",children:"Example 2 (Detailed)"}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"When adding a \u201cDATE\u201d the next line is indented."})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"- NAME: gassys27\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n 2020-04-01:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: gassys27a\n COMPRESSOR_MODEL: gas3da\n - NAME: gassys27b\n COMPRESSOR_MODEL: gas3db\n TOTAL_SYSTEM_RATE: SIM8;GAS_PROD # [Sm3/day]\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0]\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURE: 155\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURE: 155\n"})})]})}function E(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>d,a:()=>c});var s=r(7294);const o={},t=s.createContext(o);function c(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cb266b33.5e5e38c6.js b/assets/js/cb266b33.5e5e38c6.js new file mode 100644 index 0000000000..762783ee1b --- /dev/null +++ b/assets/js/cb266b33.5e5e38c6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2706],{5982:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>t,metadata:()=>a,toc:()=>i});var o=r(5893),s=r(1151);const t={},c="LOAD",a={id:"about/references/keywords/LOAD",title:"LOAD",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/LOAD.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/LOAD",permalink:"/ecalc/docs/about/references/keywords/LOAD",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/LOAD.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INTERSTAGE_CONTROL_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"},next:{title:"LOWER_HEATING_VALUE",permalink:"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE"}},d={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"load",children:"LOAD"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/LOAD",children:"LOAD"})]}),"\n",(0,o.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,o.jsxs)(n.p,{children:["Used for direct load ",(0,o.jsx)(n.code,{children:"energy usage models<ENERGY_USAGE_MODEL>"})," to define electrical power load directly\nwith an ",(0,o.jsx)(n.code,{children:"expression <Expressions>"})]}),"\n",(0,o.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: <load expression>\n CONSUMPTION_RATE_TYPE: <consumption rate type>\n CONDITION: <condition expression>\n POWERLOSSFACTOR: <power loss factor (number)>\n"})}),"\n",(0,o.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 10\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var o=r(7294);const s={},t=o.createContext(s);function c(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cbe196b2.673dbdc3.js b/assets/js/cbe196b2.673dbdc3.js new file mode 100644 index 0000000000..7491997060 --- /dev/null +++ b/assets/js/cbe196b2.673dbdc3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4734],{4918:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var n=r(5893),o=r(1151);const s={},c="FILE",a={id:"about/references/keywords/FILE",title:"FILE",description:"... /",source:"@site/docs/about/references/keywords/FILE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FILE",permalink:"/ecalc/docs/about/references/keywords/FILE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FILE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FACTOR",permalink:"/ecalc/docs/about/references/keywords/FACTOR"},next:{title:"FLUID_DENSITY",permalink:"/ecalc/docs/about/references/keywords/FLUID_DENSITY"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"file",children:"FILE"}),"\n",(0,n.jsxs)(t.p,{children:["... /\n",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/FILE",children:"FILE"})]}),"\n",(0,n.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,n.jsx)(t.p,{children:"Specifies the path (relative or absolute) to the input file."}),"\n",(0,n.jsxs)(t.p,{children:["The path should be a reference to a ",(0,n.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Comma-separated_values",children:"CSV"})," file."]}),"\n",(0,n.jsx)(t.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-yaml",children:"FILE: </path/to/file.csv>\n"})}),"\n",(0,n.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,n.jsxs)(t.p,{children:["See the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," ",(0,n.jsx)(t.code,{children:"time_series_format"}),"."]})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},1151:(e,t,r)=>{r.d(t,{Z:()=>a,a:()=>c});var n=r(7294);const o={},s=n.createContext(o);function c(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cc88a418.4afe2011.js b/assets/js/cc88a418.4afe2011.js new file mode 100644 index 0000000000..0755989e05 --- /dev/null +++ b/assets/js/cc88a418.4afe2011.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2e3],{4381:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>c,default:()=>E,frontMatter:()=>t,metadata:()=>d,toc:()=>i});var s=n(5893),o=n(1151);const t={},c="COMPRESSOR_TRAIN_MODEL",d={id:"about/references/keywords/COMPRESSOR_TRAIN_MODEL",title:"COMPRESSOR_TRAIN_MODEL",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/COMPRESSOR_TRAIN_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"COMPRESSORS",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM"},next:{title:"CONDITION",permalink:"/ecalc/docs/about/references/keywords/CONDITION"}},a={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"compressor_train_model",children:"COMPRESSOR_TRAIN_MODEL"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",children:"COMPRESSOR_TRAIN_MODEL"})]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Required"}),(0,s.jsx)(r.th,{children:"Child of"}),(0,s.jsx)(r.th,{children:"Children/Options"})]})}),(0,s.jsx)(r.tbody,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Yes"}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"ENERGY_USAGE_MODEL"})}),(0,s.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["Reference to an compressor train model defined in ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," or\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," used for ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\nTYPE ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n COMPRESSOR_TRAIN_MODEL: <reference to compressor train model in facility inputs or models of compressor type>\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: advanced_compressor_train\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS:\n -\n -\n\n...\n\n ENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n COMPRESSOR_TRAIN_MODEL: advanced_compressor_train\n"})})]})}function E(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>c});var s=n(7294);const o={},t=s.createContext(o);function c(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ccf7588a.0cd7ba56.js b/assets/js/ccf7588a.0cd7ba56.js new file mode 100644 index 0000000000..dc89c433e7 --- /dev/null +++ b/assets/js/ccf7588a.0cd7ba56.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8967],{4589:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>r,default:()=>d,frontMatter:()=>l,metadata:()=>t,toc:()=>c});var n=a(5893),i=a(1151);const l={},r="FACTOR",t={id:"about/references/keywords/FACTOR",title:"FACTOR",description:"[...] /",source:"@site/docs/about/references/keywords/FACTOR.mdx",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FACTOR",permalink:"/ecalc/docs/about/references/keywords/FACTOR",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FACTOR.mdx",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FACILITY_INPUTS",permalink:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},next:{title:"FILE",permalink:"/ecalc/docs/about/references/keywords/FILE"}},m={},c=[{value:"Description",id:"description",level:2},{value:"Use in ADJUSTMENT",id:"use-in-adjustment",level:3},{value:"Use in EMISSIONS",id:"use-in-emissions",level:3},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Use in ADJUSTMENT",id:"use-in-adjustment-1",level:3},{value:"Use in EMISSIONS",id:"use-in-emissions-1",level:3}];function h(s){const e={a:"a",admonition:"admonition",annotation:"annotation",code:"code",h1:"h1",h2:"h2",h3:"h3",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",p:"p",pre:"pre",semantics:"semantics",span:"span",...(0,i.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"factor",children:"FACTOR"}),"\n",(0,n.jsxs)(e.p,{children:["[...] /\n",(0,n.jsx)(e.a,{href:"FACTOR",children:"FACTOR"})]}),"\n",(0,n.jsx)(e.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(e.p,{children:["The keyword ",(0,n.jsx)(e.a,{href:"FACTOR",children:"FACTOR"})," can be used to add a multiplier. The\n",(0,n.jsx)(e.a,{href:"FACTOR",children:"FACTOR"})," keyword can be used in various places in the eCalc configuration file.\nA factor can either be a number, or an ",(0,n.jsx)(e.code,{children:"expression <Expressions>"}),"."]}),"\n",(0,n.jsx)(e.admonition,{title:"Warning",type:"warning",children:(0,n.jsxs)(e.p,{children:["The ",(0,n.jsx)(e.a,{href:"FACTOR",children:"FACTOR"})," keyword will have slightly different behavior depending on in which keyword\nit is used. Carefully read the documentation below!"]})}),"\n",(0,n.jsxs)(e.h3,{id:"use-in-adjustment",children:["Use in ",(0,n.jsx)(e.a,{href:"ADJUSTMENT",children:"ADJUSTMENT"})]}),"\n",(0,n.jsx)(e.p,{children:"Adjustment of input data with a factor."}),"\n",(0,n.jsxs)(e.h3,{id:"use-in-emissions",children:["Use in ",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"})]}),"\n",(0,n.jsxs)(e.p,{children:["A single value with unit kg/Sm",(0,n.jsx)("sup",{children:"3"})," defines the CO",(0,n.jsx)("sub",{children:"2"})," factor for the fuel gas used on the\ninstallation. That is, how many kilograms of CO",(0,n.jsx)("sub",{children:"2"})," are emitted"]}),"\n",(0,n.jsx)(e.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"FACTOR: <VALUE>\n"})}),"\n",(0,n.jsx)(e.h2,{id:"example",children:"Example"}),"\n",(0,n.jsxs)(e.h3,{id:"use-in-adjustment-1",children:["Use in ",(0,n.jsx)(e.a,{href:"ADJUSTMENT",children:"ADJUSTMENT"})]}),"\n",(0,n.jsx)(e.p,{children:"Say you have input that that is of by 3% percentage.\nYou could fix this like:"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"NAME: some_facility_input\nFILE: filename.csv\nTYPE: FACILITY_INPUT_TYPE\nADJUSTMENT:\n FACTOR: 1.03\n"})}),"\n",(0,n.jsxs)(e.p,{children:["The resulting energy consumption ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),", i.e. fuel or power, will then be"]}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mn,{children:"1.03"}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted} = 1.03 \\times E_\\mathrm{original}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1.03"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{original}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is the energy consumption before the adjustment."]}),"\n",(0,n.jsxs)(e.h3,{id:"use-in-emissions-1",children:["Use in ",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"})]}),"\n",(0,n.jsxs)(e.p,{children:["Say your fuel emits 2.5 kg CO",(0,n.jsx)("sub",{children:"2"})," per Sm",(0,n.jsx)("sup",{children:"3"})," of burned fuel, you can model this like:"]}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"FUEL_TYPES:\n - NAME: my_fuel\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.5 # [kg/Sm3]\n"})})]})}function d(s={}){const{wrapper:e}={...(0,i.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},1151:(s,e,a)=>{a.d(e,{Z:()=>t,a:()=>r});var n=a(7294);const i={},l=n.createContext(i);function r(s){const e=n.useContext(l);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function t(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:r(s.components),n.createElement(l.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/cda37ba5.0a5bc595.js b/assets/js/cda37ba5.0a5bc595.js new file mode 100644 index 0000000000..0eb754d35e --- /dev/null +++ b/assets/js/cda37ba5.0a5bc595.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4189],{8572:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>r,toc:()=>i});var t=a(5893),c=a(1151);const s={slug:"v7-6-release",title:"v7.6",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:9},l="eCalc v7.6",r={id:"changelog/v7-6",title:"v7.6",description:"Breaking changes",source:"@site/docs/changelog/v7-6.md",sourceDirName:"changelog",slug:"/changelog/v7-6-release",permalink:"/ecalc/docs/changelog/v7-6-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-6.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:9,frontMatter:{slug:"v7-6-release",title:"v7.6",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:9},sidebar:"changelog",previous:{title:"v7.5",permalink:"/ecalc/docs/changelog/v7-5-release"},next:{title:"v8.0",permalink:"/ecalc/docs/changelog/v8.0-release"}},o={},i=[{value:"Breaking changes",id:"breaking-changes",level:2}];function u(e){const n={a:"a",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,c.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"ecalc-v76",children:"eCalc v7.6"}),"\n",(0,t.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["UNITS are now required for PUMP_CHART and COMPRESSOR_CHART, see ",(0,t.jsx)(n.a,{href:"../about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"pump charts"}),"\nand ",(0,t.jsx)(n.a,{href:"../about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"compressor charts"})]}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},1151:(e,n,a)=>{a.d(n,{Z:()=>r,a:()=>l});var t=a(7294);const c={},s=t.createContext(c);function l(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:l(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d17664a7.ec64c1f0.js b/assets/js/d17664a7.ec64c1f0.js new file mode 100644 index 0000000000..ea4374ffee --- /dev/null +++ b/assets/js/d17664a7.ec64c1f0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6922],{4488:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>E,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var s=r(5893),t=r(1151);const o={},c="STREAMS",a={id:"about/references/keywords/STREAMS",title:"STREAMS",description:"MODELS /",source:"@site/docs/about/references/keywords/STREAMS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/STREAMS",permalink:"/ecalc/docs/about/references/keywords/STREAMS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/STREAMS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"STREAM",permalink:"/ecalc/docs/about/references/keywords/STREAM"},next:{title:"SUCTION_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"streams",children:"STREAMS"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STREAMS",children:"STREAMS"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["This keyword can ",(0,s.jsx)(n.strong,{children:"only"})," be utilised for a ",(0,s.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})," model type."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"STREAMS"})," is a list of all in- and out-going streams for the compressor train."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The same equation of state (EOS) must be used for each INGOING stream fluid models"}),"\n",(0,s.jsxs)(n.li,{children:["OUTGOING fluid models ",(0,s.jsx)(n.strong,{children:"cannot"})," be specified."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS: \n - NAME: <name of stream 1>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - NAME: <name of stream 2>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - ...\n - NAME: <name of stream N>\n TYPE: OUTGOING \n ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS: \n - NAME: 1_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_1\n - NAME: 3_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_2\n - NAME: 2_stage_outlet\n TYPE: OUTGOING\n ...\n"})})]})}function E(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var s=r(7294);const t={},o=s.createContext(t);function c(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d185ab52.0265950c.js b/assets/js/d185ab52.0265950c.js new file mode 100644 index 0000000000..265b5e3239 --- /dev/null +++ b/assets/js/d185ab52.0265950c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9524],{7407:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>E,contentTitle:()=>o,default:()=>T,frontMatter:()=>c,metadata:()=>a,toc:()=>d});var t=r(5893),s=r(1151);const c={},o="TOTAL_SYSTEM_RATE",a={id:"about/references/keywords/TOTAL_SYSTEM_RATE",title:"TOTAL_SYSTEM_RATE",description:"INSTALLATIONS / [...] /",source:"@site/docs/about/references/keywords/TOTAL_SYSTEM_RATE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TOTAL_SYSTEM_RATE",permalink:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TOTAL_SYSTEM_RATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TIME_SERIES",permalink:"/ecalc/docs/about/references/keywords/TIME_SERIES"},next:{title:"TURBINE_EFFICIENCIES",permalink:"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES"}},E={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function i(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"total_system_rate",children:"TOTAL_SYSTEM_RATE"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," / [...] /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE",children:"TOTAL_SYSTEM_RATE"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["Used to define the total system rate [Sm",(0,t.jsx)("sup",{children:"3"}),"/day] for ",(0,t.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})," of type ",(0,t.jsx)(n.code,{children:"COMPRESSOR_SYSTEM"}),"\nand ",(0,t.jsx)(n.code,{children:"PUMP_SYSTEM"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n TOTAL_SYSTEM_RATE: <expression defining the total rate in the system [Sm3/day]>\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT\n"})})]})}function T(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>o});var t=r(7294);const s={},c=t.createContext(s);function o(e){const n=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d19423a2.5039dc89.js b/assets/js/d19423a2.5039dc89.js new file mode 100644 index 0000000000..3b747144d3 --- /dev/null +++ b/assets/js/d19423a2.5039dc89.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1686],{3447:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>l,frontMatter:()=>s,metadata:()=>a,toc:()=>u});var o=n(5893),i=n(1151);const s={title:"Overview"},r="Get started",a={id:"contribute/documentation-guide/documentation",title:"Overview",description:"This site was generated from the contents of your documentation folder using Docusaurus.",source:"@site/docs/contribute/documentation-guide/01-documentation.md",sourceDirName:"contribute/documentation-guide",slug:"/contribute/documentation-guide/documentation",permalink:"/ecalc/docs/contribute/documentation-guide/documentation",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/documentation-guide/01-documentation.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Overview"},sidebar:"contribute",previous:{title:"Documentation",permalink:"/ecalc/docs/category/documentation"},next:{title:"Markdown",permalink:"/ecalc/docs/contribute/documentation-guide/markdown"}},c={},u=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Contributing",id:"contributing",level:2},{value:"How it works",id:"how-it-works",level:2},{value:"Special features",id:"special-features",level:2}];function d(e){const t={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"get-started",children:"Get started"}),"\n",(0,o.jsxs)(t.p,{children:["This site was generated from the contents of your ",(0,o.jsx)(t.code,{children:"documentation"})," folder using ",(0,o.jsx)(t.a,{href:"https://docusaurus.io/",children:"Docusaurus"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["You will find the full documentation of Docusaurus here: ",(0,o.jsx)(t.a,{href:"https://docusaurus.io/docs/next",children:"Docusaurus Docs"}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,o.jsxs)(t.p,{children:["You can contribute as long as you have access to the ",(0,o.jsx)(t.a,{href:"https://github.com/equinor/ecalc",children:"ecalc - GitHub Repository"}),".\nIt is entirely possible to make changes by using your web browser alone. However, if you want to get live feedback on your\nchanges, we recommend that you run the documentation locally with the following prerequisites:"]}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.em,{children:"Linux or macOS"}),": For ",(0,o.jsx)(t.a,{href:"https://docs.microsoft.com/en-us/windows/wsl/install-win10",children:"Windows you can run Ubuntu or similar in WSL 2"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.em,{children:"Git"}),": ",(0,o.jsx)(t.a,{href:"/ecalc/docs/contribute/guides/git#setting-up-git",children:"Set up Git"})]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.em,{children:"Node"}),": Download from nodejs.org or use ",(0,o.jsx)(t.a,{href:"https://github.com/nvm-sh/nvm",children:"nvm"})]}),"\n"]}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"Since not all managed computers have the ability to install Node, you can use an IDE such as PyCharm, IntelliJ, VSCode, or similar, to preview Markdown code.\nThis has some limitations such as missing navigation bar, and it does not preview Docusaurus specific syntax such as the Admonitions used here."})}),"\n",(0,o.jsx)(t.h2,{id:"contributing",children:"Contributing"}),"\n",(0,o.jsxs)(t.p,{children:["As a contributor you will have to use Git. Please find the ",(0,o.jsx)(t.a,{href:"/ecalc/docs/contribute/guides/git",children:"Git Documentation"})," for more details about git."]}),"\n",(0,o.jsx)(t.h2,{id:"how-it-works",children:"How it works"}),"\n",(0,o.jsx)(t.p,{children:"From Docusaurus own documentation:"}),"\n",(0,o.jsxs)(t.blockquote,{children:["\n",(0,o.jsx)(t.p,{children:"Docusaurus is a static-site generator. It builds a single-page application with fast client-side navigation, leveraging the full power of React to make your site interactive. It provides out-of-the-box documentation features but can be used to create any kind of site (personal website, product, blog, marketing landing pages, etc)."}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["While Docusaurus is rich on features, we use it mostly to host markdown pages. The main bulk of the documentation is located in ",(0,o.jsx)(t.code,{children:"documentation/docs"}),". This is where you as a collaborator are encouraged to make changes."]}),"\n",(0,o.jsxs)(t.p,{children:["For a quick intro to Markdown, see our ",(0,o.jsx)(t.a,{href:"/ecalc/docs/contribute/documentation-guide/markdown",children:"Markdown section"}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"special-features",children:"Special features"}),"\n",(0,o.jsx)(t.p,{children:"Docusuaurs has some special features that we are using actively. Please find the links listed here:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://docusaurus.io/docs/next/markdown-features/math-equations",children:"Math Equations using LaTeX"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://docusaurus.io/docs/next/markdown-features/code-blocks",children:"Code blocks"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://docusaurus.io/docs/next/markdown-features/admonitions",children:"Admonitions"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://docusaurus.io/docs/next/markdown-features/diagrams",children:"Diagrams using Mermaid"})}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.a,{href:"https://docusaurus.io/docs/next/markdown-features/head-metadata",children:"Head metadata"})," to set titles, menu order, etc."]}),"\n"]})]})}function l(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>r});var o=n(7294);const i={},s=o.createContext(i);function r(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d2b7592b.95325593.js b/assets/js/d2b7592b.95325593.js new file mode 100644 index 0000000000..5e80fc4ee1 --- /dev/null +++ b/assets/js/d2b7592b.95325593.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3305],{253:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>c,metadata:()=>t,toc:()=>a});var r=n(5893),o=n(1151);const c={},i="OPERATIONAL_SETTINGS",t={id:"about/references/keywords/OPERATIONAL_SETTINGS",title:"OPERATIONAL_SETTINGS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/OPERATIONAL_SETTINGS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/OPERATIONAL_SETTINGS",permalink:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/OPERATIONAL_SETTINGS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"NAME",permalink:"/ecalc/docs/about/references/keywords/NAME"},next:{title:"POWERLOSSFACTOR",permalink:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR"}},d={},a=[{value:"Description",id:"description",level:2},{value:"RATES",id:"rates",level:3},{value:"RATE_FRACTIONS",id:"rate_fractions",level:3},{value:"SUCTION_PRESSURES",id:"suction_pressures",level:3},{value:"DISCHARGE_PRESSURES",id:"discharge_pressures",level:3},{value:"FLUID_DENSITIES",id:"fluid_densities",level:3},{value:"CROSSOVER",id:"crossover",level:3},{value:"Example 1:",id:"example-1",level:3},{value:"Example 2:",id:"example-2",level:3},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function S(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"operational_settings",children:"OPERATIONAL_SETTINGS"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",children:"OPERATIONAL_SETTINGS"})]}),"\n",(0,r.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(s.p,{children:["Used to define the operational settings in an ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\nof type ",(0,r.jsx)(s.code,{children:"PUMP_SYSTEM"})," or ",(0,r.jsx)(s.code,{children:"COMPRESSOR_SYSTEM"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["The rate [Sm",(0,r.jsx)("sup",{children:"3"}),"/day] through each consumer in the system may be specified in two different ways, either directly using\n",(0,r.jsx)(s.code,{children:"RATES"}),", or by defining the ",(0,r.jsx)(s.code,{children:"rate fraction<RATE_FRACTIONS>"})," for each consumer which is then multiplied with the\n",(0,r.jsx)(s.code,{children:"total system rate<TOTAL_SYSTEM_RATE>"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["The suction pressure may either be specified with ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",children:"SUCTION_PRESSURE"}),"\nwhich will then be the common suction pressure for all consumers in the system. Alternatively,\n",(0,r.jsx)(s.code,{children:"SUCTION_PRESSURES"})," may be used to specify one suction pressure expression per consumer."]}),"\n",(0,r.jsxs)(s.p,{children:["The discharge pressure may either be specified with ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",children:"DISCHARGE_PRESSURE"}),"\nwhich will then be the common discharge pressure for all consumers in the system. Alternatively,\n",(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURES"})," may be used to specify one discharge pressure expression per consumer."]}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"CROSSOVER"})," may be used to specify if there are any available cross-overs between the consumers in this operational\nsetting."]}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"FLUID_DENSITIES"})," may be used for pump systems to specify one fluid density expression per pump."]}),"\n",(0,r.jsxs)(s.p,{children:["For all keywords where there is one expression per consumer, ",(0,r.jsx)(s.code,{children:"RATES"}),", ",(0,r.jsx)(s.code,{children:"RATE_FRACTIONS"}),", ",(0,r.jsx)(s.code,{children:"SUCTION_PRESSURES"}),",\n",(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURES"})," and ",(0,r.jsx)(s.code,{children:"FLUID_DENSITIES"}),", the expressions must be entered in a\nlist where the number of elements is equal to the number of ",(0,r.jsx)(s.code,{children:"compressors<COMPRESSORS>"}),"/",(0,r.jsx)(s.code,{children:"pumps<PUMPS>"})]}),"\n",(0,r.jsx)(s.h3,{id:"rates",children:"RATES"}),"\n",(0,r.jsxs)(s.p,{children:["A list with one expression per consumer specifying the rate [Sm",(0,r.jsx)("sup",{children:"3"}),"/day] for each consumer. Use either ",(0,r.jsx)(s.code,{children:"RATES"})," or ",(0,r.jsx)(s.code,{children:"RATE_FRACTIONS"}),",\nnot both in one operational setting."]}),"\n",(0,r.jsx)(s.h3,{id:"rate_fractions",children:"RATE_FRACTIONS"}),"\n",(0,r.jsxs)(s.p,{children:["A list with one expression per consumer specifying the rate fraction for each consumer. If this is used,\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE",children:"TOTAL_SYSTEM_RATE"})," for the ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\nis also required. Use either ",(0,r.jsx)(s.code,{children:"RATES"})," or ",(0,r.jsx)(s.code,{children:"RATE_FRACTIONS"}),", not both in one operational setting."]}),"\n",(0,r.jsx)(s.h3,{id:"suction_pressures",children:"SUCTION_PRESSURES"}),"\n",(0,r.jsxs)(s.p,{children:["A list with one expression per consumer specifying the suction pressure for each consumer. Use either ",(0,r.jsx)(s.code,{children:"SUCTION_PRESSURES"})," or\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",children:"SUCTION_PRESSURE"}),", not both in the same operational setting."]}),"\n",(0,r.jsxs)(s.p,{children:["Use ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",children:"SUCTION_PRESSURE"})," to set the same suction pressure for all consumers in the system and\n",(0,r.jsx)(s.code,{children:"SUCTION_PRESSURES"})," to specify one suction pressure expression per consumer."]}),"\n",(0,r.jsx)(s.h3,{id:"discharge_pressures",children:"DISCHARGE_PRESSURES"}),"\n",(0,r.jsxs)(s.p,{children:["A list with one expression per consumer specifying the discharge pressure for each consumer. Use either ",(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURES"}),"\nor ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",children:"DISCHARGE_PRESSURE"}),", not both in the same operational setting."]}),"\n",(0,r.jsxs)(s.p,{children:["Use ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",children:"DISCHARGE_PRESSURE"})," to set the same discharge pressure for all consumers in the system and\n",(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURES"})," to specify one discharge pressure expression per consumer."]}),"\n",(0,r.jsx)(s.h3,{id:"fluid_densities",children:"FLUID_DENSITIES"}),"\n",(0,r.jsxs)(s.p,{children:["Only supported for ",(0,r.jsx)(s.code,{children:"energy usage models<ENERGY_USAGE_MODEL>"})," of type ",(0,r.jsx)(s.code,{children:"PUMP_SYSTEM"}),".\nA list with one expression per consumer specifying the fluid density for each consumer. If used, it will over-ride\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FLUID_DENSITY",children:"FLUID_DENSITY"})," for the ",(0,r.jsx)(s.code,{children:"PUMP_SYSTEM"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["Use ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FLUID_DENSITY",children:"FLUID_DENSITY"})," for the ",(0,r.jsx)(s.code,{children:"energy usage models<ENERGY_USAGE_MODEL>"}),"\nto set one fixed fluid density for the entire system for all operational settings. Use\n",(0,r.jsx)(s.code,{children:"FLUID_DENSITIES"})," for the ",(0,r.jsx)(s.code,{children:"operational setting<OPERATIONAL_SETTINGS>"})," to vary the fluid density between consumers and operational settings."]}),"\n",(0,r.jsx)(s.h3,{id:"crossover",children:"CROSSOVER"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"CROSSOVER"}),' specifies if rates are to be crossed over to another consumer if rate capacity is exceeded. If the\nenergy consumption calculation is not successful for a consumer, and the consumer has a valid cross-over defined, the\nconsumer will be allocated its maximum rate and the exceeding rate will be added to the cross-over consumer. To avoid\nloops, a consumer can only be either receiving or giving away rate. For a cross-over to be valid, the discharge pressure\nat the consumer "receiving" overshooting rate must be higher than or equal to the discharge pressure of the "sending"\nconsumer. This is because it is possible to choke pressure down to meet the outlet pressure in a flow line with lower\npressure, but not possible to "pressure up" in the crossover flow line.\nSome examples show how the crossover logic works:']}),"\n",(0,r.jsxs)(s.p,{children:["Crossover is given as and list of integer values for the first position is the first consumer, second position is the\nsecond consumer, etc. The number specifies which consumer to send cross-over flow to, and 0 signifies no cross-over\npossible. ",(0,r.jsx)(s.strong,{children:"Note that we use 1-index here."})]}),"\n",(0,r.jsx)(s.h3,{id:"example-1",children:"Example 1:"}),"\n",(0,r.jsx)(s.p,{children:"Two consumers where there is a cross-over such that if the rate for the first consumer exceeds its capacity,\nthe excess rate will be processed by the second consumer. The second consumer can not cross-over to anyone."}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"CROSSOVER: [2, 0]\n"})}),"\n",(0,r.jsx)(s.h3,{id:"example-2",children:"Example 2:"}),"\n",(0,r.jsx)(s.p,{children:"The first and second consumers may both send exceeding rate to the third consumer if their capacity is\nexceeded."}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"CROSSOVER: [3,3,0]\n"})}),"\n",(0,r.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT\n OPERATIONAL_SETTINGS:\n - RATES:\n - SIM1;GAS_SALES\n - 0\n - SIM1;GAS_INJ\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURES:\n - 150\n - 150\n - SIM1;INJ_PRESSURE\n - RATES:\n - SIM1;GAS_SALES {/} 2\n - SIM1;GAS_SALES {/} 2\n - SIM1;GAS_INJ\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURES:\n - 150\n - 150\n - SIM1;INJ_PRESSURE\n CROSSOVER: [3, 3, 0]\n"})}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: water_injection_pump_reference\n - NAME: pump2\n CHART: water_injection_pump_reference\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: (1000 {*} SIM1;WATER_PROD {+} 1050 {*} SIM2;WATER_PROD) {/} (SIM1;WATER_PROD {+} SIM2;WATER_PROD)\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITIES:\n - 1000\n - 1050\n"})})]})}function l(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(S,{...e})}):S(e)}},1151:(e,s,n)=>{n.d(s,{Z:()=>t,a:()=>i});var r=n(7294);const o={},c=r.createContext(o);function i(e){const s=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d2eeb42a.fe004971.js b/assets/js/d2eeb42a.fe004971.js new file mode 100644 index 0000000000..7a70af7d84 --- /dev/null +++ b/assets/js/d2eeb42a.fe004971.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8485],{5077:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>u});var r=t(5893),c=t(1151);const o={title:"API reference",sidebar_position:3},i="API reference",a={id:"about/references/api/index",title:"API reference",description:"Generated API reference for the libecalc library can be found here.",source:"@site/docs/about/references/api/index.md",sourceDirName:"about/references/api",slug:"/about/references/api/",permalink:"/ecalc/docs/about/references/api/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/api/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"API reference",sidebar_position:3},sidebar:"about",previous:{title:"!include",permalink:"/ecalc/docs/about/references/keywords/include"},next:{title:"CLI",permalink:"/ecalc/docs/about/references/cli_reference"}},s={},u=[];function d(e){const n={a:"a",h1:"h1",p:"p",...(0,c.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"api-reference",children:"API reference"}),"\n",(0,r.jsxs)(n.p,{children:["Generated API reference for the libecalc library can be found ",(0,r.jsx)(n.a,{href:"https://equinor.github.io/ecalc/docs/about/references/api/libecalc.html",children:"here"}),"."]})]})}function l(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>i});var r=t(7294);const c={},o=r.createContext(c);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d547c67b.02d8c23d.js b/assets/js/d547c67b.02d8c23d.js new file mode 100644 index 0000000000..deddbb54c3 --- /dev/null +++ b/assets/js/d547c67b.02d8c23d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5917],{6221:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var o=r(5893),t=r(1151);const s={},d="FLUID_MODEL",i={id:"about/references/keywords/FLUID_MODEL",title:"FLUID_MODEL",description:"Description",source:"@site/docs/about/references/keywords/FLUID_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FLUID_MODEL",permalink:"/ecalc/docs/about/references/keywords/FLUID_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FLUID_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FLUID_DENSITY",permalink:"/ecalc/docs/about/references/keywords/FLUID_DENSITY"},next:{title:"FUEL",permalink:"/ecalc/docs/about/references/keywords/FUEL"}},c={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"fluid_model",children:"FLUID_MODEL"}),"\n",(0,o.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,o.jsxs)(n.p,{children:["This keyword is necessary when defining a compressor model. It relates to a defined fluid model in the ",(0,o.jsx)(n.code,{children:"MODELS"})," section. How a fluid model is defined is described in further detail in ",(0,o.jsx)(n.a,{href:"../../modelling/setup/models/fluid_model",children:"FLUID MODEL"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: <compressor model type>\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n ...\n"})}),"\n",(0,o.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: fluid_model\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n\n - NAME: single_speed_compressor\n TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model\n ...\n"})})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>d});var o=r(7294);const t={},s=o.createContext(t);function d(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d5b0ea4b.09b9be2c.js b/assets/js/d5b0ea4b.09b9be2c.js new file mode 100644 index 0000000000..e687813ba8 --- /dev/null +++ b/assets/js/d5b0ea4b.09b9be2c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2991],{9389:t=>{t.exports=JSON.parse('{"title":"Documentation","description":"This section of the documentation lists instructions and guidelines on how to contribute to the documentation","slug":"/category/documentation","permalink":"/ecalc/docs/category/documentation","navigation":{"previous":{"title":"Get started","permalink":"/ecalc/docs/contribute/get-started"},"next":{"title":"Overview","permalink":"/ecalc/docs/contribute/documentation-guide/documentation"}}}')}}]); \ No newline at end of file diff --git a/assets/js/d5cd246e.e9e603ab.js b/assets/js/d5cd246e.e9e603ab.js new file mode 100644 index 0000000000..29f11bc062 --- /dev/null +++ b/assets/js/d5cd246e.e9e603ab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4441],{2814:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var o=t(5893),s=t(1151);const r={title:"Direct consumers",sidebar_position:7},i="DIRECT ENERGY USAGE MODEL",l={id:"about/modelling/setup/installations/direct_consumers",title:"Direct consumers",description:"This energy model usage type allows for defining energy usage directly with an expression. It needs to be either",source:"@site/docs/about/modelling/setup/installations/direct_consumers.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/direct_consumers",permalink:"/ecalc/docs/about/modelling/setup/installations/direct_consumers",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/direct_consumers.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Direct consumers",sidebar_position:7},sidebar:"about",previous:{title:"Tabular models",permalink:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations"},next:{title:"eCalc\u2122 Workflow",permalink:"/ecalc/docs/about/modelling/workflow/"}},c={},a=[{value:"Format",id:"format",level:4},{value:"Example",id:"example",level:4}];function d(e){const n={code:"code",h1:"h1",h4:"h4",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"direct-energy-usage-model",children:"DIRECT ENERGY USAGE MODEL"}),"\n",(0,o.jsxs)(n.p,{children:["This energy model usage type allows for defining energy usage directly with an expression. It needs to be either\naccompanied by ",(0,o.jsx)(n.code,{children:"LOAD"})," (for electrical consumers) or ",(0,o.jsx)(n.code,{children:"FUELRATE"})," (for fuel consumers). The energy usage will be\nequal to the result of the expression given for ",(0,o.jsx)(n.code,{children:"LOAD"}),"/",(0,o.jsx)(n.code,{children:"FUELRATE"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["When a model is run with ",(0,o.jsx)(n.code,{children:"REGULARITY"}),", there is an option to specify whether the direct consumer is of stream day\nor calendar day energy usage rate with ",(0,o.jsx)(n.code,{children:"CONSUMPTION_RATE_TYPE"}),"."]}),"\n",(0,o.jsx)(n.h4,{id:"format",children:"Format"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD/FUELRATE: <choose either load or fuelrate>\n CONSUMPTION_RATE_TYPE: <consumption rate type>\n CONDITION/S: <choose either condition or conditions>\n POWERLOSSFACTOR: <power loss factor (number)>\n"})}),"\n",(0,o.jsx)(n.h4,{id:"example",children:"Example"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Direct load"})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 10 \n"})}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Direct fuel rate"})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: 100000 \n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>i});var o=t(7294);const s={},r=o.createContext(s);function i(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d77448ee.23c3c93d.js b/assets/js/d77448ee.23c3c93d.js new file mode 100644 index 0000000000..65af1679d6 --- /dev/null +++ b/assets/js/d77448ee.23c3c93d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5201],{2649:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>a,contentTitle:()=>c,default:()=>E,frontMatter:()=>t,metadata:()=>d,toc:()=>i});var n=s(5893),o=s(1151);const t={},c="COMPRESSOR_MODEL",d={id:"about/references/keywords/COMPRESSOR_MODEL",title:"COMPRESSOR_MODEL",description:"ENERGYUSAGEMODEL / COMPRESSORMODEL",source:"@site/docs/about/references/keywords/COMPRESSOR_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/COMPRESSOR_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/COMPRESSOR_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CATEGORY",permalink:"/ecalc/docs/about/references/keywords/CATEGORY"},next:{title:"COMPRESSORS",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM"}},a={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h1,{id:"compressor_model",children:"COMPRESSOR_MODEL"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," / ",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL",children:"COMPRESSOR_MODEL"})]}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Required"}),(0,n.jsx)(r.th,{children:"Child of"}),(0,n.jsx)(r.th,{children:"Children/Options"})]})}),(0,n.jsx)(r.tbody,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"Yes"}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})}),(0,n.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,n.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(r.p,{children:["This keyword links the predefined ",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",children:"COMPRESSOR MODEL"})," to the ",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"COMPRESSOR ENERGY USAGE MODEL"}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["Note that this can ",(0,n.jsx)(r.strong,{children:"only"})," be used when a ",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",children:"COMPRESSOR SYSTEM"})," is used. It is possible to use the same compressor model twice in the same system - this is a common feature when there are identical compressor trains in parallel."]}),"\n",(0,n.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: <name of compressor>\n COMPRESSOR_MODEL: <reference to compressor model>\n ...\n"})}),"\n",(0,n.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n"})})]})}function E(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},1151:(e,r,s)=>{s.d(r,{Z:()=>d,a:()=>c});var n=s(7294);const o={},t=n.createContext(o);function c(e){const r=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),n.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/df203c0f.9fa2944e.js b/assets/js/df203c0f.9fa2944e.js new file mode 100644 index 0000000000..7d0b1a7a03 --- /dev/null +++ b/assets/js/df203c0f.9fa2944e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9924],{9047:(e,n,t)=>{t.d(n,{Z:()=>M});var i=t(7294),s=t(5893);function o(e){const{mdxAdmonitionTitle:n,rest:t}=function(e){const n=i.Children.toArray(e),t=n.find((e=>i.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),o=n.filter((e=>e!==t)),l=t?.props.children;return{mdxAdmonitionTitle:l,rest:o.length>0?(0,s.jsx)(s.Fragment,{children:o}):null}}(e.children),o=e.title??n;return{...e,...o&&{title:o},children:t}}var l=t(512),a=t(5999),c=t(5281);const r={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:n,className:t,children:i}=e;return(0,s.jsx)("div",{className:(0,l.Z)(c.k.common.admonition,c.k.common.admonitionType(n),r.admonition,t),children:i})}function u(e){let{icon:n,title:t}=e;return(0,s.jsxs)("div",{className:r.admonitionHeading,children:[(0,s.jsx)("span",{className:r.admonitionIcon,children:n}),t]})}function h(e){let{children:n}=e;return n?(0,s.jsx)("div",{className:r.admonitionContent,children:n}):null}function m(e){const{type:n,icon:t,title:i,children:o,className:l}=e;return(0,s.jsxs)(d,{type:n,className:l,children:[(0,s.jsx)(u,{title:i,icon:t}),(0,s.jsx)(h,{children:o})]})}function g(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const x={icon:(0,s.jsx)(g,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function f(e){return(0,s.jsx)(m,{...x,...e,className:(0,l.Z)("alert alert--secondary",e.className),children:e.children})}function j(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const p={icon:(0,s.jsx)(j,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function v(e){return(0,s.jsx)(m,{...p,...e,className:(0,l.Z)("alert alert--success",e.className),children:e.children})}function N(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const Z={icon:(0,s.jsx)(N,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function w(e){return(0,s.jsx)(m,{...Z,...e,className:(0,l.Z)("alert alert--info",e.className),children:e.children})}function T(e){return(0,s.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const b={icon:(0,s.jsx)(T,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function y(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const z={icon:(0,s.jsx)(y,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const C={icon:(0,s.jsx)(T,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const k={...{note:f,tip:v,info:w,warning:function(e){return(0,s.jsx)(m,{...b,...e,className:(0,l.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,s.jsx)(m,{...z,...e,className:(0,l.Z)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,s.jsx)(f,{title:"secondary",...e}),important:e=>(0,s.jsx)(w,{title:"important",...e}),success:e=>(0,s.jsx)(v,{title:"success",...e}),caution:function(e){return(0,s.jsx)(m,{...C,...e,className:(0,l.Z)("alert alert--warning",e.className),children:e.children})}}};function M(e){const n=o(e),t=(i=n.type,k[i]||(console.warn(`No admonition component found for admonition type "${i}". Using Info as fallback.`),k.info));var i;return(0,s.jsx)(t,{...n})}},491:(e,n,t)=>{t.r(n),t.d(n,{default:()=>j});t(7294);var i=t(512),s=t(3692),o=t(8824),l=t(1944),a=t(5281),c=t(5999),r=t(197),d=t(2212),u=t(2503),h=t(5893);function m(e){const n=function(){const{selectMessage:e}=(0,o.c)();return n=>e(n,(0,c.I)({id:"theme.docs.tagDocListPageTitle.nDocsTagged",description:'Pluralized label for "{count} docs tagged". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One doc tagged|{count} docs tagged"},{count:n}))}();return(0,c.I)({id:"theme.docs.tagDocListPageTitle",description:"The title of the page for a docs tag",message:'{nDocsTagged} with "{tagName}"'},{nDocsTagged:n(e.tag.count),tagName:e.tag.label})}function g(e){let{doc:n}=e;return(0,h.jsxs)("article",{className:"margin-vert--lg",children:[(0,h.jsx)(s.Z,{to:n.permalink,children:(0,h.jsx)(u.Z,{as:"h2",children:n.title})}),n.description&&(0,h.jsx)("p",{children:n.description})]})}function x(e){let{title:n}=e;return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(l.d,{title:n}),(0,h.jsx)(r.Z,{tag:"doc_tag_doc_list"})]})}function f(e){let{tag:n,title:t}=e;return(0,h.jsx)(l.FG,{className:(0,i.Z)(a.k.page.docsTagDocListPage),children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsx)("div",{className:"row",children:(0,h.jsxs)("main",{className:"col col--8 col--offset-2",children:[n.unlisted&&(0,h.jsx)(d.Z,{}),(0,h.jsxs)("header",{className:"margin-bottom--xl",children:[(0,h.jsx)(u.Z,{as:"h1",children:t}),(0,h.jsx)(s.Z,{href:n.allTagsPath,children:(0,h.jsx)(c.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,h.jsx)("section",{className:"margin-vert--lg",children:n.items.map((e=>(0,h.jsx)(g,{doc:e},e.id)))})]})})})})}function j(e){const n=m(e);return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(x,{...e,title:n}),(0,h.jsx)(f,{...e,title:n})]})}},2212:(e,n,t)=>{t.d(n,{Z:()=>m});t(7294);var i=t(512),s=t(5999),o=t(5742),l=t(5893);function a(){return(0,l.jsx)(s.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function c(){return(0,l.jsx)(s.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function r(){return(0,l.jsx)(o.Z,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(5281),u=t(9047);function h(e){let{className:n}=e;return(0,l.jsx)(u.Z,{type:"caution",title:(0,l.jsx)(a,{}),className:(0,i.Z)(n,d.k.common.unlistedBanner),children:(0,l.jsx)(c,{})})}function m(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(r,{}),(0,l.jsx)(h,{...e})]})}},8824:(e,n,t)=>{t.d(n,{c:()=>r});var i=t(7294),s=t(2263);const o=["zero","one","two","few","many","other"];function l(e){return o.filter((n=>e.includes(n)))}const a={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function c(){const{i18n:{currentLocale:e}}=(0,s.Z)();return(0,i.useMemo)((()=>{try{return function(e){const n=new Intl.PluralRules(e);return{locale:e,pluralForms:l(n.resolvedOptions().pluralCategories),select:e=>n.select(e)}}(e)}catch(n){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${n.message}\n`),a}}),[e])}function r(){const e=c();return{selectMessage:(n,t)=>function(e,n,t){const i=e.split("|");if(1===i.length)return i[0];i.length>t.pluralForms.length&&console.error(`For locale=${t.locale}, a maximum of ${t.pluralForms.length} plural forms are expected (${t.pluralForms.join(",")}), but the message contains ${i.length}: ${e}`);const s=t.select(n),o=t.pluralForms.indexOf(s);return i[Math.min(o,i.length-1)]}(t,n,e)}}}}]); \ No newline at end of file diff --git a/assets/js/df3c944d.b47c244c.js b/assets/js/df3c944d.b47c244c.js new file mode 100644 index 0000000000..2d28353b9c --- /dev/null +++ b/assets/js/df3c944d.b47c244c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7611],{5825:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>d,metadata:()=>t,toc:()=>i});var r=n(5893),c=n(1151);const d={},o="ENERGY_USAGE_MODEL",t={id:"about/references/keywords/ENERGY_USAGE_MODEL",title:"ENERGY_USAGE_MODEL",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/ENERGY_USAGE_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/ENERGY_USAGE_MODEL",permalink:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/ENERGY_USAGE_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"ENERGYFUNCTION",permalink:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION"},next:{title:"EXPRESSION",permalink:"/ecalc/docs/about/references/keywords/EXPRESSION"}},l={},i=[{value:"Description",id:"description",level:2},{value:"Temporal energy usage model",id:"temporal-energy-usage-model",level:2}];function a(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"energy_usage_model",children:"ENERGY_USAGE_MODEL"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})]}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Required"}),(0,r.jsx)(s.th,{children:"Child of"}),(0,r.jsx)(s.th,{children:"Children/Options"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Yes"}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"FUELCONSUMERS"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"COMPRESSORS"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"CONSUMERS"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"CONDITION"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"CONDITIONS"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"CONSUMPTION_RATE_TYPE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"ENERGYFUNCTION"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"FLUID_DENSITY"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"FUELRATE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"LOAD"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"OPERATIONAL_SETTINGS"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"POWERLOSSFACTOR"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"PUMPS"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"RATE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"SUCTION_PRESSURE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"TOTAL_SYSTEM_RATE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"TYPE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"VARIABLES"})]})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(s.p,{children:"The energy usage model specifies the data to calculate the energy usage of a consumer. This data is used to set up a\nfunction that may be evaluated for a set of time series and returns a result including the calculated energy usage."}),"\n",(0,r.jsxs)(s.p,{children:["The type of energy usage model is defined by ",(0,r.jsx)(s.code,{children:"TYPE"}),", and which keywords are required/supported will be different\nfor each type. The available types are:"]}),"\n",(0,r.jsx)(s.p,{children:"Energy usage model types:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/direct_consumers",children:"DIRECT"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations",children:"TABULATED"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations#pump-energy-usage-model",children:"PUMP"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations#pump_system-energy-usage-model",children:"PUMP_SYSTEM"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor",children:"COMPRESSOR"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",children:"COMPRESSOR_SYSTEM"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["For all types, the keywords ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONDITION",children:"CONDITION"}),", ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONDITIONS",children:"CONDITIONS"})," and ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",children:"POWERLOSSFACTOR"})," are optional and supported, and these will act\non the calculated energy usage after the calculated energy usage from the model defined by ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"}),"."]}),"\n",(0,r.jsx)(s.h2,{id:"temporal-energy-usage-model",children:"Temporal energy usage model"}),"\n",(0,r.jsxs)(s.p,{children:["It is possible to update the energy model within a consumer over time, as long as the\n",(0,r.jsx)(s.code,{children:"ENERGY_USAGE_MODEL"})," stays within one type. The ",(0,r.jsx)(s.code,{children:"TYPE"})," cannot change over time. In case ",(0,r.jsx)(s.code,{children:"TYPE"})," evolution is needed, we recommend that you split the model into two ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"}),"."]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n 2020-01-01:\n TYPE: TABULATED\n ENERGYFUNCTION: tabulated_energy_function_reference_initial\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_PROD\n 2022-01-01:\n TYPE: TABULATED\n ENERGYFUNCTION: tabulated_energy_function_reference_new\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_PROD\n"})})]})}function h(e={}){const{wrapper:s}={...(0,c.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},1151:(e,s,n)=>{n.d(s,{Z:()=>t,a:()=>o});var r=n(7294);const c={},d=r.createContext(c);function o(e){const s=r.useContext(d);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),r.createElement(d.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dfbab2f3.87ea0b08.js b/assets/js/dfbab2f3.87ea0b08.js new file mode 100644 index 0000000000..09e0cbe4d8 --- /dev/null +++ b/assets/js/dfbab2f3.87ea0b08.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7907],{5201:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var s=n(5893),a=n(1151);const i={title:"CLI",sidebar_position:2,description:"Getting started with eCalc CLI"},o="eCalc CLI",c={id:"about/getting_started/cli/index",title:"CLI",description:"Getting started with eCalc CLI",source:"@site/docs/about/getting_started/cli/index.md",sourceDirName:"about/getting_started/cli",slug:"/about/getting_started/cli/",permalink:"/ecalc/docs/about/getting_started/cli/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/cli/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"CLI",sidebar_position:2,description:"Getting started with eCalc CLI"},sidebar:"about",previous:{title:"Getting started",permalink:"/ecalc/docs/about/getting_started/"},next:{title:"FAQ / Troubleshooting",permalink:"/ecalc/docs/about/getting_started/cli/faq"}},r={},l=[{value:"Example Usage",id:"example-usage",level:2},{value:"Use show command to inspect results",id:"use-show-command-to-inspect-results",level:4},{value:"Output Monthly CSV data",id:"output-monthly-csv-data",level:4},{value:"Specify different output folder",id:"specify-different-output-folder",level:4},{value:"Specify a different naming prefix to outputs",id:"specify-a-different-naming-prefix-to-outputs",level:4},{value:"Show stack trace for debugging",id:"show-stack-trace-for-debugging",level:4}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h4:"h4",p:"p",pre:"pre",strong:"strong",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"ecalc-cli",children:"eCalc CLI"}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsxs)(t.p,{children:["It is currently ",(0,s.jsx)(t.strong,{children:"recommended"})," to use the CLI instead of the Python library directly due to upcoming breaking changes in the Python library"]})}),"\n",(0,s.jsxs)(t.p,{children:["The current recommended way to use eCalc is through the CLI (Command Line Interpreter). This is a part of the\neCalc Python library, and should be accessible from the command line as ",(0,s.jsx)(t.code,{children:"ecalc"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["See all commands and options in the ",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/cli_reference",children:"CLI reference"})]}),"\n",(0,s.jsx)(t.h2,{id:"example-usage",children:"Example Usage"}),"\n",(0,s.jsx)(t.h4,{id:"use-show-command-to-inspect-results",children:"Use show command to inspect results"}),"\n",(0,s.jsx)(t.p,{children:"First run ecalc (here shown with default output folder)"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc run /somelocation/myfield.yaml --output-folder output\n"})}),"\n",(0,s.jsx)(t.p,{children:"Enter the output folder"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ cd output\n"})}),"\n",(0,s.jsx)(t.p,{children:"Show results for a single component"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc show results --name waterinj --output-format json\n"})}),"\n",(0,s.jsx)(t.p,{children:"or as csv"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc show results --name waterinj --output-format csv\n"})}),"\n",(0,s.jsxs)(t.p,{children:["or write the full csv result to a file (this will give the same output as ",(0,s.jsx)(t.code,{children:"ecalc run"})," with the csv option)"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc show results --output-format csv --file results.csv\n"})}),"\n",(0,s.jsx)(t.h4,{id:"output-monthly-csv-data",children:"Output Monthly CSV data"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc run -f MONTH /somelocation/myfield.yml\n"})}),"\n",(0,s.jsx)(t.h4,{id:"specify-different-output-folder",children:"Specify different output folder"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc run -o /somedirectory/foo/bar/ /somelocation/myfield.yml\n"})}),"\n",(0,s.jsx)(t.h4,{id:"specify-a-different-naming-prefix-to-outputs",children:"Specify a different naming prefix to outputs"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc run -n myfield_myproject /somelocation/myfield.yml\n"})}),"\n",(0,s.jsx)(t.h4,{id:"show-stack-trace-for-debugging",children:"Show stack trace for debugging"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc run --log DEBUG /somelocation/myfield.yml\n"})})]})}function u(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>o});var s=n(7294);const a={},i=s.createContext(a);function o(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e023757a.da0dad13.js b/assets/js/e023757a.da0dad13.js new file mode 100644 index 0000000000..9902f5543b --- /dev/null +++ b/assets/js/e023757a.da0dad13.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4858],{8380:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var r=n(5893),s=n(1151);const o={},c="INSTALLATIONS",i={id:"about/references/keywords/INSTALLATIONS",title:"INSTALLATIONS",description:"INSTALLATIONS",source:"@site/docs/about/references/keywords/INSTALLATIONS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INSTALLATIONS",permalink:"/ecalc/docs/about/references/keywords/INSTALLATIONS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INSTALLATIONS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INLET_TEMPERATURE",permalink:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE"},next:{title:"INTERPOLATION_TYPE",permalink:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"}},a={},d=[{value:"Description",id:"description",level:2}];function l(e){const t={a:"a",h1:"h1",h2:"h2",p:"p",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"installations",children:"INSTALLATIONS"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})}),"\n",(0,r.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(t.p,{children:["In ",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation."]}),"\n",(0,r.jsx)(t.p,{children:"The structure of the keywords under installations\nis linked to the structure in the general consumer overview for an installation."}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/installations/",children:"INSTALLATIONS"})," for more details about usage."]})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>c});var r=n(7294);const s={},o=r.createContext(s);function c(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e0edce1a.d7fa7b40.js b/assets/js/e0edce1a.d7fa7b40.js new file mode 100644 index 0000000000..963158e44a --- /dev/null +++ b/assets/js/e0edce1a.d7fa7b40.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8596],{6513:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>u,frontMatter:()=>c,metadata:()=>l,toc:()=>i});var r=t(5893),s=t(1151);const c={},a="FUEL",l={id:"about/references/keywords/FUEL",title:"FUEL",description:"... /",source:"@site/docs/about/references/keywords/FUEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FUEL",permalink:"/ecalc/docs/about/references/keywords/FUEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FUEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FLUID_MODEL",permalink:"/ecalc/docs/about/references/keywords/FLUID_MODEL"},next:{title:"FUELCONSUMERS",permalink:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"}},o={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3},{value:"Constant fuel type",id:"constant-fuel-type",level:4},{value:"Time-varying fuel type",id:"time-varying-fuel-type",level:4}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"fuel",children:"FUEL"}),"\n",(0,r.jsxs)(n.p,{children:["... /\n",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL",children:"FUEL"})]}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL",children:"FUEL"})," keyword defines the fuel type that can be used in\n",(0,r.jsx)(n.code,{children:"INSTALLATIONS"}),", ",(0,r.jsx)(n.code,{children:"GENERATORSETS"}),", or ",(0,r.jsx)(n.code,{children:"FUELCONSUMERS"}),".\nIt can be set directly and used for the entire time interval, or it can be set differently for different time intervals."]}),"\n",(0,r.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FUEL: <fuel_type>\n"})}),"\n",(0,r.jsx)(n.p,{children:"or"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FUEL:\n <DATE>: <fuel_type>\n <DATE>: <fuel_type>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.h4,{id:"constant-fuel-type",children:"Constant fuel type"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FUEL: fuel_gas\n"})}),"\n",(0,r.jsx)(n.h4,{id:"time-varying-fuel-type",children:"Time-varying fuel type"}),"\n",(0,r.jsxs)(n.p,{children:["This example assumes that two fuels have been defined: ",(0,r.jsx)(n.code,{children:"fuel_gas"})," and ",(0,r.jsx)(n.code,{children:"diesel"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FUEL:\n 1994-01-01: fuel_gas\n 2000-01-01: diesel\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>a});var r=t(7294);const s={},c=r.createContext(s);function a(e){const n=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e1df8231.23a94c3e.js b/assets/js/e1df8231.23a94c3e.js new file mode 100644 index 0000000000..6395082a25 --- /dev/null +++ b/assets/js/e1df8231.23a94c3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[517],{1665:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var a=n(5893),o=n(1151);const r={title:"YAML",sidebar_position:3,description:"Getting started with YAML"},i="YAML",s={id:"about/getting_started/yaml/index",title:"YAML",description:"Getting started with YAML",source:"@site/docs/about/getting_started/yaml/index.md",sourceDirName:"about/getting_started/yaml",slug:"/about/getting_started/yaml/",permalink:"/ecalc/docs/about/getting_started/yaml/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/yaml/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"YAML",sidebar_position:3,description:"Getting started with YAML"},sidebar:"about",previous:{title:"Python Library",permalink:"/ecalc/docs/about/getting_started/library/"},next:{title:"Modelling guide",permalink:"/ecalc/docs/about/modelling/"}},c={},l=[];function d(e){const t={a:"a",h1:"h1",p:"p",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"yaml",children:"YAML"}),"\n",(0,a.jsxs)(t.p,{children:["We have chosen the way to model eCalc models is in the YAML format. For a simple introduction to YAML, please see ",(0,a.jsx)(t.a,{href:"https://learnxinyminutes.com/docs/yaml/",children:"here"})]}),"\n",(0,a.jsxs)(t.p,{children:["The eCalc YAML model can either be run directly with the ",(0,a.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/cli/",children:"eCalc CLI"})," or loaded using the ",(0,a.jsx)(t.a,{href:"../library",children:"Python library"})]}),"\n",(0,a.jsxs)(t.p,{children:["For getting started setting up your first eCalc YAML model, please see ",(0,a.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/",children:"Setup an eCalc Model"}),",\nlook at some example YAMLs ",(0,a.jsx)(t.a,{href:"/ecalc/docs/about/modelling/examples/",children:"here"})," and refer to the vocabulary that we use ",(0,a.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/",children:"here"}),"."]})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>i});var a=n(7294);const o={},r=a.createContext(o);function i(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e26167e6.6d4a867d.js b/assets/js/e26167e6.6d4a867d.js new file mode 100644 index 0000000000..deb133619f --- /dev/null +++ b/assets/js/e26167e6.6d4a867d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[476],{573:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>a});var s=r(5893),t=r(1151);const o={},c="EMISSION",i={id:"about/references/keywords/EMISSION",title:"EMISSION",description:"New keyword from eCalc v8.8!",source:"@site/docs/about/references/keywords/EMISSION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMISSION",permalink:"/ecalc/docs/about/references/keywords/EMISSION",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMISSION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"ELECTRICITY2FUEL",permalink:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},next:{title:"EMISSIONS",permalink:"/ecalc/docs/about/references/keywords/EMISSIONS"}},d={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"emission",children:"EMISSION"}),"\n",(0,s.jsx)("span",{className:"major-change-new-feature",children:(0,s.jsx)(n.p,{children:"New keyword from eCalc v8.8!"})}),"\n",(0,s.jsx)("br",{}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Required"}),(0,s.jsx)(n.th,{children:"Child of"}),(0,s.jsx)(n.th,{children:"Children/Options"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"VENTING_EMITTERS"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"NAME"}),(0,s.jsx)("br",{}),(0,s.jsx)(n.code,{children:"RATE"})]})]})})]}),"\n",(0,s.jsx)(n.admonition,{type:"important",children:(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["From eCalc version 8.8: The new keyword ",(0,s.jsx)(n.code,{children:"EMISSION"})," is a part of an updated definition of ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["eCalc version 8.7 and earlier: ",(0,s.jsx)(n.code,{children:"EMISSION"}),"-keyword cannot be used."]}),"\n"]})}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(n.p,{children:"The emission specifies the data to calculate the direct emissions on an installation. This data is used to set up\na function that may be evaluated for a set of time series and return an emission result."}),"\n",(0,s.jsxs)(n.p,{children:["The attributes ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/RATE",children:"RATE"})," are required."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"EMISSION:\n - NAME: <emission name>\n RATE:\n VALUE: <emission rate>\n UNIT: <emission rate unit, default kg/d>\n TYPE: <emission rate type, default STREAM_DAY>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"EMISSION:\n - NAME: CH4\n RATE:\n VALUE: 4\n UNIT: kg/d\n TYPE: STREAM_DAY\n"})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>c});var s=r(7294);const t={},o=s.createContext(t);function c(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e2712b99.7ac1a5ae.js b/assets/js/e2712b99.7ac1a5ae.js new file mode 100644 index 0000000000..e7a43f6afc --- /dev/null +++ b/assets/js/e2712b99.7ac1a5ae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7253],{4006:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var t=a(5893),r=a(1151);const s={slug:"v8.1-release",title:"v8.1",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:11},i="eCalc v8.1",l={id:"changelog/v8-1",title:"v8.1",description:"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:",source:"@site/docs/changelog/v8-1.md",sourceDirName:"changelog",slug:"/changelog/v8.1-release",permalink:"/ecalc/docs/changelog/v8.1-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-1.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:11,frontMatter:{slug:"v8.1-release",title:"v8.1",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:11},sidebar:"changelog",previous:{title:"v8.0",permalink:"/ecalc/docs/changelog/v8.0-release"},next:{title:"v8.2",permalink:"/ecalc/docs/changelog/v8.2-release"}},o={},c=[{value:"New features",id:"new-features",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Input: YAML / Resource files",id:"input-yaml--resource-files",level:3},{value:"Output: LTP",id:"output-ltp",level:3}];function u(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"ecalc-v81",children:"eCalc v8.1"}),"\n",(0,t.jsx)(n.p,{children:"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:"}),"\n",(0,t.jsx)(n.h2,{id:"new-features",children:"New features"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Bug fixes"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,t.jsx)(n.p,{children:"Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:"}),"\n",(0,t.jsx)(n.h3,{id:"input-yaml--resource-files",children:"Input: YAML / Resource files"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"We do no longer accept missing data in resource or timeseries resource files, since it easily leads to ambiguities and errors."}),"\n",(0,t.jsx)(n.li,{children:"New Category: STEAM-TURBINE-GENERATOR has been introduced, which works similar as OFFSHORE-WIND"}),"\n",(0,t.jsx)(n.li,{children:"TIME_SERIES has had a makeover with new type and renamed attributes, to be less ambiguous and error-prone."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"output-ltp",children:"Output: LTP"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"A few columns in LTP export has changed names in order to be compatible with Centuries"}),"\n",(0,t.jsx)(n.li,{children:"A new column in LTP export has been introduced: steamTurbineGeneratorConsumption (matching with the new category)"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Check out the ",(0,t.jsx)(n.a,{href:"../about/migration_guides/v8_to_v81",children:"migration guide"})]})]})}function d(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},1151:(e,n,a)=>{a.d(n,{Z:()=>l,a:()=>i});var t=a(7294);const r={},s=t.createContext(r);function i(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e7fdd821.e3da5bd9.js b/assets/js/e7fdd821.e3da5bd9.js new file mode 100644 index 0000000000..0799ea76f7 --- /dev/null +++ b/assets/js/e7fdd821.e3da5bd9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8202],{5815:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>i,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>d,toc:()=>a});var t=n(5893),c=n(1151);const s={},o="CONDITIONS",d={id:"about/references/keywords/CONDITIONS",title:"CONDITIONS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CONDITIONS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONDITIONS",permalink:"/ecalc/docs/about/references/keywords/CONDITIONS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONDITIONS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONDITION",permalink:"/ecalc/docs/about/references/keywords/CONDITION"},next:{title:"CONSTANT",permalink:"/ecalc/docs/about/references/keywords/CONSTANT"}},i={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,c.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"conditions",children:"CONDITIONS"}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CONDITIONS",children:"CONDITIONS"})]}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Required"}),(0,t.jsx)(r.th,{children:"Child of"}),(0,t.jsx)(r.th,{children:"Children/Options"})]})}),(0,t.jsx)(r.tbody,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"No"}),(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"ENERGY_USAGE_MODEL"})}),(0,t.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,t.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(r.p,{children:["See ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CONDITION",children:"CONDITION"}),"."]}),"\n",(0,t.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"CONDITIONS:\n - <CONDITION>\n - <CONDITION>\n"})})]})}function h(e={}){const{wrapper:r}={...(0,c.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>o});var t=n(7294);const c={},s=t.createContext(c);function o(e){const r=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),t.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e862d0e9.2b75446d.js b/assets/js/e862d0e9.2b75446d.js new file mode 100644 index 0000000000..261d90232e --- /dev/null +++ b/assets/js/e862d0e9.2b75446d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8703],{9472:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>E,default:()=>l,frontMatter:()=>t,metadata:()=>c,toc:()=>a});var s=r(5893),o=r(1151);const t={},E="INTERSTAGE_CONTROL_PRESSURE",c={id:"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",title:"INTERSTAGE_CONTROL_PRESSURE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INTERPOLATION_TYPE",permalink:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"},next:{title:"LOAD",permalink:"/ecalc/docs/about/references/keywords/LOAD"}},i={},a=[{value:"Description",id:"description",level:2},{value:"Use in MODELS",id:"use-in-models",level:3},{value:"Format",id:"format",level:4},{value:"Use in ENERGY_USAGE_MODEL",id:"use-in-energy_usage_model",level:3},{value:"Format",id:"format-1",level:4},{value:"Example",id:"example",level:4}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"interstage_control_pressure",children:"INTERSTAGE_CONTROL_PRESSURE"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," / [...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["This keyword can ",(0,s.jsx)(n.strong,{children:"only"})," be utilised for a ",(0,s.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})," type, and it is used in two separate sections:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"MODELS"})," - to define the upstream and downstream pressure control methods"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})," - to define the interstage pressure"]}),"\n"]}),"\n",(0,s.jsxs)(n.h3,{id:"use-in-models",children:["Use in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["This keyword cannot be specified for the first stage, and it may only be used ",(0,s.jsx)(n.strong,{children:"once"})," in a given compression train."]})}),"\n",(0,s.jsxs)(n.p,{children:["Under the ",(0,s.jsx)(n.code,{children:"INTERSTAGE_CONTROL_PRESSURE"})," keyword, the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",children:"UPSTREAM_PRESSURE_CONTROL"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",children:"DOWNSTREAM_PRESSURE_CONTROL"})," keywords can be specified."]}),"\n",(0,s.jsx)(n.h4,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <compressor model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>\n ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE> \n DOWNSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>\n ...\n"})}),"\n",(0,s.jsxs)(n.p,{children:['The reason why upstream and downstream pressure control methods need to be specified is that the compression train is essentially split in two - before and after the interstage pressure. Thus, a control method for each "side" of the model needs to be defined.\nSee ',(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"})," for more details."]}),"\n",(0,s.jsxs)(n.h3,{id:"use-in-energy_usage_model",children:["Use in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})]}),"\n",(0,s.jsxs)(n.p,{children:["Within the ",(0,s.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})," section (",(0,s.jsx)(n.strong,{children:"only"})," when ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," is set to ",(0,s.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"}),") the actual value for the interstage pressure is set in ",(0,s.jsx)(n.strong,{children:"bar"}),".\nThis can either be a single value or an ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EXPRESSION",children:"EXPRESSION"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"format-1",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: <reference name>\n ...\n ENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n INTERSTAGE_CONTROL_PRESSURE: <interstage control pressure value/expression>\n ...\n"})}),"\n",(0,s.jsx)(n.h4,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: export_compressor\n ...\n ENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n SUCTION_PRESSURE: 10 # bar\n INTERSTAGE_CONTROL_PRESSURE: 40 #bar\n DISCHARGE_PRESSURE: 120 #bar\n"})})]})}function l(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>c,a:()=>E});var s=r(7294);const o={},t=s.createContext(o);function E(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:E(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e8ebc025.acf81b33.js b/assets/js/e8ebc025.acf81b33.js new file mode 100644 index 0000000000..880d7023f4 --- /dev/null +++ b/assets/js/e8ebc025.acf81b33.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3902],{2991:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var s=n(5893),o=n(1151);const i={title:"Setup an eCalc\u2122 Model",sidebar_position:2,description:"Guide on how to setup an eCalc\u2122 model"},l="Set up an eCalc Model",r={id:"about/modelling/setup/index",title:"Setup an eCalc\u2122 Model",description:"Guide on how to setup an eCalc\u2122 model",source:"@site/docs/about/modelling/setup/index.md",sourceDirName:"about/modelling/setup",slug:"/about/modelling/setup/",permalink:"/ecalc/docs/about/modelling/setup/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Setup an eCalc\u2122 Model",sidebar_position:2,description:"Guide on how to setup an eCalc\u2122 model"},sidebar:"about",previous:{title:"Compressor modelling",permalink:"/ecalc/docs/about/modelling/theory/compressor_modelling"},next:{title:"File format and syntax",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/"}},a={},c=[];function d(e){const t={a:"a",em:"em",h1:"h1",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"set-up-an-ecalc-model",children:"Set up an eCalc Model"}),"\n",(0,s.jsx)(t.p,{children:"This section describes how to create your own eCalc\u2122 model file."}),"\n",(0,s.jsx)(t.p,{children:"There are six separate sections which make up each model, these being:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Input"}),(0,s.jsx)(t.th,{children:"Function"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/time_series",children:"TIME_SERIES"})}),(0,s.jsx)(t.td,{children:"Input of time dependent variables. For example, production profiles for an installation"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY_INPUTS"})}),(0,s.jsxs)(t.td,{children:["Input of generator sets, and facility equipment that consumers either power or fuel ",(0,s.jsx)(t.em,{children:"(with the exception of compressors that are modelled with compressor charts)"})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/models/",children:"MODELS"})}),(0,s.jsx)(t.td,{children:"Input of compressor models that use compressor charts. Gas turbines that are directly coupled to a compressor are also included here"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/fuel_types",children:"FUEL_TYPES"})}),(0,s.jsx)(t.td,{children:"Input of the various fuel types used in the specified installation(s)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/variables",children:"VARIABLES"})}),(0,s.jsx)(t.td,{children:"Input of variables that can reference to in expressions within the YAML set-up file"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/installations/",children:"INSTALLATIONS"})}),(0,s.jsxs)(t.td,{children:["This is essentially the only ",(0,s.jsx)(t.em,{children:'"output"'})," section in the YAML setup file. All the inputs are specified and related to specific platforms/rigs, and whether or not they consume either power or fuel"]})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"All of the above are mandatory inputs for eCalc\u2122 to run, with the exception of models (which is an optional, but still important input) and variables."})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>l});var s=n(7294);const o={},i=s.createContext(o);function l(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e9e63826.8f9b6d55.js b/assets/js/e9e63826.8f9b6d55.js new file mode 100644 index 0000000000..b42413ff19 --- /dev/null +++ b/assets/js/e9e63826.8f9b6d55.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6159],{2755:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var t=s(5893),r=s(1151);const i={title:"File format and syntax",sidebar_position:1,description:"YAML file format and syntax guide"},a="File format",o={id:"about/modelling/setup/file_format_and_syntax/index",title:"File format and syntax",description:"YAML file format and syntax guide",source:"@site/docs/about/modelling/setup/file_format_and_syntax/index.md",sourceDirName:"about/modelling/setup/file_format_and_syntax",slug:"/about/modelling/setup/file_format_and_syntax/",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/file_format_and_syntax/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"File format and syntax",sidebar_position:1,description:"YAML file format and syntax guide"},sidebar:"about",previous:{title:"Setup an eCalc\u2122 Model",permalink:"/ecalc/docs/about/modelling/setup/"},next:{title:"Expressions",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions"}},l={},c=[{value:"Setup file syntax",id:"setup-file-syntax",level:2},{value:"Examples",id:"examples",level:2},{value:"YAML format example",id:"yaml-format-example",level:3},{value:"Full examples",id:"full-examples",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"file-format",children:"File format"}),"\n",(0,t.jsx)(n.p,{children:"The setup file is written in YAML format and needs to follow a strict pattern which consists of several levels specified by indentation. The indentation is very important. It is recommended to use an indentation of 2 spaces per level. At each level, there might be both required and optional keywords."}),"\n",(0,t.jsx)(n.h2,{id:"setup-file-syntax",children:"Setup file syntax"}),"\n",(0,t.jsx)(n.p,{children:"The overall system in eCalc is that the user defines inputs from subsurface and facility and\nthen establishes a model between these."}),"\n",(0,t.jsxs)(n.p,{children:["On the top level, the required keywords are ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," which defines the input from facility characterization, ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," which defines time-dependant input parameters (e.g. reservoir profiles), ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," which defines the various fuel types used in the system, and ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," which is the top node defining the system of energy consumers. ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," is optional and may be used for multi-level energy usage models."]}),"\n",(0,t.jsx)(n.p,{children:"Documentation about how to set up each of these fields are found here, respectively:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"}),": List of input sources, CSV-files, containing all time series data including the\nreservoir variables."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),": List of input files from facility characterization. Typically, this can be\ncharacteristics for an element in a consumer system or characteristics for a generator set."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"}),": Defining the fuel types being used in the model and the corresponding\nemissions."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"}),": Used for multi-level models, one model may refer to other models from either\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," or ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"}),": Used for defining variables to be used in expressions throughout the YAML file"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),": Defining the system of energy consumers on each installation\n(e.g. platform or mobile unit)."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"An eCalc model may contain one or several installations. Each installation has a set of specifications\n(e.g. fuel type, hydrocarbon export, ...) and specifications of the system of consumers."}),"\n",(0,t.jsx)(n.p,{children:"Emissions are emitted when fuel is burned. Thus, the first sublevel of consumers for an installation,\nare the fuel burners. As the figure below shows, there are three main types of fuel burners:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Electricity generation (generator sets),"}),"\n",(0,t.jsx)(n.li,{children:"Turbine-driven processes,"}),"\n",(0,t.jsx)(n.li,{children:"Flare/vent/other non reservoir dependent burners/emitters."}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["In eCalc under each installation, there is one keyword (",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"}),")\nspecifying the generator sets and one keyword (",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"}),")\nspecifying processes that require fuel directly (turbine-driven processes and flare/vent)."]}),"\n",(0,t.jsxs)(n.p,{children:["The processes with electrical motor drives and other electrical loads are modeled at the sublevel\nunder ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"}),"."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:s(9100).Z+"",width:"962",height:"495"})}),"\n",(0,t.jsx)(n.admonition,{title:"Comments",type:"tip",children:(0,t.jsx)(n.p,{children:"Comments are supported anywhere in the yml and csv files by using '#' to indicate the start of a comment.\nAll data after a '#' on the same line is ignored. If '#' is used at the beginning of the file, the\nfirst line without a preceding '#' is used as the header."})}),"\n",(0,t.jsx)(n.h2,{id:"examples",children:"Examples"}),"\n",(0,t.jsx)(n.h3,{id:"yaml-format-example",children:"YAML format example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES:\n - FILE:\n TYPE:\n NAME:\n\nFACILITY INPUTS:\n - FILE:\n TYPE:\n NAME:\n\nFUEL_TYPES:\n - NAME:\n FACTOR:\n\nMODELS:\n - NAME:\n - TYPE:\n\nVARIABLES:\n <variable_name>\n VALUE: <expression>\n\nINSTALLATIONS:\n - NAME:\n HCEXPORT:\n FUEL:\n GENERATORSETS:\n - NAME:\n ELECTRICITY2FUEL:\n CATEGORY:\n CONSUMERS:\n - NAME:\n CATEGORY:\n ENERGY_USAGE_MODEL:\n\n"})}),"\n",(0,t.jsx)(n.h3,{id:"full-examples",children:"Full examples"}),"\n",(0,t.jsxs)(n.p,{children:["Examples are an excellent way to quickly get an overview of the syntax. Check them out ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/modelling/examples/",children:"here"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},9100:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png"},1151:(e,n,s)=>{s.d(n,{Z:()=>o,a:()=>a});var t=s(7294);const r={},i=t.createContext(r);function a(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ebdd570f.862a7f20.js b/assets/js/ebdd570f.862a7f20.js new file mode 100644 index 0000000000..183a0beb7a --- /dev/null +++ b/assets/js/ebdd570f.862a7f20.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3177],{8929:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var t=i(5893),s=i(1151);const o={title:"v8.7 to v8.8",description:"v8.7 to v8.8 migration",sidebar_position:7},r="v8.7 to v8.8",a={id:"about/migration_guides/v8.7_to_v8.8",title:"v8.7 to v8.8",description:"v8.7 to v8.8 migration",source:"@site/docs/about/migration_guides/v8.7_to_v8.8.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8.7_to_v8.8",permalink:"/ecalc/docs/about/migration_guides/v8.7_to_v8.8",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8.7_to_v8.8.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"v8.7 to v8.8",description:"v8.7 to v8.8 migration",sidebar_position:7},sidebar:"about",previous:{title:"v8.6 to v8.7",permalink:"/ecalc/docs/about/migration_guides/v8-6_to_v8-7"},next:{title:"Output data",permalink:"/ecalc/docs/about/miscellaneous/"}},d={},l=[{value:"Yaml migration",id:"yaml-migration",level:2},{value:"1. Changes to VENTING_EMITTERS",id:"1-changes-to-venting_emitters",level:3}];function c(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h1,{id:"v87-to-v88",children:"v8.7 to v8.8"}),"\n",(0,t.jsx)(e.p,{children:"In this migration guide you will find:"}),"\n",(0,t.jsxs)(e.ol,{children:["\n",(0,t.jsx)(e.li,{children:(0,t.jsx)(e.a,{href:"#yaml-migration",children:"YAML changes"})}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"yaml-migration",children:"Yaml migration"}),"\n",(0,t.jsx)(e.h3,{id:"1-changes-to-venting_emitters",children:"1. Changes to VENTING_EMITTERS"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsxs)(e.li,{children:["Update ",(0,t.jsx)(e.code,{children:"VENTING_EMITTERS"})," to support rate ",(0,t.jsx)(e.code,{children:"TYPE"})," and ",(0,t.jsx)(e.code,{children:"UNIT"})]}),"\n",(0,t.jsxs)(e.li,{children:[(0,t.jsx)(e.code,{children:"EMITTER_MODEL"})," is deprecated and replaced by a new keyword ",(0,t.jsx)(e.code,{children:"EMISSION"})]}),"\n",(0,t.jsxs)(e.li,{children:["In the new keyword ",(0,t.jsx)(e.code,{children:"EMISSION"})," the following should be specified:","\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsxs)(e.li,{children:[(0,t.jsx)(e.code,{children:"NAME"})," of the emission"]}),"\n",(0,t.jsxs)(e.li,{children:[(0,t.jsx)(e.code,{children:"RATE"}),", including ",(0,t.jsx)(e.code,{children:"VALUE"})," and optionally ",(0,t.jsx)(e.code,{children:"UNIT"})," and ",(0,t.jsx)(e.code,{children:"TYPE"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(e.p,{children:"Previously, the format looked like this:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: <emitter name>\n CATEGORY: <category>\n # This is old\n EMISSION_NAME: <emission name>\n # This is old\n EMITTER_MODEL:\n # This is old\n - EMISSION_RATE: <emission rate [kg/day]>\n"})}),"\n",(0,t.jsxs)(e.p,{children:["But the new valid definition of ",(0,t.jsx)(e.code,{children:"VENTING_EMITTERS"})," in the yaml is now:"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: <emitter name>\n CATEGORY: <category>\n # This is new\n EMISSION:\n # This is new\n NAME: <emission name>\n # This is new\n RATE:\n # This is new\n VALUE: <emission rate>\n # This is new\n UNIT: <emission rate unit, default kg/d>\n # This is new\n TYPE: <emission rate type, default STREAM_DAY>\n"})}),"\n",(0,t.jsxs)(e.p,{children:["Example with the new yaml-definition of ",(0,t.jsx)(e.code,{children:"VENTING_EMITTERS"}),":"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: SomeVentingEmitter\n CATEGORY: COLD-VENTING-FUGITIVE\n # This is new\n EMISSION:\n # This is new\n NAME: CH4\n # This is new\n RATE:\n # This is new\n VALUE: 4\n # This is new\n UNIT: kg/d\n # This is new\n TYPE: STREAM_DAY\n"})})]})}function h(n={}){const{wrapper:e}={...(0,s.a)(),...n.components};return e?(0,t.jsx)(e,{...n,children:(0,t.jsx)(c,{...n})}):c(n)}},1151:(n,e,i)=>{i.d(e,{Z:()=>a,a:()=>r});var t=i(7294);const s={},o=t.createContext(s);function r(n){const e=t.useContext(o);return t.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:r(n.components),t.createElement(o.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/ec96df16.48e16b50.js b/assets/js/ec96df16.48e16b50.js new file mode 100644 index 0000000000..9c09a6325f --- /dev/null +++ b/assets/js/ec96df16.48e16b50.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8519],{5890:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>s,default:()=>m,frontMatter:()=>t,metadata:()=>c,toc:()=>r});var l=i(5893),a=i(1151);const t={},s="!include",c={id:"about/references/keywords/include",title:"!include",description:"Description",source:"@site/docs/about/references/keywords/include.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/include",permalink:"/ecalc/docs/about/references/keywords/include",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/include.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"VENTING_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS"},next:{title:"API reference",permalink:"/ecalc/docs/about/references/api/"}},o={},r=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example 1 - include map/object into list item",id:"example-1---include-mapobject-into-list-item",level:2},{value:"Example 2 - include map/object into object value",id:"example-2---include-mapobject-into-object-value",level:2},{value:"Example 3 - include list into object value",id:"example-3---include-list-into-object-value",level:2}];function d(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.h1,{id:"include",children:"!include"}),"\n",(0,l.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,l.jsxs)(n.p,{children:["You can use ",(0,l.jsx)(n.code,{children:"!include"})," to separate your model into several files. ",(0,l.jsx)(n.code,{children:"!include"}),"\ncan be used as value in a ",(0,l.jsx)(n.code,{children:"KEY: VALUE"})," mapping, or as a value in a list."]}),"\n",(0,l.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",children:"!include <some_yaml_file.yaml>\n"})}),"\n",(0,l.jsxs)(n.admonition,{type:"tip",children:[(0,l.jsxs)(n.p,{children:["You can use ",(0,l.jsx)(n.code,{children:"ecalc show yaml <model_file>"})," to see the read yaml with ",(0,l.jsx)(n.code,{children:"!include"})," processed."]}),(0,l.jsx)(n.p,{children:"New in v7.2."})]}),"\n",(0,l.jsx)(n.h2,{id:"example-1---include-mapobject-into-list-item",children:"Example 1 - include map/object into list item"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"!include"})," can be used to insert a map/object as a single list element"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {2}',children:" INSTALLATIONS:\n - !include installationA.yaml\n - NAME: installationB\n ...\n"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="installationA.yaml"',children:" NAME: installationA\n ...\n\n"})}),"\n",(0,l.jsx)(n.p,{children:"This is the same as"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {2,3}',children:" INSTALLATIONS:\n - NAME: installationA\n ...\n - NAME: installationB\n ...\n\n"})}),"\n",(0,l.jsx)(n.h2,{id:"example-2---include-mapobject-into-object-value",children:"Example 2 - include map/object into object value"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"!include"})," can be used to insert a map/object as a value in a ",(0,l.jsx)(n.code,{children:"KEY: VALUE"})," mapping"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {5}',children:" INSTALLATIONS:\n - NAME: installationA\n FUELCONSUMERS:\n - NAME: consumerB\n ENERGY_USAGE_MODEL: !include consumerB.yaml\n"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="consumerB.yaml"',children:" TYPE: COMPRESSOR\n ...\n\n"})}),"\n",(0,l.jsx)(n.p,{children:"This is the same as"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {6,7}',children:" INSTALLATIONS:\n - NAME: installationA\n FUELCONSUMERS:\n - NAME: consumerB\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ...\n\n"})}),"\n",(0,l.jsx)(n.h2,{id:"example-3---include-list-into-object-value",children:"Example 3 - include list into object value"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"!include"})," can be used to insert a list as a value in a ",(0,l.jsx)(n.code,{children:"KEY: VALUE"})," mapping"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {1}',children:"INSTALLATIONS: !include installations.yaml\n\n"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="installations.yaml"',children:" - NAME: installationA\n ...\n - NAME: installationB\n ...\n\n"})}),"\n",(0,l.jsx)(n.p,{children:"This is the same as"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {2-5}',children:" INSTALLATIONS:\n - NAME: installationA\n ...\n - NAME: installationB\n ...\n"})})]})}function m(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>c,a:()=>s});var l=i(7294);const a={},t=l.createContext(a);function s(e){const n=l.useContext(t);return l.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),l.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/edb3a98b.9f770347.js b/assets/js/edb3a98b.9f770347.js new file mode 100644 index 0000000000..3e3373ed09 --- /dev/null +++ b/assets/js/edb3a98b.9f770347.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1728],{4115:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var s=r(5893),t=r(1151);const i={title:"Generator sets",sidebar_position:1,description:"Using generator sets in calculations"},a="Generator sets in calculations",o={id:"about/modelling/setup/installations/generator_sets_in_calculations",title:"Generator sets",description:"Using generator sets in calculations",source:"@site/docs/about/modelling/setup/installations/generator_sets_in_calculations.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/generator_sets_in_calculations",permalink:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/generator_sets_in_calculations.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Generator sets",sidebar_position:1,description:"Using generator sets in calculations"},sidebar:"about",previous:{title:"Installations",permalink:"/ecalc/docs/about/modelling/setup/installations/"},next:{title:"Pump models",permalink:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations"}},l={},c=[{value:"Format",id:"format",level:3},{value:"Electricity2fuel function",id:"electricity2fuel-function",level:2},{value:"Description",id:"description",level:3},{value:"Format",id:"format-1",level:3},{value:"Power from shore",id:"power-from-shore",level:2},{value:"Description",id:"description-1",level:3},{value:"Example",id:"example",level:3},{value:"Heaters and boilers",id:"heaters-and-boilers",level:2},{value:"Description",id:"description-2",level:3},{value:"Example: Boiler as generator set",id:"example-boiler-as-generator-set",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"generator-sets-in-calculations",children:"Generator sets in calculations"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})," keyword is optional. However, the only requirement is that each\ninstallation must have defined either ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})," or\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})," one or several ",(0,s.jsx)(n.code,{children:"generator sets"}),"\n(a 'set' of an engine of some sort and a generator) are specified in a list."]}),"\n",(0,s.jsxs)(n.p,{children:["Each generator set requires three sub-keywords, ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"}),"\nand ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"}),".\nOptionally, ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL",children:"FUEL"})," may be used to override the default fuel type specification for\nthe installation. If not specified, it will inherit that of the installation."]}),"\n",(0,s.jsx)(n.admonition,{title:"What happens when fuel is specified?",type:"tip",children:(0,s.jsxs)(n.p,{children:["When ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL",children:"FUEL"})," is defined for a generator set, there is no merging between the installation fuel\ndefinition and the generator set fuel definition, but a complete override of the configuration."]})}),"\n",(0,s.jsxs)(n.p,{children:["Category can be either ",(0,s.jsx)(n.code,{children:"TURBINE-GENERATOR"})," or ",(0,s.jsx)(n.code,{children:"POWER-FROM-SHORE"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"GENERATORSETS:\n - NAME: <generatorset name>\n CATEGORY: <category>\n FUEL: <optional fuel configuration reference>\n ELECTRICITY2FUEL: <electricity to fuel facility input reference>\n CONSUMERS:\n ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"electricity2fuel-function",children:"Electricity2fuel function"}),"\n",(0,s.jsx)(n.h3,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["The behavior of a generator set is described by an ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"}),"\ntable, which relates the burned fuel rate to delivered power, including the power generation efficiency at different loads.\nIt also defines the operational envelope of the generator set."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," may be modeled with a constant function through time or\nwith different power vs. fuel relations for different time intervals."]}),"\n",(0,s.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ELECTRICITY2FUEL: <facility_input_reference>\n"})}),"\n",(0,s.jsx)(n.p,{children:"or"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ELECTRICITY2FUEL:\n <DATE>: <facility_input_reference_1>\n <DATE>: <facility_input_reference_2>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"power-from-shore",children:"Power from shore"}),"\n",(0,s.jsx)(n.h3,{id:"description-1",children:"Description"}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Power from shore is currently handled in eCalc\u2122 by defining a dummy ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," model with zero fuel usage, and applying the ",(0,s.jsx)(n.code,{children:"POWER-FROM-SHORE"})," category. This is an intermediate solution and will be dealt with differently in the future."]})}),"\n",(0,s.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["Make an ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," input file with zero fuel usage."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"POWER, FUEL\n# [MW], [SM3/day]\n0, 0\n50, 0\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Specify ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," under\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: genset_pfs\n TYPE: ELECTRICITY2FUEL\n FILE: genset_pfs.csv\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.code,{children:"POWER-FROM-SHORE"})," category and the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"}),"\nspecified under ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"GENERATORSETS:\n - NAME: generatorset_with_pfs_event\n CATEGORY:\n 2020-01-01: TURBINE-GENERATOR\n 2030-01-01: POWER-FROM-SHORE\n ELECTRICITY2FUEL:\n 2020-01-01: genset_turbine\n 2030-01-01: genset_pfs\n CONSUMERS:\n ...\n"})}),"\n",(0,s.jsx)(n.p,{children:"If power from shore is used for the full time range you can skip the dates in both CATEGORY and ELECTRICITY2FUEL"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"GENERATORSETS:\n - NAME: generatorset_with_pfs_event\n CATEGORY: POWER-FROM-SHORE\n ELECTRICITY2FUEL: genset_pfs\n CONSUMERS:\n ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"heaters-and-boilers",children:"Heaters and boilers"}),"\n",(0,s.jsx)(n.h3,{id:"description-2",children:"Description"}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Heaters and boilers should be modeled in eCalc\u2122 as\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"}),", applying the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"HEATER"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"BOILER"})," categories. This is an intermediate solution and may be dealt with differently in the future."]})}),"\n",(0,s.jsx)(n.h3,{id:"example-boiler-as-generator-set",children:"Example: Boiler as generator set"}),"\n",(0,s.jsxs)(n.p,{children:["Specify the correlation between energy delivered and fuel consumed under\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: boiler_energy_fuel\n TYPE: ELECTRICITY2FUEL\n FILE: boiler_energy_fuel.csv\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.code,{children:"BOILER"})," category and the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"}),"\nspecified under ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"GENERATORSETS:\n - NAME: boiler_as_generator\n CATEGORY: BOILER\n ELECTRICITY2FUEL: boiler_energy_fuel\n CONSUMERS:\n ...\n"})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>o,a:()=>a});var s=r(7294);const t={},i=s.createContext(t);function a(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/eee46244.ee073dd9.js b/assets/js/eee46244.ee073dd9.js new file mode 100644 index 0000000000..cb77754ff4 --- /dev/null +++ b/assets/js/eee46244.ee073dd9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7154],{2593:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>t,default:()=>h,frontMatter:()=>l,metadata:()=>a,toc:()=>c});var i=s(5893),r=s(1151);const l={slug:"v7-5-release",title:"v7.5",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:8},t="eCalc v7.5",a={id:"changelog/v7-5",title:"v7.5",description:"Features",source:"@site/docs/changelog/v7-5.md",sourceDirName:"changelog",slug:"/changelog/v7-5-release",permalink:"/ecalc/docs/changelog/v7-5-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-5.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:8,frontMatter:{slug:"v7-5-release",title:"v7.5",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:8},sidebar:"changelog",previous:{title:"v7.4",permalink:"/ecalc/docs/changelog/v7-4-release"},next:{title:"v7.6",permalink:"/ecalc/docs/changelog/v7-6-release"}},o={},c=[{value:"Features",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2},{value:"CLI",id:"cli",level:2}];function d(e){const n={em:"em",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"ecalc-v75",children:"eCalc v7.5"}),"\n",(0,i.jsx)(n.h2,{id:"features",children:"Features"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Add YAML interface for PRESSURE_CONTROL for Single and Variable Speed Compressor Train"}),"\n",(0,i.jsx)(n.li,{children:"Add support for PRESSURE_CONTROL: NONE for Variable Speed Compressor Train"}),"\n",(0,i.jsx)(n.li,{children:"Run GENERATORSETS at max capacity with invalid timestep-flags instead of forward-filling last valid value (extrapcorrection)"}),"\n",(0,i.jsx)(n.li,{children:"Add support for uploading models as a zip-file"}),"\n",(0,i.jsx)(n.li,{children:"Apply resampling by FREQUENCY when exporting CSV"}),"\n",(0,i.jsx)(n.li,{children:"Support single speed compressor chart as csv resource"}),"\n",(0,i.jsx)(n.li,{children:"Improved support for uploading YAML-files. Comments, whitespaces, inline lists should now be preserved instead of removed and reformatted"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"fixes",children:(0,i.jsx)(n.em,{children:"Fixes"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add missing power loss factor for Compressor Train Variable Speed Multiple Pressure model."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Ensure that GENERATORSETS stops when consumer power rate is zero"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Ensure invalid time-step and zero power rate for the genset when the el-consumer(s) starts before the Genset providing power."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Correct handling of power rate in LTP export wen combining compressors with and without fuel in temporal models."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"validate order of temporal models"}),"\n",(0,i.jsx)(n.p,{children:"Temporal models should be specified in chronological order"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"validation of variable names"}),"\n",(0,i.jsx)(n.p,{children:"Make sure the full variable name is matched against the regular expression.\nPreviously we allowed special characters for all characters except the first."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Avoid crash when ENERGY_USAGE_MODELs are defined only outside the time window of the CONSUMER."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Proper result handling when GENERATORSETS has not yet started and el-consumer is running."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"cli",children:"CLI"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"add --skip-validation argument"}),"\n",(0,i.jsx)(n.p,{children:"Make it possible to skip the validation step, passing the data to the next step. This will still have some\nvalidation and might give a more clear error message."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"add --simple-output argument"}),"\n",(0,i.jsx)(n.p,{children:"Use simple output argument to get a simplified result object showing only the most relevant results such as\nenergy consumption and emissions."}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var i=s(7294);const r={},l=i.createContext(r);function t(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f054b415.004ce3ac.js b/assets/js/f054b415.004ce3ac.js new file mode 100644 index 0000000000..3f6be3af40 --- /dev/null +++ b/assets/js/f054b415.004ce3ac.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7652],{9846:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var n=o(5893),i=o(1151);const r={title:"Theory",sidebar_position:1,description:"Core theory about eCalc\u2122"},c=void 0,a={id:"about/modelling/theory/index",title:"Theory",description:"Core theory about eCalc\u2122",source:"@site/docs/about/modelling/theory/index.md",sourceDirName:"about/modelling/theory",slug:"/about/modelling/theory/",permalink:"/ecalc/docs/about/modelling/theory/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/theory/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Theory",sidebar_position:1,description:"Core theory about eCalc\u2122"},sidebar:"about",previous:{title:"Modelling guide",permalink:"/ecalc/docs/about/modelling/"},next:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/theory/pump_modelling"}},s={},l=[];function d(e){const t={p:"p",...(0,i.a)(),...e.components};return(0,n.jsx)(t.p,{children:"This section will describe core pump and compressor theory that is used in eCalc\u2122."})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,t,o)=>{o.d(t,{Z:()=>a,a:()=>c});var n=o(7294);const i={},r=n.createContext(i);function c(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f52ed7e3.35da5637.js b/assets/js/f52ed7e3.35da5637.js new file mode 100644 index 0000000000..d50964b0e6 --- /dev/null +++ b/assets/js/f52ed7e3.35da5637.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9922],{2197:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=r(5893),n=r(1151);const i={title:"Time series",sidebar_position:2,description:"Time series guide and description"},o=void 0,a={id:"about/modelling/setup/time_series",title:"Time series",description:"Time series guide and description",source:"@site/docs/about/modelling/setup/time_series.md",sourceDirName:"about/modelling/setup",slug:"/about/modelling/setup/time_series",permalink:"/ecalc/docs/about/modelling/setup/time_series",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/time_series.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Time series",sidebar_position:2,description:"Time series guide and description"},sidebar:"about",previous:{title:"Expressions",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions"},next:{title:"Facility inputs",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/"}},d={},c=[{value:"Supported types",id:"supported-types",level:2},{value:"Format",id:"format",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Example",id:"example",level:2}];function l(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," keyword is ",(0,t.jsx)(s.strong,{children:"mandatory"})," within the eCalc\u2122 YAML file."]})}),"\n",(0,t.jsx)(s.p,{children:'This part of the setup file defines the inputs for time dependent variables, or "reservoir\nvariables". For many fields, this may be only one reservoir simulation model. But in some\ncases, one might have several sources for reservoir and other relevant time series variables.'}),"\n",(0,t.jsxs)(s.p,{children:["For example, a field may have a reservoir simulation model for some areas and decline curves in other area of\nthe reservoir. There may also be tie-ins which are affecting the energy/emissions on the field\ninstallations. Also, there may be time profiles for other variables.\nTherefore, a set of sources may be specified with a name, path to data and type. The name is\nlater referred to in the system of energy consumers defined under ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Reservoir variables and other time varying data not coming from a reservoir simulation model can\nbe specified in a ",(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Comma-separated_values",children:"CSV"})," file."]}),"\n",(0,t.jsx)(s.p,{children:"The paths to the input files may be either absolute or relative to the setup file."}),"\n",(0,t.jsx)(s.h2,{id:"supported-types",children:"Supported types"}),"\n",(0,t.jsx)(s.p,{children:"The supported time series types are:"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Supported file formats"}),(0,t.jsx)(s.th,{children:"Interpolation type"}),(0,t.jsx)(s.th,{children:"Comment"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"DEFAULT"}),(0,t.jsx)(s.td,{children:".csv"}),(0,t.jsxs)(s.td,{children:["Not possible to specify: ",(0,t.jsx)("br",{}),(0,t.jsx)(s.code,{children:"RIGHT"})," is used"]}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:"New in v8.1"})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"MISCELLANEOUS"}),(0,t.jsx)(s.td,{children:".csv"}),(0,t.jsxs)(s.td,{children:["Mandatory input:",(0,t.jsx)("br",{}),(0,t.jsx)(s.code,{children:"LEFT"}),"/",(0,t.jsx)(s.code,{children:"RIGHT"}),"/",(0,t.jsx)(s.code,{children:"LINEAR"})]}),(0,t.jsx)(s.td,{})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,t.jsxs)(s.p,{children:["Each line under ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," has the format:"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: <time series reference name>\n TYPE: <type>\n FILE: <path_to_file>\n INFLUENCE_TIME_VECTOR: <True/False>\n EXTRAPOLATION: <True/False>\n INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>\n"})}),"\n",(0,t.jsxs)(s.p,{children:["The input data is expected to be in metric units. The ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"})," is later referred\nto in the ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup file.\n",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",children:"INFLUENCE_TIME_VECTOR"}),", ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/EXTRAPOLATION",children:"EXTRAPOLATION"}),"\nand ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})," may have default values set depending\non the choice of ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"}),". See the documentation for each keyword for details."]}),"\n",(0,t.jsx)(s.h3,{id:"requirements",children:"Requirements"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["At least one input source with ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",children:"INFLUENCE_TIME_VECTOR"})," set to True."]}),"\n",(0,t.jsx)(s.li,{children:"Must include sources referred to in the variables for each consumer."}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: SIM1\n TYPE: DEFAULT\n FILE: /path_to_model1/model_data.csv\n - NAME: SIM2\n TYPE: DEFAULT\n FILE: /path_to_tiein/tie_in_field.csv\n - NAME: DATA3\n TYPE: MISCELLANEOUS # e.g. variable flare, compressor suction and discharge pressures\n FILE: inputs/somecsvdata.csv\n INFLUENCE_TIME_VECTOR: FALSE\n EXTRAPOLATION: TRUE\n INTERPOLATION_TYPE: RIGHT\n"})})]})}function h(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,s,r)=>{r.d(s,{Z:()=>a,a:()=>o});var t=r(7294);const n={},i=t.createContext(n);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f54e894e.8575b06c.js b/assets/js/f54e894e.8575b06c.js new file mode 100644 index 0000000000..2f9265ea0c --- /dev/null +++ b/assets/js/f54e894e.8575b06c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[770],{3790:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>E,frontMatter:()=>t,metadata:()=>o,toc:()=>d});var i=s(5893),r=s(1151);const t={sidebar_position:4,title:"Drogon model",description:"Model using Drogon input data"},l="Drogon model example",o={id:"about/modelling/examples/drogon",title:"Drogon model",description:"Model using Drogon input data",source:"@site/docs/about/modelling/examples/drogon.md",sourceDirName:"about/modelling/examples",slug:"/about/modelling/examples/drogon",permalink:"/ecalc/docs/about/modelling/examples/drogon",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/examples/drogon.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,title:"Drogon model",description:"Model using Drogon input data"},sidebar:"about",previous:{title:"Advanced model",permalink:"/ecalc/docs/about/modelling/examples/advanced"},next:{title:"Reference documentation",permalink:"/ecalc/docs/about/references/"}},a={},d=[{value:"YAML model overview",id:"yaml-model-overview",level:2},{value:"TIME_SERIES",id:"time_series",level:2},{value:"FACILITY_INPUTS",id:"facility_inputs",level:2},{value:"MODELS",id:"models",level:2},{value:"FUEL_TYPES",id:"fuel_types",level:2},{value:"INSTALLATIONS",id:"installations",level:2},{value:"GENERATORSETS",id:"generatorsets",level:3},{value:"PUMPS",id:"pumps",level:4},{value:"COMPRESSORS",id:"compressors",level:4},{value:"BASE-LOAD",id:"base-load",level:4},{value:"Full Model",id:"full-model",level:2},{value:"Input Data",id:"input-data",level:2},{value:"Facility resources",id:"facility-resources",level:3},{value:"Timeseries resources",id:"timeseries-resources",level:3}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",mermaid:"mermaid",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"drogon-model-example",children:"Drogon model example"}),"\n",(0,i.jsx)(n.p,{children:"The Drogon example is based on a synthetic data set."}),"\n",(0,i.jsx)(n.p,{children:"On the installation, the following consumers are identified:"}),"\n",(0,i.jsx)(n.mermaid,{chart:"graph TD;\n A(Drogon Installation) --\x3e B(Generator set A);\n B --\x3e C(Base production load);\n B --\x3e D(Gas compression train);\n B --\x3e E(Gas re-compressors);\n B --\x3e F(Sea water injection pump);\n B --\x3e G(Booster pump);\n style A stroke:red;\n style C stroke:blue;\n style D stroke:blue;\n style E stroke:blue;\n style F stroke:blue;\n style G stroke:blue;"}),"\n",(0,i.jsx)(n.p,{children:"The results of a performed characterization of the equipment are listed below:"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Consumer"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Generator set A"}),(0,i.jsx)(n.td,{children:"Generator set"}),(0,i.jsx)(n.td,{children:"Variable fuel consumer with electricity to fuel function"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Base production load"}),(0,i.jsx)(n.td,{children:"Power consumer"}),(0,i.jsx)(n.td,{children:"Constant load - 9 MW"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Gas compression train"}),(0,i.jsx)(n.td,{children:"Power consumer"}),(0,i.jsx)(n.td,{children:"Variable consumption depending on produced gas rate"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Gas re-compressors"}),(0,i.jsx)(n.td,{children:"Power consumer"}),(0,i.jsx)(n.td,{children:"Constant load - 2 MW"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Sea water injection pump"}),(0,i.jsx)(n.td,{children:"Power consumer"}),(0,i.jsx)(n.td,{children:"Variable consumption depending on water injection rate"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Booster pump"}),(0,i.jsx)(n.td,{children:"Power consumer"}),(0,i.jsx)(n.td,{children:"Constant load - 2 MW"})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"yaml-model-overview",children:"YAML model overview"}),"\n",(0,i.jsx)(n.p,{children:"The YAML model consists of the following components:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Time series input"}),"\n",(0,i.jsx)(n.li,{children:"Facility inputs"}),"\n",(0,i.jsx)(n.li,{children:"Model inputs"}),"\n",(0,i.jsx)(n.li,{children:"Fuel type input"}),"\n",(0,i.jsx)(n.li,{children:"Installation topography"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"The skeleton of the YAML file looks like the following:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES: \n <placeholder>\nFACILITY_INPUTS:\n <placeholder>\nMODELS:\n <placeholder>\nFUEL_TYPES:\n <placeholder>\nINSTALLATIONS:\n <placeholder>\n"})}),"\n",(0,i.jsx)(n.h2,{id:"time_series",children:"TIME_SERIES"}),"\n",(0,i.jsxs)(n.p,{children:["The reservoir variables. In this case the file is called: ",(0,i.jsx)(n.code,{children:"drogon_mean.csv"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES: \n - NAME: SIM1\n TYPE: DEFAULT\n FILE: drogon_mean.csv\n"})}),"\n",(0,i.jsx)(n.h2,{id:"facility_inputs",children:"FACILITY_INPUTS"}),"\n",(0,i.jsxs)(n.p,{children:["In this case, the compressors are not specified in this section as ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"GENERIC COMPRESSOR CHARTS"}),". Thus, the pump chart and generator set will be the only facility components specified within this section."]}),"\n",(0,i.jsxs)(n.p,{children:["The pump will be single speed, meaning that the pump type will be ",(0,i.jsx)(n.code,{children:"PUMP_CHART_SINGLE_SPEED"}),". The generator set will be a tabulated, where power consumption will be linked to fuel gas utilised."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS: \n - NAME: genset_a_power_fuel\n TYPE: ELECTRICITY2FUEL\n FILE: genset.csv\n - NAME: wi_200\n FILE: wi_200bar_ssp.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\n"})}),"\n",(0,i.jsx)(n.h2,{id:"models",children:"MODELS"}),"\n",(0,i.jsx)(n.p,{children:"The model section will contain the fluid model, the compressor chart and the subsequent compressor model.\nPeng-Robinson (PR) will be the selected equation of state in this example."}),"\n",(0,i.jsxs)(n.p,{children:['This example will use a generic compressor chart. In this case, a generic compressor chart from input will utilised. Here, the a "typical" chart will be shifted to match the input head and rate data. See ',(0,i.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"GENERIC COMPRESSOR CHARTS"})," for more details. When a generic chart is used, a polytropic efficiency needs to be specified. This value will be constant throughout the use, in this case a value of 0.8 is used."]}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"})," model is used in this example, as this is necessary when a generic chart is used. Instead of manually specifying the number of compression stages, a ",(0,i.jsx)(n.code,{children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"})," of 3.5 is defined. This will automatically distribute the pressure increase amongst the compression train so that no pressure ratio per compression stage will be above 3.5."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: drogon_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: PR\n COMPOSITION:\n water: 0.0\n nitrogen: 0.510676386339746\n CO2: 2.44965511776504\n methane: 75.6328106126248\n ethane: 10.9074631209139\n propane: 8.11875087121037\n i_butane: 0.849146377471569\n n_butane: 1.34903656604691\n i_pentane: 0.104982143381498\n n_pentane: 0.071218218251483\n n_hexane: 0.0063\n\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: 0.8\n UNITS:\n EFFICIENCY: FRACTION\n\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: drogon_fluid\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n INLET_TEMPERATURE: 19.3\n"})}),"\n",(0,i.jsx)(n.h2,{id:"fuel_types",children:"FUEL_TYPES"}),"\n",(0,i.jsxs)(n.p,{children:["The fuel gas has a CO",(0,i.jsx)("sub",{children:"2"})," factor of 2.416."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"FUEL_TYPES:\n - NAME: fuel_gas\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.416 #CO2/Sm3 fuel gas burned\n"})}),"\n",(0,i.jsx)(n.h2,{id:"installations",children:"INSTALLATIONS"}),"\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.code,{children:"INSTALLATIONS"})," section, the previously defined models and facility inputs are further defined. Here the hydrocarbon export can be specified. This is used in order to get a hydrocarbon-to-emission value. In this case, it is assumed that this facility exports oil (",(0,i.jsx)(n.code,{children:"OIL_PROD"}),") and gas (",(0,i.jsx)(n.code,{children:"GAS_PROD"}),")."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: drogon_installation\n CATEGORY: FIXED\n HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000\n FUEL: fuel_gas\n"})}),"\n",(0,i.jsx)(n.h3,{id:"generatorsets",children:"GENERATORSETS"}),"\n",(0,i.jsxs)(n.p,{children:["There is one generator set used in this example - ",(0,i.jsx)(n.code,{children:"Generator set A"}),". This is a tabular relationship between power generated/consumed and fuel gas burnt.\nUnder this category, all consumers that utilise electricity are defined. In this case scenario, all pumps and compressors are electrically driven; thus, all consumers will be specified under this category."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" GENERATORSETS:\n - NAME: main_power\n ELECTRICITY2FUEL: genset_a_power_fuel\n CATEGORY: TURBINE-GENERATOR\n CONSUMERS:\n"})}),"\n",(0,i.jsx)(n.h4,{id:"pumps",children:"PUMPS"}),"\n",(0,i.jsxs)(n.p,{children:["The previously defined variable speed pump (in ",(0,i.jsx)(n.code,{children:"FACILITY_INPUTS"}),") is put into further defined with suction and discharge pressures, rates and operational settings."]}),"\n",(0,i.jsxs)(n.p,{children:["Here, a system of pumps is used. This means that instead of a single pump being used to deliver the respective injection rate, a system of pumps is defined. In this case, a system of two pumps will be used. If the first pump is unable to deliver the requested head or rate, a second pump will be additionally used and the rate will be split across the pump system.\nAs only one pump has been defined, the same pump model will be used for each train. As each pump is identical, the rate will be equally split across the train when needed (this is to ensure the highest pump efficiency - see ",(0,i.jsx)(n.a,{href:"../setup/installations/pump_models_in_calculations",children:"PUMP MODELLING"})," for more details.)"]}),"\n",(0,i.jsxs)(n.p,{children:["A fluid density of 1025 kg/m",(0,i.jsx)("sup",{children:"3"})," is used, with a suction and discharge pressure of 12 and 200 bar respectively."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" - NAME: water injection\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump_a_lp\n CHART: wi_200\n - NAME: pump_b_lp\n CHART: wi_200\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: 1025\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS:\n - 1\n - 0\n SUCTION_PRESSURE: 12\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS:\n - 0.5\n - 0.5\n SUCTION_PRESSURE: 12\n DISCHARGE_PRESSURE: 200\n"})}),"\n",(0,i.jsx)(n.h4,{id:"compressors",children:"COMPRESSORS"}),"\n",(0,i.jsx)(n.p,{children:"For the compression model, a compressor system is not used. This is due to the use of generic compressor charts. As the generic charts are shifted from input data there is no need for an additional compression train. No matter what rate/head values are inputted here, the generic chart is shifted so that all operational points will be within the operational envelope of the compressor."}),"\n",(0,i.jsx)(n.p,{children:"Here, 13 bar and 421 bar is specified for the suction and discharge pressure respectively."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" - NAME: gas export compressor train\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: train1_2\n COMPRESSOR_MODEL: simplified_compressor_train_model\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS:\n - 1\n SUCTION_PRESSURE: 13\n DISCHARGE_PRESSURE: 421\n"})}),"\n",(0,i.jsx)(n.h4,{id:"base-load",children:"BASE-LOAD"}),"\n",(0,i.jsx)(n.p,{children:"Three different constant-loads are specified in this section. These being the booster pump, the re-compressors and then the general facility base-load."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" - NAME: boosterpump\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 2\n - NAME: baseload\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 9\n - NAME: re-compressors\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 2\n\n"})}),"\n",(0,i.jsx)(n.h2,{id:"full-model",children:"Full Model"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: SIM1\n FILE: drogon_mean.csv\n TYPE: DEFAULT\nFACILITY_INPUTS:\n - NAME: genset_a_power_fuel\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: wi_200\n FILE: wi_200bar_ssp.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\nMODELS:\n - NAME: drogon_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: PR\n COMPOSITION:\n water: 0.0\n nitrogen: 0.510676386339746\n CO2: 2.44965511776504\n methane: 75.6328106126248\n ethane: 10.9074631209139\n propane: 8.11875087121037\n i_butane: 0.849146377471569\n n_butane: 1.34903656604691\n i_pentane: 0.104982143381498\n n_pentane: 0.071218218251483\n n_hexane: 0.0063\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: 0.8\n UNITS:\n EFFICIENCY: FRACTION\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: drogon_fluid\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n INLET_TEMPERATURE: 19.3\nFUEL_TYPES:\n - NAME: fuel_gas\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: co2_fuel_gas\n FACTOR: 2.416\nINSTALLATIONS:\n - NAME: drogon_installation\n CATEGORY: FIXED\n HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000\n FUEL: fuel_gas\n GENERATORSETS:\n - NAME: main_power\n ELECTRICITY2FUEL: genset_a_power_fuel\n CATEGORY: TURBINE-GENERATOR\n CONSUMERS:\n - NAME: wi_lp\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump_a_lp\n CHART: wi_200\n - NAME: pump_b_lp\n CHART: wi_200\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: 1025\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS:\n - 1\n - 0\n SUCTION_PRESSURE: 12\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS:\n - 0.5\n - 0.5\n SUCTION_PRESSURE: 12\n DISCHARGE_PRESSURE: 200\n \n - NAME: gas export compressor train\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: train1_2\n COMPRESSOR_MODEL: simplified_compressor_train_model\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS:\n - 1\n SUCTION_PRESSURE: 13\n DISCHARGE_PRESSURE: 421\n\n - NAME: boosterpump\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 2\n - NAME: baseload\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 9\n - NAME: re-compressors\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 2\n"})}),"\n",(0,i.jsx)(n.h2,{id:"input-data",children:"Input Data"}),"\n",(0,i.jsx)(n.h3,{id:"facility-resources",children:"Facility resources"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",metastring:'title="genset.csv"',children:"POWER, FUEL\n# [MW], [Sm3/d]\n0,0\n2.38,37766.13\n4.76,50769.26\n5.9,59258.52\n7.14,63772.39\n9.52,76775.52\n10.71,83277.09\n11.9,89808.09\n14.28,102781.8\n16.66,115784.9\n17.8,119883.6\n19.04,128788\n21.42,141791.2\n21.4201,166554.2\n28.56,205563.6\n33.32,231569.8\n38.08,257576.1\n42.84,283582.3\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",metastring:'title="wi_200bar_ssp.csv"',children:"RATE,HEAD,EFFICIENCY,SPEED\n830,1490,81,3741\n800,1550,81.7,3741\n600,1825,78,3741\n500,1915,72.5,3741\n415,1955,66,3741\n"})}),"\n",(0,i.jsx)(n.h3,{id:"timeseries-resources",children:"Timeseries resources"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",metastring:'title="drogon_mean.csv"',children:"DATE,GAS_PROD,OIL_PROD,WATER_INJ\n01.01.2020,329327.76,2301.9189,3796.9621\n01.01.2021,533620.39,3699.8435,8533.0322\n01.01.2022,416004.76,2837.5915,9434.1385\n01.01.2023,340118.19,2280.7372,10019.154\n01.01.2024,290127.01,1905.7952,10428.387\n01.01.2025,253292.19,1635.7671,10725.254\n01.01.2026,223584.53,1426.9726,10954.338\n01.01.2027,198453.07,1249.781,11153.675\n01.01.2028,177306.77,1099.8572,11318.01\n01.01.2029,159723.78,977.37529,11450.614\n01.01.2030,145056.33,875.30836,11561.335\n01.01.2031,132577.75,788.45521,11654.645\n01.01.2032,122166.68,715.64707,11734.129\n01.01.2033,113070.74,653.71407,11802.565\n01.01.2034,105114.67,600.04874,11860.717\n01.01.2035,98147.958,553.56297,11910.283\n"})})]})}function E(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>o,a:()=>l});var i=s(7294);const r={},t=i.createContext(r);function l(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f571fee5.672920cc.js b/assets/js/f571fee5.672920cc.js new file mode 100644 index 0000000000..64057ad3e0 --- /dev/null +++ b/assets/js/f571fee5.672920cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[505],{4132:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var s=n(5893),r=n(1151);const i={title:"YAML keywords",sidebar_position:2,description:"eCalc KEYWORDS"},d="Keywords",o={id:"about/references/keywords/index",title:"YAML keywords",description:"eCalc KEYWORDS",source:"@site/docs/about/references/keywords/index.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/",permalink:"/ecalc/docs/about/references/keywords/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"YAML keywords",sidebar_position:2,description:"eCalc KEYWORDS"},sidebar:"about",previous:{title:"Reference documentation",permalink:"/ecalc/docs/about/references/"},next:{title:"ADJUSTMENT",permalink:"/ecalc/docs/about/references/keywords/ADJUSTMENT"}},c={},l=[{value:"Top level keywords",id:"top-level-keywords",level:2}];function a(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"keywords",children:"Keywords"}),"\n",(0,s.jsxs)(t.p,{children:["eCalc models are defined using keywords in ",(0,s.jsx)(t.code,{children:"YAML"})," (YAML Ain't Markup Language) model files. This\npage gives an overview of the top level keywords as well as and overview of all available keywords in\neCalc with a short description."]}),"\n",(0,s.jsx)(t.h2,{id:"top-level-keywords",children:"Top level keywords"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Keyword"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Description"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"END",children:"END"})}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Global end date for eCalc calculations."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"FACILITY_INPUTS",children:"FACILITY_INPUTS"})}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"List of input files from facility characterization."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"FUEL_TYPES",children:"FUEL_TYPES"})}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Definition(s) the fuel type(s) being used in the model and the corresponding emissions."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"INSTALLATIONS",children:"INSTALLATIONS"})}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"Definitions of the system of energy consumers on each installation (e.g. platform)."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"START",children:"START"})}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Global start date for eCalc calculations."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"TIME_SERIES",children:"TIME_SERIES"})}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"List of input sources (files) containing all time series data."})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>d});var s=n(7294);const r={},i=s.createContext(r);function d(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f577f5c2.82507ca7.js b/assets/js/f577f5c2.82507ca7.js new file mode 100644 index 0000000000..d3e9e94d60 --- /dev/null +++ b/assets/js/f577f5c2.82507ca7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7959],{7335:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var i=n(5893),s=n(1151);const t={title:"Compressor charts",sidebar_position:2,description:"Introduction into compressor charts"},o="Compressor chart",a={id:"about/modelling/setup/models/compressor_modelling/compressor_charts/index",title:"Compressor charts",description:"Introduction into compressor charts",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_charts",slug:"/about/modelling/setup/models/compressor_modelling/compressor_charts/",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Compressor charts",sidebar_position:2,description:"Introduction into compressor charts"},sidebar:"about",previous:{title:"Compressor modelling",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/"},next:{title:"Compressor train types",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"}},c={},l=[{value:"User defined single speed compressor chart",id:"user-defined-single-speed-compressor-chart",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3},{value:"Format",id:"format-1",level:4},{value:"Example",id:"example-1",level:4},{value:"User defined variable speed compressor chart",id:"user-defined-variable-speed-compressor-chart",level:2},{value:"Format",id:"format-2",level:3},{value:"Example",id:"example-2",level:3},{value:"Format",id:"format-3",level:4},{value:"Example",id:"example-3",level:4},{value:"Generic compressor chart with predefined design point",id:"generic-compressor-chart-with-predefined-design-point",level:2},{value:"Format",id:"format-4",level:3},{value:"Example",id:"example-4",level:3},{value:"Example",id:"example-5",level:3},{value:"Generic compressor chart with design point calculated from input data",id:"generic-compressor-chart-with-design-point-calculated-from-input-data",level:2},{value:"Format",id:"format-5",level:3},{value:"Example",id:"example-6",level:3},{value:"Surge control margin for variable speed compressor chart",id:"surge-control-margin-for-variable-speed-compressor-chart",level:2},{value:"Format",id:"format-6",level:3}];function d(e){const r={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.h1,{id:"compressor-chart",children:"Compressor chart"}),"\n",(0,i.jsx)(r.p,{children:"The compressor chart is used to set up a model of each compressor. eCalc\u2122 currently support four ways to set up a\ncompressor chart"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"Predefined single speed chart"}),"\n",(0,i.jsx)(r.li,{children:"Predefined variable speed chart"}),"\n",(0,i.jsx)(r.li,{children:"Generic compressor chart with a specified design point"}),"\n",(0,i.jsx)(r.li,{children:"Generic compressor chart which is automatically adjusted to have capacity for the input data"}),"\n"]}),"\n",(0,i.jsx)(r.h2,{id:"user-defined-single-speed-compressor-chart",children:"User defined single speed compressor chart"}),"\n",(0,i.jsxs)(r.p,{children:["The single speed chart type allows a single compressor curve for one speed, using the keyword ",(0,i.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CURVE",children:"CURVE"})]}),"\n",(0,i.jsx)(r.h3,{id:"format",children:"Format"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n CURVE:\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n"})}),"\n",(0,i.jsx)(r.h3,{id:"example",children:"Example"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_single_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVE:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n"})}),"\n",(0,i.jsxs)(r.admonition,{title:"Tip",type:"tip",children:[(0,i.jsx)(r.p,{children:"It is also possible to input single speed compressor chart as csv file."}),(0,i.jsx)(r.h4,{id:"format-1",children:"Format"}),(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"CURVE:\n FILE: <csv file with single speed compressor chart>\n"})}),(0,i.jsx)(r.h4,{id:"example-1",children:"Example"}),(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"CURVE:\n FILE: compressor_chart_single_speed.csv\n"})})]}),"\n",(0,i.jsx)(r.h2,{id:"user-defined-variable-speed-compressor-chart",children:"User defined variable speed compressor chart"}),"\n",(0,i.jsxs)(r.p,{children:["The variable speed chart type allows a fully defined compressor chart with data for two or more speeds, using the keyword ",(0,i.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CURVES",children:"CURVES"}),". The upper and\nlower speed curves will be interpreted as the speed capacity limits for the chart.\nWhilst the lowest rate points on each of the upper and lower speed curves will define the minimum flow line for the compressor."]}),"\n",(0,i.jsxs)(r.p,{children:["Additionally, there is functionality to define a control line which behaves as an alternate to the minimum flow line. This means that your input will be 'cropped' to only include points to the right of the control line - modelling recirculation (",(0,i.jsx)(r.code,{children:"ASV"}),") from the correct control line.\nSee ",(0,i.jsx)(r.code,{children:"Surge control margin for variable speed compressor chart"})," for more details."]}),"\n",(0,i.jsx)(r.admonition,{type:"note",children:(0,i.jsx)(r.p,{children:"Using a variable speed compressor chart as input essentially does the same as if a process simulation tool was used to\ncreate an energy function. It has been verified to be close to identical to Unisim within 2% accuracy (smaller\ndifferences in density arise from differences in PVT assumptions and calculations)."})}),"\n",(0,i.jsx)(r.h3,{id:"format-2",children:"Format"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n CURVES:\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n - ... and so forth for all chart curves. Minimum two curves needed.\n"})}),"\n",(0,i.jsx)(r.h3,{id:"example-2",children:"Example"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 9886\n RATE: [3708, 4502, 4993.6, 5507, 5924]\n HEAD: [13845, 13182, 12425, 11276, 10054]\n EFFICIENCY: [ 0.72, 0.75, 0.748, 0.73, 0.70]\n - SPEED: 10767\n RATE: [4052, 4500, 4999, 5492, 6000, 6439,]\n HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]\n EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]\n"})}),"\n",(0,i.jsxs)(r.admonition,{title:"Tip",type:"tip",children:[(0,i.jsx)(r.p,{children:"It is also possible to input variable speed compressor chart as csv file."}),(0,i.jsx)(r.h4,{id:"format-3",children:"Format"}),(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"CURVES:\n FILE: <csv file with variable speed compressor chart>\n"})}),(0,i.jsx)(r.h4,{id:"example-3",children:"Example"}),(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"CURVES:\n FILE: compressor_chart_variable_speed.csv\n"})})]}),"\n",(0,i.jsx)(r.h2,{id:"generic-compressor-chart-with-predefined-design-point",children:"Generic compressor chart with predefined design point"}),"\n",(0,i.jsx)(r.p,{children:'The generic compressor chart used is an "average" chart of compressors used on the NCS and cannot be expected to be equal to\nthe actual chart for a compressor which has been designed and delivered. However, it can be a good first estimation of\nhow a chart may be for a future process not yet in the design phase.'}),"\n",(0,i.jsxs)(r.p,{children:["This chart will not replace any future compressor curves and it may not be accurate in comparison to the final compressor curve; however, it is a good method to capture the major effects (such as ",(0,i.jsx)(r.code,{children:"ASV"}),' (anti-surge valve) recirculation).\nWith this method it is possible to view how a "typical" compressor curve would react a large spread in the data set. If the design point is set within the middle of the data spread, points with rates lower than the minimum flow will have some recirculation; whilst, too high or unrealistic rates will not be solved. This is an essential difference in comparison to the generic chart with its design point calculated from input data (which is covered in ',(0,i.jsx)(r.code,{children:"Generic compressor chart with design point calculated from input data"}),"), which will shift the entire compressor curve to solve for even the highest rate and head points."]}),"\n",(0,i.jsx)(r.p,{children:"Unified generic compressor chart:"}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{src:n(8501).Z+"",width:"1048",height:"729"})}),"\n",(0,i.jsxs)(r.p,{children:["The compressor chart is created by scaling the unified generic compressor chart in the figure above with a design actual\nrate and head. Note that the rate is here in the units ",(0,i.jsx)(r.em,{children:"am3/hr"})," which is NOT EQUAL to ",(0,i.jsx)(r.em,{children:"Sm3/hr"}),".\nThe units ",(0,i.jsx)(r.em,{children:"am3/hr"})," refers to the volumetric rate at inlet conditions (inlet pressure and temperature), and it will differ from the inputted standard rates\ndue to the difference in density.\nThe design polytropic head is given in either ",(0,i.jsx)(r.em,{children:"kJ/kg"}),", ",(0,i.jsx)(r.em,{children:"m"})," or J/kg, ",(0,i.jsx)(r.code,{children:"UNITS"}),"."]}),"\n",(0,i.jsx)(r.p,{children:"The generic compressor chart is currently accompanied by a fixed polytropic efficiency (polytropic efficiency\nvariations within the chart may be supported in the future)."}),"\n",(0,i.jsx)(r.h3,{id:"format-4",children:"Format"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: <polytropic efficiency of the compressor (fixed number)>\n DESIGN_RATE: <design rate>\n DESIGN_HEAD: <design polytropic head>\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n"})}),"\n",(0,i.jsx)(r.h3,{id:"example-4",children:"Example"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 7000\n DESIGN_HEAD: 50\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n"})}),"\n",(0,i.jsxs)(r.p,{children:["For this method it is important to note that only ",(0,i.jsx)(r.code,{children:"Simplified variable speed compressor train model"})," is supported."]}),"\n",(0,i.jsx)(r.h3,{id:"example-5",children:"Example"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: generic_compression_train_design_point\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: sample_fluid\n PRESSURE_CONTROL: UPSTREAM_CHOKE\n COMPRESSOR_TRAIN:\n STAGES:\n - COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n INLET_TEMPERATURE: 30\n"})}),"\n",(0,i.jsx)(r.h2,{id:"generic-compressor-chart-with-design-point-calculated-from-input-data",children:"Generic compressor chart with design point calculated from input data"}),"\n",(0,i.jsx)(r.admonition,{title:"Caution",type:"caution",children:(0,i.jsxs)(r.p,{children:["Beware that using this functionality in a ",(0,i.jsx)(r.code,{children:"COMPRESSOR_SYSTEM energy usage model"})," can give some unwanted effects.\nE.g. splitting/halving the rates into two equal compressor trains will in effect change the compressor chart for a\ncompressor set up with GENERIC_FROM_INPUT compared to running the full rate through a single compressor train.\nConsider using a single design point instead."]})}),"\n",(0,i.jsx)(r.p,{children:"The generic chart from input is also based on the unified generic compressor chart:"}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{src:n(8501).Z+"",width:"1048",height:"729"})}),"\n",(0,i.jsx)(r.p,{children:"However, in this case the design point is not specified when setting up the model, instead it is estimated at run time and is entirely based on the inputted data set.\nAn algorithm is used to set a design point such that all the input data is within the capacity.\nEven if there is a large spread in the data, all data points will solve. High rate/head data points will just be covered by the curve; whilst low rate points outside the minimum flow point will have recirculation."}),"\n",(0,i.jsxs)(r.p,{children:["This method has one major potential downside in comparison to the ",(0,i.jsx)(r.code,{children:"Generic compressor chart with predefined design point"}),'. As all data points will be covered by the compressor curve, if there is an extremely large or unrealistic head or rate value, the other more "normal" data points will be impacted and will either result in a large head adjustment (via upstream/downstream choking) or it will have a large recirculation rate. This has the potential to skew the entire data set solely due to one unrealistic data point. Thus, if this generic chart is utilised it is important to make sure that unrealistic data is filtered out.']}),"\n",(0,i.jsx)(r.h3,{id:"format-5",children:"Format"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: <polytropic efficiency of the compressor (fixed number)>\n UNITS:\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n"})}),"\n",(0,i.jsx)(r.h3,{id:"example-6",children:"Example"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: 0.75\n UNITS:\n EFFICIENCY: FRACTION\n"})}),"\n",(0,i.jsx)(r.h2,{id:"surge-control-margin-for-variable-speed-compressor-chart",children:"Surge control margin for variable speed compressor chart"}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{src:n(2484).Z+"",width:"1048",height:"729"})}),"\n",(0,i.jsxs)(r.p,{children:["For a variable speed compressor chart it is possible to add a surge control margin. This is currently done by giving a\nfraction or percentage as input. The control margin is used to calculate the increase in minimum flow, i.e. as a percentage\nor fraction of the rate difference between minimum- and maximum flow, for the given speed. The increase in minimum\nflow is calculated individually for each speed curve. The corresponding head and efficiency values for the new minimum flow rate\nis found by interpolation along the speed curves. The same compressor chart can be used for multiple compressor stages,\nbut with different surge control margins. Hence, the surge control margin is defined when setting up the stages in a\n",(0,i.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:(0,i.jsx)(r.code,{children:"Variable speed compressor train model"})})," or ",(0,i.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:(0,i.jsx)(r.code,{children:"Variable speed compressor train model with multiple streams and pressures"})}),"."]}),"\n",(0,i.jsx)(r.h3,{id:"format-6",children:"Format"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in [MODELS]\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Default value is zero>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n"})})]})}function h(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},2484:(e,r,n)=>{n.d(r,{Z:()=>i});const i=n.p+"assets/images/compressor_chart_surge_control_margin_line-98e32f3b0d5332a371ec4bb2dbc66da8.png"},8501:(e,r,n)=>{n.d(r,{Z:()=>i});const i=n.p+"assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png"},1151:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>o});var i=n(7294);const s={},t=i.createContext(s);function o(e){const r=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f59fd0ba.cff0d5d3.js b/assets/js/f59fd0ba.cff0d5d3.js new file mode 100644 index 0000000000..04a4a376b9 --- /dev/null +++ b/assets/js/f59fd0ba.cff0d5d3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2562],{4332:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>i});var t=r(5893),s=r(1151);const o={},c="FLUID_DENSITY",a={id:"about/references/keywords/FLUID_DENSITY",title:"FLUID_DENSITY",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/FLUID_DENSITY.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FLUID_DENSITY",permalink:"/ecalc/docs/about/references/keywords/FLUID_DENSITY",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FLUID_DENSITY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FILE",permalink:"/ecalc/docs/about/references/keywords/FILE"},next:{title:"FLUID_MODEL",permalink:"/ecalc/docs/about/references/keywords/FLUID_MODEL"}},d={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"fluid_density",children:"FLUID_DENSITY"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FLUID_DENSITY",children:"FLUID_DENSITY"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["Used to define the fluid density for\npump type ",(0,t.jsx)(n.code,{children:"energy usage models<ENERGY_USAGE_MODEL>"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"FLUID_DENSITY: <fluid density value or expression>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"FLUID_DENSITY: 1030 # [kg/m3]\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var t=r(7294);const s={},o=t.createContext(s);function c(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f5b92c38.b86ccf1d.js b/assets/js/f5b92c38.b86ccf1d.js new file mode 100644 index 0000000000..f6eeae1d6c --- /dev/null +++ b/assets/js/f5b92c38.b86ccf1d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8984],{4502:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var t=r(5893),s=r(1151);const o={},a="LOWER_HEATING_VALUE",c={id:"about/references/keywords/LOWER_HEATING_VALUE",title:"LOWER_HEATING_VALUE",description:"Description",source:"@site/docs/about/references/keywords/LOWER_HEATING_VALUE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/LOWER_HEATING_VALUE",permalink:"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/LOWER_HEATING_VALUE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"LOAD",permalink:"/ecalc/docs/about/references/keywords/LOAD"},next:{title:"MAXIMUM_DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"lower_heating_value",children:"LOWER_HEATING_VALUE"}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"LOWER_HEATING_VALUE"})," is a required to be specified under the ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TURBINE_MODEL",children:"TURBINE_MODEL"})," keyword.\nThis ",(0,t.jsx)(n.strong,{children:"must"})," be specified in MJ/Sm",(0,t.jsx)("sup",{children:"3"})]}),"\n",(0,t.jsx)(n.p,{children:"This can only be inputted as a single value and dictates the quantity of thermal energy available after burning a standard cubic metre of fuel (natural gas in this gas)."}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n ...\n LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>c,a:()=>a});var t=r(7294);const s={},o=t.createContext(s);function a(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f85d2ba9.7e35db59.js b/assets/js/f85d2ba9.7e35db59.js new file mode 100644 index 0000000000..8767e45271 --- /dev/null +++ b/assets/js/f85d2ba9.7e35db59.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2488],{5745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/f92867ed.ab8e538a.js b/assets/js/f92867ed.ab8e538a.js new file mode 100644 index 0000000000..0afe70ea27 --- /dev/null +++ b/assets/js/f92867ed.ab8e538a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2138],{8134:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var i=t(5893),a=t(1151);const s={slug:"v8.7-release",title:"v8.7 (Latest)",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:17},l="eCalc",r={id:"changelog/v8-7",title:"v8.7 (Latest)",description:"New Features",source:"@site/docs/changelog/v8-7.md",sourceDirName:"changelog",slug:"/changelog/v8.7-release",permalink:"/ecalc/docs/changelog/v8.7-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-7.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:17,frontMatter:{slug:"v8.7-release",title:"v8.7 (Latest)",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:17},sidebar:"changelog",previous:{title:"v8.6",permalink:"/ecalc/docs/changelog/v8.6-release"},next:{title:"Changelog",permalink:"/ecalc/docs/changelog/"}},o={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,i.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Change emission rate type to calendar day, in alignment with the fuel rate which is also calendar day."}),"\n",(0,i.jsx)(n.li,{children:"Update documentation with info about changing name from direct emitters to venting emitters. Both keywords will exist in the documentation for a while, with a description of which keyword is valid for which verisions of eCalc."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Bug in compressor with turbine models with multiple streams and only one date."}),"\n",(0,i.jsx)(n.li,{children:"Fix bug when aggregating model results, where the first model was wrongly reported as the aggregated result."}),"\n",(0,i.jsx)(n.li,{children:"Fix problem with missing compressor chart when combining trains/compressors."}),"\n",(0,i.jsx)(n.li,{children:"Improve error message when model/facility input does not exist."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Change name from ",(0,i.jsx)(n.code,{children:"DIRECT_EMITTERS"})," to ",(0,i.jsx)(n.code,{children:"VENTING_EMITTERS"})," in input Yaml-file. Using DIRECT_EMITTERS will not cause eCalc to fail (this will change in a future version), but no output will be given for the actual emitters if the deprecated keyword is used."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>l});var i=t(7294);const a={},s=i.createContext(a);function l(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fa0b6059.dd28e3aa.js b/assets/js/fa0b6059.dd28e3aa.js new file mode 100644 index 0000000000..c59e1cc3cd --- /dev/null +++ b/assets/js/fa0b6059.dd28e3aa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9251],{4220:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>a,contentTitle:()=>i,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var n=o(5893),r=o(1151);const t={title:"Compressor",sidebar_position:1,description:"COMPRESSOR Energy Usage Model"},i="COMPRESSOR Energy Usage Model",l={id:"about/modelling/setup/installations/compressor_models_in_calculations/compressor",title:"Compressor",description:"COMPRESSOR Energy Usage Model",source:"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor.md",sourceDirName:"about/modelling/setup/installations/compressor_models_in_calculations",slug:"/about/modelling/setup/installations/compressor_models_in_calculations/compressor",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Compressor",sidebar_position:1,description:"COMPRESSOR Energy Usage Model"},sidebar:"about",previous:{title:"Compressor models",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/"},next:{title:"Compressor system",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system"}},a={},c=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"compressor-energy-usage-model",children:"COMPRESSOR Energy Usage Model"}),"\n",(0,n.jsxs)(s.p,{children:["When ",(0,n.jsx)(s.code,{children:"COMPRESSOR"})," is specified under ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," the only keyword that is allowed is ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION",children:"ENERGYFUNCTION"}),".\nThis model only supports a single compressor, which can either be a tabular compressor model defined in ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY_INPUTS"})," or a compressor model defined in ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/",children:"MODELS"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The attributes ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/RATE",children:"RATE"}),", ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",children:"SUCTION_PRESSURE"})," and\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",children:"DISCHARGE_PRESSURE"})," are required to be specified in the energy usage model. Here, the specified rate will be for the entire train, the\nsuction pressure will be at the inlet of the first stage, whilst the discharge pressure will be the outlet pressure of the last stage."]}),"\n",(0,n.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"NAME: <Reference name>\nTYPE: COMPRESSOR\nENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n CONDITION: <condition expression>\n ENERGYFUNCTION: <reference to energy function in facility inputs or models of compressor type>\n RATE: <rate expression>\n SUCTION_PRESSURE: <suction pressure expression>\n DISCHARGE_PRESSURE: <discharge pressure expression>\n"})}),"\n",(0,n.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: booster_compressor_reference\n RATE: SIM1;GAS_PROD\n SUCTION_PRESSURE: SIM1;SUCTION_PRESSURE\n DISCHARGE_PRESSURE: SIM1;DISCHARGE_PRESSURE\n"})})]})}function m(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,s,o)=>{o.d(s,{Z:()=>l,a:()=>i});var n=o(7294);const r={},t=n.createContext(r);function i(e){const s=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fa17a3e5.4988ef2c.js b/assets/js/fa17a3e5.4988ef2c.js new file mode 100644 index 0000000000..ae601a9df1 --- /dev/null +++ b/assets/js/fa17a3e5.4988ef2c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3181],{5111:(e,n,s)=>{s.r(n),s.d(n,{default:()=>j});s(7294);var i=s(2263),r=s(3692),t=s(5999),d=s(143),l=s(8862),a=s(2503),c=s(5893);const o=void 0;function h(){return(0,c.jsx)(t.Z,{id:"versionsPage.versionEntry.link",children:"Documentation"})}function x(){return(0,c.jsx)(t.Z,{id:"versionsPage.versionEntry.releaseNotes",children:"Release Notes"})}function j(){const{siteConfig:{organizationName:e,projectName:n}}=(0,i.Z)(),s=(0,d.gB)(o),j=(0,d.yW)(o),u=s.find((e=>"current"===e.name)),m=s.filter((e=>e!==j&&"current"!==e.name)),g=`https://github.com/${e}/${n}`;return(0,c.jsx)(l.Z,{title:"Versions",description:"eCalc Versions page listing all documented versions",children:(0,c.jsxs)("main",{className:"container margin-vert--lg",children:[(0,c.jsx)(a.Z,{as:"h1",children:(0,c.jsx)(t.Z,{id:"versionsPage.title",children:"eCalc documentation versions"})}),(0,c.jsxs)("div",{className:"margin-bottom--lg",children:[(0,c.jsx)(a.Z,{as:"h3",id:"next",children:(0,c.jsx)(t.Z,{id:"versionsPage.current.title",children:"Current version (Stable)"})}),(0,c.jsx)("p",{children:(0,c.jsx)(t.Z,{id:"versionsPage.current.description",children:"Here you can find the documentation for current released version."})}),(0,c.jsx)("table",{children:(0,c.jsx)("tbody",{children:(0,c.jsxs)("tr",{children:[(0,c.jsx)("th",{children:j.label}),(0,c.jsx)("td",{children:(0,c.jsx)(r.Z,{to:j.path+"/about",children:(0,c.jsx)(h,{})})}),(0,c.jsx)("td",{children:(0,c.jsx)(r.Z,{to:j.path+"/changelog/latest",children:(0,c.jsx)(x,{})})})]})})})]}),u!==j&&(0,c.jsxs)("div",{className:"margin-bottom--lg",children:[(0,c.jsx)(a.Z,{as:"h3",id:"latest",children:(0,c.jsx)(t.Z,{id:"versionsPage.next.title",children:"Next version (Unreleased)"})}),(0,c.jsx)("p",{children:(0,c.jsx)(t.Z,{id:"versionsPage.next.description",children:"Here you can find the documentation for work-in-process unreleased version."})}),(0,c.jsx)("table",{children:(0,c.jsx)("tbody",{children:(0,c.jsxs)("tr",{children:[(0,c.jsx)("th",{children:u.label}),(0,c.jsx)("td",{children:(0,c.jsx)(r.Z,{to:u.path+"/about",children:(0,c.jsx)(h,{})})}),(0,c.jsx)("td",{children:(0,c.jsx)(r.Z,{to:u.path+"/changelog/latest",children:(0,c.jsx)(x,{})})})]})})})]}),m.length>0&&(0,c.jsxs)("div",{className:"margin-bottom--lg",children:[(0,c.jsx)(a.Z,{as:"h3",id:"archive",children:(0,c.jsx)(t.Z,{id:"versionsPage.archived.title",children:"Past versions (Not maintained anymore)"})}),(0,c.jsx)("p",{children:(0,c.jsx)(t.Z,{id:"versionsPage.archived.description",children:"Here you can find documentation for previous versions of eCalc."})}),(0,c.jsx)("table",{children:(0,c.jsx)("tbody",{children:m.map((e=>(0,c.jsxs)("tr",{children:[(0,c.jsx)("th",{children:e.label}),(0,c.jsx)("td",{children:(0,c.jsx)(r.Z,{to:e.path+"/about",children:(0,c.jsx)(h,{})})}),(0,c.jsx)("td",{children:(0,c.jsx)(r.Z,{href:`${g}/releases/tag/${e.name}`,children:(0,c.jsx)(x,{})})})]},e.name)))})})]})]})})}}}]); \ No newline at end of file diff --git a/assets/js/fa3d98bd.fe953392.js b/assets/js/fa3d98bd.fe953392.js new file mode 100644 index 0000000000..5bb39cf939 --- /dev/null +++ b/assets/js/fa3d98bd.fe953392.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6696],{9747:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=n(5893),l=n(1151);const r={sidebar_position:1,description:"Generator modelling"},o="Generator modelling",a={id:"about/modelling/setup/facility_inputs/generator_modelling",title:"Generator modelling",description:"Generator modelling",source:"@site/docs/about/modelling/setup/facility_inputs/generator_modelling.md",sourceDirName:"about/modelling/setup/facility_inputs",slug:"/about/modelling/setup/facility_inputs/generator_modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/generator_modelling.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,description:"Generator modelling"},sidebar:"about",previous:{title:"Facility inputs",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/"},next:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/"}},s={},d=[{value:"ELECTRICITY2FUEL",id:"electricity2fuel",level:2},{value:"Facility input format",id:"facility-input-format",level:3},{value:"Example table",id:"table-example",level:3},{value:"Header and unit requirements",id:"header-and-unit-requirements",level:3}];function c(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,l.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"generator-modelling",children:"Generator modelling"}),"\n",(0,i.jsxs)(t.p,{children:["In eCalc\u2122, the term ",(0,i.jsx)(t.em,{children:"generator"})," refers to equipment producing ",(0,i.jsx)(t.strong,{children:"electrical power from fuel"}),". Hence, the turbine part (fuel combustion to produce mechanical energy) is included in the term."]}),"\n",(0,i.jsx)(t.p,{children:"An installation usually have one or more generators to fill the electrical power demand. In eCalc\u2122, the separate generators are combined into a common generator set (genset)."}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsx)(t.p,{children:"In the future, eCalc\u2122 will most likely offer modelling of single generators that could be combined in systems."})}),"\n",(0,i.jsx)(t.h2,{id:"electricity2fuel",children:"ELECTRICITY2FUEL"}),"\n",(0,i.jsxs)(t.p,{children:['Electricity to fuel is a table specifying the relationship between electrical load\nand fuel consumption for an entire generator set. This means that if you have several generators,\nthis table needs to include a "jump" every time a new generator is started. An example of this\nis shown ',(0,i.jsx)(t.a,{href:"#table-example",children:"below"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["Under ",(0,i.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY_INPUTS"}),", this electricity to fuel table is specified using the keyword ",(0,i.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})]}),"\n",(0,i.jsx)(t.h3,{id:"facility-input-format",children:"Facility input format"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: <generator name>\n FILE: <file path to .csv file>\n TYPE: ELECTRICITY2FUEL\n"})}),"\n",(0,i.jsx)(t.h3,{id:"table-example",children:"Example table"}),"\n",(0,i.jsx)(t.p,{children:"The table for this curve would look like:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-text",children:"POWER, FUEL\n#[MW], [Sm3/day]\n0.00, 0.0\n0.10, 84000.0\n5.00, 84000.0\n42.0, 220000.0\n42.01, 280000.0\n45.0, 300000.0\n50.0, 330000.0\n60.0, 350000.0\n"})}),"\n",(0,i.jsx)(t.h3,{id:"header-and-unit-requirements",children:"Header and unit requirements"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Header"}),(0,i.jsx)(t.th,{children:"Unit"}),(0,i.jsx)(t.th,{children:"Mandatory"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Power"}),(0,i.jsx)(t.td,{children:"MW"}),(0,i.jsx)(t.td,{children:"Yes"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Fuel"}),(0,i.jsxs)(t.td,{children:["Sm",(0,i.jsx)("sup",{children:"3"}),"/day"]}),(0,i.jsx)(t.td,{children:"Yes"})]})]})]})]})}function u(e={}){const{wrapper:t}={...(0,l.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>o});var i=n(7294);const l={},r=i.createContext(l);function o(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fb7e7841.f28ee572.js b/assets/js/fb7e7841.f28ee572.js new file mode 100644 index 0000000000..5edf5b404d --- /dev/null +++ b/assets/js/fb7e7841.f28ee572.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4466],{3005:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>d,frontMatter:()=>c,metadata:()=>o,toc:()=>i});var a=n(5893),s=n(1151);const c={slug:"latest",title:"Next",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:1},l="eCalc",o={id:"changelog/next",title:"Next",description:"New Features",source:"@site/docs/changelog/next.md",sourceDirName:"changelog",slug:"/changelog/latest",permalink:"/ecalc/docs/changelog/latest",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/next.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:1,frontMatter:{slug:"latest",title:"Next",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:1},sidebar:"changelog",previous:{title:"v8.8 (Latest)",permalink:"/ecalc/docs/changelog/v8.8-release"},next:{title:"---",permalink:"/ecalc/docs/changelog/separator"}},r={},i=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function u(e){const t={h1:"h1",h2:"h2",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,a.jsx)(t.h2,{id:"new-features",children:"New Features"}),"\n",(0,a.jsx)(t.h2,{id:"fixes",children:"Fixes"}),"\n",(0,a.jsx)(t.h2,{id:"breaking-changes",children:"Breaking changes"})]})}function d(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>l});var a=n(7294);const s={},c=a.createContext(s);function l(e){const t=a.useContext(c);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),a.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fba8a418.ae904a92.js b/assets/js/fba8a418.ae904a92.js new file mode 100644 index 0000000000..12014289f6 --- /dev/null +++ b/assets/js/fba8a418.ae904a92.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6638],{8052:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var s=t(5893),a=t(1151);const r={slug:"v8.2-release",title:"v8.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:12},l="eCalc v8.2",o={id:"changelog/v8-2",title:"v8.2",description:"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See",source:"@site/docs/changelog/v8-2.md",sourceDirName:"changelog",slug:"/changelog/v8.2-release",permalink:"/ecalc/docs/changelog/v8.2-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-2.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:12,frontMatter:{slug:"v8.2-release",title:"v8.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:12},sidebar:"changelog",previous:{title:"v8.1",permalink:"/ecalc/docs/changelog/v8.1-release"},next:{title:"v8.3",permalink:"/ecalc/docs/changelog/v8.3-release"}},i={},c=[{value:"New features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2}];function d(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"ecalc-v82",children:"eCalc v8.2"}),"\n",(0,s.jsx)(n.p,{children:"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See\r\nthe migration guide for details on changes, where relevant."}),"\n",(0,s.jsx)(n.h2,{id:"new-features",children:"New features"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["STP is available as a predefined TSV file-export of data. Use argument ",(0,s.jsx)(n.code,{children:"--stp-export"})," on cli."]}),"\n",(0,s.jsx)(n.li,{children:"Output emissions in fixed and predicted order in JSON export"}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"BREAKING"}),": ",(0,s.jsx)(n.code,{children:"Conditions"})," in YAML model that evaluates to ",(0,s.jsx)(n.strong,{children:"false"})," will ",(0,s.jsx)(n.em,{children:"no longer"})," be calculated and outputted"]}),"\n",(0,s.jsx)(n.li,{children:"Using average rates instead of forward filling when resampling rates to a given output frequency"}),"\n",(0,s.jsxs)(n.li,{children:["New ",(0,s.jsx)(n.code,{children:"Categories"})," added to STP and LTP export"]}),"\n",(0,s.jsx)(n.li,{children:"Operational settings are now 1-based instead of 0-based."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Some VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES models have returned a too low INTERSTAGE_PRESSURE when using INDIVIDUAL_ASV_RATE control. The INDIVIDUAL_ASV_RATE fixed speed pressure control now returns the required INTERSTAGE_PRESSURE correctly."}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>l});var s=t(7294);const a={},r=s.createContext(a);function l(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fd734e2c.fb46f962.js b/assets/js/fd734e2c.fb46f962.js new file mode 100644 index 0000000000..cf129f872c --- /dev/null +++ b/assets/js/fd734e2c.fb46f962.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[583],{9582:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>r,default:()=>d,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var n=a(5893),i=a(1151);const t={},r="CONSTANT",l={id:"about/references/keywords/CONSTANT",title:"CONSTANT",description:"FACILITYINPUTS /",source:"@site/docs/about/references/keywords/CONSTANT.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONSTANT",permalink:"/ecalc/docs/about/references/keywords/CONSTANT",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONSTANT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONDITIONS",permalink:"/ecalc/docs/about/references/keywords/CONDITIONS"},next:{title:"CONSUMERS",permalink:"/ecalc/docs/about/references/keywords/CONSUMERS"}},m={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function h(s){const e={a:"a",annotation:"annotation",code:"code",h1:"h1",h2:"h2",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",p:"p",pre:"pre",semantics:"semantics",span:"span",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"constant",children:"CONSTANT"}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.a,{href:"FACILITY_INPUTS",children:"FACILITY_INPUTS"})," /\n",(0,n.jsx)(e.a,{href:"ADJUSTMENT",children:"ADJUSTMENT"})," /\n",(0,n.jsx)(e.a,{href:"CONSTANT",children:"CONSTANT"})]}),"\n",(0,n.jsxs)(e.table,{children:[(0,n.jsx)(e.thead,{children:(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.th,{children:"Required"}),(0,n.jsx)(e.th,{children:"Child of"}),(0,n.jsx)(e.th,{children:"Children/Options"})]})}),(0,n.jsx)(e.tbody,{children:(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.td,{children:"No"}),(0,n.jsx)(e.td,{children:(0,n.jsx)(e.code,{children:"ADJUSTMENT"})}),(0,n.jsx)(e.td,{children:"None"})]})})]}),"\n",(0,n.jsx)(e.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(e.p,{children:["The keyword ",(0,n.jsx)(e.a,{href:"CONSTANT",children:"CONSTANT"})," can be used for adjustment of input data with a constant."]}),"\n",(0,n.jsx)(e.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"CONSTANT: <VALUE>\n"})}),"\n",(0,n.jsx)(e.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(e.p,{children:"Say you have input that that is off by -10 [some units].\nYou could fix this like:"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"NAME: some_facility_input\nFILE: filename.csv\nTYPE: FACILITY_INPUT_TYPE\nADJUSTMENT:\n CONSTANT: -10\n"})}),"\n",(0,n.jsxs)(e.p,{children:["The resulting energy consumption ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),", i.e. fuel or power, will then be"]}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"10"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted} = E_\\mathrm{original} - 10"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6444em"}}),(0,n.jsx)(e.span,{className:"mord",children:"10"})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{original}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is the energy consumption before the adjustment."]})]})}function d(s={}){const{wrapper:e}={...(0,i.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},1151:(s,e,a)=>{a.d(e,{Z:()=>l,a:()=>r});var n=a(7294);const i={},t=n.createContext(i);function r(s){const e=n.useContext(t);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function l(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:r(s.components),n.createElement(t.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/fe44757f.a7b3b924.js b/assets/js/fe44757f.a7b3b924.js new file mode 100644 index 0000000000..f51dec6bf5 --- /dev/null +++ b/assets/js/fe44757f.a7b3b924.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9083],{3907:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>r,toc:()=>o});var t=s(5893),i=s(1151);const l={title:"Pump models",sidebar_position:2,description:"Using pumps in calculations"},a="Pump models in calculations",r={id:"about/modelling/setup/installations/pump_models_in_calculations",title:"Pump models",description:"Using pumps in calculations",source:"@site/docs/about/modelling/setup/installations/pump_models_in_calculations.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/pump_models_in_calculations",permalink:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/pump_models_in_calculations.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Pump models",sidebar_position:2,description:"Using pumps in calculations"},sidebar:"about",previous:{title:"Generator sets",permalink:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations"},next:{title:"Compressor models",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/"}},d={},o=[{value:"PUMP energy usage model",id:"pump-energy-usage-model",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3},{value:"Units",id:"units",level:3},{value:"PUMP_SYSTEM energy usage model",id:"pump_system-energy-usage-model",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example-1",level:3},{value:"Units",id:"units-1",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"pump-models-in-calculations",children:"Pump models in calculations"}),"\n",(0,t.jsxs)(n.p,{children:["Pump charts are defined in the ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY_INPUTS"})," section, and is then referred to from an\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"pump-energy-usage-model",children:"PUMP energy usage model"}),"\n",(0,t.jsxs)(n.p,{children:["To configure a single pump, the pump rate, suction- and discharge pressures and fluid density must be given as inputs. In addition, a reference to a pump chart defined in the\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"FACILITY_INPUTS"})," section has to be included."]}),"\n",(0,t.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: <condition expression>\n ENERGYFUNCTION: <reference energy function in facility inputs of pump type>\n RATE: <rate expression>\n SUCTION_PRESSURE: <suction pressure expression>\n DISCHARGE_PRESSURE: <discharge pressure expression>\n FLUID_DENSITY: <fluid density expression>\n"})}),"\n",(0,t.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP\n ENERGYFUNCTION: waterinjection_pump_reference\n RATE: SIM1;WATER_INJ\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITY: 1000\n"})}),"\n",(0,t.jsx)(n.h3,{id:"units",children:"Units"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Quantity"}),(0,t.jsx)(n.th,{children:"Default units"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"RATE"}),(0,t.jsxs)(n.td,{children:["Sm",(0,t.jsx)("sup",{children:"3"}),"/day"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"SUCTION_PRESSURE"}),(0,t.jsx)(n.td,{children:"bara"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"DISCHARGE_PRESSURE"}),(0,t.jsx)(n.td,{children:"bara"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"FLUID_DENSITY"}),(0,t.jsxs)(n.td,{children:["kg/m",(0,t.jsx)("sup",{children:"3"})]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"pump_system-energy-usage-model",children:"PUMP_SYSTEM energy usage model"}),"\n",(0,t.jsx)(n.p,{children:"Model a system of pumps that share common manifolds and have cross-overs between them and for which the rate may be\nsplit between them based on various operational strategies."}),"\n",(0,t.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n CONDITION: <condition expression>\n PUMPS:\n - NAME: <name of compressor>\n CHART: <reference to pump model in facility inputs>\n TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>\n FLUID_DENSITY: <expression defining the fluid density>\n OPERATIONAL_SETTINGS:\n <operational settings data>\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["If all ",(0,t.jsx)(n.code,{children:"OPERATIONAL_SETTINGS"}),' have been exhausted, and there were still some time steps that were outside the\ncapacity of the operational setting, the last operational setting will be "chosen" nevertheless. In this case the\n',(0,t.jsx)(n.code,{children:"energy_usage"})," in the output will be set to ",(0,t.jsx)(n.code,{children:"NaN"})," which indicates that the operational setting, is in fact, invalid\n(or converted to 0 when aggregating upwards to e.g. genset)"]})}),"\n",(0,t.jsx)(n.h3,{id:"example-1",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: water_injection_pump_reference\n - NAME: pump2\n CHART: water_injection_pump_reference\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: 1000.0\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n"})}),"\n",(0,t.jsx)(n.h3,{id:"units-1",children:"Units"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Quantity"}),(0,t.jsx)(n.th,{children:"Default units"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"RATE"}),(0,t.jsxs)(n.td,{children:["Sm",(0,t.jsx)("sup",{children:"3"}),"/day"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"SUCTION_PRESSURE"}),(0,t.jsx)(n.td,{children:"bara"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"DISCHARGE_PRESSURE"}),(0,t.jsx)(n.td,{children:"bara"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"FLUID_DENSITY"}),(0,t.jsxs)(n.td,{children:["kg/m",(0,t.jsx)("sup",{children:"3"})]})]})]})]})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>a});var t=s(7294);const i={},l=t.createContext(i);function a(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.fec78e08.js b/assets/js/main.fec78e08.js new file mode 100644 index 0000000000..85ad2edaa2 --- /dev/null +++ b/assets/js/main.fec78e08.js @@ -0,0 +1,2 @@ +/*! For license information please see main.fec78e08.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[179],{1728:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(7294);var r=n(8356),o=n.n(r),a=n(6887);const s={"00440000":[()=>n.e(5595).then(n.bind(n,9462)),"@site/docs/about/references/keywords/CONDITION.md",9462],"00bdc23f":[()=>n.e(8088).then(n.bind(n,312)),"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts.md",312],"0425b884":[()=>n.e(9336).then(n.bind(n,25)),"@site/docs/about/getting_started/library/index.md",25],"0477162f":[()=>n.e(6173).then(n.bind(n,3954)),"@site/docs/about/references/keywords/VENTING_EMITTERS.md",3954],"06adec10":[()=>n.e(2153).then(n.bind(n,904)),"@site/docs/about/references/keywords/POWERLOSSFACTOR.md",904],"06dd1efa":[()=>n.e(6039).then(n.bind(n,332)),"@site/docs/about/references/keywords/END.md",332],"0745e7f0":[()=>n.e(4069).then(n.bind(n,8273)),"@site/docs/changelog/v8-5.md",8273],"074935d7":[()=>n.e(1042).then(n.bind(n,2926)),"@site/docs/about/references/keywords/RATE_PER_STREAM.md",2926],"07b341f3":[()=>n.e(8267).then(n.bind(n,3985)),"@site/docs/about/references/keywords/VARIABLES.md",3985],"084f7ebf":[()=>n.e(3847).then(n.bind(n,4395)),"@site/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL.md",4395],"0aeda122":[()=>n.e(7832).then(n.bind(n,8870)),"@site/docs/about/references/keywords/HEAD.md",8870],"0f7b5825":[()=>n.e(7238).then(n.bind(n,8418)),"@site/docs/about/references/keywords/ELECTRICITY2FUEL.md",8418],"0fd76486":[()=>n.e(8746).then(n.bind(n,9632)),"@site/docs/about/modelling/examples/index.md",9632],"10c684b0":[()=>n.e(5870).then(n.bind(n,47)),"@site/docs/about/references/keywords/START.md",47],"11516e85":[()=>n.e(3054).then(n.bind(n,4788)),"@site/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL.md",4788],"1287dd43":[()=>n.e(3700).then(n.bind(n,9474)),"@site/docs/contribute/guides/01-git.md",9474],"1300feb7":[()=>n.e(8269).then(n.bind(n,2256)),"@site/docs/about/references/keywords/RATE.md",2256],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,4228)),"@theme/DocCategoryGeneratedIndexPage",4228],"15962da1":[()=>n.e(996).then(n.bind(n,5730)),"@site/docs/about/references/keywords/GENERATORSETS.md",5730],"163041ea":[()=>n.e(9480).then(n.bind(n,7498)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model.md",7498],17896441:[()=>Promise.all([n.e(532),n.e(7918)]).then(n.bind(n,7382)),"@theme/DocItem",7382],"17e50ecd":[()=>n.e(7756).then(n.bind(n,4166)),"@site/docs/about/references/keywords/ADJUSTMENT.md",4166],"18b0ec42":[()=>n.e(2962).then(n.bind(n,946)),"@site/docs/changelog/v8-8.md",946],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,1473)),"@theme/SearchPage",1473],"1c663d3d":[()=>n.e(8392).then(n.bind(n,6703)),"@site/docs/about/getting_started/index.md",6703],"1df93b7f":[()=>n.e(3237).then(n.bind(n,9754)),"@site/src/pages/index.tsx",9754],"1e7de7fe":[()=>n.e(6124).then(n.t.bind(n,43,19)),"~docs/default/category-ecalcdocs-contribute-category-guides-4cd.json",43],"1f60d0d4":[()=>n.e(6539).then(n.bind(n,4587)),"@site/docs/about/index.md",4587],"1f7805b6":[()=>n.e(2802).then(n.bind(n,1816)),"@site/docs/changelog/v8-6.md",1816],"22f0e129":[()=>n.e(6893).then(n.bind(n,3243)),"@site/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE.md",3243],"2781f0ad":[()=>n.e(3787).then(n.bind(n,9483)),"@site/docs/about/modelling/examples/advanced.md",9483],"29367e59":[()=>n.e(3173).then(n.bind(n,3918)),"@site/docs/about/references/keywords/INFLUENCE_TIME_VECTOR.md",3918],"295f424e":[()=>n.e(5133).then(n.bind(n,9579)),"@site/docs/about/references/keywords/DIRECT_EMITTERS.md",9579],"29d00dd8":[()=>n.e(8084).then(n.bind(n,4890)),"@site/docs/about/references/keywords/ENERGYFUNCTION.md",4890],"2b15d891":[()=>n.e(2225).then(n.bind(n,1015)),"@site/docs/about/references/keywords/NAME.md",1015],"2b2be347":[()=>n.e(1404).then(n.bind(n,7387)),"@site/docs/changelog/v7-0.md",7387],"2c19a041":[()=>n.e(4507).then(n.bind(n,7509)),"@site/docs/about/references/keywords/REGULARITY.md",7509],"2c73e373":[()=>n.e(2655).then(n.bind(n,2498)),"@site/docs/contribute/guides/02-conventional-commits.md",2498],"2ce3b5da":[()=>n.e(9050).then(n.bind(n,806)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model.md",806],"2cedaf2f":[()=>n.e(5408).then(n.bind(n,4877)),"@site/docs/about/modelling/workflow/generic_workflow.md",4877],"2df92a48":[()=>n.e(3596).then(n.bind(n,9134)),"@site/docs/about/references/keywords/FUEL_TYPES.md",9134],"2f04f592":[()=>n.e(7495).then(n.bind(n,2787)),"@site/docs/changelog/separator.md",2787],"3261da49":[()=>n.e(3091).then(n.bind(n,9333)),"@site/docs/about/references/keywords/INTERPOLATION_TYPE.md",9333],"33498b04":[()=>n.e(381).then(n.bind(n,4180)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model.md",4180],"3409ab5c":[()=>n.e(2017).then(n.bind(n,9384)),"@site/docs/about/modelling/theory/pump_modelling.md",9384],"3720c009":[()=>Promise.all([n.e(532),n.e(3751)]).then(n.bind(n,9861)),"@theme/DocTagsListPage",9861],"3810e8e5":[()=>n.e(6887).then(n.bind(n,2177)),"@site/docs/about/references/keywords/HCEXPORT.md",2177],"382d59b5":[()=>n.e(9306).then(n.bind(n,4706)),"@site/docs/about/references/keywords/CURVES.md",4706],"38d592cf":[()=>n.e(1398).then(n.bind(n,8874)),"@site/docs/about/modelling/theory/compressor_modelling.md",8874],"3aeef25a":[()=>n.e(7396).then(n.bind(n,1984)),"@site/docs/about/references/keywords/HEAD_MARGIN.md",1984],"3b0e82f8":[()=>n.e(925).then(n.bind(n,1850)),"@site/docs/about/references/keywords/CURVE.md",1850],"3e38e310":[()=>n.e(8094).then(n.bind(n,9424)),"@site/docs/changelog/v8-3.md",9424],"3fbb770c":[()=>n.e(4838).then(n.bind(n,5894)),"@site/docs/about/references/keywords/SUCTION_PRESSURE.md",5894],"40d6382c":[()=>n.e(9814).then(n.bind(n,3334)),"@site/docs/about/migration_guides/index.md",3334],"4147f87e":[()=>n.e(9786).then(n.bind(n,2718)),"@site/docs/about/references/keywords/STAGES.md",2718],"41d1792a":[()=>n.e(1748).then(n.t.bind(n,2977,19)),"~docs/default/tag-ecalc-docs-tags-release-eb8.json",2977],"428320b6":[()=>n.e(6193).then(n.bind(n,683)),"@site/docs/changelog/changelog.md",683],"43a1031a":[()=>n.e(8010).then(n.bind(n,4629)),"@site/docs/about/modelling/setup/facility_inputs/index.md",4629],"43a26e71":[()=>n.e(4845).then(n.bind(n,2414)),"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/index.md",2414],"45c974ba":[()=>n.e(2459).then(n.bind(n,3948)),"@site/docs/changelog/v7-2.md",3948],"47daf389":[()=>n.e(8082).then(n.bind(n,514)),"@site/docs/changelog/v8-4.md",514],"496ed8d5":[()=>n.e(2206).then(n.bind(n,9388)),"@site/docs/about/getting_started/cli/faq.md",9388],"498bfcff":[()=>n.e(749).then(n.bind(n,8084)),"@site/docs/about/modelling/setup/fuel_types.md",8084],"4aa4fc36":[()=>n.e(1044).then(n.bind(n,1075)),"@site/docs/about/migration_guides/v8_to_v81.md",1075],"4b5a01f9":[()=>n.e(3211).then(n.bind(n,9150)),"@site/docs/about/modelling/setup/models/fluid_model.md",9150],"4b80f681":[()=>n.e(9842).then(n.bind(n,8186)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",8186],"4c3c1dc2":[()=>n.e(6686).then(n.bind(n,9999)),"@site/docs/about/references/keywords/PRESSURE_CONTROL.md",9999],"4da8ac19":[()=>n.e(6038).then(n.bind(n,4571)),"@site/docs/about/references/keywords/EFFICIENCY.md",4571],"4ee97ba8":[()=>n.e(1668).then(n.bind(n,9158)),"@site/docs/about/references/index.md",9158],"502e1773":[()=>n.e(2693).then(n.bind(n,56)),"@site/docs/about/references/keywords/CONTROL_MARGIN_UNIT.md",56],"51ad0f66":[()=>n.e(5713).then(n.bind(n,6778)),"@site/docs/about/references/keywords/EMISSION_RATE.md",6778],"54094f37":[()=>n.e(3172).then(n.bind(n,655)),"@site/docs/about/references/keywords/EMITTER_MODEL.md",655],"54d7341e":[()=>n.e(510).then(n.bind(n,7379)),"@site/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE.md",7379],"55960ee5":[()=>n.e(4121).then(n.t.bind(n,8070,19)),"~docs/default/tags-list-current-prop-15a.json",8070],"577efb1d":[()=>n.e(628).then(n.bind(n,6095)),"@site/docs/about/references/keywords/STREAM.md",6095],"5989d566":[()=>n.e(1709).then(n.bind(n,8039)),"@site/docs/about/references/keywords/EMISSIONS.md",8039],"5a5e553d":[()=>n.e(1110).then(n.bind(n,3007)),"@site/docs/about/references/keywords/EXTRAPOLATION.md",3007],"5c08a402":[()=>n.e(8846).then(n.bind(n,3135)),"@site/docs/about/migration_guides/v8-1_to_v8-2.md",3135],"5c8ec56d":[()=>n.e(4070).then(n.bind(n,959)),"@site/docs/about/modelling/setup/models/compressor_modelling/index.md",959],"5e10e9e1":[()=>n.e(443).then(n.bind(n,4021)),"@site/docs/about/modelling/setup/installations/tabular_models_in_calculations.md",4021],"5e3ed04b":[()=>n.e(2205).then(n.bind(n,5502)),"@site/docs/about/references/keywords/FACILITY_INPUTS.md",5502],"5e95c892":[()=>n.e(9661).then(n.bind(n,1892)),"@theme/DocsRoot",1892],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],60746895:[()=>n.e(8282).then(n.bind(n,3652)),"@site/docs/contribute/documentation-guide/02-markdown.md",3652],"61639be2":[()=>n.e(4075).then(n.bind(n,192)),"@site/docs/about/references/keywords/FUELCONSUMERS.md",192],"63ecd22d":[()=>n.e(8980).then(n.bind(n,990)),"@site/docs/about/migration_guides/v8-6_to_v8-7.md",990],66286265:[()=>n.e(180).then(n.bind(n,9067)),"@site/docs/about/modelling/setup/facility_inputs/tabular.md",9067],"66a649c0":[()=>n.e(3240).then(n.bind(n,6262)),"@site/docs/about/references/keywords/CROSSOVER.md",6262],"676abc7a":[()=>n.e(5654).then(n.bind(n,577)),"@site/docs/about/references/keywords/TIME_SERIES.md",577],"69fd9be6":[()=>n.e(8570).then(n.bind(n,9364)),"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",9364],"6adcc868":[()=>n.e(8122).then(n.bind(n,6408)),"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system.md",6408],"6bd3279d":[()=>n.e(639).then(n.bind(n,7597)),"@site/docs/about/references/keywords/EMISSION_NAME.md",7597],"70f31d65":[()=>n.e(7337).then(n.bind(n,6151)),"@site/docs/about/references/keywords/TURBINE_EFFICIENCIES.md",6151],"72083b41":[()=>n.e(5178).then(n.bind(n,3740)),"@site/docs/about/references/keywords/TYPE.md",3740],"721cfe60":[()=>n.e(3802).then(n.bind(n,808)),"@site/docs/about/migration_guides/v8-3_to_v8-4.md",808],"7514af75":[()=>n.e(6305).then(n.bind(n,917)),"@site/docs/about/references/keywords/FUELRATE.md",917],"7557b935":[()=>n.e(856).then(n.bind(n,7398)),"@site/docs/about/migration_guides/v7_to_v8.md",7398],"7b02141e":[()=>n.e(2638).then(n.bind(n,9519)),"@site/docs/about/modelling/workflow/index.md",9519],"7c623a68":[()=>n.e(1310).then(n.bind(n,2047)),"@site/docs/about/references/keywords/CONSUMPTION_RATE_TYPE.md",2047],"7cebed78":[()=>n.e(9376).then(n.bind(n,6582)),"@site/docs/about/modelling/examples/simple.md",6582],"7d3b81bb":[()=>n.e(8230).then(n.bind(n,8886)),"@site/docs/changelog/v7-4.md",8886],"7db788f5":[()=>n.e(3074).then(n.bind(n,7422)),"@site/docs/about/modelling/setup/installations/index.md",7422],"7e6991bb":[()=>n.e(2040).then(n.bind(n,8148)),"@site/docs/about/modelling/setup/facility_inputs/sampled_compressor_model.md",8148],"81dd00c5":[()=>n.e(2548).then(n.bind(n,7206)),"@site/docs/about/migration_guides/v8-5_to_v8-6.md",7206],"841adc37":[()=>n.e(6768).then(n.bind(n,7057)),"@site/docs/about/modelling/setup/models/turbine_modeling.md",7057],"86262f09":[()=>n.e(8318).then(n.bind(n,8643)),"@site/docs/about/references/keywords/EXPRESSION.md",8643],"880bbd08":[()=>n.e(3315).then(n.bind(n,1471)),"@site/docs/about/references/keywords/UNITS.md",1471],"8961bfac":[()=>n.e(9128).then(n.bind(n,66)),"@site/docs/about/modelling/setup/file_format_and_syntax/expressions.md",66],90184672:[()=>n.e(5932).then(n.bind(n,9353)),"@site/docs/about/references/keywords/INLET_TEMPERATURE.md",9353],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"97732f4b":[()=>n.e(7594).then(n.bind(n,4111)),"@site/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT.md",4111],"977fea76":[()=>n.e(8023).then(n.t.bind(n,3769,19)),"/home/runner/work/ecalc/ecalc/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"9a118db7":[()=>n.e(9364).then(n.bind(n,4607)),"@site/docs/about/modelling/setup/variables.md",4607],"9e136365":[()=>n.e(9591).then(n.bind(n,3507)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.md",3507],"9e4a10de":[()=>n.e(4395).then(n.bind(n,331)),"@site/docs/about/references/keywords/TURBINE_MODEL.md",331],"9e7755e6":[()=>n.e(7212).then(n.bind(n,8412)),"@site/docs/about/references/keywords/DISCHARGE_PRESSURE.md",8412],"9e91bf8d":[()=>n.e(4631).then(n.bind(n,1064)),"@site/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.md",1064],a2e97e20:[()=>n.e(8988).then(n.bind(n,1009)),"@site/docs/about/modelling/setup/models/index.md",1009],a5dcc804:[()=>n.e(8276).then(n.bind(n,4814)),"@site/docs/about/miscellaneous/index.md",4814],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,8564)),"@theme/DocVersionRoot",8564],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,2674)),"@theme/DocRoot",2674],ad129716:[()=>n.e(754).then(n.bind(n,2635)),"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.md",2635],af105519:[()=>n.e(4199).then(n.bind(n,1071)),"@site/docs/about/migration_guides/v8-2_to_v8-3.md",1071],b0a5d2c7:[()=>n.e(3414).then(n.bind(n,1003)),"@site/docs/about/references/keywords/CONTROL_MARGIN.md",1003],b15ba3bd:[()=>n.e(2547).then(n.bind(n,4040)),"@site/docs/about/references/keywords/PUMPS.md",4040],b2781c74:[()=>n.e(4278).then(n.t.bind(n,2776,19)),"/home/runner/work/ecalc/ecalc/docs/.docusaurus/@easyops-cn/docusaurus-search-local/default/plugin-route-context-module-100.json",2776],b2b17913:[()=>n.e(3190).then(n.bind(n,3011)),"@site/docs/about/references/keywords/CATEGORY.md",3011],b677d687:[()=>n.e(262).then(n.bind(n,9574)),"@site/docs/about/references/keywords/RATE_FRACTIONS.md",9574],b8c59810:[()=>n.e(9643).then(n.t.bind(n,1414,19)),"~docs/default/tag-ecalc-docs-tags-e-calc-236.json",1414],bb45b332:[()=>n.e(4103).then(n.bind(n,5062)),"@site/docs/about/modelling/index.md",5062],bdf25f4c:[()=>n.e(4025).then(n.bind(n,5710)),"@site/docs/changelog/v7-1.md",5710],bfdf430b:[()=>n.e(8583).then(n.bind(n,8952)),"@site/docs/changelog/v8-0.md",8952],c21bc46a:[()=>n.e(3443).then(n.bind(n,734)),"@site/docs/about/references/keywords/MODELS.md",734],c3d1f0cd:[()=>n.e(4733).then(n.bind(n,6204)),"@site/docs/about/references/cli_reference.md",6204],c5daebe9:[()=>n.e(2013).then(n.bind(n,7442)),"@site/docs/about/references/keywords/TURBINE_LOAD.md",7442],c8caddd1:[()=>n.e(6721).then(n.bind(n,9166)),"@site/docs/contribute/01-get-started.md",9166],c90bf1e8:[()=>n.e(8186).then(n.bind(n,6378)),"@site/docs/changelog/v7-3.md",6378],c93dcb87:[()=>n.e(4168).then(n.bind(n,9219)),"@site/docs/about/references/keywords/CONSUMERS.md",9219],c9b29382:[()=>n.e(8285).then(n.bind(n,9222)),"@site/docs/about/references/keywords/COMPRESSOR_SYSTEM.md",9222],cb266b33:[()=>n.e(2706).then(n.bind(n,5982)),"@site/docs/about/references/keywords/LOAD.md",5982],cbe196b2:[()=>n.e(4734).then(n.bind(n,4918)),"@site/docs/about/references/keywords/FILE.md",4918],cc88a418:[()=>n.e(2e3).then(n.bind(n,4381)),"@site/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL.md",4381],ccf7588a:[()=>n.e(8967).then(n.bind(n,4589)),"@site/docs/about/references/keywords/FACTOR.mdx",4589],cda37ba5:[()=>n.e(4189).then(n.bind(n,8572)),"@site/docs/changelog/v7-6.md",8572],d17664a7:[()=>n.e(6922).then(n.bind(n,4488)),"@site/docs/about/references/keywords/STREAMS.md",4488],d185ab52:[()=>n.e(9524).then(n.bind(n,7407)),"@site/docs/about/references/keywords/TOTAL_SYSTEM_RATE.md",7407],d19423a2:[()=>n.e(1686).then(n.bind(n,3447)),"@site/docs/contribute/documentation-guide/01-documentation.md",3447],d2b7592b:[()=>n.e(3305).then(n.bind(n,253)),"@site/docs/about/references/keywords/OPERATIONAL_SETTINGS.md",253],d2eeb42a:[()=>n.e(8485).then(n.bind(n,5077)),"@site/docs/about/references/api/index.md",5077],d547c67b:[()=>n.e(5917).then(n.bind(n,6221)),"@site/docs/about/references/keywords/FLUID_MODEL.md",6221],d5b0ea4b:[()=>n.e(2991).then(n.t.bind(n,9389,19)),"~docs/default/category-ecalcdocs-contribute-category-documentation-815.json",9389],d5cd246e:[()=>n.e(4441).then(n.bind(n,2814)),"@site/docs/about/modelling/setup/installations/direct_consumers.md",2814],d77448ee:[()=>n.e(5201).then(n.bind(n,2649)),"@site/docs/about/references/keywords/COMPRESSOR_MODEL.md",2649],df203c0f:[()=>Promise.all([n.e(532),n.e(9924)]).then(n.bind(n,491)),"@theme/DocTagDocListPage",491],df3c944d:[()=>n.e(7611).then(n.bind(n,5825)),"@site/docs/about/references/keywords/ENERGY_USAGE_MODEL.md",5825],dfbab2f3:[()=>n.e(7907).then(n.bind(n,5201)),"@site/docs/about/getting_started/cli/index.md",5201],e023757a:[()=>n.e(4858).then(n.bind(n,8380)),"@site/docs/about/references/keywords/INSTALLATIONS.md",8380],e0edce1a:[()=>n.e(8596).then(n.bind(n,6513)),"@site/docs/about/references/keywords/FUEL.md",6513],e1df8231:[()=>n.e(517).then(n.bind(n,1665)),"@site/docs/about/getting_started/yaml/index.md",1665],e26167e6:[()=>n.e(476).then(n.bind(n,573)),"@site/docs/about/references/keywords/EMISSION.md",573],e2712b99:[()=>n.e(7253).then(n.bind(n,4006)),"@site/docs/changelog/v8-1.md",4006],e7fdd821:[()=>n.e(8202).then(n.bind(n,5815)),"@site/docs/about/references/keywords/CONDITIONS.md",5815],e862d0e9:[()=>n.e(8703).then(n.bind(n,9472)),"@site/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE.md",9472],e8ebc025:[()=>n.e(3902).then(n.bind(n,2991)),"@site/docs/about/modelling/setup/index.md",2991],e9e63826:[()=>n.e(6159).then(n.bind(n,2755)),"@site/docs/about/modelling/setup/file_format_and_syntax/index.md",2755],ebdd570f:[()=>n.e(3177).then(n.bind(n,8929)),"@site/docs/about/migration_guides/v8.7_to_v8.8.md",8929],ec96df16:[()=>n.e(8519).then(n.bind(n,5890)),"@site/docs/about/references/keywords/include.md",5890],edb3a98b:[()=>n.e(1728).then(n.bind(n,4115)),"@site/docs/about/modelling/setup/installations/generator_sets_in_calculations.md",4115],eee46244:[()=>n.e(7154).then(n.bind(n,2593)),"@site/docs/changelog/v7-5.md",2593],f054b415:[()=>n.e(7652).then(n.bind(n,9846)),"@site/docs/about/modelling/theory/index.md",9846],f52ed7e3:[()=>n.e(9922).then(n.bind(n,2197)),"@site/docs/about/modelling/setup/time_series.md",2197],f54e894e:[()=>n.e(770).then(n.bind(n,3790)),"@site/docs/about/modelling/examples/drogon.md",3790],f571fee5:[()=>n.e(505).then(n.bind(n,4132)),"@site/docs/about/references/keywords/index.md",4132],f577f5c2:[()=>n.e(7959).then(n.bind(n,7335)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.md",7335],f59fd0ba:[()=>n.e(2562).then(n.bind(n,4332)),"@site/docs/about/references/keywords/FLUID_DENSITY.md",4332],f5b92c38:[()=>n.e(8984).then(n.bind(n,4502)),"@site/docs/about/references/keywords/LOWER_HEATING_VALUE.md",4502],f85d2ba9:[()=>n.e(2488).then(n.t.bind(n,5745,19)),"/home/runner/work/ecalc/ecalc/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],f92867ed:[()=>n.e(2138).then(n.bind(n,8134)),"@site/docs/changelog/v8-7.md",8134],fa0b6059:[()=>n.e(9251).then(n.bind(n,4220)),"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor.md",4220],fa17a3e5:[()=>n.e(3181).then(n.bind(n,5111)),"@site/src/pages/versions.tsx",5111],fa3d98bd:[()=>n.e(6696).then(n.bind(n,9747)),"@site/docs/about/modelling/setup/facility_inputs/generator_modelling.md",9747],fb7e7841:[()=>n.e(4466).then(n.bind(n,3005)),"@site/docs/changelog/next.md",3005],fba8a418:[()=>n.e(6638).then(n.bind(n,8052)),"@site/docs/changelog/v8-2.md",8052],fd734e2c:[()=>n.e(583).then(n.bind(n,9582)),"@site/docs/about/references/keywords/CONSTANT.md",9582],fe44757f:[()=>n.e(9083).then(n.bind(n,3907)),"@site/docs/about/modelling/setup/installations/pump_models_in_calculations.md",3907]};var i=n(5893);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,i.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,i.jsx)("p",{children:String(t)}),(0,i.jsx)("div",{children:(0,i.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,i.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,i.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,i.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,i.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,i.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,i.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,i.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,i.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,i.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,i.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,i.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,i.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,i.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(9670),u=n(226);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(1772).then(n.bind(n,1772)),modules:["@theme/NotFound"],webpack:()=>[1772],render(e,t){const n=e.default;return(0,i.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,i.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,c.Z)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=s[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let s=o;const i=n.split(".");i.slice(0,-1).forEach((e=>{s=s[e]})),s[i[i.length-1]]=a}));const a=o.__comp;delete o.__comp;const s=o.__context;return delete o.__context,(0,i.jsx)(u.z,{value:s,children:(0,i.jsx)(a,{...o,...n})})}})}const p=[{path:"/ecalc/search",component:d("/ecalc/search","bdd"),exact:!0},{path:"/ecalc/versions",component:d("/ecalc/versions","284"),exact:!0},{path:"/ecalc/docs",component:d("/ecalc/docs","fe9"),routes:[{path:"/ecalc/docs",component:d("/ecalc/docs","d5d"),routes:[{path:"/ecalc/docs/tags",component:d("/ecalc/docs/tags","909"),exact:!0},{path:"/ecalc/docs/tags/e-calc",component:d("/ecalc/docs/tags/e-calc","b17"),exact:!0},{path:"/ecalc/docs/tags/release",component:d("/ecalc/docs/tags/release","816"),exact:!0},{path:"/ecalc/docs",component:d("/ecalc/docs","f1b"),routes:[{path:"/ecalc/docs/about/",component:d("/ecalc/docs/about/","a31"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/",component:d("/ecalc/docs/about/getting_started/","123"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/cli/",component:d("/ecalc/docs/about/getting_started/cli/","d3b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/cli/faq",component:d("/ecalc/docs/about/getting_started/cli/faq","97e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/library/",component:d("/ecalc/docs/about/getting_started/library/","d50"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/yaml/",component:d("/ecalc/docs/about/getting_started/yaml/","cec"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/",component:d("/ecalc/docs/about/migration_guides/","b3e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v7_to_v8",component:d("/ecalc/docs/about/migration_guides/v7_to_v8","313"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8_to_v81",component:d("/ecalc/docs/about/migration_guides/v8_to_v81","7ca"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8-1_to_v8-2",component:d("/ecalc/docs/about/migration_guides/v8-1_to_v8-2","14c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8-2_to_v8-3",component:d("/ecalc/docs/about/migration_guides/v8-2_to_v8-3","273"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8-3_to_v8-4",component:d("/ecalc/docs/about/migration_guides/v8-3_to_v8-4","115"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8-5_to_v8-6",component:d("/ecalc/docs/about/migration_guides/v8-5_to_v8-6","163"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8-6_to_v8-7",component:d("/ecalc/docs/about/migration_guides/v8-6_to_v8-7","e5f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8.7_to_v8.8",component:d("/ecalc/docs/about/migration_guides/v8.7_to_v8.8","3cf"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/miscellaneous/",component:d("/ecalc/docs/about/miscellaneous/","b76"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/",component:d("/ecalc/docs/about/modelling/","d6a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/examples/",component:d("/ecalc/docs/about/modelling/examples/","e7e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/examples/advanced",component:d("/ecalc/docs/about/modelling/examples/advanced","362"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/examples/drogon",component:d("/ecalc/docs/about/modelling/examples/drogon","966"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/examples/simple",component:d("/ecalc/docs/about/modelling/examples/simple","257"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/",component:d("/ecalc/docs/about/modelling/setup/","dff"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/",component:d("/ecalc/docs/about/modelling/setup/facility_inputs/","1cc"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling",component:d("/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","f62"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/",component:d("/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","592"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",component:d("/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","2c2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",component:d("/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","04c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/tabular",component:d("/ecalc/docs/about/modelling/setup/facility_inputs/tabular","542"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/",component:d("/ecalc/docs/about/modelling/setup/file_format_and_syntax/","0e3"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions",component:d("/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","d12"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/fuel_types",component:d("/ecalc/docs/about/modelling/setup/fuel_types","620"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/",component:d("/ecalc/docs/about/modelling/setup/installations/","99b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/",component:d("/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/","9b9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor",component:d("/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","c00"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",component:d("/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","0e8"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",component:d("/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","65b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/direct_consumers",component:d("/ecalc/docs/about/modelling/setup/installations/direct_consumers","d56"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations",component:d("/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","f2a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations",component:d("/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","2f5"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations",component:d("/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","d10"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/",component:d("/ecalc/docs/about/modelling/setup/models/","15b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/","c1c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","5eb"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/","b0e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","f09"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","e08"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","de2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","2fb"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","fb2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/fluid_model",component:d("/ecalc/docs/about/modelling/setup/models/fluid_model","849"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/turbine_modeling",component:d("/ecalc/docs/about/modelling/setup/models/turbine_modeling","0f3"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/time_series",component:d("/ecalc/docs/about/modelling/setup/time_series","b2a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/variables",component:d("/ecalc/docs/about/modelling/setup/variables","5f7"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/theory/",component:d("/ecalc/docs/about/modelling/theory/","6a0"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/theory/compressor_modelling",component:d("/ecalc/docs/about/modelling/theory/compressor_modelling","0df"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/theory/pump_modelling",component:d("/ecalc/docs/about/modelling/theory/pump_modelling","c3a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/workflow/",component:d("/ecalc/docs/about/modelling/workflow/","9a1"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/workflow/generic_workflow",component:d("/ecalc/docs/about/modelling/workflow/generic_workflow","b21"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/",component:d("/ecalc/docs/about/references/","5da"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/api/",component:d("/ecalc/docs/about/references/api/","225"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/cli_reference",component:d("/ecalc/docs/about/references/cli_reference","b63"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/",component:d("/ecalc/docs/about/references/keywords/","424"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/ADJUSTMENT",component:d("/ecalc/docs/about/references/keywords/ADJUSTMENT","382"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CATEGORY",component:d("/ecalc/docs/about/references/keywords/CATEGORY","de9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL",component:d("/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","8c1"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",component:d("/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","8f7"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",component:d("/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","9b6"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONDITION",component:d("/ecalc/docs/about/references/keywords/CONDITION","b74"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONDITIONS",component:d("/ecalc/docs/about/references/keywords/CONDITIONS","ea9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONSTANT",component:d("/ecalc/docs/about/references/keywords/CONSTANT","677"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONSUMERS",component:d("/ecalc/docs/about/references/keywords/CONSUMERS","15f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",component:d("/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","f62"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN",component:d("/ecalc/docs/about/references/keywords/CONTROL_MARGIN","b71"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT",component:d("/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","415"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CROSSOVER",component:d("/ecalc/docs/about/references/keywords/CROSSOVER","55f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CURVE",component:d("/ecalc/docs/about/references/keywords/CURVE","aa7"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CURVES",component:d("/ecalc/docs/about/references/keywords/CURVES","429"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",component:d("/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","8cf"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",component:d("/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","16d"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",component:d("/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","efb"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EFFICIENCY",component:d("/ecalc/docs/about/references/keywords/EFFICIENCY","f47"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",component:d("/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","1f9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMISSION",component:d("/ecalc/docs/about/references/keywords/EMISSION","1c4"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMISSION_NAME",component:d("/ecalc/docs/about/references/keywords/EMISSION_NAME","29b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMISSION_RATE",component:d("/ecalc/docs/about/references/keywords/EMISSION_RATE","d80"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMISSIONS",component:d("/ecalc/docs/about/references/keywords/EMISSIONS","e05"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",component:d("/ecalc/docs/about/references/keywords/EMITTER_MODEL","c46"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/END",component:d("/ecalc/docs/about/references/keywords/END","8f6"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",component:d("/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","55a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION",component:d("/ecalc/docs/about/references/keywords/ENERGYFUNCTION","f2d"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EXPRESSION",component:d("/ecalc/docs/about/references/keywords/EXPRESSION","6c2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EXTRAPOLATION",component:d("/ecalc/docs/about/references/keywords/EXTRAPOLATION","b1f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",component:d("/ecalc/docs/about/references/keywords/FACILITY_INPUTS","070"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FACTOR",component:d("/ecalc/docs/about/references/keywords/FACTOR","7d6"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FILE",component:d("/ecalc/docs/about/references/keywords/FILE","642"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FLUID_DENSITY",component:d("/ecalc/docs/about/references/keywords/FLUID_DENSITY","c60"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FLUID_MODEL",component:d("/ecalc/docs/about/references/keywords/FLUID_MODEL","2fd"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FUEL",component:d("/ecalc/docs/about/references/keywords/FUEL","c8b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FUEL_TYPES",component:d("/ecalc/docs/about/references/keywords/FUEL_TYPES","a2e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",component:d("/ecalc/docs/about/references/keywords/FUELCONSUMERS","aee"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FUELRATE",component:d("/ecalc/docs/about/references/keywords/FUELRATE","255"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/GENERATORSETS",component:d("/ecalc/docs/about/references/keywords/GENERATORSETS","d03"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/HCEXPORT",component:d("/ecalc/docs/about/references/keywords/HCEXPORT","ccb"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/HEAD",component:d("/ecalc/docs/about/references/keywords/HEAD","b50"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/HEAD_MARGIN",component:d("/ecalc/docs/about/references/keywords/HEAD_MARGIN","794"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/include",component:d("/ecalc/docs/about/references/keywords/include","80e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",component:d("/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","423"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE",component:d("/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","dc7"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INSTALLATIONS",component:d("/ecalc/docs/about/references/keywords/INSTALLATIONS","ed5"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",component:d("/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","13e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",component:d("/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","47e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/LOAD",component:d("/ecalc/docs/about/references/keywords/LOAD","cc8"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE",component:d("/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","d7b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",component:d("/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","bf3"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE",component:d("/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","c59"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/MODELS",component:d("/ecalc/docs/about/references/keywords/MODELS","a5a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/NAME",component:d("/ecalc/docs/about/references/keywords/NAME","d44"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",component:d("/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","3da"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT",component:d("/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","330"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",component:d("/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","f94"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL",component:d("/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","dd5"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/PUMPS",component:d("/ecalc/docs/about/references/keywords/PUMPS","6dd"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/RATE",component:d("/ecalc/docs/about/references/keywords/RATE","a33"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/RATE_FRACTIONS",component:d("/ecalc/docs/about/references/keywords/RATE_FRACTIONS","d5a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM",component:d("/ecalc/docs/about/references/keywords/RATE_PER_STREAM","b6a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/REGULARITY",component:d("/ecalc/docs/about/references/keywords/REGULARITY","3a2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/STAGES",component:d("/ecalc/docs/about/references/keywords/STAGES","a5c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/START",component:d("/ecalc/docs/about/references/keywords/START","c55"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/STREAM",component:d("/ecalc/docs/about/references/keywords/STREAM","d9a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/STREAMS",component:d("/ecalc/docs/about/references/keywords/STREAMS","3c3"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",component:d("/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","45c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TIME_SERIES",component:d("/ecalc/docs/about/references/keywords/TIME_SERIES","56f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE",component:d("/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","0e8"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES",component:d("/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","5ab"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TURBINE_LOAD",component:d("/ecalc/docs/about/references/keywords/TURBINE_LOAD","5a2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TURBINE_MODEL",component:d("/ecalc/docs/about/references/keywords/TURBINE_MODEL","0df"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TYPE",component:d("/ecalc/docs/about/references/keywords/TYPE","9b2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/UNITS",component:d("/ecalc/docs/about/references/keywords/UNITS","5a9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",component:d("/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","bd0"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/VARIABLES",component:d("/ecalc/docs/about/references/keywords/VARIABLES","f4e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",component:d("/ecalc/docs/about/references/keywords/VENTING_EMITTERS","6b4"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/category/documentation",component:d("/ecalc/docs/category/documentation","cd3"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/category/guides",component:d("/ecalc/docs/category/guides","0bf"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/changelog/",component:d("/ecalc/docs/changelog/","b3d"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/latest",component:d("/ecalc/docs/changelog/latest","045"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/separator",component:d("/ecalc/docs/changelog/separator","796"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-0-release",component:d("/ecalc/docs/changelog/v7-0-release","2b8"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-1-release",component:d("/ecalc/docs/changelog/v7-1-release","6a0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-2-release",component:d("/ecalc/docs/changelog/v7-2-release","ac2"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-3-release",component:d("/ecalc/docs/changelog/v7-3-release","783"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-4-release",component:d("/ecalc/docs/changelog/v7-4-release","2af"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-5-release",component:d("/ecalc/docs/changelog/v7-5-release","753"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-6-release",component:d("/ecalc/docs/changelog/v7-6-release","bab"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.0-release",component:d("/ecalc/docs/changelog/v8.0-release","4b0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.1-release",component:d("/ecalc/docs/changelog/v8.1-release","074"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.2-release",component:d("/ecalc/docs/changelog/v8.2-release","249"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.3-release",component:d("/ecalc/docs/changelog/v8.3-release","7c0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.4-release",component:d("/ecalc/docs/changelog/v8.4-release","2a6"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.5-release",component:d("/ecalc/docs/changelog/v8.5-release","5a0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.6-release",component:d("/ecalc/docs/changelog/v8.6-release","520"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.7-release",component:d("/ecalc/docs/changelog/v8.7-release","553"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.8-release",component:d("/ecalc/docs/changelog/v8.8-release","df0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/contribute/documentation-guide/documentation",component:d("/ecalc/docs/contribute/documentation-guide/documentation","65b"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/contribute/documentation-guide/markdown",component:d("/ecalc/docs/contribute/documentation-guide/markdown","de5"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/contribute/get-started",component:d("/ecalc/docs/contribute/get-started","873"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/contribute/guides/conventional-commits",component:d("/ecalc/docs/contribute/guides/conventional-commits","573"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/contribute/guides/git",component:d("/ecalc/docs/contribute/guides/git","151"),exact:!0,sidebar:"contribute"}]}]}]},{path:"/ecalc/",component:d("/ecalc/","94a"),exact:!0},{path:"*",component:d("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>s});var r=n(7294),o=n(5893);const a=r.createContext(!1);function s(e){let{children:t}=e;const[n,s]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{s(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},7221:(e,t,n)=>{"use strict";var r=n(7294),o=n(745),a=n(3727),s=n(405),i=n(412);const l=[n(2497),n(3310),n(8320),n(2295)];var c=n(723),u=n(6550),d=n(8790),p=n(5893);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var m=n(5742),h=n(2263),g=n(4996),b=n(6668),y=n(1944),v=n(4711),w=n(9727),_=n(3320),k=n(8780),E=n(197);function x(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.Z)(),r=(0,v.l)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(m.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function S(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,u.TH)();return e+(0,k.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,p.jsxs)(m.Z,{children:[(0,p.jsx)("meta",{property:"og:url",content:o}),(0,p.jsx)("link",{rel:"canonical",href:o})]})}function T(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,b.L)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(m.Z,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.h})]}),n&&(0,p.jsx)(y.d,{image:n}),(0,p.jsx)(S,{}),(0,p.jsx)(x,{}),(0,p.jsx)(E.Z,{tag:_.HX,locale:e}),(0,p.jsx)(m.Z,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const R=new Map;function C(e){if(R.has(e.pathname))return{...e,pathname:R.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return R.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return R.set(e.pathname,t),{...e,pathname:t}}var N=n(8934),O=n(8940),A=n(469);function L(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=l.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const I=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,A.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:s}=t;if(s){const e=decodeURIComponent(s.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),L("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function P(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class j extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=i.Z.canUseDOM?L("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=L("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),P(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(I,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(u.AW,{location:t,render:()=>e})})}}const M=j,D="__docusaurus-base-url-issue-banner-container",F="__docusaurus-base-url-issue-banner",U="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${D}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${F}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${U}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${U}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function z(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,p.jsx)(p.Fragment,{children:!i.Z.canUseDOM&&(0,p.jsx)(m.Z,{children:(0,p.jsx)("script",{children:B(e)})})})}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?(0,p.jsx)(z,{}):null}function G(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:o}}=(0,h.Z)(),a=(0,g.Z)(e),{htmlLang:s,direction:i}=o[r];return(0,p.jsxs)(m.Z,{children:[(0,p.jsx)("html",{lang:s,dir:i}),(0,p.jsx)("title",{children:t}),(0,p.jsx)("meta",{property:"og:title",content:t}),(0,p.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,p.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,p.jsx)("link",{rel:"icon",href:a})]})}var H=n(4763),q=n(2389);function V(){const e=(0,q.Z)();return(0,p.jsx)(m.Z,{children:(0,p.jsx)("html",{"data-has-hydrated":e})})}function Q(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return(0,p.jsx)(H.Z,{children:(0,p.jsx)(O.M,{children:(0,p.jsxs)(N.t,{children:[(0,p.jsxs)(f,{children:[(0,p.jsx)(G,{}),(0,p.jsx)(T,{}),(0,p.jsx)($,{}),(0,p.jsx)(M,{location:C(t),children:e})]}),(0,p.jsx)(V,{})]})})})}var Z=n(6887);const W=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(9670);const X=new Set,K=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!K.has(e)&&!X.has(e))(e))return!1;X.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(Z).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?W(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!K.has(e))(e)&&(K.add(e),P(e))},te=Object.freeze(ee),ne=Boolean(!0);if(i.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(s.B6,{children:(0,p.jsx)(a.VK,{children:(0,p.jsx)(Q,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(ne)r.startTransition((()=>{o.hydrateRoot(e,t,{onRecoverableError:n})}));else{const a=o.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{a.render(t)}))}};P(window.location.pathname).then(i)}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>p});var r=n(7294),o=n(6809);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/ecalc/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/ecalc/docs","mainDocId":"about/index","docs":[{"id":"about/getting_started/cli/faq","path":"/ecalc/docs/about/getting_started/cli/faq","sidebar":"about"},{"id":"about/getting_started/cli/index","path":"/ecalc/docs/about/getting_started/cli/","sidebar":"about"},{"id":"about/getting_started/index","path":"/ecalc/docs/about/getting_started/","sidebar":"about"},{"id":"about/getting_started/library/index","path":"/ecalc/docs/about/getting_started/library/","sidebar":"about"},{"id":"about/getting_started/yaml/index","path":"/ecalc/docs/about/getting_started/yaml/","sidebar":"about"},{"id":"about/index","path":"/ecalc/docs/about/","sidebar":"about"},{"id":"about/migration_guides/index","path":"/ecalc/docs/about/migration_guides/","sidebar":"about"},{"id":"about/migration_guides/v7_to_v8","path":"/ecalc/docs/about/migration_guides/v7_to_v8","sidebar":"about"},{"id":"about/migration_guides/v8_to_v81","path":"/ecalc/docs/about/migration_guides/v8_to_v81","sidebar":"about"},{"id":"about/migration_guides/v8-1_to_v8-2","path":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","sidebar":"about"},{"id":"about/migration_guides/v8-2_to_v8-3","path":"/ecalc/docs/about/migration_guides/v8-2_to_v8-3","sidebar":"about"},{"id":"about/migration_guides/v8-3_to_v8-4","path":"/ecalc/docs/about/migration_guides/v8-3_to_v8-4","sidebar":"about"},{"id":"about/migration_guides/v8-5_to_v8-6","path":"/ecalc/docs/about/migration_guides/v8-5_to_v8-6","sidebar":"about"},{"id":"about/migration_guides/v8-6_to_v8-7","path":"/ecalc/docs/about/migration_guides/v8-6_to_v8-7","sidebar":"about"},{"id":"about/migration_guides/v8.7_to_v8.8","path":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","sidebar":"about"},{"id":"about/miscellaneous/index","path":"/ecalc/docs/about/miscellaneous/","sidebar":"about"},{"id":"about/modelling/examples/advanced","path":"/ecalc/docs/about/modelling/examples/advanced","sidebar":"about"},{"id":"about/modelling/examples/drogon","path":"/ecalc/docs/about/modelling/examples/drogon","sidebar":"about"},{"id":"about/modelling/examples/index","path":"/ecalc/docs/about/modelling/examples/","sidebar":"about"},{"id":"about/modelling/examples/simple","path":"/ecalc/docs/about/modelling/examples/simple","sidebar":"about"},{"id":"about/modelling/index","path":"/ecalc/docs/about/modelling/","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/generator_modelling","path":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/index","path":"/ecalc/docs/about/modelling/setup/facility_inputs/","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/pump_modelling/index","path":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/pump_modelling/pump_charts","path":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/sampled_compressor_model","path":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/tabular","path":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","sidebar":"about"},{"id":"about/modelling/setup/file_format_and_syntax/expressions","path":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","sidebar":"about"},{"id":"about/modelling/setup/file_format_and_syntax/index","path":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","sidebar":"about"},{"id":"about/modelling/setup/fuel_types","path":"/ecalc/docs/about/modelling/setup/fuel_types","sidebar":"about"},{"id":"about/modelling/setup/index","path":"/ecalc/docs/about/modelling/setup/","sidebar":"about"},{"id":"about/modelling/setup/installations/compressor_models_in_calculations/compressor","path":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","sidebar":"about"},{"id":"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","path":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","sidebar":"about"},{"id":"about/modelling/setup/installations/compressor_models_in_calculations/index","path":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/","sidebar":"about"},{"id":"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","path":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","sidebar":"about"},{"id":"about/modelling/setup/installations/direct_consumers","path":"/ecalc/docs/about/modelling/setup/installations/direct_consumers","sidebar":"about"},{"id":"about/modelling/setup/installations/generator_sets_in_calculations","path":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","sidebar":"about"},{"id":"about/modelling/setup/installations/index","path":"/ecalc/docs/about/modelling/setup/installations/","sidebar":"about"},{"id":"about/modelling/setup/installations/pump_models_in_calculations","path":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","sidebar":"about"},{"id":"about/modelling/setup/installations/tabular_models_in_calculations","path":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_charts/index","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/index","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/index","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/","sidebar":"about"},{"id":"about/modelling/setup/models/fluid_model","path":"/ecalc/docs/about/modelling/setup/models/fluid_model","sidebar":"about"},{"id":"about/modelling/setup/models/index","path":"/ecalc/docs/about/modelling/setup/models/","sidebar":"about"},{"id":"about/modelling/setup/models/turbine_modeling","path":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","sidebar":"about"},{"id":"about/modelling/setup/time_series","path":"/ecalc/docs/about/modelling/setup/time_series","sidebar":"about"},{"id":"about/modelling/setup/variables","path":"/ecalc/docs/about/modelling/setup/variables","sidebar":"about"},{"id":"about/modelling/theory/compressor_modelling","path":"/ecalc/docs/about/modelling/theory/compressor_modelling","sidebar":"about"},{"id":"about/modelling/theory/index","path":"/ecalc/docs/about/modelling/theory/","sidebar":"about"},{"id":"about/modelling/theory/pump_modelling","path":"/ecalc/docs/about/modelling/theory/pump_modelling","sidebar":"about"},{"id":"about/modelling/workflow/generic_workflow","path":"/ecalc/docs/about/modelling/workflow/generic_workflow","sidebar":"about"},{"id":"about/modelling/workflow/index","path":"/ecalc/docs/about/modelling/workflow/","sidebar":"about"},{"id":"about/references/api/index","path":"/ecalc/docs/about/references/api/","sidebar":"about"},{"id":"about/references/cli_reference","path":"/ecalc/docs/about/references/cli_reference","sidebar":"about"},{"id":"about/references/index","path":"/ecalc/docs/about/references/","sidebar":"about"},{"id":"about/references/keywords/ADJUSTMENT","path":"/ecalc/docs/about/references/keywords/ADJUSTMENT","sidebar":"about"},{"id":"about/references/keywords/CATEGORY","path":"/ecalc/docs/about/references/keywords/CATEGORY","sidebar":"about"},{"id":"about/references/keywords/COMPRESSOR_MODEL","path":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","sidebar":"about"},{"id":"about/references/keywords/COMPRESSOR_SYSTEM","path":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","sidebar":"about"},{"id":"about/references/keywords/COMPRESSOR_TRAIN_MODEL","path":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","sidebar":"about"},{"id":"about/references/keywords/CONDITION","path":"/ecalc/docs/about/references/keywords/CONDITION","sidebar":"about"},{"id":"about/references/keywords/CONDITIONS","path":"/ecalc/docs/about/references/keywords/CONDITIONS","sidebar":"about"},{"id":"about/references/keywords/CONSTANT","path":"/ecalc/docs/about/references/keywords/CONSTANT","sidebar":"about"},{"id":"about/references/keywords/CONSUMERS","path":"/ecalc/docs/about/references/keywords/CONSUMERS","sidebar":"about"},{"id":"about/references/keywords/CONSUMPTION_RATE_TYPE","path":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","sidebar":"about"},{"id":"about/references/keywords/CONTROL_MARGIN","path":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","sidebar":"about"},{"id":"about/references/keywords/CONTROL_MARGIN_UNIT","path":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","sidebar":"about"},{"id":"about/references/keywords/CROSSOVER","path":"/ecalc/docs/about/references/keywords/CROSSOVER","sidebar":"about"},{"id":"about/references/keywords/CURVE","path":"/ecalc/docs/about/references/keywords/CURVE","sidebar":"about"},{"id":"about/references/keywords/CURVES","path":"/ecalc/docs/about/references/keywords/CURVES","sidebar":"about"},{"id":"about/references/keywords/DIRECT_EMITTERS","path":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","sidebar":"about"},{"id":"about/references/keywords/DISCHARGE_PRESSURE","path":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","sidebar":"about"},{"id":"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","path":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","sidebar":"about"},{"id":"about/references/keywords/EFFICIENCY","path":"/ecalc/docs/about/references/keywords/EFFICIENCY","sidebar":"about"},{"id":"about/references/keywords/ELECTRICITY2FUEL","path":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","sidebar":"about"},{"id":"about/references/keywords/EMISSION","path":"/ecalc/docs/about/references/keywords/EMISSION","sidebar":"about"},{"id":"about/references/keywords/EMISSION_NAME","path":"/ecalc/docs/about/references/keywords/EMISSION_NAME","sidebar":"about"},{"id":"about/references/keywords/EMISSION_RATE","path":"/ecalc/docs/about/references/keywords/EMISSION_RATE","sidebar":"about"},{"id":"about/references/keywords/EMISSIONS","path":"/ecalc/docs/about/references/keywords/EMISSIONS","sidebar":"about"},{"id":"about/references/keywords/EMITTER_MODEL","path":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","sidebar":"about"},{"id":"about/references/keywords/END","path":"/ecalc/docs/about/references/keywords/END","sidebar":"about"},{"id":"about/references/keywords/ENERGY_USAGE_MODEL","path":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","sidebar":"about"},{"id":"about/references/keywords/ENERGYFUNCTION","path":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","sidebar":"about"},{"id":"about/references/keywords/EXPRESSION","path":"/ecalc/docs/about/references/keywords/EXPRESSION","sidebar":"about"},{"id":"about/references/keywords/EXTRAPOLATION","path":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","sidebar":"about"},{"id":"about/references/keywords/FACILITY_INPUTS","path":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","sidebar":"about"},{"id":"about/references/keywords/FACTOR","path":"/ecalc/docs/about/references/keywords/FACTOR","sidebar":"about"},{"id":"about/references/keywords/FILE","path":"/ecalc/docs/about/references/keywords/FILE","sidebar":"about"},{"id":"about/references/keywords/FLUID_DENSITY","path":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","sidebar":"about"},{"id":"about/references/keywords/FLUID_MODEL","path":"/ecalc/docs/about/references/keywords/FLUID_MODEL","sidebar":"about"},{"id":"about/references/keywords/FUEL","path":"/ecalc/docs/about/references/keywords/FUEL","sidebar":"about"},{"id":"about/references/keywords/FUEL_TYPES","path":"/ecalc/docs/about/references/keywords/FUEL_TYPES","sidebar":"about"},{"id":"about/references/keywords/FUELCONSUMERS","path":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","sidebar":"about"},{"id":"about/references/keywords/FUELRATE","path":"/ecalc/docs/about/references/keywords/FUELRATE","sidebar":"about"},{"id":"about/references/keywords/GENERATORSETS","path":"/ecalc/docs/about/references/keywords/GENERATORSETS","sidebar":"about"},{"id":"about/references/keywords/HCEXPORT","path":"/ecalc/docs/about/references/keywords/HCEXPORT","sidebar":"about"},{"id":"about/references/keywords/HEAD","path":"/ecalc/docs/about/references/keywords/HEAD","sidebar":"about"},{"id":"about/references/keywords/HEAD_MARGIN","path":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","sidebar":"about"},{"id":"about/references/keywords/include","path":"/ecalc/docs/about/references/keywords/include","sidebar":"about"},{"id":"about/references/keywords/index","path":"/ecalc/docs/about/references/keywords/","sidebar":"about"},{"id":"about/references/keywords/INFLUENCE_TIME_VECTOR","path":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","sidebar":"about"},{"id":"about/references/keywords/INLET_TEMPERATURE","path":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","sidebar":"about"},{"id":"about/references/keywords/INSTALLATIONS","path":"/ecalc/docs/about/references/keywords/INSTALLATIONS","sidebar":"about"},{"id":"about/references/keywords/INTERPOLATION_TYPE","path":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","sidebar":"about"},{"id":"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","path":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","sidebar":"about"},{"id":"about/references/keywords/LOAD","path":"/ecalc/docs/about/references/keywords/LOAD","sidebar":"about"},{"id":"about/references/keywords/LOWER_HEATING_VALUE","path":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","sidebar":"about"},{"id":"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","path":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","sidebar":"about"},{"id":"about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","path":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","sidebar":"about"},{"id":"about/references/keywords/MODELS","path":"/ecalc/docs/about/references/keywords/MODELS","sidebar":"about"},{"id":"about/references/keywords/NAME","path":"/ecalc/docs/about/references/keywords/NAME","sidebar":"about"},{"id":"about/references/keywords/OPERATIONAL_SETTINGS","path":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","sidebar":"about"},{"id":"about/references/keywords/POWER_ADJUSTMENT_CONSTANT","path":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","sidebar":"about"},{"id":"about/references/keywords/POWERLOSSFACTOR","path":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","sidebar":"about"},{"id":"about/references/keywords/PRESSURE_CONTROL","path":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","sidebar":"about"},{"id":"about/references/keywords/PUMPS","path":"/ecalc/docs/about/references/keywords/PUMPS","sidebar":"about"},{"id":"about/references/keywords/RATE","path":"/ecalc/docs/about/references/keywords/RATE","sidebar":"about"},{"id":"about/references/keywords/RATE_FRACTIONS","path":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","sidebar":"about"},{"id":"about/references/keywords/RATE_PER_STREAM","path":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","sidebar":"about"},{"id":"about/references/keywords/REGULARITY","path":"/ecalc/docs/about/references/keywords/REGULARITY","sidebar":"about"},{"id":"about/references/keywords/STAGES","path":"/ecalc/docs/about/references/keywords/STAGES","sidebar":"about"},{"id":"about/references/keywords/START","path":"/ecalc/docs/about/references/keywords/START","sidebar":"about"},{"id":"about/references/keywords/STREAM","path":"/ecalc/docs/about/references/keywords/STREAM","sidebar":"about"},{"id":"about/references/keywords/STREAMS","path":"/ecalc/docs/about/references/keywords/STREAMS","sidebar":"about"},{"id":"about/references/keywords/SUCTION_PRESSURE","path":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","sidebar":"about"},{"id":"about/references/keywords/TIME_SERIES","path":"/ecalc/docs/about/references/keywords/TIME_SERIES","sidebar":"about"},{"id":"about/references/keywords/TOTAL_SYSTEM_RATE","path":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","sidebar":"about"},{"id":"about/references/keywords/TURBINE_EFFICIENCIES","path":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","sidebar":"about"},{"id":"about/references/keywords/TURBINE_LOAD","path":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","sidebar":"about"},{"id":"about/references/keywords/TURBINE_MODEL","path":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","sidebar":"about"},{"id":"about/references/keywords/TYPE","path":"/ecalc/docs/about/references/keywords/TYPE","sidebar":"about"},{"id":"about/references/keywords/UNITS","path":"/ecalc/docs/about/references/keywords/UNITS","sidebar":"about"},{"id":"about/references/keywords/UPSTREAM_PRESSURE_CONTROL","path":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","sidebar":"about"},{"id":"about/references/keywords/VARIABLES","path":"/ecalc/docs/about/references/keywords/VARIABLES","sidebar":"about"},{"id":"about/references/keywords/VENTING_EMITTERS","path":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","sidebar":"about"},{"id":"changelog/changelog","path":"/ecalc/docs/changelog/","sidebar":"changelog"},{"id":"changelog/next","path":"/ecalc/docs/changelog/latest","sidebar":"changelog"},{"id":"changelog/separator","path":"/ecalc/docs/changelog/separator","sidebar":"changelog"},{"id":"changelog/v7-0","path":"/ecalc/docs/changelog/v7-0-release","sidebar":"changelog"},{"id":"changelog/v7-1","path":"/ecalc/docs/changelog/v7-1-release","sidebar":"changelog"},{"id":"changelog/v7-2","path":"/ecalc/docs/changelog/v7-2-release","sidebar":"changelog"},{"id":"changelog/v7-3","path":"/ecalc/docs/changelog/v7-3-release","sidebar":"changelog"},{"id":"changelog/v7-4","path":"/ecalc/docs/changelog/v7-4-release","sidebar":"changelog"},{"id":"changelog/v7-5","path":"/ecalc/docs/changelog/v7-5-release","sidebar":"changelog"},{"id":"changelog/v7-6","path":"/ecalc/docs/changelog/v7-6-release","sidebar":"changelog"},{"id":"changelog/v8-0","path":"/ecalc/docs/changelog/v8.0-release","sidebar":"changelog"},{"id":"changelog/v8-1","path":"/ecalc/docs/changelog/v8.1-release","sidebar":"changelog"},{"id":"changelog/v8-2","path":"/ecalc/docs/changelog/v8.2-release","sidebar":"changelog"},{"id":"changelog/v8-3","path":"/ecalc/docs/changelog/v8.3-release","sidebar":"changelog"},{"id":"changelog/v8-4","path":"/ecalc/docs/changelog/v8.4-release","sidebar":"changelog"},{"id":"changelog/v8-5","path":"/ecalc/docs/changelog/v8.5-release","sidebar":"changelog"},{"id":"changelog/v8-6","path":"/ecalc/docs/changelog/v8.6-release","sidebar":"changelog"},{"id":"changelog/v8-7","path":"/ecalc/docs/changelog/v8.7-release","sidebar":"changelog"},{"id":"changelog/v8-8","path":"/ecalc/docs/changelog/v8.8-release","sidebar":"changelog"},{"id":"contribute/documentation-guide/documentation","path":"/ecalc/docs/contribute/documentation-guide/documentation","sidebar":"contribute"},{"id":"contribute/documentation-guide/markdown","path":"/ecalc/docs/contribute/documentation-guide/markdown","sidebar":"contribute"},{"id":"contribute/get-started","path":"/ecalc/docs/contribute/get-started","sidebar":"contribute"},{"id":"contribute/guides/conventional-commits","path":"/ecalc/docs/contribute/guides/conventional-commits","sidebar":"contribute"},{"id":"contribute/guides/git","path":"/ecalc/docs/contribute/guides/git","sidebar":"contribute"},{"id":"/category/documentation","path":"/ecalc/docs/category/documentation","sidebar":"contribute"},{"id":"/category/guides","path":"/ecalc/docs/category/guides","sidebar":"contribute"}],"draftIds":[],"sidebars":{"about":{"link":{"path":"/ecalc/docs/about/","label":"about/index"}},"contribute":{"link":{"path":"/ecalc/docs/contribute/get-started","label":"contribute/get-started"}},"changelog":{"link":{"path":"/ecalc/docs/changelog/v8.8-release","label":"changelog/v8-8"}}}}],"breadcrumbs":true}}}'),s=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var i=n(7529);const l=JSON.parse('{"docusaurusVersion":"3.1.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.1.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.1.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.1.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.1.1"},"@easyops-cn/docusaurus-search-local":{"type":"local"}}}');var c=n(5893);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:s,codeTranslations:i},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(412),a=n(5742),s=n(8780),i=n(8862),l=n(5893);function c(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,l.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,l.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,l.jsx)(u,{error:t})]})}function u(e){let{error:t}=e;const n=(0,s.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)(f,{fallback:()=>(0,l.jsx)(c,{error:t,tryAgain:n}),children:[(0,l.jsx)(a.Z,{children:(0,l.jsx)("title",{children:"Page Error"})}),(0,l.jsx)(i.Z,{children:(0,l.jsx)(c,{error:t,tryAgain:n})})]})}const p=e=>(0,l.jsx)(d,{...e});class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??p)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(7294);var r=n(405),o=n(5893);function a(e){return(0,o.jsx)(r.ql,{...e})}},3692:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(3727),a=n(8780),s=n(2263),i=n(3919),l=n(412),c=n(8138),u=n(4996),d=n(5893);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,s.Z)(),{withBaseUrl:_}=(0,u.C)(),k=(0,c.Z)(),E=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>E.current));const x=p||f;const S=(0,i.Z)(x),T=x?.replace("pathname://","");let R=void 0!==T?(C=T,b&&(e=>e.startsWith("/"))(C)?_(C):C):void 0;var C;R&&S&&(R=(0,a.applyTrailingSlash)(R,{trailingSlash:v,baseUrl:w}));const N=(0,r.useRef)(!1),O=n?o.OL:o.rU,A=l.Z.canUseIntersectionObserver,L=(0,r.useRef)(),I=()=>{N.current||null==R||(window.docusaurus.preload(R),N.current=!0)};(0,r.useEffect)((()=>(!A&&S&&null!=R&&window.docusaurus.prefetch(R),()=>{A&&L.current&&L.current.disconnect()})),[L,R,A,S]);const P=R?.startsWith("#")??!1,j=!y.target||"_self"===y.target,M=!R||!S||!j||P;return g||!P&&M||k.collectLink(R),y.id&&k.collectAnchor(y.id),M?(0,d.jsx)("a",{ref:E,href:R,...x&&!S&&{target:"_blank",rel:"noopener noreferrer"},...y}):(0,d.jsx)(O,{...y,onMouseEnter:I,onTouchStart:I,innerRef:e=>{E.current=e,A&&e&&S&&(L.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=R&&window.docusaurus.prefetch(R))}))})),L.current.observe(e))},to:R,...n&&{isActive:h,activeClassName:m}})}const f=r.forwardRef(p)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>l});var r=n(7294),o=n(5893);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var s=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return s[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const s=i({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(s,r)})}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>s,Z:()=>i});var r=n(7294),o=n(2263),a=n(3919);function s(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:s=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const i=n.startsWith(t)?n:t+n.replace(/^\//,"");return s?e+i:i}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function i(e,t){void 0===t&&(t={});const{withBaseUrl:n}=s();return n(e,t)}},8138:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(7294);n(5893);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function s(){return a()}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8940);function a(){return(0,r.useContext)(o._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8934);function a(){return(0,r.useContext)(o._)}},469:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const o=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,s]=n;const i=o?`${o}.${a}`:a;r(s)?e(s,i):t[i]=s}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>s});var r=n(7294),o=n(5893);const a=r.createContext(null);function s(e){let{children:t,value:n}=e;const s=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:s,value:n})),[s,n]);return(0,o.jsx)(a.Provider,{value:i,children:t})}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>p,_r:()=>u,Jo:()=>g,zh:()=>d,yW:()=>m,gB:()=>f});var r=n(6550),o=n(2263),a=n(9935);function s(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const i=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=function(e,t){const n=i(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},u=()=>s("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=s(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return i(t)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return l(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=i(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(2573),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(6854),n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},2503:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(7294);var r=n(512),o=n(5999),a=n(6668),s=n(3692),i=n(8138);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(5893);function u(e){let{as:t,id:n,...u}=e;const d=(0,i.Z)(),{navbar:{hideOnScroll:p}}=(0,a.L)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,o.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.Z)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(s.Z,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(7294);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(5893);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},8862:(e,t,n)=>{"use strict";n.d(t,{Z:()=>jt});var r=n(7294),o=n(512),a=n(4763),s=n(1944),i=n(6550),l=n(5999),c=n(5936),u=n(5893);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,i.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var g=n(5281),b=n(9727);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(h,{className:y.skipToContent})}var w=n(6668),_=n(9689);function k(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...s}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...s,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const E={closeButton:"closeButton_CVFx"};function x(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.Z)("clean-btn close",E.closeButton,e.className),children:(0,u.jsx)(k,{width:14,height:14,strokeWidth:3.1})})}const S={content:"content_knG7"};function T(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.Z)(S.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const R={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,_.nT)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:R.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:R.announcementBarPlaceholder}),(0,u.jsx)(T,{className:R.announcementBarContent}),a&&(0,u.jsx)(x,{onClick:n,className:R.announcementBarClose})]})}var N=n(2961),O=n(2466);var A=n(902),L=n(3102);const I=r.createContext(null);function P(e){let{children:t}=e;const n=function(){const e=(0,N.e)(),t=(0,L.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,s=(0,A.D9)(a);return(0,r.useEffect)((()=>{a&&!s&&o(!0)}),[a,s]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(I.Provider,{value:n,children:t})}function j(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function M(){const e=(0,r.useContext)(I);if(!e)throw new A.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,L.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:j(a)})),[o,a,t])}function D(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=M();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var F=n(2949),U=n(2389);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function z(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function G(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const s=(0,U.Z)(),i=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.Z)($.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.Z)("clean-btn",$.toggleButton,!s&&$.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!s,title:i,"aria-label":i,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,o.Z)($.toggleIcon,$.lightToggleIcon)}),(0,u.jsx)(z,{className:(0,o.Z)($.toggleIcon,$.darkToggleIcon)})]})})}const H=r.memo(G),q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,F.I)();return r?null:(0,u.jsx)(H,{className:t,buttonClassName:"dark"===n?q.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var Q=n(1327);function Z(){return(0,u.jsx)(Q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function W(){const e=(0,N.e)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(k,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(Z,{}),(0,u.jsx)(V,{className:"margin-right--md"}),(0,u.jsx)(W,{})]})}var X=n(3692),K=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:s,isDropdownLink:i,prependBaseUrlToHref:l,...c}=e;const d=(0,K.Z)(r),p=(0,K.Z)(t),f=(0,K.Z)(o,{forcePrependBaseUrl:!0}),m=a&&o&&!(0,J.Z)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,m&&(0,u.jsx)(te.Z,{...i&&{width:12,height:12}})]})};return o?(0,u.jsx)(X.Z,{href:l?f:o,...c,...h}):(0,u.jsx)(X.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...c,...h})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.Z)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var se=n(6043),ie=n(8596),le=n(2263);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,ie.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:s,...i}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:i.to?void 0:"#",className:(0,o.Z)("navbar__link",a),...i,onClick:i.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:i.children??i.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Qe,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:s,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,i.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,se.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),(0,u.jsxs)("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.Z)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(se.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(Qe,{mobile:!0,isDropdownItem:!0,onClick:s,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var me=n(4711);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const ge="iconLanguage_nlXk";var be=n(1029),ye=n(1728),ve=n(373),we=n(143),_e=n(22),ke=n(8202),Ee=n(3926),xe=n(1073),Se=n(2539),Te=n(726);const Re='<svg width="20" height="20" viewBox="0 0 20 20"><path d="M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linejoin="round"></path></svg>',Ce='<svg width="20" height="20" viewBox="0 0 20 20"><path d="M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg>',Ne='<svg width="20" height="20" viewBox="0 0 20 20"><path d="M17 5H3h14zm0 5H3h14zm0 5H3h14z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linejoin="round"></path></svg>',Oe='<svg width="20" height="20" viewBox="0 0 20 20"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M18 3v4c0 2-2 4-4 4H2"></path><path d="M8 17l-6-6 6-6"></path></g></svg>',Ae='<svg width="40" height="40" viewBox="0 0 20 20" fill="none" fill-rule="evenodd" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><path d="M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"></path></svg>',Le='<svg viewBox="0 0 24 54"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6v42M20 27H8.3"></path></g></svg>',Ie='<svg viewBox="0 0 24 54"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6v21M20 27H8.3"></path></g></svg>',Pe={searchBar:"searchBar_RVTs",dropdownMenu:"dropdownMenu_qbY6",searchBarLeft:"searchBarLeft_MXDe",suggestion:"suggestion_fB_2",cursor:"cursor_eG29",hitTree:"hitTree_kk6K",hitIcon:"hitIcon_a7Zy",hitPath:"hitPath_ieM4",noResultsIcon:"noResultsIcon_EBY5",hitFooter:"hitFooter_E9YW",hitWrapper:"hitWrapper_sAK8",hitTitle:"hitTitle_vyVt",hitAction:"hitAction_NqkB",hideAction:"hideAction_vcyE",noResults:"noResults_l6Q3",searchBarContainer:"searchBarContainer_NW3z",searchBarLoadingRing:"searchBarLoadingRing_YnHq",searchClearButton:"searchClearButton_qk4g",searchIndexLoading:"searchIndexLoading_EJ1f",searchHintContainer:"searchHintContainer_Pkmr",searchHint:"searchHint_iIMx",focused:"focused_OWtg",input:"input_FOTf",hint:"hint_URu1",suggestions:"suggestions_X8XU",dataset:"dataset_QiCy",empty:"empty_eITn"};function je(e){let{document:t,type:n,page:r,metadata:o,tokens:a,isInterOfTree:s,isLastOfTree:i}=e;const l=0===n,c=1===n,u=[];s?u.push(Le):i&&u.push(Ie);const d=u.map((e=>`<span class="${Pe.hitTree}">${e}</span>`)),p=`<span class="${Pe.hitIcon}">${l?Re:c?Ce:Ne}</span>`,f=[`<span class="${Pe.hitTitle}">${(0,Te.o)(t.t,(0,xe.m)(o,"t"),a)}</span>`];if(!s&&!i&&be.H6){const e=r?(r.b??[]).concat(r.t).concat(t.s&&t.s!==r.t?t.s:[]):t.b;f.push(`<span class="${Pe.hitPath}">${(0,Ee.e)(e??[])}</span>`)}else l||f.push(`<span class="${Pe.hitPath}">${(0,Se.C)(r.t||(t.u.startsWith("/docs/api-reference/")?"API Reference":""),a)}</span>`);const m=`<span class="${Pe.hitAction}">${Oe}</span>`;return[...d,p,`<span class="${Pe.hitWrapper}">`,...f,"</span>",m].join("")}function Me(){return`<span class="${Pe.noResults}"><span class="${Pe.noResultsIcon}">${Ae}</span><span>${(0,l.I)({id:"theme.SearchBar.noResultsText",message:"No results"})}</span></span>`}var De=n(311),Fe=n(51);async function Ue(){const e=await Promise.all([n.e(8443),n.e(5525)]).then(n.t.bind(n,8443,23)),t=e.default;return t.noConflict?t.noConflict():e.noConflict&&e.noConflict(),t}const Be="_highlight";const ze=function(e){let{handleSearchBarToggle:t}=e;const n=(0,U.Z)(),{siteConfig:{baseUrl:o},i18n:{currentLocale:a}}=(0,le.Z)(),s=(0,we.gA)();let c=o;try{const{preferredVersion:e}=(0,ve.J)(s?.pluginId??be.gQ);e&&!e.isLast&&(c=e.path+"/")}catch(D){if(be.l9&&!(D instanceof A.i6))throw D}const d=(0,i.k6)(),p=(0,i.TH)(),f=(0,r.useRef)(null),m=(0,r.useRef)(new Map),h=(0,r.useRef)(!1),[g,b]=(0,r.useState)(!1),[y,v]=(0,r.useState)(!1),[w,_]=(0,r.useState)(""),k=(0,r.useRef)(null),E=(0,r.useRef)(""),[x,S]=(0,r.useState)("");(0,r.useEffect)((()=>{if(!Array.isArray(be.Kc))return;let e="";if(p.pathname.startsWith(c)){const t=p.pathname.substring(c.length);let n;for(const e of be.Kc){const r="string"==typeof e?e:e.path;if(t===r||t.startsWith(`${r}/`)){n=r;break}}n&&(e=n)}E.current!==e&&(m.current.delete(e),E.current=e),S(e)}),[p.pathname,c]);const T=!!be.hG&&Array.isArray(be.Kc)&&""===x,R=(0,r.useCallback)((async()=>{if(T||m.current.get(x))return;m.current.set(x,"loading"),k.current?.autocomplete.destroy(),b(!0);const[{wrappedIndexes:e,zhDictionary:t},n]=await Promise.all([(0,_e.w)(c,x),Ue()]);if(k.current=n(f.current,{hint:!1,autoselect:!0,openOnFocus:!0,cssClasses:{root:(0,ye.Z)(Pe.searchBar,{[Pe.searchBarLeft]:"left"===be.pu}),noPrefix:!0,dropdownMenu:Pe.dropdownMenu,input:Pe.input,hint:Pe.hint,suggestions:Pe.suggestions,suggestion:Pe.suggestion,cursor:Pe.cursor,dataset:Pe.dataset,empty:Pe.empty}},[{source:(0,ke.v)(e,t,be.qo),templates:{suggestion:je,empty:Me,footer:e=>{let{query:t,isEmpty:n}=e;if(n&&(!x||!be.pQ))return;const r=(e=>{let{query:t,isEmpty:n}=e;const r=document.createElement("a"),s=new URLSearchParams;let i;if(s.set("q",t),x){const e=x&&Array.isArray(be.Kc)?be.Kc.find((e=>"string"==typeof e?e===x:e.path===x)):x,t=e?(0,Fe._)(e,a).label:x;i=be.pQ&&n?(0,l.I)({id:"theme.SearchBar.seeAllOutsideContext",message:"See results outside {context}"},{context:t}):(0,l.I)({id:"theme.SearchBar.searchInContext",message:"See all results in {context}"},{context:t})}else i=(0,l.I)({id:"theme.SearchBar.seeAll",message:"See all results"});if(!x||!Array.isArray(be.Kc)||be.pQ&&n||s.set("ctx",x),c!==o){if(!c.startsWith(o))throw new Error(`Version url '${c}' does not start with base url '${o}', this is a bug of \`@easyops-cn/docusaurus-search-local\`, please report it.`);s.set("version",c.substring(o.length))}const u=`${o}search?${s.toString()}`;return r.href=u,r.textContent=i,r.addEventListener("click",(e=>{e.ctrlKey||e.metaKey||(e.preventDefault(),k.current?.autocomplete.close(),d.push(u))})),r})({query:t,isEmpty:n}),s=document.createElement("div");return s.className=Pe.hitFooter,s.appendChild(r),s}}}]).on("autocomplete:selected",(function(e,t){let{document:{u:n,h:r},tokens:o}=t;f.current?.blur();let a=n;if(be.vc&&o.length>0){const e=new URLSearchParams;for(const t of o)e.append(Be,t);a+=`?${e.toString()}`}r&&(a+=r),d.push(a)})).on("autocomplete:closed",(()=>{f.current?.blur()})),m.current.set(x,"done"),b(!1),h.current){const e=f.current;e.value&&k.current?.autocomplete.open(),e.focus()}}),[T,x,c,o,d]);(0,r.useEffect)((()=>{if(!be.vc)return;const e=n?new URLSearchParams(p.search).getAll(Be):[];setTimeout((()=>{const t=document.querySelector("article");if(!t)return;const n=new be.vc(t);n.unmark(),0!==e.length&&n.mark(e),_(e.join(" ")),k.current?.autocomplete.setVal(e.join(" "))}))}),[n,p.search,p.pathname]);const[C,N]=(0,r.useState)(!1),O=(0,r.useCallback)((()=>{h.current=!0,R(),N(!0),t?.(!0)}),[t,R]),L=(0,r.useCallback)((()=>{N(!1),t?.(!1)}),[t]),I=(0,r.useCallback)((()=>{R()}),[R]),P=(0,r.useCallback)((e=>{_(e.target.value),e.target.value&&v(!0)}),[]),j=!!n&&/mac/i.test(navigator.userAgentData?.platform??navigator.platform);(0,r.useEffect)((()=>{if(!be.AY)return;const e=e=>{!(j?e.metaKey:e.ctrlKey)||"k"!==e.key&&"K"!==e.key||(e.preventDefault(),f.current?.focus(),O())};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[j,O]);const M=(0,r.useCallback)((()=>{const e=new URLSearchParams(p.search);e.delete(Be);const t=e.toString(),n=p.pathname+(""!=t?`?${t}`:"")+p.hash;n!=p.pathname+p.search+p.hash&&d.push(n),_(""),k.current?.autocomplete.setVal("")}),[p.pathname,p.search,p.hash,d]);return(0,u.jsxs)("div",{className:(0,ye.Z)("navbar__search",Pe.searchBarContainer,{[Pe.searchIndexLoading]:g&&y,[Pe.focused]:C}),hidden:T,children:[(0,u.jsx)("input",{placeholder:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),"aria-label":"Search",className:"navbar__search-input",onMouseEnter:I,onFocus:O,onBlur:L,onChange:P,ref:f,value:w}),(0,u.jsx)(De.Z,{className:Pe.searchBarLoadingRing}),be.AY&&be.t_&&(""!==w?(0,u.jsx)("button",{className:Pe.searchClearButton,onClick:M,children:"\u2715"}):n&&(0,u.jsxs)("div",{className:Pe.searchHintContainer,children:[(0,u.jsx)("kbd",{className:Pe.searchHint,children:j?"\u2318":"ctrl"}),(0,u.jsx)("kbd",{className:Pe.searchHint,children:"K"})]}))]})},$e={navbarSearchContainer:"navbarSearchContainer_Bca1"};function Ge(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.Z)(n,$e.navbarSearchContainer),children:t})}var He=n(2802);const qe=e=>e.docs.find((t=>t.id===e.mainDocId));const Ve={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:s,locales:c,localeConfigs:d}}=(0,le.Z)(),p=(0,me.l)(),{search:f,hash:m}=(0,i.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===s?t?"menu__link--active":"dropdown__link--active":""}})),...r],g=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[s].label;return(0,u.jsx)(fe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(he,{className:ge}),g]}),items:h})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(Ge,{className:n,children:(0,u.jsx)(ze,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const s=a?"li":"div";return(0,u.jsx)(s,{className:(0,o.Z)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.Iw)(r),s=(0,He.vY)(t,r),i=a?.path===s?.path;return null===s||s.unlisted&&!i?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>i||!!a?.sidebar&&a.sidebar===s.sidebar,label:n??s.id,to:s.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.Iw)(r),s=(0,He.oz)(t,r).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??s.label,to:s.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,He.lO)(r)[0],s=t??a.label,i=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:s,to:i})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...s}=e;const{search:c,hash:d}=(0,i.TH)(),p=(0,we.Iw)(n),f=(0,we.gB)(n),{savePreferredVersionName:m}=(0,ve.J)(n),h=[...o,...f.map((e=>{const t=p.alternateDocVersions[e.name]??qe(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...a],g=(0,He.lO)(n)[0],b=t&&h.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,y=t&&h.length>1?void 0:qe(g).path;return h.length<=1?(0,u.jsx)(ae,{...s,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...s,mobile:t,label:b,to:y,items:h,isActive:r?()=>!1:void 0})}};function Qe(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ve[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function Ze(){const e=(0,N.e)(),t=(0,w.L)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Qe,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function We(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ye(){const e=0===(0,w.L)().navbar.items.length,t=M();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(We,{onClick:()=>t.hide()}),t.content]})}function Xe(){const e=(0,N.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(D,{header:(0,u.jsx)(Y,{}),primaryMenu:(0,u.jsx)(Ze,{}),secondaryMenu:(0,u.jsx)(Ye,{})}):null}const Ke={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Je(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.Z)("navbar-sidebar__backdrop",e.className)})}function et(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),s=(0,N.e)(),{navbarRef:i,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),s=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,O.RF)(((t,r)=>{let{scrollY:s}=t;if(!e)return;if(s<a.current)return void n(!0);if(o.current)return void(o.current=!1);const i=r?.scrollY,l=document.documentElement.scrollHeight-a.current,c=window.innerHeight;i&&s>=i?n(!1):s+c<l&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:s,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:i,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Ke.navbarHideable,!d&&Ke.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":s.shown}),children:[t,(0,u.jsx)(Je,{onClick:s.toggle}),(0,u.jsx)(Xe,{})]})}var tt=n(8780);const nt={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function rt(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function ot(e){let{error:t}=e;const n=(0,tt.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:nt.errorBoundaryError,children:n})}class at extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const st="right";function it(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function lt(){const{toggle:e,shown:t}=(0,N.e)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(it,{})})}const ct={colorModeToggle:"colorModeToggle_DEke"};function ut(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(at,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(Qe,{...e})},t)))})}function dt(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function pt(){const e=(0,N.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??st)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(dt,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(lt,{}),(0,u.jsx)(Z,{}),(0,u.jsx)(ut,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(ut,{items:r}),(0,u.jsx)(V,{className:ct.colorModeToggle}),!o&&(0,u.jsx)(Ge,{children:(0,u.jsx)(ze,{})})]})})}function ft(){return(0,u.jsx)(et,{children:(0,u.jsx)(pt,{})})}function mt(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...s}=t,i=(0,K.Z)(n),l=(0,K.Z)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(X.Z,{className:"footer__link-item",...r?{href:a?l:r}:{to:i},...s,children:[o,r&&!(0,J.Z)(r)&&(0,u.jsx)(te.Z,{})]})}function ht(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(mt,{item:t})},t.href??t.to)}function gt(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(ht,{item:e},t)))})]})}function bt(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(gt,{column:e},t)))})}function yt(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function vt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(mt,{item:t})}function wt(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(vt,{item:e}),t.length!==n+1&&(0,u.jsx)(yt,{})]},n)))})})}function _t(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(bt,{columns:t}):(0,u.jsx)(wt,{links:t})}var kt=n(9965);const Et={footerLogoLink:"footerLogoLink_BH7S"};function xt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,K.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(kt.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function St(e){let{logo:t}=e;return t.href?(0,u.jsx)(X.Z,{href:t.href,className:Et.footerLogoLink,target:t.target,children:(0,u.jsx)(xt,{logo:t})}):(0,u.jsx)(xt,{logo:t})}function Tt(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Rt(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function Ct(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(Rt,{style:o,links:n&&n.length>0&&(0,u.jsx)(_t,{links:n}),logo:r&&(0,u.jsx)(St,{logo:r}),copyright:t&&(0,u.jsx)(Tt,{copyright:t})})}const Nt=r.memo(Ct),Ot=(0,A.Qc)([F.S,_.pl,O.OC,ve.L5,s.VC,function(e){let{children:t}=e;return(0,u.jsx)(L.n2,{children:(0,u.jsx)(N.M,{children:(0,u.jsx)(P,{children:t})})})}]);function At(e){let{children:t}=e;return(0,u.jsx)(Ot,{children:t})}var Lt=n(2503);function It(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Lt.Z,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(rt,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(ot,{error:t})})]})})})}const Pt={mainWrapper:"mainWrapper_z2l0"};function jt(e){const{children:t,noFooter:n,wrapperClassName:r,title:i,description:l}=e;return(0,b.t)(),(0,u.jsxs)(At,{children:[(0,u.jsx)(s.d,{title:i,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(C,{}),(0,u.jsx)(ft,{}),(0,u.jsx)("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,Pt.mainWrapper,r),children:(0,u.jsx)(a.Z,{fallback:e=>(0,u.jsx)(It,{...e}),children:t})}),!n&&(0,u.jsx)(Nt,{})]})}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(7294);var r=n(3692),o=n(4996),a=n(2263),s=n(6668),i=n(9965),l=n(5893);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.Z)(t.src),dark:(0,o.Z)(t.srcDark||t.src)},s=(0,l.jsx)(i.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:s}):s}function u(e){const{siteConfig:{title:t}}=(0,a.Z)(),{navbar:{title:n,logo:i}}=(0,s.L)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.Z)(i?.href||"/"),m=n?"":t,h=i?.alt??m;return(0,l.jsxs)(r.Z,{to:f,...p,...i?.target&&{target:i.target},children:[i&&(0,l.jsx)(c,{logo:i,alt:h,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(7294);var r=n(5742),o=n(5893);function a(e){let{locale:t,version:n,tag:a}=e;const s=t;return(0,o.jsxs)(r.Z,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),s&&(0,o.jsx)("meta",{name:"docsearch:language",content:s}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},9965:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7294),o=n(512),a=n(2389),s=n(2949);const i={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(5893);function c(e){let{className:t,children:n}=e;const c=(0,a.Z)(),{colorMode:u}=(0,s.I)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.Z)(t,i.themedComponent,i[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>c,z:()=>b});var r=n(7294),o=n(412),a=n(469),s=n(1442),i=n(5893);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,s.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??l}`,height:`${t}px`}}function i(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(i(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{i()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function m(e){if(!o.Z.canUseDOM)return e?u:d}function h(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:s,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),(0,i.jsx)(t,{ref:u,style:c?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),s?.(n))},className:l,children:o})}function g(e){let{collapsed:t,...n}=e;const[o,s]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.Z)((()=>{t||s(!0)}),[t]),(0,a.Z)((()=>{o&&c(t)}),[o,t]),o?(0,i.jsx)(h,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?g:h;return(0,i.jsx)(r,{...n})}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>h,pl:()=>m});var r=n(7294),o=n(2389),a=n(12),s=n(902),i=n(6668),l=n(5893);const c=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,i.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const s=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:s})),[e,n,s])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(f);if(!e)throw new s.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>b,S:()=>g});var r=n(7294),o=n(412),a=n(902),s=n(12),i=n(6668),l=n(5893);const c=r.createContext(void 0),u="theme",d=(0,s.WA)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),h=e=>{d.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,i.L)(),[o,a]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const s=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&h(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&s(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,s]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:s(null)};return e.addListener(r),()=>e.removeListener(r)}),[s,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:s,get isDarkTheme(){return o===p.dark},setLightTheme(){s(p.light)},setDarkTheme(){s(p.dark)}})),[o,s])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>b});var r=n(7294),o=n(143),a=n(9935),s=n(6668),i=n(2802),l=n(902),c=n(12),u=n(5893);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,c.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function h(){const e=(0,o._r)(),t=(0,s.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,i]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{i(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),i((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=h();return(0,u.jsx)(m.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return i.cE?(0,u.jsx)(g,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function y(){const e=(0,r.useContext)(m);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,s]=y(),{preferredVersionName:i}=n[e];return{preferredVersion:t.versions.find((e=>e.name===i))??null,savePreferredVersionName:(0,r.useCallback)((t=>{s.savePreferredVersion(e,t)}),[s,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>l});var r=n(7294),o=n(902),a=n(5893);const s=Symbol("EmptyContext"),i=r.createContext(s);function l(e){let{children:t,name:n,items:o}=e;const s=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(i.Provider,{value:s,children:t})}function c(){const e=(0,r.useContext)(i);if(e===s)throw new o.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>i});var r=n(7294),o=n(902),a=n(5893);const s=r.createContext(null);function i(e){let{children:t,version:n}=e;return(0,a.jsx)(s.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(s);if(null===e)throw new o.i6("DocsVersionProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>m});var r=n(7294),o=n(3102),a=n(7524),s=n(6550),i=n(902);function l(e){!function(e){const t=(0,s.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(6668),u=n(5893);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,c.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,i]=(0,r.useState)(!1);l((()=>{if(s)return i(!1),!1}));const u=(0,r.useCallback)((()=>{i((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&i(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:s})),[e,n,u,s])}function f(e){let{children:t}=e;const n=p();return(0,u.jsx)(d.Provider,{value:n,children:t})}function m(){const e=r.useContext(d);if(void 0===e)throw new i.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>c,n2:()=>i});var r=n(7294),o=n(902),a=n(5893);const s=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(s.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(s);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(s);if(!a)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,i]=a,l=(0,o.Ql)(n);return(0,r.useEffect)((()=>{i({component:t,props:l})}),[i,t,l]),(0,r.useEffect)((()=>()=>i({component:null,props:null})),[i]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>i});var r=n(7294),o=n(412);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},s=996;function i(e){let{desktopBreakpoint:t=s}=void 0===e?{}:e;const[n,i]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){i(function(e){if(!o.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},2802:(e,t,n)=>{"use strict";n.d(t,{MN:()=>R,LM:()=>m,_F:()=>y,cE:()=>p,jA:()=>h,xz:()=>f,SN:()=>T,lO:()=>E,vY:()=>S,oz:()=>x,s1:()=>k,f:()=>w});var r=n(7294),o=n(6550),a=n(8790),s=n(143),i=n(373),l=n(4477),c=n(1116);function u(e){return Array.from(new Set(e))}var d=n(8596);const p=!!s._r;function f(e){const t=(0,l.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=m(t);if(e)return e}}(e):void 0:e.href}function h(){const{pathname:e}=(0,o.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=_({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const g=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),b=(e,t)=>e.some((e=>y(e,t)));function y(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||b(e.items,t))}function v(e,t){switch(e.type){case"category":return y(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||y(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function _(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function k(){const e=(0,c.V)(),{pathname:t}=(0,o.TH)(),n=(0,s.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?_({sidebarItems:e.items,pathname:t}):null}function E(e){const{activeVersion:t}=(0,s.Iw)(e),{preferredVersion:n}=(0,i.J)(e),o=(0,s.yW)(e);return(0,r.useMemo)((()=>u([t,n,o].filter(Boolean))),[t,n,o])}function x(e,t){const n=E(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=E(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function T(e){let{route:t}=e;const n=(0,o.TH)(),r=(0,l.E)(),s=t.routes,i=s.find((e=>(0,o.LX)(n.pathname,e)));if(!i)return null;const c=i.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,a.H)(s),sidebarName:c,sidebarItems:u}}function R(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!m(e)))}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>d,VC:()=>m});var r=n(7294),o=n(512),a=n(5742),s=n(226);function i(){const e=r.useContext(s._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(4996),c=n(2263);var u=n(5893);function d(e){let{title:t,description:n,keywords:r,image:o,children:s}=e;const i=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.C)(),p=o?d(o,{absolute:!0}):void 0;return(0,u.jsxs)(a.Z,{children:[t&&(0,u.jsx)("title",{children:i}),t&&(0,u.jsx)("meta",{property:"og:title",content:i}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,u.jsx)("meta",{property:"og:image",content:p}),p&&(0,u.jsx)("meta",{name:"twitter:image",content:p}),s]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const s=r.useContext(p),i=(0,o.Z)(s,t);return(0,u.jsxs)(p.Provider,{value:i,children:[(0,u.jsx)(a.Z,{children:(0,u.jsx)("html",{className:i})}),n]})}function m(e){let{children:t}=e;const n=i(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(f,{className:(0,o.Z)(r,a),children:t})}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>c,i6:()=>l,zX:()=>s});var r=n(7294),o=n(469),a=n(5893);function s(e){const t=(0,r.useRef)(e);return(0,o.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return(0,o.Z)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>s,Ns:()=>i});var r=n(7294),o=n(723),a=n(2263);function s(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function i(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>c,RF:()=>p});var r=n(7294),o=n(412),a=n(2389),s=(n(469),n(902)),i=n(5893);const l=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,i.jsx)(l.Provider,{value:n,children:t})}function u(){const e=(0,r.useContext)(l);if(null==e)throw new s.i6("ScrollControllerProvider");return e}const d=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(d()),a=(0,s.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>o});n(2263);const r="default";function o(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>l});n(7294);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const i={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=a(t?.persistence);return null===n?i:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(2263),o=n(6550),a=n(8780);function s(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:s,currentLocale:i}}=(0,r.Z)(),{pathname:l}=(0,o.TH)(),c=(0,a.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=i===s?e:e.replace(`/${i}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===s?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>s});var r=n(7294),o=n(6550),a=n(902);function s(e){const t=(0,o.TH)(),n=(0,a.D9)(t),s=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&s({location:t,previousLocation:n})}),[s,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(2263);function o(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(s=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(s):function(e){return e.endsWith("/")?e.slice(0,-1):e}(s));var s;return e.replace(o,a)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},311:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});n(7294);var r=n(1728);const o={loadingRing:"loadingRing_RJI3","loading-ring":"loading-ring_FB5o"};var a=n(5893);function s(e){let{className:t}=e;return(0,a.jsxs)("div",{className:(0,r.Z)(o.loadingRing,t),children:[(0,a.jsx)("div",{}),(0,a.jsx)("div",{}),(0,a.jsx)("div",{}),(0,a.jsx)("div",{})]})}},22:(e,t,n)=>{"use strict";n.d(t,{w:()=>i});var r=n(1336),o=n.n(r),a=n(1029);const s=new Map;function i(e,t){const n=`${e}${t}`;let r=s.get(n);return r||(r=async function(e,t){{const n=`${e}${a.J.replace("{dir}",t?`-${t.replace(/\//g,"-")}`:"")}`;if(new URL(n,location.origin).origin!==location.origin)throw new Error("Unexpected version url");const r=await(await fetch(n)).json(),s=r.map(((e,t)=>{let{documents:n,index:r}=e;return{type:t,documents:n,index:o().Index.load(r)}})),i=r.reduce(((e,t)=>{for(const n of t.index.invertedIndex)/\p{Unified_Ideograph}/u.test(n[0][0])&&e.add(n[0]);return e}),new Set);return{wrappedIndexes:s,zhDictionary:Array.from(i)}}return{wrappedIndexes:[],zhDictionary:[]}}(e,t),s.set(n,r)),r}},8202:(e,t,n)=>{"use strict";n.d(t,{v:()=>l});var r=n(1336),o=n.n(r);var a=n(1029);function s(e){return i(e).concat(i(e.filter((e=>{const t=e[e.length-1];return!t.trailing&&t.maybeTyping})),!0))}function i(e,t){return e.map((e=>({tokens:e.map((e=>e.value)),term:e.map((e=>({value:e.value,presence:o().Query.presence.REQUIRED,wildcard:(t?e.trailing||e.maybeTyping:e.trailing)?o().Query.wildcard.TRAILING:o().Query.wildcard.NONE})))})))}function l(e,t,n){return function(r,i){const l=function(e,t){if(1===t.length&&["ja","jp","th"].includes(t[0]))return o()[t[0]].tokenizer(e).map((e=>e.toString()));let n=/[^-\s]+/g;return t.includes("zh")&&(n=/\w+|\p{Unified_Ideograph}+/gu),e.toLowerCase().match(n)||[]}(r,a.dK);if(0===l.length)return void i([]);const c=function(e,t){const n=function(e,t){const n=[];return function e(r,o){if(0===r.length)return void n.push(o);const a=r[0];if(/\p{Unified_Ideograph}/u.test(a)){const n=function(e,t){const n=[];return function e(r,o){let a=0,s=!1;for(const i of t)if(r.substr(0,i.length)===i){const t={missed:o.missed,term:o.term.concat({value:i})};r.length>i.length?e(r.substr(i.length),t):n.push(t),s=!0}else for(let t=i.length-1;t>a;t-=1){const l=i.substr(0,t);if(r.substr(0,t)===l){a=t;const i={missed:o.missed,term:o.term.concat({value:l,trailing:!0})};r.length>t?e(r.substr(t),i):n.push(i),s=!0;break}}s||(r.length>0?e(r.substr(1),{missed:o.missed+1,term:o.term}):o.term.length>0&&n.push(o))}(e,{missed:0,term:[]}),n.sort(((e,t)=>{const n=e.missed>0?1:0,r=t.missed>0?1:0;return n!==r?n-r:e.term.length-t.term.length})).map((e=>e.term))}(a,t);for(const t of n){const n=o.concat(...t);e(r.slice(1),n)}}else{const t=o.concat({value:a});e(r.slice(1),t)}}(e,[]),n}(e,t);if(0===n.length)return[{tokens:e,term:e.map((e=>({value:e,presence:o().Query.presence.REQUIRED,wildcard:o().Query.wildcard.LEADING|o().Query.wildcard.TRAILING})))}];for(const o of n)o[o.length-1].maybeTyping=!0;const r=[];for(const s of a.dK)if("en"===s)a._k||r.unshift(o().stopWordFilter);else{const e=o()[s];e.stopWordFilter&&r.unshift(e.stopWordFilter)}let i;if(r.length>0){const e=e=>r.reduce(((e,t)=>e.filter((e=>t(e.value)))),e);i=[];const t=[];for(const r of n){const n=e(r);i.push(n),n.length<r.length&&n.length>0&&t.push(n)}n.push(...t)}else i=n.slice();const l=[];for(const o of i)if(o.length>2)for(let e=o.length-1;e>=0;e-=1)l.push(o.slice(0,e).concat(o.slice(e+1)));return s(n).concat(s(l))}(l,t),u=[];e:for(const{term:t,tokens:o}of c)for(const{documents:r,index:a,type:s}of e)if(u.push(...a.query((e=>{for(const n of t)e.term(n.value,{wildcard:n.wildcard,presence:n.presence})})).slice(0,n).filter((e=>!u.some((t=>t.document.i.toString()===e.ref)))).slice(0,n-u.length).map((t=>{const n=r.find((e=>e.i.toString()===t.ref));return{document:n,type:s,page:0!==s&&e[0].documents.find((e=>e.i===n.p)),metadata:t.matchData.metadata,tokens:o,score:t.score}}))),u.length>=n)break e;!function(e){e.forEach(((e,t)=>{e.index=t})),e.sort(((t,n)=>{let r=t.type>0&&t.page?e.findIndex((e=>e.document===t.page)):t.index,o=n.type>0&&n.page?e.findIndex((e=>e.document===n.page)):n.index;return-1===r&&(r=t.index),-1===o&&(o=n.index),r===o?0===t.type?-1:0===n.type?1:t.index-n.index:r-o}))}(u),function(e){e.forEach(((t,n)=>{n>0&&t.page&&e.some((e=>e.document===t.page))&&(n<e.length-1&&e[n+1].page===t.page?t.isInterOfTree=!0:t.isLastOfTree=!0)}))}(u),i(u)}}},3926:(e,t,n)=>{"use strict";function r(e){return e.join(" \u203a ")}n.d(t,{e:()=>r})},1690:(e,t,n)=>{"use strict";function r(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}n.d(t,{X:()=>r})},1073:(e,t,n)=>{"use strict";function r(e,t){const n=[];for(const r of Object.values(e))r[t]&&n.push(...r[t].position);return n.sort(((e,t)=>e[0]-t[0]||t[1]-e[1]))}n.d(t,{m:()=>r})},2539:(e,t,n)=>{"use strict";n.d(t,{C:()=>o});var r=n(1690);function o(e,t,n){const a=[];for(const s of t){const n=e.toLowerCase().indexOf(s);if(n>=0){n>0&&a.push(o(e.substr(0,n),t)),a.push(`<mark>${(0,r.X)(e.substr(n,s.length))}</mark>`);const i=n+s.length;i<e.length&&a.push(o(e.substr(i),t));break}}return 0===a.length?n?`<mark>${(0,r.X)(e)}</mark>`:(0,r.X)(e):a.join("")}},726:(e,t,n)=>{"use strict";n.d(t,{o:()=>l});var r=n(1690),o=n(2539);const a=/\w+|\p{Unified_Ideograph}/u;function s(e){const t=[];let n=0,r=e;for(;r.length>0;){const o=r.match(a);if(!o){t.push(r);break}o.index>0&&t.push(r.substring(0,o.index)),t.push(o[0]),n+=o.index+o[0].length,r=e.substring(n)}return t}var i=n(1029);function l(e,t,n,a){void 0===a&&(a=i.Hk);const{chunkIndex:l,chunks:c}=function(e,t,n){const a=[];let i=0,l=0,c=-1;for(;i<t.length;){const[u,d]=t[i];if(i+=1,!(u<l)){if(u>l){const t=s(e.substring(l,u)).map((e=>({html:(0,r.X)(e),textLength:e.length})));for(const e of t)a.push(e)}-1===c&&(c=a.length),l=u+d,a.push({html:(0,o.C)(e.substring(u,l),n,!0),textLength:d})}}if(l<e.length){const t=s(e.substring(l)).map((e=>({html:(0,r.X)(e),textLength:e.length})));for(const e of t)a.push(e)}return{chunkIndex:c,chunks:a}}(e,t,n),u=c.slice(0,l),d=c[l],p=[d.html],f=c.slice(l+1);let m=d.textLength,h=0,g=0,b=!1,y=!1;for(;m<a;)if((h<=g||0===f.length)&&u.length>0){const e=u.pop();m+e.textLength<=a?(p.unshift(e.html),h+=e.textLength,m+=e.textLength):(b=!0,u.length=0)}else{if(!(f.length>0))break;{const e=f.shift();m+e.textLength<=a?(p.push(e.html),g+=e.textLength,m+=e.textLength):(y=!0,f.length=0)}}return(b||u.length>0)&&p.unshift("\u2026"),(y||f.length>0)&&p.push("\u2026"),p.join("")}},51:(e,t,n)=>{"use strict";function r(e,t){if("string"==typeof e)return{label:e,path:e};{const{label:n,path:r}=e;return"string"==typeof n?{label:n,path:r}:Object.prototype.hasOwnProperty.call(n,t)?{label:n[t],path:r}:{label:r,path:r}}}n.d(t,{_:()=>r})},1029:(e,t,n)=>{"use strict";n.d(t,{vc:()=>a,gQ:()=>f,H6:()=>c,hG:()=>g,l9:()=>m,dK:()=>r,_k:()=>o,pu:()=>p,AY:()=>u,t_:()=>d,Kc:()=>h,J:()=>s,Hk:()=>l,qo:()=>i,pQ:()=>b});n(1336);const r=["en"],o=!1,a=null,s="search-index{dir}.json?_=2292f00d",i=8,l=50,c=!0,u=!0,d=!0,p="right",f=void 0,m=!0,h=null,g=!1,b=!1},2358:(e,t,n)=>{"use strict";n.d(t,{lX:()=>E,q_:()=>N,ob:()=>h,PP:()=>A,Ep:()=>m,Hp:()=>g});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const s=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],s=t&&t.split("/")||[],i=e&&o(e),l=t&&o(t),c=i||l;if(e&&o(e)?s=r:r.length&&(s.pop(),s=s.concat(r)),!s.length)return"/";if(s.length){var u=s[s.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=s.length;p>=0;p--){var f=s[p];"."===f?a(s,p):".."===f?(a(s,p),d++):d&&(a(s,p),d--)}if(!c)for(;d--;d)s.unshift("..");!c||""===s[0]||s[0]&&o(s[0])||s.unshift("");var m=s.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};function i(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}const l=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=i(t),o=i(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var c=n(8776);function u(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function p(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function f(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function m(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function h(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(i){throw i instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):i}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=s(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function g(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&l(e.state,t.state)}function b(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var y=!("undefined"==typeof window||!window.document||!window.document.createElement);function v(e,t){t(window.confirm(e))}var w="popstate",_="hashchange";function k(){try{return window.history.state||{}}catch(e){return{}}}function E(e){void 0===e&&(e={}),y||(0,c.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),s=e,i=s.forceRefresh,l=void 0!==i&&i,d=s.getUserConfirmation,g=void 0===d?v:d,E=s.keyLength,x=void 0===E?6:E,S=e.basename?f(u(e.basename)):"";function T(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return S&&(a=p(a,S)),h(a,r,n)}function R(){return Math.random().toString(36).substr(2,x)}var C=b();function N(e){(0,r.Z)(z,e),z.length=n.length,C.notifyListeners(z.location,z.action)}function O(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||I(T(e.state))}function A(){I(T(k()))}var L=!1;function I(e){if(L)L=!1,N();else{C.confirmTransitionTo(e,"POP",g,(function(t){t?N({action:"POP",location:e}):function(e){var t=z.location,n=j.indexOf(t.key);-1===n&&(n=0);var r=j.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(L=!0,D(o))}(e)}))}}var P=T(k()),j=[P.key];function M(e){return S+m(e)}function D(e){n.go(e)}var F=0;function U(e){1===(F+=e)&&1===e?(window.addEventListener(w,O),a&&window.addEventListener(_,A)):0===F&&(window.removeEventListener(w,O),a&&window.removeEventListener(_,A))}var B=!1;var z={length:n.length,action:"POP",location:P,createHref:M,push:function(e,t){var r="PUSH",a=h(e,t,R(),z.location);C.confirmTransitionTo(a,r,g,(function(e){if(e){var t=M(a),s=a.key,i=a.state;if(o)if(n.pushState({key:s,state:i},null,t),l)window.location.href=t;else{var c=j.indexOf(z.location.key),u=j.slice(0,c+1);u.push(a.key),j=u,N({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=h(e,t,R(),z.location);C.confirmTransitionTo(a,r,g,(function(e){if(e){var t=M(a),s=a.key,i=a.state;if(o)if(n.replaceState({key:s,state:i},null,t),l)window.location.replace(t);else{var c=j.indexOf(z.location.key);-1!==c&&(j[c]=a.key),N({action:r,location:a})}else window.location.replace(t)}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return B||(U(1),B=!0),function(){return B&&(B=!1,U(-1)),t()}},listen:function(e){var t=C.appendListener(e);return U(1),function(){U(-1),t()}}};return z}var x="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+d(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:d,decodePath:u},slash:{encodePath:u,decodePath:u}};function T(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function R(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function C(e){window.location.replace(T(window.location.href)+"#"+e)}function N(e){void 0===e&&(e={}),y||(0,c.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?v:o,s=n.hashType,i=void 0===s?"slash":s,l=e.basename?f(u(e.basename)):"",d=S[i],g=d.encodePath,w=d.decodePath;function _(){var e=w(R());return l&&(e=p(e,l)),h(e)}var k=b();function E(e){(0,r.Z)(B,e),B.length=t.length,k.notifyListeners(B.location,B.action)}var N=!1,O=null;function A(){var e,t,n=R(),r=g(n);if(n!==r)C(r);else{var o=_(),s=B.location;if(!N&&(t=o,(e=s).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(O===m(o))return;O=null,function(e){if(N)N=!1,E();else{var t="POP";k.confirmTransitionTo(e,t,a,(function(n){n?E({action:t,location:e}):function(e){var t=B.location,n=j.lastIndexOf(m(t));-1===n&&(n=0);var r=j.lastIndexOf(m(e));-1===r&&(r=0);var o=n-r;o&&(N=!0,M(o))}(e)}))}}(o)}}var L=R(),I=g(L);L!==I&&C(I);var P=_(),j=[m(P)];function M(e){t.go(e)}var D=0;function F(e){1===(D+=e)&&1===e?window.addEventListener(x,A):0===D&&window.removeEventListener(x,A)}var U=!1;var B={length:t.length,action:"POP",location:P,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=T(window.location.href)),n+"#"+g(l+m(e))},push:function(e,t){var n="PUSH",r=h(e,void 0,void 0,B.location);k.confirmTransitionTo(r,n,a,(function(e){if(e){var t=m(r),o=g(l+t);if(R()!==o){O=t,function(e){window.location.hash=e}(o);var a=j.lastIndexOf(m(B.location)),s=j.slice(0,a+1);s.push(t),j=s,E({action:n,location:r})}else E()}}))},replace:function(e,t){var n="REPLACE",r=h(e,void 0,void 0,B.location);k.confirmTransitionTo(r,n,a,(function(e){if(e){var t=m(r),o=g(l+t);R()!==o&&(O=t,C(o));var a=j.indexOf(m(B.location));-1!==a&&(j[a]=t),E({action:n,location:r})}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=k.setPrompt(e);return U||(F(1),U=!0),function(){return U&&(U=!1,F(-1)),t()}},listen:function(e){var t=k.appendListener(e);return F(1),function(){F(-1),t()}}};return B}function O(e,t,n){return Math.min(Math.max(e,t),n)}function A(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,s=t.initialIndex,i=void 0===s?0:s,l=t.keyLength,c=void 0===l?6:l,u=b();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function p(){return Math.random().toString(36).substr(2,c)}var f=O(i,0,a.length-1),g=a.map((function(e){return h(e,void 0,"string"==typeof e?p():e.key||p())})),y=m;function v(e){var t=O(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:g.length,action:"POP",location:g[f],index:f,entries:g,createHref:y,push:function(e,t){var r="PUSH",o=h(e,t,p(),w.location);u.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=h(e,t,p(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},s={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},i={};function l(e){return r.isMemo(e)?s:i[e.$$typeof]||o}i[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},i[r.Memo]=s;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var s=u(n);d&&(s=s.concat(d(n)));for(var i=l(t),h=l(n),g=0;g<s.length;++g){var b=s[g];if(!(a[b]||r&&r[b]||h&&h[b]||i&&i[b])){var y=p(n,b);try{c(t,b,y)}catch(v){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,s,i){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,s,i],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},1336:(e,t,n)=>{var r,o;!function(){var a,s,i,l,c,u,d,p,f,m,h,g,b,y,v,w,_,k,E,x,S,T,R,C,N,O,A,L,I,P,j=function(e){var t=new j.Builder;return t.pipeline.add(j.trimmer,j.stopWordFilter,j.stemmer),t.searchPipeline.add(j.stemmer),e.call(t,t),t.build()};j.version="2.3.9",j.utils={},j.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),j.utils.asString=function(e){return null==e?"":e.toString()},j.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},j.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},j.FieldRef.joiner="/",j.FieldRef.fromString=function(e){var t=e.indexOf(j.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new j.FieldRef(r,n,e)},j.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+j.FieldRef.joiner+this.docRef),this._stringValue},j.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},j.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},j.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},j.Set.prototype.contains=function(e){return!!this.elements[e]},j.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===j.Set.complete)return this;if(e===j.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var s=r[a];s in n.elements&&o.push(s)}return new j.Set(o)},j.Set.prototype.union=function(e){return e===j.Set.complete?j.Set.complete:e===j.Set.empty?this:new j.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},j.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},j.Token=function(e,t){this.str=e||"",this.metadata=t||{}},j.Token.prototype.toString=function(){return this.str},j.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},j.Token.prototype.clone=function(e){return e=e||function(e){return e},new j.Token(e(this.str,this.metadata),this.metadata)},j.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new j.Token(j.utils.asString(e).toLowerCase(),j.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,s=0;a<=r;a++){var i=a-s;if(n.charAt(a).match(j.tokenizer.separator)||a==r){if(i>0){var l=j.utils.clone(t)||{};l.position=[s,i],l.index=o.length,o.push(new j.Token(n.slice(s,a),l))}s=a+1}}return o},j.tokenizer.separator=/[\s\-]+/,j.Pipeline=function(){this._stack=[]},j.Pipeline.registeredFunctions=Object.create(null),j.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&j.utils.warn("Overwriting existing registered function: "+t),e.label=t,j.Pipeline.registeredFunctions[e.label]=e},j.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||j.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},j.Pipeline.load=function(e){var t=new j.Pipeline;return e.forEach((function(e){var n=j.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},j.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){j.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},j.Pipeline.prototype.after=function(e,t){j.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},j.Pipeline.prototype.before=function(e,t){j.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},j.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},j.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var s=r(e[a],a,e);if(null!=s&&""!==s)if(Array.isArray(s))for(var i=0;i<s.length;i++)o.push(s[i]);else o.push(s)}e=o}return e},j.Pipeline.prototype.runString=function(e,t){var n=new j.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},j.Pipeline.prototype.reset=function(){this._stack=[]},j.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return j.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},j.Vector=function(e){this._magnitude=0,this.elements=e||[]},j.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},j.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},j.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},j.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},j.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,s=0,i=0,l=0,c=0;l<o&&c<a;)(s=n[l])<(i=r[c])?l+=2:s>i?c+=2:s==i&&(t+=n[l+1]*r[c+1],l+=2,c+=2);return t},j.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},j.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},j.Vector.prototype.toJSON=function(){return this.elements},j.stemmer=(s={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},i={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(c="[^aeiou][^aeiouy]*")+")?"+(u=(l="[aeiouy]")+"[aeiou]*")+c+"("+u+")?$",p="^("+c+")?"+u+c+u+c,f="^("+c+")?"+l,m=new RegExp("^("+c+")?"+u+c),h=new RegExp(p),g=new RegExp(d),b=new RegExp(f),y=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,_=/^(.+?)(ed|ing)$/,k=/.$/,E=/(at|bl|iz)$/,x=new RegExp("([^aeiouylsz])\\1$"),S=new RegExp("^"+c+l+"[^aeiouwxy]$"),T=/^(.+?[^aeiou])y$/,R=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,C=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,N=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,O=/^(.+?)(s|t)(ion)$/,A=/^(.+?)e$/,L=/ll$/,I=new RegExp("^"+c+l+"[^aeiouwxy]$"),P=function(e){var t,n,r,o,a,l,c;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=v,(o=y).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=_,(o=w).test(e)){var u=o.exec(e);(o=m).test(u[1])&&(o=k,e=e.replace(o,""))}else a.test(e)&&(t=(u=a.exec(e))[1],(a=b).test(t)&&(l=x,c=S,(a=E).test(e=t)?e+="e":l.test(e)?(o=k,e=e.replace(o,"")):c.test(e)&&(e+="e")));return(o=T).test(e)&&(e=(t=(u=o.exec(e))[1])+"i"),(o=R).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=m).test(t)&&(e=t+s[n])),(o=C).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=m).test(t)&&(e=t+i[n])),a=O,(o=N).test(e)?(t=(u=o.exec(e))[1],(o=h).test(t)&&(e=t)):a.test(e)&&(t=(u=a.exec(e))[1]+u[2],(a=h).test(t)&&(e=t)),(o=A).test(e)&&(t=(u=o.exec(e))[1],a=g,l=I,((o=h).test(t)||a.test(t)&&!l.test(t))&&(e=t)),a=h,(o=L).test(e)&&a.test(e)&&(o=k,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(P)}),j.Pipeline.registerFunction(j.stemmer,"stemmer"),j.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},j.stopWordFilter=j.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),j.Pipeline.registerFunction(j.stopWordFilter,"stopWordFilter"),j.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},j.Pipeline.registerFunction(j.trimmer,"trimmer"),j.TokenSet=function(){this.final=!1,this.edges={},this.id=j.TokenSet._nextId,j.TokenSet._nextId+=1},j.TokenSet._nextId=1,j.TokenSet.fromArray=function(e){for(var t=new j.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},j.TokenSet.fromClause=function(e){return"editDistance"in e?j.TokenSet.fromFuzzyString(e.term,e.editDistance):j.TokenSet.fromString(e.term)},j.TokenSet.fromFuzzyString=function(e,t){for(var n=new j.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,s=o.str.charAt(0);s in o.node.edges?a=o.node.edges[s]:(a=new j.TokenSet,o.node.edges[s]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var i=o.node.edges["*"];else{i=new j.TokenSet;o.node.edges["*"]=i}if(0==o.str.length&&(i.final=!0),r.push({node:i,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new j.TokenSet;o.node.edges["*"]=l}1==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var c,u=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?c=o.node.edges[d]:(c=new j.TokenSet,o.node.edges[d]=c),1==o.str.length&&(c.final=!0),r.push({node:c,editsRemaining:o.editsRemaining-1,str:u+o.str.slice(2)})}}}return n},j.TokenSet.fromString=function(e){for(var t=new j.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],s=r==o-1;if("*"==a)t.edges[a]=t,t.final=s;else{var i=new j.TokenSet;i.final=s,t.edges[a]=i,t=i}}return n},j.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var s=r[a];t.push({prefix:n.prefix.concat(s),node:n.node.edges[s]})}}return e},j.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},j.TokenSet.prototype.intersect=function(e){for(var t=new j.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,s=Object.keys(n.node.edges),i=s.length,l=0;l<a;l++)for(var c=o[l],u=0;u<i;u++){var d=s[u];if(d==c||"*"==c){var p=n.node.edges[d],f=n.qNode.edges[c],m=p.final&&f.final,h=void 0;d in n.output.edges?(h=n.output.edges[d]).final=h.final||m:((h=new j.TokenSet).final=m,n.output.edges[d]=h),r.push({qNode:f,output:h,node:p})}}}return t},j.TokenSet.Builder=function(){this.previousWord="",this.root=new j.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},j.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new j.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},j.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},j.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},j.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},j.Index.prototype.search=function(e){return this.query((function(t){new j.QueryParser(e,t).parse()}))},j.Index.prototype.query=function(e){for(var t=new j.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),s=Object.create(null),i=0;i<this.fields.length;i++)r[this.fields[i]]=new j.Vector;e.call(t,t);for(i=0;i<t.clauses.length;i++){var l=t.clauses[i],c=null,u=j.Set.empty;c=l.usePipeline?this.pipeline.runString(l.term,{fields:l.fields}):[l.term];for(var d=0;d<c.length;d++){var p=c[d];l.term=p;var f=j.TokenSet.fromClause(l),m=this.tokenSet.intersect(f).toArray();if(0===m.length&&l.presence===j.Query.presence.REQUIRED){for(var h=0;h<l.fields.length;h++){a[A=l.fields[h]]=j.Set.empty}break}for(var g=0;g<m.length;g++){var b=m[g],y=this.invertedIndex[b],v=y._index;for(h=0;h<l.fields.length;h++){var w=y[A=l.fields[h]],_=Object.keys(w),k=b+"/"+A,E=new j.Set(_);if(l.presence==j.Query.presence.REQUIRED&&(u=u.union(E),void 0===a[A]&&(a[A]=j.Set.complete)),l.presence!=j.Query.presence.PROHIBITED){if(r[A].upsert(v,l.boost,(function(e,t){return e+t})),!o[k]){for(var x=0;x<_.length;x++){var S,T=_[x],R=new j.FieldRef(T,A),C=w[T];void 0===(S=n[R])?n[R]=new j.MatchData(b,A,C):S.add(b,A,C)}o[k]=!0}}else void 0===s[A]&&(s[A]=j.Set.empty),s[A]=s[A].union(E)}}}if(l.presence===j.Query.presence.REQUIRED)for(h=0;h<l.fields.length;h++){a[A=l.fields[h]]=a[A].intersect(u)}}var N=j.Set.complete,O=j.Set.empty;for(i=0;i<this.fields.length;i++){var A;a[A=this.fields[i]]&&(N=N.intersect(a[A])),s[A]&&(O=O.union(s[A]))}var L=Object.keys(n),I=[],P=Object.create(null);if(t.isNegated()){L=Object.keys(this.fieldVectors);for(i=0;i<L.length;i++){R=L[i];var M=j.FieldRef.fromString(R);n[R]=new j.MatchData}}for(i=0;i<L.length;i++){var D=(M=j.FieldRef.fromString(L[i])).docRef;if(N.contains(D)&&!O.contains(D)){var F,U=this.fieldVectors[M],B=r[M.fieldName].similarity(U);if(void 0!==(F=P[D]))F.score+=B,F.matchData.combine(n[M]);else{var z={ref:D,score:B,matchData:n[M]};P[D]=z,I.push(z)}}}return I.sort((function(e,t){return t.score-e.score}))},j.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:j.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},j.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,s=new j.TokenSet.Builder,i=j.Pipeline.load(e.pipeline);e.version!=j.version&&j.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+j.version+"' does not match serialized index '"+e.version+"'");for(var l=0;l<r.length;l++){var c=(d=r[l])[0],u=d[1];n[c]=new j.Vector(u)}for(l=0;l<a.length;l++){var d,p=(d=a[l])[0],f=d[1];s.insert(p),o[p]=f}return s.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=s.root,t.pipeline=i,new j.Index(t)},j.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=j.tokenizer,this.pipeline=new j.Pipeline,this.searchPipeline=new j.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},j.Builder.prototype.ref=function(e){this._ref=e},j.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},j.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},j.Builder.prototype.k1=function(e){this._k1=e},j.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],s=this._fields[a].extractor,i=s?s(e):e[a],l=this.tokenizer(i,{fields:[a]}),c=this.pipeline.run(l),u=new j.FieldRef(n,a),d=Object.create(null);this.fieldTermFrequencies[u]=d,this.fieldLengths[u]=0,this.fieldLengths[u]+=c.length;for(var p=0;p<c.length;p++){var f=c[p];if(null==d[f]&&(d[f]=0),d[f]+=1,null==this.invertedIndex[f]){var m=Object.create(null);m._index=this.termIndex,this.termIndex+=1;for(var h=0;h<r.length;h++)m[r[h]]=Object.create(null);this.invertedIndex[f]=m}null==this.invertedIndex[f][a][n]&&(this.invertedIndex[f][a][n]=Object.create(null));for(var g=0;g<this.metadataWhitelist.length;g++){var b=this.metadataWhitelist[g],y=f.metadata[b];null==this.invertedIndex[f][a][n][b]&&(this.invertedIndex[f][a][n][b]=[]),this.invertedIndex[f][a][n][b].push(y)}}}},j.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=j.FieldRef.fromString(e[o]),s=a.fieldName;r[s]||(r[s]=0),r[s]+=1,n[s]||(n[s]=0),n[s]+=this.fieldLengths[a]}var i=Object.keys(this._fields);for(o=0;o<i.length;o++){var l=i[o];n[l]=n[l]/r[l]}this.averageFieldLength=n},j.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=j.FieldRef.fromString(t[o]),s=a.fieldName,i=this.fieldLengths[a],l=new j.Vector,c=this.fieldTermFrequencies[a],u=Object.keys(c),d=u.length,p=this._fields[s].boost||1,f=this._documents[a.docRef].boost||1,m=0;m<d;m++){var h,g,b,y=u[m],v=c[y],w=this.invertedIndex[y]._index;void 0===r[y]?(h=j.idf(this.invertedIndex[y],this.documentCount),r[y]=h):h=r[y],g=h*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(i/this.averageFieldLength[s]))+v),g*=p,g*=f,b=Math.round(1e3*g)/1e3,l.insert(w,b)}e[a]=l}this.fieldVectors=e},j.Builder.prototype.createTokenSet=function(){this.tokenSet=j.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},j.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new j.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},j.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},j.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var s=o[a];r[s]=n[s].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},j.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var s=o[a],i=Object.keys(e.metadata[r][s]);null==this.metadata[r][s]&&(this.metadata[r][s]=Object.create(null));for(var l=0;l<i.length;l++){var c=i[l];null==this.metadata[r][s][c]?this.metadata[r][s][c]=e.metadata[r][s][c]:this.metadata[r][s][c]=this.metadata[r][s][c].concat(e.metadata[r][s][c])}}}},j.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},j.Query=function(e){this.clauses=[],this.allFields=e},j.Query.wildcard=new String("*"),j.Query.wildcard.NONE=0,j.Query.wildcard.LEADING=1,j.Query.wildcard.TRAILING=2,j.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},j.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=j.Query.wildcard.NONE),e.wildcard&j.Query.wildcard.LEADING&&e.term.charAt(0)!=j.Query.wildcard&&(e.term="*"+e.term),e.wildcard&j.Query.wildcard.TRAILING&&e.term.slice(-1)!=j.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=j.Query.presence.OPTIONAL),this.clauses.push(e),this},j.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=j.Query.presence.PROHIBITED)return!1;return!0},j.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,j.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},j.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},j.QueryParseError.prototype=new Error,j.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},j.QueryLexer.prototype.run=function(){for(var e=j.QueryLexer.lexText;e;)e=e(this)},j.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},j.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},j.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},j.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return j.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},j.QueryLexer.prototype.width=function(){return this.pos-this.start},j.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},j.QueryLexer.prototype.backup=function(){this.pos-=1},j.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=j.QueryLexer.EOS&&this.backup()},j.QueryLexer.prototype.more=function(){return this.pos<this.length},j.QueryLexer.EOS="EOS",j.QueryLexer.FIELD="FIELD",j.QueryLexer.TERM="TERM",j.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",j.QueryLexer.BOOST="BOOST",j.QueryLexer.PRESENCE="PRESENCE",j.QueryLexer.lexField=function(e){return e.backup(),e.emit(j.QueryLexer.FIELD),e.ignore(),j.QueryLexer.lexText},j.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(j.QueryLexer.TERM)),e.ignore(),e.more())return j.QueryLexer.lexText},j.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(j.QueryLexer.EDIT_DISTANCE),j.QueryLexer.lexText},j.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(j.QueryLexer.BOOST),j.QueryLexer.lexText},j.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(j.QueryLexer.TERM)},j.QueryLexer.termSeparator=j.tokenizer.separator,j.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==j.QueryLexer.EOS)return j.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return j.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(j.QueryLexer.TERM),j.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(j.QueryLexer.TERM),j.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(j.QueryLexer.PRESENCE),j.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(j.QueryLexer.PRESENCE),j.QueryLexer.lexText;if(t.match(j.QueryLexer.termSeparator))return j.QueryLexer.lexTerm}else e.escapeCharacter()}},j.QueryParser=function(e,t){this.lexer=new j.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},j.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=j.QueryParser.parseClause;e;)e=e(this);return this.query},j.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},j.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},j.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},j.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case j.QueryLexer.PRESENCE:return j.QueryParser.parsePresence;case j.QueryLexer.FIELD:return j.QueryParser.parseField;case j.QueryLexer.TERM:return j.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new j.QueryParseError(n,t.start,t.end)}},j.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=j.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=j.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new j.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new j.QueryParseError(n,t.start,t.end)}switch(r.type){case j.QueryLexer.FIELD:return j.QueryParser.parseField;case j.QueryLexer.TERM:return j.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new j.QueryParseError(n,r.start,r.end)}}},j.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new j.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new j.QueryParseError(r,t.start,t.end)}if(o.type===j.QueryLexer.TERM)return j.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new j.QueryParseError(r,o.start,o.end)}},j.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new j.QueryParseError(r,n.start,n.end)}else e.nextClause()}},j.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new j.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new j.QueryParseError(r,o.start,o.end)}else e.nextClause()}},j.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new j.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new j.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return j})?r.call(t,n,t,e):r)||(e.exports=o)}()},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function s(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,i((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,s(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,s=t.querySelector(r.barSelector),i=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(s,{transition:"all 0 linear",transform:"translate3d("+i+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var i=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},4779:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return i(a(e,t),t)},e.exports.tokensToFunction=i,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,s=0,i="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(i+=e.slice(s,f),s=f+d.length,p)i+=p[1];else{var m=e[s],h=n[2],g=n[3],b=n[4],y=n[5],v=n[6],w=n[7];i&&(r.push(i),i="");var _=null!=h&&null!=m&&m!==h,k="+"===v||"*"===v,E="?"===v||"*"===v,x=n[2]||u,S=b||y;r.push({name:g||a++,prefix:h||"",delimiter:x,optional:E,repeat:k,partial:_,asterisk:!!w,pattern:S?c(S):w?".*":"[^"+l(x)+"]+?"})}}return s<e.length&&(i+=e.substr(s)),i&&r.push(i),r}function s(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function i(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",i=t||{},l=(o||{}).pretty?s:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=i[u.name];if(null==p){if(u.optional){u.partial&&(a+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=l(p[f]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(p),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');a+=u.prefix+d}}else a+=u}return a}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,s="",i=0;i<e.length;i++){var c=e[i];if("string"==typeof c)s+=l(c);else{var p=l(c.prefix),f="(?:"+c.pattern+")";t.push(c),c.repeat&&(f+="(?:"+p+f+")*"),s+=f=c.optional?c.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var m=l(n.delimiter||"/"),h=s.slice(-m.length)===m;return o||(s=(h?s.slice(0,-m.length):s)+"(?:"+m+"(?=$))?"),s+=a?"$":o&&h?"":"(?="+m+"|$)",u(new RegExp("^"+s,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(f(e[o],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(a(e,n),t,n)}(e,t,n)}},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),o=n(9642),a=new Set;function s(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(s.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),a.add(e)}))}s.silent=!1,e.exports=s},6854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var s=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,i=s.length;-1!==n.code.indexOf(o=t(r,i));)++i;return s[i]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function s(i){for(var l=0;l<i.length&&!(o>=a.length);l++){var c=i[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++o;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),y=[];h&&y.push.apply(y,s([h])),y.push(g),b&&y.push.apply(y,s([b])),"string"==typeof c?i.splice.apply(i,[l,1].concat(y)):c.content=y}}else c.content&&s(c.content)}return i}(n.tokens)}}}})}(Prism)},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6726},6500:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,a){if(!(r in n)){a.push(r);var s=a.indexOf(r);if(s<a.length-1)throw new Error("Circular dependency: "+a.slice(s).join(" -> "));var i={},l=e[r];if(l){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in i))for(var s in o(t,a),i[t]=!0,n[t])i[s]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[r]=i,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,s,i){var l=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(l);s=s.map(c),i=(i||[]).map(c);var u=n(s),d=n(i);s.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(l),m=u;o(m);){for(var h in p={},m){var g=l[h];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in u))for(var y in f(b))if(y in u){p[b]=!0;break}for(var v in m=p)u[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,s=o?o.parallel:e,i={},l={};function c(e){if(e in i)return i[e];l[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var p=s(u.map((function(e){var t=c(e);return delete l[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return i[e]=o}for(var u in n)c(u);var d=[];for(var p in l)d.push(i[p]);return s(d)}(f,u,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,s){if(s!==r){var i=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw i.name="Invariant Violation",i}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(3840);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var s=new Set,i={};function l(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(i[e]=t,e=0;e<t.length;e++)s.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},m={};function h(e,t,n,r,o,a,s){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=s}var g={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){g[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];g[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){g[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){g[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){g[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){g[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){g[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){g[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){g[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function v(e,t,n,r){var o=g.hasOwnProperty(t)?g[t]:null;(null!==o?0!==o.type:r||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!d.call(m,e)||!d.call(f,e)&&(p.test(e)?m[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,y);g[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,y);g[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,y);g[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),g.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,_=Symbol.for("react.element"),k=Symbol.for("react.portal"),E=Symbol.for("react.fragment"),x=Symbol.for("react.strict_mode"),S=Symbol.for("react.profiler"),T=Symbol.for("react.provider"),R=Symbol.for("react.context"),C=Symbol.for("react.forward_ref"),N=Symbol.for("react.suspense"),O=Symbol.for("react.suspense_list"),A=Symbol.for("react.memo"),L=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var I=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var P=Symbol.iterator;function j(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=P&&e[P]||e["@@iterator"])?e:null}var M,D=Object.assign;function F(e){if(void 0===M)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);M=t&&t[1]||""}return"\n"+M+e}var U=!1;function B(e,t){if(!e||U)return"";U=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&"string"==typeof c.stack){for(var o=c.stack.split("\n"),a=r.stack.split("\n"),s=o.length-1,i=a.length-1;1<=s&&0<=i&&o[s]!==a[i];)i--;for(;1<=s&&0<=i;s--,i--)if(o[s]!==a[i]){if(1!==s||1!==i)do{if(s--,0>--i||o[s]!==a[i]){var l="\n"+o[s].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}}while(1<=s&&0<=i);break}}}finally{U=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?F(e):""}function z(e){switch(e.tag){case 5:return F(e.type);case 16:return F("Lazy");case 13:return F("Suspense");case 19:return F("SuspenseList");case 0:case 2:case 15:return e=B(e.type,!1);case 11:return e=B(e.type.render,!1);case 1:return e=B(e.type,!0);default:return""}}function $(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case E:return"Fragment";case k:return"Portal";case S:return"Profiler";case x:return"StrictMode";case N:return"Suspense";case O:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case R:return(e.displayName||"Context")+".Consumer";case T:return(e._context.displayName||"Context")+".Provider";case C:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case A:return null!==(t=e.displayName||null)?t:$(e.type)||"Memo";case L:t=e._payload,e=e._init;try{return $(e(t))}catch(n){}}return null}function G(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return $(t);case 8:return t===x?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function H(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function q(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function V(e){e._valueTracker||(e._valueTracker=function(e){var t=q(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Q(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=q(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function Z(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function W(e,t){var n=t.checked;return D({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Y(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=H(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function X(e,t){null!=(t=t.checked)&&v(e,"checked",t,!1)}function K(e,t){X(e,t);var n=H(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,H(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&Z(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+H(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return D({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(te(n)){if(1<n.length)throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:H(n)}}function ae(e,t){var n=H(t.value),r=H(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function se(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function ie(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function le(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?ie(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=["Webkit","ms","Moz","O"];function he(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function ge(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=he(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(fe).forEach((function(e){me.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var be=D({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ye(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function ve(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function _e(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var ke=null,Ee=null,xe=null;function Se(e){if(e=wo(e)){if("function"!=typeof ke)throw Error(a(280));var t=e.stateNode;t&&(t=ko(t),ke(e.stateNode,e.type,t))}}function Te(e){Ee?xe?xe.push(e):xe=[e]:Ee=e}function Re(){if(Ee){var e=Ee,t=xe;if(xe=Ee=null,Se(e),t)for(e=0;e<t.length;e++)Se(t[e])}}function Ce(e,t){return e(t)}function Ne(){}var Oe=!1;function Ae(e,t,n){if(Oe)return e(t,n);Oe=!0;try{return Ce(e,t,n)}finally{Oe=!1,(null!==Ee||null!==xe)&&(Ne(),Re())}}function Le(e,t){var n=e.stateNode;if(null===n)return null;var r=ko(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var Ie=!1;if(u)try{var Pe={};Object.defineProperty(Pe,"passive",{get:function(){Ie=!0}}),window.addEventListener("test",Pe,Pe),window.removeEventListener("test",Pe,Pe)}catch(ue){Ie=!1}function je(e,t,n,r,o,a,s,i,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var Me=!1,De=null,Fe=!1,Ue=null,Be={onError:function(e){Me=!0,De=e}};function ze(e,t,n,r,o,a,s,i,l){Me=!1,De=null,je.apply(Be,arguments)}function $e(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ge(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function He(e){if($e(e)!==e)throw Error(a(188))}function qe(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=$e(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var s=o.alternate;if(null===s){if(null!==(r=o.return)){n=r;continue}break}if(o.child===s.child){for(s=o.child;s;){if(s===n)return He(o),e;if(s===r)return He(o),t;s=s.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=s;else{for(var i=!1,l=o.child;l;){if(l===n){i=!0,n=o,r=s;break}if(l===r){i=!0,r=o,n=s;break}l=l.sibling}if(!i){for(l=s.child;l;){if(l===n){i=!0,n=s,r=o;break}if(l===r){i=!0,r=s,n=o;break}l=l.sibling}if(!i)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e))?Ve(e):null}function Ve(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=Ve(e);if(null!==t)return t;e=e.sibling}return null}var Qe=o.unstable_scheduleCallback,Ze=o.unstable_cancelCallback,We=o.unstable_shouldYield,Ye=o.unstable_requestPaint,Xe=o.unstable_now,Ke=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,rt=o.unstable_IdlePriority,ot=null,at=null;var st=Math.clz32?Math.clz32:function(e){return e>>>=0,0===e?32:31-(it(e)/lt|0)|0},it=Math.log,lt=Math.LN2;var ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,s=268435455&n;if(0!==s){var i=s&~o;0!==i?r=dt(i):0!==(a&=s)&&(r=dt(a))}else 0!==(s=n&~o)?r=dt(s):0!==a&&(r=dt(a));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&0!=(4194240&a)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-st(t)),r|=e[n],t&=~o;return r}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function mt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function ht(){var e=ct;return 0==(4194240&(ct<<=1))&&(ct=64),e}function gt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function bt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-st(t)]=n}function yt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-st(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var vt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var _t,kt,Et,xt,St,Tt=!1,Rt=[],Ct=null,Nt=null,Ot=null,At=new Map,Lt=new Map,It=[],Pt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function jt(e,t){switch(e){case"focusin":case"focusout":Ct=null;break;case"dragenter":case"dragleave":Nt=null;break;case"mouseover":case"mouseout":Ot=null;break;case"pointerover":case"pointerout":At.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Lt.delete(t.pointerId)}}function Mt(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=wo(t))&&kt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function Dt(e){var t=vo(e.target);if(null!==t){var n=$e(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ge(n)))return e.blockedOn=t,void St(e.priority,(function(){Et(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Ft(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Wt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=wo(n))&&kt(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function Ut(e,t,n){Ft(e)&&n.delete(t)}function Bt(){Tt=!1,null!==Ct&&Ft(Ct)&&(Ct=null),null!==Nt&&Ft(Nt)&&(Nt=null),null!==Ot&&Ft(Ot)&&(Ot=null),At.forEach(Ut),Lt.forEach(Ut)}function zt(e,t){e.blockedOn===t&&(e.blockedOn=null,Tt||(Tt=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Bt)))}function $t(e){function t(t){return zt(t,e)}if(0<Rt.length){zt(Rt[0],e);for(var n=1;n<Rt.length;n++){var r=Rt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==Ct&&zt(Ct,e),null!==Nt&&zt(Nt,e),null!==Ot&&zt(Ot,e),At.forEach(t),Lt.forEach(t),n=0;n<It.length;n++)(r=It[n]).blockedOn===e&&(r.blockedOn=null);for(;0<It.length&&null===(n=It[0]).blockedOn;)Dt(n),null===n.blockedOn&&It.shift()}var Gt=w.ReactCurrentBatchConfig,Ht=!0;function qt(e,t,n,r){var o=vt,a=Gt.transition;Gt.transition=null;try{vt=1,Qt(e,t,n,r)}finally{vt=o,Gt.transition=a}}function Vt(e,t,n,r){var o=vt,a=Gt.transition;Gt.transition=null;try{vt=4,Qt(e,t,n,r)}finally{vt=o,Gt.transition=a}}function Qt(e,t,n,r){if(Ht){var o=Wt(e,t,n,r);if(null===o)Hr(e,t,r,Zt,n),jt(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return Ct=Mt(Ct,e,t,n,r,o),!0;case"dragenter":return Nt=Mt(Nt,e,t,n,r,o),!0;case"mouseover":return Ot=Mt(Ot,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return At.set(a,Mt(At.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,Lt.set(a,Mt(Lt.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(jt(e,r),4&t&&-1<Pt.indexOf(e)){for(;null!==o;){var a=wo(o);if(null!==a&&_t(a),null===(a=Wt(e,t,n,r))&&Hr(e,t,r,Zt,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Hr(e,t,r,null,n)}}var Zt=null;function Wt(e,t,n,r){if(Zt=null,null!==(e=vo(e=_e(r))))if(null===(t=$e(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=Ge(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Zt=e,null}function Yt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Ke()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Xt=null,Kt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Kt,r=n.length,o="value"in Xt?Xt.value:Xt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var s=r-e;for(t=1;t<=s&&n[r-t]===o[a-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function on(e){function t(t,n,r,o,a){for(var s in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(s)&&(t=e[s],this[s]=t?t(o):o[s]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return D(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var an,sn,ln,cn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=on(cn),dn=D({},cn,{view:0,detail:0}),pn=on(dn),fn=D({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Sn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==ln&&(ln&&"mousemove"===e.type?(an=e.screenX-ln.screenX,sn=e.screenY-ln.screenY):sn=an=0,ln=e),an)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),mn=on(fn),hn=on(D({},fn,{dataTransfer:0})),gn=on(D({},dn,{relatedTarget:0})),bn=on(D({},cn,{animationName:0,elapsedTime:0,pseudoElement:0})),yn=D({},cn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),vn=on(yn),wn=on(D({},cn,{data:0})),_n={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},kn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},En={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function xn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=En[e])&&!!t[e]}function Sn(){return xn}var Tn=D({},dn,{key:function(e){if(e.key){var t=_n[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?kn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Sn,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Rn=on(Tn),Cn=on(D({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Nn=on(D({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Sn})),On=on(D({},cn,{propertyName:0,elapsedTime:0,pseudoElement:0})),An=D({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Ln=on(An),In=[9,13,27,32],Pn=u&&"CompositionEvent"in window,jn=null;u&&"documentMode"in document&&(jn=document.documentMode);var Mn=u&&"TextEvent"in window&&!jn,Dn=u&&(!Pn||jn&&8<jn&&11>=jn),Fn=String.fromCharCode(32),Un=!1;function Bn(e,t){switch(e){case"keyup":return-1!==In.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function zn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var $n=!1;var Gn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Hn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Gn[e.type]:"textarea"===t}function qn(e,t,n,r){Te(r),0<(t=Vr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Vn=null,Qn=null;function Zn(e){Fr(e,0)}function Wn(e){if(Q(_o(e)))return e}function Yn(e,t){if("change"===e)return t}var Xn=!1;if(u){var Kn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Kn=Jn}else Kn=!1;Xn=Kn&&(!document.documentMode||9<document.documentMode)}function tr(){Vn&&(Vn.detachEvent("onpropertychange",nr),Qn=Vn=null)}function nr(e){if("value"===e.propertyName&&Wn(Qn)){var t=[];qn(t,Qn,e,_e(e)),Ae(Zn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Qn=n,(Vn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function or(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Wn(Qn)}function ar(e,t){if("click"===e)return Wn(t)}function sr(e,t){if("input"===e||"change"===e)return Wn(t)}var ir="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function lr(e,t){if(ir(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!d.call(t,o)||!ir(e[o],t[o]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ur(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=Z();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=Z((e=t.contentWindow).document)}return t}function fr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function mr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=ur(n,a);var s=ur(n,r);o&&s&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var hr=u&&"documentMode"in document&&11>=document.documentMode,gr=null,br=null,yr=null,vr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;vr||null==gr||gr!==Z(r)||("selectionStart"in(r=gr)&&fr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},yr&&lr(yr,r)||(yr=r,0<(r=Vr(br,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=gr)))}function _r(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kr={animationend:_r("Animation","AnimationEnd"),animationiteration:_r("Animation","AnimationIteration"),animationstart:_r("Animation","AnimationStart"),transitionend:_r("Transition","TransitionEnd")},Er={},xr={};function Sr(e){if(Er[e])return Er[e];if(!kr[e])return e;var t,n=kr[e];for(t in n)if(n.hasOwnProperty(t)&&t in xr)return Er[e]=n[t];return e}u&&(xr=document.createElement("div").style,"AnimationEvent"in window||(delete kr.animationend.animation,delete kr.animationiteration.animation,delete kr.animationstart.animation),"TransitionEvent"in window||delete kr.transitionend.transition);var Tr=Sr("animationend"),Rr=Sr("animationiteration"),Cr=Sr("animationstart"),Nr=Sr("transitionend"),Or=new Map,Ar="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Lr(e,t){Or.set(e,t),l(t,[e])}for(var Ir=0;Ir<Ar.length;Ir++){var Pr=Ar[Ir];Lr(Pr.toLowerCase(),"on"+(Pr[0].toUpperCase()+Pr.slice(1)))}Lr(Tr,"onAnimationEnd"),Lr(Rr,"onAnimationIteration"),Lr(Cr,"onAnimationStart"),Lr("dblclick","onDoubleClick"),Lr("focusin","onFocus"),Lr("focusout","onBlur"),Lr(Nr,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),l("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),l("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),l("onBeforeInput",["compositionend","keypress","textInput","paste"]),l("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var jr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Mr=new Set("cancel close invalid load scroll toggle".split(" ").concat(jr));function Dr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,s,i,l,c){if(ze.apply(this,arguments),Me){if(!Me)throw Error(a(198));var u=De;Me=!1,De=null,Fe||(Fe=!0,Ue=u)}}(r,t,void 0,e),e.currentTarget=null}function Fr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var s=r.length-1;0<=s;s--){var i=r[s],l=i.instance,c=i.currentTarget;if(i=i.listener,l!==a&&o.isPropagationStopped())break e;Dr(o,i,c),a=l}else for(s=0;s<r.length;s++){if(l=(i=r[s]).instance,c=i.currentTarget,i=i.listener,l!==a&&o.isPropagationStopped())break e;Dr(o,i,c),a=l}}}if(Fe)throw e=Ue,Fe=!1,Ue=null,e}function Ur(e,t){var n=t[go];void 0===n&&(n=t[go]=new Set);var r=e+"__bubble";n.has(r)||(Gr(t,e,2,!1),n.add(r))}function Br(e,t,n){var r=0;t&&(r|=4),Gr(n,e,r,t)}var zr="_reactListening"+Math.random().toString(36).slice(2);function $r(e){if(!e[zr]){e[zr]=!0,s.forEach((function(t){"selectionchange"!==t&&(Mr.has(t)||Br(t,!1,e),Br(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[zr]||(t[zr]=!0,Br("selectionchange",!1,t))}}function Gr(e,t,n,r){switch(Yt(t)){case 1:var o=qt;break;case 4:o=Vt;break;default:o=Qt}n=o.bind(null,t,n,e),o=void 0,!Ie||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Hr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var s=r.tag;if(3===s||4===s){var i=r.stateNode.containerInfo;if(i===o||8===i.nodeType&&i.parentNode===o)break;if(4===s)for(s=r.return;null!==s;){var l=s.tag;if((3===l||4===l)&&((l=s.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;s=s.return}for(;null!==i;){if(null===(s=vo(i)))return;if(5===(l=s.tag)||6===l){r=a=s;continue e}i=i.parentNode}}r=r.return}Ae((function(){var r=a,o=_e(n),s=[];e:{var i=Or.get(e);if(void 0!==i){var l=un,c=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":l=Rn;break;case"focusin":c="focus",l=gn;break;case"focusout":c="blur",l=gn;break;case"beforeblur":case"afterblur":l=gn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=mn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=hn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=Nn;break;case Tr:case Rr:case Cr:l=bn;break;case Nr:l=On;break;case"scroll":l=pn;break;case"wheel":l=Ln;break;case"copy":case"cut":case"paste":l=vn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=Cn}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==i?i+"Capture":null:i;u=[];for(var f,m=r;null!==m;){var h=(f=m).stateNode;if(5===f.tag&&null!==h&&(f=h,null!==p&&(null!=(h=Le(m,p))&&u.push(qr(m,h,f)))),d)break;m=m.return}0<u.length&&(i=new l(i,c,null,n,o),s.push({event:i,listeners:u}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(i="mouseover"===e||"pointerover"===e)||n===we||!(c=n.relatedTarget||n.fromElement)||!vo(c)&&!c[ho])&&(l||i)&&(i=o.window===o?o:(i=o.ownerDocument)?i.defaultView||i.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?vo(c):null)&&(c!==(d=$e(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=mn,h="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(u=Cn,h="onPointerLeave",p="onPointerEnter",m="pointer"),d=null==l?i:_o(l),f=null==c?i:_o(c),(i=new u(h,m+"leave",l,n,o)).target=d,i.relatedTarget=f,h=null,vo(o)===r&&((u=new u(p,m+"enter",c,n,o)).target=f,u.relatedTarget=d,h=u),d=h,l&&c)e:{for(p=c,m=0,f=u=l;f;f=Qr(f))m++;for(f=0,h=p;h;h=Qr(h))f++;for(;0<m-f;)u=Qr(u),m--;for(;0<f-m;)p=Qr(p),f--;for(;m--;){if(u===p||null!==p&&u===p.alternate)break e;u=Qr(u),p=Qr(p)}u=null}else u=null;null!==l&&Zr(s,i,l,u,!1),null!==c&&null!==d&&Zr(s,d,c,u,!0)}if("select"===(l=(i=r?_o(r):window).nodeName&&i.nodeName.toLowerCase())||"input"===l&&"file"===i.type)var g=Yn;else if(Hn(i))if(Xn)g=sr;else{g=or;var b=rr}else(l=i.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===i.type||"radio"===i.type)&&(g=ar);switch(g&&(g=g(e,r))?qn(s,g,n,o):(b&&b(e,i,r),"focusout"===e&&(b=i._wrapperState)&&b.controlled&&"number"===i.type&&ee(i,"number",i.value)),b=r?_o(r):window,e){case"focusin":(Hn(b)||"true"===b.contentEditable)&&(gr=b,br=r,yr=null);break;case"focusout":yr=br=gr=null;break;case"mousedown":vr=!0;break;case"contextmenu":case"mouseup":case"dragend":vr=!1,wr(s,n,o);break;case"selectionchange":if(hr)break;case"keydown":case"keyup":wr(s,n,o)}var y;if(Pn)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else $n?Bn(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(Dn&&"ko"!==n.locale&&($n||"onCompositionStart"!==v?"onCompositionEnd"===v&&$n&&(y=en()):(Kt="value"in(Xt=o)?Xt.value:Xt.textContent,$n=!0)),0<(b=Vr(r,v)).length&&(v=new wn(v,e,null,n,o),s.push({event:v,listeners:b}),y?v.data=y:null!==(y=zn(n))&&(v.data=y))),(y=Mn?function(e,t){switch(e){case"compositionend":return zn(t);case"keypress":return 32!==t.which?null:(Un=!0,Fn);case"textInput":return(e=t.data)===Fn&&Un?null:e;default:return null}}(e,n):function(e,t){if($n)return"compositionend"===e||!Pn&&Bn(e,t)?(e=en(),Jt=Kt=Xt=null,$n=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Dn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Vr(r,"onBeforeInput")).length&&(o=new wn("onBeforeInput","beforeinput",null,n,o),s.push({event:o,listeners:r}),o.data=y))}Fr(s,t)}))}function qr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Vr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Le(e,n))&&r.unshift(qr(e,a,o)),null!=(a=Le(e,t))&&r.push(qr(e,a,o))),e=e.return}return r}function Qr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Zr(e,t,n,r,o){for(var a=t._reactName,s=[];null!==n&&n!==r;){var i=n,l=i.alternate,c=i.stateNode;if(null!==l&&l===r)break;5===i.tag&&null!==c&&(i=c,o?null!=(l=Le(n,a))&&s.unshift(qr(n,l,i)):o||null!=(l=Le(n,a))&&s.push(qr(n,l,i))),n=n.return}0!==s.length&&e.push({event:t,listeners:s})}var Wr=/\r\n?/g,Yr=/\u0000|\uFFFD/g;function Xr(e){return("string"==typeof e?e:""+e).replace(Wr,"\n").replace(Yr,"")}function Kr(e,t,n){if(t=Xr(t),Xr(e)!==t&&n)throw Error(a(425))}function Jr(){}var eo=null,to=null;function no(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ro="function"==typeof setTimeout?setTimeout:void 0,oo="function"==typeof clearTimeout?clearTimeout:void 0,ao="function"==typeof Promise?Promise:void 0,so="function"==typeof queueMicrotask?queueMicrotask:void 0!==ao?function(e){return ao.resolve(null).then(e).catch(io)}:ro;function io(e){setTimeout((function(){throw e}))}function lo(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===r)return e.removeChild(o),void $t(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=o}while(n);$t(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var po=Math.random().toString(36).slice(2),fo="__reactFiber$"+po,mo="__reactProps$"+po,ho="__reactContainer$"+po,go="__reactEvents$"+po,bo="__reactListeners$"+po,yo="__reactHandles$"+po;function vo(e){var t=e[fo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[ho]||n[fo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=uo(e);null!==e;){if(n=e[fo])return n;e=uo(e)}return t}n=(e=n).parentNode}return null}function wo(e){return!(e=e[fo]||e[ho])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function _o(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function ko(e){return e[mo]||null}var Eo=[],xo=-1;function So(e){return{current:e}}function To(e){0>xo||(e.current=Eo[xo],Eo[xo]=null,xo--)}function Ro(e,t){xo++,Eo[xo]=e.current,e.current=t}var Co={},No=So(Co),Oo=So(!1),Ao=Co;function Lo(e,t){var n=e.type.contextTypes;if(!n)return Co;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function Io(e){return null!=(e=e.childContextTypes)}function Po(){To(Oo),To(No)}function jo(e,t,n){if(No.current!==Co)throw Error(a(168));Ro(No,t),Ro(Oo,n)}function Mo(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(a(108,G(e)||"Unknown",o));return D({},n,r)}function Do(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Co,Ao=No.current,Ro(No,e),Ro(Oo,Oo.current),!0}function Fo(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=Mo(e,t,Ao),r.__reactInternalMemoizedMergedChildContext=e,To(Oo),To(No),Ro(No,e)):To(Oo),Ro(Oo,n)}var Uo=null,Bo=!1,zo=!1;function $o(e){null===Uo?Uo=[e]:Uo.push(e)}function Go(){if(!zo&&null!==Uo){zo=!0;var e=0,t=vt;try{var n=Uo;for(vt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}Uo=null,Bo=!1}catch(o){throw null!==Uo&&(Uo=Uo.slice(e+1)),Qe(Je,Go),o}finally{vt=t,zo=!1}}return null}var Ho=[],qo=0,Vo=null,Qo=0,Zo=[],Wo=0,Yo=null,Xo=1,Ko="";function Jo(e,t){Ho[qo++]=Qo,Ho[qo++]=Vo,Vo=e,Qo=t}function ea(e,t,n){Zo[Wo++]=Xo,Zo[Wo++]=Ko,Zo[Wo++]=Yo,Yo=e;var r=Xo;e=Ko;var o=32-st(r)-1;r&=~(1<<o),n+=1;var a=32-st(t)+o;if(30<a){var s=o-o%5;a=(r&(1<<s)-1).toString(32),r>>=s,o-=s,Xo=1<<32-st(t)+o|n<<o|r,Ko=a+e}else Xo=1<<a|n<<o|r,Ko=e}function ta(e){null!==e.return&&(Jo(e,1),ea(e,1,0))}function na(e){for(;e===Vo;)Vo=Ho[--qo],Ho[qo]=null,Qo=Ho[--qo],Ho[qo]=null;for(;e===Yo;)Yo=Zo[--Wo],Zo[Wo]=null,Ko=Zo[--Wo],Zo[Wo]=null,Xo=Zo[--Wo],Zo[Wo]=null}var ra=null,oa=null,aa=!1,sa=null;function ia(e,t){var n=Lc(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function la(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,ra=e,oa=co(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ra=e,oa=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Yo?{id:Xo,overflow:Ko}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Lc(18,null,null,0)).stateNode=t,n.return=e,e.child=n,ra=e,oa=null,!0);default:return!1}}function ca(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function ua(e){if(aa){var t=oa;if(t){var n=t;if(!la(e,t)){if(ca(e))throw Error(a(418));t=co(n.nextSibling);var r=ra;t&&la(e,t)?ia(r,n):(e.flags=-4097&e.flags|2,aa=!1,ra=e)}}else{if(ca(e))throw Error(a(418));e.flags=-4097&e.flags|2,aa=!1,ra=e}}}function da(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ra=e}function pa(e){if(e!==ra)return!1;if(!aa)return da(e),aa=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!no(e.type,e.memoizedProps)),t&&(t=oa)){if(ca(e))throw fa(),Error(a(418));for(;t;)ia(e,t),t=co(t.nextSibling)}if(da(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){oa=co(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}oa=null}}else oa=ra?co(e.stateNode.nextSibling):null;return!0}function fa(){for(var e=oa;e;)e=co(e.nextSibling)}function ma(){oa=ra=null,aa=!1}function ha(e){null===sa?sa=[e]:sa.push(e)}var ga=w.ReactCurrentBatchConfig;function ba(e,t){if(e&&e.defaultProps){for(var n in t=D({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var ya=So(null),va=null,wa=null,_a=null;function ka(){_a=wa=va=null}function Ea(e){var t=ya.current;To(ya),e._currentValue=t}function xa(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Sa(e,t){va=e,_a=wa=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(wi=!0),e.firstContext=null)}function Ta(e){var t=e._currentValue;if(_a!==e)if(e={context:e,memoizedValue:t,next:null},null===wa){if(null===va)throw Error(a(308));wa=e,va.dependencies={lanes:0,firstContext:e}}else wa=wa.next=e;return t}var Ra=null;function Ca(e){null===Ra?Ra=[e]:Ra.push(e)}function Na(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,Ca(t)):(n.next=o.next,o.next=n),t.interleaved=n,Oa(e,r)}function Oa(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Aa=!1;function La(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Ia(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Pa(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ja(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&Nl)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,Oa(e,n)}return null===(o=r.interleaved)?(t.next=t,Ca(r)):(t.next=o.next,o.next=t),r.interleaved=t,Oa(e,n)}function Ma(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}function Da(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var s={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=s:a=a.next=s,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Fa(e,t,n,r){var o=e.updateQueue;Aa=!1;var a=o.firstBaseUpdate,s=o.lastBaseUpdate,i=o.shared.pending;if(null!==i){o.shared.pending=null;var l=i,c=l.next;l.next=null,null===s?a=c:s.next=c,s=l;var u=e.alternate;null!==u&&((i=(u=u.updateQueue).lastBaseUpdate)!==s&&(null===i?u.firstBaseUpdate=c:i.next=c,u.lastBaseUpdate=l))}if(null!==a){var d=o.baseState;for(s=0,u=c=l=null,i=a;;){var p=i.lane,f=i.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,h=i;switch(p=t,f=n,h.tag){case 1:if("function"==typeof(m=h.payload)){d=m.call(f,d,p);break e}d=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(p="function"==typeof(m=h.payload)?m.call(f,d,p):m))break e;d=D({},d,p);break e;case 2:Aa=!0}}null!==i.callback&&0!==i.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[i]:p.push(i))}else f={eventTime:f,lane:p,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,s|=p;if(null===(i=i.next)){if(null===(i=o.shared.pending))break;i=(p=i).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{s|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);Dl|=s,e.lanes=s,e.memoizedState=d}}function Ua(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(a(191,o));o.call(r)}}}var Ba=(new r.Component).refs;function za(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:D({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var $a={isMounted:function(e){return!!(e=e._reactInternals)&&$e(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=tc(),o=nc(e),a=Pa(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=ja(e,a,o))&&(rc(t,e,o,r),Ma(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=tc(),o=nc(e),a=Pa(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=ja(e,a,o))&&(rc(t,e,o,r),Ma(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=tc(),r=nc(e),o=Pa(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=ja(e,o,r))&&(rc(t,e,r,n),Ma(t,e,r))}};function Ga(e,t,n,r,o,a,s){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,s):!t.prototype||!t.prototype.isPureReactComponent||(!lr(n,r)||!lr(o,a))}function Ha(e,t,n){var r=!1,o=Co,a=t.contextType;return"object"==typeof a&&null!==a?a=Ta(a):(o=Io(t)?Ao:No.current,a=(r=null!=(r=t.contextTypes))?Lo(e,o):Co),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=$a,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function qa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&$a.enqueueReplaceState(t,t.state,null)}function Va(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=Ba,La(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=Ta(a):(a=Io(t)?Ao:No.current,o.context=Lo(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(za(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&$a.enqueueReplaceState(o,o.state,null),Fa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function Qa(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=r,s=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===s?t.ref:(t=function(e){var t=o.refs;t===Ba&&(t=o.refs={}),null===e?delete t[s]:t[s]=e},t._stringRef=s,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Za(e,t){throw e=Object.prototype.toString.call(t),Error(a(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Wa(e){return(0,e._init)(e._payload)}function Ya(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Pc(e,t)).index=0,e.sibling=null,e}function s(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function i(t){return e&&null===t.alternate&&(t.flags|=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Fc(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===E?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===L&&Wa(a)===t.type)?((r=o(t,n.props)).ref=Qa(e,t,n),r.return=e,r):((r=jc(n.type,n.key,n.props,null,e.mode,r)).ref=Qa(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Uc(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Mc(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Fc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case _:return(n=jc(t.type,t.key,t.props,null,e.mode,n)).ref=Qa(e,null,t),n.return=e,n;case k:return(t=Uc(t,e.mode,n)).return=e,t;case L:return p(e,(0,t._init)(t._payload),n)}if(te(t)||j(t))return(t=Mc(t,e.mode,n,null)).return=e,t;Za(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case _:return n.key===o?c(e,t,n,r):null;case k:return n.key===o?u(e,t,n,r):null;case L:return f(e,t,(o=n._init)(n._payload),r)}if(te(n)||j(n))return null!==o?null:d(e,t,n,r,null);Za(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case _:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case k:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case L:return m(e,t,n,(0,r._init)(r._payload),o)}if(te(r)||j(r))return d(t,e=e.get(n)||null,r,o,null);Za(t,r)}return null}function h(o,a,i,l){for(var c=null,u=null,d=a,h=a=0,g=null;null!==d&&h<i.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var b=f(o,d,i[h],l);if(null===b){null===d&&(d=g);break}e&&d&&null===b.alternate&&t(o,d),a=s(b,a,h),null===u?c=b:u.sibling=b,u=b,d=g}if(h===i.length)return n(o,d),aa&&Jo(o,h),c;if(null===d){for(;h<i.length;h++)null!==(d=p(o,i[h],l))&&(a=s(d,a,h),null===u?c=d:u.sibling=d,u=d);return aa&&Jo(o,h),c}for(d=r(o,d);h<i.length;h++)null!==(g=m(d,o,h,i[h],l))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),a=s(g,a,h),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach((function(e){return t(o,e)})),aa&&Jo(o,h),c}function g(o,i,l,c){var u=j(l);if("function"!=typeof u)throw Error(a(150));if(null==(l=u.call(l)))throw Error(a(151));for(var d=u=null,h=i,g=i=0,b=null,y=l.next();null!==h&&!y.done;g++,y=l.next()){h.index>g?(b=h,h=null):b=h.sibling;var v=f(o,h,y.value,c);if(null===v){null===h&&(h=b);break}e&&h&&null===v.alternate&&t(o,h),i=s(v,i,g),null===d?u=v:d.sibling=v,d=v,h=b}if(y.done)return n(o,h),aa&&Jo(o,g),u;if(null===h){for(;!y.done;g++,y=l.next())null!==(y=p(o,y.value,c))&&(i=s(y,i,g),null===d?u=y:d.sibling=y,d=y);return aa&&Jo(o,g),u}for(h=r(o,h);!y.done;g++,y=l.next())null!==(y=m(h,o,g,y.value,c))&&(e&&null!==y.alternate&&h.delete(null===y.key?g:y.key),i=s(y,i,g),null===d?u=y:d.sibling=y,d=y);return e&&h.forEach((function(e){return t(o,e)})),aa&&Jo(o,g),u}return function e(r,a,s,l){if("object"==typeof s&&null!==s&&s.type===E&&null===s.key&&(s=s.props.children),"object"==typeof s&&null!==s){switch(s.$$typeof){case _:e:{for(var c=s.key,u=a;null!==u;){if(u.key===c){if((c=s.type)===E){if(7===u.tag){n(r,u.sibling),(a=o(u,s.props.children)).return=r,r=a;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===L&&Wa(c)===u.type){n(r,u.sibling),(a=o(u,s.props)).ref=Qa(r,u,s),a.return=r,r=a;break e}n(r,u);break}t(r,u),u=u.sibling}s.type===E?((a=Mc(s.props.children,r.mode,l,s.key)).return=r,r=a):((l=jc(s.type,s.key,s.props,null,r.mode,l)).ref=Qa(r,a,s),l.return=r,r=l)}return i(r);case k:e:{for(u=s.key;null!==a;){if(a.key===u){if(4===a.tag&&a.stateNode.containerInfo===s.containerInfo&&a.stateNode.implementation===s.implementation){n(r,a.sibling),(a=o(a,s.children||[])).return=r,r=a;break e}n(r,a);break}t(r,a),a=a.sibling}(a=Uc(s,r.mode,l)).return=r,r=a}return i(r);case L:return e(r,a,(u=s._init)(s._payload),l)}if(te(s))return h(r,a,s,l);if(j(s))return g(r,a,s,l);Za(r,s)}return"string"==typeof s&&""!==s||"number"==typeof s?(s=""+s,null!==a&&6===a.tag?(n(r,a.sibling),(a=o(a,s)).return=r,r=a):(n(r,a),(a=Fc(s,r.mode,l)).return=r,r=a),i(r)):n(r,a)}}var Xa=Ya(!0),Ka=Ya(!1),Ja={},es=So(Ja),ts=So(Ja),ns=So(Ja);function rs(e){if(e===Ja)throw Error(a(174));return e}function os(e,t){switch(Ro(ns,t),Ro(ts,e),Ro(es,Ja),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}To(es),Ro(es,t)}function as(){To(es),To(ts),To(ns)}function ss(e){rs(ns.current);var t=rs(es.current),n=le(t,e.type);t!==n&&(Ro(ts,e),Ro(es,n))}function is(e){ts.current===e&&(To(es),To(ts))}var ls=So(0);function cs(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var us=[];function ds(){for(var e=0;e<us.length;e++)us[e]._workInProgressVersionPrimary=null;us.length=0}var ps=w.ReactCurrentDispatcher,fs=w.ReactCurrentBatchConfig,ms=0,hs=null,gs=null,bs=null,ys=!1,vs=!1,ws=0,_s=0;function ks(){throw Error(a(321))}function Es(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ir(e[n],t[n]))return!1;return!0}function xs(e,t,n,r,o,s){if(ms=s,hs=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,ps.current=null===e||null===e.memoizedState?ii:li,e=n(r,o),vs){s=0;do{if(vs=!1,ws=0,25<=s)throw Error(a(301));s+=1,bs=gs=null,t.updateQueue=null,ps.current=ci,e=n(r,o)}while(vs)}if(ps.current=si,t=null!==gs&&null!==gs.next,ms=0,bs=gs=hs=null,ys=!1,t)throw Error(a(300));return e}function Ss(){var e=0!==ws;return ws=0,e}function Ts(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===bs?hs.memoizedState=bs=e:bs=bs.next=e,bs}function Rs(){if(null===gs){var e=hs.alternate;e=null!==e?e.memoizedState:null}else e=gs.next;var t=null===bs?hs.memoizedState:bs.next;if(null!==t)bs=t,gs=e;else{if(null===e)throw Error(a(310));e={memoizedState:(gs=e).memoizedState,baseState:gs.baseState,baseQueue:gs.baseQueue,queue:gs.queue,next:null},null===bs?hs.memoizedState=bs=e:bs=bs.next=e}return bs}function Cs(e,t){return"function"==typeof t?t(e):t}function Ns(e){var t=Rs(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=gs,o=r.baseQueue,s=n.pending;if(null!==s){if(null!==o){var i=o.next;o.next=s.next,s.next=i}r.baseQueue=o=s,n.pending=null}if(null!==o){s=o.next,r=r.baseState;var l=i=null,c=null,u=s;do{var d=u.lane;if((ms&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(l=c=p,i=r):c=c.next=p,hs.lanes|=d,Dl|=d}u=u.next}while(null!==u&&u!==s);null===c?i=r:c.next=l,ir(r,t.memoizedState)||(wi=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=c,n.lastRenderedState=r}if(null!==(e=n.interleaved)){o=e;do{s=o.lane,hs.lanes|=s,Dl|=s,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Os(e){var t=Rs(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,s=t.memoizedState;if(null!==o){n.pending=null;var i=o=o.next;do{s=e(s,i.action),i=i.next}while(i!==o);ir(s,t.memoizedState)||(wi=!0),t.memoizedState=s,null===t.baseQueue&&(t.baseState=s),n.lastRenderedState=s}return[s,r]}function As(){}function Ls(e,t){var n=hs,r=Rs(),o=t(),s=!ir(r.memoizedState,o);if(s&&(r.memoizedState=o,wi=!0),r=r.queue,Hs(js.bind(null,n,r,e),[e]),r.getSnapshot!==t||s||null!==bs&&1&bs.memoizedState.tag){if(n.flags|=2048,Us(9,Ps.bind(null,n,r,o,t),void 0,null),null===Ol)throw Error(a(349));0!=(30&ms)||Is(n,t,o)}return o}function Is(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=hs.updateQueue)?(t={lastEffect:null,stores:null},hs.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ps(e,t,n,r){t.value=n,t.getSnapshot=r,Ms(t)&&Ds(e)}function js(e,t,n){return n((function(){Ms(t)&&Ds(e)}))}function Ms(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!ir(e,n)}catch(r){return!0}}function Ds(e){var t=Oa(e,1);null!==t&&rc(t,e,1,-1)}function Fs(e){var t=Ts();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Cs,lastRenderedState:e},t.queue=e,e=e.dispatch=ni.bind(null,hs,e),[t.memoizedState,e]}function Us(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=hs.updateQueue)?(t={lastEffect:null,stores:null},hs.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function Bs(){return Rs().memoizedState}function zs(e,t,n,r){var o=Ts();hs.flags|=e,o.memoizedState=Us(1|t,n,void 0,void 0===r?null:r)}function $s(e,t,n,r){var o=Rs();r=void 0===r?null:r;var a=void 0;if(null!==gs){var s=gs.memoizedState;if(a=s.destroy,null!==r&&Es(r,s.deps))return void(o.memoizedState=Us(t,n,a,r))}hs.flags|=e,o.memoizedState=Us(1|t,n,a,r)}function Gs(e,t){return zs(8390656,8,e,t)}function Hs(e,t){return $s(2048,8,e,t)}function qs(e,t){return $s(4,2,e,t)}function Vs(e,t){return $s(4,4,e,t)}function Qs(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Zs(e,t,n){return n=null!=n?n.concat([e]):null,$s(4,4,Qs.bind(null,t,e),n)}function Ws(){}function Ys(e,t){var n=Rs();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Es(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Xs(e,t){var n=Rs();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Es(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ks(e,t,n){return 0==(21&ms)?(e.baseState&&(e.baseState=!1,wi=!0),e.memoizedState=n):(ir(n,t)||(n=ht(),hs.lanes|=n,Dl|=n,e.baseState=!0),t)}function Js(e,t){var n=vt;vt=0!==n&&4>n?n:4,e(!0);var r=fs.transition;fs.transition={};try{e(!1),t()}finally{vt=n,fs.transition=r}}function ei(){return Rs().memoizedState}function ti(e,t,n){var r=nc(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},ri(e))oi(t,n);else if(null!==(n=Na(e,t,n,r))){rc(n,e,r,tc()),ai(n,t,r)}}function ni(e,t,n){var r=nc(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(ri(e))oi(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var s=t.lastRenderedState,i=a(s,n);if(o.hasEagerState=!0,o.eagerState=i,ir(i,s)){var l=t.interleaved;return null===l?(o.next=o,Ca(t)):(o.next=l.next,l.next=o),void(t.interleaved=o)}}catch(c){}null!==(n=Na(e,t,o,r))&&(rc(n,e,r,o=tc()),ai(n,t,r))}}function ri(e){var t=e.alternate;return e===hs||null!==t&&t===hs}function oi(e,t){vs=ys=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function ai(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}var si={readContext:Ta,useCallback:ks,useContext:ks,useEffect:ks,useImperativeHandle:ks,useInsertionEffect:ks,useLayoutEffect:ks,useMemo:ks,useReducer:ks,useRef:ks,useState:ks,useDebugValue:ks,useDeferredValue:ks,useTransition:ks,useMutableSource:ks,useSyncExternalStore:ks,useId:ks,unstable_isNewReconciler:!1},ii={readContext:Ta,useCallback:function(e,t){return Ts().memoizedState=[e,void 0===t?null:t],e},useContext:Ta,useEffect:Gs,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,zs(4194308,4,Qs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return zs(4194308,4,e,t)},useInsertionEffect:function(e,t){return zs(4,2,e,t)},useMemo:function(e,t){var n=Ts();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ts();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=ti.bind(null,hs,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Ts().memoizedState=e},useState:Fs,useDebugValue:Ws,useDeferredValue:function(e){return Ts().memoizedState=e},useTransition:function(){var e=Fs(!1),t=e[0];return e=Js.bind(null,e[1]),Ts().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=hs,o=Ts();if(aa){if(void 0===n)throw Error(a(407));n=n()}else{if(n=t(),null===Ol)throw Error(a(349));0!=(30&ms)||Is(r,t,n)}o.memoizedState=n;var s={value:n,getSnapshot:t};return o.queue=s,Gs(js.bind(null,r,s,e),[e]),r.flags|=2048,Us(9,Ps.bind(null,r,s,n,t),void 0,null),n},useId:function(){var e=Ts(),t=Ol.identifierPrefix;if(aa){var n=Ko;t=":"+t+"R"+(n=(Xo&~(1<<32-st(Xo)-1)).toString(32)+n),0<(n=ws++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=_s++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},li={readContext:Ta,useCallback:Ys,useContext:Ta,useEffect:Hs,useImperativeHandle:Zs,useInsertionEffect:qs,useLayoutEffect:Vs,useMemo:Xs,useReducer:Ns,useRef:Bs,useState:function(){return Ns(Cs)},useDebugValue:Ws,useDeferredValue:function(e){return Ks(Rs(),gs.memoizedState,e)},useTransition:function(){return[Ns(Cs)[0],Rs().memoizedState]},useMutableSource:As,useSyncExternalStore:Ls,useId:ei,unstable_isNewReconciler:!1},ci={readContext:Ta,useCallback:Ys,useContext:Ta,useEffect:Hs,useImperativeHandle:Zs,useInsertionEffect:qs,useLayoutEffect:Vs,useMemo:Xs,useReducer:Os,useRef:Bs,useState:function(){return Os(Cs)},useDebugValue:Ws,useDeferredValue:function(e){var t=Rs();return null===gs?t.memoizedState=e:Ks(t,gs.memoizedState,e)},useTransition:function(){return[Os(Cs)[0],Rs().memoizedState]},useMutableSource:As,useSyncExternalStore:Ls,useId:ei,unstable_isNewReconciler:!1};function ui(e,t){try{var n="",r=t;do{n+=z(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o,digest:null}}function di(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function pi(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var fi="function"==typeof WeakMap?WeakMap:Map;function mi(e,t,n){(n=Pa(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){ql||(ql=!0,Vl=r),pi(0,t)},n}function hi(e,t,n){(n=Pa(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){pi(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){pi(0,t),"function"!=typeof r&&(null===Ql?Ql=new Set([this]):Ql.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function gi(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new fi;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=Tc.bind(null,e,t,n),t.then(e,e))}function bi(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function yi(e,t,n,r,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=Pa(-1,1)).tag=2,ja(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var vi=w.ReactCurrentOwner,wi=!1;function _i(e,t,n,r){t.child=null===e?Ka(t,null,n,r):Xa(t,e.child,n,r)}function ki(e,t,n,r,o){n=n.render;var a=t.ref;return Sa(t,o),r=xs(e,t,n,r,a,o),n=Ss(),null===e||wi?(aa&&n&&ta(t),t.flags|=1,_i(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,qi(e,t,o))}function Ei(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Ic(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=jc(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,xi(e,t,a,r,o))}if(a=e.child,0==(e.lanes&o)){var s=a.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(s,r)&&e.ref===t.ref)return qi(e,t,o)}return t.flags|=1,(e=Pc(a,r)).ref=t.ref,e.return=t,t.child=e}function xi(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(lr(a,r)&&e.ref===t.ref){if(wi=!1,t.pendingProps=r=a,0==(e.lanes&o))return t.lanes=e.lanes,qi(e,t,o);0!=(131072&e.flags)&&(wi=!0)}}return Ri(e,t,n,r,o)}function Si(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ro(Pl,Il),Il|=n;else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Ro(Pl,Il),Il|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,Ro(Pl,Il),Il|=r}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Ro(Pl,Il),Il|=r;return _i(e,t,o,n),t.child}function Ti(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ri(e,t,n,r,o){var a=Io(n)?Ao:No.current;return a=Lo(t,a),Sa(t,o),n=xs(e,t,n,r,a,o),r=Ss(),null===e||wi?(aa&&r&&ta(t),t.flags|=1,_i(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,qi(e,t,o))}function Ci(e,t,n,r,o){if(Io(n)){var a=!0;Do(t)}else a=!1;if(Sa(t,o),null===t.stateNode)Hi(e,t),Ha(t,n,r),Va(t,n,r,o),r=!0;else if(null===e){var s=t.stateNode,i=t.memoizedProps;s.props=i;var l=s.context,c=n.contextType;"object"==typeof c&&null!==c?c=Ta(c):c=Lo(t,c=Io(n)?Ao:No.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof s.getSnapshotBeforeUpdate;d||"function"!=typeof s.UNSAFE_componentWillReceiveProps&&"function"!=typeof s.componentWillReceiveProps||(i!==r||l!==c)&&qa(t,s,r,c),Aa=!1;var p=t.memoizedState;s.state=p,Fa(t,r,s,o),l=t.memoizedState,i!==r||p!==l||Oo.current||Aa?("function"==typeof u&&(za(t,n,u,r),l=t.memoizedState),(i=Aa||Ga(t,n,i,r,p,l,c))?(d||"function"!=typeof s.UNSAFE_componentWillMount&&"function"!=typeof s.componentWillMount||("function"==typeof s.componentWillMount&&s.componentWillMount(),"function"==typeof s.UNSAFE_componentWillMount&&s.UNSAFE_componentWillMount()),"function"==typeof s.componentDidMount&&(t.flags|=4194308)):("function"==typeof s.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),s.props=r,s.state=l,s.context=c,r=i):("function"==typeof s.componentDidMount&&(t.flags|=4194308),r=!1)}else{s=t.stateNode,Ia(e,t),i=t.memoizedProps,c=t.type===t.elementType?i:ba(t.type,i),s.props=c,d=t.pendingProps,p=s.context,"object"==typeof(l=n.contextType)&&null!==l?l=Ta(l):l=Lo(t,l=Io(n)?Ao:No.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof s.getSnapshotBeforeUpdate)||"function"!=typeof s.UNSAFE_componentWillReceiveProps&&"function"!=typeof s.componentWillReceiveProps||(i!==d||p!==l)&&qa(t,s,r,l),Aa=!1,p=t.memoizedState,s.state=p,Fa(t,r,s,o);var m=t.memoizedState;i!==d||p!==m||Oo.current||Aa?("function"==typeof f&&(za(t,n,f,r),m=t.memoizedState),(c=Aa||Ga(t,n,c,r,p,m,l)||!1)?(u||"function"!=typeof s.UNSAFE_componentWillUpdate&&"function"!=typeof s.componentWillUpdate||("function"==typeof s.componentWillUpdate&&s.componentWillUpdate(r,m,l),"function"==typeof s.UNSAFE_componentWillUpdate&&s.UNSAFE_componentWillUpdate(r,m,l)),"function"==typeof s.componentDidUpdate&&(t.flags|=4),"function"==typeof s.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof s.componentDidUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof s.getSnapshotBeforeUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=m),s.props=r,s.state=m,s.context=l,r=c):("function"!=typeof s.componentDidUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof s.getSnapshotBeforeUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return Ni(e,t,n,r,a,o)}function Ni(e,t,n,r,o,a){Ti(e,t);var s=0!=(128&t.flags);if(!r&&!s)return o&&Fo(t,n,!1),qi(e,t,a);r=t.stateNode,vi.current=t;var i=s&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&s?(t.child=Xa(t,e.child,null,a),t.child=Xa(t,null,i,a)):_i(e,t,i,a),t.memoizedState=r.state,o&&Fo(t,n,!0),t.child}function Oi(e){var t=e.stateNode;t.pendingContext?jo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&jo(0,t.context,!1),os(e,t.containerInfo)}function Ai(e,t,n,r,o){return ma(),ha(o),t.flags|=256,_i(e,t,n,r),t.child}var Li,Ii,Pi,ji,Mi={dehydrated:null,treeContext:null,retryLane:0};function Di(e){return{baseLanes:e,cachePool:null,transitions:null}}function Fi(e,t,n){var r,o=t.pendingProps,s=ls.current,i=!1,l=0!=(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&0!=(2&s)),r?(i=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(s|=1),Ro(ls,1&s),null===e)return ua(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(l=o.children,e=o.fallback,i?(o=t.mode,i=t.child,l={mode:"hidden",children:l},0==(1&o)&&null!==i?(i.childLanes=0,i.pendingProps=l):i=Dc(l,o,0,null),e=Mc(e,o,n,null),i.return=t,e.return=t,i.sibling=e,t.child=i,t.child.memoizedState=Di(n),t.memoizedState=Mi,e):Ui(t,l));if(null!==(s=e.memoizedState)&&null!==(r=s.dehydrated))return function(e,t,n,r,o,s,i){if(n)return 256&t.flags?(t.flags&=-257,Bi(e,t,i,r=di(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(s=r.fallback,o=t.mode,r=Dc({mode:"visible",children:r.children},o,0,null),(s=Mc(s,o,i,null)).flags|=2,r.return=t,s.return=t,r.sibling=s,t.child=r,0!=(1&t.mode)&&Xa(t,e.child,null,i),t.child.memoizedState=Di(i),t.memoizedState=Mi,s);if(0==(1&t.mode))return Bi(e,t,i,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var l=r.dgst;return r=l,Bi(e,t,i,r=di(s=Error(a(419)),r,void 0))}if(l=0!=(i&e.childLanes),wi||l){if(null!==(r=Ol)){switch(i&-i){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(r.suspendedLanes|i))?0:o)&&o!==s.retryLane&&(s.retryLane=o,Oa(e,o),rc(r,e,o,-1))}return gc(),Bi(e,t,i,r=di(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Cc.bind(null,e),o._reactRetry=t,null):(e=s.treeContext,oa=co(o.nextSibling),ra=t,aa=!0,sa=null,null!==e&&(Zo[Wo++]=Xo,Zo[Wo++]=Ko,Zo[Wo++]=Yo,Xo=e.id,Ko=e.overflow,Yo=t),t=Ui(t,r.children),t.flags|=4096,t)}(e,t,l,o,r,s,n);if(i){i=o.fallback,l=t.mode,r=(s=e.child).sibling;var c={mode:"hidden",children:o.children};return 0==(1&l)&&t.child!==s?((o=t.child).childLanes=0,o.pendingProps=c,t.deletions=null):(o=Pc(s,c)).subtreeFlags=14680064&s.subtreeFlags,null!==r?i=Pc(r,i):(i=Mc(i,l,n,null)).flags|=2,i.return=t,o.return=t,o.sibling=i,t.child=o,o=i,i=t.child,l=null===(l=e.child.memoizedState)?Di(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},i.memoizedState=l,i.childLanes=e.childLanes&~n,t.memoizedState=Mi,o}return e=(i=e.child).sibling,o=Pc(i,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Ui(e,t){return(t=Dc({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function Bi(e,t,n,r){return null!==r&&ha(r),Xa(t,e.child,null,n),(e=Ui(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function zi(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),xa(e.return,t,n)}function $i(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Gi(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(_i(e,t,r.children,n),0!=(2&(r=ls.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&zi(e,n,t);else if(19===e.tag)zi(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Ro(ls,r),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===cs(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),$i(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===cs(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}$i(t,!0,n,null,a);break;case"together":$i(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Hi(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function qi(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Dl|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Pc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Pc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Vi(e,t){if(!aa)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Qi(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=14680064&o.subtreeFlags,r|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Zi(e,t,n){var r=t.pendingProps;switch(na(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Qi(t),null;case 1:case 17:return Io(t.type)&&Po(),Qi(t),null;case 3:return r=t.stateNode,as(),To(Oo),To(No),ds(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(pa(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==sa&&(ic(sa),sa=null))),Ii(e,t),Qi(t),null;case 5:is(t);var o=rs(ns.current);if(n=t.type,null!==e&&null!=t.stateNode)Pi(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(a(166));return Qi(t),null}if(e=rs(es.current),pa(t)){r=t.stateNode,n=t.type;var s=t.memoizedProps;switch(r[fo]=t,r[mo]=s,e=0!=(1&t.mode),n){case"dialog":Ur("cancel",r),Ur("close",r);break;case"iframe":case"object":case"embed":Ur("load",r);break;case"video":case"audio":for(o=0;o<jr.length;o++)Ur(jr[o],r);break;case"source":Ur("error",r);break;case"img":case"image":case"link":Ur("error",r),Ur("load",r);break;case"details":Ur("toggle",r);break;case"input":Y(r,s),Ur("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!s.multiple},Ur("invalid",r);break;case"textarea":oe(r,s),Ur("invalid",r)}for(var l in ye(n,s),o=null,s)if(s.hasOwnProperty(l)){var c=s[l];"children"===l?"string"==typeof c?r.textContent!==c&&(!0!==s.suppressHydrationWarning&&Kr(r.textContent,c,e),o=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(!0!==s.suppressHydrationWarning&&Kr(r.textContent,c,e),o=["children",""+c]):i.hasOwnProperty(l)&&null!=c&&"onScroll"===l&&Ur("scroll",r)}switch(n){case"input":V(r),J(r,s,!0);break;case"textarea":V(r),se(r);break;case"select":case"option":break;default:"function"==typeof s.onClick&&(r.onclick=Jr)}r=o,t.updateQueue=r,null!==r&&(t.flags|=4)}else{l=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=ie(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[fo]=t,e[mo]=r,Li(e,t,!1,!1),t.stateNode=e;e:{switch(l=ve(n,r),n){case"dialog":Ur("cancel",e),Ur("close",e),o=r;break;case"iframe":case"object":case"embed":Ur("load",e),o=r;break;case"video":case"audio":for(o=0;o<jr.length;o++)Ur(jr[o],e);o=r;break;case"source":Ur("error",e),o=r;break;case"img":case"image":case"link":Ur("error",e),Ur("load",e),o=r;break;case"details":Ur("toggle",e),o=r;break;case"input":Y(e,r),o=W(e,r),Ur("invalid",e);break;case"option":default:o=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=D({},r,{value:void 0}),Ur("invalid",e);break;case"textarea":oe(e,r),o=re(e,r),Ur("invalid",e)}for(s in ye(n,o),c=o)if(c.hasOwnProperty(s)){var u=c[s];"style"===s?ge(e,u):"dangerouslySetInnerHTML"===s?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===s?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&"autoFocus"!==s&&(i.hasOwnProperty(s)?null!=u&&"onScroll"===s&&Ur("scroll",e):null!=u&&v(e,s,u,l))}switch(n){case"input":V(e),J(e,r,!1);break;case"textarea":V(e),se(e);break;case"option":null!=r.value&&e.setAttribute("value",""+H(r.value));break;case"select":e.multiple=!!r.multiple,null!=(s=r.value)?ne(e,!!r.multiple,s,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Jr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Qi(t),null;case 6:if(e&&null!=t.stateNode)ji(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));if(n=rs(ns.current),rs(es.current),pa(t)){if(r=t.stateNode,n=t.memoizedProps,r[fo]=t,(s=r.nodeValue!==n)&&null!==(e=ra))switch(e.tag){case 3:Kr(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Kr(r.nodeValue,n,0!=(1&e.mode))}s&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[fo]=t,t.stateNode=r}return Qi(t),null;case 13:if(To(ls),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(aa&&null!==oa&&0!=(1&t.mode)&&0==(128&t.flags))fa(),ma(),t.flags|=98560,s=!1;else if(s=pa(t),null!==r&&null!==r.dehydrated){if(null===e){if(!s)throw Error(a(318));if(!(s=null!==(s=t.memoizedState)?s.dehydrated:null))throw Error(a(317));s[fo]=t}else ma(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Qi(t),s=!1}else null!==sa&&(ic(sa),sa=null),s=!0;if(!s)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((r=null!==r)!==(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&ls.current)?0===jl&&(jl=3):gc())),null!==t.updateQueue&&(t.flags|=4),Qi(t),null);case 4:return as(),Ii(e,t),null===e&&$r(t.stateNode.containerInfo),Qi(t),null;case 10:return Ea(t.type._context),Qi(t),null;case 19:if(To(ls),null===(s=t.memoizedState))return Qi(t),null;if(r=0!=(128&t.flags),null===(l=s.rendering))if(r)Vi(s,!1);else{if(0!==jl||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(l=cs(e))){for(t.flags|=128,Vi(s,!1),null!==(r=l.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(s=n).flags&=14680066,null===(l=s.alternate)?(s.childLanes=0,s.lanes=e,s.child=null,s.subtreeFlags=0,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=l.childLanes,s.lanes=l.lanes,s.child=l.child,s.subtreeFlags=0,s.deletions=null,s.memoizedProps=l.memoizedProps,s.memoizedState=l.memoizedState,s.updateQueue=l.updateQueue,s.type=l.type,e=l.dependencies,s.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return Ro(ls,1&ls.current|2),t.child}e=e.sibling}null!==s.tail&&Xe()>Gl&&(t.flags|=128,r=!0,Vi(s,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=cs(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Vi(s,!0),null===s.tail&&"hidden"===s.tailMode&&!l.alternate&&!aa)return Qi(t),null}else 2*Xe()-s.renderingStartTime>Gl&&1073741824!==n&&(t.flags|=128,r=!0,Vi(s,!1),t.lanes=4194304);s.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=s.last)?n.sibling=l:t.child=l,s.last=l)}return null!==s.tail?(t=s.tail,s.rendering=t,s.tail=t.sibling,s.renderingStartTime=Xe(),t.sibling=null,n=ls.current,Ro(ls,r?1&n|2:1&n),t):(Qi(t),null);case 22:case 23:return pc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Il)&&(Qi(t),6&t.subtreeFlags&&(t.flags|=8192)):Qi(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function Wi(e,t){switch(na(t),t.tag){case 1:return Io(t.type)&&Po(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return as(),To(Oo),To(No),ds(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return is(t),null;case 13:if(To(ls),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ma()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return To(ls),null;case 4:return as(),null;case 10:return Ea(t.type._context),null;case 22:case 23:return pc(),null;default:return null}}Li=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Ii=function(){},Pi=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,rs(es.current);var a,s=null;switch(n){case"input":o=W(e,o),r=W(e,r),s=[];break;case"select":o=D({},o,{value:void 0}),r=D({},r,{value:void 0}),s=[];break;case"textarea":o=re(e,o),r=re(e,r),s=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ye(n,r),n=null,o)if(!r.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var l=o[u];for(a in l)l.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(i.hasOwnProperty(u)?s||(s=[]):(s=s||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=o?o[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(a in l)!l.hasOwnProperty(a)||c&&c.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in c)c.hasOwnProperty(a)&&l[a]!==c[a]&&(n||(n={}),n[a]=c[a])}else n||(s||(s=[]),s.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(s=s||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(s=s||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(i.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&Ur("scroll",e),s||l===c||(s=[])):(s=s||[]).push(u,c))}n&&(s=s||[]).push("style",n);var u=s;(t.updateQueue=u)&&(t.flags|=4)}},ji=function(e,t,n,r){n!==r&&(t.flags|=4)};var Yi=!1,Xi=!1,Ki="function"==typeof WeakSet?WeakSet:Set,Ji=null;function el(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){Sc(e,t,r)}else n.current=null}function tl(e,t,n){try{n()}catch(r){Sc(e,t,r)}}var nl=!1;function rl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&tl(t,n,a)}o=o.next}while(o!==r)}}function ol(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function al(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function sl(e){var t=e.alternate;null!==t&&(e.alternate=null,sl(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fo],delete t[mo],delete t[go],delete t[bo],delete t[yo])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function il(e){return 5===e.tag||3===e.tag||4===e.tag}function ll(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||il(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}function ul(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(ul(e,t,n),e=e.sibling;null!==e;)ul(e,t,n),e=e.sibling}var dl=null,pl=!1;function fl(e,t,n){for(n=n.child;null!==n;)ml(e,t,n),n=n.sibling}function ml(e,t,n){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,n)}catch(i){}switch(n.tag){case 5:Xi||el(n,t);case 6:var r=dl,o=pl;dl=null,fl(e,t,n),pl=o,null!==(dl=r)&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):dl.removeChild(n.stateNode));break;case 18:null!==dl&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?lo(e.parentNode,n):1===e.nodeType&&lo(e,n),$t(e)):lo(dl,n.stateNode));break;case 4:r=dl,o=pl,dl=n.stateNode.containerInfo,pl=!0,fl(e,t,n),dl=r,pl=o;break;case 0:case 11:case 14:case 15:if(!Xi&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){o=r=r.next;do{var a=o,s=a.destroy;a=a.tag,void 0!==s&&(0!=(2&a)||0!=(4&a))&&tl(n,t,s),o=o.next}while(o!==r)}fl(e,t,n);break;case 1:if(!Xi&&(el(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(i){Sc(n,t,i)}fl(e,t,n);break;case 21:fl(e,t,n);break;case 22:1&n.mode?(Xi=(r=Xi)||null!==n.memoizedState,fl(e,t,n),Xi=r):fl(e,t,n);break;default:fl(e,t,n)}}function hl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Ki),t.forEach((function(t){var r=Nc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function gl(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];try{var s=e,i=t,l=i;e:for(;null!==l;){switch(l.tag){case 5:dl=l.stateNode,pl=!1;break e;case 3:case 4:dl=l.stateNode.containerInfo,pl=!0;break e}l=l.return}if(null===dl)throw Error(a(160));ml(s,i,o),dl=null,pl=!1;var c=o.alternate;null!==c&&(c.return=null),o.return=null}catch(u){Sc(o,t,u)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)bl(t,e),t=t.sibling}function bl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(gl(t,e),yl(e),4&r){try{rl(3,e,e.return),ol(3,e)}catch(g){Sc(e,e.return,g)}try{rl(5,e,e.return)}catch(g){Sc(e,e.return,g)}}break;case 1:gl(t,e),yl(e),512&r&&null!==n&&el(n,n.return);break;case 5:if(gl(t,e),yl(e),512&r&&null!==n&&el(n,n.return),32&e.flags){var o=e.stateNode;try{pe(o,"")}catch(g){Sc(e,e.return,g)}}if(4&r&&null!=(o=e.stateNode)){var s=e.memoizedProps,i=null!==n?n.memoizedProps:s,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===l&&"radio"===s.type&&null!=s.name&&X(o,s),ve(l,i);var u=ve(l,s);for(i=0;i<c.length;i+=2){var d=c[i],p=c[i+1];"style"===d?ge(o,p):"dangerouslySetInnerHTML"===d?de(o,p):"children"===d?pe(o,p):v(o,d,p,u)}switch(l){case"input":K(o,s);break;case"textarea":ae(o,s);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!s.multiple;var m=s.value;null!=m?ne(o,!!s.multiple,m,!1):f!==!!s.multiple&&(null!=s.defaultValue?ne(o,!!s.multiple,s.defaultValue,!0):ne(o,!!s.multiple,s.multiple?[]:"",!1))}o[mo]=s}catch(g){Sc(e,e.return,g)}}break;case 6:if(gl(t,e),yl(e),4&r){if(null===e.stateNode)throw Error(a(162));o=e.stateNode,s=e.memoizedProps;try{o.nodeValue=s}catch(g){Sc(e,e.return,g)}}break;case 3:if(gl(t,e),yl(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{$t(t.containerInfo)}catch(g){Sc(e,e.return,g)}break;case 4:default:gl(t,e),yl(e);break;case 13:gl(t,e),yl(e),8192&(o=e.child).flags&&(s=null!==o.memoizedState,o.stateNode.isHidden=s,!s||null!==o.alternate&&null!==o.alternate.memoizedState||($l=Xe())),4&r&&hl(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Xi=(u=Xi)||d,gl(t,e),Xi=u):gl(t,e),yl(e),8192&r){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&0!=(1&e.mode))for(Ji=e,d=e.child;null!==d;){for(p=Ji=d;null!==Ji;){switch(m=(f=Ji).child,f.tag){case 0:case 11:case 14:case 15:rl(4,f,f.return);break;case 1:el(f,f.return);var h=f.stateNode;if("function"==typeof h.componentWillUnmount){r=f,n=f.return;try{t=r,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(g){Sc(r,n,g)}}break;case 5:el(f,f.return);break;case 22:if(null!==f.memoizedState){kl(p);continue}}null!==m?(m.return=f,Ji=m):kl(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{o=p.stateNode,u?"function"==typeof(s=o.style).setProperty?s.setProperty("display","none","important"):s.display="none":(l=p.stateNode,i=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,l.style.display=he("display",i))}catch(g){Sc(e,e.return,g)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(g){Sc(e,e.return,g)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:gl(t,e),yl(e),4&r&&hl(e);case 21:}}function yl(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(il(n)){var r=n;break e}n=n.return}throw Error(a(160))}switch(r.tag){case 5:var o=r.stateNode;32&r.flags&&(pe(o,""),r.flags&=-33),ul(e,ll(e),o);break;case 3:case 4:var s=r.stateNode.containerInfo;cl(e,ll(e),s);break;default:throw Error(a(161))}}catch(i){Sc(e,e.return,i)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vl(e,t,n){Ji=e,wl(e,t,n)}function wl(e,t,n){for(var r=0!=(1&e.mode);null!==Ji;){var o=Ji,a=o.child;if(22===o.tag&&r){var s=null!==o.memoizedState||Yi;if(!s){var i=o.alternate,l=null!==i&&null!==i.memoizedState||Xi;i=Yi;var c=Xi;if(Yi=s,(Xi=l)&&!c)for(Ji=o;null!==Ji;)l=(s=Ji).child,22===s.tag&&null!==s.memoizedState?El(o):null!==l?(l.return=s,Ji=l):El(o);for(;null!==a;)Ji=a,wl(a,t,n),a=a.sibling;Ji=o,Yi=i,Xi=c}_l(e)}else 0!=(8772&o.subtreeFlags)&&null!==a?(a.return=o,Ji=a):_l(e)}}function _l(e){for(;null!==Ji;){var t=Ji;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Xi||ol(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Xi)if(null===n)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:ba(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var s=t.updateQueue;null!==s&&Ua(t,s,r);break;case 3:var i=t.updateQueue;if(null!==i){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}Ua(t,i,n)}break;case 5:var l=t.stateNode;if(null===n&&4&t.flags){n=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&$t(p)}}}break;default:throw Error(a(163))}Xi||512&t.flags&&al(t)}catch(f){Sc(t,t.return,f)}}if(t===e){Ji=null;break}if(null!==(n=t.sibling)){n.return=t.return,Ji=n;break}Ji=t.return}}function kl(e){for(;null!==Ji;){var t=Ji;if(t===e){Ji=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Ji=n;break}Ji=t.return}}function El(e){for(;null!==Ji;){var t=Ji;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{ol(4,t)}catch(l){Sc(t,n,l)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var o=t.return;try{r.componentDidMount()}catch(l){Sc(t,o,l)}}var a=t.return;try{al(t)}catch(l){Sc(t,a,l)}break;case 5:var s=t.return;try{al(t)}catch(l){Sc(t,s,l)}}}catch(l){Sc(t,t.return,l)}if(t===e){Ji=null;break}var i=t.sibling;if(null!==i){i.return=t.return,Ji=i;break}Ji=t.return}}var xl,Sl=Math.ceil,Tl=w.ReactCurrentDispatcher,Rl=w.ReactCurrentOwner,Cl=w.ReactCurrentBatchConfig,Nl=0,Ol=null,Al=null,Ll=0,Il=0,Pl=So(0),jl=0,Ml=null,Dl=0,Fl=0,Ul=0,Bl=null,zl=null,$l=0,Gl=1/0,Hl=null,ql=!1,Vl=null,Ql=null,Zl=!1,Wl=null,Yl=0,Xl=0,Kl=null,Jl=-1,ec=0;function tc(){return 0!=(6&Nl)?Xe():-1!==Jl?Jl:Jl=Xe()}function nc(e){return 0==(1&e.mode)?1:0!=(2&Nl)&&0!==Ll?Ll&-Ll:null!==ga.transition?(0===ec&&(ec=ht()),ec):0!==(e=vt)?e:e=void 0===(e=window.event)?16:Yt(e.type)}function rc(e,t,n,r){if(50<Xl)throw Xl=0,Kl=null,Error(a(185));bt(e,n,r),0!=(2&Nl)&&e===Ol||(e===Ol&&(0==(2&Nl)&&(Fl|=n),4===jl&&lc(e,Ll)),oc(e,r),1===n&&0===Nl&&0==(1&t.mode)&&(Gl=Xe()+500,Bo&&Go()))}function oc(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var s=31-st(a),i=1<<s,l=o[s];-1===l?0!=(i&n)&&0==(i&r)||(o[s]=ft(i,t)):l<=t&&(e.expiredLanes|=i),a&=~i}}(e,t);var r=pt(e,e===Ol?Ll:0);if(0===r)null!==n&&Ze(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&Ze(n),1===t)0===e.tag?function(e){Bo=!0,$o(e)}(cc.bind(null,e)):$o(cc.bind(null,e)),so((function(){0==(6&Nl)&&Go()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=Oc(n,ac.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function ac(e,t){if(Jl=-1,ec=0,0!=(6&Nl))throw Error(a(327));var n=e.callbackNode;if(Ec()&&e.callbackNode!==n)return null;var r=pt(e,e===Ol?Ll:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=bc(e,r);else{t=r;var o=Nl;Nl|=2;var s=hc();for(Ol===e&&Ll===t||(Hl=null,Gl=Xe()+500,fc(e,t));;)try{vc();break}catch(l){mc(e,l)}ka(),Tl.current=s,Nl=o,null!==Al?t=0:(Ol=null,Ll=0,t=jl)}if(0!==t){if(2===t&&(0!==(o=mt(e))&&(r=o,t=sc(e,o))),1===t)throw n=Ml,fc(e,0),lc(e,r),oc(e,Xe()),n;if(6===t)lc(e,r);else{if(o=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!ir(a(),o))return!1}catch(i){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=bc(e,r))&&(0!==(s=mt(e))&&(r=s,t=sc(e,s))),1===t))throw n=Ml,fc(e,0),lc(e,r),oc(e,Xe()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(a(345));case 2:case 5:kc(e,zl,Hl);break;case 3:if(lc(e,r),(130023424&r)===r&&10<(t=$l+500-Xe())){if(0!==pt(e,0))break;if(((o=e.suspendedLanes)&r)!==r){tc(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=ro(kc.bind(null,e,zl,Hl),t);break}kc(e,zl,Hl);break;case 4:if(lc(e,r),(4194240&r)===r)break;for(t=e.eventTimes,o=-1;0<r;){var i=31-st(r);s=1<<i,(i=t[i])>o&&(o=i),r&=~s}if(r=o,10<(r=(120>(r=Xe()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Sl(r/1960))-r)){e.timeoutHandle=ro(kc.bind(null,e,zl,Hl),r);break}kc(e,zl,Hl);break;default:throw Error(a(329))}}}return oc(e,Xe()),e.callbackNode===n?ac.bind(null,e):null}function sc(e,t){var n=Bl;return e.current.memoizedState.isDehydrated&&(fc(e,t).flags|=256),2!==(e=bc(e,t))&&(t=zl,zl=n,null!==t&&ic(t)),e}function ic(e){null===zl?zl=e:zl.push.apply(zl,e)}function lc(e,t){for(t&=~Ul,t&=~Fl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-st(t),r=1<<n;e[n]=-1,t&=~r}}function cc(e){if(0!=(6&Nl))throw Error(a(327));Ec();var t=pt(e,0);if(0==(1&t))return oc(e,Xe()),null;var n=bc(e,t);if(0!==e.tag&&2===n){var r=mt(e);0!==r&&(t=r,n=sc(e,r))}if(1===n)throw n=Ml,fc(e,0),lc(e,t),oc(e,Xe()),n;if(6===n)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,kc(e,zl,Hl),oc(e,Xe()),null}function uc(e,t){var n=Nl;Nl|=1;try{return e(t)}finally{0===(Nl=n)&&(Gl=Xe()+500,Bo&&Go())}}function dc(e){null!==Wl&&0===Wl.tag&&0==(6&Nl)&&Ec();var t=Nl;Nl|=1;var n=Cl.transition,r=vt;try{if(Cl.transition=null,vt=1,e)return e()}finally{vt=r,Cl.transition=n,0==(6&(Nl=t))&&Go()}}function pc(){Il=Pl.current,To(Pl)}function fc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,oo(n)),null!==Al)for(n=Al.return;null!==n;){var r=n;switch(na(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Po();break;case 3:as(),To(Oo),To(No),ds();break;case 5:is(r);break;case 4:as();break;case 13:case 19:To(ls);break;case 10:Ea(r.type._context);break;case 22:case 23:pc()}n=n.return}if(Ol=e,Al=e=Pc(e.current,null),Ll=Il=t,jl=0,Ml=null,Ul=Fl=Dl=0,zl=Bl=null,null!==Ra){for(t=0;t<Ra.length;t++)if(null!==(r=(n=Ra[t]).interleaved)){n.interleaved=null;var o=r.next,a=n.pending;if(null!==a){var s=a.next;a.next=o,r.next=s}n.pending=r}Ra=null}return e}function mc(e,t){for(;;){var n=Al;try{if(ka(),ps.current=si,ys){for(var r=hs.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ys=!1}if(ms=0,bs=gs=hs=null,vs=!1,ws=0,Rl.current=null,null===n||null===n.return){jl=1,Ml=t,Al=null;break}e:{var s=e,i=n.return,l=n,c=t;if(t=Ll,l.flags|=32768,null!==c&&"object"==typeof c&&"function"==typeof c.then){var u=c,d=l,p=d.tag;if(0==(1&d.mode)&&(0===p||11===p||15===p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var m=bi(i);if(null!==m){m.flags&=-257,yi(m,i,l,0,t),1&m.mode&&gi(s,u,t),c=u;var h=(t=m).updateQueue;if(null===h){var g=new Set;g.add(c),t.updateQueue=g}else h.add(c);break e}if(0==(1&t)){gi(s,u,t),gc();break e}c=Error(a(426))}else if(aa&&1&l.mode){var b=bi(i);if(null!==b){0==(65536&b.flags)&&(b.flags|=256),yi(b,i,l,0,t),ha(ui(c,l));break e}}s=c=ui(c,l),4!==jl&&(jl=2),null===Bl?Bl=[s]:Bl.push(s),s=i;do{switch(s.tag){case 3:s.flags|=65536,t&=-t,s.lanes|=t,Da(s,mi(0,c,t));break e;case 1:l=c;var y=s.type,v=s.stateNode;if(0==(128&s.flags)&&("function"==typeof y.getDerivedStateFromError||null!==v&&"function"==typeof v.componentDidCatch&&(null===Ql||!Ql.has(v)))){s.flags|=65536,t&=-t,s.lanes|=t,Da(s,hi(s,l,t));break e}}s=s.return}while(null!==s)}_c(n)}catch(w){t=w,Al===n&&null!==n&&(Al=n=n.return);continue}break}}function hc(){var e=Tl.current;return Tl.current=si,null===e?si:e}function gc(){0!==jl&&3!==jl&&2!==jl||(jl=4),null===Ol||0==(268435455&Dl)&&0==(268435455&Fl)||lc(Ol,Ll)}function bc(e,t){var n=Nl;Nl|=2;var r=hc();for(Ol===e&&Ll===t||(Hl=null,fc(e,t));;)try{yc();break}catch(o){mc(e,o)}if(ka(),Nl=n,Tl.current=r,null!==Al)throw Error(a(261));return Ol=null,Ll=0,jl}function yc(){for(;null!==Al;)wc(Al)}function vc(){for(;null!==Al&&!We();)wc(Al)}function wc(e){var t=xl(e.alternate,e,Il);e.memoizedProps=e.pendingProps,null===t?_c(e):Al=t,Rl.current=null}function _c(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=Zi(n,t,Il)))return void(Al=n)}else{if(null!==(n=Wi(n,t)))return n.flags&=32767,void(Al=n);if(null===e)return jl=6,void(Al=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Al=t);Al=t=e}while(null!==t);0===jl&&(jl=5)}function kc(e,t,n){var r=vt,o=Cl.transition;try{Cl.transition=null,vt=1,function(e,t,n,r){do{Ec()}while(null!==Wl);if(0!=(6&Nl))throw Error(a(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var s=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-st(n),a=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~a}}(e,s),e===Ol&&(Al=Ol=null,Ll=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||Zl||(Zl=!0,Oc(tt,(function(){return Ec(),null}))),s=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||s){s=Cl.transition,Cl.transition=null;var i=vt;vt=1;var l=Nl;Nl|=4,Rl.current=null,function(e,t){if(eo=Ht,fr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,s=r.focusNode;r=r.focusOffset;try{n.nodeType,s.nodeType}catch(_){n=null;break e}var i=0,l=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var m;p!==n||0!==o&&3!==p.nodeType||(l=i+o),p!==s||0!==r&&3!==p.nodeType||(c=i+r),3===p.nodeType&&(i+=p.nodeValue.length),null!==(m=p.firstChild);)f=p,p=m;for(;;){if(p===e)break t;if(f===n&&++u===o&&(l=i),f===s&&++d===r&&(c=i),null!==(m=p.nextSibling))break;f=(p=f).parentNode}p=m}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(to={focusedElem:e,selectionRange:n},Ht=!1,Ji=t;null!==Ji;)if(e=(t=Ji).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Ji=e;else for(;null!==Ji;){t=Ji;try{var h=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==h){var g=h.memoizedProps,b=h.memoizedState,y=t.stateNode,v=y.getSnapshotBeforeUpdate(t.elementType===t.type?g:ba(t.type,g),b);y.__reactInternalSnapshotBeforeUpdate=v}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(a(163))}}catch(_){Sc(t,t.return,_)}if(null!==(e=t.sibling)){e.return=t.return,Ji=e;break}Ji=t.return}h=nl,nl=!1}(e,n),bl(n,e),mr(to),Ht=!!eo,to=eo=null,e.current=n,vl(n,e,o),Ye(),Nl=l,vt=i,Cl.transition=s}else e.current=n;if(Zl&&(Zl=!1,Wl=e,Yl=o),s=e.pendingLanes,0===s&&(Ql=null),function(e){if(at&&"function"==typeof at.onCommitFiberRoot)try{at.onCommitFiberRoot(ot,e,void 0,128==(128&e.current.flags))}catch(t){}}(n.stateNode),oc(e,Xe()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)o=t[n],r(o.value,{componentStack:o.stack,digest:o.digest});if(ql)throw ql=!1,e=Vl,Vl=null,e;0!=(1&Yl)&&0!==e.tag&&Ec(),s=e.pendingLanes,0!=(1&s)?e===Kl?Xl++:(Xl=0,Kl=e):Xl=0,Go()}(e,t,n,r)}finally{Cl.transition=o,vt=r}return null}function Ec(){if(null!==Wl){var e=wt(Yl),t=Cl.transition,n=vt;try{if(Cl.transition=null,vt=16>e?16:e,null===Wl)var r=!1;else{if(e=Wl,Wl=null,Yl=0,0!=(6&Nl))throw Error(a(331));var o=Nl;for(Nl|=4,Ji=e.current;null!==Ji;){var s=Ji,i=s.child;if(0!=(16&Ji.flags)){var l=s.deletions;if(null!==l){for(var c=0;c<l.length;c++){var u=l[c];for(Ji=u;null!==Ji;){var d=Ji;switch(d.tag){case 0:case 11:case 15:rl(8,d,s)}var p=d.child;if(null!==p)p.return=d,Ji=p;else for(;null!==Ji;){var f=(d=Ji).sibling,m=d.return;if(sl(d),d===u){Ji=null;break}if(null!==f){f.return=m,Ji=f;break}Ji=m}}}var h=s.alternate;if(null!==h){var g=h.child;if(null!==g){h.child=null;do{var b=g.sibling;g.sibling=null,g=b}while(null!==g)}}Ji=s}}if(0!=(2064&s.subtreeFlags)&&null!==i)i.return=s,Ji=i;else e:for(;null!==Ji;){if(0!=(2048&(s=Ji).flags))switch(s.tag){case 0:case 11:case 15:rl(9,s,s.return)}var y=s.sibling;if(null!==y){y.return=s.return,Ji=y;break e}Ji=s.return}}var v=e.current;for(Ji=v;null!==Ji;){var w=(i=Ji).child;if(0!=(2064&i.subtreeFlags)&&null!==w)w.return=i,Ji=w;else e:for(i=v;null!==Ji;){if(0!=(2048&(l=Ji).flags))try{switch(l.tag){case 0:case 11:case 15:ol(9,l)}}catch(k){Sc(l,l.return,k)}if(l===i){Ji=null;break e}var _=l.sibling;if(null!==_){_.return=l.return,Ji=_;break e}Ji=l.return}}if(Nl=o,Go(),at&&"function"==typeof at.onPostCommitFiberRoot)try{at.onPostCommitFiberRoot(ot,e)}catch(k){}r=!0}return r}finally{vt=n,Cl.transition=t}}return!1}function xc(e,t,n){e=ja(e,t=mi(0,t=ui(n,t),1),1),t=tc(),null!==e&&(bt(e,1,t),oc(e,t))}function Sc(e,t,n){if(3===e.tag)xc(e,e,n);else for(;null!==t;){if(3===t.tag){xc(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Ql||!Ql.has(r))){t=ja(t,e=hi(t,e=ui(n,e),1),1),e=tc(),null!==t&&(bt(t,1,e),oc(t,e));break}}t=t.return}}function Tc(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=tc(),e.pingedLanes|=e.suspendedLanes&n,Ol===e&&(Ll&n)===n&&(4===jl||3===jl&&(130023424&Ll)===Ll&&500>Xe()-$l?fc(e,0):Ul|=n),oc(e,t)}function Rc(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=tc();null!==(e=Oa(e,t))&&(bt(e,t,n),oc(e,n))}function Cc(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Rc(e,n)}function Nc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(a(314))}null!==r&&r.delete(t),Rc(e,n)}function Oc(e,t){return Qe(e,t)}function Ac(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Lc(e,t,n,r){return new Ac(e,t,n,r)}function Ic(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Pc(e,t){var n=e.alternate;return null===n?((n=Lc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function jc(e,t,n,r,o,s){var i=2;if(r=e,"function"==typeof e)Ic(e)&&(i=1);else if("string"==typeof e)i=5;else e:switch(e){case E:return Mc(n.children,o,s,t);case x:i=8,o|=8;break;case S:return(e=Lc(12,n,t,2|o)).elementType=S,e.lanes=s,e;case N:return(e=Lc(13,n,t,o)).elementType=N,e.lanes=s,e;case O:return(e=Lc(19,n,t,o)).elementType=O,e.lanes=s,e;case I:return Dc(n,o,s,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case T:i=10;break e;case R:i=9;break e;case C:i=11;break e;case A:i=14;break e;case L:i=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Lc(i,n,t,o)).elementType=e,t.type=r,t.lanes=s,t}function Mc(e,t,n,r){return(e=Lc(7,e,r,t)).lanes=n,e}function Dc(e,t,n,r){return(e=Lc(22,e,r,t)).elementType=I,e.lanes=n,e.stateNode={isHidden:!1},e}function Fc(e,t,n){return(e=Lc(6,e,null,t)).lanes=n,e}function Uc(e,t,n){return(t=Lc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Bc(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=gt(0),this.expirationTimes=gt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=gt(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function zc(e,t,n,r,o,a,s,i,l){return e=new Bc(e,t,n,i,l),1===t?(t=1,!0===a&&(t|=8)):t=0,a=Lc(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},La(a),e}function $c(e){if(!e)return Co;e:{if($e(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Io(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var n=e.type;if(Io(n))return Mo(e,n,t)}return t}function Gc(e,t,n,r,o,a,s,i,l){return(e=zc(n,r,!0,e,0,a,0,i,l)).context=$c(null),n=e.current,(a=Pa(r=tc(),o=nc(n))).callback=null!=t?t:null,ja(n,a,o),e.current.lanes=o,bt(e,o,r),oc(e,r),e}function Hc(e,t,n,r){var o=t.current,a=tc(),s=nc(o);return n=$c(n),null===t.context?t.context=n:t.pendingContext=n,(t=Pa(a,s)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=ja(o,t,s))&&(rc(e,o,s,a),Ma(e,o,s)),s}function qc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Vc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Qc(e,t){Vc(e,t),(e=e.alternate)&&Vc(e,t)}xl=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||Oo.current)wi=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return wi=!1,function(e,t,n){switch(t.tag){case 3:Oi(t),ma();break;case 5:ss(t);break;case 1:Io(t.type)&&Do(t);break;case 4:os(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;Ro(ya,r._currentValue),r._currentValue=o;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(Ro(ls,1&ls.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Fi(e,t,n):(Ro(ls,1&ls.current),null!==(e=qi(e,t,n))?e.sibling:null);Ro(ls,1&ls.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return Gi(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),Ro(ls,ls.current),r)break;return null;case 22:case 23:return t.lanes=0,Si(e,t,n)}return qi(e,t,n)}(e,t,n);wi=0!=(131072&e.flags)}else wi=!1,aa&&0!=(1048576&t.flags)&&ea(t,Qo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Hi(e,t),e=t.pendingProps;var o=Lo(t,No.current);Sa(t,n),o=xs(null,t,r,e,o,n);var s=Ss();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Io(r)?(s=!0,Do(t)):s=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,La(t),o.updater=$a,t.stateNode=o,o._reactInternals=t,Va(t,r,e,n),t=Ni(null,t,r,!0,s,n)):(t.tag=0,aa&&s&&ta(t),_i(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Hi(e,t),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return Ic(e)?1:0;if(null!=e){if((e=e.$$typeof)===C)return 11;if(e===A)return 14}return 2}(r),e=ba(r,e),o){case 0:t=Ri(null,t,r,e,n);break e;case 1:t=Ci(null,t,r,e,n);break e;case 11:t=ki(null,t,r,e,n);break e;case 14:t=Ei(null,t,r,ba(r.type,e),n);break e}throw Error(a(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,Ri(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 1:return r=t.type,o=t.pendingProps,Ci(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 3:e:{if(Oi(t),null===e)throw Error(a(387));r=t.pendingProps,o=(s=t.memoizedState).element,Ia(e,t),Fa(t,r,null,n);var i=t.memoizedState;if(r=i.element,s.isDehydrated){if(s={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=s,t.memoizedState=s,256&t.flags){t=Ai(e,t,r,n,o=ui(Error(a(423)),t));break e}if(r!==o){t=Ai(e,t,r,n,o=ui(Error(a(424)),t));break e}for(oa=co(t.stateNode.containerInfo.firstChild),ra=t,aa=!0,sa=null,n=Ka(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ma(),r===o){t=qi(e,t,n);break e}_i(e,t,r,n)}t=t.child}return t;case 5:return ss(t),null===e&&ua(t),r=t.type,o=t.pendingProps,s=null!==e?e.memoizedProps:null,i=o.children,no(r,o)?i=null:null!==s&&no(r,s)&&(t.flags|=32),Ti(e,t),_i(e,t,i,n),t.child;case 6:return null===e&&ua(t),null;case 13:return Fi(e,t,n);case 4:return os(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Xa(t,null,r,n):_i(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,ki(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 7:return _i(e,t,t.pendingProps,n),t.child;case 8:case 12:return _i(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,s=t.memoizedProps,i=o.value,Ro(ya,r._currentValue),r._currentValue=i,null!==s)if(ir(s.value,i)){if(s.children===o.children&&!Oo.current){t=qi(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var l=s.dependencies;if(null!==l){i=s.child;for(var c=l.firstContext;null!==c;){if(c.context===r){if(1===s.tag){(c=Pa(-1,n&-n)).tag=2;var u=s.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),xa(s.return,n,t),l.lanes|=n;break}c=c.next}}else if(10===s.tag)i=s.type===t.type?null:s.child;else if(18===s.tag){if(null===(i=s.return))throw Error(a(341));i.lanes|=n,null!==(l=i.alternate)&&(l.lanes|=n),xa(i,n,t),i=s.sibling}else i=s.child;if(null!==i)i.return=s;else for(i=s;null!==i;){if(i===t){i=null;break}if(null!==(s=i.sibling)){s.return=i.return,i=s;break}i=i.return}s=i}_i(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,Sa(t,n),r=r(o=Ta(o)),t.flags|=1,_i(e,t,r,n),t.child;case 14:return o=ba(r=t.type,t.pendingProps),Ei(e,t,r,o=ba(r.type,o),n);case 15:return xi(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ba(r,o),Hi(e,t),t.tag=1,Io(r)?(e=!0,Do(t)):e=!1,Sa(t,n),Ha(t,r,o),Va(t,r,o,n),Ni(null,t,r,!0,e,n);case 19:return Gi(e,t,n);case 22:return Si(e,t,n)}throw Error(a(156,t.tag))};var Zc="function"==typeof reportError?reportError:function(e){console.error(e)};function Wc(e){this._internalRoot=e}function Yc(e){this._internalRoot=e}function Xc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Kc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Jc(){}function eu(e,t,n,r,o){var a=n._reactRootContainer;if(a){var s=a;if("function"==typeof o){var i=o;o=function(){var e=qc(s);i.call(e)}}Hc(t,s,e,o)}else s=function(e,t,n,r,o){if(o){if("function"==typeof r){var a=r;r=function(){var e=qc(s);a.call(e)}}var s=Gc(t,r,e,0,null,!1,0,"",Jc);return e._reactRootContainer=s,e[ho]=s.current,$r(8===e.nodeType?e.parentNode:e),dc(),s}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof r){var i=r;r=function(){var e=qc(l);i.call(e)}}var l=zc(e,0,!1,null,0,!1,0,"",Jc);return e._reactRootContainer=l,e[ho]=l.current,$r(8===e.nodeType?e.parentNode:e),dc((function(){Hc(t,l,n,r)})),l}(n,t,e,o,r);return qc(s)}Yc.prototype.render=Wc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(a(409));Hc(e,t,null,null)},Yc.prototype.unmount=Wc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;dc((function(){Hc(null,e,null,null)})),t[ho]=null}},Yc.prototype.unstable_scheduleHydration=function(e){if(e){var t=xt();e={blockedOn:null,target:e,priority:t};for(var n=0;n<It.length&&0!==t&&t<It[n].priority;n++);It.splice(n,0,e),0===n&&Dt(e)}},_t=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(yt(t,1|n),oc(t,Xe()),0==(6&Nl)&&(Gl=Xe()+500,Go()))}break;case 13:dc((function(){var t=Oa(e,1);if(null!==t){var n=tc();rc(t,e,1,n)}})),Qc(e,1)}},kt=function(e){if(13===e.tag){var t=Oa(e,134217728);if(null!==t)rc(t,e,134217728,tc());Qc(e,134217728)}},Et=function(e){if(13===e.tag){var t=nc(e),n=Oa(e,t);if(null!==n)rc(n,e,t,tc());Qc(e,t)}},xt=function(){return vt},St=function(e,t){var n=vt;try{return vt=e,t()}finally{vt=n}},ke=function(e,t,n){switch(t){case"input":if(K(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=ko(r);if(!o)throw Error(a(90));Q(r),K(r,o)}}}break;case"textarea":ae(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Ce=uc,Ne=dc;var tu={usingClientEntryPoint:!1,Events:[wo,_o,ko,Te,Re,uc]},nu={findFiberByHostInstance:vo,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},ru={bundleType:nu.bundleType,version:nu.version,rendererPackageName:nu.rendererPackageName,rendererConfig:nu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=qe(e))?null:e.stateNode},findFiberByHostInstance:nu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ou=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ou.isDisabled&&ou.supportsFiber)try{ot=ou.inject(ru),at=ou}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tu,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Xc(t))throw Error(a(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Xc(e))throw Error(a(299));var n=!1,r="",o=Zc;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=zc(e,1,!1,null,0,n,0,r,o),e[ho]=t.current,$r(8===e.nodeType?e.parentNode:e),new Wc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw e=Object.keys(e).join(","),Error(a(268,e))}return e=null===(e=qe(t))?null:e.stateNode},t.flushSync=function(e){return dc(e)},t.hydrate=function(e,t,n){if(!Kc(t))throw Error(a(200));return eu(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Xc(e))throw Error(a(405));var r=null!=n&&n.hydratedSources||null,o=!1,s="",i=Zc;if(null!=n&&(!0===n.unstable_strictMode&&(o=!0),void 0!==n.identifierPrefix&&(s=n.identifierPrefix),void 0!==n.onRecoverableError&&(i=n.onRecoverableError)),t=Gc(t,null,e,1,null!=n?n:null,o,0,s,i),e[ho]=t.current,$r(e),r)for(e=0;e<r.length;e++)o=(o=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Yc(t)},t.render=function(e,t,n){if(!Kc(t))throw Error(a(200));return eu(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Kc(e))throw Error(a(40));return!!e._reactRootContainer&&(dc((function(){eu(null,null,e,!1,(function(){e._reactRootContainer=null,e[ho]=null}))})),!0)},t.unstable_batchedUpdates=uc,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Kc(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return eu(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},745:(e,t,n)=>{"use strict";var r=n(3935);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,s){if(e===s)return!0;if(e&&s&&"object"==typeof e&&"object"==typeof s){if(e.constructor!==s.constructor)return!1;var i,l,c,u;if(Array.isArray(e)){if((i=e.length)!=s.length)return!1;for(l=i;0!=l--;)if(!a(e[l],s[l]))return!1;return!0}if(n&&e instanceof Map&&s instanceof Map){if(e.size!==s.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!s.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!a(l.value[1],s.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&s instanceof Set){if(e.size!==s.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!s.has(l.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(s)){if((i=e.length)!=s.length)return!1;for(l=i;0!=l--;)if(e[l]!==s[l])return!1;return!0}if(e.constructor===RegExp)return e.source===s.source&&e.flags===s.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof s.valueOf)return e.valueOf()===s.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof s.toString)return e.toString()===s.toString();if((i=(c=Object.keys(e)).length)!==Object.keys(s).length)return!1;for(l=i;0!=l--;)if(!Object.prototype.hasOwnProperty.call(s,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=i;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!a(e[c[l]],s[c[l]]))return!1;return!0}return e!=e&&s!=s}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>q,ql:()=>J});var r=n(7294),o=n(5697),a=n.n(o),s=n(9590),i=n.n(s),l=n(1143),c=n.n(l),u=n(6774),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),_={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},k=Object.keys(_).reduce((function(e,t){return e[_[t]]=t,e}),{}),E=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},x=function(e){var t=E(e,g.TITLE),n=E(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=E(e,"defaultTitle");return t||r||void 0},S=function(e){return E(e,"onChangeClientState")||function(){}},T=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},R=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},C=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),s=0;s<a.length;s+=1){var i=a[s],l=i.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(i)||"innerHTML"!==i&&"cssText"!==i&&"itemprop"!==i||(n=i)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][c]&&(o[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),s=0;s<a.length;s+=1){var i=a[s],l=p({},r[i],o[i]);r[i]=l}return e}),[]).reverse()},N=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},O=function(e){return Array.isArray(e)?e.join(""):e},A=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},L=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},I=[g.NOSCRIPT,g.SCRIPT,g.STYLE],P=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},j=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},M=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[_[n]||n]=e[n],t}),t)},D=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=_[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=M(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=j(n),a=O(t);return o?"<"+e+' data-rh="true" '+o+">"+P(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+P(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return M(t)},toString:function(){return j(t)}};default:return{toComponent:function(){return D(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+P(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",s=-1===I.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(s?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},U=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,s=e.styleTags,i=e.title,l=void 0===i?"":i,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=A(e.metaTags,v),a=A(t,b),s=A(n,y);return{priorityMethods:{toComponent:function(){return[].concat(D(g.META,o.priority),D(g.LINK,a.priority),D(g.SCRIPT,s.priority))},toString:function(){return F(g.META,o.priority,r)+" "+F(g.LINK,a.priority,r)+" "+F(g.SCRIPT,s.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:s.default}}(e);f=m.priorityMethods,u=m.linkTags,d=m.metaTags,p=m.scriptTags}return{priority:f,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",o,r),link:F(g.LINK,u,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,a,r),script:F(g.SCRIPT,p,r),style:F(g.STYLE,s,r),title:F(g.TITLE,{title:l,titleAttributes:c},r)}},B=[],z=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=U({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),G=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),H="undefined"!=typeof document,q=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new z(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);q.canUseDOM=H,q.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},q.defaultProps={context:{}},q.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),s=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):s.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),s.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:s}},Q=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),s=Object.keys(t),i=0;i<s.length;i+=1){var l=s[i],c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),-1===o.indexOf(l)&&o.push(l);var u=a.indexOf(l);-1!==u&&a.splice(u,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==s.join(",")&&n.setAttribute("data-rh",s.join(","))}},Z=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,s=e.noscriptTags,i=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;Q(g.BODY,e.bodyAttributes),Q(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=O(e)),Q(g.TITLE,t)}(u,d);var p={baseTag:V(g.BASE,n),linkTags:V(g.LINK,o),metaTags:V(g.META,a),noscriptTags:V(g.NOSCRIPT,s),scriptTags:V(g.SCRIPT,l),styleTags:V(g.STYLE,c)},f={},m={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(m[e]=p[e].oldTags)})),t&&t(),i(e,f,m)},W=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:R(["href"],e),bodyAttributes:T("bodyAttributes",e),defer:E(e,"defer"),encode:E(e,"encodeSpecialCharacters"),htmlAttributes:T("htmlAttributes",e),linkTags:C(g.LINK,["rel","href"],e),metaTags:C(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:C(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:S(e),scriptTags:C(g.SCRIPT,["src","innerHTML"],e),styleTags:C(g.STYLE,["cssText"],e),title:x(e),titleAttributes:T("titleAttributes",e),prioritizeSeoTags:N(e,"prioritizeSeoTags")});q.canUseDOM?(t=a,W&&cancelAnimationFrame(W),t.defer?W=requestAnimationFrame((function(){Z(t,(function(){W=null}))})):(Z(t),W=null)):U&&(o=U(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:G.isRequired},Y.displayName="HelmetDispatcher";var X=["children"],K=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!i()(L(this.props,"helmetData"),L(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,s=e.nestedChildren;switch(r.type){case g.TITLE:return p({},o,((t={})[r.type]=s,t.titleAttributes=p({},a),t));case g.BODY:return p({},o,{bodyAttributes:p({},a)});case g.HTML:return p({},o,{htmlAttributes:p({},a)});default:return p({},o,((n={})[r.type]=p({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,s=h(r,X),i=Object.keys(s).reduce((function(e,t){return e[k[t]||t]=s[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,a),l){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:i,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:i,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,K),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof z||(a=new z(a.context,a.instances)),a?r.createElement(Y,p({},o,{context:a.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(Y,p({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,s=n?Symbol.for("react.strict_mode"):60108,i=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function _(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case i:case s:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case g:case h:case l:return e;default:return t}}case o:return t}}}function k(e){return _(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=i,t.StrictMode=s,t.Suspense=f,t.isAsyncMode=function(e){return k(e)||_(e)===u},t.isConcurrentMode=k,t.isContextConsumer=function(e){return _(e)===c},t.isContextProvider=function(e){return _(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return _(e)===p},t.isFragment=function(e){return _(e)===a},t.isLazy=function(e){return _(e)===g},t.isMemo=function(e){return _(e)===h},t.isPortal=function(e){return _(e)===o},t.isProfiler=function(e){return _(e)===i},t.isStrictMode=function(e){return _(e)===s},t.isSuspense=function(e){return _(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===i||e===s||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===v||e.$$typeof===w||e.$$typeof===b)},t.typeOf=_},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(){return s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},s.apply(this,arguments)}var i=n(7294),l=n(5697),c=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return i.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=s({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return c.push(g),"function"==typeof m.webpack&&u.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),p=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var s=n.prototype;return s.UNSAFE_componentWillMount=function(){this._loadModule()},s.componentDidMount=function(){this._mounted=!0},s._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},s.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},s._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},s.render=function(){return this.state.loading||this.state.error?i.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(i.Component),a(d,"contextTypes",{loadable:l.shape({report:l.func.isRequired})}),p}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(p,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return i.Children.only(this.props.children)},t}(i.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}a(g,"propTypes",{report:l.func.isRequired}),a(g,"childContextTypes",{loadable:l.shape({report:l.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){b(c).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){b(u).then(e,e)}))},e.exports=h},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>i,f:()=>s});var r=n(6550),o=n(7462),a=n(7294);function s(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&s(e.routes,t,n)),o})),n}function i(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>v,VK:()=>u,rU:()=>g});var r=n(6550),o=n(5068),a=n(7294),s=n(2358),i=n(7462),l=n(3366),c=n(8776),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,s.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,s.ob)(e,null,null,t):e},f=function(e){return e},m=a.forwardRef;void 0===m&&(m=f);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,s=(0,l.Z)(e,["innerRef","navigate","onClick"]),c=s.target,u=(0,i.Z)({},s,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=f!==m&&t||n,a.createElement("a",u)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,u=e.replace,g=e.to,b=e.innerRef,y=(0,l.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=e.history,r=p(d(g,e.location),e.location),l=r?n.createHref(r):"",h=(0,i.Z)({},y,{href:l,navigate:function(){var t=d(g,e.location),r=(0,s.Ep)(e.location)===(0,s.Ep)(p(t));(u||r?n.replace:n.push)(t)}});return f!==m?h.ref=t||b:h.innerRef=b,a.createElement(o,h)}))})),b=function(e){return e},y=a.forwardRef;void 0===y&&(y=b);var v=y((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,s=e.activeClassName,u=void 0===s?"active":s,f=e.activeStyle,m=e.className,h=e.exact,v=e.isActive,w=e.location,_=e.sensitive,k=e.strict,E=e.style,x=e.to,S=e.innerRef,T=(0,l.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=w||e.location,s=p(d(x,n),n),l=s.pathname,R=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),C=R?(0,r.LX)(n.pathname,{path:R,exact:h,sensitive:_,strict:k}):null,N=!!(v?v(C,n):C),O="function"==typeof m?m(N):m,A="function"==typeof E?E(N):E;N&&(O=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(O,u),A=(0,i.Z)({},A,f));var L=(0,i.Z)({"aria-current":N&&o||null,className:O,style:A,to:s},T);return b!==y?L.ref=t||S:L.innerRef=S,a.createElement(g,L)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>O,F0:()=>v,LX:()=>N,TH:()=>U,k6:()=>F,l_:()=>S,rs:()=>M,s6:()=>y});var r=n(5068),o=n(7294),a=n(5697),s=n.n(a),i=n(2358),l=n(8776),c=n(7462),u=n(4779),d=n.n(u),p=(n(9864),n(3366)),f=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,a,i="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),s=0;s<o;s++)a[s]=arguments[s];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[i]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(s=o)?0!==a||1/a==1/s:a!=a&&s!=s)?n=0:(n="function"==typeof t?t(r,o):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,s},o.render=function(){return this.props.children},n}(o.Component);l.childContextTypes=((n={})[i]=s().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},o.componentDidMount=function(){this.context[i]&&this.context[i].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},o.componentWillUnmount=function(){this.context[i]&&this.context[i].off(this.onUpdate)},o.getValue=function(){return this.context[i]?this.context[i].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return c.contextTypes=((a={})[i]=s().object,a),{Provider:l,Consumer:c}},g=function(e){var t=h();return t.displayName=e,t},b=g("Router-History"),y=g("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;var w=function(e){function t(){return e.apply(this,arguments)||this}(0,r.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.props.onMount&&this.props.onMount.call(this,this)},n.componentDidUpdate=function(e){this.props.onUpdate&&this.props.onUpdate.call(this,this,e)},n.componentWillUnmount=function(){this.props.onUnmount&&this.props.onUnmount.call(this,this)},n.render=function(){return null},t}(o.Component);var _={},k=1e4,E=0;function x(e,t){return void 0===e&&(e="/"),void 0===t&&(t={}),"/"===e?e:function(e){if(_[e])return _[e];var t=d().compile(e);return E<k&&(_[e]=t,E++),t}(e)(t,{pretty:!0})}function S(e){var t=e.computedMatch,n=e.to,r=e.push,a=void 0!==r&&r;return o.createElement(y.Consumer,null,(function(e){e||(0,l.Z)(!1);var r=e.history,s=e.staticContext,u=a?r.push:r.replace,d=(0,i.ob)(t?"string"==typeof n?x(n,t.params):(0,c.Z)({},n,{pathname:x(n.pathname,t.params)}):n);return s?(u(d),null):o.createElement(w,{onMount:function(){u(d)},onUpdate:function(e,t){var n=(0,i.ob)(t.to);(0,i.Hp)(n,(0,c.Z)({},d,{key:n.key}))||u(d)},to:n})}))}var T={},R=1e4,C=0;function N(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,s=n.strict,i=void 0!==s&&s,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=T[n]||(T[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return C<R&&(r[e]=a,C++),a}(n,{end:a,strict:i,sensitive:c}),o=r.regexp,s=r.keys,l=o.exec(e);if(!l)return null;var u=l[0],p=l.slice(1),f=e===u;return a&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:s.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var O=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?N(n.pathname,e.props):t.match,a=(0,c.Z)({},t,{location:n,match:r}),s=e.props,i=s.children,u=s.component,d=s.render;return Array.isArray(i)&&function(e){return 0===o.Children.count(e)}(i)&&(i=null),o.createElement(y.Provider,{value:a},a.match?i?"function"==typeof i?i(a):i:u?o.createElement(u,a):d?d(a):null:"function"==typeof i?i(a):null)}))},t}(o.Component);function A(e){return"/"===e.charAt(0)?e:"/"+e}function L(e,t){if(!e)return t;var n=A(e);return 0!==t.pathname.indexOf(n)?t:(0,c.Z)({},t,{pathname:t.pathname.substr(n.length)})}function I(e){return"string"==typeof e?e:(0,i.Ep)(e)}function P(e){return function(){(0,l.Z)(!1)}}function j(){}o.Component;var M=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var s=e.props.path||e.props.from;r=s?N(a.pathname,(0,c.Z)({},e.props,{path:s})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var D=o.useContext;function F(){return D(b)}function U(){return D(y).location}},5251:(e,t,n)=>{"use strict";var r=n(7294),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),s=Object.prototype.hasOwnProperty,i=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,a={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)s.call(t,r)&&!l.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:a,_owner:i.current}}t.Fragment=a,t.jsx=c,t.jsxs=c},2408:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=Object.assign,g={};function b(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=b.prototype;var w=v.prototype=new y;w.constructor=v,h(w,b.prototype),w.isPureReactComponent=!0;var _=Array.isArray,k=Object.prototype.hasOwnProperty,E={current:null},x={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,r){var o,a={},s=null,i=null;if(null!=t)for(o in void 0!==t.ref&&(i=t.ref),void 0!==t.key&&(s=""+t.key),t)k.call(t,o)&&!x.hasOwnProperty(o)&&(a[o]=t[o]);var l=arguments.length-2;if(1===l)a.children=r;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];a.children=c}if(e&&e.defaultProps)for(o in l=e.defaultProps)void 0===a[o]&&(a[o]=l[o]);return{$$typeof:n,type:e,key:s,ref:i,props:a,_owner:E.current}}function T(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var R=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function N(e,t,o,a,s){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var l=!1;if(null===e)l=!0;else switch(i){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case n:case r:l=!0}}if(l)return s=s(l=e),e=""===a?"."+C(l,0):a,_(s)?(o="",null!=e&&(o=e.replace(R,"$&/")+"/"),N(s,t,o,"",(function(e){return e}))):null!=s&&(T(s)&&(s=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(s,o+(!s.key||l&&l.key===s.key?"":(""+s.key).replace(R,"$&/")+"/")+e)),t.push(s)),1;if(l=0,a=""===a?".":a+":",_(e))for(var c=0;c<e.length;c++){var u=a+C(i=e[c],c);l+=N(i,t,o,u,s)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(i=e.next()).done;)l+=N(i=i.value,t,o,u=a+C(i,c++),s);else if("object"===i)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function O(e,t,n){if(null==e)return e;var r=[],o=0;return N(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function A(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var L={current:null},I={transition:null},P={ReactCurrentDispatcher:L,ReactCurrentBatchConfig:I,ReactCurrentOwner:E};t.Children={map:O,forEach:function(e,t,n){O(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return O(e,(function(){t++})),t},toArray:function(e){return O(e,(function(e){return e}))||[]},only:function(e){if(!T(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=o,t.Profiler=s,t.PureComponent=v,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=P,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=h({},e.props),a=e.key,s=e.ref,i=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,i=E.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)k.call(t,c)&&!x.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=r;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];o.children=l}return{$$typeof:n,type:e.type,key:a,ref:s,props:o,_owner:i}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=T,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:A}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=I.transition;I.transition={};try{e()}finally{I.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return L.current.useCallback(e,t)},t.useContext=function(e){return L.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return L.current.useDeferredValue(e)},t.useEffect=function(e,t){return L.current.useEffect(e,t)},t.useId=function(){return L.current.useId()},t.useImperativeHandle=function(e,t,n){return L.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return L.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return L.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return L.current.useMemo(e,t)},t.useReducer=function(e,t,n){return L.current.useReducer(e,t,n)},t.useRef=function(e){return L.current.useRef(e)},t.useState=function(e){return L.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return L.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return L.current.useTransition()},t.version="18.2.0"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},5893:(e,t,n)=>{"use strict";e.exports=n(5251)},53:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,s=o>>>1;r<s;){var i=2*(r+1)-1,l=e[i],c=i+1,u=e[c];if(0>a(l,n))c<o&&0>a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[i]=n,r=i);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var s=performance;t.unstable_now=function(){return s.now()}}else{var i=Date,l=i.now();t.unstable_now=function(){return i.now()-l}}var c=[],u=[],d=1,p=null,f=3,m=!1,h=!1,g=!1,b="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,v="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function _(e){if(g=!1,w(e),!h)if(null!==r(c))h=!0,I(k);else{var t=r(u);null!==t&&P(_,t.startTime-e)}}function k(e,n){h=!1,g&&(g=!1,y(T),T=-1),m=!0;var a=f;try{for(w(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!N());){var s=p.callback;if("function"==typeof s){p.callback=null,f=p.priorityLevel;var i=s(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof i?p.callback=i:p===r(c)&&o(c),w(n)}else o(c);p=r(c)}if(null!==p)var l=!0;else{var d=r(u);null!==d&&P(_,d.startTime-n),l=!1}return l}finally{p=null,f=a,m=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var E,x=!1,S=null,T=-1,R=5,C=-1;function N(){return!(t.unstable_now()-C<R)}function O(){if(null!==S){var e=t.unstable_now();C=e;var n=!0;try{n=S(!0,e)}finally{n?E():(x=!1,S=null)}}else x=!1}if("function"==typeof v)E=function(){v(O)};else if("undefined"!=typeof MessageChannel){var A=new MessageChannel,L=A.port2;A.port1.onmessage=O,E=function(){L.postMessage(null)}}else E=function(){b(O,0)};function I(e){S=e,x||(x=!0,E())}function P(e,n){T=b((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){h||m||(h=!0,I(k))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):R=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return r(c)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,a){var s=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?s+a:s:a=s,e){case 1:var i=-1;break;case 2:i=250;break;case 5:i=1073741823;break;case 4:i=1e4;break;default:i=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:i=a+i,sortIndex:-1},a>s?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(g?(y(T),T=-1):g=!0,P(_,a-s))):(e.sortIndex=i,n(c,e),h||m||(h=!0,I(k))),e},t.unstable_shouldYield=N,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),s=Object.keys(t);if(a.length!==s.length)return!1;for(var i=Object.prototype.hasOwnProperty.bind(t),l=0;l<a.length;l++){var c=a[l];if(!i(c))return!1;var u=e[c],d=t[c];if(!1===(o=n?n.call(r,u,d,c):void 0)||void 0===o&&u!==d)return!1}return!0}},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"eCalc\u2122 Docs",tagline:"Documentation for eCalc\u2122",url:"https://equinor.github.io",baseUrl:"/ecalc/",onBrokenLinks:"throw",onBrokenAnchors:"throw",onBrokenMarkdownLinks:"throw",onDuplicateRoutes:"throw",favicon:"img/favicon.svg",organizationName:"equinor",projectName:"ecalc",deploymentBranch:"gh-pages",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["classic",{docs:{sidebarPath:"./sidebars.js",editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/",remarkPlugins:[null,null],rehypePlugins:[null]},blog:!1,theme:{customCss:"/home/runner/work/ecalc/ecalc/docs/src/css/custom.css"}}]],themeConfig:{navbar:{title:"",logo:{alt:"eCalc Logo",src:"img/logo.svg",href:"/"},items:[{type:"docSidebar",sidebarId:"about",position:"left",label:"Docs"},{type:"docSidebar",sidebarId:"contribute",position:"left",label:"Contribute"},{type:"docSidebar",sidebarId:"changelog",position:"left",label:"Changelog"},{href:"https://github.com/equinor/ecalc",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"More",items:[{label:"GitHub",href:"https://github.com/equinor/ecalc"}]}],copyright:"eCalc\u2122 Copyright \xa9 2024 Equinor ASA. Built with Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}},{className:"code-block-old-line",line:"This is old",block:{start:"highlight-old-start",end:"highlight-old-end"}},{className:"code-block-new-line",line:"This is new",block:{start:"highlight-new-start",end:"highlight-new-end"}}],additionalLanguages:[]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},stylesheets:[{href:"/ecalc/katex/katex.min.css",type:"text/css"}],themes:[[null,{hashed:!0,explicitSearchResultPath:!0}]],baseUrlIssueBanner:!0,staticDirectories:["static"],customFields:{},plugins:[],scripts:[],headTags:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{format:"mdx",mermaid:!1,mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0}}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},512:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},2573:(e,t,n)=>{"use strict";n.d(t,{p1:()=>R,y$:()=>ee});var r,o,a,s,i,l,c,u=n(7294),d=n(512),p=Object.create,f=Object.defineProperty,m=Object.defineProperties,h=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyDescriptors,b=Object.getOwnPropertyNames,y=Object.getOwnPropertySymbols,v=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable,k=(e,t,n)=>t in e?f(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,E=(e,t)=>{for(var n in t||(t={}))w.call(t,n)&&k(e,n,t[n]);if(y)for(var n of y(t))_.call(t,n)&&k(e,n,t[n]);return e},x=(e,t)=>m(e,g(t)),S=(e,t)=>{var n={};for(var r in e)w.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&y)for(var r of y(e))t.indexOf(r)<0&&_.call(e,r)&&(n[r]=e[r]);return n},T=(r={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var s in o={},n[a]=o,t)t.hasOwnProperty(s)&&(o[s]=e(t[s],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],s={};for(var i in a)if(a.hasOwnProperty(i)){if(i==t)for(var l in n)n.hasOwnProperty(l)&&(s[l]=n[l]);n.hasOwnProperty(i)||(s[i]=a[i])}var c=o[e];return o[e]=s,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=s)})),s},DFS:function e(t,n,o,a){a=a||{};var s=r.util.objId;for(var i in t)if(t.hasOwnProperty(i)){n.call(t,i,t[i],o||i);var l=t[i],c=r.util.type(l);"Object"!==c||a[s(l)]?"Array"!==c||a[s(l)]||(a[s(l)]=!0,e(l,n,i,a)):(a[s(l)]=!0,e(l,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new i;return l(o,o.head,e),s(e,o,t,o.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function s(e,t,n,i,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(d&&d.cause==p+","+m)return;var h=f[m],g=h.inside,b=!!h.lookbehind,y=!!h.greedy,v=h.alias;if(y&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var _=h.pattern||h,k=i.next,E=u;k!==t.tail&&!(d&&E>=d.reach);E+=k.value.length,k=k.next){var x=k.value;if(t.length>e.length)return;if(!(x instanceof o)){var S,T=1;if(y){if(!(S=a(_,E,e,b))||S.index>=e.length)break;var R=S.index,C=S.index+S[0].length,N=E;for(N+=k.value.length;R>=N;)N+=(k=k.next).value.length;if(E=N-=k.value.length,k.value instanceof o)continue;for(var O=k;O!==t.tail&&(N<C||"string"==typeof O.value);O=O.next)T++,N+=O.value.length;T--,x=e.slice(E,N),S.index-=E}else if(!(S=a(_,0,x,b)))continue;R=S.index;var A=S[0],L=x.slice(0,R),I=x.slice(R+A.length),P=E+x.length;d&&P>d.reach&&(d.reach=P);var j=k.prev;if(L&&(j=l(t,j,L),E+=L.length),c(t,j,T),k=l(t,j,new o(p,g?r.tokenize(A,g):A,v,A)),I&&l(t,k,I),T>1){var M={cause:p+","+m,reach:P};s(e,t,n,k.prev,E,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function i(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},s=t.alias;s&&(Array.isArray(s)?Array.prototype.push.apply(a.classes,s):a.classes.push(s)),r.hooks.run("wrap",a);var i="";for(var l in a.attributes)i+=" "+l+'="'+(a.attributes[l]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+i+">"+a.content+"</"+a.tag+">"},r}();t.exports=n,n.default=n}},function(){return o||(0,r[b(r)[0]])((o={exports:{}}).exports,o),o.exports}),R=((e,t,n)=>(n=null!=e?p(v(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of b(t))w.call(e,o)||o===n||f(e,o,{get:()=>t[o],enumerable:!(r=h(t,o))||r.enumerable});return e})(!t&&e&&e.__esModule?n:f(n,"default",{value:e,enumerable:!0}),e)))(T());R.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},R.languages.markup.tag.inside["attr-value"].inside.entity=R.languages.markup.entity,R.languages.markup.doctype.inside["internal-subset"].inside=R.languages.markup,R.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(R.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:R.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:R.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},R.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(R.languages.markup.tag,"addAttribute",{value:function(e,t){R.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:R.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),R.languages.html=R.languages.markup,R.languages.mathml=R.languages.markup,R.languages.svg=R.languages.markup,R.languages.xml=R.languages.extend("markup",{}),R.languages.ssml=R.languages.xml,R.languages.atom=R.languages.xml,R.languages.rss=R.languages.xml,a=R,s={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},l="(?:[^\\\\-]|"+(i=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/).source+")",l=RegExp(l+"-"+l),c={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"},a.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:l,inside:{escape:i,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":s,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:i}},"special-escape":s,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":c}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:i,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":c}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}},R.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},R.languages.javascript=R.languages.extend("clike",{"class-name":[R.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),R.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,R.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:R.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:R.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:R.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:R.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:R.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),R.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:R.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),R.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),R.languages.markup&&(R.languages.markup.tag.addInlined("script","javascript"),R.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),R.languages.js=R.languages.javascript,R.languages.actionscript=R.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),R.languages.actionscript["class-name"].alias="function",delete R.languages.actionscript.parameter,delete R.languages.actionscript["literal-property"],R.languages.markup&&R.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:R.languages.markup}}),function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(R),function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach((function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},o="doc-comment";if(a=e.languages[t]){var a,s=a[o];if((s=s||(a=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[o])instanceof RegExp&&(s=a[o]={pattern:s}),Array.isArray(s))for(var i=0,l=s.length;i<l;i++)s[i]instanceof RegExp&&(s[i]={pattern:s[i]}),r(s[i]);else r(s)}}))}}),t.addSupport(["java","javascript","php"],t)}(R),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(R),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,n=(t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(R),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function s(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:s(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:s(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:s(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:s(a),lookbehind:!0,greedy:!0},number:{pattern:s(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(R),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,s=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o,a=t[n];"code"!==a.type?e(a.content):(o=a.content[1],a=a.content[3],o&&a&&"code-language"===o.type&&"code-block"===a.type&&"string"==typeof o.content&&(o=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),o="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase()),a.alias?"string"==typeof a.alias?a.alias=[a.alias,o]:a.alias.push(o):a.alias=[o]))}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r];if(a=/language-(.+)/.exec(a)){n=a[1];break}}var c,u=e.languages[n];u?t.content=e.highlight(t.content.replace(s,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;return"#"===(t=t.toLowerCase())[0]?(n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n)):i[t]||e})),u,n):n&&"none"!==n&&e.plugins.autoloader&&(c="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=c,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(c);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))})))}})),RegExp(e.languages.markup.tag.pattern.source,"gi")),i={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(R),R.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:R.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},R.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var a=p(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var s=u(0);"variable"===s.type&&(f(s,"variable-input"),o.push(s.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),0<o.length)){var i=p(/^\{$/,/^\}$/);if(-1!==i)for(var l=n;l<i;l++){var c=t[l];"variable"===c.type&&0<=o.indexOf(c.content)&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return}return 1}function p(e,r){for(var o=1,a=n;a<t.length;a++){var s=t[a],i=s.content;if("punctuation"===s.type&&"string"==typeof i)if(e.test(i))o++;else if(r.test(i)&&0==--o)return a}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),R.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function s(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function i(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function l(t,n,s){var l=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),c=0,u={},d=(l=i(l.map((function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+s.toUpperCase()+"_"+r+"___")););return u[n]=e,n})).join(""),n,s),Object.keys(u));return c=0,function t(n){for(var a=0;a<n.length;a++){if(c>=d.length)return;var s,l,p,f,m,h,g,b=n[a];"string"==typeof b||"string"==typeof b.content?(s=d[c],-1!==(g=(h="string"==typeof b?b:b.content).indexOf(s))&&(++c,l=h.substring(0,g),m=u[s],p=void 0,(f={})["interpolation-punctuation"]=o,3===(f=e.tokenize(m,f)).length&&((p=[1,1]).push.apply(p,i(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,m),f=h.substring(g+s.length),m=[],l&&m.push(l),m.push(p),f&&(t(h=[f]),m.push.apply(m,h)),"string"==typeof b?(n.splice.apply(n,[a,1].concat(m)),a+=m.length-1):b.content=m)):(g=b.content,Array.isArray(g)?t(g):t([g]))}}(l),new e.Token(s,l,"language-"+s,t)}e.languages.javascript["template-string"]=[s("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),s("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),s("svg",/\bsvg/.source),s("markdown",/\b(?:markdown|md)/.source),s("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),s("sql",/\bsql/.source),t].filter(Boolean);var c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in c&&function t(n){for(var r=0,o=n.length;r<o;r++){var a,s,i,c=n[r];"string"!=typeof c&&(a=c.content,Array.isArray(a)?"template-string"===c.type?(c=a[1],3===a.length&&"string"!=typeof c&&"embedded-code"===c.type&&(s=u(c),c=c.alias,c=Array.isArray(c)?c[0]:c,i=e.languages[c])&&(a[1]=l(s,i,c))):t(a):"string"!=typeof a&&t([a]))}}(t.tokens)}))}(R),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(R),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(R),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(R),R.languages.n4js=R.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),R.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),R.languages.n4jsd=R.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];o=(a="RegExp"===e.util.type(a)?e.languages.javascript[o]={pattern:a}:a).inside||{};(a.inside=o)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(R),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}function s(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;"string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"!==o.content[o.content.length-1].content&&n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&0<n.length&&0===n[n.length-1].openedBraces&&(a=i(o),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(a+=i(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(a=i(t[r-1])+a,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",a,null,a)),o.content&&"string"!=typeof o.content&&s(o.content)}}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(R),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(R),R.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},R.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=R.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(R),R.languages.c=R.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),R.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),R.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},R.languages.c.string],char:R.languages.c.char,comment:R.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:R.languages.c}}}}),R.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete R.languages.c.boolean,R.languages.objectivec=R.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete R.languages.objectivec["class-name"],R.languages.objc=R.languages.objectivec,R.languages.reason=R.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),R.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete R.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(R),R.languages.go=R.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),R.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete R.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(R),R.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},R.languages.python["string-interpolation"].inside.interpolation.inside.rest=R.languages.python,R.languages.py=R.languages.python;((e,t)=>{for(var n in t)f(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>C,duotoneDark:()=>N,duotoneLight:()=>O,github:()=>A,jettwaveDark:()=>H,jettwaveLight:()=>q,nightOwl:()=>L,nightOwlLight:()=>I,oceanicNext:()=>M,okaidia:()=>D,oneDark:()=>V,oneLight:()=>Q,palenight:()=>F,shadesOfPurple:()=>U,synthwave84:()=>B,ultramin:()=>z,vsDark:()=>$,vsLight:()=>G});var C={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},N={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},O={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},A={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},L={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},I={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},P="#c5a5c5",j="#8dc891",M={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:P}},{types:["attr-value"],style:{color:j}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:j}},{types:["punctuation"],style:{color:j}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:P}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},D={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},F={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},U={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},B={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},z={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},$={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},G={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},H={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},q={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},V={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},Q={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},Z=(e,t)=>{const{plain:n}=e,r=e.styles.reduce(((e,n)=>{const{languages:r,style:o}=n;return r&&!r.includes(t)||n.types.forEach((t=>{const n=E(E({},e[t]),o);e[t]=n})),e}),{});return r.root=n,r.plain=x(E({},n),{backgroundColor:void 0}),r},W=/\r\n|\r|\n/,Y=e=>{0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},X=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},K=e=>{const t=[[]],n=[e],r=[0],o=[e.length];let a=0,s=0,i=[];const l=[i];for(;s>-1;){for(;(a=r[s]++)<o[s];){let e,c=t[s];const u=n[s][a];if("string"==typeof u?(c=s>0?c:["plain"],e=u):(c=X(c,u.type),u.alias&&(c=X(c,u.alias)),e=u.content),"string"!=typeof e){s++,t.push(c),n.push(e),r.push(0),o.push(e.length);continue}const d=e.split(W),p=d.length;i.push({types:c,content:d[0]});for(let t=1;t<p;t++)Y(i),l.push(i=[]),i.push({types:c,content:d[t]})}s--,t.pop(),n.pop(),r.pop(),o.pop()}return Y(i),l},J=({children:e,language:t,code:n,theme:r,prism:o})=>{const a=t.toLowerCase(),s=((e,t)=>{const[n,r]=(0,u.useState)(Z(t,e)),o=(0,u.useRef)(),a=(0,u.useRef)();return(0,u.useEffect)((()=>{t===o.current&&e===a.current||(o.current=t,a.current=e,r(Z(t,e)))}),[e,t]),n})(a,r),i=(e=>(0,u.useCallback)((t=>{var n=t,{className:r,style:o,line:a}=n,s=S(n,["className","style","line"]);const i=x(E({},s),{className:(0,d.Z)("token-line",r)});return"object"==typeof e&&"plain"in e&&(i.style=e.plain),"object"==typeof o&&(i.style=E(E({},i.style||{}),o)),i}),[e]))(s),l=(e=>{const t=(0,u.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,u.useCallback)((e=>{var n=e,{token:r,className:o,style:a}=n,s=S(n,["token","className","style"]);const i=x(E({},s),{className:(0,d.Z)("token",...r.types,o),children:r.content,style:t(r)});return null!=a&&(i.style=E(E({},i.style||{}),a)),i}),[t])})(s),c=(({prism:e,code:t,grammar:n,language:r})=>{const o=(0,u.useRef)(e);return(0,u.useMemo)((()=>{if(null==n)return K([t]);const e={code:t,grammar:n,language:r,tokens:[]};return o.current.hooks.run("before-tokenize",e),e.tokens=o.current.tokenize(t,n),o.current.hooks.run("after-tokenize",e),K(e.tokens)}),[t,n,r])})({prism:o,language:a,code:n,grammar:o.languages[a]});return e({tokens:c,className:`prism-code language-${a}`,style:null!=s?s.root:{},getLineProps:i,getTokenProps:l})},ee=e=>(0,u.createElement)(J,x(E({},e),{prism:e.prism||R,theme:e.theme||$,code:e.code,language:e.language}))},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},7529:e=>{"use strict";e.exports={}},6887:e=>{"use strict";e.exports=JSON.parse('{"/ecalc/search-bdd":{"__comp":"1a4e3797","__context":{"plugin":"b2781c74"}},"/ecalc/versions-284":{"__comp":"fa17a3e5","__context":{"plugin":"f85d2ba9"},"config":"5e9f5e1a"},"/ecalc/docs-fe9":{"__comp":"5e95c892","__context":{"plugin":"977fea76"}},"/ecalc/docs-d5d":{"__comp":"a7bd4aaa","version":"935f2afb"},"/ecalc/docs/tags-909":{"__comp":"3720c009","tags":"55960ee5"},"/ecalc/docs/tags/e-calc-b17":{"__comp":"df203c0f","tag":"b8c59810"},"/ecalc/docs/tags/release-816":{"__comp":"df203c0f","tag":"41d1792a"},"/ecalc/docs-f1b":{"__comp":"a94703ab"},"/ecalc/docs/about/-a31":{"__comp":"17896441","content":"1f60d0d4"},"/ecalc/docs/about/getting_started/-123":{"__comp":"17896441","content":"1c663d3d"},"/ecalc/docs/about/getting_started/cli/-d3b":{"__comp":"17896441","content":"dfbab2f3"},"/ecalc/docs/about/getting_started/cli/faq-97e":{"__comp":"17896441","content":"496ed8d5"},"/ecalc/docs/about/getting_started/library/-d50":{"__comp":"17896441","content":"0425b884"},"/ecalc/docs/about/getting_started/yaml/-cec":{"__comp":"17896441","content":"e1df8231"},"/ecalc/docs/about/migration_guides/-b3e":{"__comp":"17896441","content":"40d6382c"},"/ecalc/docs/about/migration_guides/v7_to_v8-313":{"__comp":"17896441","content":"7557b935"},"/ecalc/docs/about/migration_guides/v8_to_v81-7ca":{"__comp":"17896441","content":"4aa4fc36"},"/ecalc/docs/about/migration_guides/v8-1_to_v8-2-14c":{"__comp":"17896441","content":"5c08a402"},"/ecalc/docs/about/migration_guides/v8-2_to_v8-3-273":{"__comp":"17896441","content":"af105519"},"/ecalc/docs/about/migration_guides/v8-3_to_v8-4-115":{"__comp":"17896441","content":"721cfe60"},"/ecalc/docs/about/migration_guides/v8-5_to_v8-6-163":{"__comp":"17896441","content":"81dd00c5"},"/ecalc/docs/about/migration_guides/v8-6_to_v8-7-e5f":{"__comp":"17896441","content":"63ecd22d"},"/ecalc/docs/about/migration_guides/v8.7_to_v8.8-3cf":{"__comp":"17896441","content":"ebdd570f"},"/ecalc/docs/about/miscellaneous/-b76":{"__comp":"17896441","content":"a5dcc804"},"/ecalc/docs/about/modelling/-d6a":{"__comp":"17896441","content":"bb45b332"},"/ecalc/docs/about/modelling/examples/-e7e":{"__comp":"17896441","content":"0fd76486"},"/ecalc/docs/about/modelling/examples/advanced-362":{"__comp":"17896441","content":"2781f0ad"},"/ecalc/docs/about/modelling/examples/drogon-966":{"__comp":"17896441","content":"f54e894e"},"/ecalc/docs/about/modelling/examples/simple-257":{"__comp":"17896441","content":"7cebed78"},"/ecalc/docs/about/modelling/setup/-dff":{"__comp":"17896441","content":"e8ebc025"},"/ecalc/docs/about/modelling/setup/facility_inputs/-1cc":{"__comp":"17896441","content":"43a1031a"},"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling-f62":{"__comp":"17896441","content":"fa3d98bd"},"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/-592":{"__comp":"17896441","content":"43a26e71"},"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts-2c2":{"__comp":"17896441","content":"00bdc23f"},"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model-04c":{"__comp":"17896441","content":"7e6991bb"},"/ecalc/docs/about/modelling/setup/facility_inputs/tabular-542":{"__comp":"17896441","content":"66286265"},"/ecalc/docs/about/modelling/setup/file_format_and_syntax/-0e3":{"__comp":"17896441","content":"e9e63826"},"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions-d12":{"__comp":"17896441","content":"8961bfac"},"/ecalc/docs/about/modelling/setup/fuel_types-620":{"__comp":"17896441","content":"498bfcff"},"/ecalc/docs/about/modelling/setup/installations/-99b":{"__comp":"17896441","content":"7db788f5"},"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/-9b9":{"__comp":"17896441","content":"ad129716"},"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor-c00":{"__comp":"17896441","content":"fa0b6059"},"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system-0e8":{"__comp":"17896441","content":"6adcc868"},"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures-65b":{"__comp":"17896441","content":"69fd9be6"},"/ecalc/docs/about/modelling/setup/installations/direct_consumers-d56":{"__comp":"17896441","content":"d5cd246e"},"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations-f2a":{"__comp":"17896441","content":"edb3a98b"},"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations-2f5":{"__comp":"17896441","content":"fe44757f"},"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations-d10":{"__comp":"17896441","content":"5e10e9e1"},"/ecalc/docs/about/modelling/setup/models/-15b":{"__comp":"17896441","content":"a2e97e20"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/-c1c":{"__comp":"17896441","content":"5c8ec56d"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/-5eb":{"__comp":"17896441","content":"f577f5c2"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/-b0e":{"__comp":"17896441","content":"9e136365"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model-f09":{"__comp":"17896441","content":"33498b04"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model-e08":{"__comp":"17896441","content":"163041ea"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model-de2":{"__comp":"17896441","content":"2ce3b5da"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures-2fb":{"__comp":"17896441","content":"4b80f681"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/-fb2":{"__comp":"17896441","content":"9e91bf8d"},"/ecalc/docs/about/modelling/setup/models/fluid_model-849":{"__comp":"17896441","content":"4b5a01f9"},"/ecalc/docs/about/modelling/setup/models/turbine_modeling-0f3":{"__comp":"17896441","content":"841adc37"},"/ecalc/docs/about/modelling/setup/time_series-b2a":{"__comp":"17896441","content":"f52ed7e3"},"/ecalc/docs/about/modelling/setup/variables-5f7":{"__comp":"17896441","content":"9a118db7"},"/ecalc/docs/about/modelling/theory/-6a0":{"__comp":"17896441","content":"f054b415"},"/ecalc/docs/about/modelling/theory/compressor_modelling-0df":{"__comp":"17896441","content":"38d592cf"},"/ecalc/docs/about/modelling/theory/pump_modelling-c3a":{"__comp":"17896441","content":"3409ab5c"},"/ecalc/docs/about/modelling/workflow/-9a1":{"__comp":"17896441","content":"7b02141e"},"/ecalc/docs/about/modelling/workflow/generic_workflow-b21":{"__comp":"17896441","content":"2cedaf2f"},"/ecalc/docs/about/references/-5da":{"__comp":"17896441","content":"4ee97ba8"},"/ecalc/docs/about/references/api/-225":{"__comp":"17896441","content":"d2eeb42a"},"/ecalc/docs/about/references/cli_reference-b63":{"__comp":"17896441","content":"c3d1f0cd"},"/ecalc/docs/about/references/keywords/-424":{"__comp":"17896441","content":"f571fee5"},"/ecalc/docs/about/references/keywords/ADJUSTMENT-382":{"__comp":"17896441","content":"17e50ecd"},"/ecalc/docs/about/references/keywords/CATEGORY-de9":{"__comp":"17896441","content":"b2b17913"},"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL-8c1":{"__comp":"17896441","content":"d77448ee"},"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM-8f7":{"__comp":"17896441","content":"c9b29382"},"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL-9b6":{"__comp":"17896441","content":"cc88a418"},"/ecalc/docs/about/references/keywords/CONDITION-b74":{"__comp":"17896441","content":"00440000"},"/ecalc/docs/about/references/keywords/CONDITIONS-ea9":{"__comp":"17896441","content":"e7fdd821"},"/ecalc/docs/about/references/keywords/CONSTANT-677":{"__comp":"17896441","content":"fd734e2c"},"/ecalc/docs/about/references/keywords/CONSUMERS-15f":{"__comp":"17896441","content":"c93dcb87"},"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE-f62":{"__comp":"17896441","content":"7c623a68"},"/ecalc/docs/about/references/keywords/CONTROL_MARGIN-b71":{"__comp":"17896441","content":"b0a5d2c7"},"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT-415":{"__comp":"17896441","content":"502e1773"},"/ecalc/docs/about/references/keywords/CROSSOVER-55f":{"__comp":"17896441","content":"66a649c0"},"/ecalc/docs/about/references/keywords/CURVE-aa7":{"__comp":"17896441","content":"3b0e82f8"},"/ecalc/docs/about/references/keywords/CURVES-429":{"__comp":"17896441","content":"382d59b5"},"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS-8cf":{"__comp":"17896441","content":"295f424e"},"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE-16d":{"__comp":"17896441","content":"9e7755e6"},"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL-efb":{"__comp":"17896441","content":"084f7ebf"},"/ecalc/docs/about/references/keywords/EFFICIENCY-f47":{"__comp":"17896441","content":"4da8ac19"},"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL-1f9":{"__comp":"17896441","content":"0f7b5825"},"/ecalc/docs/about/references/keywords/EMISSION-1c4":{"__comp":"17896441","content":"e26167e6"},"/ecalc/docs/about/references/keywords/EMISSION_NAME-29b":{"__comp":"17896441","content":"6bd3279d"},"/ecalc/docs/about/references/keywords/EMISSION_RATE-d80":{"__comp":"17896441","content":"51ad0f66"},"/ecalc/docs/about/references/keywords/EMISSIONS-e05":{"__comp":"17896441","content":"5989d566"},"/ecalc/docs/about/references/keywords/EMITTER_MODEL-c46":{"__comp":"17896441","content":"54094f37"},"/ecalc/docs/about/references/keywords/END-8f6":{"__comp":"17896441","content":"06dd1efa"},"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL-55a":{"__comp":"17896441","content":"df3c944d"},"/ecalc/docs/about/references/keywords/ENERGYFUNCTION-f2d":{"__comp":"17896441","content":"29d00dd8"},"/ecalc/docs/about/references/keywords/EXPRESSION-6c2":{"__comp":"17896441","content":"86262f09"},"/ecalc/docs/about/references/keywords/EXTRAPOLATION-b1f":{"__comp":"17896441","content":"5a5e553d"},"/ecalc/docs/about/references/keywords/FACILITY_INPUTS-070":{"__comp":"17896441","content":"5e3ed04b"},"/ecalc/docs/about/references/keywords/FACTOR-7d6":{"__comp":"17896441","content":"ccf7588a"},"/ecalc/docs/about/references/keywords/FILE-642":{"__comp":"17896441","content":"cbe196b2"},"/ecalc/docs/about/references/keywords/FLUID_DENSITY-c60":{"__comp":"17896441","content":"f59fd0ba"},"/ecalc/docs/about/references/keywords/FLUID_MODEL-2fd":{"__comp":"17896441","content":"d547c67b"},"/ecalc/docs/about/references/keywords/FUEL-c8b":{"__comp":"17896441","content":"e0edce1a"},"/ecalc/docs/about/references/keywords/FUEL_TYPES-a2e":{"__comp":"17896441","content":"2df92a48"},"/ecalc/docs/about/references/keywords/FUELCONSUMERS-aee":{"__comp":"17896441","content":"61639be2"},"/ecalc/docs/about/references/keywords/FUELRATE-255":{"__comp":"17896441","content":"7514af75"},"/ecalc/docs/about/references/keywords/GENERATORSETS-d03":{"__comp":"17896441","content":"15962da1"},"/ecalc/docs/about/references/keywords/HCEXPORT-ccb":{"__comp":"17896441","content":"3810e8e5"},"/ecalc/docs/about/references/keywords/HEAD-b50":{"__comp":"17896441","content":"0aeda122"},"/ecalc/docs/about/references/keywords/HEAD_MARGIN-794":{"__comp":"17896441","content":"3aeef25a"},"/ecalc/docs/about/references/keywords/include-80e":{"__comp":"17896441","content":"ec96df16"},"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR-423":{"__comp":"17896441","content":"29367e59"},"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE-dc7":{"__comp":"17896441","content":"90184672"},"/ecalc/docs/about/references/keywords/INSTALLATIONS-ed5":{"__comp":"17896441","content":"e023757a"},"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE-13e":{"__comp":"17896441","content":"3261da49"},"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE-47e":{"__comp":"17896441","content":"e862d0e9"},"/ecalc/docs/about/references/keywords/LOAD-cc8":{"__comp":"17896441","content":"cb266b33"},"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE-d7b":{"__comp":"17896441","content":"f5b92c38"},"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE-bf3":{"__comp":"17896441","content":"22f0e129"},"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE-c59":{"__comp":"17896441","content":"54d7341e"},"/ecalc/docs/about/references/keywords/MODELS-a5a":{"__comp":"17896441","content":"c21bc46a"},"/ecalc/docs/about/references/keywords/NAME-d44":{"__comp":"17896441","content":"2b15d891"},"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS-3da":{"__comp":"17896441","content":"d2b7592b"},"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT-330":{"__comp":"17896441","content":"97732f4b"},"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR-f94":{"__comp":"17896441","content":"06adec10"},"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL-dd5":{"__comp":"17896441","content":"4c3c1dc2"},"/ecalc/docs/about/references/keywords/PUMPS-6dd":{"__comp":"17896441","content":"b15ba3bd"},"/ecalc/docs/about/references/keywords/RATE-a33":{"__comp":"17896441","content":"1300feb7"},"/ecalc/docs/about/references/keywords/RATE_FRACTIONS-d5a":{"__comp":"17896441","content":"b677d687"},"/ecalc/docs/about/references/keywords/RATE_PER_STREAM-b6a":{"__comp":"17896441","content":"074935d7"},"/ecalc/docs/about/references/keywords/REGULARITY-3a2":{"__comp":"17896441","content":"2c19a041"},"/ecalc/docs/about/references/keywords/STAGES-a5c":{"__comp":"17896441","content":"4147f87e"},"/ecalc/docs/about/references/keywords/START-c55":{"__comp":"17896441","content":"10c684b0"},"/ecalc/docs/about/references/keywords/STREAM-d9a":{"__comp":"17896441","content":"577efb1d"},"/ecalc/docs/about/references/keywords/STREAMS-3c3":{"__comp":"17896441","content":"d17664a7"},"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE-45c":{"__comp":"17896441","content":"3fbb770c"},"/ecalc/docs/about/references/keywords/TIME_SERIES-56f":{"__comp":"17896441","content":"676abc7a"},"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE-0e8":{"__comp":"17896441","content":"d185ab52"},"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES-5ab":{"__comp":"17896441","content":"70f31d65"},"/ecalc/docs/about/references/keywords/TURBINE_LOAD-5a2":{"__comp":"17896441","content":"c5daebe9"},"/ecalc/docs/about/references/keywords/TURBINE_MODEL-0df":{"__comp":"17896441","content":"9e4a10de"},"/ecalc/docs/about/references/keywords/TYPE-9b2":{"__comp":"17896441","content":"72083b41"},"/ecalc/docs/about/references/keywords/UNITS-5a9":{"__comp":"17896441","content":"880bbd08"},"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL-bd0":{"__comp":"17896441","content":"11516e85"},"/ecalc/docs/about/references/keywords/VARIABLES-f4e":{"__comp":"17896441","content":"07b341f3"},"/ecalc/docs/about/references/keywords/VENTING_EMITTERS-6b4":{"__comp":"17896441","content":"0477162f"},"/ecalc/docs/category/documentation-cd3":{"__comp":"14eb3368","categoryGeneratedIndex":"d5b0ea4b"},"/ecalc/docs/category/guides-0bf":{"__comp":"14eb3368","categoryGeneratedIndex":"1e7de7fe"},"/ecalc/docs/changelog/-b3d":{"__comp":"17896441","content":"428320b6"},"/ecalc/docs/changelog/latest-045":{"__comp":"17896441","content":"fb7e7841"},"/ecalc/docs/changelog/separator-796":{"__comp":"17896441","content":"2f04f592"},"/ecalc/docs/changelog/v7-0-release-2b8":{"__comp":"17896441","content":"2b2be347"},"/ecalc/docs/changelog/v7-1-release-6a0":{"__comp":"17896441","content":"bdf25f4c"},"/ecalc/docs/changelog/v7-2-release-ac2":{"__comp":"17896441","content":"45c974ba"},"/ecalc/docs/changelog/v7-3-release-783":{"__comp":"17896441","content":"c90bf1e8"},"/ecalc/docs/changelog/v7-4-release-2af":{"__comp":"17896441","content":"7d3b81bb"},"/ecalc/docs/changelog/v7-5-release-753":{"__comp":"17896441","content":"eee46244"},"/ecalc/docs/changelog/v7-6-release-bab":{"__comp":"17896441","content":"cda37ba5"},"/ecalc/docs/changelog/v8.0-release-4b0":{"__comp":"17896441","content":"bfdf430b"},"/ecalc/docs/changelog/v8.1-release-074":{"__comp":"17896441","content":"e2712b99"},"/ecalc/docs/changelog/v8.2-release-249":{"__comp":"17896441","content":"fba8a418"},"/ecalc/docs/changelog/v8.3-release-7c0":{"__comp":"17896441","content":"3e38e310"},"/ecalc/docs/changelog/v8.4-release-2a6":{"__comp":"17896441","content":"47daf389"},"/ecalc/docs/changelog/v8.5-release-5a0":{"__comp":"17896441","content":"0745e7f0"},"/ecalc/docs/changelog/v8.6-release-520":{"__comp":"17896441","content":"1f7805b6"},"/ecalc/docs/changelog/v8.7-release-553":{"__comp":"17896441","content":"f92867ed"},"/ecalc/docs/changelog/v8.8-release-df0":{"__comp":"17896441","content":"18b0ec42"},"/ecalc/docs/contribute/documentation-guide/documentation-65b":{"__comp":"17896441","content":"d19423a2"},"/ecalc/docs/contribute/documentation-guide/markdown-de5":{"__comp":"17896441","content":"60746895"},"/ecalc/docs/contribute/get-started-873":{"__comp":"17896441","content":"c8caddd1"},"/ecalc/docs/contribute/guides/conventional-commits-573":{"__comp":"17896441","content":"2c73e373"},"/ecalc/docs/contribute/guides/git-151":{"__comp":"17896441","content":"1287dd43"},"/ecalc/-94a":{"__comp":"1df93b7f","__context":{"plugin":"f85d2ba9"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=7221,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.fec78e08.js.LICENSE.txt b/assets/js/main.fec78e08.js.LICENSE.txt new file mode 100644 index 0000000000..5b49ae6363 --- /dev/null +++ b/assets/js/main.fec78e08.js.LICENSE.txt @@ -0,0 +1,126 @@ +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ + +/*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ + +/*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! Bundled license information: + +prismjs/prism.js: + (** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + *) +*/ + +/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @license React + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ + +/** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/assets/js/runtime~main.65e8fb31.js b/assets/js/runtime~main.65e8fb31.js new file mode 100644 index 0000000000..3ecf15681a --- /dev/null +++ b/assets/js/runtime~main.65e8fb31.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,d,a,b,f,c={},t={};function r(e){var d=t[e];if(void 0!==d)return d.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return c[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=c,r.c=t,e=[],r.O=(d,a,b,f)=>{if(!a){var c=1/0;for(i=0;i<e.length;i++){a=e[i][0],b=e[i][1],f=e[i][2];for(var t=!0,o=0;o<a.length;o++)(!1&f||c>=f)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,f<c&&(c=f));if(t){e.splice(i--,1);var n=b();void 0!==n&&(d=n)}}return d}f=f||0;for(var i=e.length;i>0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[a,b,f]},r.n=e=>{var d=e&&e.__esModule?()=>e.default:()=>e;return r.d(d,{a:d}),d},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,b){if(1&b&&(e=this(e)),8&b)return e;if("object"==typeof e&&e){if(4&b&&e.__esModule)return e;if(16&b&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var c={};d=d||[null,a({}),a([]),a(a)];for(var t=2&b&&e;"object"==typeof t&&!~d.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((d=>c[d]=()=>e[d]));return c.default=()=>e,r.d(f,c),f},r.d=(e,d)=>{for(var a in d)r.o(d,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:d[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((d,a)=>(r.f[a](e,d),d)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",180:"66286265",262:"b677d687",381:"33498b04",443:"5e10e9e1",476:"e26167e6",505:"f571fee5",510:"54d7341e",517:"e1df8231",583:"fd734e2c",628:"577efb1d",639:"6bd3279d",749:"498bfcff",754:"ad129716",770:"f54e894e",856:"7557b935",925:"3b0e82f8",996:"15962da1",1042:"074935d7",1044:"4aa4fc36",1110:"5a5e553d",1310:"7c623a68",1398:"38d592cf",1404:"2b2be347",1668:"4ee97ba8",1686:"d19423a2",1709:"5989d566",1728:"edb3a98b",1748:"41d1792a",2e3:"cc88a418",2013:"c5daebe9",2017:"3409ab5c",2040:"7e6991bb",2138:"f92867ed",2153:"06adec10",2205:"5e3ed04b",2206:"496ed8d5",2225:"2b15d891",2459:"45c974ba",2488:"f85d2ba9",2547:"b15ba3bd",2548:"81dd00c5",2562:"f59fd0ba",2638:"7b02141e",2655:"2c73e373",2693:"502e1773",2706:"cb266b33",2802:"1f7805b6",2962:"18b0ec42",2991:"d5b0ea4b",3054:"11516e85",3074:"7db788f5",3091:"3261da49",3172:"54094f37",3173:"29367e59",3177:"ebdd570f",3181:"fa17a3e5",3190:"b2b17913",3211:"4b5a01f9",3237:"1df93b7f",3240:"66a649c0",3305:"d2b7592b",3315:"880bbd08",3414:"b0a5d2c7",3443:"c21bc46a",3596:"2df92a48",3700:"1287dd43",3751:"3720c009",3787:"2781f0ad",3802:"721cfe60",3847:"084f7ebf",3902:"e8ebc025",4025:"bdf25f4c",4069:"0745e7f0",4070:"5c8ec56d",4075:"61639be2",4103:"bb45b332",4121:"55960ee5",4168:"c93dcb87",4189:"cda37ba5",4199:"af105519",4278:"b2781c74",4368:"a94703ab",4395:"9e4a10de",4441:"d5cd246e",4466:"fb7e7841",4507:"2c19a041",4631:"9e91bf8d",4733:"c3d1f0cd",4734:"cbe196b2",4838:"3fbb770c",4845:"43a26e71",4858:"e023757a",5133:"295f424e",5178:"72083b41",5201:"d77448ee",5408:"2cedaf2f",5595:"00440000",5654:"676abc7a",5713:"51ad0f66",5870:"10c684b0",5917:"d547c67b",5932:"90184672",6038:"4da8ac19",6039:"06dd1efa",6124:"1e7de7fe",6159:"e9e63826",6173:"0477162f",6193:"428320b6",6305:"7514af75",6539:"1f60d0d4",6638:"fba8a418",6686:"4c3c1dc2",6696:"fa3d98bd",6721:"c8caddd1",6768:"841adc37",6887:"3810e8e5",6893:"22f0e129",6922:"d17664a7",7154:"eee46244",7212:"9e7755e6",7238:"0f7b5825",7253:"e2712b99",7337:"70f31d65",7396:"3aeef25a",7495:"2f04f592",7594:"97732f4b",7611:"df3c944d",7652:"f054b415",7756:"17e50ecd",7832:"0aeda122",7907:"dfbab2f3",7918:"17896441",7920:"1a4e3797",7959:"f577f5c2",8010:"43a1031a",8023:"977fea76",8082:"47daf389",8084:"29d00dd8",8088:"00bdc23f",8094:"3e38e310",8122:"6adcc868",8186:"c90bf1e8",8202:"e7fdd821",8230:"7d3b81bb",8267:"07b341f3",8269:"1300feb7",8276:"a5dcc804",8282:"60746895",8285:"c9b29382",8318:"86262f09",8392:"1c663d3d",8485:"d2eeb42a",8518:"a7bd4aaa",8519:"ec96df16",8570:"69fd9be6",8583:"bfdf430b",8596:"e0edce1a",8703:"e862d0e9",8746:"0fd76486",8846:"5c08a402",8967:"ccf7588a",8980:"63ecd22d",8984:"f5b92c38",8988:"a2e97e20",9050:"2ce3b5da",9083:"fe44757f",9128:"8961bfac",9251:"fa0b6059",9306:"382d59b5",9336:"0425b884",9364:"9a118db7",9376:"7cebed78",9480:"163041ea",9524:"d185ab52",9591:"9e136365",9643:"b8c59810",9661:"5e95c892",9786:"4147f87e",9814:"40d6382c",9817:"14eb3368",9842:"4b80f681",9922:"f52ed7e3",9924:"df203c0f"}[e]||e)+"."+{53:"b8482756",180:"40f32996",262:"db13f5a3",381:"0fa0d93a",443:"dbc2223c",476:"6d4a867d",505:"672920cc",510:"1a1a4e8a",517:"23a94c3e",583:"fb46f962",628:"c28ef874",639:"672fa9ba",749:"5b524ea2",754:"7c8cb133",770:"8575b06c",856:"1196147b",925:"c1b09a81",996:"f6006d5c",1042:"2591b66d",1044:"be58ac26",1110:"a052ee43",1310:"34254eb2",1398:"b53c36f3",1404:"20f2acd0",1668:"5e12f8d7",1686:"5039dc89",1709:"c10564e2",1728:"9f770347",1748:"f1d4fa7e",1772:"61b36e2a",2e3:"4afe2011",2013:"1b0a1002",2017:"1a5df7d3",2040:"8ccfd93e",2138:"ab8e538a",2153:"9980026a",2205:"b32bf413",2206:"479344d0",2225:"3bb3344d",2459:"dd19411b",2488:"7e35db59",2547:"f6a45144",2548:"a58b205b",2562:"cff0d5d3",2638:"87a39056",2655:"897a2d57",2693:"6da73989",2706:"5e5e38c6",2802:"03fcb1fa",2962:"fda20e54",2991:"09b9be2c",3054:"71cc9aa4",3074:"47eeed9c",3091:"279e9591",3172:"b8d43f63",3173:"11dc59ec",3177:"862a7f20",3181:"4988ef2c",3190:"d35b5c93",3211:"ef3c9946",3237:"8c894b14",3240:"e07ee967",3305:"95325593",3315:"f33bd122",3414:"07ceda06",3443:"5730133f",3596:"5f0f22e6",3700:"e17ad200",3751:"462e617c",3787:"52ab570d",3802:"e2170e5a",3847:"fbfeb6c7",3902:"acf81b33",4025:"568cf723",4069:"c743d298",4070:"f43991ba",4075:"f98a3aa9",4103:"4990f899",4121:"157a89b5",4168:"cb01a7cb",4189:"0a5bc595",4199:"63402ef0",4278:"5c448432",4368:"320980da",4395:"e50eeb49",4441:"e9e603ab",4466:"f28ee572",4507:"c111a5f0",4631:"fd585101",4733:"ca300b65",4734:"673dbdc3",4838:"54126050",4845:"efb35fa2",4858:"da0dad13",5133:"6a44f23f",5178:"1610589e",5201:"23c3c93d",5408:"77a54e69",5525:"97a2f6fd",5595:"31a1325e",5654:"3fa47bbb",5713:"a3936ebe",5870:"55745dfa",5917:"02d8c23d",5932:"9a24ac67",6038:"7a0c3adf",6039:"7c149191",6124:"c4a8e353",6159:"8f9b6d55",6173:"e0c22ff2",6193:"0ed894e1",6305:"b01e7195",6539:"870364a2",6638:"ae904a92",6686:"919c82cc",6696:"fe953392",6721:"c64588f9",6768:"adf27db4",6887:"450a30d2",6893:"aaea21cc",6922:"ec64c1f0",7154:"ee073dd9",7212:"0a336fcc",7238:"b7b38229",7253:"7ac1a5ae",7337:"a0d0f322",7396:"c9e431e8",7495:"bf49cec0",7594:"f8435a1d",7611:"b47c244c",7652:"004ce3ac",7756:"ebbf2f8c",7832:"d9b45105",7907:"87ea0b08",7918:"bec7cf3d",7920:"81b3ccb7",7959:"82507ca7",8010:"18b5a55b",8023:"eec18e09",8082:"1c4ae3c9",8084:"3e3bc7f1",8088:"84c5401c",8094:"366f25a9",8122:"76866e35",8186:"e9bf59db",8202:"e3da5bd9",8230:"55fae6e3",8267:"56724c70",8269:"1e8c5801",8276:"df6dead0",8282:"892808be",8285:"2e1f0cd7",8318:"2138a6d9",8392:"8a9a9e25",8443:"b56128a0",8485:"fe004971",8518:"459ca90a",8519:"48e16b50",8570:"e314faf1",8583:"18d14d0c",8596:"d7fa7b40",8703:"2b75446d",8746:"9d4cbe95",8846:"5b8ee9e1",8967:"0cd7ba56",8980:"ee70f411",8984:"b86ccf1d",8988:"8104584a",9050:"7103e5f5",9083:"a7b3b924",9128:"30c2f6cc",9251:"dd28e3aa",9306:"177e6432",9336:"39bfc638",9364:"20b551de",9376:"93942942",9480:"dbd3285c",9524:"0265950c",9591:"4646f1dd",9643:"a9f6ce84",9661:"19959f50",9786:"5e3a7fec",9814:"0f0252a9",9817:"5672d2a5",9842:"e11f3e27",9922:"35da5637",9924:"9fa2944e"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,d)=>Object.prototype.hasOwnProperty.call(e,d),b={},f="documentation:",r.l=(e,d,a,c)=>{if(b[e])b[e].push(d);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==f+a){t=u;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",f+a),t.src=e),b[e]=[d];var l=(d,a)=>{t.onerror=t.onload=null,clearTimeout(s);var f=b[e];if(delete b[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(a))),d)return d(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/ecalc/",r.gca=function(e){return e={17896441:"7918",60746895:"8282",66286265:"180",90184672:"5932","935f2afb":"53",b677d687:"262","33498b04":"381","5e10e9e1":"443",e26167e6:"476",f571fee5:"505","54d7341e":"510",e1df8231:"517",fd734e2c:"583","577efb1d":"628","6bd3279d":"639","498bfcff":"749",ad129716:"754",f54e894e:"770","7557b935":"856","3b0e82f8":"925","15962da1":"996","074935d7":"1042","4aa4fc36":"1044","5a5e553d":"1110","7c623a68":"1310","38d592cf":"1398","2b2be347":"1404","4ee97ba8":"1668",d19423a2:"1686","5989d566":"1709",edb3a98b:"1728","41d1792a":"1748",cc88a418:"2000",c5daebe9:"2013","3409ab5c":"2017","7e6991bb":"2040",f92867ed:"2138","06adec10":"2153","5e3ed04b":"2205","496ed8d5":"2206","2b15d891":"2225","45c974ba":"2459",f85d2ba9:"2488",b15ba3bd:"2547","81dd00c5":"2548",f59fd0ba:"2562","7b02141e":"2638","2c73e373":"2655","502e1773":"2693",cb266b33:"2706","1f7805b6":"2802","18b0ec42":"2962",d5b0ea4b:"2991","11516e85":"3054","7db788f5":"3074","3261da49":"3091","54094f37":"3172","29367e59":"3173",ebdd570f:"3177",fa17a3e5:"3181",b2b17913:"3190","4b5a01f9":"3211","1df93b7f":"3237","66a649c0":"3240",d2b7592b:"3305","880bbd08":"3315",b0a5d2c7:"3414",c21bc46a:"3443","2df92a48":"3596","1287dd43":"3700","3720c009":"3751","2781f0ad":"3787","721cfe60":"3802","084f7ebf":"3847",e8ebc025:"3902",bdf25f4c:"4025","0745e7f0":"4069","5c8ec56d":"4070","61639be2":"4075",bb45b332:"4103","55960ee5":"4121",c93dcb87:"4168",cda37ba5:"4189",af105519:"4199",b2781c74:"4278",a94703ab:"4368","9e4a10de":"4395",d5cd246e:"4441",fb7e7841:"4466","2c19a041":"4507","9e91bf8d":"4631",c3d1f0cd:"4733",cbe196b2:"4734","3fbb770c":"4838","43a26e71":"4845",e023757a:"4858","295f424e":"5133","72083b41":"5178",d77448ee:"5201","2cedaf2f":"5408","00440000":"5595","676abc7a":"5654","51ad0f66":"5713","10c684b0":"5870",d547c67b:"5917","4da8ac19":"6038","06dd1efa":"6039","1e7de7fe":"6124",e9e63826:"6159","0477162f":"6173","428320b6":"6193","7514af75":"6305","1f60d0d4":"6539",fba8a418:"6638","4c3c1dc2":"6686",fa3d98bd:"6696",c8caddd1:"6721","841adc37":"6768","3810e8e5":"6887","22f0e129":"6893",d17664a7:"6922",eee46244:"7154","9e7755e6":"7212","0f7b5825":"7238",e2712b99:"7253","70f31d65":"7337","3aeef25a":"7396","2f04f592":"7495","97732f4b":"7594",df3c944d:"7611",f054b415:"7652","17e50ecd":"7756","0aeda122":"7832",dfbab2f3:"7907","1a4e3797":"7920",f577f5c2:"7959","43a1031a":"8010","977fea76":"8023","47daf389":"8082","29d00dd8":"8084","00bdc23f":"8088","3e38e310":"8094","6adcc868":"8122",c90bf1e8:"8186",e7fdd821:"8202","7d3b81bb":"8230","07b341f3":"8267","1300feb7":"8269",a5dcc804:"8276",c9b29382:"8285","86262f09":"8318","1c663d3d":"8392",d2eeb42a:"8485",a7bd4aaa:"8518",ec96df16:"8519","69fd9be6":"8570",bfdf430b:"8583",e0edce1a:"8596",e862d0e9:"8703","0fd76486":"8746","5c08a402":"8846",ccf7588a:"8967","63ecd22d":"8980",f5b92c38:"8984",a2e97e20:"8988","2ce3b5da":"9050",fe44757f:"9083","8961bfac":"9128",fa0b6059:"9251","382d59b5":"9306","0425b884":"9336","9a118db7":"9364","7cebed78":"9376","163041ea":"9480",d185ab52:"9524","9e136365":"9591",b8c59810:"9643","5e95c892":"9661","4147f87e":"9786","40d6382c":"9814","14eb3368":"9817","4b80f681":"9842",f52ed7e3:"9922",df203c0f:"9924"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(d,a)=>{var b=r.o(e,d)?e[d]:void 0;if(0!==b)if(b)a.push(b[2]);else if(/^(1303|532)$/.test(d))e[d]=0;else{var f=new Promise(((a,f)=>b=e[d]=[a,f]));a.push(b[2]=f);var c=r.p+r.u(d),t=new Error;r.l(c,(a=>{if(r.o(e,d)&&(0!==(b=e[d])&&(e[d]=void 0),b)){var f=a&&("load"===a.type?"missing":a.type),c=a&&a.target&&a.target.src;t.message="Loading chunk "+d+" failed.\n("+f+": "+c+")",t.name="ChunkLoadError",t.type=f,t.request=c,b[1](t)}}),"chunk-"+d,d)}},r.O.j=d=>0===e[d];var d=(d,a)=>{var b,f,c=a[0],t=a[1],o=a[2],n=0;if(c.some((d=>0!==e[d]))){for(b in t)r.o(t,b)&&(r.m[b]=t[b]);if(o)var i=o(r)}for(d&&d(a);n<c.length;n++)f=c[n],r.o(e,f)&&e[f]&&e[f][0](),e[f]=0;return r.O(i)},a=self.webpackChunkdocumentation=self.webpackChunkdocumentation||[];a.forEach(d.bind(null,0)),a.push=d.bind(null,a.push.bind(a))})()})(); \ No newline at end of file diff --git a/docs/about/getting_started/cli/faq/index.html b/docs/about/getting_started/cli/faq/index.html new file mode 100644 index 0000000000..ceea805b76 --- /dev/null +++ b/docs/about/getting_started/cli/faq/index.html @@ -0,0 +1,43 @@ +<!doctype html> +<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-about/getting_started/cli/faq" data-has-hydrated="false"> +<head> +<meta charset="UTF-8"> +<meta name="generator" content="Docusaurus v3.1.1"> +<title data-rh="true">FAQ / Troubleshooting | eCalc™ Docs + + + + +

    FAQ / Troubleshooting

    +

    While running eCalc as a Unix command-line tool, you may come across seemingly incomprehensible error messages. +This page tries to explain some common error messages and proposes how to fix them.

    +

    Indentation errors

    +

    In YAML, the indentation is very important and specifies the level in the hierarchy for the input. +If you have the wrong indentation somewhere, you may get both YAML read errors and/or eCalc setup errors.

    +

    Error messages due to YAML read problems

    +

    The following error messages are common when you have formatting issues in your YAML file:

    +
    mapping values are not allowed here
    +
    while scanning a simple key in "<setupfile.yml>", line <n>, column <m>
    could not find expected ':', line <n>, column <m>
    +
    while parsing a block mapping in <setupfile>, line <n>, column <m>
    expected <block end>, but found '<block mapping start>'
    +

    Error messages due to invalid eCalc configuration

    +

    The configuration expects a sub-hierarchy of data. After reading YAML, this data sub-hierarchy would be of object type +dictionary (dict) and in some cases contain lists or other objects. If invalid data is input, the error message would +indicate that the type is wrong because it is not a 'dict'/'list' or other type

    +
    None should be instance of 'dict'
    +
    None should be instance of 'list'
    +

    Proposed solution

    +

    Check your YAML setup file for correct indentation and correct format of values for each eCalc key.

    +

    Special characters in Unicode

    +

    eCalc uses ruamel.yaml to read the YAML setup files. Some (text) files have an encoding not supported and will thus result in an error message.

    +

    One example of this is an unrecognized "BOM" character in "UTF-8 Unicode".

    +

    Error message

    +
    while scanning a simple key in "<setupfile.yml>", line <n>, column 1
    could not find expected ':', line <n>, column 1
    +

    Proposed solution

    +

    Check the encoding of your setupfile (and inputfiles):

    +
    $ file <setupfile>.yml
    +

    If the output of this is not "ASCII text", convert your file to "US-ASCII" using iconv.

    +

    Example when <setupfile>.yml is of type "UTF-8"

    +
    $ iconv -f UTF-8 -t US-ASCII//TRANSLIT -o <new_setup_file_name_ascii>.yml <old_setup_file_name_utf-8>.yml
    +

    Now try to run again using the new file <new_setup_file_name_ascii>.yml.

    + + \ No newline at end of file diff --git a/docs/about/getting_started/cli/index.html b/docs/about/getting_started/cli/index.html new file mode 100644 index 0000000000..841cdd7297 --- /dev/null +++ b/docs/about/getting_started/cli/index.html @@ -0,0 +1,37 @@ + + + + + +CLI | eCalc™ Docs + + + + +

    eCalc CLI

    +
    info

    It is currently recommended to use the CLI instead of the Python library directly due to upcoming breaking changes in the Python library

    +

    The current recommended way to use eCalc is through the CLI (Command Line Interpreter). This is a part of the +eCalc Python library, and should be accessible from the command line as ecalc.

    +

    See all commands and options in the CLI reference

    +

    Example Usage

    +

    Use show command to inspect results

    +

    First run ecalc (here shown with default output folder)

    +
    $ ecalc run /somelocation/myfield.yaml --output-folder output
    +

    Enter the output folder

    +
    $ cd output
    +

    Show results for a single component

    +
    $ ecalc show results --name waterinj --output-format json
    +

    or as csv

    +
    $ ecalc show results --name waterinj --output-format csv
    +

    or write the full csv result to a file (this will give the same output as ecalc run with the csv option)

    +
    $ ecalc show results --output-format csv --file results.csv
    +

    Output Monthly CSV data

    +
    $ ecalc run -f MONTH /somelocation/myfield.yml
    +

    Specify different output folder

    +
    $ ecalc run -o /somedirectory/foo/bar/ /somelocation/myfield.yml
    +

    Specify a different naming prefix to outputs

    +
    $ ecalc run -n myfield_myproject /somelocation/myfield.yml
    +

    Show stack trace for debugging

    +
    $ ecalc run --log DEBUG /somelocation/myfield.yml
    + + \ No newline at end of file diff --git a/docs/about/getting_started/index.html b/docs/about/getting_started/index.html new file mode 100644 index 0000000000..e97cd7ef86 --- /dev/null +++ b/docs/about/getting_started/index.html @@ -0,0 +1,35 @@ + + + + + +Getting started | eCalc™ Docs + + + + +

    API Reference

    +
    info

    Currently the only officially supported method is the eCalc CLI using eCalc YAML models.

    +

    There are three options to run eCalc models:

    + +

    What method should I choose?

    +

    eCalc CLI

    +

    Choose the eCalc CLI option if you:

    +
      +
    • Don't know much about programming
    • +
    • Have simple requirements
    • +
    • Can define the eCalc models statically
    • +
    +

    Python Library

    +

    Choose the Python Library option if you:

    +
      +
    • Are a developer or advanced user, and want to build eCalc models and get results programmatically
    • +
    • Use Python, and you need to use (parts of) eCalc as a dependency
    • +
    • Need access to "inner core functionality" of eCalc
    • +
    +
    note

    Python Library is not yet officially available and not recommended to use due to upcoming breaking changes very soon

    + + \ No newline at end of file diff --git a/docs/about/getting_started/library/index.html b/docs/about/getting_started/library/index.html new file mode 100644 index 0000000000..c3e7481c85 --- /dev/null +++ b/docs/about/getting_started/library/index.html @@ -0,0 +1,17 @@ + + + + + +Python Library | eCalc™ Docs + + + + +

    Python Library

    +
    warning

    It is currently not recommended to use the Python library due to upcoming breaking changes.

    +

    If you choose to use the Python library programmatically when creating eCalc models, there is a greater flexibility in +dynamically changing the eCalc models.

    +

    See all commands and options in the API reference

    + + \ No newline at end of file diff --git a/docs/about/getting_started/yaml/index.html b/docs/about/getting_started/yaml/index.html new file mode 100644 index 0000000000..0e6fc415b4 --- /dev/null +++ b/docs/about/getting_started/yaml/index.html @@ -0,0 +1,17 @@ + + + + + +YAML | eCalc™ Docs + + + + +

    YAML

    +

    We have chosen the way to model eCalc models is in the YAML format. For a simple introduction to YAML, please see here

    +

    The eCalc YAML model can either be run directly with the eCalc CLI or loaded using the Python library

    +

    For getting started setting up your first eCalc YAML model, please see Setup an eCalc Model, +look at some example YAMLs here and refer to the vocabulary that we use here.

    + + \ No newline at end of file diff --git a/docs/about/index.html b/docs/about/index.html new file mode 100644 index 0000000000..82e8691a6f --- /dev/null +++ b/docs/about/index.html @@ -0,0 +1,25 @@ + + + + + +Introduction | eCalc™ Docs + + + + +

    Introduction to eCalc™

    +

    The eCalc™ technology is being developed by Equinor within the Technology, Digital and Innovation (TDI) business area.

    +

    What is eCalc™?

    +

    eCalc™ is a software tool for calculation of energy demand and greenhouse gas emissions from oil and gas production and processing. It enables the cross-disciplinary collaboration required to achieve high-quality and transparent energy and GHG emission prognosis and decision support.

    +

    eCalc™ performs energy and emission calculations by integrating data, knowledge and future plans from different disciplines. This could be production and injection profiles from the reservoir engineer, characteristics of energy consuming equipment units such as gas turbines, compressors and pumps from the facility engineer, and emission factors for different fuels from the sustainability engineer. The main idea is using physical or data-driven models to relate production rates and pressures to the required processing energy and resulting emissions. Integrated bookkeeping for all emission sources is offered.

    +

    eCalc™ uses a bottom-up approach to give high-quality installation and portfolio level forecasts at the same time as detailed insights about the energy drivers and processing capacities for the individual installation.

    +

    +

    Why should I use eCalc™?

    +

    By using eCalc™ you will be able to forecast your energy consumption and emissions with consistency and transparency. You will also be enabled to study the effect on energy demand and emissions of your investment opportunities as well as studying emission reduction measures.

    +

    How to use eCalc™?

    +

    To use eCalc™ you need to create a model setup of your asset. +This is described in the Modelling section.

    +

    Once the model is ready, you can run the eCalc™ calculator. Different user interfaces for the calculator are offered. These are described in detail in the Getting started section.

    + + \ No newline at end of file diff --git a/docs/about/migration_guides/index.html b/docs/about/migration_guides/index.html new file mode 100644 index 0000000000..353cf9394b --- /dev/null +++ b/docs/about/migration_guides/index.html @@ -0,0 +1,13 @@ + + + + + +Migrating eCalc versions | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/migration_guides/v7_to_v8/index.html b/docs/about/migration_guides/v7_to_v8/index.html new file mode 100644 index 0000000000..43706f7daa --- /dev/null +++ b/docs/about/migration_guides/v7_to_v8/index.html @@ -0,0 +1,109 @@ + + + + + +v7 to v8 | eCalc™ Docs + + + + +

    v7 to v8

    +

    In this migration guide you will find:

    +
      +
    1. YAML changes
    2. +
    3. CLI changes
    4. +
    +

    Yaml migration

    +

    Migration overview

    +

    This doc guides you through migrating an existing eCalc™ model from version v7 to v8.

    +

    We try to make this as easy as possible, and provide a step-by-step migration guide.

    +

    Main differences

    +
      +
    1. All component names must be unique to avoid ambiguity in reporting
    2. +
    3. UNITS are required when setting up compressor and pump charts
    4. +
    5. Restrict allowed characters in component names and emission names
    6. +
    7. NAME no longer used for LTP reporting, use CATEGORY instead
    8. +
    9. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)
    10. +
    +

    1. All component names must be unique

    +

    All component names must be unique in order to avoid ambiguity in reporting. Components include asset/ecalc-model, installation, +generator sets, electricity consumers, fuel consumers and direct emitters.

    +
    main.yaml
    INSTALLATIONS:
    - NAME: Installation
    ...

    GENERATORSETS:
    - NAME: Genset
    ...
    CONSUMERS:
    - NAME: Consumer
    ...
    - NAME: Consumer
    ...
    - NAME: Genset
    ...

    FUELCONSUMERS:
    - NAME: FuelConsumer
    ...
    - NAME: FuelConsumer
    ...

    DIRECT_EMITTER:
    - NAME: DirectEmitter
    ...
    - NAME: DirectEmitter
    ...
    - NAME: Installation
    ...
    +

    This model is no longer valid, and the duplicated installation names are highlighted. +To make this model valid these names needs to be changed. For example:

    +
    main.yaml
    INSTALLATIONS:
    - NAME: Installation_A
    ...

    GENERATORSETS:
    - NAME: Genset_A
    ...
    CONSUMERS:
    - NAME: Consumer_A
    ...
    - NAME: Consumer_B
    ...
    - NAME: Genset_B
    ...

    FUELCONSUMERS:
    - NAME: FuelConsumer_A
    ...
    - NAME: FuelConsumer_B
    ...

    DIRECT_EMITTER:
    - NAME: DirectEmitter_A
    ...
    - NAME: DirectEmitter_B
    ...
    - NAME: Installation_B
    ...
    +

    This will make it possible to attribute results to each consumer by name, and removes any an ambiguity +when interpreting eCalc™ results.

    +

    See INSTALLATION, +GENERATORSET, +CONSUMERS, +FUELCONSUMERS, +VENTING_EMITTER +for more details about the relevant keywords.

    +
    Are you using power from shore?

    We have implemented temporal categories for consumers to support the power from shore implementation in use.

    Instead of duplicating the generator set and setting the POWER-FROM-SHORE category, +it is now possible to change the category at a certain date. This is the same syntax as other temporal models.

    CATEGORY:
    2020-01-01: TURBINE-GENERATOR
    2030-01-01: POWER-FROM-SHORE

    See Power from shore for more information.

    +

    2. UNITS for pump and compressor charts

    +

    Compressor and pump charts has previously had implicit units, without requiring the operator to specify what +units are actually being used. This increases the risk of wrong specification, and makes it more difficult to hand +over models.

    +

    To amend this issue, and to open up for more flexibility in regard to units, it is now mandatory to specify.

    +

    To keep the old defaults you can do the following:

    +
    main.yaml
    FACILITY_INPUTS:
    - NAME: single_speed_pump_chart
    FILE: <some input csv>
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE
    - NAME: variable_speed_pump_chart
    FILE: <some input csv>
    TYPE: PUMP_CHART_VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    MODELS:
    - NAME: single_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: FRACTION
    CURVES:
    ...
    - NAME: variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: FRACTION
    CURVES:
    ...

    ...
    +

    See COMPRESSOR CHART +and PUMP CHART +for more details about the relevant keywords.

    +

    3. Restrict allowed characters in component names and emission names

    +

    Component names can now only consist of letters (a-z, upper and lower case), numbers (0-9), underscore (_), hyphen (-) and space ( ).

    +

    Emission names can now only consist of letters (a-z, upper and lower case), numbers (0-9) and underscore (_).

    +

    4. NAME no longer used for LTP reporting, use CATEGORY instead

    +

    We have categories for FLARE and COLD-VENTING-FUGITIVE, and have introduced categories for LOADING and STORAGE. These should now be used instead of NAME.

    +
    main.yaml
    INSTALLATIONS:
    - NAME: Installation_A
    ...

    GENERATORSETS:
    - NAME: Genset_A
    ...
    CONSUMERS:
    - NAME: Consumer_A
    ...

    FUELCONSUMERS:
    - NAME: loading # Name will no longer be used in LTP reporting
    CATEGORY: LOADING # Category must be used to include it in LTP reporting
    FUEL: Fuel_A
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: Oil_rate_per_timestep
    ...
    - NAME: storage # Name will no longer be used in LTP reporting
    CATEGORY: STORAGE # Category must be used to include it in LTP reporting
    FUEL: Fuel_B
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: Oil_rate_per_timestep
    ...
    - NAME: flare # Name will no longer be used in LTP reporting
    CATEGORY: FLARE # Category must be used to include it in LTP reporting
    FUEL: Fuel_C
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: Oil_rate_per_timestep
    ...
    - NAME: cold_venting_fugitives_nmvoc # Name will no longer be used in LTP reporting
    CATEGORY: COLD-VENTING-FUGITIVE # Category must be used to include it in LTP reporting
    FUEL: Fuel_D # The fuel specification determines what emissions will be used in LTP
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: Oil_rate_per_timestep
    ...

    ...
    +

    5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)

    +

    Only a limited pre-defined set of categories is valid input to the CATEGORY-keyword, it is no longer possible to use custom names. +The input is case-sensitive and must match exactly with the pre-defined names. See CLI Docs for full documentation.

    +

    CLI migration

    +

    This version includes some changes to how the CLI is invoked and changes to default behavior.

    +
      +
    1. Invoking eCalc™ directly is no longer supported, use ecalc run instead.
    2. +
    3. Log level should be specified as the first argument + log to file
    4. +
    5. Model yaml-file needs to come last
    6. +
    7. Extrapolation (correction) is now always used and cannot be disabled
    8. +
    9. Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export
    10. +
    11. Simple results are now default for json
    12. +
    +

    1. Invoking eCalc™ directly is no longer supported, use ecalc run instead.

    +

    To make it possible to add ecalc show we added the ecalc run command. In v8 it is required to specify run when calculating a model.

    +

    If you previously ran eCalc™ with this command

    +
    $ ecalc ./my-model.yaml
    +

    you should now use

    +
    $ ecalc run ./my-model.yaml
    +

    2. Log level should be specified as the first argument + log to file

    +

    Previously you could specify the --log argument after run, this is no longer possible.

    +

    This is the new way of specifying log level.

    +
    $ ecalc --log DEBUG run ./my-model.yaml
    +

    In addition we are introducing --log-folder <path> where you can direct and store the log in a given path to easily +look at the log of running later than scrolling in the terminal window. Due to the excessive amount of logs that eCalc +produces when running at low log levels, we have set the log to only log at WARNING and above (WARNING + ERROR messages). +The user must make sure that the path/folder exists before running and that you have correct permissions, as eCalc will NOT +do that for you.

    +
    $ ecalc --log DEBUG --log-folder . run ./my-model.yaml
    +

    As you see above, the argument MUST be added BEFORE the run argument.

    +

    3. Model yaml-file needs to come last

    +

    When running eCalc™ you will now need to set the model file argument last.

    +

    ecalc [OPTIONS] COMMAND [ARGS] [MODEL YAML-file]

    +

    See the CLI Docs or run ecalc --help for the full documentation.

    +

    4. Extrapolation correction is no longer optional

    +

    We have removed the extrapolation correction argument. eCalc™ will now always "extrapolate" values. +The main reason for making this change was that the feature was in general always used, in addition to being a confusing term. +Let us know if you have a use-case where this was needed.

    +

    5. Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export

    +

    To prepare for Open Source and to make the LTP export more agnostic (even though the column names are heavily +affected by Centuries), we simplify the argument to get LTP results. See CLI Docs for +full documentation.

    +

    6. Simple results are now default for json

    +

    Detailed output (or any json) should mainly be used for QA and advanced users, and is no longer shown by default. To keep old behavior, the user now +needs to use the --detailed-output option when running the CLI. See CLI reference docs +for more details.

    + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8-1_to_v8-2/index.html b/docs/about/migration_guides/v8-1_to_v8-2/index.html new file mode 100644 index 0000000000..1401a7e934 --- /dev/null +++ b/docs/about/migration_guides/v8-1_to_v8-2/index.html @@ -0,0 +1,62 @@ + + + + + +v8.1 to v8.2 | eCalc™ Docs + + + + +

    v8.1 to v8.2

    +
      +
    1. Model changes
    2. +
    3. Result changes
    4. +
    5. Behaviour
    6. +
    +

    Modelling

    +

    YAML

    +

    LTP

    +
      +
    1. Two new consumer categories are added: HEATER and BOILER
    2. +
    +

    Result

    +

    Operational settings used is now 1-based

    +

    Consumer systems will now refer to the first operational setting as 1 instead of 0. 0 means that "No setting was used", indicating that none of the operational settings was able to handle the stream. This will make it easier for users to find the corresponding operational setting that is/was active for the different timesteps.

    +

    Resampling of rates changed from forward filling to average rates

    +

    All calculations are performed on a global time vector, which is the union of all dates found in the +input resource files (csv files) where INFLUENCE_TIME_VECTOR is set to +True, dates found in the eCalc model yaml-file (temporal models), and dates in the requested output frequency.

    +

    If the global time vector and the dates in the requested output frequency does not coincide fully, a resampling of the +results needs to be performed. Previously this was done by simply picking the first +available rate in the time interval (forward filling). The rates are thought to be constant in a period between two +dates, hence the forward filling will disconnect the rates and the cumulative volumes. This has now been changed to +calculating the average rate from all dates in the global time vector within a date range in the requested output +frequency, to keep the rate and cumulative consistent with each other. This average will take into +account the lengths of the periods and the regularity within each period. The figure below shows a comparison of how the +resampling would previously have been done compared to how it is done now when making quarterly output from monthly results.

    +

    +

    TLDR; this change will make it possible to use the rate output data (rate from a point in time) from eCalc correctly.

    +

    LTP .tsv file

    +
      +
    1. Column Total CO2 is removed from LTP output (both for fixed & mobile installations)
    2. +
    3. Add relevant columns in ltp-file for the two new consumer categories HEATER and BOILER
    4. +
    5. Re-order some of the columns in the ltp-file, for more logical order
    6. +
    7. Turbine-columns are now filtered on the two consumer categories TURBINE-GENERATOR and GAS-DRIVEN-COMPRESSOR, as it is no longer only turbines that are consumers of FUEL-GAS
    8. +
    +

    STP .tsv file

    +
      +
    1. Report CO2 emissions for both fixed- and mobile installations
    2. +
    3. Report CH4 emissions for fixed installations
    4. +
    +

    Emissions, structure and order

    +

    The JSON result file has changed format for emissions. Emissions were previously listed in a list, but is now listed in a map:

    +
        "emissions":
    [
    {
    "name": "co2"
    ...
    +

    to

    +
        "emissions":
    {
    "co2":
    {
    "name": "co2"
    ...
    +

    This will/may also affect the order of which emissions are presented in the result file, but should from now on be consistent.

    +

    Behaviour

    +

    Conditions

    +

    eCalc will now consistently NOT evaluate and run calculations if a CONDITION is not fulfilled. Conditions can be set on most energy consumers, to indicate whether the consumer is active or not at a given timestep. Previously the consumer was evaluated even though a condition was not fulfilled to reflect "what would have happened if it was active". However this has proven to be difficult for users to understand and remember when the overall model result is being evaluated and analyzed. In order to prevent user errors, we have decided to consistently NOT evaluate a consumer for timesteps where it is disabled (conditions evaluated to true).

    + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8-2_to_v8-3/index.html b/docs/about/migration_guides/v8-2_to_v8-3/index.html new file mode 100644 index 0000000000..6f7cd7c6c6 --- /dev/null +++ b/docs/about/migration_guides/v8-2_to_v8-3/index.html @@ -0,0 +1,14 @@ + + + + + +v8.2 to v8.3 | eCalc™ Docs + + + + +

    v8.2 to v8.3

    +

    It is no longer accepted to change ENERGY_USAGE_MODEL TYPE over time, within one consumer. In case TYPE evolution is needed, the model can be split in two consumers.

    + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8-3_to_v8-4/index.html b/docs/about/migration_guides/v8-3_to_v8-4/index.html new file mode 100644 index 0000000000..29f01f1610 --- /dev/null +++ b/docs/about/migration_guides/v8-3_to_v8-4/index.html @@ -0,0 +1,14 @@ + + + + + +v8.3 to v8.4 | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8-5_to_v8-6/index.html b/docs/about/migration_guides/v8-5_to_v8-6/index.html new file mode 100644 index 0000000000..d6eb45fb21 --- /dev/null +++ b/docs/about/migration_guides/v8-5_to_v8-6/index.html @@ -0,0 +1,17 @@ + + + + + +v8.5 to v8.6 | eCalc™ Docs + + + + +

    v8.5 to v8.6

    +

    Economics

    +

    Economic details have been deprecated from eCalc. +If you have used input data such as TAX, QUOTA and PRICE for fuel and emissions in your model, +they will be ignored and hence not reported. It will be treated as an error in a future version of eCalc.

    + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8-6_to_v8-7/index.html b/docs/about/migration_guides/v8-6_to_v8-7/index.html new file mode 100644 index 0000000000..5d39000f08 --- /dev/null +++ b/docs/about/migration_guides/v8-6_to_v8-7/index.html @@ -0,0 +1,14 @@ + + + + + +v8.6 to v8.7 | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8.7_to_v8.8/index.html b/docs/about/migration_guides/v8.7_to_v8.8/index.html new file mode 100644 index 0000000000..b828d60089 --- /dev/null +++ b/docs/about/migration_guides/v8.7_to_v8.8/index.html @@ -0,0 +1,35 @@ + + + + + +v8.7 to v8.8 | eCalc™ Docs + + + + +

    v8.7 to v8.8

    +

    In this migration guide you will find:

    +
      +
    1. YAML changes
    2. +
    +

    Yaml migration

    +

    1. Changes to VENTING_EMITTERS

    +
      +
    • Update VENTING_EMITTERS to support rate TYPE and UNIT
    • +
    • EMITTER_MODEL is deprecated and replaced by a new keyword EMISSION
    • +
    • In the new keyword EMISSION the following should be specified: +
        +
      • NAME of the emission
      • +
      • RATE, including VALUE and optionally UNIT and TYPE
      • +
      +
    • +
    +

    Previously, the format looked like this:

    +
    VENTING_EMITTERS:
    - NAME: <emitter name>
    CATEGORY: <category>
    EMISSION_NAME: <emission name>
    EMITTER_MODEL:
    - EMISSION_RATE: <emission rate [kg/day]>
    +

    But the new valid definition of VENTING_EMITTERS in the yaml is now:

    +
    VENTING_EMITTERS:
    - NAME: <emitter name>
    CATEGORY: <category>
    EMISSION:
    NAME: <emission name>
    RATE:
    VALUE: <emission rate>
    UNIT: <emission rate unit, default kg/d>
    TYPE: <emission rate type, default STREAM_DAY>
    +

    Example with the new yaml-definition of VENTING_EMITTERS:

    +
    VENTING_EMITTERS:
    - NAME: SomeVentingEmitter
    CATEGORY: COLD-VENTING-FUGITIVE
    EMISSION:
    NAME: CH4
    RATE:
    VALUE: 4
    UNIT: kg/d
    TYPE: STREAM_DAY
    + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8_to_v81/index.html b/docs/about/migration_guides/v8_to_v81/index.html new file mode 100644 index 0000000000..558e62dd2c --- /dev/null +++ b/docs/about/migration_guides/v8_to_v81/index.html @@ -0,0 +1,64 @@ + + + + + +v8 to v8.1 | eCalc™ Docs + + + + +

    v8 to v8.1

    +

    In this migration guide you will find:

    +
      +
    1. YAML changes
    2. +
    +

    Yaml migration

    +

    Migration overview

    +

    This doc guides you through migrating an existing eCalc™ model from version v8 to v8.1.

    +

    We try to make this as easy as possible, and provide a step-by-step migration guide.

    +

    1. Changes to TIME_SERIES

    +
      +
    • RATE_INTERPOLATION_TYPE is renamed to INTERPOLATION_TYPE
    • +
    • New time series type: DEFAULT with default RIGHT interpolation
    • +
    • RESERVOIR type is removed
    • +
    +

    Previously, it looked like this:

    +
    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: <MISCELLANEOUS/RESERVOIR>
    FILE: <path to file>
    INFLUENCE_TIME_VECTOR: <True/False>
    EXTRAPOLATION: <True/False>
    RATE_INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>
    +

    But the new valid definition of time series in the yaml is now:

    +
    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: <MISCELLANEOUS/DEFAULT>
    FILE: <path to file>
    INFLUENCE_TIME_VECTOR: <True/False>
    EXTRAPOLATION: <True/False>
    INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>
    +
    important

    We have understood that the previous definitions lead to misunderstandings and errors. It is therefore of high importance +that you now go through the reservoir data timeseries one-by-one and make sure that the correct type and interpolation type +is set. See below for the 2 possibilities of migrating from the old RESERVOIR type.

    +

    If you previously used the RESERVOIR type, you know have 2 options. See below.

    +
    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: RESERVOIR
    ...
    +

    If you know that the reservoir data comes from Centuries, and/or that the data is right-interpolated, then you should +change to the new DEFAULT type, like this:

    +
    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: DEFAULT
    ...
    +
    important

    If you do NOT know the origin of the timeseries or whether it uses LEFT or RIGHT interpolation, you MUST contact +somebody that can help you out to make this right. The consequences of doing it wrong is that the calculations is +easily offset by 1 year.

    +

    2. Not possible to have different interpolation types for vectors within one file

    +

    Previously eCalc™ tried to recognize vectors as rates- or non-rates for time series. +Hence, rate-vectors were set to use LEFT interpolation type, or if the type was +MISCELLANEOUS it was set to the method given by the user. If the vector was not recognized +as a rate, the interpolation method was automatically set to LINEAR, regardless of user input.

    +

    This behaviour is now changed:

    +
    important

    eCalc™ will no longer auto-detect rates and set interpolation type based on recognized +rate vectors. If different vectors (e.g. pressures and rates) should be interpolated differently, they now need +to be in separate files.

    +

    3. Empty data in time series columns no longer allowed

    +

    Each column in a time series resource should have data for all time steps, eCalc™ will now show an error if this is not the case. +The reason behind this is that it can be ambiguous to know whether missing data should be interpolated or considered as 0. Now +users will have to be explicit, and this will lead to fewer ambiguities and errors.

    +

    4. New LTP Category: STEAM-TURBINE-GENERATOR

    +

    A new LTP requirement to report steam turbine generator consumption/generation. This affects the total generator production +negatively (reduced load), as some energy is provided through this steam turbine generator. It is therefore modelled as a consumer +with a negative load in order to subtract from the total energy provided by the generator set.

    +

    The load on the steam turbine generator is reported separately in a new column in LTP Export.

    +

    Added new CATEGORY with name STEAM-TURBINE-GENERATOR to report power generated by a steam turbine. +Should be negative load to deduct from genset. See excerpt example below:

    +
        - NAME: steamgen
    CATEGORY: STEAM-TURBINE-GENERATOR
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: -1.1 # MW
    +
    important

    Set negative load for STEAM-TURBINE-GENERATOR (similar to the way OFFSHORE-WIND is being used)

    + + \ No newline at end of file diff --git a/docs/about/miscellaneous/index.html b/docs/about/miscellaneous/index.html new file mode 100644 index 0000000000..720844e011 --- /dev/null +++ b/docs/about/miscellaneous/index.html @@ -0,0 +1,43 @@ + + + + + +Output data | eCalc™ Docs + + + + +

    Output data

    +

    In general, each model is outputted to a .csv file with what is viewed as necessary information for an operator. +Further details, if necessary, can be seen in a .json file.

    +

    Decimals and significant digits in eCalc

    +

    Output numbers/result in eCalc are currently given at "6 significant digits/figures accuracy". This statement is valid +for positive and negative integers and float numbers. Read more about significant digits here.

    +
    caution

    Be aware that the output is never more accurate than the input (ie the measurements/prognosis). So, e.g. if your input +is rounded off to "nearest million", then that is also how you should consider the accuracy of the output. The output accuracy +is not more reliable than the lowest input accuracy given.

    +

    In practice, for the output, this means:

    +
      +
    • Numbers higher than 1e6 (and lower than -1e6) will not have digits after decimal sign
    • +
    • Numbers smaller than 1e-6 (and -1e-6) is considered to be 0 (rounded to 0), and we will +not operate with more than 6 digits after the decimal sign.
    • +
    • We only round numbers in the decimal part, to within the "significant digits"
    • +
    +

    We may in the future allow user to specify number of significant digits in output, but for now it is fixed.

    +

    Quality control

    +

    eCalc™ has a quality control function, which is represented by a validity flag. This validity flag gives the user information to whether or not their model is valid. +This flag can either be seen in the .csv or .json output file. +Essentially, if the <name>.is_valid is shown as a 1, the level is considered to be valid, and on the opposite end if it is shown to be 0, it can be considered invalid.

    +

    The most likely reason for an invalid flag is that a consumer (pump, compressor) is operating outside its operational limit (potentially outside the pump/compressor chart).

    +

    This validity flag can be seen on multiple component levels:

    +
      +
    • The highest level being the eCalc™ model (or otherwise known as the asset level). If the highest level flag is given as invalid, this means that any number of the installations in the model can have one or more invalid consumer.
    • +
    • If you dig further down in the component levels, the next would be on installation level. This means that if this flag is given as invalid, any consumer within that installation can be invalid.
    • +
    • Past the installation level, is the consumer level. Here, the validity of the individual consumers can be seen.
    • +
    • If the consumer is a multi-stage compressor (for example), the validity of each compression stage can be viewed (only in the .json file when detailed output is selected)
    • +
    +

    This is further illustrated in the diagram below:

    +

    Validity flag example

    + + \ No newline at end of file diff --git a/docs/about/modelling/examples/advanced/index.html b/docs/about/modelling/examples/advanced/index.html new file mode 100644 index 0000000000..55ce17636c --- /dev/null +++ b/docs/about/modelling/examples/advanced/index.html @@ -0,0 +1,144 @@ + + + + + +Advanced model | eCalc™ Docs + + + + +

    Advanced model example

    +

    This is a model very similar to Simple example. The main difference is the use of more advanced +energy usage models and consumer systems, and the addition of a second installation.

    +

    Both installations exports oil (OIL_PROD) and gas (GAS_PROD). +The installations emits CO2 and CH4.

    +

    The following is an example with one installation called Installation A and Installation B.

    + +

    The results of a performed characterization of the equipment are listed below:

    +
    ConsumerTypeDescription
    Generator set AGenerator setVariable fuel consumer with electricity to fuel function
    Base production load APower consumerProduction base load varying depending on a binary condition
    Gas export compressor APower consumerVariable consumption depending on gas sales rate
    Produced water reinjection pump APower consumerVariable consumption depending on water production rate and water injection rate. The pump suction pressure is 10 bar and discharge pressure is 200 bar.
    Sea water injection pump APower consumerVariable consumption depending on a complex combination on water injection rate and water production rate
    Flare ADirect fuel consumerFlare A
    Generator set BGenerator setVariable fuel consumption with electricity to fuel function
    Base production load BPower consumerProduction base load at 7.6 MW
    Gas export compressor BDirect fuel consumerVariable fuel consumption depending on gas sales rate
    Flare BDirect fuel consumerFlare B
    +

    YAML model overview

    +

    The YAML model consist of these main components:

    + +

    The YAML setup file looks like this:

    +
    model.yaml
    TIME_SERIES:
    <placeholder>
    FACILITY_INPUTS:
    <placeholder>
    FUEL_TYPES:
    <placeholder>
    VARIABLES:
    <placeholder>
    INSTALLATIONS:
    <placeholder>
    +

    We will now replace the placeholders for each of the main keywords above.

    +

    TIME_SERIES

    +

    The reservoir variables, in this case, are found in a CSV (Comma separated file) production_data.csv. +We give the time-series data a name that can be referenced as variables elsewhere in the form <NAME>:<NAME OF COLUMN>. +See TIME_SERIES for further details.

    +
    model.yaml
    TIME_SERIES:
    - NAME: SIM
    TYPE: DEFAULT
    FILE: base_profile.csv
    +

    FACILITY_INPUTS

    +

    We specify CSV input data for processing equipment using FACILITY_INPUTS. This is used for generatorsets, +tabulated/sampled models and pump charts. See FACILITY_INPUTS for further details.

    +

    Here we define a tabulated genset, a sampled compressor, and a single speed pump chart. +Note that more complicated energy models are defined under the MODELS-keyword.

    +
    model.yaml
    FACILITY_INPUTS:
    - NAME: genset
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: gasexp
    FILE: compressor_sampled.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: pump_chart
    FILE: pump_chart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE
    +

    FUEL_TYPES

    +

    In this example there are two FUEL_TYPES - fuel_gas and bad_fuel_gas. +These are used for Installation A and Installation B respectively. +Here we also define emissions in CO2 and CH4:

    +
    model.yaml
    FUEL_TYPES:
    - NAME: fuel_gas
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.20 #kg/Sm3
    - NAME: CH4
    FACTOR: 0.01 #kg/Sm3
    - NAME: bad_fuel_gas
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 5.0 #kg/Sm3
    - NAME: CH4
    FACTOR: 0.01 #kg/Sm3
    +

    MODELS

    +

    This advanced example requires some energy usage models to be defined under the model section. See MODELS for details.

    +

    Here we specify:

    +
      +
    • Compressor chart based on design points
    • +
    • Compressor chart based on chart data
    • +
    • Medium density fluid
    • +
    • Gas turbine
    • +
    • Simplified compressor train model
    • +
    +
    model.yaml
    MODELS:
    - NAME: generic_from_design_point_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: 0.75
    DESIGN_RATE: 10000
    DESIGN_HEAD: 80
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: KJ_PER_KG
    EFFICIENCY: FRACTION
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M # M or KJ_PER_KG
    EFFICIENCY: FRACTION
    CURVES:
    FILE: compressor_chart.csv
    - NAME: medium_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM
    - NAME: turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # [MJ/Sm3]
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: medium_fluid
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: predefined_variable_speed_compressor_chart
    +

    See MODELS for further details.

    +

    VARIABLES

    +

    To run the model it is recommended to specify VARIABLES, +instead of hard coding values in difference places. This makes it easier to develop, maintain and understand the model +by allowing descriptive variable names and avoid duplications.

    +

    For our model, we specify the following variables:

    +
    model.yaml
    VARIABLES:
    hydrocarbon_export_sm3_per_day:
    VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000
    gas_export_rate_sm3_per_day:
    VALUE: SIM;GAS_PROD
    water_injection_rate:
    VALUE: SIM;WATER_INJ
    gas_export_condition:
    VALUE: SIM;GAS_PROD > 0
    base_production_load_mw:
    VALUE: 7.6 {+} 4.1 {*} (SIM;GAS_LIFT > 0)
    water_injection_condition:
    VALUE: SIM;WATER_PROD >0
    flare_a_fuel_rate_sm3_day:
    2020-06-01:
    VALUE: 5000
    2030-01-01:
    VALUE: 2000
    flare_b_fuel_rate_sm3_day:
    2020-06-01:
    VALUE: 10000
    2030-01-01:
    VALUE: 7000
    +

    We reference the TIME_SERIES SIM using the column names from the CSV file.

    +
    tip

    You can use boolean condition such as shown in base_production_load_mw and time varying variables such as shown in +flare_a_fuel_rate_sm3_day and flare_b_fuel_rate_sm3_day to write simpler models with less duplicated code.

    The base_production_load_mw adds another 4.1 MW when the gas lift injection rate is positive.

    The flare rate changes in year 2030.

    +

    INSTALLATIONS

    +

    An installation is composed of hydrocarbon export, a default fuel for that installation and consumers in the form +of generatorsets (with electric sub-consumers), and direct fuel consumers.

    +

    We specify:

    +
      +
    • NAME: the installation name
    • +
    • HCEXPORT: Hydrocarbon export in Sm3/day by referring to the variable $var.hydrocarbon_export_sm3_per_day specified under VARIABLES above.
    • +
    • FUEl: Default fuel specified in FUEL_TYPES above. Note the different fuels used by the two installations.
    • +
    • CATEGORY: FIXED (installation) category is used to group result data for reporting. See CATEGORY for details.
    • +
    +
    INSTALLATIONS:
    - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    <placeholder>
    FUELCONSUMERS:
    <placeholder>
    - NAME: Installation B
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: bad_fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    <placeholder>
    FUELCONSUMERS:
    <placeholder>
    +

    Installation A

    +

    There is one generator set, Generator set A. This has a power to fuel function defined in +FACILITY_INPUTS with the name genset. Further, the consumers getting +power from the generator set are Base production load, Gas injection compressor, Produced water reinjection pump +and Sea-water injection pump.

    +

    The direct fuel consumers are Flare.

    +

    The setup for Installation A thus becomes:

    +
      - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    - NAME: Generator set A
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Fixed production loads A
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL: <placeholder>
    - NAME: Gas export compressors system A
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL: <placeholder>
    - NAME: Water injection pump system A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL: <placeholder>
    - NAME: Single pump A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL: <placeholder>
    FUELCONSUMERS:
    - NAME: Flare A
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL: <placeholder>
    +

    Installation B

    +

    There is one generator set, Generator set B. This has a power to fuel function defined in +FACILITY_INPUTS with the name genset. Further, the consumer getting +power from the generator set is Base production load.

    +

    The direct fuel consumers are Flare and Gas export compressor.

    +

    The setup for Installation B thus becomes:

    +
      - NAME: Installation B
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: bad_fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    - NAME: Generator set B
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Fixed production loads B
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL: <placeholder>
    FUELCONSUMERS:
    - NAME: Flare B
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL: <placeholder>
    - NAME: Gas export compressors B
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL: <placeholder>
    +

    ENERGY_USAGE_MODEL

    +

    We will now fill in the final placeholders with detailed ENERGY_USAGE_MODELs.

    +

    Base production loads A has a load of 7.6 MW with additional 4.1 MW when the field gas injection rate is positive:

    +
              - NAME: Fixed production loads A
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: $var.base_production_load_mw
    +

    Gas export compressor system A is represented by a consumer system of two simplified compressor train models. +The system has defined the variable gas_export_rate_sm3_per_day and will run two different +rate distributions between these two compressor trains. It will first send all rate to the first compressor train +and nothing to the second RATE_FRACTIONS: [1.0, 0.0] and then it will run the same input while distributing equal +rates to the two compressor trains RATE_FRACTIONS: [0.5, 0.5]. The final result will be composed of the first +setting that returns a valid result for the compressors. +See COMPRESSOR_SYSTEM for further details.

    +

    The model compressor model is defined:

    +
              - NAME: Gas export compressors system A
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: train1_A
    COMPRESSOR_MODEL: simplified_compressor_train_model
    - NAME: train2_A
    COMPRESSOR_MODEL: simplified_compressor_train_model
    TOTAL_SYSTEM_RATE: $var.gas_export_rate_sm3_per_day
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1.0, 0.0]
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 120
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 120
    +

    Water injection pump system A is variable and its energy function is dependent on the field's water +injection rate (WATER_INJ) that is set in the variable water_injection_rate as SIM;WATER_INJ. +The pump only runs when the variables water_injection_condition evaluates to true as SIM;WATER_PROD > 0. +This is when the water injection rate is positive. Fluid density, suction pressure and discharge pressure +is also defined.

    +

    This PUMP_SYSTEM behaves much the same as the COMPRESSOR_SYSTEM above. +See PUMP_SYSTEM for further details.

    +
              - NAME: Water injection pump system A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: pump_chart
    - NAME: pump2
    CHART: pump_chart
    - NAME: pump3
    CHART: pump_chart
    - NAME: pump4
    CHART: pump_chart
    FLUID_DENSITY: 1026
    TOTAL_SYSTEM_RATE: $var.water_injection_rate
    CONDITION: $var.water_injection_condition
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0, 0, 0]
    SUCTION_PRESSURES: [3, 3, 3, 3]
    DISCHARGE_PRESSURES: [200, 200, 200, 200]
    CROSSOVER: [2, 0, 0, 0]
    - RATE_FRACTIONS: [0.5, 0.5, 0, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    +

    Single pump A has an energy function that is dependent on the seawater injection rate, same as the system above. +It uses the pump_chart defined in FACILITY_INPUTS above.

    +

    The pump model is then defined:

    +
              - NAME: Single pump A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: $var.water_injection_condition
    ENERGYFUNCTION: pump_chart
    RATE: 5000
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITY: 1026
    +

    The Flare A is changing on the 1st of July 2020 and 1st of January 2030. Therefore, we need to use a different constant +fuel consumption value before and after this date. This is done using the variable flare_a_fuel_rate_sm3_day.

    +

    The model becomes:

    +
          - NAME: Flare A
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_a_fuel_rate_sm3_day
    +

    Base production loads B has a load of 7.6 :

    +
              - NAME: Fixed production loads B
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 7.6
    +

    The Flare B is changing on the 1st of July 2020 and 1st of January 2030. Therefore, we need to use a different constant +fuel consumption value before and after this date. This is done using the variable flare_a_fuel_rate_sm3_day.

    +

    The model becomes:

    +
          - NAME: Flare B
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_b_fuel_rate_sm3_day
    +

    The Gas export compressors B is a variable fuel consumer whose energy function depends on the field gas production rate (GAS_PROD) defined +in the variable gas_export_rate_sm3_per_day as SIM;GAS_PROD, and put to the condition gas_export_condition as SIM;GAS_PROD > 0

    +

    The model is specified:

    +
          - NAME: Gas export compressors B
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: gasexp
    CONDITION: $var.gas_export_condition
    RATE: $var.gas_export_rate_sm3_per_day
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 200
    +

    Full eCalc YAML model

    +
    model.yaml
    TIME_SERIES:
    - NAME: SIM
    TYPE: DEFAULT
    FILE: base_profile.csv

    FACILITY_INPUTS:
    - NAME: genset
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: gasexp
    FILE: compressor_sampled.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: pump_chart
    FILE: pump_chart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    FUEL_TYPES:
    - NAME: fuel_gas
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.20 #kg/Sm3
    - NAME: CH4
    FACTOR: 0.01 #kg/Sm3
    - NAME: bad_fuel_gas
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 5.0 #kg/Sm3
    - NAME: CH4
    FACTOR: 0.01 #kg/Sm3

    MODELS:
    - NAME: generic_from_design_point_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: 0.75
    DESIGN_RATE: 10000
    DESIGN_HEAD: 80
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: KJ_PER_KG
    EFFICIENCY: FRACTION
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M # M or KJ_PER_KG
    EFFICIENCY: FRACTION
    CURVES:
    FILE: compressor_chart.csv
    - NAME: medium_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM
    - NAME: turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: medium_fluid
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: predefined_variable_speed_compressor_chart

    VARIABLES:
    hydrocarbon_export_sm3_per_day:
    VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000
    gas_export_rate_sm3_per_day:
    VALUE: SIM;GAS_PROD
    water_injection_rate:
    VALUE: SIM;WATER_INJ
    gas_export_condition:
    VALUE: SIM;GAS_PROD > 0
    base_production_load_mw:
    VALUE: 7.6 {+} 4.1 {*} (SIM;GAS_LIFT > 0)
    water_injection_condition:
    VALUE: SIM;WATER_PROD >0
    flare_a_fuel_rate_sm3_day:
    2020-06-01:
    VALUE: 5000
    2030-01-01:
    VALUE: 2000
    flare_b_fuel_rate_sm3_day:
    2020-06-01:
    VALUE: 10000
    2030-01-01:
    VALUE: 7000

    INSTALLATIONS:
    - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    - NAME: Generator set A
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Fixed production loads A
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: $var.base_production_load_mw
    - NAME: Gas export compressors system A
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: train1_A
    COMPRESSOR_MODEL: simplified_compressor_train_model
    - NAME: train2_A
    COMPRESSOR_MODEL: simplified_compressor_train_model
    TOTAL_SYSTEM_RATE: $var.gas_export_rate_sm3_per_day
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1.0, 0.0]
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 120
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 120
    - NAME: Water injection pump system A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: pump_chart
    - NAME: pump2
    CHART: pump_chart
    - NAME: pump3
    CHART: pump_chart
    - NAME: pump4
    CHART: pump_chart
    FLUID_DENSITY: 1026
    TOTAL_SYSTEM_RATE: $var.water_injection_rate
    CONDITION: $var.water_injection_condition
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0, 0, 0]
    SUCTION_PRESSURES: [3, 3, 3, 3]
    DISCHARGE_PRESSURES: [200, 200, 200, 200]
    CROSSOVER: [2, 0, 0, 0]
    - RATE_FRACTIONS: [0.5, 0.5, 0, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - NAME: Single pump A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: $var.water_injection_condition
    ENERGYFUNCTION: pump_chart
    RATE: 5000
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITY: 1026
    FUELCONSUMERS:
    - NAME: Flare A
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_a_fuel_rate_sm3_day

    - NAME: Installation B
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: bad_fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    - NAME: Generator set B
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Fixed production loads B
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 7.6
    FUELCONSUMERS:
    - NAME: Flare B
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_b_fuel_rate_sm3_day
    - NAME: Gas export compressors B
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: gasexp
    CONDITION: $var.gas_export_condition
    RATE: $var.gas_export_rate_sm3_per_day
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 200
    +

    Input files

    +
    compressor_chart.csv
    RATE,       HEAD,   EFFICIENCY, SPEED
    # [m3/h], [m], [frac], [rpm]
    3000, 8500, 0.72, 7500
    3500, 8000, 0.75, 7500
    4000, 7500, 0.74, 7500
    4500, 6500, 0.70, 7500
    4100, 16500, 0.72, 10500
    4600, 16000, 0.73, 10500
    5000, 15500, 0.74, 10500
    5500, 14500, 0.74, 10500
    6000, 13500, 0.72, 10500
    6500, 12000, 0.70, 10500
    +
    compressor_sampled.csv
    RATE,   FUEL
    0, 0
    0.01, 100
    10, 500
    20, 1200
    +
    genset.csv
    POWER,  FUEL
    # [MW], [Sm3/d]
    0, 0
    0.1, 75000
    10, 80000
    20, 100000
    50, 500000
    100, 1000000

    +
    pump_chart.csv
    RATE,       HEAD,   EFFICIENCY, SPEED
    # [m3/h], [m], [%], [rpm]
    250, 2350, 50, 10000
    300, 2300, 55, 10000
    350, 2250, 60, 10000
    400, 2200, 70, 10000
    450, 2150, 75, 10000
    500, 2100, 80, 10000
    550, 2050, 75, 10000
    600, 2000, 70, 10000
    +
    base_profile.csv
    DATE,           OIL_PROD,  WATER_PROD,  GAS_PROD,  WATER_INJ,  GAS_LIFT
    01.01.2020, 1000, 20000, 4000000, 30000, 1200000
    01.01.2021, 1000, 20000, 4000000, 30000, 1200000
    01.01.2022, 1000, 20000, 4000000, 30000, 1200000
    01.01.2023, 2500, 21000, 4000000, 30000, 1200000
    01.01.2024, 3000, 22000, 4500000, 28000, 1300000
    01.01.2025, 3500, 23000, 5000000, 26000, 1350000
    01.01.2026, 4000, 24000, 5500000, 25000, 1400000
    01.01.2027, 4000, 25000, 6000000, 24000, 1400000
    01.01.2028, 4000, 20000, 6000000, 23000, 1400000
    01.01.2029, 5000, 20000, 5500000, 22000, 1350000
    01.01.2030, 9000, 20000, 5000000, 21000, 1300000
    01.01.2031, 5000, 20000, 3000000, 22000, 1300000
    01.01.2032, 4000, 22100, 3000000, 23000, 2000000
    01.01.2033, 4000, 22100, 3000000, 23000, 2000000
    01.01.2034, 1200, 25000, 1000000, 21000, 2000000
    01.01.2035, 1100, 25000, 1000000, 20000, 1500000
    01.01.2036, 1000, 22000, 500000, 18000, 1400000
    01.01.2037, 900, 20000, 500000, 17000, 1400000
    01.01.2038, 800, 18000, 500000, 17000, 1400000
    01.01.2039, 700, 18000, 200000, 17000, 1400000
    01.01.2040, 600, 10000, 200000, 15000, 1400000
    01.01.2041, 0, 0, 0, 0, 0
    + + \ No newline at end of file diff --git a/docs/about/modelling/examples/drogon/index.html b/docs/about/modelling/examples/drogon/index.html new file mode 100644 index 0000000000..874f69f74b --- /dev/null +++ b/docs/about/modelling/examples/drogon/index.html @@ -0,0 +1,73 @@ + + + + + +Drogon model | eCalc™ Docs + + + + +

    Drogon model example

    +

    The Drogon example is based on a synthetic data set.

    +

    On the installation, the following consumers are identified:

    + +

    The results of a performed characterization of the equipment are listed below:

    +
    ConsumerTypeDescription
    Generator set AGenerator setVariable fuel consumer with electricity to fuel function
    Base production loadPower consumerConstant load - 9 MW
    Gas compression trainPower consumerVariable consumption depending on produced gas rate
    Gas re-compressorsPower consumerConstant load - 2 MW
    Sea water injection pumpPower consumerVariable consumption depending on water injection rate
    Booster pumpPower consumerConstant load - 2 MW
    +

    YAML model overview

    +

    The YAML model consists of the following components:

    +
      +
    • Time series input
    • +
    • Facility inputs
    • +
    • Model inputs
    • +
    • Fuel type input
    • +
    • Installation topography
    • +
    +

    The skeleton of the YAML file looks like the following:

    +
    TIME_SERIES: 
    <placeholder>
    FACILITY_INPUTS:
    <placeholder>
    MODELS:
    <placeholder>
    FUEL_TYPES:
    <placeholder>
    INSTALLATIONS:
    <placeholder>
    +

    TIME_SERIES

    +

    The reservoir variables. In this case the file is called: drogon_mean.csv.

    +
    TIME_SERIES: 
    - NAME: SIM1
    TYPE: DEFAULT
    FILE: drogon_mean.csv
    +

    FACILITY_INPUTS

    +

    In this case, the compressors are not specified in this section as GENERIC COMPRESSOR CHARTS. Thus, the pump chart and generator set will be the only facility components specified within this section.

    +

    The pump will be single speed, meaning that the pump type will be PUMP_CHART_SINGLE_SPEED. The generator set will be a tabulated, where power consumption will be linked to fuel gas utilised.

    +
    FACILITY_INPUTS: 
    - NAME: genset_a_power_fuel
    TYPE: ELECTRICITY2FUEL
    FILE: genset.csv
    - NAME: wi_200
    FILE: wi_200bar_ssp.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE
    +

    MODELS

    +

    The model section will contain the fluid model, the compressor chart and the subsequent compressor model. +Peng-Robinson (PR) will be the selected equation of state in this example.

    +

    This example will use a generic compressor chart. In this case, a generic compressor chart from input will utilised. Here, the a "typical" chart will be shifted to match the input head and rate data. See GENERIC COMPRESSOR CHARTS for more details. When a generic chart is used, a polytropic efficiency needs to be specified. This value will be constant throughout the use, in this case a value of 0.8 is used.

    +

    A SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN model is used in this example, as this is necessary when a generic chart is used. Instead of manually specifying the number of compression stages, a MAXIMUM_PRESSURE_RATIO_PER_STAGE of 3.5 is defined. This will automatically distribute the pressure increase amongst the compression train so that no pressure ratio per compression stage will be above 3.5.

    +
    MODELS:
    - NAME: drogon_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: PR
    COMPOSITION:
    water: 0.0
    nitrogen: 0.510676386339746
    CO2: 2.44965511776504
    methane: 75.6328106126248
    ethane: 10.9074631209139
    propane: 8.11875087121037
    i_butane: 0.849146377471569
    n_butane: 1.34903656604691
    i_pentane: 0.104982143381498
    n_pentane: 0.071218218251483
    n_hexane: 0.0063

    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    POLYTROPIC_EFFICIENCY: 0.8
    UNITS:
    EFFICIENCY: FRACTION

    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: drogon_fluid
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5
    COMPRESSOR_CHART: generic_from_input_compressor_chart
    INLET_TEMPERATURE: 19.3
    +

    FUEL_TYPES

    +

    The fuel gas has a CO2 factor of 2.416.

    +
    FUEL_TYPES:
    - NAME: fuel_gas
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.416 #CO2/Sm3 fuel gas burned
    +

    INSTALLATIONS

    +

    In the INSTALLATIONS section, the previously defined models and facility inputs are further defined. Here the hydrocarbon export can be specified. This is used in order to get a hydrocarbon-to-emission value. In this case, it is assumed that this facility exports oil (OIL_PROD) and gas (GAS_PROD).

    +
    INSTALLATIONS:
    - NAME: drogon_installation
    CATEGORY: FIXED
    HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000
    FUEL: fuel_gas
    +

    GENERATORSETS

    +

    There is one generator set used in this example - Generator set A. This is a tabular relationship between power generated/consumed and fuel gas burnt. +Under this category, all consumers that utilise electricity are defined. In this case scenario, all pumps and compressors are electrically driven; thus, all consumers will be specified under this category.

    +
        GENERATORSETS:
    - NAME: main_power
    ELECTRICITY2FUEL: genset_a_power_fuel
    CATEGORY: TURBINE-GENERATOR
    CONSUMERS:
    +

    PUMPS

    +

    The previously defined variable speed pump (in FACILITY_INPUTS) is put into further defined with suction and discharge pressures, rates and operational settings.

    +

    Here, a system of pumps is used. This means that instead of a single pump being used to deliver the respective injection rate, a system of pumps is defined. In this case, a system of two pumps will be used. If the first pump is unable to deliver the requested head or rate, a second pump will be additionally used and the rate will be split across the pump system. +As only one pump has been defined, the same pump model will be used for each train. As each pump is identical, the rate will be equally split across the train when needed (this is to ensure the highest pump efficiency - see PUMP MODELLING for more details.)

    +

    A fluid density of 1025 kg/m3 is used, with a suction and discharge pressure of 12 and 200 bar respectively.

    +
              - NAME: water injection
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump_a_lp
    CHART: wi_200
    - NAME: pump_b_lp
    CHART: wi_200
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: 1025
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS:
    - 1
    - 0
    SUCTION_PRESSURE: 12
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS:
    - 0.5
    - 0.5
    SUCTION_PRESSURE: 12
    DISCHARGE_PRESSURE: 200
    +

    COMPRESSORS

    +

    For the compression model, a compressor system is not used. This is due to the use of generic compressor charts. As the generic charts are shifted from input data there is no need for an additional compression train. No matter what rate/head values are inputted here, the generic chart is shifted so that all operational points will be within the operational envelope of the compressor.

    +

    Here, 13 bar and 421 bar is specified for the suction and discharge pressure respectively.

    +
              - NAME: gas export compressor train
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: train1_2
    COMPRESSOR_MODEL: simplified_compressor_train_model
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS:
    - 1
    SUCTION_PRESSURE: 13
    DISCHARGE_PRESSURE: 421
    +

    BASE-LOAD

    +

    Three different constant-loads are specified in this section. These being the booster pump, the re-compressors and then the general facility base-load.

    +
              - NAME: boosterpump
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 2
    - NAME: baseload
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 9
    - NAME: re-compressors
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 2

    +

    Full Model

    +
    TIME_SERIES:
    - NAME: SIM1
    FILE: drogon_mean.csv
    TYPE: DEFAULT
    FACILITY_INPUTS:
    - NAME: genset_a_power_fuel
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: wi_200
    FILE: wi_200bar_ssp.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE
    MODELS:
    - NAME: drogon_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: PR
    COMPOSITION:
    water: 0.0
    nitrogen: 0.510676386339746
    CO2: 2.44965511776504
    methane: 75.6328106126248
    ethane: 10.9074631209139
    propane: 8.11875087121037
    i_butane: 0.849146377471569
    n_butane: 1.34903656604691
    i_pentane: 0.104982143381498
    n_pentane: 0.071218218251483
    n_hexane: 0.0063
    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    POLYTROPIC_EFFICIENCY: 0.8
    UNITS:
    EFFICIENCY: FRACTION
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: drogon_fluid
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5
    COMPRESSOR_CHART: generic_from_input_compressor_chart
    INLET_TEMPERATURE: 19.3
    FUEL_TYPES:
    - NAME: fuel_gas
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: co2_fuel_gas
    FACTOR: 2.416
    INSTALLATIONS:
    - NAME: drogon_installation
    CATEGORY: FIXED
    HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000
    FUEL: fuel_gas
    GENERATORSETS:
    - NAME: main_power
    ELECTRICITY2FUEL: genset_a_power_fuel
    CATEGORY: TURBINE-GENERATOR
    CONSUMERS:
    - NAME: wi_lp
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump_a_lp
    CHART: wi_200
    - NAME: pump_b_lp
    CHART: wi_200
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: 1025
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS:
    - 1
    - 0
    SUCTION_PRESSURE: 12
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS:
    - 0.5
    - 0.5
    SUCTION_PRESSURE: 12
    DISCHARGE_PRESSURE: 200

    - NAME: gas export compressor train
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: train1_2
    COMPRESSOR_MODEL: simplified_compressor_train_model
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS:
    - 1
    SUCTION_PRESSURE: 13
    DISCHARGE_PRESSURE: 421

    - NAME: boosterpump
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 2
    - NAME: baseload
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 9
    - NAME: re-compressors
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 2
    +

    Input Data

    +

    Facility resources

    +
    genset.csv
    POWER, FUEL
    # [MW], [Sm3/d]
    0,0
    2.38,37766.13
    4.76,50769.26
    5.9,59258.52
    7.14,63772.39
    9.52,76775.52
    10.71,83277.09
    11.9,89808.09
    14.28,102781.8
    16.66,115784.9
    17.8,119883.6
    19.04,128788
    21.42,141791.2
    21.4201,166554.2
    28.56,205563.6
    33.32,231569.8
    38.08,257576.1
    42.84,283582.3
    +
    wi_200bar_ssp.csv
    RATE,HEAD,EFFICIENCY,SPEED
    830,1490,81,3741
    800,1550,81.7,3741
    600,1825,78,3741
    500,1915,72.5,3741
    415,1955,66,3741
    +

    Timeseries resources

    +
    drogon_mean.csv
    DATE,GAS_PROD,OIL_PROD,WATER_INJ
    01.01.2020,329327.76,2301.9189,3796.9621
    01.01.2021,533620.39,3699.8435,8533.0322
    01.01.2022,416004.76,2837.5915,9434.1385
    01.01.2023,340118.19,2280.7372,10019.154
    01.01.2024,290127.01,1905.7952,10428.387
    01.01.2025,253292.19,1635.7671,10725.254
    01.01.2026,223584.53,1426.9726,10954.338
    01.01.2027,198453.07,1249.781,11153.675
    01.01.2028,177306.77,1099.8572,11318.01
    01.01.2029,159723.78,977.37529,11450.614
    01.01.2030,145056.33,875.30836,11561.335
    01.01.2031,132577.75,788.45521,11654.645
    01.01.2032,122166.68,715.64707,11734.129
    01.01.2033,113070.74,653.71407,11802.565
    01.01.2034,105114.67,600.04874,11860.717
    01.01.2035,98147.958,553.56297,11910.283
    + + \ No newline at end of file diff --git a/docs/about/modelling/examples/index.html b/docs/about/modelling/examples/index.html new file mode 100644 index 0000000000..b5422f7813 --- /dev/null +++ b/docs/about/modelling/examples/index.html @@ -0,0 +1,20 @@ + + + + + +Examples | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/modelling/examples/simple/index.html b/docs/about/modelling/examples/simple/index.html new file mode 100644 index 0000000000..1b3fece8c0 --- /dev/null +++ b/docs/about/modelling/examples/simple/index.html @@ -0,0 +1,130 @@ + + + + + +Simple model | eCalc™ Docs + + + + +

    Simple model example

    +

    The following is an example with one installation called Installation A that exports oil (OIL_PROD) and gas (GAS_PROD). +The installation emits CO2.

    +

    On this installation, the following components are identified:

    + +

    The results of a performed characterization of the equipment are listed below:

    +
    ConsumerTypeDescription
    Generator set AGenerator setVariable fuel consumer with electricity to fuel function
    Base production loadPower consumerConstant load 11.8 MW
    Gas injection compressorPower consumerVariable consumption depending on gas injection rate and lift gas rate
    Produced water reinjection pumpPower consumerVariable consumption depending on water production rate and water injection rate. The pump suction pressure is 10 bar and discharge pressure is 200 bar.
    Sea water injection pumpPower consumerVariable consumption depending on a complex combination on water injection rate and water production rate
    FlareDirect fuel consumerBefore 1.1.2005: Constant fuel rate 10000 Sm3/day, From 1.1.2005: Constant fuel rate 7000 Sm3/day
    Gas export compressorDirect fuel consumerVariable fuel consumer depending on gas sales rate
    +

    YAML model overview

    +

    The YAML model consist of these main components:

    + +

    The YAML setup file looks like this:

    +
    model.yaml
    TIME_SERIES:
    <placeholder>
    FACILITY_INPUTS:
    <placeholder>
    FUEL_TYPES:
    <placeholder>
    VARIABLES:
    <placeholder>
    INSTALLATIONS:
    <placeholder>
    +

    We will now replace the placeholders for each of the main keywords above.

    +

    TIME_SERIES

    +

    The reservoir variables, in this case, are found in a CSV (Comma separated file) production_data.csv. +We give the time-series data a name that can be referenced as variables elsewhere in the form <NAME>:<NAME OF COLUMN>. +See TIME_SERIES for further details.

    +
    model.yaml
    TIME_SERIES:
    - NAME: SIM
    FILE: production_data.csv
    TYPE: DEFAULT
    +

    FACILITY_INPUTS

    +

    We specify CSV input data for processing equipment using FACILITY_INPUTS. This is used for generatorsets, +tabulated/sampled models and pump charts. +See FACILITY_INPUTS for further details.

    +

    Here we define a tabulated genset, a sampled compressor, a sampled compressor driven by a turbine, a sampled pump, +and a single speed pump chart. These will be used in the final model for illustration. +Note that more complicated energy models are defined under the MODELS-keyword.

    +

    See the input data further down to understand the input formats.

    +
    model.yaml
    FACILITY_INPUTS:
    - NAME: genset
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: compressor_sampled
    FILE: compressor_sampled.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: compressor_with_turbine_sampled
    FILE: compressor_sampled_with_turbine.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: pump_sampled
    FILE: pump_sampled.csv
    TYPE: TABULAR
    - NAME: pump_chart
    FILE: pump_chart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE
    +

    FUEL_TYPES

    +

    In this example there is only one FUEL_TYPES - fuel_gas. The emissions we model with the fuel is CO2. The CO2 factor +is 2.19 kg CO2 per Sm3 fuel gas burned.

    +
    model.yaml
    FUEL_TYPES:
    - NAME: fuel_gas
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.19 #CO2/Sm3 fuel gas burned
    +

    VARIABLES

    +

    To run the model it is recommended to specify VARIABLES, +instead of hard coding values in difference places. This makes it easier to develop, maintain and understand the model +by allowing descriptive variable names and avoid duplications.

    +

    For our model, we specify the following variables:

    +
    model.yaml
    VARIABLES:
    hydrocarbon_export_sm3_per_day:
    VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent
    sea_water_injection_rate_m3_per_day:
    VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500)
    gas_export_rate_sm3_per_day:
    VALUE: SIM;GAS_PROD
    gas_injection_rate_sm3_per_day:
    VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT
    produced_water_reinjection_condition:
    VALUE: SIM;WATER_PROD > 1500
    produced_water_reinjection_total_system_rate_m3_per_day:
    VALUE: SIM;WATER_PROD
    flare_fuel_rate_sm3_day:
    1995-10-01:
    VALUE: 10000
    2005-01-01:
    VALUE: 7000
    +

    We reference the TIME_SERIES SIM using the column names from the CSV file. Here we use for example +SIM:OIL_PROD (Field Oil Production Rate) SIM:GAS_PROD (Field Gas Sales Rate).

    +
    tip

    It is possible to specify if-else conditions by multiplying with boolean values. +This has been done in the $var.salt_water_injection_rate_m3_per_day variable example above.

    +

    INSTALLATION

    +

    An installation is composed of hydrocarbon export, a default fuel for that installation and consumers in the form +of generatorsets (with electric sub-consumers), and direct fuel consumers.

    +

    We specify:

    +
      +
    • NAME: the installation name
    • +
    • HCEXPORT: Hydrocarbon export in Sm3/day by referring to the variable specified under VARIABLES above.
    • +
    • FUEl: Default fuel specified in FUEL_TYPES above.
    • +
    +
    INSTALLATIONS:
    - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    GENERATORSETS:
    <placeholder>
    FUELCONSUMERS:
    <placeholder>
    +

    GENERATORSETS

    +

    There is one generator set, Generator set A. This has a power to fuel function defined in +FACILITY_INPUTS with the name genset. Further, the consumers getting +power from the generator set are Base production load, Gas injection compressor, Produced water re-injection pump +and Sea-water injection pump. The setup for Generator set A thus becomes:

    +
        GENERATORSETS:
    - NAME: Generator set A
    ELECTRICITY2FUEL: genset
    CATEGORY: TURBINE-GENERATOR
    CONSUMERS:
    - NAME: Base production load
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    <placeholder>
    - NAME: Gas injection compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    <placeholder>
    - NAME: Produced water reinjection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    <placeholder>
    - NAME: Sea water injection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    <placeholder>
    +

    FUELCONSUMERS

    +

    The direct fuel consumers are Flare and Gas export compressor.

    +
    model.yaml
        FUELCONSUMERS:
    - NAME: Flare
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    <placeholder>
    - NAME: Gas export compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    <placeholder>
    +

    ENERGY_USAGE_MODEL

    +

    We will now fill in the final placeholders with detailed ENERGY_USAGE_MODELs.

    +

    Base production load has a constant load of 11.8 MW:

    +
              - NAME: Base production load
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 11.8 # MW
    +

    Gas injection compressor is represented by a tabulated (sampled) energy usage model defining the relationship +between the gas injection rate [Sm3/day] and the corresponding power requirement. The gas rate is already defined +in the variable gas_injection_rate_sm3_per_day as SIM;GAS_INJ {+} SIM;GAS_LIFT:

    +
              - NAME: Gas injection compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_sampled
    RATE: $var.gas_injection_rate_sm3_per_day
    SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc
    DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc
    +

    Produced water reinjection pump is variable and its energy function is dependent on the field's water +production rate (WATER_PROD) that is set in the variable produced_water_reinjection_condition as SIM;WATER_PROD. +The pump only runs when the variables produced_water_reinjection_condition evaluates to true as SIM;WATER_PROD > 1500. +This is when the water production is above 1500 Sm3/day. Fluid density, suction pressure and discharge pressure +is also defined:

    +
              - NAME: Produced water reinjection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: $var.produced_water_reinjection_condition
    ENERGYFUNCTION: pump_chart
    RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day
    FLUID_DENSITY: 1010
    SUCTION_PRESSURE: 10 # [bara]
    DISCHARGE_PRESSURE: 200 # [bara]
    +

    Sea water injection pump has an energy function that is dependent on the seawater injection rate. +This rate is not modeled explicitly in the reservoir input source, but it may be computed +from the injection (WATER_INJ) and production (WATER_PROD) rate by the following rules:

    +
      +
    • +

      In general, the seawater injection rate (SEAWATER_INJ), is the difference between injected and +produced water: SEAWATER_INJ = WATER_INJ - WATER_PROD.

      +
    • +
    • +

      When the produced water rate is below 1500 SM3/day, this goes directly to sea, such that +SEAWATER_INJ = WATER_INJ when WATER_PROD < 1500.

      +
    • +
    • +

      When the produced water rate is between 17000 and 18500 SM3/day, everything above 17000 SM3/day +goes directly to the sea, thus SEAWATER_INJ = WATER_INJ - 17000 when 17000 < WATER_PROD < 18500.

      +
    • +
    +

    This is specified as the variable sea_water_injection_rate_m3_per_day above and is defined as:

    +

    The model is specified:

    +
              - NAME: Sea water injection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: pump_sampled
    VARIABLES:
    - NAME: RATE
    EXPRESSION: $var.sea_water_injection_rate_m3_per_day
    +

    The flare is changing on the 1st of January 2005. Therefore, we need to use a different constant +fuel consumption value before and after this date. This is done using the variable flare_fuel_rate_sm3_day +above.

    +

    The model is specified:

    +
          - NAME: Flare
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_fuel_rate_sm3_day
    +

    Gasexport is a variable fuel consumer whose energy function depends on the field gas sales rate (GAS_PROD) defined +in the variable gas_export_rate_sm3_per_day as SIM;GAS_PROD. Even though it is not used in the eCalc model, suction and discharge pressure needs to be specified in order for the model to run.

    +

    The model is specified:

    +
          - NAME: Gas export compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: GAS-DRIVEN-COMPRESSOR
    ENERGYFUNCTION: compressor_with_turbine_sampled
    RATE: $var.gas_export_rate_sm3_per_day
    SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc
    DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc
    +

    Full eCalc YAML model

    +
    model.yaml
    TIME_SERIES:
    - NAME: SIM
    FILE: production_data.csv
    TYPE: DEFAULT
    FACILITY_INPUTS:
    - NAME: genset
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: compressor_sampled
    FILE: compressor_sampled.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: compressor_with_turbine_sampled
    FILE: compressor_sampled_with_turbine.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: pump_sampled
    FILE: pump_sampled.csv
    TYPE: TABULAR
    - NAME: pump_chart
    FILE: pump_chart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE

    FUEL_TYPES:
    - NAME: fuel_gas
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.19 # CO2/Sm3 fuel gas burned

    VARIABLES:
    hydrocarbon_export_sm3_per_day:
    VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent
    sea_water_injection_rate_m3_per_day:
    VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500)
    gas_export_rate_sm3_per_day:
    VALUE: SIM;GAS_PROD
    gas_injection_rate_sm3_per_day:
    VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT
    produced_water_reinjection_condition:
    VALUE: SIM;WATER_PROD > 1500
    produced_water_reinjection_total_system_rate_m3_per_day:
    VALUE: SIM;WATER_PROD
    flare_fuel_rate_sm3_day:
    1995-10-01:
    VALUE: 10000
    2005-01-01:
    VALUE: 7000

    INSTALLATIONS:
    - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    GENERATORSETS:
    - NAME: Generator set A
    ELECTRICITY2FUEL: genset
    CATEGORY: TURBINE-GENERATOR
    CONSUMERS:
    - NAME: Base production load
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 11.8 # MW
    - NAME: Gas injection compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_sampled
    RATE: $var.gas_injection_rate_sm3_per_day
    SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc
    DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc
    - NAME: Produced water reinjection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: $var.produced_water_reinjection_condition
    ENERGYFUNCTION: pump_chart
    RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day
    FLUID_DENSITY: 1010
    SUCTION_PRESSURE: 10 # bara
    DISCHARGE_PRESSURE: 200 # bara
    - NAME: Sea water injection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: pump_sampled
    VARIABLES:
    - NAME: RATE
    EXPRESSION: $var.salt_water_injection_rate_m3_per_day
    FUELCONSUMERS:
    - NAME: Flare
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_fuel_rate_sm3_day
    - NAME: Gas export compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: GAS-DRIVEN-COMPRESSOR
    ENERGYFUNCTION: compressor_with_turbine_sampled
    RATE: $var.gas_export_rate_sm3_per_day
    SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc
    DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc
    +

    Input files

    +
    compressor_sampled.csv
    RATE,POWER
    #[Sm3/day],[MW]
    0,0
    1,4.1
    100000000,4.1
    200000000,4.1
    210000000,4.1
    220000000,4.4
    230000000,4.8
    240000000,5.1
    250000000,5.4
    260000000,5.8
    270000000,6.1
    280000000,6.4
    290000000,6.8
    300000000,7.1
    500000000,14.2
    +
    compressor_sampled_with_turbine.csv
    RATE,FUEL
    #[Sm3/day],[Sm3/day]
    0,0
    0.1,50000
    3000000,50000
    3500000,130000
    7000000,170000
    +
    genset.csv
    POWER,FUEL
    #[MW],[Sm3/day]
    0, 0
    0.1, 65000
    10.0, 75000
    20.0, 126000
    40.0, 250000
    100.0, 750000
    +
    pump_chart.csv
    SPEED,RATE,HEAD,EFFICIENCY
    3250,250,2640,59
    3250,360,2490,68
    3250,500,2342,77
    3250,600,2210,80
    3250,667,2068,78
    3250,735,1870,74
    +
    pump_sampled.csv
    RATE,POWER
    #[Sm3/day],[MW]
    0,0
    1,3
    8500,4
    9000,4
    17000,6
    17500,9
    36000,13
    +
    production_data.csv
    Dates,                  OIL_PROD,  GAS_PROD,    WATER_PROD, WATER_INJ,  GAS_INJ,    GAS_LIFT
    #, Sm3/d, Sm3/d, m3/d, m3/d, Sm3/d, Sm3/d
    2020-01-01 00:00:00, 9000, 3500000, 18000, 34000, 2200000, 130000
    2021-01-01 00:00:00, 8000, 3600000, 19000, 33000, 2200000, 170000
    2022-01-01 00:00:00, 7000, 3700000, 15000, 30000, 2200000, 210000
    2023-01-01 00:00:00, 6000, 3800000, 16000, 33000, 2300000, 240000
    2024-01-01 00:00:00, 6000, 3900000, 14000, 35000, 2300000, 280000
    2024-12-01 00:00:00, 6000, 4000000, 15000, 36000, 2400000, 310000
    2026-01-01 00:00:00, 7000, 4100000, 18000, 36000, 2400000, 350000
    2027-01-01 00:00:00, 6000, 4500000, 15000, 38000, 2400000, 390000
    2028-01-01 00:00:00, 6000, 3500000, 12000, 33000, 2400000, 430000
    2029-01-01 00:00:00, 5000, 2500000, 14000, 36000, 2400000, 460000
    2030-01-01 00:00:00, 6000, 2000000, 16000, 35000, 2400000, 500000
    2031-01-01 00:00:00, 4000, 3000000, 14000, 33000, 2400000, 530000
    + + \ No newline at end of file diff --git a/docs/about/modelling/index.html b/docs/about/modelling/index.html new file mode 100644 index 0000000000..698b9dbd6d --- /dev/null +++ b/docs/about/modelling/index.html @@ -0,0 +1,17 @@ + + + + + +Modelling guide | eCalc™ Docs + + + + +

    Modelling

    +

    This section describes how to use eCalc.

    +
    tip

    It is good practice when writing the eCalc YAML setup file to include, as comments, the version it was written for, your name and a ‘change log’ which should include the date and changes made.

    +

    The YAML setup file:

    +
    # ecalc version v5.3.1
    # input by: john.doe@example.com
    #
    # change log - add comments regarding relevant changes made to the file
    # date: YYYYMMDD, john doe
    # extended suction and discharge pressure range for precompressor
    # date: YYYYMMDD, jane doe
    # updated gensetA

    TIME_SERIES:
    - NAME: SIM1
    FILE: examplecase_inputvariables.csv
    TYPE: DEFAULT
    FACILITY_INPUTS:
    ...
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/generator_modelling/index.html b/docs/about/modelling/setup/facility_inputs/generator_modelling/index.html new file mode 100644 index 0000000000..0f687d6b72 --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/generator_modelling/index.html @@ -0,0 +1,29 @@ + + + + + +Generator modelling | eCalc™ Docs + + + + +

    Generator modelling

    +

    In eCalc™, the term generator refers to equipment producing electrical power from fuel. Hence, the turbine part (fuel combustion to produce mechanical energy) is included in the term.

    +

    An installation usually have one or more generators to fill the electrical power demand. In eCalc™, the separate generators are combined into a common generator set (genset).

    +
    note

    In the future, eCalc™ will most likely offer modelling of single generators that could be combined in systems.

    +

    ELECTRICITY2FUEL

    +

    Electricity to fuel is a table specifying the relationship between electrical load +and fuel consumption for an entire generator set. This means that if you have several generators, +this table needs to include a "jump" every time a new generator is started. An example of this +is shown below.

    +

    Under FACILITY_INPUTS, this electricity to fuel table is specified using the keyword ELECTRICITY2FUEL

    +

    Facility input format

    +
    FACILITY_INPUTS:
    - NAME: <generator name>
    FILE: <file path to .csv file>
    TYPE: ELECTRICITY2FUEL
    +

    Example table

    +

    The table for this curve would look like:

    +
    POWER, FUEL
    #[MW], [Sm3/day]
    0.00, 0.0
    0.10, 84000.0
    5.00, 84000.0
    42.0, 220000.0
    42.01, 280000.0
    45.0, 300000.0
    50.0, 330000.0
    60.0, 350000.0
    +

    Header and unit requirements

    +
    HeaderUnitMandatory
    PowerMWYes
    FuelSm3/dayYes
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/index.html b/docs/about/modelling/setup/facility_inputs/index.html new file mode 100644 index 0000000000..218eca53ac --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/index.html @@ -0,0 +1,43 @@ + + + + + +Facility inputs | eCalc™ Docs + + + + +

    Facility inputs

    note

    The FACILITY_INPUTS keyword is mandatory within the eCalc™ YAML file.

    +

    This part of the setup defines input files that characterize various facility elements. Each facility element is +specified in a list. These are later used as input in the INSTALLATIONS part of the setup by referencing their NAME.

    +

    All facility inputs are in essence a CSV (Comma separated file) file that specifies input data to a model that +calculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple +supported types.

    +

    There are four categories of data that can be used here:

    +
      +
    • Files describing the performance of a generator set
    • +
    • Files describing the performance of pumps (pump charts)
    • +
    • Files describing the performance of only tabular compressors (sampled compressor data)
    • +
    • Other energy consuming equipment modeled variable w.r.t. reservoir management +(tabulated relationship between variables and consumption)
    • +
    +

    eCalc™ supports making simple adjustments to a table by using the ADJUSTMENT +keyword as well as modification of the HEAD_MARGIN +which can be used while calibrating pump charts.

    +

    Format

    +

    Each facility input has the skeleton as seen below. However, some inputs require further information. For example, pump models

    +
    FACILITY_INPUTS:
    - NAME: <reference name>
    FILE: <file_path.csv>
    TYPE: <consumer type>
    +

    Supported types

    +

    The facility input type is defined using the TYPE keyword and defines the type of model applied +to the data in this file. The input files are in CSV (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file.

    +

    The supported types are:

    +
      +
    • ELECTRICITY2FUEL
    • +
    • TABULAR
    • +
    • COMPRESSOR_TABULAR
    • +
    • PUMP_CHART_SINGLE_SPEED
    • +
    • PUMP_CHART_VARIABLE_SPEED
    • +
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/pump_modelling/index.html b/docs/about/modelling/setup/facility_inputs/pump_modelling/index.html new file mode 100644 index 0000000000..4fe2ca79fa --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/pump_modelling/index.html @@ -0,0 +1,19 @@ + + + + + +Pump modelling | eCalc™ Docs + + + + +

    Pump modelling

    +

    Attention

    +

    Pumps can both be single speed and variable speed. Often, the pumping capacity on an installation is filled with a system of several pumps in parallel.

    +
    Attention

    The pump models in eCalc™ are intended for water, i.e., there is no friction dependency. +Thus, for usage in other types of pumps (e.g., where the +fluid viscosity changes with the fluid mixture), the results might not be as intended.

    +

    Core theory behind the modelling of pumps in eCalc™ can be found here.

    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts/index.html b/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts/index.html new file mode 100644 index 0000000000..5960615947 --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts/index.html @@ -0,0 +1,67 @@ + + + + + +Pump chart | eCalc™ Docs + + + + +

    Pump chart

    +

    Energy usage for pumps is not based on pre-sampled data between rates, +pressures and energy usage, but on equations and the pump chart defining the pumps.

    +

    There are two types of pump models supported:

    +
      +
    • Variable speed pumps
    • +
    • Single speed pumps
    • +
    +

    The pump chart defines the pump's operational area. When rates below minimum flow +(a point with the lowest rate for a single speed pump and a line defined by the lowest rate vs. +head for each speed for variable speed) are requested, the rate is projected up and +evaluated at minimum flow to mimic the ASV (anti-surge valve).

    +

    For heads below minimum head/minimum speed, i.e., when the requested pressure +difference between the outlet and the inlet is smaller than the minimum pressure difference, +the head will be lifted up to minimum head to mimic that the pump will then be run on +its minimum speed and the pressure will be choked back downstream of the pump. +For single speed pumps, the minimum speed/minimum head curve is the same as +the head vs. rate curve.

    +
    Tip

    When calibrating pump charts to historical data, the head values for maximum speed could be +put in the cloud of data to be unbiased. However, eCalc will treat all head values above the +maximum defined in the chart as infeasible (outside pump capacity).

    To mitigate this when +running through historical data for power calibration, the keyword HEAD_MARGIN may be used to move points outside capacity (but inside the margin) to the capacity limit.

    +

    PUMP_CHART_SINGLE_SPEED

    +

    Pump chart data for single speed pump. The required fields are RATE and HEAD. Optionally (and most likely) EFFICIENCY and UNITS should be supplied as well. +(if not given, efficiency is set to 100%).

    +

    Header Requirements

    +

    Required

    +
      +
    • RATE
    • +
    • HEAD
    • +
    +

    Optional

    +
      +
    • EFFICIENCY, if not set the efficiency is assumed to be 100%.
    • +
    • SPEED, if set all values must be equal.
    • +
    +

    Note that speed is not used in any way for single speed pumps and is only included here to allow the speed column to be +present in the input file without the run failing. There is still a check that all speeds are equal if speed is present +to avoid usage of the wrong pump model, i.e. avoid using the single speed model for variable speed pump chart data.

    +

    Format

    +
    FACILITY_INPUTS:
    - NAME: <FACILITY_INPUT_NAME>
    FILE: <path_to_file.csv>
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, only M supported>
    EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>
    +

    PUMP_CHART_VARIABLE_SPEED

    +

    Description

    +

    Pump chart data for variable speed (VSD) pump. The required fields are SPEED, +RATE and HEAD. Optionally (and most likely) EFFICIENCY and UNITS should be supplied as well. +(if not given, efficiency is set to 100%).

    +

    Header Requirements

    +
      +
    • RATE, HEAD and SPEED required.
    • +
    • EFFICIENCY, UNITS optional.
    • +
    +

    Format

    +
    FACILITY_INPUTS:
    - NAME: <FACILITY_INPUT_NAME>
    FILE: <path_to_file.csv>
    TYPE: PUMP_CHART_VARIABLE_SPEED
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, only M supported>
    EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>
    +

    Examples

    +
    FACILITY_INPUTS:
    - NAME: a_single_speed_pump
    FILE: inputs/single_speed_pumpchart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    - NAME: a_variable_speed_pump
    FILE: inputs/variable_speed_pumpchart.csv
    TYPE: PUMP_CHART_VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    - NAME: a_single_speed_pump_with_head_margin_applied
    FILE: inputs/single_speed_pumpchart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE
    HEAD_MARGIN: 10
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/sampled_compressor_model/index.html b/docs/about/modelling/setup/facility_inputs/sampled_compressor_model/index.html new file mode 100644 index 0000000000..6342468fcd --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/sampled_compressor_model/index.html @@ -0,0 +1,67 @@ + + + + + +Sampled compressor model | eCalc™ Docs + + + + +

    Sampled compressor model

    The compressor model is set up in an external tool, and this model is sampled by +running a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a .csv file and +inputted into eCalc™. Each line in the .csv defines a point (rate, suction pressure, discharge pressure) and the total energy usage.

    +
      +
    • +

      For electrically driven compressor trains. The total energy usage should be given in megawatts (MW).

      +
    • +
    • +

      For turbine driven compressor trains. It is recommended to give the total energy usage in megawatts (MW) and couple the compressor model to a turbine model. However, it is possible (for backward compatibility) to give the total energy usage as fuel usage in standard cubic meters per day (Sm3/day) and use the model directly. In this case, you can also provide a POWER (MW) column to calculate power for the shaft based on fuel usage.

      +
    • +
    • +

      The latter (turbine driven compressor train) will at some point become deprecated as it is replaced by COMPRESSOR_WITH_TURBINE mentioned above.*

      +
    • +
    • +

      Inside the convex hull defined by the input variables, there is a +barycentric interpolation +based on a Delaunay triangulation.

      +
    • +
    • +

      Outside the defined area, there may be extrapolations where this is reasonable, i.e.,

      +
        +
      • for rates lower than the defined rates, the table is extrapolated up to minimum +flow (to mimic ASV (anti-surge valve)/recirculation valve)
      • +
      • the suction pressure is extrapolated down to the defined area
      • +
      • the discharge pressure is extrapolated up to defined area to mimic choking when the required +head is lower than the compressor operational area.
      • +
      +
    • +
    +

    Format

    +

    The sampled compressor model is defined under the main keyword FACILITY_INPUTS in the format

    +
        NAME: <model name>
    FILE: <sampled_data>.csv
    TYPE: COMPRESSOR_TABULAR
    +

    Header requirements for the sampled compressor csv file

    +
      +
    • POWER (and/or FUEL)
    • +
    • A minimum of one (but more are allowed) of the following: +
        +
      • RATE
      • +
      • SUCTION_PRESSURE
      • +
      • DISCHARGE_PRESSURE
      • +
      +
    • +
    +

    In cases where the model is directly used as a turbine/fuel driven compressor without coupling it to an eCalc turbine +model, POWER may be replaced by FUEL.

    +
    Shaft power reporting

    In the case FUEL is provided, it is also possible to specify POWER in the csv-file in order to calculate shaft power usage for fuel driven compressors

    +

    If only POWER is provided, we assume that the compressor is electrical-driven +If FUEL is provided, we assume that the compressor is turbine-driven (also when both FUEL and POWER is given)

    +

    Units

    +
    QuantityUnits
    POWERMW
    RATESm3/day
    SUCTION_PRESSUREbar
    DISCHARGE_PRESSUREbar
    FUELSm3/day
    +

    Example tables

    +

    1D example

    +
    RATEPOWER
    00
    10000010
    100000010
    260000015
    440000020
    +

    3D example

    +
    RATESUCTION_PRESSUREDISCHARGE_PRESSUREPOWER
    1.00E+061012.720.3664
    1.00E+061026.212.293
    1.00E+062631.360.2739
    1.00E+062670.776.28
    1.00E+063441.210.368
    1.00E+063494.248.435
    1.00E+067894.120.7401
    1.00E+0678231.622.46
    6.00E+062636.934.197
    6.00E+062657.437.32
    6.00E+063846.962.156
    6.00E+0638106.29.557
    6.00E+065467.261.95
    6.00E+0654155.614.35
    6.00E+067894.171.399
    6.00E+0678231.622.46
    1.10E+074266.929.712
    1.10E+074281.6311.89
    1.10E+076275.643.678
    1.10E+0762180.816.94
    1.10E+077897.793.452
    1.10E+0778231.622.46
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/tabular/index.html b/docs/about/modelling/setup/facility_inputs/tabular/index.html new file mode 100644 index 0000000000..15cd590ee6 --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/tabular/index.html @@ -0,0 +1,37 @@ + + + + + +Tabular models | eCalc™ Docs + + + + +

    Tabular models

    Additional equipment that are considered to be energy consumers can be specified using the keyword TABULAR. +This is given that a form of reservoir rates (oil/gas production) can be linked to either fuel or power consumption.

    +

    This is considered to be a consumer energy function for pure barycentric interpolation, no extrapolation outside +convex area. One column defines the function value, the rest of the columns defines the +variables for a 1D (if one variable column) or multidimensional interpolation.

    +

    Header and unit requirements

    +
    HeaderUnitComment
    PowerMWFor power driven consumers
    FuelSm3/dayFor fuel (turbine) driven consumers
    +

    Variable headers can be chosen freely as long as these correspond to the defined variables for the function.

    +

    Example

    +

    1D tabular energy function

    +

    Contents of the file energyfunc_1d_rate_fuel.csv:

    +
    RATE,     FUEL
    0, 0
    1, 137750
    1000000, 137750
    2000000, 145579
    3000000, 153335
    4000000, 161022
    5000000, 168644
    +

    The entry in FACILITY_INPUTS:

    +
    FACILITY_INPUTS:
    - NAME: gasinjectiondata
    FILE: energyfunc_1d_rate_fuel.csv
    TYPE: TABULAR
    +

    The entry in INSTALLATIONS under a fuel consumer:

    +
    INSTALLATIONS:
    ....
    - NAME: gasinjection
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: gasinjectiondata
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_INJ # [Sm3/day]
    +
    Note

    Note that the name RATE in the input file (under FACILITY_INPUT) and the variable name RATE under VARIABLES +must be equal!

    +

    3D tabular energy function

    +

    Contents of file energyfunc_3d_rate_ps_pd_power.csv:

    +
         RATE, SUCTION_PRESSURE, DISCHARGE_PRESSURE,       POWER
    # [Sm3/d], [bar], [bar], [MW]
    1.00E+06, 10, 12.72, 0.3664
    1.00E+06, 10, 26.21, 2.293
    1.00E+06, 26, 31.36, 0.2739
    1.00E+06, 26, 70.77, 6.28
    1.00E+06, 34, 41.21, 0.368
    1.00E+06, 34, 94.24, 8.435
    1.00E+06, 78, 94.12, 0.7401
    1.00E+06, 78, 231.6, 22.46
    6.00E+06, 26, 36.93, 4.197
    6.00E+06, 26, 57.43, 7.32
    6.00E+06, 38, 46.96, 2.156
    6.00E+06, 38, 106.2, 9.557
    6.00E+06, 54, 67.26, 1.95
    6.00E+06, 54, 155.6, 14.35
    6.00E+06, 78, 94.17, 1.399
    6.00E+06, 78, 231.6, 22.46
    1.10E+07, 42, 66.92, 9.712
    1.10E+07, 42, 81.63, 11.89
    1.10E+07, 62, 75.64, 3.678
    1.10E+07, 62, 180.8, 16.94
    1.10E+07, 78, 97.79, 3.452
    1.10E+07, 78, 231.6, 22.46
    +

    The entry in FACILITY_INPUTS:

    +
    FACILITY_INPUTS:
    - NAME: booster
    FILE: energyfunc_3d_rate_ps_pd_power.csv
    TYPE: TABULAR
    +

    The entry in INSTALLATIONS under a fuel consumer (for 3-d tabular):

    +
    INSTALLATIONS:
    ...
    - NAME: gasexport
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: booster
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_SALES # [Sm3/day]
    - NAME: SUCTION_PRESSURE
    EXPRESSION: SIM1;SUCTION_PRESSURE {+} 3 # [bara]
    - NAME: DISCHARGE_PRESSURE
    EXPRESSION: 100 # [bara]
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/file_format_and_syntax/expressions/index.html b/docs/about/modelling/setup/file_format_and_syntax/expressions/index.html new file mode 100644 index 0000000000..940450e863 --- /dev/null +++ b/docs/about/modelling/setup/file_format_and_syntax/expressions/index.html @@ -0,0 +1,50 @@ + + + + + +Expressions | eCalc™ Docs + + + + +

    Expressions

    +

    The variables needed in the energy functions for the variable consumers, may not always be directly found in the +reservoir inputs. For example, there may be two group rates that should be added to be +consistent with the net rate through a compressor system. Or, it may be that a pressure defined in a network node is +not equal to the pressure at the inlet/outlet of a compressor system and some delta pressure must be added.

    +

    To avoid forcing the users to define new variables in the simulation files/CSV data and also keep the data in the +consumer’s energy function consistent, the calculator supports expressions to define variables (and conditions in the +CONDITIONS.

    +
    warning

    When creating new variables from CSV files make sure to choose the right interpolation type! +See INTERPOLATION_TYPE for more information.

    +

    Available operators

    +

    As reservoir simulation vectors (and also CSV headers) may include mathematical operators +like +, - in their names, the operators must be surrounded by curly brackets, {}, +in the expressions. Logical operators (>, >=, <, <=, ==, !=) +evaluates to 0 or 1.

    +

    The following operators are supported:

    +
    OperatorDescriptionExample
    {+}Addition2 {+} 1
    {-}SubtractionSIM;GAS {-} 10
    {*}MultiplicationSIM;GAS {*} 2
    {/}DivisionSIM;GAS {/} 2
    {^}PowerSIM;GAS {^} 2
    ( )Parentheses( SIM;GAS {+} 2 ) {/} 2
    <Less thanSIM;GAS {+} (SIM1;OIL < 150) {*} 1000000
    <=Less than or equalSIM;GAS {+} (SIM1;OIL <= 150) {*} 1000000
    >Greater thanSIM;GAS {+} (SIM1;OIL > 150) {*} 1000000
    >=Greater than or equalSIM;GAS {+} (SIM1;OIL >= 150) {*} 1000000
    ==EqualSIM;GAS {+} (SIM;FLAG == 1) {*} 1000000
    !=Not equalSIM;GAS {-} (SIM;FLAG != 1) {*} 1000000
    +

    Examples

    +

    Combining data from different reservoir inputs

    +

    The rate through a gas injection compressor is the sum of injection rate for the field plus +some additional injection rate for a tie-in (whose data is specified in a CSV file with +key SIM2):

    +
    VARIABLES:
    total_rate_through_compressor:
    VALUE: SIM1;GAS_INJ {+} SIM2;GAS_INJ
    +

    Model of additional rate

    +

    The rate through a compressor is the produced rate plus some additional term. This term Q is a function of pressures P1P_{1} and P2P_{2},

    +Q=25000P1(P2P1)Q = 25000 \cdot \sqrt{P_{1} \cdot \left( P_{2} - P_{1} \right)} +

    The addition is only added when the reservoir gas rate is positive.

    +
    VARIABLES:
    rate:
    VALUE: SIM;GAS_PROD {+} ( SIM;GAS_PROD > 0 ) {*} 25000 {*} ( SIM;P1 {*} ( SIM;P2 {-} SIM;P1 ) ) {^} 0.5
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/file_format_and_syntax/index.html b/docs/about/modelling/setup/file_format_and_syntax/index.html new file mode 100644 index 0000000000..5a317f98ad --- /dev/null +++ b/docs/about/modelling/setup/file_format_and_syntax/index.html @@ -0,0 +1,55 @@ + + + + + +File format and syntax | eCalc™ Docs + + + + +

    File format

    +

    The setup file is written in YAML format and needs to follow a strict pattern which consists of several levels specified by indentation. The indentation is very important. It is recommended to use an indentation of 2 spaces per level. At each level, there might be both required and optional keywords.

    +

    Setup file syntax

    +

    The overall system in eCalc is that the user defines inputs from subsurface and facility and +then establishes a model between these.

    +

    On the top level, the required keywords are FACILITY_INPUTS which defines the input from facility characterization, TIME_SERIES which defines time-dependant input parameters (e.g. reservoir profiles), FUEL_TYPES which defines the various fuel types used in the system, and INSTALLATIONS which is the top node defining the system of energy consumers. MODELS is optional and may be used for multi-level energy usage models.

    +

    Documentation about how to set up each of these fields are found here, respectively:

    +
      +
    • TIME_SERIES: List of input sources, CSV-files, containing all time series data including the +reservoir variables.
    • +
    • FACILITY_INPUTS: List of input files from facility characterization. Typically, this can be +characteristics for an element in a consumer system or characteristics for a generator set.
    • +
    • FUEL_TYPES: Defining the fuel types being used in the model and the corresponding +emissions.
    • +
    • MODELS: Used for multi-level models, one model may refer to other models from either +MODELS or FACILITY_INPUTS
    • +
    • VARIABLES: Used for defining variables to be used in expressions throughout the YAML file
    • +
    • INSTALLATIONS: Defining the system of energy consumers on each installation +(e.g. platform or mobile unit).
    • +
    +

    An eCalc model may contain one or several installations. Each installation has a set of specifications +(e.g. fuel type, hydrocarbon export, ...) and specifications of the system of consumers.

    +

    Emissions are emitted when fuel is burned. Thus, the first sublevel of consumers for an installation, +are the fuel burners. As the figure below shows, there are three main types of fuel burners:

    +
      +
    • Electricity generation (generator sets),
    • +
    • Turbine-driven processes,
    • +
    • Flare/vent/other non reservoir dependent burners/emitters.
    • +
    +

    In eCalc under each installation, there is one keyword (GENERATORSETS) +specifying the generator sets and one keyword (FUELCONSUMERS) +specifying processes that require fuel directly (turbine-driven processes and flare/vent).

    +

    The processes with electrical motor drives and other electrical loads are modeled at the sublevel +under GENERATORSETS.

    +

    +
    Comments

    Comments are supported anywhere in the yml and csv files by using '#' to indicate the start of a comment. +All data after a '#' on the same line is ignored. If '#' is used at the beginning of the file, the +first line without a preceding '#' is used as the header.

    +

    Examples

    +

    YAML format example

    +
    TIME_SERIES:
    - FILE:
    TYPE:
    NAME:

    FACILITY INPUTS:
    - FILE:
    TYPE:
    NAME:

    FUEL_TYPES:
    - NAME:
    FACTOR:

    MODELS:
    - NAME:
    - TYPE:

    VARIABLES:
    <variable_name>
    VALUE: <expression>

    INSTALLATIONS:
    - NAME:
    HCEXPORT:
    FUEL:
    GENERATORSETS:
    - NAME:
    ELECTRICITY2FUEL:
    CATEGORY:
    CONSUMERS:
    - NAME:
    CATEGORY:
    ENERGY_USAGE_MODEL:

    +

    Full examples

    +

    Examples are an excellent way to quickly get an overview of the syntax. Check them out here.

    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/fuel_types/index.html b/docs/about/modelling/setup/fuel_types/index.html new file mode 100644 index 0000000000..fb4cdc1f5b --- /dev/null +++ b/docs/about/modelling/setup/fuel_types/index.html @@ -0,0 +1,24 @@ + + + + + +Fuel types | eCalc™ Docs + + + + +

    Fuel types

    note

    The FUEL_TYPES keyword is mandatory within the eCalc™ YAML file.

    +

    This part of the setup specifies the various fuel types and associated emissions +used in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the +INSTALLATIONS part of the setup by its name.

    +

    The use of fuel can lead to one or more emission types, specified in EMISSIONS.

    +

    You can optionally specify a CATEGORY.

    +

    Format

    +
    FUEL_TYPES:
    - NAME: <name_1>
    CATEGORY: <category_1>
    EMISSIONS: <emissions data>
    - NAME: <name_2>
    CATEGORY: <category_2>
    EMISSIONS: <emissions data>
    +

    Example

    +

    This is a full example where there are 3 fuel type definitions, i.e., there are 3 different +fuels defined that can be used in your INSTALLATIONS.

    +
    FUEL_TYPES:
    - NAME: fuel_gas # Name of this fuel, use this when referencing this fuel in the FUEL specification in the INSTALLATIONS part
    EMISSIONS:
    - NAME: CO2 # Name of the emission type
    FACTOR: 2.15 # kg/Sm3
    - NAME: CH4
    FACTOR: 0.00091 # kg/Sm3
    - NAME: flare_gas
    CATEGORY: FUEL_GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.73
    - NAME: CH4
    FACTOR: 0.00024
    - NAME: diesel
    CATEGORY: DIESEL
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.7085 # kg/l - input diesel usage in l/d
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/index.html b/docs/about/modelling/setup/index.html new file mode 100644 index 0000000000..e3973ef989 --- /dev/null +++ b/docs/about/modelling/setup/index.html @@ -0,0 +1,17 @@ + + + + + +Setup an eCalc™ Model | eCalc™ Docs + + + + +

    Set up an eCalc Model

    +

    This section describes how to create your own eCalc™ model file.

    +

    There are six separate sections which make up each model, these being:

    +
    InputFunction
    TIME_SERIESInput of time dependent variables. For example, production profiles for an installation
    FACILITY_INPUTSInput of generator sets, and facility equipment that consumers either power or fuel (with the exception of compressors that are modelled with compressor charts)
    MODELSInput of compressor models that use compressor charts. Gas turbines that are directly coupled to a compressor are also included here
    FUEL_TYPESInput of the various fuel types used in the specified installation(s)
    VARIABLESInput of variables that can reference to in expressions within the YAML set-up file
    INSTALLATIONSThis is essentially the only "output" section in the YAML setup file. All the inputs are specified and related to specific platforms/rigs, and whether or not they consume either power or fuel
    +

    All of the above are mandatory inputs for eCalc™ to run, with the exception of models (which is an optional, but still important input) and variables.

    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor/index.html b/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor/index.html new file mode 100644 index 0000000000..cc16e01fac --- /dev/null +++ b/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor/index.html @@ -0,0 +1,22 @@ + + + + + +Compressor | eCalc™ Docs + + + + +

    COMPRESSOR Energy Usage Model

    +

    When COMPRESSOR is specified under ENERGY_USAGE_MODEL the only keyword that is allowed is ENERGYFUNCTION. +This model only supports a single compressor, which can either be a tabular compressor model defined in FACILITY_INPUTS or a compressor model defined in MODELS.

    +

    The attributes RATE, SUCTION_PRESSURE and +DISCHARGE_PRESSURE are required to be specified in the energy usage model. Here, the specified rate will be for the entire train, the +suction pressure will be at the inlet of the first stage, whilst the discharge pressure will be the outlet pressure of the last stage.

    +

    Format

    +
    NAME: <Reference name>
    TYPE: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    CONDITION: <condition expression>
    ENERGYFUNCTION: <reference to energy function in facility inputs or models of compressor type>
    RATE: <rate expression>
    SUCTION_PRESSURE: <suction pressure expression>
    DISCHARGE_PRESSURE: <discharge pressure expression>
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: booster_compressor_reference
    RATE: SIM1;GAS_PROD
    SUCTION_PRESSURE: SIM1;SUCTION_PRESSURE
    DISCHARGE_PRESSURE: SIM1;DISCHARGE_PRESSURE
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system/index.html b/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system/index.html new file mode 100644 index 0000000000..42fbc6c3d9 --- /dev/null +++ b/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system/index.html @@ -0,0 +1,25 @@ + + + + + +Compressor system | eCalc™ Docs + + + + +

    COMPRESSOR_SYSTEM energy usage model

    +

    When COMPRESSOR_SYSTEM is specified under ENERGY_USAGE_MODEL a fully defined compressor model (with charts) can be used. Here, the following are allowed under the +COMPRESSOR_SYSTEM keyword:

    + +

    The key difference between this model and the COMPRESSOR keyword is that multiple compression trains can be specified.

    +

    Format

    +
    NAME: <Reference name>
    TYPE: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    CONDITION: <condition expression>
    COMPRESSORS:
    - NAME: <name of compressor>
    COMPRESSOR_MODEL: <reference to compressor model in facility inputs>
    TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>
    OPERATIONAL_SETTINGS:
    <operational settings data>
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT
    OPERATIONAL_SETTINGS:
    - RATES:
    - SIM1;GAS_SALES
    - 0
    - SIM1;GAS_INJ
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURES:
    - 150
    - 150
    - SIM1;INJ_PRESSURE
    - RATES:
    - SIM1;GAS_SALES {/} 2
    - SIM1;GAS_SALES {/} 2
    - SIM1;GAS_INJ
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURES:
    - 150
    - 150
    - SIM1;INJ_PRESSURE
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.html b/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.html new file mode 100644 index 0000000000..f7cea57938 --- /dev/null +++ b/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.html @@ -0,0 +1,22 @@ + + + + + +Compressor models | eCalc™ Docs + + + + +

    Compressor models in calculations

    +

    There are different options on how to utilise compressor models in the calculations within the +ENERGY_USAGE_MODEL section in INSTALLATIONS. Three different options will be illustrated here:

    +

    No matter the compressor model type, it can either be placed in two sections, which can be:

    +
      +
    • Under the CONSUMERS section under GENERATORSETS. This is applicable for electrical motor driven compressors where electricity is generated in de-coupled gas turbines and distributed to the individual process units.
    • +
    • Under the FUELCONSUMERS section. Here it is necessary for the compressor model to be coupled to a gas turbine model. The coupled turbine is solely driving the compressor system to which it is attached to.
    • +
    +

    Example

    +
    INSTALLATIONS:
    - NAME: InstallationA
    CATEGORY: FIXED
    FUEL: fuel_gas
    GENERATORSETS:
    - NAME: gensetA
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Gas injection compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    ...

    FUELCONSUMERS:
    - NAME: Gas export compressor
    CATEGORY: GAS-DRIVEN-COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    ...
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html b/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html new file mode 100644 index 0000000000..5dbf9c35a1 --- /dev/null +++ b/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html @@ -0,0 +1,22 @@ + + + + + +Variable speed compressor train multiple streams and pressures | eCalc™ Docs + + + + +

    VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model

    +

    This energy usage model allows the compressor train model type +Variable speed compressor train model with multiple streams and pressures.

    +

    Format

    +
    NAME: <Reference name>
    TYPE: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    CONDITION: <condition expression>
    COMPRESSOR_TRAIN_MODEL: <reference a Variable speed compressor train model with multiple streams and pressures model>
    RATE_PER_STREAM:
    - <Expression for stream 1>
    - <Expression for stream 2>
    - ...
    - <Expression for stream N>
    SUCTION_PRESSURE: <suction pressure expression>
    DISCHARGE_PRESSURE: <discharge pressure expression>
    INTERSTAGE_CONTROL_PRESSURE: <interstage control pressure expression>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    +

    The number of elements in RATE_PER_STREAM must correspond to the number of streams defined for the model referenced in +COMPRESSOR_TRAIN_MODEL.

    +

    INTERSTAGE_CONTROL_PRESSURE is required if the model referenced in COMPRESSOR_TRAIN_MODEL has has an +interstage control pressure defined. If there is no interstage control pressure defined in COMPRESSOR_TRAIN_MODEL, +INTERSTAGE_CONTROL_PRESSURE should not be defined.

    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/direct_consumers/index.html b/docs/about/modelling/setup/installations/direct_consumers/index.html new file mode 100644 index 0000000000..c7de6f2409 --- /dev/null +++ b/docs/about/modelling/setup/installations/direct_consumers/index.html @@ -0,0 +1,25 @@ + + + + + +Direct consumers | eCalc™ Docs + + + + +

    DIRECT ENERGY USAGE MODEL

    +

    This energy model usage type allows for defining energy usage directly with an expression. It needs to be either +accompanied by LOAD (for electrical consumers) or FUELRATE (for fuel consumers). The energy usage will be +equal to the result of the expression given for LOAD/FUELRATE.

    +

    When a model is run with REGULARITY, there is an option to specify whether the direct consumer is of stream day +or calendar day energy usage rate with CONSUMPTION_RATE_TYPE.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD/FUELRATE: <choose either load or fuelrate>
    CONSUMPTION_RATE_TYPE: <consumption rate type>
    CONDITION/S: <choose either condition or conditions>
    POWERLOSSFACTOR: <power loss factor (number)>
    +

    Example

    +

    Direct load

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 10
    +

    Direct fuel rate

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: 100000
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/generator_sets_in_calculations/index.html b/docs/about/modelling/setup/installations/generator_sets_in_calculations/index.html new file mode 100644 index 0000000000..9408c5af90 --- /dev/null +++ b/docs/about/modelling/setup/installations/generator_sets_in_calculations/index.html @@ -0,0 +1,63 @@ + + + + + +Generator sets | eCalc™ Docs + + + + +

    Generator sets in calculations

    +

    The GENERATORSETS keyword is optional. However, the only requirement is that each +installation must have defined either GENERATORSETS or +FUELCONSUMERS.

    +

    Under GENERATORSETS one or several generator sets +(a 'set' of an engine of some sort and a generator) are specified in a list.

    +

    Each generator set requires three sub-keywords, ELECTRICITY2FUEL +and CONSUMERS and CATEGORY. +Optionally, FUEL may be used to override the default fuel type specification for +the installation. If not specified, it will inherit that of the installation.

    +
    What happens when fuel is specified?

    When FUEL is defined for a generator set, there is no merging between the installation fuel +definition and the generator set fuel definition, but a complete override of the configuration.

    +

    Category can be either TURBINE-GENERATOR or POWER-FROM-SHORE.

    +

    Format

    +
    GENERATORSETS:
    - NAME: <generatorset name>
    CATEGORY: <category>
    FUEL: <optional fuel configuration reference>
    ELECTRICITY2FUEL: <electricity to fuel facility input reference>
    CONSUMERS:
    ...
    +

    Electricity2fuel function

    +

    Description

    +

    The behavior of a generator set is described by an ELECTRICITY2FUEL +table, which relates the burned fuel rate to delivered power, including the power generation efficiency at different loads. +It also defines the operational envelope of the generator set.

    +

    ELECTRICITY2FUEL may be modeled with a constant function through time or +with different power vs. fuel relations for different time intervals.

    +

    Format

    +
    ELECTRICITY2FUEL: <facility_input_reference>
    +

    or

    +
    ELECTRICITY2FUEL:
    <DATE>: <facility_input_reference_1>
    <DATE>: <facility_input_reference_2>
    +

    Power from shore

    +

    Description

    +
    note

    Power from shore is currently handled in eCalc™ by defining a dummy ELECTRICITY2FUEL model with zero fuel usage, and applying the POWER-FROM-SHORE category. This is an intermediate solution and will be dealt with differently in the future.

    +

    Example

    +

    Make an ELECTRICITY2FUEL input file with zero fuel usage.

    +
    POWER, FUEL
    # [MW], [SM3/day]
    0, 0
    50, 0
    +

    Specify ELECTRICITY2FUEL under +FACILITY_INPUTS.

    +
    FACILITY_INPUTS:
    - NAME: genset_pfs
    TYPE: ELECTRICITY2FUEL
    FILE: genset_pfs.csv
    +

    Use the POWER-FROM-SHORE category and the ELECTRICITY2FUEL +specified under FACILITY_INPUTS.

    +
    GENERATORSETS:
    - NAME: generatorset_with_pfs_event
    CATEGORY:
    2020-01-01: TURBINE-GENERATOR
    2030-01-01: POWER-FROM-SHORE
    ELECTRICITY2FUEL:
    2020-01-01: genset_turbine
    2030-01-01: genset_pfs
    CONSUMERS:
    ...
    +

    If power from shore is used for the full time range you can skip the dates in both CATEGORY and ELECTRICITY2FUEL

    +
    GENERATORSETS:
    - NAME: generatorset_with_pfs_event
    CATEGORY: POWER-FROM-SHORE
    ELECTRICITY2FUEL: genset_pfs
    CONSUMERS:
    ...
    +

    Heaters and boilers

    +

    Description

    +
    note

    Heaters and boilers should be modeled in eCalc™ as +GENERATORSETS, applying the HEATER and BOILER categories. This is an intermediate solution and may be dealt with differently in the future.

    +

    Example: Boiler as generator set

    +

    Specify the correlation between energy delivered and fuel consumed under +FACILITY_INPUTS:

    +
    FACILITY_INPUTS:
    - NAME: boiler_energy_fuel
    TYPE: ELECTRICITY2FUEL
    FILE: boiler_energy_fuel.csv
    +

    Use the BOILER category and the ELECTRICITY2FUEL +specified under FACILITY_INPUTS:

    +
    GENERATORSETS:
    - NAME: boiler_as_generator
    CATEGORY: BOILER
    ELECTRICITY2FUEL: boiler_energy_fuel
    CONSUMERS:
    ...
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/index.html b/docs/about/modelling/setup/installations/index.html new file mode 100644 index 0000000000..5aa53e9c99 --- /dev/null +++ b/docs/about/modelling/setup/installations/index.html @@ -0,0 +1,62 @@ + + + + + +Installations | eCalc™ Docs + + + + +

    Installations

    note

    The INSTALLATIONS keyword is mandatory within the eCalc™ YAML file.

    +

    In INSTALLATIONS the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation.

    +
      +
    • Essentially installations on which fuel is burned to generate energy for the consumers.
    • +
    +

    The structure of the keywords under INSTALLATIONS +is linked to the structure in the general consumer overview for an installation.

    +

    CATEGORY is optional, and generally reserved for use with LTP.

    +

    Referring to time series

    +

    In the installations set up, one may refer to variables from TIME_SERIES +in many places by using expressions to build up custom, or changing, configurations.

    +

    Referring to variables is done on the format:

    +
    <KEY>;<VARIABLE_NAME>
    +

    where <KEY> must be defined in TIME_SERIES, defining the time series input source +(e.g., CSV file), and <VARIABLE_NAME> is the name of the variable. +See TIME SERIES for more examples

    +

    Time intervals for variables/expressions and models

    +

    For various reasons, the data in the INSTALLATIONS section may vary in time. +The consumers may need to be modeled differently due to rebuilds or degeneration. It could be that the user wants to +make a simple model for some periods and a more detailed model for others (e.g., a rate only model early time periods and a pressure +dependent model in the field's late life).

    +

    For the fields that support multiple time intervals, the syntax is generally to insert a +date on the format YYYY-MM-DD followed by the expression/model for the time interval between +this date and the next entered date. See Time intervals for an example.

    +
    Note

    When time dependency is used, the values before the first time default to 0 (zero)

    +
      +
    • HCEXPORT is zero before the first time given.
    • +
    • ELECTRICITY2FUEL will have 0 fuel usage before the first time defined, despite a non-zero power load.
    • +
    • FUEL: The fuel rate will be 0 before the first entered date.
    • +
    • Consumer energy consumption will be 0 before the first defined time.
    • +
    +

    Format

    +
    INSTALLATIONS:
    - NAME: <name of installation 1>
    GENERATORSETS: <generator set specifications for installation 1>
    FUELCONSUMERS: <fuel consumer specifications for installation 1>
    FUEL: <fuel specification for installation 1>
    HCEXPORT: <hydrocarbon export specification for installation 1>
    REGULARITY: <regularity specification for installation 1>
    VENTING_EMITTERS: <direct emissions specification for installation 1>
    CATEGORY: <category for installation 1>
    - NAME: <name of installation 2>
    GENERATORSETS: <generator set specifications for installation 2>
    FUELCONSUMERS: <fuel consumer specifications for installation 2>
    FUEL: <fuel specification for installation 2>
    HCEXPORT: <hydrocarbon export specification for installation 2>
    REGULARITY: <regularity specification for installation 2>
    VENTING_EMITTERS: <direct emissions specification for installation 2>
    CATEGORY: <category for installation 2>
    - ...
    +

    Example

    +

    General structure

    +
    INSTALLATIONS
    - NAME: Platform_A
    CATEGORY: FIXED
    <The data for installation 1 to be put here>
    - NAME: Platform_B
    CATEGORY: MOBILE
    <The data for installation 2 to be put here>
    +

    Referring to time series

    +
    SIM;OIL_PROD
    +

    SIM is the key defined in TIME_SERIES.

    +

    The user can define expressions of variables, +see expressions for details. The following is an example of using expressions:

    +
    SIM1;WATER_PROD:FIELD_A {+} SIM2;WATER_PROD:FIELD_B
    +

    SIM1 and SIM2 are here different reservoir sources with potential different time steps. +This is not a problem and handled by eCalc automatically.

    +

    Time intervals

    +

    This example uses the HCEXPORT keyword.

    +

    Example: same expression for the entire time frame

    +
    HCEXPORT: SIM;OIL_PROD
    +

    Example: expression varies through time

    +
    HCEXPORT:
    2001-01-01: SIM1;OIL_PROD
    2005-01-01: SIM2:OIL_PROD {+} SIM2;GAS_SALES
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/pump_models_in_calculations/index.html b/docs/about/modelling/setup/installations/pump_models_in_calculations/index.html new file mode 100644 index 0000000000..242fca1c77 --- /dev/null +++ b/docs/about/modelling/setup/installations/pump_models_in_calculations/index.html @@ -0,0 +1,37 @@ + + + + + +Pump models | eCalc™ Docs + + + + +

    Pump models in calculations

    +

    Pump charts are defined in the FACILITY_INPUTS section, and is then referred to from an +ENERGY_USAGE_MODEL.

    +

    PUMP energy usage model

    +

    To configure a single pump, the pump rate, suction- and discharge pressures and fluid density must be given as inputs. In addition, a reference to a pump chart defined in the +FACILITY_INPUTS section has to be included.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: <condition expression>
    ENERGYFUNCTION: <reference energy function in facility inputs of pump type>
    RATE: <rate expression>
    SUCTION_PRESSURE: <suction pressure expression>
    DISCHARGE_PRESSURE: <discharge pressure expression>
    FLUID_DENSITY: <fluid density expression>
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    ENERGYFUNCTION: waterinjection_pump_reference
    RATE: SIM1;WATER_INJ
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITY: 1000
    +

    Units

    +
    QuantityDefault units
    RATESm3/day
    SUCTION_PRESSUREbara
    DISCHARGE_PRESSUREbara
    FLUID_DENSITYkg/m3
    +

    PUMP_SYSTEM energy usage model

    +

    Model a system of pumps that share common manifolds and have cross-overs between them and for which the rate may be +split between them based on various operational strategies.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    CONDITION: <condition expression>
    PUMPS:
    - NAME: <name of compressor>
    CHART: <reference to pump model in facility inputs>
    TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>
    FLUID_DENSITY: <expression defining the fluid density>
    OPERATIONAL_SETTINGS:
    <operational settings data>
    +
    warning

    If all OPERATIONAL_SETTINGS have been exhausted, and there were still some time steps that were outside the +capacity of the operational setting, the last operational setting will be "chosen" nevertheless. In this case the +energy_usage in the output will be set to NaN which indicates that the operational setting, is in fact, invalid +(or converted to 0 when aggregating upwards to e.g. genset)

    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: water_injection_pump_reference
    - NAME: pump2
    CHART: water_injection_pump_reference
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: 1000.0
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    +

    Units

    +
    QuantityDefault units
    RATESm3/day
    SUCTION_PRESSUREbara
    DISCHARGE_PRESSUREbara
    FLUID_DENSITYkg/m3
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/tabular_models_in_calculations/index.html b/docs/about/modelling/setup/installations/tabular_models_in_calculations/index.html new file mode 100644 index 0000000000..9283c2bc7c --- /dev/null +++ b/docs/about/modelling/setup/installations/tabular_models_in_calculations/index.html @@ -0,0 +1,25 @@ + + + + + +Tabular models | eCalc™ Docs + + + + +

    Tabular models

    This type is a pure interpolation model where the user may freely choose all the variables. No extrapolation is done, thus the user +must ensure to cover the entire variable space in the input data. For points outside the input data, the output is +invalid and no energy usage is given (shown in the output vector extrapolations).

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    CONDITION: <condition expression>
    ENERGYFUNCTION: <reference to energy function in facility inputs of type tabular>
    VARIABLES:
    - NAME: <name of variable>
    EXPRESSION: <expression defining the variable>
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: tabulated_energy_function_reference
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_PROD
    - NAME: Gas oil ratio
    EXPRESSION: SIM1;GOR
    - NAME: GAS_TEMPERATURE
    EXPRESSION: SIM1;TEMP
    +

    COMPRESSOR_TABULAR input type

    +

    Consumer energy function for the compressor (or compressor train) is in a tabulated format, +where each line is a point defining the energy consumption for the given variables.

    +

    See Sampled compressor model for details.

    +

    As a single compressor/compressor train (no system), it can be set up in the following way:

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: <facility_inputs_key>
    RATE: <rate expression [Sm3/day]>
    SUCTION_PRESSURE: <suction pressure expression>
    DISCHARGE_PRESSURE: <discharge pressure expression>
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.html new file mode 100644 index 0000000000..03a7d363dd --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.html @@ -0,0 +1,90 @@ + + + + + +Compressor charts | eCalc™ Docs + + + + +

    Compressor chart

    +

    The compressor chart is used to set up a model of each compressor. eCalc™ currently support four ways to set up a +compressor chart

    +
      +
    • Predefined single speed chart
    • +
    • Predefined variable speed chart
    • +
    • Generic compressor chart with a specified design point
    • +
    • Generic compressor chart which is automatically adjusted to have capacity for the input data
    • +
    +

    User defined single speed compressor chart

    +

    The single speed chart type allows a single compressor curve for one speed, using the keyword CURVE

    +

    Format

    +
    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>
    CURVE:
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>
    +

    Example

    +
    MODELS:
    - NAME: predefined_single_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVE:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    +
    Tip

    It is also possible to input single speed compressor chart as csv file.

    Format

    CURVE:
    FILE: <csv file with single speed compressor chart>

    Example

    CURVE:
    FILE: compressor_chart_single_speed.csv
    +

    User defined variable speed compressor chart

    +

    The variable speed chart type allows a fully defined compressor chart with data for two or more speeds, using the keyword CURVES. The upper and +lower speed curves will be interpreted as the speed capacity limits for the chart. +Whilst the lowest rate points on each of the upper and lower speed curves will define the minimum flow line for the compressor.

    +

    Additionally, there is functionality to define a control line which behaves as an alternate to the minimum flow line. This means that your input will be 'cropped' to only include points to the right of the control line - modelling recirculation (ASV) from the correct control line. +See Surge control margin for variable speed compressor chart for more details.

    +
    note

    Using a variable speed compressor chart as input essentially does the same as if a process simulation tool was used to +create an energy function. It has been verified to be close to identical to Unisim within 2% accuracy (smaller +differences in density arise from differences in PVT assumptions and calculations).

    +

    Format

    +
    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>
    CURVES:
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>
    - ... and so forth for all chart curves. Minimum two curves needed.
    +

    Example

    +
    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    - SPEED: 9886
    RATE: [3708, 4502, 4993.6, 5507, 5924]
    HEAD: [13845, 13182, 12425, 11276, 10054]
    EFFICIENCY: [ 0.72, 0.75, 0.748, 0.73, 0.70]
    - SPEED: 10767
    RATE: [4052, 4500, 4999, 5492, 6000, 6439,]
    HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]
    EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]
    +
    Tip

    It is also possible to input variable speed compressor chart as csv file.

    Format

    CURVES:
    FILE: <csv file with variable speed compressor chart>

    Example

    CURVES:
    FILE: compressor_chart_variable_speed.csv
    +

    Generic compressor chart with predefined design point

    +

    The generic compressor chart used is an "average" chart of compressors used on the NCS and cannot be expected to be equal to +the actual chart for a compressor which has been designed and delivered. However, it can be a good first estimation of +how a chart may be for a future process not yet in the design phase.

    +

    This chart will not replace any future compressor curves and it may not be accurate in comparison to the final compressor curve; however, it is a good method to capture the major effects (such as ASV (anti-surge valve) recirculation). +With this method it is possible to view how a "typical" compressor curve would react a large spread in the data set. If the design point is set within the middle of the data spread, points with rates lower than the minimum flow will have some recirculation; whilst, too high or unrealistic rates will not be solved. This is an essential difference in comparison to the generic chart with its design point calculated from input data (which is covered in Generic compressor chart with design point calculated from input data), which will shift the entire compressor curve to solve for even the highest rate and head points.

    +

    Unified generic compressor chart:

    +

    +

    The compressor chart is created by scaling the unified generic compressor chart in the figure above with a design actual +rate and head. Note that the rate is here in the units am3/hr which is NOT EQUAL to Sm3/hr. +The units am3/hr refers to the volumetric rate at inlet conditions (inlet pressure and temperature), and it will differ from the inputted standard rates +due to the difference in density. +The design polytropic head is given in either kJ/kg, m or J/kg, UNITS.

    +

    The generic compressor chart is currently accompanied by a fixed polytropic efficiency (polytropic efficiency +variations within the chart may be supported in the future).

    +

    Format

    +
    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: <polytropic efficiency of the compressor (fixed number)>
    DESIGN_RATE: <design rate>
    DESIGN_HEAD: <design polytropic head>
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>
    +

    Example

    +
    MODELS:
    - NAME: generic_from_design_point_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: 0.75
    DESIGN_RATE: 7000
    DESIGN_HEAD: 50
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: KJ_PER_KG
    EFFICIENCY: FRACTION
    +

    For this method it is important to note that only Simplified variable speed compressor train model is supported.

    +

    Example

    +
    MODELS:
    - NAME: generic_compression_train_design_point
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: sample_fluid
    PRESSURE_CONTROL: UPSTREAM_CHOKE
    COMPRESSOR_TRAIN:
    STAGES:
    - COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    INLET_TEMPERATURE: 30
    +

    Generic compressor chart with design point calculated from input data

    +
    Caution

    Beware that using this functionality in a COMPRESSOR_SYSTEM energy usage model can give some unwanted effects. +E.g. splitting/halving the rates into two equal compressor trains will in effect change the compressor chart for a +compressor set up with GENERIC_FROM_INPUT compared to running the full rate through a single compressor train. +Consider using a single design point instead.

    +

    The generic chart from input is also based on the unified generic compressor chart:

    +

    +

    However, in this case the design point is not specified when setting up the model, instead it is estimated at run time and is entirely based on the inputted data set. +An algorithm is used to set a design point such that all the input data is within the capacity. +Even if there is a large spread in the data, all data points will solve. High rate/head data points will just be covered by the curve; whilst low rate points outside the minimum flow point will have recirculation.

    +

    This method has one major potential downside in comparison to the Generic compressor chart with predefined design point. As all data points will be covered by the compressor curve, if there is an extremely large or unrealistic head or rate value, the other more "normal" data points will be impacted and will either result in a large head adjustment (via upstream/downstream choking) or it will have a large recirculation rate. This has the potential to skew the entire data set solely due to one unrealistic data point. Thus, if this generic chart is utilised it is important to make sure that unrealistic data is filtered out.

    +

    Format

    +
    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    POLYTROPIC_EFFICIENCY: <polytropic efficiency of the compressor (fixed number)>
    UNITS:
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>
    +

    Example

    +
    MODELS:
    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    POLYTROPIC_EFFICIENCY: 0.75
    UNITS:
    EFFICIENCY: FRACTION
    +

    Surge control margin for variable speed compressor chart

    +

    +

    For a variable speed compressor chart it is possible to add a surge control margin. This is currently done by giving a +fraction or percentage as input. The control margin is used to calculate the increase in minimum flow, i.e. as a percentage +or fraction of the rate difference between minimum- and maximum flow, for the given speed. The increase in minimum +flow is calculated individually for each speed curve. The corresponding head and efficiency values for the new minimum flow rate +is found by interpolation along the speed curves. The same compressor chart can be used for multiple compressor stages, +but with different surge control margins. Hence, the surge control margin is defined when setting up the stages in a +Variable speed compressor train model or Variable speed compressor train model with multiple streams and pressures.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in [MODELS]
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Default value is zero>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.html new file mode 100644 index 0000000000..57bdf0a7cf --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.html @@ -0,0 +1,20 @@ + + + + + +Compressor train types | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model/index.html new file mode 100644 index 0000000000..5a1122c123 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model/index.html @@ -0,0 +1,44 @@ + + + + + +Simplified variable speed compressor train | eCalc™ Docs + + + + +

    Simplified variable speed compressor train

    The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures +are assumed based on an assumption of equal pressure fractions for each stage. Based on this, the compressor work is +calculated independently for each compressor as if it was a standalone compressor, neglecting that they are in fact on +the same shaft and thus have a common speed.

    +

    This model supports both user defined compressor charts and +generic compressor charts. See compressor charts for more information.

    +

    In addition, a FLUID MODEL must be specified.

    +

    The model comes in two versions, one where the compressor stages are known (pre defined), and one where the compressor +stages are calculated at run-time based on input data.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS
    COMPRESSOR_TRAIN: <compressor train specification>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>
    CALCULATE_MAX_RATE: <Optional. compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >
    +

    Simplified compressor train model with known compressor stages

    +

    When the compressor stages are known, each stage is defined with a compressor chart and an inlet temperature:

    +
    MODELS:
    - NAME: <model name>
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>
    - ... and so forth for each stage in the train
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>
    +

    Simplified compressor train model with unknown number of compressor stages

    +

    When the number of compressor stages are not known, one may specify the maximum pressure ratio per stage. +When the maximum pressure ratio is set, the number of compressors will be determined at run time (based on input data) +such that the number of compressors is large enough to ensure no pressure ratios are above a given maximum pressure +ratio per stage, but not larger.

    +

    This model is intended for (but not limited to) the use of a generic compressor chart. Especially one can test with the +generic compressor chart which are adjusted at run time (based on input data), for example to explore future +rebuilds/designs where no specifications/data is yet available from vendors et.c.

    +
    MODELS:
    - NAME: <model name>
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: <maximum pressure ratio per stage>
    COMPRESSOR_CHART: <reference to compressor chart model used for all stages, must be defined in [MODELS] or [FACILITY_INPUTS]>
    INLET_TEMPERATURE: <inlet temperature for all stages>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    +

    Examples

    +

    A (single) compressor with a user-defined variable speed compressor chart and fluid composition

    +
    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    - SPEED: 10767
    RATE: [4052, 4500, 4999, 5492, 6000, 6439,]
    HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]
    EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]

    - NAME: fluid_model_1
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: SRK
    COMPOSITION:
    nitrogen: 0.74373
    CO2: 2.415619
    methane: 85.60145
    ethane: 6.707826
    propane: 2.611471
    i_butane: 0.45077
    n_butane: 0.691702
    i_pentane: 0.210714
    n_pentane: 0.197937
    n_hexane: 0.368786

    - NAME: simplified_compressor_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: fluid_model_1
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: predefined_variable_speed_compressor_chart
    +

    A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition

    +
    MODELS:
    - NAME: generic_from_design_point_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: 0.75
    DESIGN_RATE: 7000
    DESIGN_HEAD: 50
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: KJ_PER_KG
    EFFICIENCY: FRACTION

    - NAME: medium_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM
    - NAME: simplified_compressor_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: medium_fluid
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart

    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362] # fractions between 0 and 1

    - NAME: simplified_compressor_model_with_turbine
    TYPE: COMPRESSOR_WITH_TURBINE
    COMPRESSOR_MODEL: simplified_compressor_model
    TURBINE_MODEL: compressor_train_turbine
    +

    A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart

    +
                MODELS:
    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT

    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    - SPEED: 10767
    RATE: [4052, 4500, 4999, 5492, 6000, 6439,]
    HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]
    EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]

    - NAME: dry_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: DRY

    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: dry_fluid
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_input_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: predefined_variable_speed_compressor_chart
    +

    A compressor train where the number of stages are unknown

    +
                MODELS:
    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    - NAME: dry_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: DRY
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: dry_fluid
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5
    COMPRESSOR_CHART: generic_from_input_compressor_chart
    INLET_TEMPERATURE: 30
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model/index.html new file mode 100644 index 0000000000..c77fca2fa2 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model/index.html @@ -0,0 +1,27 @@ + + + + + +Single speed compressor train | eCalc™ Docs + + + + +

    Single speed compressor train

    The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft. +Being single speed compressors on a common shaft means that all compressors will run at the exact same fixed speed, and +this shaft speed can not be varied. Since the shaft speed can not vary, the problem is overdefined given the rate, +suction pressure and discharge pressure. A method for controlling the pressure also needs to be defined, to be able +to calculate the energy usage for given rates, suction pressures and discharge pressures.

    +

    This means that a single speed compressor model needs the following to be defined:

    +
      +
    • A polytropic compressor chart for every compressor stage in the compressor train. For single speed trains, eCalc +only supports user defined single speed compressor charts.
    • +
    • A FLUID MODEL.
    • +
    • A PRESSURE_CONTROL.
    • +
    +

    The model is defined under the main keyword MODELS in the format

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE or COMMON_ASV>
    MAXIMUM_DISCHARGE_PRESSURE: <Maximum discharge pressure in bar (can only use if pressure control is DOWNSTREAM_CHOKE)>
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    - ... and so forth for each stage in the train
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>
    CALCULATE_MAX_RATE: <Optional compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model/index.html new file mode 100644 index 0000000000..c97d6fc405 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model/index.html @@ -0,0 +1,28 @@ + + + + + +Variable speed compressor train | eCalc™ Docs + + + + +

    Variable speed compressor train

    In this model all compressors in the train have the same speed, and the model is build on a forward model of +the fluid properties/state where speed is a parameter. Then the speed is iterated until the discharge pressure of the +outlet is equal to the requested discharge pressure.

    +

    This model only supports User defined variable speed compressor chart.

    +

    In addition, a FLUID MODEL must be specified.

    +

    Control mechanisms

    +

    The variable speed comporessor train model has the following automatic control mechanisms:

    +
      +
    • Antisurge control: When the flowrate is too low, given the suction and discharge pressures, eCalc will use automatic anti-surge control. The use of the anti-surge valve (ASV) is mimicked by increasing the total flow through the compressor, until the head is at the surge line (minimum flow curve) of the compressor chart.
    • +
    • Speed increase below minimum speed: If a rate/head point is below the compressor chart (below minimum speed), the speed is automatically increased to the minimum speed curve.
    • +
    • Stonewall speed increase: When the flowrate is too high, given the suction and discharge pressures, eCalc will automatically increase the speed to meet the stonewall (maximum flow line) of the compressor chart. To achieve the requested discharge pressure, the outlet stream is choked. This control mechanism can be turned off, for cases where a downstream choke valve does not exist.
    • +
    +

    +Format

    +

    The model is defined under the main keyword MODELS in the format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Surge control margin for the compressor stage. Default value 0.0>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Surge control margin for the compressor stage. Default value 0.0>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    - ... and so forth for each stage in the train
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>
    CALCULATE_MAX_RATE: <Optional compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >
    PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE, COMMON_ASV or NONE>
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html new file mode 100644 index 0000000000..ad9119dd8e --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html @@ -0,0 +1,80 @@ + + + + + +Variable speed compressor train model with multiple streams and pressures | eCalc™ Docs + + + + +

    Variable speed compressor train model with multiple streams and pressures

    This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like.

    +

    Compressor train with multiple streams and pressures

    +

    Format

    +

    The model is defined under the main keyword MODELS in the format:

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    # All streams defined ahead of stage
    # Default outlet stream after last stage should not be defined
    STREAMS: # All inlet streams must have fluid models with the same eos model
    - NAME: <name of stream 1>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - NAME: <name of stream 2>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - ...
    - NAME: <name of stream N>
    TYPE: OUTGOING # NB: No fluid definition for outgoing streams!
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>
    CONTROL_MARGIN: <Default value 0.0>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    - ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <Optional>
    - <reference stream from STREAMS for one in- or outgoing stream. Optional>
    - <reference stream from STREAMS for another in- or outgoing stream. Optional>
    CONTROL_MARGIN: <Default value 0.0>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <pressure control>
    DOWNSTREAM_PRESSURE_CONTROL: <pressure control>
    - ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    CONTROL_MARGIN: <Default value 0.0>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    - ...
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>
    +

    Keyword usage

    +
      +
    • +

      STREAMS is a list of all in- and out-going streams for the compressor train.

      +
        +
      • The same equation of state (EOS) must be used for each INGOING stream fluid models
      • +
      • OUTGOING fluid models cannot be specified.
      • +
      +
    • +
    • +

      STAGES is a list of all the stages in the compressor train.

      +
        +
      • For each stage, a temperature in Celsius must be defined. It +is assumed that the gas is cooled down to this temperature ahead of the compression at this stage.
      • +
      • A reference to a +compressor chart needs to be specified for each stage.
      • +
      • For the first stage, it is required to have at least one stream of INGOING type. In addition, INTERSTAGE_CONTROL_PRESSURE cannot be used on the first stage.
      • +
      • Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream +will be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the +molar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will +be subtracted the rate of the outgoing stream.
      • +
      +
    • +
    • +

      PRESSURE_DROP_AHEAD_OF_STAGE is optional, but if defined it will reduce the inlet pressure of that particular stage by a fixed value. +As of now, only a single value is supported - i.e. a time series cannot be used here.

      +
    • +
    • +

      CONTROL_MARGIN is a surge control margin, see Surge control margin for variable speed compressor chart.

      +
    • +
    • +

      CONTROL_MARGIN_UNIT is the unit of the surge control margin.

      +
    • +
    +

    INTERSTAGE_PRESSURE_CONTROL

    +
    note

    INTERSTAGE_CONTROL_PRESSURE may be specified for one (only one!) of the stages 2, ..., N. It may not be specified for the first stage. See INTERSTAGE_CONTROL_PRESSURE for more usage details

    +

    This is optional but essentially when this is specified the compression train is split into two parts - before and after the INTERSTAGE_CONTROL_PRESSURE. As all rates and pressures (suction, discharge and interstage) are known, each side of the compression train can be solved independently.

    +

    Thus, given this, the rotational speed needed to match the suction and interstage pressure can be found. This speed will be for the first section of the compression train. The same is done for the second part of the train, only here the rotational speed is found to match the interstage and discharge pressure, for the given rates.

    +

    The highest speed between the first and second parts of the train is then taken as the rotational speed of the compression train. +This speed will essentially be needed to meet the most demanding pressure interval. +The section with the lower rotational speed must then be run with a form of pressure control (see UPSTREAM_PRESSURE_CONTROL/DOWNSTREAM_PRESSURE_CONTROL).

    +

    In a given simulation, the section of the compression train that requires either upstream or downstream pressure control is not fixed. This means that for different time steps, the part of the train with the highest rotational speed is not set to either the first or second section. Thus, both pressure control methods must be specified but only one of them will be used for each time step.

    +

    Technically, the INTERSTAGE_PRESSURE_CONTROL may be set independent of where the streams are defined. I.e. it may be +defined at a stage where there is an in- or out-going stream defined, or at a stage where there is no defined stream. +In reality, the INTERSTAGE_PRESSURE_CONTROL is linked to a stream, for example an outgoing stream for export where the +export pressure is defined, and where the rest of the gas continues through the compressor train for example for +injection at a higher pressure.

    +

    Fixed pressure control

    +

    The available pressure controls are

    +
      +
    • DOWNSTREAM_CHOKE
    • +
    • UPSTREAM_CHOKE
    • +
    • INDIVIDUAL_ASV_PRESSURE
    • +
    • INDIVIDUAL_ASV_RATE
    • +
    • COMMON_ASV
    • +
    +

    The sub-train where the pressure control is used, is now modeling wise equal to a single speed train as the speed is +determined from the other sub-train. The inlet and outlet pressures for a sub-train, may be either the suction pressure +and the interstage control pressure or interstage control pressure and the discharge pressure, depending on which sub +part governs the speed of the full train.

    +

    See FIXED PRESSURE CONTROL for more details.

    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    STREAMS:
    - NAME: 1_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_1
    - NAME: 3_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_2
    - NAME: 2_stage_outlet
    TYPE: OUTGOING
    STAGES:
    - COMPRESSOR_CHART: 1_stage_chart
    INLET_TEMPERATURE: 20
    STREAM:
    - 1_stage_inlet
    - COMPRESSOR_CHART: 2_stage_chart
    INLET_TEMPERATURE: 30
    - COMPRESSOR_CHART: 3_stage_chart
    INLET_TEMPERATURE: 35
    STREAM:
    - 2_stage_outlet
    - 3_stage_inlet
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage
    - COMPRESSOR_CHART: 4_stage_chart
    INLET_TEMPERATURE: 15
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.html b/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.html new file mode 100644 index 0000000000..6a460702a2 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.html @@ -0,0 +1,103 @@ + + + + + +Fixed speed pressure control | eCalc™ Docs + + + + +

    Fixed speed pressure control

    +

    Theory

    +

    Compressors are typically controlled by changing the rotational speed of the compressor train shaft, which can either increase or decrease the work performed. +In the case where this is not possible (single speed compressors), or this is not sufficient to control the compressor, other methods of control need to be used. +In eCalc™, there are three main compressor control methods considered (aside from rotational speed control), these are:

    +
      +
    • Upstream choking/throttling
    • +
    • Downstream choking/throttling
    • +
    • Anti-surge recycling
    • +
    +

    Each of these methods are used depending on the situation and placement of the compressor's operating points. +A summary of how these methods work in practice are seen below. +In these figures, the red point represents a singular operating point, which is shifted with the given control mechanism. The operating point first starts below the compressor curve and is then adjusted toward the curve (by either changing head or rate). The different pressure control methods will change the operating points in the follow way:

    +
      +
    • Upstream throttling will decrease the inlet pressure, and in turn increase the head and the inlet volumetric flow rate (lower pressure = lower density = lower flow rate).
    • +
    • Downstream throttling will increase the head, as the outlet pressure is increased. There is no influence on the inlet rate in this case. +However, when the operating points is on the compressor curve, and the head is further increased (by increasing the outlet pressure), the rate of the compressor will thus be reduced.
    • +
    • ASV recycling will simply increase the throughout of the compressor without influencing the head. +However, when the operating points is on the compressor curve, and the mass rate through is further increased, compressor head will in turn be reduced (along the curve).
    • +
    +
    Upstream ChokingDownstream Choking
    +
    ASV Recycling
    +

    Control modelling in eCalc™

    +

    In eCalc™, upstream and downstream choking is modelled as described in the theory section. +ASV recycling on the other hand is done in three separate ways. +These three modelling methods are important for a compression train with more than one stage. This is due the fact that when each compressor stage has an individual ASV, the solution is under determined. +For a single stage compressor, the results of these methods will be identical. +This will further be elaborated upon in the recirculation options section.

    +

    Some scenarios where additional pressure control is required can be when:

    +
      +
    • The compressor train only operates at one speed (SINGLE_SPEED_COMPRESSOR_TRAIN), +and the given rate and suction pressure gives a too high discharge pressure.
    • +
    • The compressor train is a VARIABLE_SPEED_COMPRESSOR_TRAIN, +but it already operates at the minimum speed, and still the discharge pressure is too high.
    • +
    • The compressor train is a VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES +required to meet an export pressure, before compressing gas further for injection. Here the +rotational speed required to bring the gas from inlet pressure to export pressure may be higher than the speed +required to bring the gas from export pressure to discharge pressure. Hence, the rotational speed giving +the correct export pressure will give a too high discharge pressure.
    • +
    +

    Pressure control methods - choking options

    +

    In a situation where the rotational speed of the shaft can not be varied here are only two degrees of freedom. +This means that if you give the suction pressure and the flow rate as input, the discharge pressure is decided by those +two inputs. Similarly, if you give the rate and the discharge pressure as input, the suction pressure is decided by +those two inputs. Hence, to calculate the energy usage for a given rate, suction pressure and discharge pressure, a +method for fixed speed pressure control must be defined. This can be done by a choke valve upstream or downstream +of the compressor train, or by recirculating fluid inside the compressor train.

    +

    Currently, there are two options for choking the pressure in eCalc™:

    +

    UPSTREAM_CHOKE

    +

    The suction pressure is reduced such that the resulting suction pressure after choking together with the given speed results in the required discharge pressure. +As the inlet pressure is reduced, the inlet flow rate will also increase.

    +

    DOWNSTREAM_CHOKE

    +

    The pressure is choked to the required discharge pressure after the compressor train. So the compressor's head will increase, as the compressor will compress the gas to a higher discharge pressure - which will subsequently be choked to the desired pressure.

    +

    Pressure control methods - recirculation options

    +

    As previously mentioned, there are three different methods in eCalc™ for modelling ASV recycling. +This is necessary as when there is more than one compressor stage, there will be individual ASVs per stage. +Thus, the problem is under determined, and there are multiple possible solutions. +Therefore, some modelling choices must +be done. +There are currently three options available in eCalc™:

    +
      +
    • INDIVIDUAL_ASV_PRESSURE
    • +
    • INDIVIDUAL_ASV_RATE
    • +
    • COMMON_ASV
    • +
    +
    Note

    With only one compressor stage or only one recirculation loop (common asv over the entire compressor train), +a unique solution to how much volume to recirculate is available.

    For a single stage compressor, all recirculation options should give the same result.

    +

    A further explanation of ASV recycling can be seen in the figure below. +Here, it can be seen that the head of a compressor is reduced when the rate is increased. +This means that recirculation can reduce the +discharge pressure for a single speed compressor.

    +

    +

    Looking at the figure above, for an actual volume rate of 1882 am3/hr, the head is 93 kJ/kg (blue dashed line). If this head leads to a too large discharge pressure, it can be reduced by recirculation +using the anti-surge valve. As the actual flow rate through the compressor increases, the head is also reduced, +meaning that a higher actual flow rate leads to a lower discharge pressure.

    +

    For example, by increasing the actual volume rate +to 2322 am3/hr (by recirculating 440 am3/hr through the ASV), the head is reduced to about 81.3 kJ/kg (red dashed lines) +, in turn leading to a lower discharge pressure. The head can be reduced further down to 42.5 kJ/kg at the maximum flow +rate (3201 am3/hr) for the compressor (yellow dashed lines). The difference between the flow rate entering the +compressor train and the maximum flow rate for the compressor gives the amount of additional volume that can be +recirculated through the compressor - the available capacity.

    +

    INDIVIDUAL_ASV_PRESSURE

    +

    The pressure ratio (discharge pressure/suction pressure) over each compressor stage is constant. +Essentially, with each time step there will be no change in the pressure ratio, but the volume flow will adjust to keep the pressure ratio constant.

    +

    INDIVIDUAL_ASV_RATE

    +

    The flow rate through each compressor stage is increased with the same fraction of the available capacity in that stage.

    +

    For example, if you have a 2-stage compressor and the first stage has 500 Am3/h available capacity and the second has 400 Am3/h available capacity. +If the first stage increases by 25 % of the available capacity (125 Am3/h), the second stage increase by 25 % too (100 Am3/h) - given that this matches the required output.

    +

    COMMON_ASV

    +

    The same volume is recirculated through the entire compressor train. +Thus, each compression stage will have the same mass throughput.

    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/index.html b/docs/about/modelling/setup/models/compressor_modelling/index.html new file mode 100644 index 0000000000..1bd75b2064 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/index.html @@ -0,0 +1,36 @@ + + + + + +Compressor modelling | eCalc™ Docs + + + + +

    Compressor modelling

    +

    Compressors may be single speed or variable speed, they may be stand-alone or there may be multiple compressors mounted +on a common shaft (compressor train), they may be run with an electric motor or be driven by a turbine coupled +directly to the shaft, there may be one or many compressors/compressor trains in parallel connected to a common +manifold from which the gas is distributed between these in different operational settings.

    +

    +

    In eCalc™, single compressors and compressor trains are modeled the same way, a single compressor is just a train with +just one stage. There are multiple modeling options for compressor trains:

    +
      +
    • Sampled compressor model: The compressor model is setup in an external tool, and this model is sampled by +running a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a csv file and input to eCalc™. Note, this is not inputted in the MODELS section, rather in the FACILITY_INPUTS section
    • +
    • Single speed compressor train model: The compressor train modeling is done in eCalc™. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage. In addition, since the speed is fixed, defining a pressure control method is required. This pressure control is used to meet the required discharge pressure.
    • +
    • Variable speed compressor train model: The compressor train modelling is done in eCalc™. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage.
    • +
    • Simplified variable speed compressor train model: Model the same compressor train as the above, but is more +lightweight in that instead of iterating to meet the requested discharge pressure, it assumes all stages has equal +pressure fractions and solves for each stage independently. As the shaft speed is not used in the calculations, this +model supports using generic compressor charts, see the Compressor charts section.
    • +
    • Variable speed compressor train model with multiple streams and pressures: This is a more complex model, where it is +possible to define fluid streams going in and out at different stages in the compressor train. Also, an additional +pressure requirement may be specified between two stages. This model is suitable in cases where for example a part of +the fluid stream is taken out after one stage at a specified pressure for export, and the rest is further compressed +for injection at a higher pressure.
    • +
    +

    Core theory behind the modelling of compressors in eCalc™ can be found here.

    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/fluid_model/index.html b/docs/about/modelling/setup/models/fluid_model/index.html new file mode 100644 index 0000000000..52e82168fb --- /dev/null +++ b/docs/about/modelling/setup/models/fluid_model/index.html @@ -0,0 +1,57 @@ + + + + + +Fluid model | eCalc™ Docs + + + + +

    Fluid model

    +

    To calculate the energy usage related to compression of a natural gas, information about the composition is needed, i.e. +which components it consist of and the (mole) fraction of each. Typical components for natural gas are alkanes such as +methane, ethane, propane, butane, pentane, hexane in addition to water, nitrogen and carbone dioxide. Alkanes with seven +or more carbon atoms may occur, but these are often just part of the liquid (oil) phase and not significant in dry gas +compression.

    +

    As the fluid is going through the compressor in a fluid dynamic process, the enthalpy changes, resulting in a new state +with increased pressure and temperature, and decreased volume. To estimate these changes, an equation-of-state (EOS) +model is used. The default EOS model in eCalc is SRK (Soave-Redlich-Kwong).

    +

    The GERG models (GERG 2008) are used to calculate enthalpy, gamma and density, whilst other properties such as molar mass +is based on either SRK or PR.

    +

    Available EOS models

    +
      +
    • SRK (Soave-Redlich-Kwong)
    • +
    • PR (Peng-Robinson)
    • +
    • GERG_SRK
    • +
    • GERG_PR
    • +
    +

    Fluid model using predefined composition

    +

    Available predefined fluid compositions (with mole weights) are

    +
      +
    • ULTRA_DRY (17.1 kg/kmol)
    • +
    • DRY (18.3 kg/kmol)
    • +
    • MEDIUM (19.4 kg/kmol)
    • +
    • RICH (21.1 kg/kmol)
    • +
    • ULTRA_RICH (24.6 kg/kmol)
    • +
    +

    Format

    +
    MODELS:
    - NAME: <name of fluid model, for reference>
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: <eos model>
    GAS_TYPE: <name of a predefined composition>
    +

    Examples

    +

    Examples with predefined fluid

    +
    MODELS:
    - NAME: fluid_model_reference_name
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM
    +
    MODELS:
    - NAME: fluid_model_reference_name
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: PR
    GAS_TYPE: ULTRA_DRY
    +

    Example where EOS is defaulted to SRK and GAS_TYPE defaulted to MEDIUM

    +
    MODELS:
    - NAME: fluid_model_reference_name
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    +

    Fluid model with user-specified composition

    +

    The composition is specified by setting the mole fraction of each component. Setting the mole fraction for methane is +required, all other components are optional and will be set to 0 if not specified. If methane is not part of your +composition, simply put 0.0 for it.

    +

    It is not important that the fractions sum to one as they will be normalized by eCalc. It is the relative amount of each +that will be important.

    +

    Format

    +
    MODELS:
    - NAME: <name of fluid model, for reference>
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: <eos model>
    COMPOSITION:
    water: <mole fraction>
    nitrogen: <mole fraction>
    CO2: <mole fraction>
    methane: <mole fraction, required>
    ethane: <mole fraction>
    propane: <mole fraction>
    i_butane: <mole fraction>
    n_butane: <mole fraction>
    i_pentane: <mole fraction>
    n_pentane: <mole fraction>
    n_hexane: <mole fraction>
    +

    Example

    +
    MODELS:
    - NAME: <name of fluid model, for reference>
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: srk
    COMPOSITION:
    water: 0.1
    nitrogen: 0.74373
    CO2: 2.415619
    methane: 85.60145
    ethane: 6.707826
    propane: 2.611471
    i_butane: 0.45077
    n_butane: 0.691702
    i_pentane: 0.210714
    n_pentane: 0.197937
    n_hexane: 0.368786
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/index.html b/docs/about/modelling/setup/models/index.html new file mode 100644 index 0000000000..260cd9bd9a --- /dev/null +++ b/docs/about/modelling/setup/models/index.html @@ -0,0 +1,28 @@ + + + + + +Models | eCalc™ Docs + + + + +

    Models

    note

    The MODELS keyword is optional for an eCalc™ model to run. However, it is critical for compressor and turbine modelling.

    +

    This part of the setup defines input files that characterize various fluid, compressor and turbine models. These are later used as input in the INSTALLATIONS part of the setup by referencing their NAME.

    +

    Format

    +
    MODELS:
    - NAME: <name of model, for reference>
    TYPE: <model type>
    <other keywords according to TYPE>
    +

    Supported types

    +

    The supported types are:

    +
      +
    • FLUID
    • +
    • COMPRESSOR_CHART
    • +
    • SINGLE_SPEED_COMPRESSOR_TRAIN
    • +
    • SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    • +
    • TURBINE
    • +
    • COMPRESSOR_WITH_TURBINE
    • +
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/turbine_modeling/index.html b/docs/about/modelling/setup/models/turbine_modeling/index.html new file mode 100644 index 0000000000..df83bfbdfa --- /dev/null +++ b/docs/about/modelling/setup/models/turbine_modeling/index.html @@ -0,0 +1,38 @@ + + + + + +Turbine modelling | eCalc™ Docs + + + + +

    Turbine modelling

    +

    The turbine model requires values for efficiencies vs corresponding loads. Currently also a lower heating value needs to +be specified (planned feature is to get this from the fuel type used)

    +

    The load values are given in MW, while efficiency values are numbers between 0 and 1.

    +

    The fuel usage for a turbine is equal to

    +FUEL_USAGE=LOAD_IN_MEGAWATTSECONDS_PER_DAYLOWER_HEATING_VALUEEFFICIENCYFUEL\_USAGE = \frac{LOAD\_IN\_MEGAWATT * SECONDS\_PER\_DAY}{LOWER\_HEATING\_VALUE * EFFICIENCY} +

    When evaluated for a load (in units MW), the efficiency is evaluated by linearly interpolating the input load vs +efficiency data.

    +

    The input values for load and efficiency are lists which both MUST START WITH 0! The user is thus responsible for the +behaviour also for small load values.

    +

    For load values equal to 0, the fuel usage is also set to 0.

    +

    Lower heating value is given in units MJ/Sm3

    +

    Format

    +
    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>
    TURBINE_LOADS: <list of power values in mega watt>
    TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    +

    Example

    +
    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    +

    Combining a compressor train and a turbine into one model

    +

    To model a turbine driven compressor train, a compressor train model needs to be combined with a turbine model. The +calculated shaft power required for the compressor train, will then be the input of the turbine model to calculate +fuel usage.

    +

    Format

    +
    MODELS:
    - NAME: <name of turbine model, for reference>
    TYPE: COMPRESSOR_WITH_TURBINE
    COMPRESSOR_MODEL: <reference to compressor train model defined in [MODELS](../references/keywords/MODELS) or [FACILITY_INPUTS](../references/keywords/FACILITY_INPUTS) (of type COMPRESSOR_TABULAR)>
    TURBINE_MODEL: <reference to a turbine model defined in [MODELS](../references/keywords/MODELS) (of type TURBINE)>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    +

    Examples

    +
    MODELS:
    - NAME: simplified_compressor_train_model_with_turbine
    TYPE: COMPRESSOR_WITH_TURBINE
    COMPRESSOR_MODEL: simplified_compressor_train_model
    TURBINE_MODEL: compressor_train_turbine
    POWER_ADJUSTMENT_CONSTANT: 10
    +

    Turbine combined with presampled compressor model (COMPRESSOR_TABULAR<COMPRESSOR_TABULAR facility input type>)

    +
    MODELS:
    - NAME: compressor_sampled_tabulated_model_with_turbine
    TYPE: COMPRESSOR_WITH_TURBINE
    COMPRESSOR_MODEL: compressor_sampled_tabulated_model
    TURBINE_MODEL: compressor_train_turbine
    POWER_ADJUSTMENT_CONSTANT: 10
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/time_series/index.html b/docs/about/modelling/setup/time_series/index.html new file mode 100644 index 0000000000..c422e11b78 --- /dev/null +++ b/docs/about/modelling/setup/time_series/index.html @@ -0,0 +1,42 @@ + + + + + +Time series | eCalc™ Docs + + + + +

    Time series

    note

    The TIME_SERIES keyword is mandatory within the eCalc™ YAML file.

    +

    This part of the setup file defines the inputs for time dependent variables, or "reservoir +variables". For many fields, this may be only one reservoir simulation model. But in some +cases, one might have several sources for reservoir and other relevant time series variables.

    +

    For example, a field may have a reservoir simulation model for some areas and decline curves in other area of +the reservoir. There may also be tie-ins which are affecting the energy/emissions on the field +installations. Also, there may be time profiles for other variables. +Therefore, a set of sources may be specified with a name, path to data and type. The name is +later referred to in the system of energy consumers defined under INSTALLATIONS.

    +

    Reservoir variables and other time varying data not coming from a reservoir simulation model can +be specified in a CSV file.

    +

    The paths to the input files may be either absolute or relative to the setup file.

    +

    Supported types

    +

    The supported time series types are:

    +
    TypeSupported file formatsInterpolation typeComment
    DEFAULT.csvNot possible to specify:
    RIGHT is used
    New in v8.1
    MISCELLANEOUS.csvMandatory input:
    LEFT/RIGHT/LINEAR
    +

    Format

    +

    Each line under TIME_SERIES has the format:

    +
    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: <type>
    FILE: <path_to_file>
    INFLUENCE_TIME_VECTOR: <True/False>
    EXTRAPOLATION: <True/False>
    INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>
    +

    The input data is expected to be in metric units. The NAME is later referred +to in the INSTALLATIONS part of the setup file. +INFLUENCE_TIME_VECTOR, EXTRAPOLATION +and INTERPOLATION_TYPE may have default values set depending +on the choice of TYPE. See the documentation for each keyword for details.

    +

    Requirements

    +
      +
    • At least one input source with INFLUENCE_TIME_VECTOR set to True.
    • +
    • Must include sources referred to in the variables for each consumer.
    • +
    +

    Example

    +
    TIME_SERIES:
    - NAME: SIM1
    TYPE: DEFAULT
    FILE: /path_to_model1/model_data.csv
    - NAME: SIM2
    TYPE: DEFAULT
    FILE: /path_to_tiein/tie_in_field.csv
    - NAME: DATA3
    TYPE: MISCELLANEOUS # e.g. variable flare, compressor suction and discharge pressures
    FILE: inputs/somecsvdata.csv
    INFLUENCE_TIME_VECTOR: FALSE
    EXTRAPOLATION: TRUE
    INTERPOLATION_TYPE: RIGHT
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/variables/index.html b/docs/about/modelling/setup/variables/index.html new file mode 100644 index 0000000000..db831a0643 --- /dev/null +++ b/docs/about/modelling/setup/variables/index.html @@ -0,0 +1,30 @@ + + + + + +Variables | eCalc™ Docs + + + + +

    Variables

    note

    The VARIABLES keyword is optional for an eCalc™ model to run.

    +

    Defining variables

    +

    Variables are defined in their own section in the YAML file, they can either be defined without link to time, or linked to time.

    +

    Format

    +
    VARIABLES:
    <variable name>:
    VALUE: <expression>
    +

    With time link:

    +
    VARIABLES:
    <variable name>:
    <YYYY-MM-DD [HH:mm:ss]>:
    VALUE: <expression>
    +

    Examples

    +
    VARIABLES:
    salt_water_injection:
    VALUE: SIM1:COL1 {*} 2
    +

    With time link:

    +
    VARIABLES:
    salt_water_injection:
    2010-01-01:
    VALUE: SIM1:COL1 {*} 2
    2020-01-01:
    VALUE: SIM1:COL1
    +

    Using variables

    +

    Variables can be used in any expression throughout the YAML file and can even be used within defining other variables.

    +

    Example

    +

    Using variables in the INSTALLATION section:

    +
    VARIABLES:
    gas_rateA:
    VALUE: SIM;COL1
    gas_rateB:
    VALUE: SIM;COL2

    INSTALLATIONS:
    - NAME: installationA
    CATEGORY: FIXED
    ...
    - NAME: sample_compressor
    CATEGORY: COMPRESSOR
    ENERGYFUNCTION: compressorA
    RATE: $var.gas_rateA {+} $var.gas_rateB
    ...
    +

    Using variables in defining another variable:

    +
    VARIABLES:
    salt_water_injection:
    VALUE: SIM1:COL1 {*} 2
    double_injection_rate:
    VALUE: $var.salt_water_injection {*} 2
    + + \ No newline at end of file diff --git a/docs/about/modelling/theory/compressor_modelling/index.html b/docs/about/modelling/theory/compressor_modelling/index.html new file mode 100644 index 0000000000..715693b1be --- /dev/null +++ b/docs/about/modelling/theory/compressor_modelling/index.html @@ -0,0 +1,55 @@ + + + + + +Compressor modelling | eCalc™ Docs + + + + +

    Compressor modelling

    A compressor model describes what happens to a fluid going through a compressor and calculates how much power is +required in the process.

    +

    At the suction side, one need information about the fluid (natural gas) which has a (static) specification of the +composition, a specified rate, a temperature and a pressure. As the fluid is going through the compressor in a fluid +dynamic process, the enthalpy changes, resulting in a new state and both the pressure and the +temperature of the fluid is increased, while the volume is decreased. This change is calculated using an +equation-of-state (EOS) model. See Fluid model

    +

    +

    eCalc does not perform fluid dynamic modeling. Instead, the behaviour of the compressor is described by a polytropic +compressor chart which specifies both the operational domain of the compressor, but also relates volume rate, head and +efficiency for the compressor.

    +

    An isentropic (adiabatic) compression is the process where no heat is added or removed from a system. In a polytropic +process, changes in the gas characteristics is considered. Dynamic natural gas compressors typically follow a polytropic +process defined by the formula P1V1n=P2V2nP_\mathrm{1} V_\mathrm{1}^n = P_\mathrm{2} V_\mathrm{2}^n, where nn is the +polytropic exponent which is experimentally determined for a given compressor.

    +

    +The power need for compression is given by

    +power=polytropic_headmass_rateefficiencypower = \frac{polytropic\_head * mass\_rate}{efficiency} +

    and the relationship between polytropic head and the pressures are

    +polytropic_head=nn1ZRT1MW((P1P2)n1n1)polytropic\_head = \frac{n}{n-1} \frac{Z R T_1}{MW} \left( \left(\frac{P_1}{P_2} \right)^{\frac{n-1}{n}} -1 \right) +

    where nn is the polytropic exponent, ZZ the compressibility, RR is the gas constant, T1T_1 is the inlet temperature and MWMW the molecular weight.

    +

    Further, the polytropic exponent is approximated as

    +κpolytropic_efficiencyκ1\frac{\kappa * polytropic\_efficiency}{\kappa -1} +

    where κ\kappa is the heat capacity ratio of the fluid.

    +

    κ\kappa and ZZ are not for inlet conditions, but average values for the fluid throughout the process, and +the polytropic process and the calculations are iterated until these converge.

    +

    If there is only one compressor, the outlet pressure for each compressor is known, and the polytropic head and +efficiency may be calculated from directly from the above polytropic head and efficiency formulas.

    +

    However, for compressor trains, the intermediate pressures are not known ahead, instead one may use the fact that all +compressors run with the same speed as they are mounted on the same shaft.

    +

    To calculate the energy usage for the compressor train using the common speed, eCalc uses a forward model to +calculate the outlet stream given the inlet stream and a given speed. Then, this model is iterated until the discharge pressure is equal to the requested discharge pressure for evaluation. To use this model, see +Variable speed compressor train model An alternative is to neglect the common speed property of the train, an instead assume (incorrectly but maybe good +enough for some purposes) that the pressure fraction is equal for all stages. With this assumption, the intermediate pressures can be calculated and each stage may be calculated independently without the speed iteration. To use this model, see +Simplified variable speed compressor train model.

    +

    In some cases, the shaft of the compressor train can only run on a single fixed speed. In these cases eCalc needs +information about how the pressure should be controlled to meet the required discharge pressure. Available pressure +control options are choking and recirculating using anti-surge valves. To use this model, see Single speed compressor train model.

    +

    In other cases, the compressor trains have more complex setup and process control which needs a more flexible model. The +figure below shows an example where one may have two inlet streams with different pressures and potentially different +gas compositions and one outlet stream for export gas with a pressure control. To use a model suitable for such cases, +see Variable speed compressor train model with multiple streams and pressures.

    +

    + + \ No newline at end of file diff --git a/docs/about/modelling/theory/index.html b/docs/about/modelling/theory/index.html new file mode 100644 index 0000000000..03ea244cd7 --- /dev/null +++ b/docs/about/modelling/theory/index.html @@ -0,0 +1,13 @@ + + + + + +Theory | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/modelling/theory/pump_modelling/index.html b/docs/about/modelling/theory/pump_modelling/index.html new file mode 100644 index 0000000000..c7728b5529 --- /dev/null +++ b/docs/about/modelling/theory/pump_modelling/index.html @@ -0,0 +1,21 @@ + + + + + +Pump modelling | eCalc™ Docs + + + + +

    Pump modelling

    As liquid can be assumed incompressible, pump calculations are simpler compared to compressor calculations. The pumped fluid can be characterized with its density, and no fluid calculations are necessary.

    +

    The power demand of a pump is calculated as

    +power=headmass_rateefficiency.power = \frac{head * mass\_rate}{efficiency}. +

    Here, the relationship between head and pressures is given by

    +head=(P2P1)liquid_densityghead = \frac{(P_2-P_1)}{liquid\_density * g} +

    where P1P_1 and P2P_2 are the pump suction and discharge pressures, respectively, and gg is the gravitational constant.

    +

    eCalc uses the pump chart to relate liquid flow, head and efficiency for the pump, as well as defining the operational envelope for the pump.

    +

    For single speed pumps, eCalc does extrapolations corresponding to minflow (liquid recirculation) and choking to keep the pump operation within the operational envelope.

    +

    + + \ No newline at end of file diff --git a/docs/about/modelling/workflow/generic_workflow/index.html b/docs/about/modelling/workflow/generic_workflow/index.html new file mode 100644 index 0000000000..0a56a99121 --- /dev/null +++ b/docs/about/modelling/workflow/generic_workflow/index.html @@ -0,0 +1,55 @@ + + + + + +Generic Workflow | eCalc™ Docs + + + + +

    Generic Workflow

    Simplified Process Flow Diagram

    +

    The image below illustrates a simplified process flow diagram for a generic offshore oil and gas facility. Each unit included in this diagram can be modelled with the use of eCalc. +The workflow below will outline what is necessary to obtain for each step. In addition, there are some accompanied explanations to the workflow.

    +

    +

    Workflow

    + +

    Workflow Explanation

    +

    Required Subsurface Profiles

    +

    All subsurface profiles must be in Sm3/day. This data must be inputted as a TIME-SERIES and references to how it is used in the facility or by a relevant consumer.

    +

    Facility Information

    +

    Constant Power Loads

    +

    To simplify certain models, there are some common assumptions made. Here are some examples:

    +
      +
    • Base Load: As eCalc™ is not simulating the whole facility there are often energy consumers that are not modelled. +Typically these energy consumers relate to things such as the energy consumption of living quarters and are often constant loads. +These smaller constant loads are then grouped into a larger term, called the "baseload". This is assumed to be constant and independent of the production rate of the facility.
    • +
    • Recompressor: The main function of a recompressor is to compressor gas from separator pressures back up to the inlet separator pressure. +These compressors are often smaller and have little fluctuation in their load. +Thus, to simplify modelling, these recompressors are often modelled as constant loads. And at times, are included within the facility's base load
    • +
    • Oil Export Pumps: As eCalc™ does not model oil pumps, these are often modelled as constant loads or modelled with a table (that relates oil rate to power consumption). The method in which they are modelled depends from facility to facility
    • +
    +

    Additional Information

    +

    Any emissions that do not fall within the defined categories can still be considered for a given platform. For example, if there are drilling activities, an additional fuel type can be specified and related to the fuel consumption of a drilling rig.

    +

    Consumer Information

    +

    Generator Set

    +

    As eCalc™ does not indepthly model gas turbine generators, alternative methods are used. +Here, fuel consumed and power generated is related in tabular form. These are typically linear relationships, and if more than one generator is used, "generator switching" is modelled by adding another generator curve on top of the existing.

    +

    This means that the facility will operate in the most efficient manner, i.e. meaning that if one generator will satisfy the power demand, only one generator will always be used.

    +

    Compressor Curves

    +

    eCalc™ has generic compressor curve functionality which can be used when compressor curves are not available. +However, if a manufactor compressor chart is available, it is always recommended to use this over a generic chart. +The generic compressor curves, use the assumption of constant polytropic efficiency, which is only a good assumption if the compressor is running near the design points.

    +

    Validation

    +

    Checking whether an eCalc™ model is valid or not, is an essential task. If a model is not valid, this means that input requirements set by the user are not being fulfilled, or that some consumers are giving unrealistic solutions.

    +

    Validity can be checked by consumer, and there are often specific reasons why certain consumers are invalid. For example:

    +
      +
    • Compressors and Pumps: It is common that either too high a head or rate value is specified. This means that the invalid point is outside the limits of the performance chart. To determine the issue, it is recommended that the operational points (Head, and actual flowrate) are plotted together with the chart.
    • +
    • Generator Set: The most common issue here is that the amount of power required is higher than the maximum value in the utilised genset.
    • +
    +

    Calibration

    +

    The term calibration in eCalc™ often refers to the history matching of the facility. Essentially, real operational data is compared against the eCalc™ model results. If they do not correlate various changes are made to the model.

    +

    The main workflow with this would be to match every individual consumer, e.g. each pump and compressor. After that, it is the recommended to compare on the facility level (e.g. total power consumed or total fuel used), then various adjustments can be made. +These adjustments can mean changes to the base load, shifting the compressor curves, or simply by using a POWERLOSSFACTOR.

    + + \ No newline at end of file diff --git a/docs/about/modelling/workflow/index.html b/docs/about/modelling/workflow/index.html new file mode 100644 index 0000000000..1e62eda1fa --- /dev/null +++ b/docs/about/modelling/workflow/index.html @@ -0,0 +1,13 @@ + + + + + +eCalc™ Workflow | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/api/index.html b/docs/about/references/api/index.html new file mode 100644 index 0000000000..daac8347a2 --- /dev/null +++ b/docs/about/references/api/index.html @@ -0,0 +1,14 @@ + + + + + +API reference | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc.html b/docs/about/references/api/libecalc.html new file mode 100644 index 0000000000..74d19b8b62 --- /dev/null +++ b/docs/about/references/api/libecalc.html @@ -0,0 +1,238 @@ + + + + + + + libecalc API documentation + + + + + + + + + +
    +
    +

    +libecalc

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common.html b/docs/about/references/api/libecalc/common.html new file mode 100644 index 0000000000..a874a61b09 --- /dev/null +++ b/docs/about/references/api/libecalc/common.html @@ -0,0 +1,267 @@ + + + + + + + libecalc.common API documentation + + + + + + + + + +
    +
    +

    +libecalc.common

    + +

    Components, helpers, utils and "extensions" of the language and its batteries should reside here. What is here could +easily have been as a part of the language or its batteries, and therefore there should be no rules as to which +parts of the code that can include these things.

    +
    + + + + + +
    1"""
    +2Components, helpers, utils and "extensions" of the language and its batteries should reside here. What is here could
    +3easily have been as a part of the language or its batteries, and therefore there should be no rules as to which
    +4parts of the code that can include these things.
    +5"""
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/component_info.html b/docs/about/references/api/libecalc/common/component_info.html new file mode 100644 index 0000000000..ca2b952297 --- /dev/null +++ b/docs/about/references/api/libecalc/common/component_info.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.common.component_info API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.component_info

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/component_info/component_level.html b/docs/about/references/api/libecalc/common/component_info/component_level.html new file mode 100644 index 0000000000..938f91d6b4 --- /dev/null +++ b/docs/about/references/api/libecalc/common/component_info/component_level.html @@ -0,0 +1,431 @@ + + + + + + + libecalc.common.component_info.component_level API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.component_info.component_level

    + + + + + + +
     1from enum import Enum
    + 2
    + 3
    + 4class ComponentLevel(str, Enum):
    + 5    ASSET = "ASSET"
    + 6    INSTALLATION = "INSTALLATION"
    + 7    GENERATOR_SET = "GENERATOR_SET"
    + 8    SYSTEM = "SYSTEM"
    + 9    CONSUMER = "CONSUMER"
    +10    MODEL = "MODEL"
    +
    + + +
    +
    + +
    + + class + ComponentLevel(builtins.str, enum.Enum): + + + +
    + +
     5class ComponentLevel(str, Enum):
    + 6    ASSET = "ASSET"
    + 7    INSTALLATION = "INSTALLATION"
    + 8    GENERATOR_SET = "GENERATOR_SET"
    + 9    SYSTEM = "SYSTEM"
    +10    CONSUMER = "CONSUMER"
    +11    MODEL = "MODEL"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + ASSET = +<ComponentLevel.ASSET: 'ASSET'> + + +
    + + + + +
    +
    +
    + INSTALLATION = +<ComponentLevel.INSTALLATION: 'INSTALLATION'> + + +
    + + + + +
    +
    +
    + GENERATOR_SET = +<ComponentLevel.GENERATOR_SET: 'GENERATOR_SET'> + + +
    + + + + +
    +
    +
    + SYSTEM = +<ComponentLevel.SYSTEM: 'SYSTEM'> + + +
    + + + + +
    +
    +
    + CONSUMER = +<ComponentLevel.CONSUMER: 'CONSUMER'> + + +
    + + + + +
    +
    +
    + MODEL = +<ComponentLevel.MODEL: 'MODEL'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/component_info/compressor.html b/docs/about/references/api/libecalc/common/component_info/compressor.html new file mode 100644 index 0000000000..fb303368ae --- /dev/null +++ b/docs/about/references/api/libecalc/common/component_info/compressor.html @@ -0,0 +1,363 @@ + + + + + + + libecalc.common.component_info.compressor API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.component_info.compressor

    + + + + + + +
    1from enum import Enum
    +2
    +3
    +4class CompressorPressureType(str, Enum):
    +5    INLET_PRESSURE = "INLET_PRESSURE"
    +6    OUTLET_PRESSURE = "OUTLET_PRESSURE"
    +
    + + +
    +
    + +
    + + class + CompressorPressureType(builtins.str, enum.Enum): + + + +
    + +
    5class CompressorPressureType(str, Enum):
    +6    INLET_PRESSURE = "INLET_PRESSURE"
    +7    OUTLET_PRESSURE = "OUTLET_PRESSURE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + INLET_PRESSURE = +<CompressorPressureType.INLET_PRESSURE: 'INLET_PRESSURE'> + + +
    + + + + +
    +
    +
    + OUTLET_PRESSURE = +<CompressorPressureType.OUTLET_PRESSURE: 'OUTLET_PRESSURE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/datetime.html b/docs/about/references/api/libecalc/common/datetime.html new file mode 100644 index 0000000000..bcea90127a --- /dev/null +++ b/docs/about/references/api/libecalc/common/datetime.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.common.datetime API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.datetime

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/datetime/utils.html b/docs/about/references/api/libecalc/common/datetime/utils.html new file mode 100644 index 0000000000..1167b2856e --- /dev/null +++ b/docs/about/references/api/libecalc/common/datetime/utils.html @@ -0,0 +1,461 @@ + + + + + + + libecalc.common.datetime.utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.datetime.utils

    + + + + + + +
     1from enum import Enum
    + 2
    + 3from libecalc.common.logger import logger
    + 4
    + 5
    + 6class DateTimeFormats(str, Enum):
    + 7    date_format_iso_8601 = "%Y-%m-%d"
    + 8    date_format_iso_8601_no_dash = "%Y%m%d"
    + 9    date_format_alternative_dd_mm_yyyy = "%d.%m.%Y"
    +10    time_format = "%H:%M:%S"
    +11
    +12    @staticmethod
    +13    def get_format(format_number: int = 0) -> str:
    +14        if format_number == 0:
    +15            date_format = DateTimeFormats.date_format_iso_8601.value
    +16        elif format_number == 1:
    +17            date_format = DateTimeFormats.date_format_iso_8601_no_dash.value
    +18        elif format_number == 2:
    +19            date_format = DateTimeFormats.date_format_alternative_dd_mm_yyyy.value
    +20        else:
    +21            # Default for numbers outside supported range
    +22            date_format = DateTimeFormats.date_format_iso_8601
    +23            logger.warning(f"{DateTimeFormats.__class__}: {format_number} not supported, defaulted to 0 (ISO8601)")
    +24        return f"{date_format} {DateTimeFormats.time_format.value}"
    +
    + + +
    +
    + +
    + + class + DateTimeFormats(builtins.str, enum.Enum): + + + +
    + +
     7class DateTimeFormats(str, Enum):
    + 8    date_format_iso_8601 = "%Y-%m-%d"
    + 9    date_format_iso_8601_no_dash = "%Y%m%d"
    +10    date_format_alternative_dd_mm_yyyy = "%d.%m.%Y"
    +11    time_format = "%H:%M:%S"
    +12
    +13    @staticmethod
    +14    def get_format(format_number: int = 0) -> str:
    +15        if format_number == 0:
    +16            date_format = DateTimeFormats.date_format_iso_8601.value
    +17        elif format_number == 1:
    +18            date_format = DateTimeFormats.date_format_iso_8601_no_dash.value
    +19        elif format_number == 2:
    +20            date_format = DateTimeFormats.date_format_alternative_dd_mm_yyyy.value
    +21        else:
    +22            # Default for numbers outside supported range
    +23            date_format = DateTimeFormats.date_format_iso_8601
    +24            logger.warning(f"{DateTimeFormats.__class__}: {format_number} not supported, defaulted to 0 (ISO8601)")
    +25        return f"{date_format} {DateTimeFormats.time_format.value}"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + date_format_iso_8601 = +<DateTimeFormats.date_format_iso_8601: '%Y-%m-%d'> + + +
    + + + + +
    +
    +
    + date_format_iso_8601_no_dash = +<DateTimeFormats.date_format_iso_8601_no_dash: '%Y%m%d'> + + +
    + + + + +
    +
    +
    + date_format_alternative_dd_mm_yyyy = +<DateTimeFormats.date_format_alternative_dd_mm_yyyy: '%d.%m.%Y'> + + +
    + + + + +
    +
    +
    + time_format = +<DateTimeFormats.time_format: '%H:%M:%S'> + + +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + get_format(format_number: int = 0) -> str: + + + +
    + +
    13    @staticmethod
    +14    def get_format(format_number: int = 0) -> str:
    +15        if format_number == 0:
    +16            date_format = DateTimeFormats.date_format_iso_8601.value
    +17        elif format_number == 1:
    +18            date_format = DateTimeFormats.date_format_iso_8601_no_dash.value
    +19        elif format_number == 2:
    +20            date_format = DateTimeFormats.date_format_alternative_dd_mm_yyyy.value
    +21        else:
    +22            # Default for numbers outside supported range
    +23            date_format = DateTimeFormats.date_format_iso_8601
    +24            logger.warning(f"{DateTimeFormats.__class__}: {format_number} not supported, defaulted to 0 (ISO8601)")
    +25        return f"{date_format} {DateTimeFormats.time_format.value}"
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/decorators.html b/docs/about/references/api/libecalc/common/decorators.html new file mode 100644 index 0000000000..cf3ee0abc6 --- /dev/null +++ b/docs/about/references/api/libecalc/common/decorators.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.common.decorators API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.decorators

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/decorators/capturer.html b/docs/about/references/api/libecalc/common/decorators/capturer.html new file mode 100644 index 0000000000..0a3b4bb62a --- /dev/null +++ b/docs/about/references/api/libecalc/common/decorators/capturer.html @@ -0,0 +1,602 @@ + + + + + + + libecalc.common.decorators.capturer API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.decorators.capturer

    + + + + + + +
     1import os
    + 2import typing
    + 3from functools import wraps
    + 4from pathlib import Path
    + 5from typing import Any, Callable, Optional
    + 6
    + 7from libecalc.common.logger import logger
    + 8
    + 9unique_id: int = 1
    +10"""
    +11global static id to increase by one for each file being dumped
    +12"""
    +13
    +14
    +15class Jsonable(typing.Protocol):
    +16    """
    +17    Protocol to make sure that functions that are decorated for capture
    +18    can be serialized to json through the json() method
    +19    """
    +20
    +21    def json(self) -> str:
    +22        """
    +23        Serialize object as JSON
    +24
    +25        :return: a string according to json spec
    +26        """
    +27        ...
    +28
    +29
    +30def save(output_directory: Path, content: Jsonable):
    +31    """
    +32    A function to save serializable content. Each time this function is
    +33    called the name of the file that data is dumped to (which is an integer) will be incremented with 1.
    +34    E.g. file number one will be given the name 1.json, number two; 2.json and so on.
    +35
    +36    :param output_directory:   Where to save it. Missing parent directories will be created.
    +37    :param content:    What to save. Must be serializable to JSON through .json() method
    +38    """
    +39    Path.mkdir(output_directory, parents=True, exist_ok=True)
    +40    global unique_id
    +41    file_name = output_directory / f"{str(unique_id)}.json"
    +42    unique_id += 1
    +43
    +44    with open(file_name, "w") as file:
    +45        file.write(content.json())
    +46
    +47
    +48class Capturer:
    +49    """Decorator to capture values from a decorated function and optionally save to file"""
    +50
    +51    @staticmethod
    +52    def capture_return_values(
    +53        do_save_captured_content: bool = False, output_directory: Path = Path(os.getcwd()) / "captured_data"
    +54    ) -> Optional[Any]:
    +55        """If enabled, save the return values from decorated function to the given output directory. If disabled,
    +56        the function works as if the decorator is not there.
    +57
    +58        Note! This currently only supports functions that returns a value/object that support serialization to json() through implementing a .json() method
    +59
    +60        Args:
    +61            do_save_captured_content: whether the captured content should be saved or not. Default False.
    +62            output_directory: Directory to where the captured content should be stored. Missing parent directories will be created.
    +63
    +64        Returns:
    +65            The same signature as the function it is decorating
    +66        """
    +67
    +68        def decorate(capturable: Callable[..., Jsonable]):
    +69            @wraps(capturable)
    +70            def with_capture(self, *args, **kwargs):
    +71                return_values = capturable(self, *args, **kwargs)
    +72                try:
    +73                    save(output_directory, return_values) if do_save_captured_content is True else ...
    +74                except Exception as e:
    +75                    logger.debug(f"Failed to dump data for debug {str(e)}. Not critical.")
    +76                return return_values
    +77
    +78            return with_capture
    +79
    +80        return decorate
    +
    + + +
    +
    +
    + unique_id: int = +1 + + +
    + + +

    global static id to increase by one for each file being dumped

    +
    + + +
    +
    + +
    + + class + Jsonable(typing.Protocol): + + + +
    + +
    16class Jsonable(typing.Protocol):
    +17    """
    +18    Protocol to make sure that functions that are decorated for capture
    +19    can be serialized to json through the json() method
    +20    """
    +21
    +22    def json(self) -> str:
    +23        """
    +24        Serialize object as JSON
    +25
    +26        :return: a string according to json spec
    +27        """
    +28        ...
    +
    + + +

    Protocol to make sure that functions that are decorated for capture +can be serialized to json through the json() method

    +
    + + +
    + +
    + + Jsonable(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    + +
    + + def + json(self) -> str: + + + +
    + +
    22    def json(self) -> str:
    +23        """
    +24        Serialize object as JSON
    +25
    +26        :return: a string according to json spec
    +27        """
    +28        ...
    +
    + + +

    Serialize object as JSON

    + +
    Returns
    + +
    +

    a string according to json spec

    +
    +
    + + +
    +
    +
    + +
    + + def + save( output_directory: pathlib.Path, content: libecalc.common.decorators.capturer.Jsonable): + + + +
    + +
    31def save(output_directory: Path, content: Jsonable):
    +32    """
    +33    A function to save serializable content. Each time this function is
    +34    called the name of the file that data is dumped to (which is an integer) will be incremented with 1.
    +35    E.g. file number one will be given the name 1.json, number two; 2.json and so on.
    +36
    +37    :param output_directory:   Where to save it. Missing parent directories will be created.
    +38    :param content:    What to save. Must be serializable to JSON through .json() method
    +39    """
    +40    Path.mkdir(output_directory, parents=True, exist_ok=True)
    +41    global unique_id
    +42    file_name = output_directory / f"{str(unique_id)}.json"
    +43    unique_id += 1
    +44
    +45    with open(file_name, "w") as file:
    +46        file.write(content.json())
    +
    + + +

    A function to save serializable content. Each time this function is +called the name of the file that data is dumped to (which is an integer) will be incremented with 1. +E.g. file number one will be given the name 1.json, number two; 2.json and so on.

    + +
    Parameters
    + +
      +
    • output_directory: Where to save it. Missing parent directories will be created.
    • +
    • content: What to save. Must be serializable to JSON through .json() method
    • +
    +
    + + +
    +
    + +
    + + class + Capturer: + + + +
    + +
    49class Capturer:
    +50    """Decorator to capture values from a decorated function and optionally save to file"""
    +51
    +52    @staticmethod
    +53    def capture_return_values(
    +54        do_save_captured_content: bool = False, output_directory: Path = Path(os.getcwd()) / "captured_data"
    +55    ) -> Optional[Any]:
    +56        """If enabled, save the return values from decorated function to the given output directory. If disabled,
    +57        the function works as if the decorator is not there.
    +58
    +59        Note! This currently only supports functions that returns a value/object that support serialization to json() through implementing a .json() method
    +60
    +61        Args:
    +62            do_save_captured_content: whether the captured content should be saved or not. Default False.
    +63            output_directory: Directory to where the captured content should be stored. Missing parent directories will be created.
    +64
    +65        Returns:
    +66            The same signature as the function it is decorating
    +67        """
    +68
    +69        def decorate(capturable: Callable[..., Jsonable]):
    +70            @wraps(capturable)
    +71            def with_capture(self, *args, **kwargs):
    +72                return_values = capturable(self, *args, **kwargs)
    +73                try:
    +74                    save(output_directory, return_values) if do_save_captured_content is True else ...
    +75                except Exception as e:
    +76                    logger.debug(f"Failed to dump data for debug {str(e)}. Not critical.")
    +77                return return_values
    +78
    +79            return with_capture
    +80
    +81        return decorate
    +
    + + +

    Decorator to capture values from a decorated function and optionally save to file

    +
    + + +
    + +
    +
    @staticmethod
    + + def + capture_return_values( do_save_captured_content: bool = False, output_directory: pathlib.Path = PosixPath('/home/runner/work/ecalc/ecalc/docs/captured_data')) -> Union[Any, NoneType]: + + + +
    + +
    52    @staticmethod
    +53    def capture_return_values(
    +54        do_save_captured_content: bool = False, output_directory: Path = Path(os.getcwd()) / "captured_data"
    +55    ) -> Optional[Any]:
    +56        """If enabled, save the return values from decorated function to the given output directory. If disabled,
    +57        the function works as if the decorator is not there.
    +58
    +59        Note! This currently only supports functions that returns a value/object that support serialization to json() through implementing a .json() method
    +60
    +61        Args:
    +62            do_save_captured_content: whether the captured content should be saved or not. Default False.
    +63            output_directory: Directory to where the captured content should be stored. Missing parent directories will be created.
    +64
    +65        Returns:
    +66            The same signature as the function it is decorating
    +67        """
    +68
    +69        def decorate(capturable: Callable[..., Jsonable]):
    +70            @wraps(capturable)
    +71            def with_capture(self, *args, **kwargs):
    +72                return_values = capturable(self, *args, **kwargs)
    +73                try:
    +74                    save(output_directory, return_values) if do_save_captured_content is True else ...
    +75                except Exception as e:
    +76                    logger.debug(f"Failed to dump data for debug {str(e)}. Not critical.")
    +77                return return_values
    +78
    +79            return with_capture
    +80
    +81        return decorate
    +
    + + +

    If enabled, save the return values from decorated function to the given output directory. If disabled, +the function works as if the decorator is not there.

    + +

    Note! This currently only supports functions that returns a value/object that support serialization to json() through implementing a .json() method

    + +

    Args: + do_save_captured_content: whether the captured content should be saved or not. Default False. + output_directory: Directory to where the captured content should be stored. Missing parent directories will be created.

    + +

    Returns: + The same signature as the function it is decorating

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/decorators/feature_flags.html b/docs/about/references/api/libecalc/common/decorators/feature_flags.html new file mode 100644 index 0000000000..fe86cd519c --- /dev/null +++ b/docs/about/references/api/libecalc/common/decorators/feature_flags.html @@ -0,0 +1,607 @@ + + + + + + + libecalc.common.decorators.feature_flags API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.decorators.feature_flags

    + + + + + + +
     1from functools import wraps
    + 2from typing import Any, Callable, Optional
    + 3
    + 4from libecalc.common.logger import logger
    + 5
    + 6
    + 7class Feature:
    + 8    """Class with utils for handling new (beta) and old (deprecated) features in a safe and communicative way."""
    + 9
    +10    @staticmethod
    +11    def experimental(feature_description: str) -> Optional[Any]:
    +12        """Flag for experimental/beta features
    +13        Args:
    +14            feature_description: Description of new feature.
    +15
    +16        Returns:
    +17
    +18        """
    +19
    +20        def decorate(experimental_feature: Callable):
    +21            @wraps(experimental_feature)
    +22            def with_experimental(*args, **kwargs):
    +23                logger.warning(
    +24                    f"!EXPERIMENTAL! {feature_description}."
    +25                    f" It has not been thoroughly tested and Quality Assured yet. Use at own risk. !EXPERIMENTAL!"
    +26                )
    +27                try:
    +28                    return experimental_feature(*args, **kwargs)
    +29                except Exception as e:
    +30                    logger.error(
    +31                        f"Error in {feature_description}: {e}."
    +32                        f" However, this is an experimental feature and should be reported in #ecalc_support on Slack.",
    +33                        e,
    +34                    )
    +35                return None
    +36
    +37            return with_experimental
    +38
    +39        return decorate
    +40
    +41    @staticmethod
    +42    def deprecated(message: str):
    +43        """Flag for handling deprecated features
    +44        Args:
    +45            message: Info about deprecation of feature, and (if available) instructions on usage of replacement.
    +46
    +47        Returns:
    +48
    +49        """
    +50        logger.warning(f"DEPRECATED! {message}. It will be removed in a future version.")
    +51
    +52
    +53class FeatureToggle:
    +54    """Decorator to handle 2 paths, depending on whether toggle is on or off."""
    +55
    +56    @staticmethod
    +57    def experimental(feature_toggle: bool, fallback: Callable) -> Optional[Any]:
    +58        """If feature_toggle is true, call current (experimental) method, if false fallback to old method.
    +59
    +60        To easily and safely rollback to a working version in production for high(er) risk changes, but with
    +61        e.g. more functionality. To safely roll out new features with safety net to old version instead of
    +62        redeploy. E.g. essential for trunk based development and similar approaches.
    +63
    +64        Both old and new must be compatible signature wise wrt in/out parameters, return values
    +65        and possibly the in-place mutable changes done on in-parameters.
    +66
    +67        :param feature_toggle:
    +68        :param fallback: the old safe known method
    +69        :return:
    +70        """
    +71
    +72        def decorate(experimental_feature: Callable):
    +73            @wraps(experimental_feature)
    +74            def with_feature_toggle(self, *args, **kwargs):
    +75                if feature_toggle:
    +76                    return experimental_feature(self, *args, **kwargs)
    +77                else:
    +78                    return fallback(self, *args, **kwargs)
    +79
    +80            return with_feature_toggle
    +81
    +82        return decorate
    +
    + + +
    +
    + +
    + + class + Feature: + + + +
    + +
     8class Feature:
    + 9    """Class with utils for handling new (beta) and old (deprecated) features in a safe and communicative way."""
    +10
    +11    @staticmethod
    +12    def experimental(feature_description: str) -> Optional[Any]:
    +13        """Flag for experimental/beta features
    +14        Args:
    +15            feature_description: Description of new feature.
    +16
    +17        Returns:
    +18
    +19        """
    +20
    +21        def decorate(experimental_feature: Callable):
    +22            @wraps(experimental_feature)
    +23            def with_experimental(*args, **kwargs):
    +24                logger.warning(
    +25                    f"!EXPERIMENTAL! {feature_description}."
    +26                    f" It has not been thoroughly tested and Quality Assured yet. Use at own risk. !EXPERIMENTAL!"
    +27                )
    +28                try:
    +29                    return experimental_feature(*args, **kwargs)
    +30                except Exception as e:
    +31                    logger.error(
    +32                        f"Error in {feature_description}: {e}."
    +33                        f" However, this is an experimental feature and should be reported in #ecalc_support on Slack.",
    +34                        e,
    +35                    )
    +36                return None
    +37
    +38            return with_experimental
    +39
    +40        return decorate
    +41
    +42    @staticmethod
    +43    def deprecated(message: str):
    +44        """Flag for handling deprecated features
    +45        Args:
    +46            message: Info about deprecation of feature, and (if available) instructions on usage of replacement.
    +47
    +48        Returns:
    +49
    +50        """
    +51        logger.warning(f"DEPRECATED! {message}. It will be removed in a future version.")
    +
    + + +

    Class with utils for handling new (beta) and old (deprecated) features in a safe and communicative way.

    +
    + + +
    + +
    +
    @staticmethod
    + + def + experimental(feature_description: str) -> Union[Any, NoneType]: + + + +
    + +
    11    @staticmethod
    +12    def experimental(feature_description: str) -> Optional[Any]:
    +13        """Flag for experimental/beta features
    +14        Args:
    +15            feature_description: Description of new feature.
    +16
    +17        Returns:
    +18
    +19        """
    +20
    +21        def decorate(experimental_feature: Callable):
    +22            @wraps(experimental_feature)
    +23            def with_experimental(*args, **kwargs):
    +24                logger.warning(
    +25                    f"!EXPERIMENTAL! {feature_description}."
    +26                    f" It has not been thoroughly tested and Quality Assured yet. Use at own risk. !EXPERIMENTAL!"
    +27                )
    +28                try:
    +29                    return experimental_feature(*args, **kwargs)
    +30                except Exception as e:
    +31                    logger.error(
    +32                        f"Error in {feature_description}: {e}."
    +33                        f" However, this is an experimental feature and should be reported in #ecalc_support on Slack.",
    +34                        e,
    +35                    )
    +36                return None
    +37
    +38            return with_experimental
    +39
    +40        return decorate
    +
    + + +

    Flag for experimental/beta features +Args: + feature_description: Description of new feature.

    + +

    Returns:

    +
    + + +
    +
    + +
    +
    @staticmethod
    + + def + deprecated(message: str): + + + +
    + +
    42    @staticmethod
    +43    def deprecated(message: str):
    +44        """Flag for handling deprecated features
    +45        Args:
    +46            message: Info about deprecation of feature, and (if available) instructions on usage of replacement.
    +47
    +48        Returns:
    +49
    +50        """
    +51        logger.warning(f"DEPRECATED! {message}. It will be removed in a future version.")
    +
    + + +

    Flag for handling deprecated features +Args: + message: Info about deprecation of feature, and (if available) instructions on usage of replacement.

    + +

    Returns:

    +
    + + +
    +
    +
    + +
    + + class + FeatureToggle: + + + +
    + +
    54class FeatureToggle:
    +55    """Decorator to handle 2 paths, depending on whether toggle is on or off."""
    +56
    +57    @staticmethod
    +58    def experimental(feature_toggle: bool, fallback: Callable) -> Optional[Any]:
    +59        """If feature_toggle is true, call current (experimental) method, if false fallback to old method.
    +60
    +61        To easily and safely rollback to a working version in production for high(er) risk changes, but with
    +62        e.g. more functionality. To safely roll out new features with safety net to old version instead of
    +63        redeploy. E.g. essential for trunk based development and similar approaches.
    +64
    +65        Both old and new must be compatible signature wise wrt in/out parameters, return values
    +66        and possibly the in-place mutable changes done on in-parameters.
    +67
    +68        :param feature_toggle:
    +69        :param fallback: the old safe known method
    +70        :return:
    +71        """
    +72
    +73        def decorate(experimental_feature: Callable):
    +74            @wraps(experimental_feature)
    +75            def with_feature_toggle(self, *args, **kwargs):
    +76                if feature_toggle:
    +77                    return experimental_feature(self, *args, **kwargs)
    +78                else:
    +79                    return fallback(self, *args, **kwargs)
    +80
    +81            return with_feature_toggle
    +82
    +83        return decorate
    +
    + + +

    Decorator to handle 2 paths, depending on whether toggle is on or off.

    +
    + + +
    + +
    +
    @staticmethod
    + + def + experimental(feature_toggle: bool, fallback: Callable) -> Union[Any, NoneType]: + + + +
    + +
    57    @staticmethod
    +58    def experimental(feature_toggle: bool, fallback: Callable) -> Optional[Any]:
    +59        """If feature_toggle is true, call current (experimental) method, if false fallback to old method.
    +60
    +61        To easily and safely rollback to a working version in production for high(er) risk changes, but with
    +62        e.g. more functionality. To safely roll out new features with safety net to old version instead of
    +63        redeploy. E.g. essential for trunk based development and similar approaches.
    +64
    +65        Both old and new must be compatible signature wise wrt in/out parameters, return values
    +66        and possibly the in-place mutable changes done on in-parameters.
    +67
    +68        :param feature_toggle:
    +69        :param fallback: the old safe known method
    +70        :return:
    +71        """
    +72
    +73        def decorate(experimental_feature: Callable):
    +74            @wraps(experimental_feature)
    +75            def with_feature_toggle(self, *args, **kwargs):
    +76                if feature_toggle:
    +77                    return experimental_feature(self, *args, **kwargs)
    +78                else:
    +79                    return fallback(self, *args, **kwargs)
    +80
    +81            return with_feature_toggle
    +82
    +83        return decorate
    +
    + + +

    If feature_toggle is true, call current (experimental) method, if false fallback to old method.

    + +

    To easily and safely rollback to a working version in production for high(er) risk changes, but with +e.g. more functionality. To safely roll out new features with safety net to old version instead of +redeploy. E.g. essential for trunk based development and similar approaches.

    + +

    Both old and new must be compatible signature wise wrt in/out parameters, return values +and possibly the in-place mutable changes done on in-parameters.

    + +
    Parameters
    + +
      +
    • feature_toggle:
    • +
    • fallback: the old safe known method
    • +
    + +
    Returns
    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/errors.html b/docs/about/references/api/libecalc/common/errors.html new file mode 100644 index 0000000000..d317039f3a --- /dev/null +++ b/docs/about/references/api/libecalc/common/errors.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.common.errors API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.errors

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/errors/exceptions.html b/docs/about/references/api/libecalc/common/errors/exceptions.html new file mode 100644 index 0000000000..8ca3b55009 --- /dev/null +++ b/docs/about/references/api/libecalc/common/errors/exceptions.html @@ -0,0 +1,871 @@ + + + + + + + libecalc.common.errors.exceptions API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.errors.exceptions

    + + + + + + +
     1import enum
    + 2from typing import Optional
    + 3
    + 4
    + 5class EcalcErrorType(str, enum.Enum):
    + 6    """Valid error types in libecalc."""
    + 7
    + 8    CLIENT_ERROR = "User error"
    + 9    """The user made an error"""
    +10
    +11    SERVER_ERROR = "Server error"  # TODO: Does not make sense in a library, rename?
    +12    """ The eCalc library failed"""
    +13
    +14
    +15class EcalcError(Exception):
    +16    """Base eCalc library exception."""
    +17
    +18    title: Optional[str] = None
    +19    message: Optional[str] = None
    +20
    +21    def __init__(self, title: str, message: str, error_type: EcalcErrorType = EcalcErrorType.CLIENT_ERROR):
    +22        super().__init__()
    +23
    +24        self.title = title
    +25        self.message = message
    +26        self.error_type = error_type
    +27
    +28    def __str__(self):
    +29        return f"{self.title}: {self.message}"
    +30
    +31
    +32class IncompatibleDataError(EcalcError):
    +33    """The data provided by the user is invalid."""
    +34
    +35    def __init__(self, message: str, title: str = "Incompatible Data"):
    +36        super().__init__(title, message, error_type=EcalcErrorType.CLIENT_ERROR)
    +37
    +38
    +39class DifferentLengthsError(IncompatibleDataError):
    +40    """The data provided has incompatible lengths."""
    +41
    +42    def __init__(self, message: str):
    +43        super().__init__(title="Different Lengths", message=message)
    +44
    +45
    +46class MissingKeyError(IncompatibleDataError):
    +47    """The data provided is missing a required key."""
    +48
    +49    def __init__(self, message: str):
    +50        super().__init__(title="Missing Key", message=message)
    +51
    +52
    +53class ProgrammingError(EcalcError):
    +54    """The eCalc library has caused an error, and reached an invalid state. Likely a bug."""
    +55
    +56    def __init__(self, message: str):
    +57        super().__init__("Violation of programming rules", message, error_type=EcalcErrorType.SERVER_ERROR)
    +58
    +59
    +60class IllegalStateException(EcalcError):
    +61    """This exception should hopefully never occur, and indicates a bug in the code."""
    +62
    +63    def __init__(self, message: str):
    +64        super().__init__("Illegal state", message, error_type=EcalcErrorType.SERVER_ERROR)
    +65
    +66
    +67class InvalidReferenceException(EcalcError):
    +68    """The data provided is missing a required reference."""
    +69
    +70    def __init__(self, message: str):
    +71        super().__init__("Invalid reference", message, error_type=EcalcErrorType.CLIENT_ERROR)
    +
    + + +
    +
    + +
    + + class + EcalcErrorType(builtins.str, enum.Enum): + + + +
    + +
     6class EcalcErrorType(str, enum.Enum):
    + 7    """Valid error types in libecalc."""
    + 8
    + 9    CLIENT_ERROR = "User error"
    +10    """The user made an error"""
    +11
    +12    SERVER_ERROR = "Server error"  # TODO: Does not make sense in a library, rename?
    +13    """ The eCalc library failed"""
    +
    + + +

    Valid error types in libecalc.

    +
    + + +
    +
    + CLIENT_ERROR = +<EcalcErrorType.CLIENT_ERROR: 'User error'> + + +
    + + +

    The user made an error

    +
    + + +
    +
    +
    + SERVER_ERROR = +<EcalcErrorType.SERVER_ERROR: 'Server error'> + + +
    + + +

    The eCalc library failed

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EcalcError(builtins.Exception): + + + +
    + +
    16class EcalcError(Exception):
    +17    """Base eCalc library exception."""
    +18
    +19    title: Optional[str] = None
    +20    message: Optional[str] = None
    +21
    +22    def __init__(self, title: str, message: str, error_type: EcalcErrorType = EcalcErrorType.CLIENT_ERROR):
    +23        super().__init__()
    +24
    +25        self.title = title
    +26        self.message = message
    +27        self.error_type = error_type
    +28
    +29    def __str__(self):
    +30        return f"{self.title}: {self.message}"
    +
    + + +

    Base eCalc library exception.

    +
    + + +
    + +
    + + EcalcError( title: str, message: str, error_type: libecalc.common.errors.exceptions.EcalcErrorType = <EcalcErrorType.CLIENT_ERROR: 'User error'>) + + + +
    + +
    22    def __init__(self, title: str, message: str, error_type: EcalcErrorType = EcalcErrorType.CLIENT_ERROR):
    +23        super().__init__()
    +24
    +25        self.title = title
    +26        self.message = message
    +27        self.error_type = error_type
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + IncompatibleDataError(EcalcError): + + + +
    + +
    33class IncompatibleDataError(EcalcError):
    +34    """The data provided by the user is invalid."""
    +35
    +36    def __init__(self, message: str, title: str = "Incompatible Data"):
    +37        super().__init__(title, message, error_type=EcalcErrorType.CLIENT_ERROR)
    +
    + + +

    The data provided by the user is invalid.

    +
    + + +
    + +
    + + IncompatibleDataError(message: str, title: str = 'Incompatible Data') + + + +
    + +
    36    def __init__(self, message: str, title: str = "Incompatible Data"):
    +37        super().__init__(title, message, error_type=EcalcErrorType.CLIENT_ERROR)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + DifferentLengthsError(IncompatibleDataError): + + + +
    + +
    40class DifferentLengthsError(IncompatibleDataError):
    +41    """The data provided has incompatible lengths."""
    +42
    +43    def __init__(self, message: str):
    +44        super().__init__(title="Different Lengths", message=message)
    +
    + + +

    The data provided has incompatible lengths.

    +
    + + +
    + +
    + + DifferentLengthsError(message: str) + + + +
    + +
    43    def __init__(self, message: str):
    +44        super().__init__(title="Different Lengths", message=message)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + MissingKeyError(IncompatibleDataError): + + + +
    + +
    47class MissingKeyError(IncompatibleDataError):
    +48    """The data provided is missing a required key."""
    +49
    +50    def __init__(self, message: str):
    +51        super().__init__(title="Missing Key", message=message)
    +
    + + +

    The data provided is missing a required key.

    +
    + + +
    + +
    + + MissingKeyError(message: str) + + + +
    + +
    50    def __init__(self, message: str):
    +51        super().__init__(title="Missing Key", message=message)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + ProgrammingError(EcalcError): + + + +
    + +
    54class ProgrammingError(EcalcError):
    +55    """The eCalc library has caused an error, and reached an invalid state. Likely a bug."""
    +56
    +57    def __init__(self, message: str):
    +58        super().__init__("Violation of programming rules", message, error_type=EcalcErrorType.SERVER_ERROR)
    +
    + + +

    The eCalc library has caused an error, and reached an invalid state. Likely a bug.

    +
    + + +
    + +
    + + ProgrammingError(message: str) + + + +
    + +
    57    def __init__(self, message: str):
    +58        super().__init__("Violation of programming rules", message, error_type=EcalcErrorType.SERVER_ERROR)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + IllegalStateException(EcalcError): + + + +
    + +
    61class IllegalStateException(EcalcError):
    +62    """This exception should hopefully never occur, and indicates a bug in the code."""
    +63
    +64    def __init__(self, message: str):
    +65        super().__init__("Illegal state", message, error_type=EcalcErrorType.SERVER_ERROR)
    +
    + + +

    This exception should hopefully never occur, and indicates a bug in the code.

    +
    + + +
    + +
    + + IllegalStateException(message: str) + + + +
    + +
    64    def __init__(self, message: str):
    +65        super().__init__("Illegal state", message, error_type=EcalcErrorType.SERVER_ERROR)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + InvalidReferenceException(EcalcError): + + + +
    + +
    68class InvalidReferenceException(EcalcError):
    +69    """The data provided is missing a required reference."""
    +70
    +71    def __init__(self, message: str):
    +72        super().__init__("Invalid reference", message, error_type=EcalcErrorType.CLIENT_ERROR)
    +
    + + +

    The data provided is missing a required reference.

    +
    + + +
    + +
    + + InvalidReferenceException(message: str) + + + +
    + +
    71    def __init__(self, message: str):
    +72        super().__init__("Invalid reference", message, error_type=EcalcErrorType.CLIENT_ERROR)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/graph.html b/docs/about/references/api/libecalc/common/graph.html new file mode 100644 index 0000000000..0788c82d9a --- /dev/null +++ b/docs/about/references/api/libecalc/common/graph.html @@ -0,0 +1,710 @@ + + + + + + + libecalc.common.graph API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.graph

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from typing import Dict, Generic, List, Protocol, TypeVar
    + 4
    + 5import networkx as nx
    + 6from typing_extensions import Self
    + 7
    + 8NodeID = str
    + 9
    +10
    +11class NodeWithID(Protocol):
    +12    @property
    +13    def id(self) -> NodeID:
    +14        ...
    +15
    +16
    +17TNode = TypeVar("TNode", bound=NodeWithID)
    +18
    +19
    +20class Graph(Generic[TNode]):
    +21    def __init__(self):
    +22        self.graph = nx.DiGraph()
    +23        self.nodes: Dict[NodeID, TNode] = {}
    +24
    +25    def add_node(self, node: TNode) -> Self:
    +26        self.graph.add_node(node.id)
    +27        self.nodes[node.id] = node
    +28        return self
    +29
    +30    def add_edge(self, from_id: NodeID, to_id: NodeID) -> Self:
    +31        if from_id not in self.nodes or to_id not in self.nodes:
    +32            raise ValueError("Add node before adding edges")
    +33
    +34        self.graph.add_edge(from_id, to_id)
    +35        return self
    +36
    +37    def add_subgraph(self, subgraph: Graph) -> Self:
    +38        self.nodes.update(subgraph.nodes)
    +39        self.graph = nx.compose(self.graph, subgraph.graph)
    +40        return self
    +41
    +42    def get_successors(self, node_id: NodeID, recursively=False) -> List[NodeID]:
    +43        if recursively:
    +44            return [
    +45                successor_id
    +46                for successor_id in nx.dfs_tree(self.graph, source=node_id).nodes()
    +47                if successor_id != node_id
    +48            ]
    +49        else:
    +50            return list(self.graph.successors(node_id))
    +51
    +52    def get_predecessor(self, node_id: NodeID) -> NodeID:
    +53        predecessors = list(self.graph.predecessors(node_id))
    +54        if len(predecessors) > 1:
    +55            raise ValueError(
    +56                f"Tried to get a single predecessor of node with several predecessors. NodeID: {node_id}, "
    +57                f"Predecessors: {', '.join(predecessors)}"
    +58            )
    +59        return predecessors[0]
    +60
    +61    @property
    +62    def root(self) -> NodeID:
    +63        return list(nx.topological_sort(self.graph))[0]
    +64
    +65    def get_node(self, node_id: NodeID) -> TNode:
    +66        return self.nodes[node_id]
    +67
    +68    @property
    +69    def sorted_node_ids(self) -> List[NodeID]:
    +70        return list(nx.topological_sort(self.graph))
    +71
    +72    def breadth_first_search_tree(self, source_id: NodeID) -> List[NodeID]:
    +73        """
    +74        Create a tree with source as root by searching edges close to the source first. Breadth first orders the nodes
    +75        that are closer to the source before nodes that are further out.
    +76
    +77        Args:
    +78            source_id:
    +79
    +80        Returns:
    +81
    +82        """
    +83        return list(nx.bfs_tree(self.graph, source_id))
    +84
    +85    def __iter__(self):
    +86        return iter(self.graph)
    +
    + + +
    +
    + +
    + + class + NodeWithID(typing.Protocol): + + + +
    + +
    12class NodeWithID(Protocol):
    +13    @property
    +14    def id(self) -> NodeID:
    +15        ...
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + NodeWithID(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    +
    + +
    + + class + Graph(typing.Generic[~TNode]): + + + +
    + +
    21class Graph(Generic[TNode]):
    +22    def __init__(self):
    +23        self.graph = nx.DiGraph()
    +24        self.nodes: Dict[NodeID, TNode] = {}
    +25
    +26    def add_node(self, node: TNode) -> Self:
    +27        self.graph.add_node(node.id)
    +28        self.nodes[node.id] = node
    +29        return self
    +30
    +31    def add_edge(self, from_id: NodeID, to_id: NodeID) -> Self:
    +32        if from_id not in self.nodes or to_id not in self.nodes:
    +33            raise ValueError("Add node before adding edges")
    +34
    +35        self.graph.add_edge(from_id, to_id)
    +36        return self
    +37
    +38    def add_subgraph(self, subgraph: Graph) -> Self:
    +39        self.nodes.update(subgraph.nodes)
    +40        self.graph = nx.compose(self.graph, subgraph.graph)
    +41        return self
    +42
    +43    def get_successors(self, node_id: NodeID, recursively=False) -> List[NodeID]:
    +44        if recursively:
    +45            return [
    +46                successor_id
    +47                for successor_id in nx.dfs_tree(self.graph, source=node_id).nodes()
    +48                if successor_id != node_id
    +49            ]
    +50        else:
    +51            return list(self.graph.successors(node_id))
    +52
    +53    def get_predecessor(self, node_id: NodeID) -> NodeID:
    +54        predecessors = list(self.graph.predecessors(node_id))
    +55        if len(predecessors) > 1:
    +56            raise ValueError(
    +57                f"Tried to get a single predecessor of node with several predecessors. NodeID: {node_id}, "
    +58                f"Predecessors: {', '.join(predecessors)}"
    +59            )
    +60        return predecessors[0]
    +61
    +62    @property
    +63    def root(self) -> NodeID:
    +64        return list(nx.topological_sort(self.graph))[0]
    +65
    +66    def get_node(self, node_id: NodeID) -> TNode:
    +67        return self.nodes[node_id]
    +68
    +69    @property
    +70    def sorted_node_ids(self) -> List[NodeID]:
    +71        return list(nx.topological_sort(self.graph))
    +72
    +73    def breadth_first_search_tree(self, source_id: NodeID) -> List[NodeID]:
    +74        """
    +75        Create a tree with source as root by searching edges close to the source first. Breadth first orders the nodes
    +76        that are closer to the source before nodes that are further out.
    +77
    +78        Args:
    +79            source_id:
    +80
    +81        Returns:
    +82
    +83        """
    +84        return list(nx.bfs_tree(self.graph, source_id))
    +85
    +86    def __iter__(self):
    +87        return iter(self.graph)
    +
    + + +

    Abstract base class for generic types.

    + +

    A generic type is typically declared by inheriting from +this class parameterized with one or more type variables. +For example, a generic mapping type might be defined as::

    + +

    class Mapping(Generic[KT, VT]): + def __getitem__(self, key: KT) -> VT: + ... + # Etc.

    + +

    This class can then be used as follows::

    + +

    def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: + try: + return mapping[key] + except KeyError: + return default

    +
    + + +
    + +
    + + def + add_node(self, node: ~TNode) -> typing_extensions.Self: + + + +
    + +
    26    def add_node(self, node: TNode) -> Self:
    +27        self.graph.add_node(node.id)
    +28        self.nodes[node.id] = node
    +29        return self
    +
    + + + + +
    +
    + +
    + + def + add_edge(self, from_id: str, to_id: str) -> typing_extensions.Self: + + + +
    + +
    31    def add_edge(self, from_id: NodeID, to_id: NodeID) -> Self:
    +32        if from_id not in self.nodes or to_id not in self.nodes:
    +33            raise ValueError("Add node before adding edges")
    +34
    +35        self.graph.add_edge(from_id, to_id)
    +36        return self
    +
    + + + + +
    +
    + +
    + + def + add_subgraph(self, subgraph: libecalc.common.graph.Graph) -> typing_extensions.Self: + + + +
    + +
    38    def add_subgraph(self, subgraph: Graph) -> Self:
    +39        self.nodes.update(subgraph.nodes)
    +40        self.graph = nx.compose(self.graph, subgraph.graph)
    +41        return self
    +
    + + + + +
    +
    + +
    + + def + get_successors(self, node_id: str, recursively=False) -> List[str]: + + + +
    + +
    43    def get_successors(self, node_id: NodeID, recursively=False) -> List[NodeID]:
    +44        if recursively:
    +45            return [
    +46                successor_id
    +47                for successor_id in nx.dfs_tree(self.graph, source=node_id).nodes()
    +48                if successor_id != node_id
    +49            ]
    +50        else:
    +51            return list(self.graph.successors(node_id))
    +
    + + + + +
    +
    + +
    + + def + get_predecessor(self, node_id: str) -> str: + + + +
    + +
    53    def get_predecessor(self, node_id: NodeID) -> NodeID:
    +54        predecessors = list(self.graph.predecessors(node_id))
    +55        if len(predecessors) > 1:
    +56            raise ValueError(
    +57                f"Tried to get a single predecessor of node with several predecessors. NodeID: {node_id}, "
    +58                f"Predecessors: {', '.join(predecessors)}"
    +59            )
    +60        return predecessors[0]
    +
    + + + + +
    +
    + +
    + + def + get_node(self, node_id: str) -> ~TNode: + + + +
    + +
    66    def get_node(self, node_id: NodeID) -> TNode:
    +67        return self.nodes[node_id]
    +
    + + + + +
    +
    + +
    + + def + breadth_first_search_tree(self, source_id: str) -> List[str]: + + + +
    + +
    73    def breadth_first_search_tree(self, source_id: NodeID) -> List[NodeID]:
    +74        """
    +75        Create a tree with source as root by searching edges close to the source first. Breadth first orders the nodes
    +76        that are closer to the source before nodes that are further out.
    +77
    +78        Args:
    +79            source_id:
    +80
    +81        Returns:
    +82
    +83        """
    +84        return list(nx.bfs_tree(self.graph, source_id))
    +
    + + +

    Create a tree with source as root by searching edges close to the source first. Breadth first orders the nodes +that are closer to the source before nodes that are further out.

    + +

    Args: + source_id:

    + +

    Returns:

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/list.html b/docs/about/references/api/libecalc/common/list.html new file mode 100644 index 0000000000..07f0191b69 --- /dev/null +++ b/docs/about/references/api/libecalc/common/list.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.common.list API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.list

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/list/adjustment.html b/docs/about/references/api/libecalc/common/list/adjustment.html new file mode 100644 index 0000000000..6010162251 --- /dev/null +++ b/docs/about/references/api/libecalc/common/list/adjustment.html @@ -0,0 +1,292 @@ + + + + + + + libecalc.common.list.adjustment API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.list.adjustment

    + + + + + + +
     1from typing import Union
    + 2
    + 3import numpy as np
    + 4from numpy.typing import NDArray
    + 5
    + 6
    + 7def transform_linear(
    + 8    values: Union[NDArray[np.float64], float],
    + 9    constant: float = 0.0,
    +10    factor: float = 1.0,
    +11) -> Union[NDArray[np.float64], float]:
    +12    """Linear transformation of an array. May typically be used for energy functions to adjust a result
    +13    according to given energy_usage_adjustment_constant and energy_usage_adjustment_factor.
    +14    """
    +15    constant = constant if constant is not None else 0.0
    +16    factor = factor if factor is not None else 1.0
    +17    return values * factor + constant
    +
    + + +
    +
    + +
    + + def + transform_linear( values: Union[numpy.ndarray[Any, numpy.dtype[numpy.float64]], float], constant: float = 0.0, factor: float = 1.0) -> Union[numpy.ndarray[Any, numpy.dtype[numpy.float64]], float]: + + + +
    + +
     8def transform_linear(
    + 9    values: Union[NDArray[np.float64], float],
    +10    constant: float = 0.0,
    +11    factor: float = 1.0,
    +12) -> Union[NDArray[np.float64], float]:
    +13    """Linear transformation of an array. May typically be used for energy functions to adjust a result
    +14    according to given energy_usage_adjustment_constant and energy_usage_adjustment_factor.
    +15    """
    +16    constant = constant if constant is not None else 0.0
    +17    factor = factor if factor is not None else 1.0
    +18    return values * factor + constant
    +
    + + +

    Linear transformation of an array. May typically be used for energy functions to adjust a result +according to given energy_usage_adjustment_constant and energy_usage_adjustment_factor.

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/list/list_utils.html b/docs/about/references/api/libecalc/common/list/list_utils.html new file mode 100644 index 0000000000..98c923e1fe --- /dev/null +++ b/docs/about/references/api/libecalc/common/list/list_utils.html @@ -0,0 +1,626 @@ + + + + + + + libecalc.common.list.list_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.list.list_utils

    + + + + + + +
      1from collections import defaultdict
    +  2from datetime import datetime
    +  3from typing import Any, Dict, List, Optional, Sequence, Union, cast
    +  4
    +  5import numpy as np
    +  6from numpy import float64
    +  7from numpy.typing import NDArray
    +  8
    +  9"""
    + 10NOTE! A "list util" class is not the best, but maybe we should try to
    + 11expand a "prototype" class instead, e.g. create "our own static list class" where we extend
    + 12python list and add static methods to it..?
    + 13"""
    + 14
    + 15
    + 16def transpose(a: List[List[Union[str, int, float]]]) -> List[List[Union[str, int, float]]]:
    + 17    """Easily transpose from row based to column based data, and other
    + 18    way around, in order to use the format that best fits a certain
    + 19    purpose to work with such a list/dataframe.
    + 20
    + 21    Args:
    + 22        a: List to be transposed
    + 23
    + 24    Returns:
    + 25        Transposed list
    + 26
    + 27    """
    + 28    return list(map(list, zip(*a)))
    + 29
    + 30
    + 31def group_data_by_value_at_index(index: int, row_based_data: List[List[Any]]) -> Dict[Union[float, int], List[Any]]:
    + 32    """Given an index of the list, group the list by the value corresponding to that index and
    + 33    return a dict with lists, where the keys correspond to the different values at the index provided.
    + 34
    + 35    E.g. if we provide a list [[1,20], [2,10], [1,30]] and provide index 0,
    + 36    we will get the dict: {1: [[1, 20], [1, 30]], 2: [[2, 10]]}
    + 37
    + 38    Args:
    + 39        index: Positive index
    + 40        row_based_data:
    + 41
    + 42    Returns:
    + 43        dict with lists, where the keys correspond to the different values at the index provided.
    + 44
    + 45    Raises:
    + 46        IndexError: if index specified is out of range/bounds, which should be handled by calling function.
    + 47
    + 48    """
    + 49    if index < 0:
    + 50        raise IndexError(f"Negative indexes are not allowed: {index}")
    + 51
    + 52    chart_grouped_by_index = defaultdict(list)
    + 53    for row in row_based_data:
    + 54        current_value = row[index]
    + 55        chart_grouped_by_index[current_value].append(row)
    + 56
    + 57    return chart_grouped_by_index
    + 58
    + 59
    + 60def elementwise_sum(
    + 61    *vectors: Sequence[Optional[float]], timesteps: Optional[List[datetime]] = None
    + 62) -> NDArray[np.float64]:
    + 63    """Sum up multiple vectors elementwise.
    + 64
    + 65    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1+2+1,20+10+30] = [4,60]
    + 66
    + 67    Args:
    + 68        *vectors: Sequences to be summed up elementwise
    + 69        timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used
    + 70
    + 71    Returns:
    + 72        Numpy array where the elements of provided vectors are summed up elementwise
    + 73
    + 74    """
    + 75    if timesteps is not None:
    + 76        result = np.full_like(timesteps, fill_value=0.0, dtype=float64)
    + 77    else:
    + 78        result = np.full_like(vectors[0], fill_value=0.0, dtype=float64)
    + 79
    + 80    for vector in vectors:
    + 81        result = np.add(result, vector)  # type: ignore[arg-type]
    + 82    return result
    + 83
    + 84
    + 85def elementwise_multiplication(
    + 86    *vectors: Sequence[Optional[float]], timesteps: Optional[List[datetime]] = None
    + 87) -> NDArray[np.float64]:
    + 88    """Multiply multiple vectors elementwise.
    + 89
    + 90    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1*2*1,20*10*30] = [2,6000]
    + 91
    + 92    Args:
    + 93        *vectors: Sequences to be multiplied up elementwise
    + 94        timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used
    + 95
    + 96    Returns:
    + 97        Numpy array where the elements of provided vectors are multiplied up elementwise
    + 98
    + 99    """
    +100    if timesteps is not None:
    +101        result = np.full_like(timesteps, fill_value=1.0, dtype=float64)
    +102    else:
    +103        result = np.full_like(vectors[0], fill_value=1.0, dtype=float64)
    +104
    +105    for vector in vectors:
    +106        result = np.multiply(result, vector)  # type: ignore[arg-type]
    +107    return result
    +108
    +109
    +110def array_to_list(result_array: Union[NDArray[np.float64], List[NDArray[np.float64]], None]) -> Optional[List]:
    +111    """Method to convert numpy arrays and list of numpy arrays into lists (or list of lists). Method is used recursively on lists so needs to handle None as well.
    +112
    +113    Args:
    +114        result_array: A numpy array, a list of numpy arrays or None
    +115
    +116    Returns:
    +117        list or list of lists
    +118    """
    +119    if result_array is None:
    +120        return None
    +121
    +122    if isinstance(result_array, list):
    +123        # In case we have a list of arrays.
    +124        return [array_to_list(array) for array in result_array]
    +125    elif isinstance(result_array, np.ndarray):
    +126        return cast(list, result_array.tolist())
    +
    + + +
    +
    + +
    + + def + transpose( a: List[List[Union[str, int, float]]]) -> List[List[Union[str, int, float]]]: + + + +
    + +
    17def transpose(a: List[List[Union[str, int, float]]]) -> List[List[Union[str, int, float]]]:
    +18    """Easily transpose from row based to column based data, and other
    +19    way around, in order to use the format that best fits a certain
    +20    purpose to work with such a list/dataframe.
    +21
    +22    Args:
    +23        a: List to be transposed
    +24
    +25    Returns:
    +26        Transposed list
    +27
    +28    """
    +29    return list(map(list, zip(*a)))
    +
    + + +

    Easily transpose from row based to column based data, and other +way around, in order to use the format that best fits a certain +purpose to work with such a list/dataframe.

    + +

    Args: + a: List to be transposed

    + +

    Returns: + Transposed list

    +
    + + +
    +
    + +
    + + def + group_data_by_value_at_index( index: int, row_based_data: List[List[Any]]) -> Dict[Union[float, int], List[Any]]: + + + +
    + +
    32def group_data_by_value_at_index(index: int, row_based_data: List[List[Any]]) -> Dict[Union[float, int], List[Any]]:
    +33    """Given an index of the list, group the list by the value corresponding to that index and
    +34    return a dict with lists, where the keys correspond to the different values at the index provided.
    +35
    +36    E.g. if we provide a list [[1,20], [2,10], [1,30]] and provide index 0,
    +37    we will get the dict: {1: [[1, 20], [1, 30]], 2: [[2, 10]]}
    +38
    +39    Args:
    +40        index: Positive index
    +41        row_based_data:
    +42
    +43    Returns:
    +44        dict with lists, where the keys correspond to the different values at the index provided.
    +45
    +46    Raises:
    +47        IndexError: if index specified is out of range/bounds, which should be handled by calling function.
    +48
    +49    """
    +50    if index < 0:
    +51        raise IndexError(f"Negative indexes are not allowed: {index}")
    +52
    +53    chart_grouped_by_index = defaultdict(list)
    +54    for row in row_based_data:
    +55        current_value = row[index]
    +56        chart_grouped_by_index[current_value].append(row)
    +57
    +58    return chart_grouped_by_index
    +
    + + +

    Given an index of the list, group the list by the value corresponding to that index and +return a dict with lists, where the keys correspond to the different values at the index provided.

    + +

    E.g. if we provide a list [[1,20], [2,10], [1,30]] and provide index 0, +we will get the dict: {1: [[1, 20], [1, 30]], 2: [[2, 10]]}

    + +

    Args: + index: Positive index + row_based_data:

    + +

    Returns: + dict with lists, where the keys correspond to the different values at the index provided.

    + +

    Raises: + IndexError: if index specified is out of range/bounds, which should be handled by calling function.

    +
    + + +
    +
    + +
    + + def + elementwise_sum( *vectors: Sequence[Union[float, NoneType]], timesteps: Union[List[datetime.datetime], NoneType] = None) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
    61def elementwise_sum(
    +62    *vectors: Sequence[Optional[float]], timesteps: Optional[List[datetime]] = None
    +63) -> NDArray[np.float64]:
    +64    """Sum up multiple vectors elementwise.
    +65
    +66    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1+2+1,20+10+30] = [4,60]
    +67
    +68    Args:
    +69        *vectors: Sequences to be summed up elementwise
    +70        timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used
    +71
    +72    Returns:
    +73        Numpy array where the elements of provided vectors are summed up elementwise
    +74
    +75    """
    +76    if timesteps is not None:
    +77        result = np.full_like(timesteps, fill_value=0.0, dtype=float64)
    +78    else:
    +79        result = np.full_like(vectors[0], fill_value=0.0, dtype=float64)
    +80
    +81    for vector in vectors:
    +82        result = np.add(result, vector)  # type: ignore[arg-type]
    +83    return result
    +
    + + +

    Sum up multiple vectors elementwise.

    + +

    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1+2+1,20+10+30] = [4,60]

    + +

    Args: + *vectors: Sequences to be summed up elementwise + timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used

    + +

    Returns: + Numpy array where the elements of provided vectors are summed up elementwise

    +
    + + +
    +
    + +
    + + def + elementwise_multiplication( *vectors: Sequence[Union[float, NoneType]], timesteps: Union[List[datetime.datetime], NoneType] = None) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
     86def elementwise_multiplication(
    + 87    *vectors: Sequence[Optional[float]], timesteps: Optional[List[datetime]] = None
    + 88) -> NDArray[np.float64]:
    + 89    """Multiply multiple vectors elementwise.
    + 90
    + 91    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1*2*1,20*10*30] = [2,6000]
    + 92
    + 93    Args:
    + 94        *vectors: Sequences to be multiplied up elementwise
    + 95        timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used
    + 96
    + 97    Returns:
    + 98        Numpy array where the elements of provided vectors are multiplied up elementwise
    + 99
    +100    """
    +101    if timesteps is not None:
    +102        result = np.full_like(timesteps, fill_value=1.0, dtype=float64)
    +103    else:
    +104        result = np.full_like(vectors[0], fill_value=1.0, dtype=float64)
    +105
    +106    for vector in vectors:
    +107        result = np.multiply(result, vector)  # type: ignore[arg-type]
    +108    return result
    +
    + + +

    Multiply multiple vectors elementwise.

    + +

    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [121,201030] = [2,6000]

    + +

    Args: + *vectors: Sequences to be multiplied up elementwise + timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used

    + +

    Returns: + Numpy array where the elements of provided vectors are multiplied up elementwise

    +
    + + +
    +
    + +
    + + def + array_to_list( result_array: Union[numpy.ndarray[Any, numpy.dtype[numpy.float64]], List[numpy.ndarray[Any, numpy.dtype[numpy.float64]]], NoneType]) -> Union[List, NoneType]: + + + +
    + +
    111def array_to_list(result_array: Union[NDArray[np.float64], List[NDArray[np.float64]], None]) -> Optional[List]:
    +112    """Method to convert numpy arrays and list of numpy arrays into lists (or list of lists). Method is used recursively on lists so needs to handle None as well.
    +113
    +114    Args:
    +115        result_array: A numpy array, a list of numpy arrays or None
    +116
    +117    Returns:
    +118        list or list of lists
    +119    """
    +120    if result_array is None:
    +121        return None
    +122
    +123    if isinstance(result_array, list):
    +124        # In case we have a list of arrays.
    +125        return [array_to_list(array) for array in result_array]
    +126    elif isinstance(result_array, np.ndarray):
    +127        return cast(list, result_array.tolist())
    +
    + + +

    Method to convert numpy arrays and list of numpy arrays into lists (or list of lists). Method is used recursively on lists so needs to handle None as well.

    + +

    Args: + result_array: A numpy array, a list of numpy arrays or None

    + +

    Returns: + list or list of lists

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/logger.html b/docs/about/references/api/libecalc/common/logger.html new file mode 100644 index 0000000000..8deccecb2d --- /dev/null +++ b/docs/about/references/api/libecalc/common/logger.html @@ -0,0 +1,258 @@ + + + + + + + libecalc.common.logger API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.logger

    + + + + + + +
     1import logging
    + 2
    + 3"""
    + 4We provide a logger object for the library with the logger named 'libecalc'
    + 5It is the user of the library's responsibility to configure it:
    + 6
    + 7https://docs.python.org/3/howto/logging.html#configuring-logging-for-a-library
    + 8
    + 9TLDR;
    +10A library do not and shall NOT configure a logger itself. It reserves a logging namespace called "libecalc",
    +11that applications that use the library will need to configure themselves. Therefore we explicitly add a NullHandler
    +12to make sure that the logger is not activated.
    +13"""
    +14logger = logging.getLogger(
    +15    "libecalc",
    +16)
    +17logger.addHandler(logging.NullHandler())
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/math.html b/docs/about/references/api/libecalc/common/math.html new file mode 100644 index 0000000000..1fb3555e72 --- /dev/null +++ b/docs/about/references/api/libecalc/common/math.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.common.math API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.math

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/math/math_utils.html b/docs/about/references/api/libecalc/common/math/math_utils.html new file mode 100644 index 0000000000..bb086017e9 --- /dev/null +++ b/docs/about/references/api/libecalc/common/math/math_utils.html @@ -0,0 +1,409 @@ + + + + + + + libecalc.common.math.math_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.math.math_utils

    + + + + + + +
     1from typing import Dict, TypeVar
    + 2
    + 3from libecalc.common.errors.exceptions import (
    + 4    DifferentLengthsError,
    + 5    IncompatibleDataError,
    + 6    MissingKeyError,
    + 7)
    + 8
    + 9T = TypeVar("T")
    +10
    +11
    +12class MathUtil:
    +13    @staticmethod
    +14    def elementwise_subtraction_by_key(this: Dict[T, float], that: Dict[T, float]) -> Dict[T, float]:
    +15        """For compatible dicts, with the same keys, subtract corresponding numbers in lists for each key
    +16        :param this:
    +17        :param that:
    +18        :return:    a dict containing the delta/subtraction of each value for corresponding key.
    +19
    +20        :throws: IncompatibleDataError if dicts cannot be subtracted
    +21        """
    +22        if this is None or that is None:
    +23            raise IncompatibleDataError(f"A or B is None. Dict A has value {this}, and B has {that}")
    +24
    +25        if len(this.items()) != len(that.items()):
    +26            raise DifferentLengthsError(
    +27                f"Subtracting values A-B failed due to different vector lengths. Dict A has value {len(this.items())}, but B has {len(that.items())}"
    +28            )
    +29
    +30        delta_dict: Dict[T, float] = {}
    +31
    +32        for item_key, this_value in this.items():
    +33            that_value = that.get(item_key)
    +34
    +35            if that_value is None:
    +36                raise MissingKeyError(
    +37                    f"Subtracting values A-B failed due to missing time step in B. Key {item_key} had value {this_value} in A but is missing in B"
    +38                )
    +39
    +40            if that_value is not None:
    +41                delta_dict[item_key] = this_value - that_value
    +42
    +43        return delta_dict
    +
    + + +
    +
    + +
    + + class + MathUtil: + + + +
    + +
    13class MathUtil:
    +14    @staticmethod
    +15    def elementwise_subtraction_by_key(this: Dict[T, float], that: Dict[T, float]) -> Dict[T, float]:
    +16        """For compatible dicts, with the same keys, subtract corresponding numbers in lists for each key
    +17        :param this:
    +18        :param that:
    +19        :return:    a dict containing the delta/subtraction of each value for corresponding key.
    +20
    +21        :throws: IncompatibleDataError if dicts cannot be subtracted
    +22        """
    +23        if this is None or that is None:
    +24            raise IncompatibleDataError(f"A or B is None. Dict A has value {this}, and B has {that}")
    +25
    +26        if len(this.items()) != len(that.items()):
    +27            raise DifferentLengthsError(
    +28                f"Subtracting values A-B failed due to different vector lengths. Dict A has value {len(this.items())}, but B has {len(that.items())}"
    +29            )
    +30
    +31        delta_dict: Dict[T, float] = {}
    +32
    +33        for item_key, this_value in this.items():
    +34            that_value = that.get(item_key)
    +35
    +36            if that_value is None:
    +37                raise MissingKeyError(
    +38                    f"Subtracting values A-B failed due to missing time step in B. Key {item_key} had value {this_value} in A but is missing in B"
    +39                )
    +40
    +41            if that_value is not None:
    +42                delta_dict[item_key] = this_value - that_value
    +43
    +44        return delta_dict
    +
    + + + + +
    + +
    +
    @staticmethod
    + + def + elementwise_subtraction_by_key(this: Dict[~T, float], that: Dict[~T, float]) -> Dict[~T, float]: + + + +
    + +
    14    @staticmethod
    +15    def elementwise_subtraction_by_key(this: Dict[T, float], that: Dict[T, float]) -> Dict[T, float]:
    +16        """For compatible dicts, with the same keys, subtract corresponding numbers in lists for each key
    +17        :param this:
    +18        :param that:
    +19        :return:    a dict containing the delta/subtraction of each value for corresponding key.
    +20
    +21        :throws: IncompatibleDataError if dicts cannot be subtracted
    +22        """
    +23        if this is None or that is None:
    +24            raise IncompatibleDataError(f"A or B is None. Dict A has value {this}, and B has {that}")
    +25
    +26        if len(this.items()) != len(that.items()):
    +27            raise DifferentLengthsError(
    +28                f"Subtracting values A-B failed due to different vector lengths. Dict A has value {len(this.items())}, but B has {len(that.items())}"
    +29            )
    +30
    +31        delta_dict: Dict[T, float] = {}
    +32
    +33        for item_key, this_value in this.items():
    +34            that_value = that.get(item_key)
    +35
    +36            if that_value is None:
    +37                raise MissingKeyError(
    +38                    f"Subtracting values A-B failed due to missing time step in B. Key {item_key} had value {this_value} in A but is missing in B"
    +39                )
    +40
    +41            if that_value is not None:
    +42                delta_dict[item_key] = this_value - that_value
    +43
    +44        return delta_dict
    +
    + + +

    For compatible dicts, with the same keys, subtract corresponding numbers in lists for each key

    + +
    Parameters
    + +
      +
    • this:
    • +
    • that:
    • +
    + +
    Returns
    + +
    +
    a dict containing the delta/subtraction of each value for corresponding key.
    +
    +
    + +

    :throws: IncompatibleDataError if dicts cannot be subtracted

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/math/numbers.html b/docs/about/references/api/libecalc/common/math/numbers.html new file mode 100644 index 0000000000..55cb5a3ebd --- /dev/null +++ b/docs/about/references/api/libecalc/common/math/numbers.html @@ -0,0 +1,480 @@ + + + + + + + libecalc.common.math.numbers API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.math.numbers

    + + + + + + +
     1from decimal import Decimal
    + 2
    + 3import numpy as np
    + 4
    + 5
    + 6class Numbers:
    + 7    """Class to handle eCalc specific logic to numbers."""
    + 8
    + 9    @staticmethod
    +10    def format_to_precision(number: float, precision: int) -> str:
    +11        """This method is currently only to format numbers for consistent
    +12        reporting, and hence a string is returned, and not the number
    +13        primitive.
    +14
    +15        See tests for examples on how it works, but in general:
    +16
    +17        * Numbers with decimals are restricted to <#precision> decimals/digits after the decimal sign,
    +18        but only when they are significant (matter, ie. 0.10 is formatted to 0.1)
    +19        * Numbers without decimals, are reported without decimals (ie, where it is not significant)
    +20        * Floats that equal integers are NOT rounded (ie 1000.0 is reported as 1000)
    +21        * If a number has more decimals than precision, it is rounded (3.1415288454854 to 3.14 if precision is 2)
    +22        * If a number is smaller than the 10^-precision (EPSILON), then it is rounded off to "0" (0.001 ~= 0 if precision is 2)
    +23
    +24        Uses Dragon4 algorithm implemented by Numpy, with some modifications/overrides as stated above.
    +25        Ref.
    +26            Article: https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf
    +27            Numpy: https://numpy.org/devdocs/reference/generated/numpy.format_float_positional.html
    +28
    +29        :param number:
    +30        :param precision:
    +31        :return:
    +32        """
    +33        if precision < -1:
    +34            raise ValueError(f"Precision must be >= 0. {precision} was given.")
    +35
    +36        if abs(number) <= pow(
    +37            10, (-precision) - 1
    +38        ):  # -1, because user indicates number of significant decimals behind decimal sign
    +39            return "0"
    +40
    +41        my_decimal = Decimal(number)
    +42        significant_digits = my_decimal.adjusted()
    +43
    +44        if significant_digits < 0:
    +45            new_precision = precision
    +46        elif significant_digits < precision:
    +47            new_precision = precision - significant_digits  # we dont want unnecessary decimals on high numbers
    +48        else:
    +49            new_precision = 0
    +50
    +51        return str(
    +52            np.format_float_positional(
    +53                number,
    +54                new_precision,
    +55                unique=True,
    +56                fractional=True,
    +57                trim="-",
    +58            )
    +59        )
    +
    + + +
    +
    + +
    + + class + Numbers: + + + +
    + +
     7class Numbers:
    + 8    """Class to handle eCalc specific logic to numbers."""
    + 9
    +10    @staticmethod
    +11    def format_to_precision(number: float, precision: int) -> str:
    +12        """This method is currently only to format numbers for consistent
    +13        reporting, and hence a string is returned, and not the number
    +14        primitive.
    +15
    +16        See tests for examples on how it works, but in general:
    +17
    +18        * Numbers with decimals are restricted to <#precision> decimals/digits after the decimal sign,
    +19        but only when they are significant (matter, ie. 0.10 is formatted to 0.1)
    +20        * Numbers without decimals, are reported without decimals (ie, where it is not significant)
    +21        * Floats that equal integers are NOT rounded (ie 1000.0 is reported as 1000)
    +22        * If a number has more decimals than precision, it is rounded (3.1415288454854 to 3.14 if precision is 2)
    +23        * If a number is smaller than the 10^-precision (EPSILON), then it is rounded off to "0" (0.001 ~= 0 if precision is 2)
    +24
    +25        Uses Dragon4 algorithm implemented by Numpy, with some modifications/overrides as stated above.
    +26        Ref.
    +27            Article: https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf
    +28            Numpy: https://numpy.org/devdocs/reference/generated/numpy.format_float_positional.html
    +29
    +30        :param number:
    +31        :param precision:
    +32        :return:
    +33        """
    +34        if precision < -1:
    +35            raise ValueError(f"Precision must be >= 0. {precision} was given.")
    +36
    +37        if abs(number) <= pow(
    +38            10, (-precision) - 1
    +39        ):  # -1, because user indicates number of significant decimals behind decimal sign
    +40            return "0"
    +41
    +42        my_decimal = Decimal(number)
    +43        significant_digits = my_decimal.adjusted()
    +44
    +45        if significant_digits < 0:
    +46            new_precision = precision
    +47        elif significant_digits < precision:
    +48            new_precision = precision - significant_digits  # we dont want unnecessary decimals on high numbers
    +49        else:
    +50            new_precision = 0
    +51
    +52        return str(
    +53            np.format_float_positional(
    +54                number,
    +55                new_precision,
    +56                unique=True,
    +57                fractional=True,
    +58                trim="-",
    +59            )
    +60        )
    +
    + + +

    Class to handle eCalc specific logic to numbers.

    +
    + + +
    + +
    +
    @staticmethod
    + + def + format_to_precision(number: float, precision: int) -> str: + + + +
    + +
    10    @staticmethod
    +11    def format_to_precision(number: float, precision: int) -> str:
    +12        """This method is currently only to format numbers for consistent
    +13        reporting, and hence a string is returned, and not the number
    +14        primitive.
    +15
    +16        See tests for examples on how it works, but in general:
    +17
    +18        * Numbers with decimals are restricted to <#precision> decimals/digits after the decimal sign,
    +19        but only when they are significant (matter, ie. 0.10 is formatted to 0.1)
    +20        * Numbers without decimals, are reported without decimals (ie, where it is not significant)
    +21        * Floats that equal integers are NOT rounded (ie 1000.0 is reported as 1000)
    +22        * If a number has more decimals than precision, it is rounded (3.1415288454854 to 3.14 if precision is 2)
    +23        * If a number is smaller than the 10^-precision (EPSILON), then it is rounded off to "0" (0.001 ~= 0 if precision is 2)
    +24
    +25        Uses Dragon4 algorithm implemented by Numpy, with some modifications/overrides as stated above.
    +26        Ref.
    +27            Article: https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf
    +28            Numpy: https://numpy.org/devdocs/reference/generated/numpy.format_float_positional.html
    +29
    +30        :param number:
    +31        :param precision:
    +32        :return:
    +33        """
    +34        if precision < -1:
    +35            raise ValueError(f"Precision must be >= 0. {precision} was given.")
    +36
    +37        if abs(number) <= pow(
    +38            10, (-precision) - 1
    +39        ):  # -1, because user indicates number of significant decimals behind decimal sign
    +40            return "0"
    +41
    +42        my_decimal = Decimal(number)
    +43        significant_digits = my_decimal.adjusted()
    +44
    +45        if significant_digits < 0:
    +46            new_precision = precision
    +47        elif significant_digits < precision:
    +48            new_precision = precision - significant_digits  # we dont want unnecessary decimals on high numbers
    +49        else:
    +50            new_precision = 0
    +51
    +52        return str(
    +53            np.format_float_positional(
    +54                number,
    +55                new_precision,
    +56                unique=True,
    +57                fractional=True,
    +58                trim="-",
    +59            )
    +60        )
    +
    + + +

    This method is currently only to format numbers for consistent +reporting, and hence a string is returned, and not the number +primitive.

    + +

    See tests for examples on how it works, but in general:

    + +
      +
    • Numbers with decimals are restricted to <#precision> decimals/digits after the decimal sign, +but only when they are significant (matter, ie. 0.10 is formatted to 0.1)
    • +
    • Numbers without decimals, are reported without decimals (ie, where it is not significant)
    • +
    • Floats that equal integers are NOT rounded (ie 1000.0 is reported as 1000)
    • +
    • If a number has more decimals than precision, it is rounded (3.1415288454854 to 3.14 if precision is 2)
    • +
    • If a number is smaller than the 10^-precision (EPSILON), then it is rounded off to "0" (0.001 ~= 0 if precision is 2)
    • +
    + +

    Uses Dragon4 algorithm implemented by Numpy, with some modifications/overrides as stated above. +Ref. + Article: https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf + Numpy: https://numpy.org/devdocs/reference/generated/numpy.format_float_positional.html

    + +
    Parameters
    + +
      +
    • number:
    • +
    • precision:
    • +
    + +
    Returns
    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/priorities.html b/docs/about/references/api/libecalc/common/priorities.html new file mode 100644 index 0000000000..4811cdff14 --- /dev/null +++ b/docs/about/references/api/libecalc/common/priorities.html @@ -0,0 +1,248 @@ + + + + + + + libecalc.common.priorities API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.priorities

    + + + + + + +
    1from typing import Dict, TypeVar
    +2
    +3TPriorityValue = TypeVar("TPriorityValue")
    +4
    +5PriorityID = str
    +6
    +7Priorities = Dict[PriorityID, TPriorityValue]
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/priority_optimizer.html b/docs/about/references/api/libecalc/common/priority_optimizer.html new file mode 100644 index 0000000000..5b3c155d03 --- /dev/null +++ b/docs/about/references/api/libecalc/common/priority_optimizer.html @@ -0,0 +1,557 @@ + + + + + + + libecalc.common.priority_optimizer API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.priority_optimizer

    + + + + + + +
     1import operator
    + 2import typing
    + 3from collections import defaultdict
    + 4from dataclasses import dataclass
    + 5from functools import reduce
    + 6from typing import Dict, Generic, List, TypeVar
    + 7
    + 8from libecalc.common.priorities import PriorityID
    + 9
    +10TResult = TypeVar("TResult")
    +11
    +12ComponentID = str
    +13
    +14
    +15@dataclass
    +16class PriorityOptimizerResult(Generic[TResult]):
    +17    priority_used: PriorityID
    +18    priority_results: List[typing.Any]  # TODO: typing. This is the consumer results merged based on priorities used
    +19
    +20
    +21@dataclass
    +22class EvaluatorResult(Generic[TResult]):
    +23    id: ComponentID
    +24    result: TResult
    +25    is_valid: bool
    +26
    +27
    +28class PriorityOptimizer(Generic[TResult]):
    +29    def optimize(
    +30        self,
    +31        priorities: List[PriorityID],
    +32        evaluator: typing.Callable[[PriorityID], List[EvaluatorResult[TResult]]],
    +33    ) -> PriorityOptimizerResult:
    +34        """
    +35        Given a list of priorities, evaluate each priority using the evaluator. If the result of an evaluation is valid
    +36        the priority is selected, if invalid try the next priority.
    +37
    +38        It will default to the last priority if all settings fails
    +39
    +40        Args:
    +41            priorities: List of priorities
    +42            evaluator: The evaluator function gives a list of results back, each result with its own unique id.
    +43
    +44        Returns:
    +45            PriorityOptimizerResult: result containing priorities used and a list of the results merged on priorities
    +46            used,
    +47
    +48        """
    +49        priority_used = priorities[-1]
    +50        priority_results: Dict[PriorityID, Dict[str, TResult]] = defaultdict(dict)
    +51
    +52        for priority in priorities:
    +53            evaluator_results = evaluator(priority)
    +54            for evaluator_result in evaluator_results:
    +55                priority_results[priority][evaluator_result.id] = evaluator_result.result
    +56
    +57            # Check if consumers are valid for this priority, should be valid for all consumers
    +58            all_evaluator_results_valid = reduce(
    +59                operator.mul, [evaluator_result.is_valid for evaluator_result in evaluator_results]
    +60            )
    +61
    +62            if all_evaluator_results_valid:
    +63                priority_used = priority
    +64                # quit as soon as all time-steps are valid. This means that we do not need to test all settings.
    +65                break
    +66        return PriorityOptimizerResult(
    +67            priority_used=priority_used,
    +68            priority_results=[
    +69                ecalc_model_result.component_result for ecalc_model_result in priority_results[priority_used].values()
    +70            ],
    +71        )
    +
    + + +
    +
    + +
    + + class + PriorityOptimizerResult(typing.Generic[~TResult]): + + + +
    + +
    17class PriorityOptimizerResult(Generic[TResult]):
    +18    priority_used: PriorityID
    +19    priority_results: List[typing.Any]  # TODO: typing. This is the consumer results merged based on priorities used
    +
    + + + + +
    +
    + + PriorityOptimizerResult(priority_used: str, priority_results: List[Any]) + + +
    + + + + +
    +
    +
    + +
    + + class + EvaluatorResult(typing.Generic[~TResult]): + + + +
    + +
    23class EvaluatorResult(Generic[TResult]):
    +24    id: ComponentID
    +25    result: TResult
    +26    is_valid: bool
    +
    + + + + +
    +
    + + EvaluatorResult(id: str, result: ~TResult, is_valid: bool) + + +
    + + + + +
    +
    +
    + +
    + + class + PriorityOptimizer(typing.Generic[~TResult]): + + + +
    + +
    29class PriorityOptimizer(Generic[TResult]):
    +30    def optimize(
    +31        self,
    +32        priorities: List[PriorityID],
    +33        evaluator: typing.Callable[[PriorityID], List[EvaluatorResult[TResult]]],
    +34    ) -> PriorityOptimizerResult:
    +35        """
    +36        Given a list of priorities, evaluate each priority using the evaluator. If the result of an evaluation is valid
    +37        the priority is selected, if invalid try the next priority.
    +38
    +39        It will default to the last priority if all settings fails
    +40
    +41        Args:
    +42            priorities: List of priorities
    +43            evaluator: The evaluator function gives a list of results back, each result with its own unique id.
    +44
    +45        Returns:
    +46            PriorityOptimizerResult: result containing priorities used and a list of the results merged on priorities
    +47            used,
    +48
    +49        """
    +50        priority_used = priorities[-1]
    +51        priority_results: Dict[PriorityID, Dict[str, TResult]] = defaultdict(dict)
    +52
    +53        for priority in priorities:
    +54            evaluator_results = evaluator(priority)
    +55            for evaluator_result in evaluator_results:
    +56                priority_results[priority][evaluator_result.id] = evaluator_result.result
    +57
    +58            # Check if consumers are valid for this priority, should be valid for all consumers
    +59            all_evaluator_results_valid = reduce(
    +60                operator.mul, [evaluator_result.is_valid for evaluator_result in evaluator_results]
    +61            )
    +62
    +63            if all_evaluator_results_valid:
    +64                priority_used = priority
    +65                # quit as soon as all time-steps are valid. This means that we do not need to test all settings.
    +66                break
    +67        return PriorityOptimizerResult(
    +68            priority_used=priority_used,
    +69            priority_results=[
    +70                ecalc_model_result.component_result for ecalc_model_result in priority_results[priority_used].values()
    +71            ],
    +72        )
    +
    + + +

    Abstract base class for generic types.

    + +

    A generic type is typically declared by inheriting from +this class parameterized with one or more type variables. +For example, a generic mapping type might be defined as::

    + +

    class Mapping(Generic[KT, VT]): + def __getitem__(self, key: KT) -> VT: + ... + # Etc.

    + +

    This class can then be used as follows::

    + +

    def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: + try: + return mapping[key] + except KeyError: + return default

    +
    + + +
    + +
    + + def + optimize( self, priorities: List[str], evaluator: Callable[[str], List[libecalc.common.priority_optimizer.EvaluatorResult[~TResult]]]) -> libecalc.common.priority_optimizer.PriorityOptimizerResult: + + + +
    + +
    30    def optimize(
    +31        self,
    +32        priorities: List[PriorityID],
    +33        evaluator: typing.Callable[[PriorityID], List[EvaluatorResult[TResult]]],
    +34    ) -> PriorityOptimizerResult:
    +35        """
    +36        Given a list of priorities, evaluate each priority using the evaluator. If the result of an evaluation is valid
    +37        the priority is selected, if invalid try the next priority.
    +38
    +39        It will default to the last priority if all settings fails
    +40
    +41        Args:
    +42            priorities: List of priorities
    +43            evaluator: The evaluator function gives a list of results back, each result with its own unique id.
    +44
    +45        Returns:
    +46            PriorityOptimizerResult: result containing priorities used and a list of the results merged on priorities
    +47            used,
    +48
    +49        """
    +50        priority_used = priorities[-1]
    +51        priority_results: Dict[PriorityID, Dict[str, TResult]] = defaultdict(dict)
    +52
    +53        for priority in priorities:
    +54            evaluator_results = evaluator(priority)
    +55            for evaluator_result in evaluator_results:
    +56                priority_results[priority][evaluator_result.id] = evaluator_result.result
    +57
    +58            # Check if consumers are valid for this priority, should be valid for all consumers
    +59            all_evaluator_results_valid = reduce(
    +60                operator.mul, [evaluator_result.is_valid for evaluator_result in evaluator_results]
    +61            )
    +62
    +63            if all_evaluator_results_valid:
    +64                priority_used = priority
    +65                # quit as soon as all time-steps are valid. This means that we do not need to test all settings.
    +66                break
    +67        return PriorityOptimizerResult(
    +68            priority_used=priority_used,
    +69            priority_results=[
    +70                ecalc_model_result.component_result for ecalc_model_result in priority_results[priority_used].values()
    +71            ],
    +72        )
    +
    + + +

    Given a list of priorities, evaluate each priority using the evaluator. If the result of an evaluation is valid +the priority is selected, if invalid try the next priority.

    + +

    It will default to the last priority if all settings fails

    + +

    Args: + priorities: List of priorities + evaluator: The evaluator function gives a list of results back, each result with its own unique id.

    + +

    Returns: + PriorityOptimizerResult: result containing priorities used and a list of the results merged on priorities + used,

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/run_info.html b/docs/about/references/api/libecalc/common/run_info.html new file mode 100644 index 0000000000..c135cd7cff --- /dev/null +++ b/docs/about/references/api/libecalc/common/run_info.html @@ -0,0 +1,332 @@ + + + + + + + libecalc.common.run_info API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.run_info

    + + + + + + +
     1from datetime import datetime
    + 2from typing import Optional
    + 3
    + 4from pydantic import BaseModel
    + 5
    + 6from libecalc.common.version import Version
    + 7
    + 8
    + 9class RunInfo(BaseModel):
    +10    """Data model for metadata about eCalc model runs."""
    +11
    +12    version: Version
    +13    start: datetime
    +14    end: Optional[datetime] = None
    +15
    +16    def __str__(self):
    +17        rstr = f"version '{str(self.version)}' started at '{self.start.strftime('%Y.%m.%d %H:%M:%S')}'"
    +18        if self.end is not None:
    +19            rstr += f" ended at '{self.end.strftime('%Y.%m.%d %H:%M:%S')}'"
    +20        return rstr
    +
    + + +
    +
    + +
    + + class + RunInfo(pydantic.main.BaseModel): + + + +
    + +
    10class RunInfo(BaseModel):
    +11    """Data model for metadata about eCalc model runs."""
    +12
    +13    version: Version
    +14    start: datetime
    +15    end: Optional[datetime] = None
    +16
    +17    def __str__(self):
    +18        rstr = f"version '{str(self.version)}' started at '{self.start.strftime('%Y.%m.%d %H:%M:%S')}'"
    +19        if self.end is not None:
    +20            rstr += f" ended at '{self.end.strftime('%Y.%m.%d %H:%M:%S')}'"
    +21        return rstr
    +
    + + +

    Data model for metadata about eCalc model runs.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/stream_conditions.html b/docs/about/references/api/libecalc/common/stream_conditions.html new file mode 100644 index 0000000000..516b7b9106 --- /dev/null +++ b/docs/about/references/api/libecalc/common/stream_conditions.html @@ -0,0 +1,785 @@ + + + + + + + libecalc.common.stream_conditions API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.stream_conditions

    + + + + + + +
      1import operator
    +  2from datetime import datetime
    +  3from functools import reduce
    +  4from typing import List, Optional
    +  5
    +  6from pydantic import BaseModel, ConfigDict
    +  7
    +  8from libecalc.common.string.string_utils import generate_id, to_camel_case
    +  9from libecalc.common.utils.rates import TimeSeriesFloat, TimeSeriesStreamDayRate
    + 10from libecalc.domain.stream_conditions import (
    + 11    Density,
    + 12    Pressure,
    + 13    Rate,  # TODO: import from domain, domain also imports from common
    + 14    StreamConditions,
    + 15    Temperature,
    + 16)
    + 17
    + 18
    + 19class TimeSeriesStreamConditions(BaseModel):
    + 20    model_config = ConfigDict(extra="forbid", alias_generator=to_camel_case, populate_by_name=True)
    + 21
    + 22    id: str
    + 23    name: str
    + 24    rate: Optional[TimeSeriesStreamDayRate] = None
    + 25    pressure: Optional[TimeSeriesFloat] = None
    + 26    temperature: Optional[TimeSeriesFloat] = None
    + 27    fluid_density: Optional[TimeSeriesFloat] = None
    + 28
    + 29    def mix(self, *other_streams: "TimeSeriesStreamConditions") -> "TimeSeriesStreamConditions":
    + 30        """
    + 31        Mix two streams. This needs to be expanded to handle fluids (density, composition, etc.).
    + 32
    + 33        Assuming 'self' sets the target pressure.
    + 34        Args:
    + 35            other_streams: The streams to be mixed in.
    + 36
    + 37        Returns: The mixed stream
    + 38
    + 39        """
    + 40        streams = [self, *other_streams]
    + 41        if any(stream.rate is None for stream in streams):
    + 42            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    + 43            raise ValueError(
    + 44                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    + 45            )
    + 46
    + 47        if any(stream.pressure is None for stream in streams):
    + 48            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    + 49            raise ValueError(
    + 50                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    + 51            )
    + 52
    + 53        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    + 54        if any(stream.pressure < target_pressure for stream in other_streams):  # type: ignore
    + 55            # TODO: return a warning object with the specific timesteps?
    + 56            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    + 57
    + 58        return TimeSeriesStreamConditions(
    + 59            id=generate_id(*[stream.id for stream in streams]),
    + 60            name=f"{'-'.join(stream.name for stream in streams)}",
    + 61            rate=reduce(operator.add, [stream.rate for stream in streams]),
    + 62            pressure=target_pressure,
    + 63            fluid_density=self.fluid_density,  # TODO: Check that they are equal? Or handle it?
    + 64        )
    + 65
    + 66    def for_timestep(self, current_timestep: datetime) -> StreamConditions:
    + 67        """
    + 68        For a given timestep, get the stream that is relevant for that timestep only.
    + 69
    + 70        Args:
    + 71            current_timestep: the timestep must be a part of the global timevector
    + 72
    + 73        Returns: the stream that is relevant for the given timestep.
    + 74
    + 75        """
    + 76        return StreamConditions(
    + 77            id=self.id,
    + 78            name=self.name,
    + 79            timestep=current_timestep,
    + 80            rate=Rate(value=self.rate.for_timestep(current_timestep).values[0], unit=self.rate.unit)
    + 81            if self.rate is not None
    + 82            else None,
    + 83            pressure=Pressure(value=self.pressure.for_timestep(current_timestep).values[0], unit=self.pressure.unit)
    + 84            if self.pressure is not None
    + 85            else None,
    + 86            density=Density(
    + 87                value=self.fluid_density.for_timestep(current_timestep).values[0], unit=self.fluid_density.unit
    + 88            )
    + 89            if self.fluid_density is not None
    + 90            else None,
    + 91            temperature=Temperature(
    + 92                value=self.temperature.for_timestep(current_timestep).values[0], unit=self.temperature.unit
    + 93            )
    + 94            if self.temperature is not None
    + 95            else None,
    + 96        )
    + 97
    + 98    @classmethod
    + 99    def from_stream_condition(cls, stream_conditions: StreamConditions) -> "TimeSeriesStreamConditions":
    +100        return TimeSeriesStreamConditions(
    +101            id=stream_conditions.id,
    +102            name=stream_conditions.name,
    +103            rate=TimeSeriesStreamDayRate(
    +104                timesteps=[stream_conditions.timestep],
    +105                values=[stream_conditions.rate.value],
    +106                unit=stream_conditions.rate.unit,
    +107            ),
    +108            pressure=TimeSeriesFloat(
    +109                timesteps=[stream_conditions.timestep],
    +110                values=[stream_conditions.pressure.value],
    +111                unit=stream_conditions.pressure.unit,
    +112            ),
    +113            temperature=TimeSeriesFloat(
    +114                timesteps=[stream_conditions.timestep],
    +115                values=[stream_conditions.temperature.value],
    +116                unit=stream_conditions.temperature.unit,
    +117            )
    +118            if stream_conditions.temperature is not None
    +119            else None,
    +120            fluid_density=TimeSeriesFloat(
    +121                timesteps=[stream_conditions.timestep],
    +122                values=[stream_conditions.density.value],
    +123                unit=stream_conditions.density.unit,
    +124            )
    +125            if stream_conditions.density is not None
    +126            else None,
    +127        )
    +128
    +129    @classmethod
    +130    def mix_all(cls, streams: List["TimeSeriesStreamConditions"]) -> "TimeSeriesStreamConditions":
    +131        if len(streams) == 0:
    +132            raise ValueError("No streams to mix")
    +133        if len(streams) == 1:
    +134            return streams[0].copy()
    +135
    +136        first, *rest = streams
    +137        return first.copy().mix(*rest)
    +
    + + +
    +
    + +
    + + class + TimeSeriesStreamConditions(pydantic.main.BaseModel): + + + +
    + +
     20class TimeSeriesStreamConditions(BaseModel):
    + 21    model_config = ConfigDict(extra="forbid", alias_generator=to_camel_case, populate_by_name=True)
    + 22
    + 23    id: str
    + 24    name: str
    + 25    rate: Optional[TimeSeriesStreamDayRate] = None
    + 26    pressure: Optional[TimeSeriesFloat] = None
    + 27    temperature: Optional[TimeSeriesFloat] = None
    + 28    fluid_density: Optional[TimeSeriesFloat] = None
    + 29
    + 30    def mix(self, *other_streams: "TimeSeriesStreamConditions") -> "TimeSeriesStreamConditions":
    + 31        """
    + 32        Mix two streams. This needs to be expanded to handle fluids (density, composition, etc.).
    + 33
    + 34        Assuming 'self' sets the target pressure.
    + 35        Args:
    + 36            other_streams: The streams to be mixed in.
    + 37
    + 38        Returns: The mixed stream
    + 39
    + 40        """
    + 41        streams = [self, *other_streams]
    + 42        if any(stream.rate is None for stream in streams):
    + 43            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    + 44            raise ValueError(
    + 45                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    + 46            )
    + 47
    + 48        if any(stream.pressure is None for stream in streams):
    + 49            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    + 50            raise ValueError(
    + 51                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    + 52            )
    + 53
    + 54        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    + 55        if any(stream.pressure < target_pressure for stream in other_streams):  # type: ignore
    + 56            # TODO: return a warning object with the specific timesteps?
    + 57            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    + 58
    + 59        return TimeSeriesStreamConditions(
    + 60            id=generate_id(*[stream.id for stream in streams]),
    + 61            name=f"{'-'.join(stream.name for stream in streams)}",
    + 62            rate=reduce(operator.add, [stream.rate for stream in streams]),
    + 63            pressure=target_pressure,
    + 64            fluid_density=self.fluid_density,  # TODO: Check that they are equal? Or handle it?
    + 65        )
    + 66
    + 67    def for_timestep(self, current_timestep: datetime) -> StreamConditions:
    + 68        """
    + 69        For a given timestep, get the stream that is relevant for that timestep only.
    + 70
    + 71        Args:
    + 72            current_timestep: the timestep must be a part of the global timevector
    + 73
    + 74        Returns: the stream that is relevant for the given timestep.
    + 75
    + 76        """
    + 77        return StreamConditions(
    + 78            id=self.id,
    + 79            name=self.name,
    + 80            timestep=current_timestep,
    + 81            rate=Rate(value=self.rate.for_timestep(current_timestep).values[0], unit=self.rate.unit)
    + 82            if self.rate is not None
    + 83            else None,
    + 84            pressure=Pressure(value=self.pressure.for_timestep(current_timestep).values[0], unit=self.pressure.unit)
    + 85            if self.pressure is not None
    + 86            else None,
    + 87            density=Density(
    + 88                value=self.fluid_density.for_timestep(current_timestep).values[0], unit=self.fluid_density.unit
    + 89            )
    + 90            if self.fluid_density is not None
    + 91            else None,
    + 92            temperature=Temperature(
    + 93                value=self.temperature.for_timestep(current_timestep).values[0], unit=self.temperature.unit
    + 94            )
    + 95            if self.temperature is not None
    + 96            else None,
    + 97        )
    + 98
    + 99    @classmethod
    +100    def from_stream_condition(cls, stream_conditions: StreamConditions) -> "TimeSeriesStreamConditions":
    +101        return TimeSeriesStreamConditions(
    +102            id=stream_conditions.id,
    +103            name=stream_conditions.name,
    +104            rate=TimeSeriesStreamDayRate(
    +105                timesteps=[stream_conditions.timestep],
    +106                values=[stream_conditions.rate.value],
    +107                unit=stream_conditions.rate.unit,
    +108            ),
    +109            pressure=TimeSeriesFloat(
    +110                timesteps=[stream_conditions.timestep],
    +111                values=[stream_conditions.pressure.value],
    +112                unit=stream_conditions.pressure.unit,
    +113            ),
    +114            temperature=TimeSeriesFloat(
    +115                timesteps=[stream_conditions.timestep],
    +116                values=[stream_conditions.temperature.value],
    +117                unit=stream_conditions.temperature.unit,
    +118            )
    +119            if stream_conditions.temperature is not None
    +120            else None,
    +121            fluid_density=TimeSeriesFloat(
    +122                timesteps=[stream_conditions.timestep],
    +123                values=[stream_conditions.density.value],
    +124                unit=stream_conditions.density.unit,
    +125            )
    +126            if stream_conditions.density is not None
    +127            else None,
    +128        )
    +129
    +130    @classmethod
    +131    def mix_all(cls, streams: List["TimeSeriesStreamConditions"]) -> "TimeSeriesStreamConditions":
    +132        if len(streams) == 0:
    +133            raise ValueError("No streams to mix")
    +134        if len(streams) == 1:
    +135            return streams[0].copy()
    +136
    +137        first, *rest = streams
    +138        return first.copy().mix(*rest)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + + + +
    30    def mix(self, *other_streams: "TimeSeriesStreamConditions") -> "TimeSeriesStreamConditions":
    +31        """
    +32        Mix two streams. This needs to be expanded to handle fluids (density, composition, etc.).
    +33
    +34        Assuming 'self' sets the target pressure.
    +35        Args:
    +36            other_streams: The streams to be mixed in.
    +37
    +38        Returns: The mixed stream
    +39
    +40        """
    +41        streams = [self, *other_streams]
    +42        if any(stream.rate is None for stream in streams):
    +43            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    +44            raise ValueError(
    +45                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    +46            )
    +47
    +48        if any(stream.pressure is None for stream in streams):
    +49            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    +50            raise ValueError(
    +51                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    +52            )
    +53
    +54        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    +55        if any(stream.pressure < target_pressure for stream in other_streams):  # type: ignore
    +56            # TODO: return a warning object with the specific timesteps?
    +57            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    +58
    +59        return TimeSeriesStreamConditions(
    +60            id=generate_id(*[stream.id for stream in streams]),
    +61            name=f"{'-'.join(stream.name for stream in streams)}",
    +62            rate=reduce(operator.add, [stream.rate for stream in streams]),
    +63            pressure=target_pressure,
    +64            fluid_density=self.fluid_density,  # TODO: Check that they are equal? Or handle it?
    +65        )
    +
    + + +

    Mix two streams. This needs to be expanded to handle fluids (density, composition, etc.).

    + +

    Assuming 'self' sets the target pressure. +Args: + other_streams: The streams to be mixed in.

    + +

    Returns: The mixed stream

    +
    + + +
    +
    + +
    + + def + for_timestep( self, current_timestep: datetime.datetime) -> libecalc.domain.stream_conditions.StreamConditions: + + + +
    + +
    67    def for_timestep(self, current_timestep: datetime) -> StreamConditions:
    +68        """
    +69        For a given timestep, get the stream that is relevant for that timestep only.
    +70
    +71        Args:
    +72            current_timestep: the timestep must be a part of the global timevector
    +73
    +74        Returns: the stream that is relevant for the given timestep.
    +75
    +76        """
    +77        return StreamConditions(
    +78            id=self.id,
    +79            name=self.name,
    +80            timestep=current_timestep,
    +81            rate=Rate(value=self.rate.for_timestep(current_timestep).values[0], unit=self.rate.unit)
    +82            if self.rate is not None
    +83            else None,
    +84            pressure=Pressure(value=self.pressure.for_timestep(current_timestep).values[0], unit=self.pressure.unit)
    +85            if self.pressure is not None
    +86            else None,
    +87            density=Density(
    +88                value=self.fluid_density.for_timestep(current_timestep).values[0], unit=self.fluid_density.unit
    +89            )
    +90            if self.fluid_density is not None
    +91            else None,
    +92            temperature=Temperature(
    +93                value=self.temperature.for_timestep(current_timestep).values[0], unit=self.temperature.unit
    +94            )
    +95            if self.temperature is not None
    +96            else None,
    +97        )
    +
    + + +

    For a given timestep, get the stream that is relevant for that timestep only.

    + +

    Args: + current_timestep: the timestep must be a part of the global timevector

    + +

    Returns: the stream that is relevant for the given timestep.

    +
    + + +
    +
    + +
    +
    @classmethod
    + + def + from_stream_condition( cls, stream_conditions: libecalc.domain.stream_conditions.StreamConditions) -> libecalc.common.stream_conditions.TimeSeriesStreamConditions: + + + +
    + +
     99    @classmethod
    +100    def from_stream_condition(cls, stream_conditions: StreamConditions) -> "TimeSeriesStreamConditions":
    +101        return TimeSeriesStreamConditions(
    +102            id=stream_conditions.id,
    +103            name=stream_conditions.name,
    +104            rate=TimeSeriesStreamDayRate(
    +105                timesteps=[stream_conditions.timestep],
    +106                values=[stream_conditions.rate.value],
    +107                unit=stream_conditions.rate.unit,
    +108            ),
    +109            pressure=TimeSeriesFloat(
    +110                timesteps=[stream_conditions.timestep],
    +111                values=[stream_conditions.pressure.value],
    +112                unit=stream_conditions.pressure.unit,
    +113            ),
    +114            temperature=TimeSeriesFloat(
    +115                timesteps=[stream_conditions.timestep],
    +116                values=[stream_conditions.temperature.value],
    +117                unit=stream_conditions.temperature.unit,
    +118            )
    +119            if stream_conditions.temperature is not None
    +120            else None,
    +121            fluid_density=TimeSeriesFloat(
    +122                timesteps=[stream_conditions.timestep],
    +123                values=[stream_conditions.density.value],
    +124                unit=stream_conditions.density.unit,
    +125            )
    +126            if stream_conditions.density is not None
    +127            else None,
    +128        )
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + mix_all( cls, streams: list[libecalc.common.stream_conditions.TimeSeriesStreamConditions]) -> libecalc.common.stream_conditions.TimeSeriesStreamConditions: + + + +
    + +
    130    @classmethod
    +131    def mix_all(cls, streams: List["TimeSeriesStreamConditions"]) -> "TimeSeriesStreamConditions":
    +132        if len(streams) == 0:
    +133            raise ValueError("No streams to mix")
    +134        if len(streams) == 1:
    +135            return streams[0].copy()
    +136
    +137        first, *rest = streams
    +138        return first.copy().mix(*rest)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/string.html b/docs/about/references/api/libecalc/common/string.html new file mode 100644 index 0000000000..a71c2e7382 --- /dev/null +++ b/docs/about/references/api/libecalc/common/string.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.common.string API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.string

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/string/string_utils.html b/docs/about/references/api/libecalc/common/string/string_utils.html new file mode 100644 index 0000000000..2a09b8ed67 --- /dev/null +++ b/docs/about/references/api/libecalc/common/string/string_utils.html @@ -0,0 +1,396 @@ + + + + + + + libecalc.common.string.string_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.string.string_utils

    + + + + + + +
     1from typing import Iterable, Set
    + 2
    + 3
    + 4def get_duplicates(names: Iterable[str]) -> Set[str]:
    + 5    seen = set()
    + 6    duplicates = set()
    + 7    for name in names:
    + 8        if name in seen:
    + 9            duplicates.add(name)
    +10        else:
    +11            seen.add(name)
    +12    return duplicates
    +13
    +14
    +15def generate_id(*args: str) -> str:
    +16    """
    +17    Deprecated: When names were not unique, this was necessary in order to make names unique based on context/hierarchy. Now names should
    +18    be unique for any part of the eCalc model that supports names, and it should therefore not be needed any more.
    +19
    +20    TODO: First step is to make the function return the string as normal, next step is to remove it altogether.
    +21
    +22    Generate an id from one or more strings. The string is encoded to avoid it being used to get other info than
    +23    the id, i.e. it should not be used to get the name of a consumer, even if the name might be used to create the id.
    +24
    +25    If there are many strings they are joined together.
    +26    """
    +27    return "-".join(args)
    +28
    +29
    +30def to_camel_case(string: str) -> str:
    +31    """Convert string from snake_case to camelCase
    +32
    +33    Args:
    +34        string: String in snake_case format
    +35
    +36    Returns:
    +37        String in camelCase format
    +38
    +39    """
    +40    string_split = string.replace("__", "_").split("_")
    +41    string_split = [word for word in string_split if len(word) > 0]  # Allow names such as 'from_'
    +42    return string_split[0] + "".join(word[0].upper() + word[1:] for word in string_split[1:])
    +
    + + +
    +
    + +
    + + def + get_duplicates(names: Iterable[str]) -> Set[str]: + + + +
    + +
     5def get_duplicates(names: Iterable[str]) -> Set[str]:
    + 6    seen = set()
    + 7    duplicates = set()
    + 8    for name in names:
    + 9        if name in seen:
    +10            duplicates.add(name)
    +11        else:
    +12            seen.add(name)
    +13    return duplicates
    +
    + + + + +
    +
    + +
    + + def + generate_id(*args: str) -> str: + + + +
    + +
    16def generate_id(*args: str) -> str:
    +17    """
    +18    Deprecated: When names were not unique, this was necessary in order to make names unique based on context/hierarchy. Now names should
    +19    be unique for any part of the eCalc model that supports names, and it should therefore not be needed any more.
    +20
    +21    TODO: First step is to make the function return the string as normal, next step is to remove it altogether.
    +22
    +23    Generate an id from one or more strings. The string is encoded to avoid it being used to get other info than
    +24    the id, i.e. it should not be used to get the name of a consumer, even if the name might be used to create the id.
    +25
    +26    If there are many strings they are joined together.
    +27    """
    +28    return "-".join(args)
    +
    + + +

    Deprecated: When names were not unique, this was necessary in order to make names unique based on context/hierarchy. Now names should +be unique for any part of the eCalc model that supports names, and it should therefore not be needed any more.

    + +

    TODO: First step is to make the function return the string as normal, next step is to remove it altogether.

    + +

    Generate an id from one or more strings. The string is encoded to avoid it being used to get other info than +the id, i.e. it should not be used to get the name of a consumer, even if the name might be used to create the id.

    + +

    If there are many strings they are joined together.

    +
    + + +
    +
    + +
    + + def + to_camel_case(string: str) -> str: + + + +
    + +
    31def to_camel_case(string: str) -> str:
    +32    """Convert string from snake_case to camelCase
    +33
    +34    Args:
    +35        string: String in snake_case format
    +36
    +37    Returns:
    +38        String in camelCase format
    +39
    +40    """
    +41    string_split = string.replace("__", "_").split("_")
    +42    string_split = [word for word in string_split if len(word) > 0]  # Allow names such as 'from_'
    +43    return string_split[0] + "".join(word[0].upper() + word[1:] for word in string_split[1:])
    +
    + + +

    Convert string from snake_case to camelCase

    + +

    Args: + string: String in snake_case format

    + +

    Returns: + String in camelCase format

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/tabular_time_series.html b/docs/about/references/api/libecalc/common/tabular_time_series.html new file mode 100644 index 0000000000..0f76000335 --- /dev/null +++ b/docs/about/references/api/libecalc/common/tabular_time_series.html @@ -0,0 +1,612 @@ + + + + + + + libecalc.common.tabular_time_series API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.tabular_time_series

    + + + + + + +
     1import itertools
    + 2from typing import Protocol, TypeVar
    + 3
    + 4from pydantic import BaseModel
    + 5from typing_extensions import Self
    + 6
    + 7from libecalc.common.list.list_utils import transpose
    + 8from libecalc.common.utils.rates import TimeSeries
    + 9
    +10
    +11class TabularTimeSeries(Protocol):
    +12    def model_copy(self, deep: bool = False) -> Self:
    +13        """
    +14        Duplicate a model
    +15        Args:
    +16            deep: set to `True` to make a deep copy of the model
    +17
    +18        Returns: new model instance
    +19
    +20        """
    +21        ...
    +22
    +23
    +24ObjectWithTimeSeries = TypeVar("ObjectWithTimeSeries", bound=TabularTimeSeries)
    +25
    +26
    +27class TabularTimeSeriesUtils:
    +28    """
    +29    Utility functions for objects containing TimeSeries
    +30    """
    +31
    +32    @classmethod
    +33    def merge(cls, *objects_with_time_series: ObjectWithTimeSeries):
    +34        """
    +35        Merge objects containing TimeSeries. Other attributes will be copied from the first object.
    +36        Args:
    +37            *objects_with_time_series: list of objects to merge
    +38
    +39        Returns: a merged object of the same type
    +40
    +41        """
    +42        # Verify that we are merging the same types
    +43        if len({type(object_with_time_series) for object_with_time_series in objects_with_time_series}) != 1:
    +44            raise ValueError("Can not merge objects of differing types.")
    +45
    +46        first, *others = objects_with_time_series
    +47        merged_object = first.model_copy(deep=True)
    +48
    +49        for key, value in first.__dict__.items():
    +50            for other in others:
    +51                accumulated_value = merged_object.__getattribute__(key)
    +52                other_value = other.__getattribute__(key)
    +53                if key == "timesteps":
    +54                    merged_timesteps = sorted(itertools.chain(accumulated_value, other_value))
    +55                    merged_object.__setattr__(key, merged_timesteps)
    +56                elif isinstance(value, TimeSeries):
    +57                    merged_object.__setattr__(key, accumulated_value.merge(other_value))
    +58                elif isinstance(value, BaseModel):
    +59                    merged_object.__setattr__(
    +60                        key, cls.merge(*[obj.__getattribute__(key) for obj in objects_with_time_series])
    +61                    )
    +62                elif (
    +63                    isinstance(value, list)
    +64                    and len(value) > 0
    +65                    and (isinstance(value[0], TimeSeries) or isinstance(value[0], BaseModel))
    +66                ):
    +67                    list_attributes = [obj.__getattribute__(key) for obj in objects_with_time_series]
    +68                    transposed_list_attributes = transpose(list_attributes)
    +69                    merged_list_attributes = []
    +70                    if isinstance(value[0], TimeSeries):
    +71                        for time_series_to_merge in transposed_list_attributes:
    +72                            first_time_series, *others_time_series = time_series_to_merge
    +73                            merged_time_series = first_time_series
    +74                            for other_time_series in others_time_series:
    +75                                merged_time_series = merged_time_series.merge(other_time_series)
    +76                            merged_list_attributes.append(merged_time_series)
    +77                    elif isinstance(value[0], BaseModel):
    +78                        merged_list_attributes = [
    +79                            cls.merge(*objs_to_merge) for objs_to_merge in transposed_list_attributes
    +80                        ]
    +81
    +82                    merged_object.__setattr__(key, merged_list_attributes)
    +83
    +84        return merged_object
    +
    + + +
    +
    + +
    + + class + TabularTimeSeries(typing.Protocol): + + + +
    + +
    12class TabularTimeSeries(Protocol):
    +13    def model_copy(self, deep: bool = False) -> Self:
    +14        """
    +15        Duplicate a model
    +16        Args:
    +17            deep: set to `True` to make a deep copy of the model
    +18
    +19        Returns: new model instance
    +20
    +21        """
    +22        ...
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + TabularTimeSeries(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    + +
    + + def + model_copy(self, deep: bool = False) -> typing_extensions.Self: + + + +
    + +
    13    def model_copy(self, deep: bool = False) -> Self:
    +14        """
    +15        Duplicate a model
    +16        Args:
    +17            deep: set to `True` to make a deep copy of the model
    +18
    +19        Returns: new model instance
    +20
    +21        """
    +22        ...
    +
    + + +

    Duplicate a model +Args: + deep: set to True to make a deep copy of the model

    + +

    Returns: new model instance

    +
    + + +
    +
    +
    + +
    + + class + TabularTimeSeriesUtils: + + + +
    + +
    28class TabularTimeSeriesUtils:
    +29    """
    +30    Utility functions for objects containing TimeSeries
    +31    """
    +32
    +33    @classmethod
    +34    def merge(cls, *objects_with_time_series: ObjectWithTimeSeries):
    +35        """
    +36        Merge objects containing TimeSeries. Other attributes will be copied from the first object.
    +37        Args:
    +38            *objects_with_time_series: list of objects to merge
    +39
    +40        Returns: a merged object of the same type
    +41
    +42        """
    +43        # Verify that we are merging the same types
    +44        if len({type(object_with_time_series) for object_with_time_series in objects_with_time_series}) != 1:
    +45            raise ValueError("Can not merge objects of differing types.")
    +46
    +47        first, *others = objects_with_time_series
    +48        merged_object = first.model_copy(deep=True)
    +49
    +50        for key, value in first.__dict__.items():
    +51            for other in others:
    +52                accumulated_value = merged_object.__getattribute__(key)
    +53                other_value = other.__getattribute__(key)
    +54                if key == "timesteps":
    +55                    merged_timesteps = sorted(itertools.chain(accumulated_value, other_value))
    +56                    merged_object.__setattr__(key, merged_timesteps)
    +57                elif isinstance(value, TimeSeries):
    +58                    merged_object.__setattr__(key, accumulated_value.merge(other_value))
    +59                elif isinstance(value, BaseModel):
    +60                    merged_object.__setattr__(
    +61                        key, cls.merge(*[obj.__getattribute__(key) for obj in objects_with_time_series])
    +62                    )
    +63                elif (
    +64                    isinstance(value, list)
    +65                    and len(value) > 0
    +66                    and (isinstance(value[0], TimeSeries) or isinstance(value[0], BaseModel))
    +67                ):
    +68                    list_attributes = [obj.__getattribute__(key) for obj in objects_with_time_series]
    +69                    transposed_list_attributes = transpose(list_attributes)
    +70                    merged_list_attributes = []
    +71                    if isinstance(value[0], TimeSeries):
    +72                        for time_series_to_merge in transposed_list_attributes:
    +73                            first_time_series, *others_time_series = time_series_to_merge
    +74                            merged_time_series = first_time_series
    +75                            for other_time_series in others_time_series:
    +76                                merged_time_series = merged_time_series.merge(other_time_series)
    +77                            merged_list_attributes.append(merged_time_series)
    +78                    elif isinstance(value[0], BaseModel):
    +79                        merged_list_attributes = [
    +80                            cls.merge(*objs_to_merge) for objs_to_merge in transposed_list_attributes
    +81                        ]
    +82
    +83                    merged_object.__setattr__(key, merged_list_attributes)
    +84
    +85        return merged_object
    +
    + + +

    Utility functions for objects containing TimeSeries

    +
    + + +
    + +
    +
    @classmethod
    + + def + merge(cls, *objects_with_time_series: ~ObjectWithTimeSeries): + + + +
    + +
    33    @classmethod
    +34    def merge(cls, *objects_with_time_series: ObjectWithTimeSeries):
    +35        """
    +36        Merge objects containing TimeSeries. Other attributes will be copied from the first object.
    +37        Args:
    +38            *objects_with_time_series: list of objects to merge
    +39
    +40        Returns: a merged object of the same type
    +41
    +42        """
    +43        # Verify that we are merging the same types
    +44        if len({type(object_with_time_series) for object_with_time_series in objects_with_time_series}) != 1:
    +45            raise ValueError("Can not merge objects of differing types.")
    +46
    +47        first, *others = objects_with_time_series
    +48        merged_object = first.model_copy(deep=True)
    +49
    +50        for key, value in first.__dict__.items():
    +51            for other in others:
    +52                accumulated_value = merged_object.__getattribute__(key)
    +53                other_value = other.__getattribute__(key)
    +54                if key == "timesteps":
    +55                    merged_timesteps = sorted(itertools.chain(accumulated_value, other_value))
    +56                    merged_object.__setattr__(key, merged_timesteps)
    +57                elif isinstance(value, TimeSeries):
    +58                    merged_object.__setattr__(key, accumulated_value.merge(other_value))
    +59                elif isinstance(value, BaseModel):
    +60                    merged_object.__setattr__(
    +61                        key, cls.merge(*[obj.__getattribute__(key) for obj in objects_with_time_series])
    +62                    )
    +63                elif (
    +64                    isinstance(value, list)
    +65                    and len(value) > 0
    +66                    and (isinstance(value[0], TimeSeries) or isinstance(value[0], BaseModel))
    +67                ):
    +68                    list_attributes = [obj.__getattribute__(key) for obj in objects_with_time_series]
    +69                    transposed_list_attributes = transpose(list_attributes)
    +70                    merged_list_attributes = []
    +71                    if isinstance(value[0], TimeSeries):
    +72                        for time_series_to_merge in transposed_list_attributes:
    +73                            first_time_series, *others_time_series = time_series_to_merge
    +74                            merged_time_series = first_time_series
    +75                            for other_time_series in others_time_series:
    +76                                merged_time_series = merged_time_series.merge(other_time_series)
    +77                            merged_list_attributes.append(merged_time_series)
    +78                    elif isinstance(value[0], BaseModel):
    +79                        merged_list_attributes = [
    +80                            cls.merge(*objs_to_merge) for objs_to_merge in transposed_list_attributes
    +81                        ]
    +82
    +83                    merged_object.__setattr__(key, merged_list_attributes)
    +84
    +85        return merged_object
    +
    + + +

    Merge objects containing TimeSeries. Other attributes will be copied from the first object. +Args: + *objects_with_time_series: list of objects to merge

    + +

    Returns: a merged object of the same type

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/temporal_model.html b/docs/about/references/api/libecalc/common/temporal_model.html new file mode 100644 index 0000000000..5f01537ca1 --- /dev/null +++ b/docs/about/references/api/libecalc/common/temporal_model.html @@ -0,0 +1,559 @@ + + + + + + + libecalc.common.temporal_model API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.temporal_model

    + + + + + + +
     1from dataclasses import dataclass
    + 2from datetime import datetime
    + 3from typing import Dict, Generic, Iterator, List, Tuple, TypeVar
    + 4
    + 5from libecalc.common.time_utils import Period
    + 6from libecalc.dto.variables import VariablesMap
    + 7from libecalc.expression import Expression
    + 8
    + 9ModelType = TypeVar("ModelType")
    +10
    +11
    +12@dataclass
    +13class Model(Generic[ModelType]):
    +14    period: Period
    +15    model: ModelType
    +16
    +17
    +18class TemporalModel(Generic[ModelType]):
    +19    def __init__(self, data: Dict[datetime, ModelType]):
    +20        self._data = data
    +21        start_times = list(data.keys())
    +22        end_times = [*start_times[1:], datetime.max]
    +23        self.models = [
    +24            Model(
    +25                period=Period(start=start_time, end=end_time),
    +26                model=model,
    +27            )
    +28            for start_time, end_time, model in zip(start_times, end_times, data.values())
    +29        ]
    +30
    +31    def items(self) -> Iterator[Tuple[Period, ModelType]]:
    +32        return ((model.period, model.model) for model in self.models)
    +33
    +34    def get_model(self, timestep: datetime) -> ModelType:
    +35        for model in self.models:
    +36            if timestep in model.period:
    +37                return model.model
    +38
    +39        raise ValueError(f"Model for timestep '{timestep}' not found in Temporal model")
    +40
    +41
    +42class TemporalExpression:
    +43    @staticmethod
    +44    def evaluate(
    +45        temporal_expression: TemporalModel[Expression],
    +46        variables_map: VariablesMap,
    +47    ) -> List[float]:
    +48        result = variables_map.zeros()
    +49        for period, expression in temporal_expression.items():
    +50            if Period.intersects(period, variables_map.period):
    +51                start_index, end_index = period.get_timestep_indices(variables_map.time_vector)
    +52                variables_map_for_this_period = variables_map.get_subset(start_index=start_index, end_index=end_index)
    +53                evaluated_expression = expression.evaluate(
    +54                    variables=variables_map_for_this_period.variables,
    +55                    fill_length=len(variables_map_for_this_period.time_vector),
    +56                )
    +57                result[start_index:end_index] = evaluated_expression
    +58        return result
    +
    + + +
    +
    + +
    + + class + Model(typing.Generic[~ModelType]): + + + +
    + +
    14class Model(Generic[ModelType]):
    +15    period: Period
    +16    model: ModelType
    +
    + + + + +
    +
    + + Model(period: libecalc.common.time_utils.Period, model: ~ModelType) + + +
    + + + + +
    +
    +
    + +
    + + class + TemporalModel(typing.Generic[~ModelType]): + + + +
    + +
    19class TemporalModel(Generic[ModelType]):
    +20    def __init__(self, data: Dict[datetime, ModelType]):
    +21        self._data = data
    +22        start_times = list(data.keys())
    +23        end_times = [*start_times[1:], datetime.max]
    +24        self.models = [
    +25            Model(
    +26                period=Period(start=start_time, end=end_time),
    +27                model=model,
    +28            )
    +29            for start_time, end_time, model in zip(start_times, end_times, data.values())
    +30        ]
    +31
    +32    def items(self) -> Iterator[Tuple[Period, ModelType]]:
    +33        return ((model.period, model.model) for model in self.models)
    +34
    +35    def get_model(self, timestep: datetime) -> ModelType:
    +36        for model in self.models:
    +37            if timestep in model.period:
    +38                return model.model
    +39
    +40        raise ValueError(f"Model for timestep '{timestep}' not found in Temporal model")
    +
    + + +

    Abstract base class for generic types.

    + +

    A generic type is typically declared by inheriting from +this class parameterized with one or more type variables. +For example, a generic mapping type might be defined as::

    + +

    class Mapping(Generic[KT, VT]): + def __getitem__(self, key: KT) -> VT: + ... + # Etc.

    + +

    This class can then be used as follows::

    + +

    def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: + try: + return mapping[key] + except KeyError: + return default

    +
    + + +
    + +
    + + TemporalModel(data: Dict[datetime.datetime, ~ModelType]) + + + +
    + +
    20    def __init__(self, data: Dict[datetime, ModelType]):
    +21        self._data = data
    +22        start_times = list(data.keys())
    +23        end_times = [*start_times[1:], datetime.max]
    +24        self.models = [
    +25            Model(
    +26                period=Period(start=start_time, end=end_time),
    +27                model=model,
    +28            )
    +29            for start_time, end_time, model in zip(start_times, end_times, data.values())
    +30        ]
    +
    + + + + +
    +
    + +
    + + def + items(self) -> Iterator[Tuple[libecalc.common.time_utils.Period, ~ModelType]]: + + + +
    + +
    32    def items(self) -> Iterator[Tuple[Period, ModelType]]:
    +33        return ((model.period, model.model) for model in self.models)
    +
    + + + + +
    +
    + +
    + + def + get_model(self, timestep: datetime.datetime) -> ~ModelType: + + + +
    + +
    35    def get_model(self, timestep: datetime) -> ModelType:
    +36        for model in self.models:
    +37            if timestep in model.period:
    +38                return model.model
    +39
    +40        raise ValueError(f"Model for timestep '{timestep}' not found in Temporal model")
    +
    + + + + +
    +
    +
    + +
    + + class + TemporalExpression: + + + +
    + +
    43class TemporalExpression:
    +44    @staticmethod
    +45    def evaluate(
    +46        temporal_expression: TemporalModel[Expression],
    +47        variables_map: VariablesMap,
    +48    ) -> List[float]:
    +49        result = variables_map.zeros()
    +50        for period, expression in temporal_expression.items():
    +51            if Period.intersects(period, variables_map.period):
    +52                start_index, end_index = period.get_timestep_indices(variables_map.time_vector)
    +53                variables_map_for_this_period = variables_map.get_subset(start_index=start_index, end_index=end_index)
    +54                evaluated_expression = expression.evaluate(
    +55                    variables=variables_map_for_this_period.variables,
    +56                    fill_length=len(variables_map_for_this_period.time_vector),
    +57                )
    +58                result[start_index:end_index] = evaluated_expression
    +59        return result
    +
    + + + + +
    + +
    +
    @staticmethod
    + + def + evaluate( temporal_expression: libecalc.common.temporal_model.TemporalModel[libecalc.expression.expression.Expression], variables_map: libecalc.dto.variables.VariablesMap) -> List[float]: + + + +
    + +
    44    @staticmethod
    +45    def evaluate(
    +46        temporal_expression: TemporalModel[Expression],
    +47        variables_map: VariablesMap,
    +48    ) -> List[float]:
    +49        result = variables_map.zeros()
    +50        for period, expression in temporal_expression.items():
    +51            if Period.intersects(period, variables_map.period):
    +52                start_index, end_index = period.get_timestep_indices(variables_map.time_vector)
    +53                variables_map_for_this_period = variables_map.get_subset(start_index=start_index, end_index=end_index)
    +54                evaluated_expression = expression.evaluate(
    +55                    variables=variables_map_for_this_period.variables,
    +56                    fill_length=len(variables_map_for_this_period.time_vector),
    +57                )
    +58                result[start_index:end_index] = evaluated_expression
    +59        return result
    +
    + + + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/time_utils.html b/docs/about/references/api/libecalc/common/time_utils.html new file mode 100644 index 0000000000..c0c2d40a6e --- /dev/null +++ b/docs/about/references/api/libecalc/common/time_utils.html @@ -0,0 +1,1388 @@ + + + + + + + libecalc.common.time_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.time_utils

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3import enum
    +  4from dataclasses import dataclass
    +  5from datetime import date, datetime, timedelta
    +  6from typing import Any, Dict, List, Optional, Tuple, Union
    +  7
    +  8import numpy as np
    +  9import pandas as pd
    + 10from numpy.typing import ArrayLike, NDArray
    + 11
    + 12from libecalc.common.errors.exceptions import EcalcError, ProgrammingError
    + 13from libecalc.common.units import UnitConstants
    + 14
    + 15
    + 16def calculate_delta_days(time_vector: ArrayLike) -> NDArray[np.float64]:
    + 17    return np.array([x.total_seconds() / UnitConstants.SECONDS_IN_A_DAY for x in np.diff(time_vector)])
    + 18
    + 19
    + 20@dataclass
    + 21class Period:
    + 22    start: datetime = datetime.min
    + 23    end: datetime = datetime.max
    + 24
    + 25    def __str__(self) -> str:
    + 26        return f"{self.start}:{self.end}"
    + 27
    + 28    def __contains__(self, time: datetime) -> bool:
    + 29        """
    + 30        A period of time is defined as [start, end>,
    + 31        ie inclusive start and exclusive end.
    + 32
    + 33        Args:
    + 34            time:
    + 35
    + 36        Returns:
    + 37
    + 38        """
    + 39        return self.start <= time < self.end
    + 40
    + 41    @staticmethod
    + 42    def intersects(first: Period, second: Period) -> bool:
    + 43        """
    + 44        Args:
    + 45            first:
    + 46            second:
    + 47
    + 48        Returns:
    + 49
    + 50        """
    + 51        return first.start in second or second.start in first
    + 52
    + 53    def get_timestep_indices(self, timesteps: List[datetime]) -> Tuple[int, int]:
    + 54        try:
    + 55            start_index = timesteps.index(max(self.start, timesteps[0]))
    + 56            if self.end > timesteps[-1]:
    + 57                end_index = len(timesteps) + 1
    + 58            else:
    + 59                end_index = timesteps.index(self.end)
    + 60
    + 61            return start_index, end_index
    + 62        except (IndexError, ValueError) as e:
    + 63            raise ProgrammingError(
    + 64                "Trying to access a timestep index that does not exist. Please contact eCalc support.\n\t"
    + 65                f"Period: {self.start}:{self.end} - timesteps: {timesteps}"
    + 66            ) from e
    + 67
    + 68
    + 69@dataclass
    + 70class Periods:
    + 71    periods: List[Period]
    + 72
    + 73    @classmethod
    + 74    def create_periods(cls, times: List[datetime], include_before: bool = True, include_after: bool = True) -> Periods:
    + 75        """
    + 76        Create periods from the provided datetimes
    + 77        :param times: the datetimes to create periods from
    + 78        :param include_before: whether to add a period that ends with the first provided datetime, i.e. define a period
    + 79        before the earliest provided datetime.
    + 80        :param include_after: whether to add a period that starts with the last provided datetime, i.e. define a period
    + 81        after the latest provided datetime.
    + 82        :return:
    + 83        """
    + 84        if len(times) == 0:
    + 85            return cls([])
    + 86
    + 87        periods = []
    + 88
    + 89        if include_before:
    + 90            periods.append(
    + 91                Period(
    + 92                    end=times[0],
    + 93                )
    + 94            )
    + 95
    + 96        periods.extend([Period(start=times[index], end=times[index + 1]) for index in range(len(times) - 1)])
    + 97
    + 98        if include_after:
    + 99            periods.append(Period(start=times[-1]))
    +100
    +101        return cls(periods)
    +102
    +103    def __iter__(self):
    +104        return self.periods.__iter__()
    +105
    +106    def get_period(self, time: datetime) -> Period:
    +107        for period in self.periods:
    +108            if time in period:
    +109                return period
    +110
    +111        raise ProgrammingError(f"Period for date '{time}' not found in periods")
    +112
    +113
    +114def define_time_model_for_period(
    +115    time_model_data: Optional[Any], target_period: Period
    +116) -> Optional[Dict[datetime, Any]]:
    +117    """Process time model based on the target period.
    +118
    +119    Steps:
    +120        - Add a default start date if the model is not already a time model
    +121        - Filter definitions outside given time period
    +122        - Adjust start_date of the first model to the period
    +123    :param time_model_data: a model that can vary based on time,
    +124        i.e. {1900.01.01: some model, 1950.01.01: some other model}
    +125    :param target_period: period for which a model is defined (START,END specified by user or default to everything)
    +126    :return: the time model for the target period
    +127    """
    +128    if time_model_data is None:
    +129        return None
    +130
    +131    # Make sure the model is a time model
    +132    time_model_data = default_temporal_model(time_model_data, default_start=target_period.start)
    +133
    +134    model_periods = Periods.create_periods(list(time_model_data.keys()), include_before=False)
    +135
    +136    return {
    +137        max(model_period.start, target_period.start): model
    +138        for model_period, model in zip(model_periods.periods, time_model_data.values())
    +139        if Period.intersects(model_period, target_period)
    +140    }
    +141
    +142
    +143class Frequency(str, enum.Enum):
    +144    """Represents frequency/resolution of output data
    +145    Using the offset aliases from pandas
    +146    YS: year start
    +147    MS: month start
    +148    D: calendar day.
    +149    """
    +150
    +151    NONE = None
    +152    YEAR = "YS"
    +153    MONTH = "MS"
    +154    DAY = "D"
    +155
    +156    def formatstring(self) -> str:
    +157        """The format to write a string describing a certain period of time."""
    +158        if self.value == "YS":
    +159            return "%Y"
    +160        elif self.value == "MS":
    +161            return "%m/%Y"
    +162        else:
    +163            return "%d/%m/%Y"
    +164
    +165
    +166def resample_time_steps(
    +167    time_steps: List[datetime],
    +168    frequency: Frequency,
    +169    include_start_date: bool = True,
    +170    include_end_date: bool = True,
    +171) -> List[datetime]:
    +172    """Makes a time vector, based on the first and last date in time_vector and the frequency
    +173
    +174    Args:
    +175        time_steps: The original time vector
    +176        frequency: The reporting frequency
    +177        include_start_date: Whether to include the start date if it is not part of the requested reporting frequency
    +178        include_end_date: Whether to include the end date if it is not part of the requested reporting frequency
    +179
    +180    Returns: Time vector with dates according to given input
    +181
    +182    """
    +183    if frequency is not Frequency.NONE:
    +184        time_step_vector = create_time_steps(
    +185            start=time_steps[0],
    +186            end=time_steps[-1],
    +187            frequency=frequency,
    +188            include_start_date=include_start_date,
    +189            include_end_date=include_end_date,
    +190        )
    +191    else:
    +192        time_step_vector = time_steps
    +193
    +194    return time_step_vector
    +195
    +196
    +197def create_time_steps(
    +198    frequency: Frequency, start: datetime, end: datetime, include_start_date: bool, include_end_date: bool
    +199) -> List[datetime]:
    +200    """
    +201
    +202    Args:
    +203        frequency: The requested frequency
    +204        start: The start date
    +205        end: The end date
    +206        include_start_date: Whether to include the start date if it is not part of the requested frequency
    +207        include_end_date:  Whether to include the end date if it is not part of the requested frequency
    +208
    +209    Returns:
    +210        A list of dates (and possibly including the start/end dates) between the given start and end dates following
    +211        the requested frequency
    +212
    +213    """
    +214    # If the start date or end date is part of the date_range made by the frequency, the returned date range will
    +215    # always include the start and end date (no matter what the include_start_date and include_end_date booleans are).
    +216    # To avoid this add one day to start and subtract one day from end.
    +217    date_range = pd.date_range(start=start + timedelta(days=1), end=end - timedelta(days=1), freq=frequency.value)
    +218
    +219    time_steps = [clear_time(time_step) for time_step in date_range]
    +220    if include_start_date:
    +221        time_steps = [clear_time(start)] + time_steps
    +222    if include_end_date:
    +223        time_steps = [clear_time(end)] + time_steps
    +224
    +225    return sorted(set(time_steps))
    +226
    +227
    +228def clear_time(d: datetime) -> datetime:
    +229    return datetime.combine(d.date(), datetime.min.time())
    +230
    +231
    +232def is_temporal_model(data: Dict) -> bool:
    +233    if isinstance(data, dict):
    +234        is_date = []
    +235        is_not_date_keys = []
    +236        for key in data:
    +237            if isinstance(key, date):
    +238                is_date.append(True)
    +239            else:
    +240                try:
    +241                    datetime.strptime(key, "%Y-%m-%dT%H:%M:%S")
    +242                    is_date.append(True)
    +243                except (TypeError, ValueError):
    +244                    is_not_date_keys.append(str(key))
    +245                    is_date.append(False)
    +246        if any(is_date):
    +247            if not all(is_date):
    +248                raise EcalcError(
    +249                    title="Invalid model",
    +250                    message="Temporal models should only contain date keys. "
    +251                    f"Invalid date(s): {','.join(is_not_date_keys)}",
    +252                )
    +253            return True
    +254    return False
    +255
    +256
    +257def convert_date_to_datetime(d: Union[date, datetime]) -> datetime:
    +258    if isinstance(d, datetime):
    +259        return d
    +260    return datetime(d.year, d.month, d.day, 0, 0, 0)
    +261
    +262
    +263def default_temporal_model(data: Any, default_start: datetime) -> Optional[Dict[datetime, Any]]:
    +264    """Ensure the data is a time dependent dict. Also convert all dates to datetime with default time 00:00:00
    +265    :param default_start: the start time to use as default
    +266    :param data:
    +267    :return:
    +268    """
    +269    if data is None:
    +270        return None
    +271    elif is_temporal_model(data):
    +272        # Already a date-dict
    +273        return {convert_date_to_datetime(_date): value for _date, value in data.items()}
    +274    else:
    +275        # Set default start
    +276        return {
    +277            default_start: data,
    +278        }
    +
    + + +
    +
    + +
    + + def + calculate_delta_days( time_vector: Union[numpy.__array_like._SupportsArray[numpy.dtype], numpy.__nested_sequence._NestedSequence[numpy.__array_like._SupportsArray[numpy.dtype]], bool, int, float, complex, str, bytes, numpy.__nested_sequence._NestedSequence[Union[bool, int, float, complex, str, bytes]]]) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
    17def calculate_delta_days(time_vector: ArrayLike) -> NDArray[np.float64]:
    +18    return np.array([x.total_seconds() / UnitConstants.SECONDS_IN_A_DAY for x in np.diff(time_vector)])
    +
    + + + + +
    +
    + +
    + + class + Period: + + + +
    + +
    22class Period:
    +23    start: datetime = datetime.min
    +24    end: datetime = datetime.max
    +25
    +26    def __str__(self) -> str:
    +27        return f"{self.start}:{self.end}"
    +28
    +29    def __contains__(self, time: datetime) -> bool:
    +30        """
    +31        A period of time is defined as [start, end>,
    +32        ie inclusive start and exclusive end.
    +33
    +34        Args:
    +35            time:
    +36
    +37        Returns:
    +38
    +39        """
    +40        return self.start <= time < self.end
    +41
    +42    @staticmethod
    +43    def intersects(first: Period, second: Period) -> bool:
    +44        """
    +45        Args:
    +46            first:
    +47            second:
    +48
    +49        Returns:
    +50
    +51        """
    +52        return first.start in second or second.start in first
    +53
    +54    def get_timestep_indices(self, timesteps: List[datetime]) -> Tuple[int, int]:
    +55        try:
    +56            start_index = timesteps.index(max(self.start, timesteps[0]))
    +57            if self.end > timesteps[-1]:
    +58                end_index = len(timesteps) + 1
    +59            else:
    +60                end_index = timesteps.index(self.end)
    +61
    +62            return start_index, end_index
    +63        except (IndexError, ValueError) as e:
    +64            raise ProgrammingError(
    +65                "Trying to access a timestep index that does not exist. Please contact eCalc support.\n\t"
    +66                f"Period: {self.start}:{self.end} - timesteps: {timesteps}"
    +67            ) from e
    +
    + + + + +
    +
    + + Period( start: datetime.datetime = datetime.datetime(1, 1, 1, 0, 0), end: datetime.datetime = datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)) + + +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + intersects( first: libecalc.common.time_utils.Period, second: libecalc.common.time_utils.Period) -> bool: + + + +
    + +
    42    @staticmethod
    +43    def intersects(first: Period, second: Period) -> bool:
    +44        """
    +45        Args:
    +46            first:
    +47            second:
    +48
    +49        Returns:
    +50
    +51        """
    +52        return first.start in second or second.start in first
    +
    + + +

    Args: + first: + second:

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + get_timestep_indices(self, timesteps: List[datetime.datetime]) -> Tuple[int, int]: + + + +
    + +
    54    def get_timestep_indices(self, timesteps: List[datetime]) -> Tuple[int, int]:
    +55        try:
    +56            start_index = timesteps.index(max(self.start, timesteps[0]))
    +57            if self.end > timesteps[-1]:
    +58                end_index = len(timesteps) + 1
    +59            else:
    +60                end_index = timesteps.index(self.end)
    +61
    +62            return start_index, end_index
    +63        except (IndexError, ValueError) as e:
    +64            raise ProgrammingError(
    +65                "Trying to access a timestep index that does not exist. Please contact eCalc support.\n\t"
    +66                f"Period: {self.start}:{self.end} - timesteps: {timesteps}"
    +67            ) from e
    +
    + + + + +
    +
    +
    + +
    + + class + Periods: + + + +
    + +
     71class Periods:
    + 72    periods: List[Period]
    + 73
    + 74    @classmethod
    + 75    def create_periods(cls, times: List[datetime], include_before: bool = True, include_after: bool = True) -> Periods:
    + 76        """
    + 77        Create periods from the provided datetimes
    + 78        :param times: the datetimes to create periods from
    + 79        :param include_before: whether to add a period that ends with the first provided datetime, i.e. define a period
    + 80        before the earliest provided datetime.
    + 81        :param include_after: whether to add a period that starts with the last provided datetime, i.e. define a period
    + 82        after the latest provided datetime.
    + 83        :return:
    + 84        """
    + 85        if len(times) == 0:
    + 86            return cls([])
    + 87
    + 88        periods = []
    + 89
    + 90        if include_before:
    + 91            periods.append(
    + 92                Period(
    + 93                    end=times[0],
    + 94                )
    + 95            )
    + 96
    + 97        periods.extend([Period(start=times[index], end=times[index + 1]) for index in range(len(times) - 1)])
    + 98
    + 99        if include_after:
    +100            periods.append(Period(start=times[-1]))
    +101
    +102        return cls(periods)
    +103
    +104    def __iter__(self):
    +105        return self.periods.__iter__()
    +106
    +107    def get_period(self, time: datetime) -> Period:
    +108        for period in self.periods:
    +109            if time in period:
    +110                return period
    +111
    +112        raise ProgrammingError(f"Period for date '{time}' not found in periods")
    +
    + + + + +
    +
    + + Periods(periods: List[libecalc.common.time_utils.Period]) + + +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + create_periods( cls, times: List[datetime.datetime], include_before: bool = True, include_after: bool = True) -> libecalc.common.time_utils.Periods: + + + +
    + +
     74    @classmethod
    + 75    def create_periods(cls, times: List[datetime], include_before: bool = True, include_after: bool = True) -> Periods:
    + 76        """
    + 77        Create periods from the provided datetimes
    + 78        :param times: the datetimes to create periods from
    + 79        :param include_before: whether to add a period that ends with the first provided datetime, i.e. define a period
    + 80        before the earliest provided datetime.
    + 81        :param include_after: whether to add a period that starts with the last provided datetime, i.e. define a period
    + 82        after the latest provided datetime.
    + 83        :return:
    + 84        """
    + 85        if len(times) == 0:
    + 86            return cls([])
    + 87
    + 88        periods = []
    + 89
    + 90        if include_before:
    + 91            periods.append(
    + 92                Period(
    + 93                    end=times[0],
    + 94                )
    + 95            )
    + 96
    + 97        periods.extend([Period(start=times[index], end=times[index + 1]) for index in range(len(times) - 1)])
    + 98
    + 99        if include_after:
    +100            periods.append(Period(start=times[-1]))
    +101
    +102        return cls(periods)
    +
    + + +

    Create periods from the provided datetimes

    + +
    Parameters
    + +
      +
    • times: the datetimes to create periods from
    • +
    • include_before: whether to add a period that ends with the first provided datetime, i.e. define a period +before the earliest provided datetime.
    • +
    • include_after: whether to add a period that starts with the last provided datetime, i.e. define a period +after the latest provided datetime.
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + get_period(self, time: datetime.datetime) -> libecalc.common.time_utils.Period: + + + +
    + +
    107    def get_period(self, time: datetime) -> Period:
    +108        for period in self.periods:
    +109            if time in period:
    +110                return period
    +111
    +112        raise ProgrammingError(f"Period for date '{time}' not found in periods")
    +
    + + + + +
    +
    +
    + +
    + + def + define_time_model_for_period( time_model_data: Union[Any, NoneType], target_period: libecalc.common.time_utils.Period) -> Union[Dict[datetime.datetime, Any], NoneType]: + + + +
    + +
    115def define_time_model_for_period(
    +116    time_model_data: Optional[Any], target_period: Period
    +117) -> Optional[Dict[datetime, Any]]:
    +118    """Process time model based on the target period.
    +119
    +120    Steps:
    +121        - Add a default start date if the model is not already a time model
    +122        - Filter definitions outside given time period
    +123        - Adjust start_date of the first model to the period
    +124    :param time_model_data: a model that can vary based on time,
    +125        i.e. {1900.01.01: some model, 1950.01.01: some other model}
    +126    :param target_period: period for which a model is defined (START,END specified by user or default to everything)
    +127    :return: the time model for the target period
    +128    """
    +129    if time_model_data is None:
    +130        return None
    +131
    +132    # Make sure the model is a time model
    +133    time_model_data = default_temporal_model(time_model_data, default_start=target_period.start)
    +134
    +135    model_periods = Periods.create_periods(list(time_model_data.keys()), include_before=False)
    +136
    +137    return {
    +138        max(model_period.start, target_period.start): model
    +139        for model_period, model in zip(model_periods.periods, time_model_data.values())
    +140        if Period.intersects(model_period, target_period)
    +141    }
    +
    + + +

    Process time model based on the target period.

    + +

    Steps: + - Add a default start date if the model is not already a time model + - Filter definitions outside given time period + - Adjust start_date of the first model to the period

    + +
    Parameters
    + +
      +
    • time_model_data: a model that can vary based on time, +i.e. {1900.01.01: some model, 1950.01.01: some other model}
    • +
    • target_period: period for which a model is defined (START,END specified by user or default to everything)
    • +
    + +
    Returns
    + +
    +

    the time model for the target period

    +
    +
    + + +
    +
    + +
    + + class + Frequency(builtins.str, enum.Enum): + + + +
    + +
    144class Frequency(str, enum.Enum):
    +145    """Represents frequency/resolution of output data
    +146    Using the offset aliases from pandas
    +147    YS: year start
    +148    MS: month start
    +149    D: calendar day.
    +150    """
    +151
    +152    NONE = None
    +153    YEAR = "YS"
    +154    MONTH = "MS"
    +155    DAY = "D"
    +156
    +157    def formatstring(self) -> str:
    +158        """The format to write a string describing a certain period of time."""
    +159        if self.value == "YS":
    +160            return "%Y"
    +161        elif self.value == "MS":
    +162            return "%m/%Y"
    +163        else:
    +164            return "%d/%m/%Y"
    +
    + + +

    Represents frequency/resolution of output data +Using the offset aliases from pandas +YS: year start +MS: month start +D: calendar day.

    +
    + + +
    +
    + NONE = +<Frequency.NONE: 'None'> + + +
    + + + + +
    +
    +
    + YEAR = +<Frequency.YEAR: 'YS'> + + +
    + + + + +
    +
    +
    + MONTH = +<Frequency.MONTH: 'MS'> + + +
    + + + + +
    +
    +
    + DAY = +<Frequency.DAY: 'D'> + + +
    + + + + +
    +
    + +
    + + def + formatstring(self) -> str: + + + +
    + +
    157    def formatstring(self) -> str:
    +158        """The format to write a string describing a certain period of time."""
    +159        if self.value == "YS":
    +160            return "%Y"
    +161        elif self.value == "MS":
    +162            return "%m/%Y"
    +163        else:
    +164            return "%d/%m/%Y"
    +
    + + +

    The format to write a string describing a certain period of time.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + def + resample_time_steps( time_steps: List[datetime.datetime], frequency: libecalc.common.time_utils.Frequency, include_start_date: bool = True, include_end_date: bool = True) -> List[datetime.datetime]: + + + +
    + +
    167def resample_time_steps(
    +168    time_steps: List[datetime],
    +169    frequency: Frequency,
    +170    include_start_date: bool = True,
    +171    include_end_date: bool = True,
    +172) -> List[datetime]:
    +173    """Makes a time vector, based on the first and last date in time_vector and the frequency
    +174
    +175    Args:
    +176        time_steps: The original time vector
    +177        frequency: The reporting frequency
    +178        include_start_date: Whether to include the start date if it is not part of the requested reporting frequency
    +179        include_end_date: Whether to include the end date if it is not part of the requested reporting frequency
    +180
    +181    Returns: Time vector with dates according to given input
    +182
    +183    """
    +184    if frequency is not Frequency.NONE:
    +185        time_step_vector = create_time_steps(
    +186            start=time_steps[0],
    +187            end=time_steps[-1],
    +188            frequency=frequency,
    +189            include_start_date=include_start_date,
    +190            include_end_date=include_end_date,
    +191        )
    +192    else:
    +193        time_step_vector = time_steps
    +194
    +195    return time_step_vector
    +
    + + +

    Makes a time vector, based on the first and last date in time_vector and the frequency

    + +

    Args: + time_steps: The original time vector + frequency: The reporting frequency + include_start_date: Whether to include the start date if it is not part of the requested reporting frequency + include_end_date: Whether to include the end date if it is not part of the requested reporting frequency

    + +

    Returns: Time vector with dates according to given input

    +
    + + +
    +
    + +
    + + def + create_time_steps( frequency: libecalc.common.time_utils.Frequency, start: datetime.datetime, end: datetime.datetime, include_start_date: bool, include_end_date: bool) -> List[datetime.datetime]: + + + +
    + +
    198def create_time_steps(
    +199    frequency: Frequency, start: datetime, end: datetime, include_start_date: bool, include_end_date: bool
    +200) -> List[datetime]:
    +201    """
    +202
    +203    Args:
    +204        frequency: The requested frequency
    +205        start: The start date
    +206        end: The end date
    +207        include_start_date: Whether to include the start date if it is not part of the requested frequency
    +208        include_end_date:  Whether to include the end date if it is not part of the requested frequency
    +209
    +210    Returns:
    +211        A list of dates (and possibly including the start/end dates) between the given start and end dates following
    +212        the requested frequency
    +213
    +214    """
    +215    # If the start date or end date is part of the date_range made by the frequency, the returned date range will
    +216    # always include the start and end date (no matter what the include_start_date and include_end_date booleans are).
    +217    # To avoid this add one day to start and subtract one day from end.
    +218    date_range = pd.date_range(start=start + timedelta(days=1), end=end - timedelta(days=1), freq=frequency.value)
    +219
    +220    time_steps = [clear_time(time_step) for time_step in date_range]
    +221    if include_start_date:
    +222        time_steps = [clear_time(start)] + time_steps
    +223    if include_end_date:
    +224        time_steps = [clear_time(end)] + time_steps
    +225
    +226    return sorted(set(time_steps))
    +
    + + +

    Args: + frequency: The requested frequency + start: The start date + end: The end date + include_start_date: Whether to include the start date if it is not part of the requested frequency + include_end_date: Whether to include the end date if it is not part of the requested frequency

    + +

    Returns: + A list of dates (and possibly including the start/end dates) between the given start and end dates following + the requested frequency

    +
    + + +
    +
    + +
    + + def + clear_time(d: datetime.datetime) -> datetime.datetime: + + + +
    + +
    229def clear_time(d: datetime) -> datetime:
    +230    return datetime.combine(d.date(), datetime.min.time())
    +
    + + + + +
    +
    + +
    + + def + is_temporal_model(data: Dict) -> bool: + + + +
    + +
    233def is_temporal_model(data: Dict) -> bool:
    +234    if isinstance(data, dict):
    +235        is_date = []
    +236        is_not_date_keys = []
    +237        for key in data:
    +238            if isinstance(key, date):
    +239                is_date.append(True)
    +240            else:
    +241                try:
    +242                    datetime.strptime(key, "%Y-%m-%dT%H:%M:%S")
    +243                    is_date.append(True)
    +244                except (TypeError, ValueError):
    +245                    is_not_date_keys.append(str(key))
    +246                    is_date.append(False)
    +247        if any(is_date):
    +248            if not all(is_date):
    +249                raise EcalcError(
    +250                    title="Invalid model",
    +251                    message="Temporal models should only contain date keys. "
    +252                    f"Invalid date(s): {','.join(is_not_date_keys)}",
    +253                )
    +254            return True
    +255    return False
    +
    + + + + +
    +
    + +
    + + def + convert_date_to_datetime(d: Union[datetime.date, datetime.datetime]) -> datetime.datetime: + + + +
    + +
    258def convert_date_to_datetime(d: Union[date, datetime]) -> datetime:
    +259    if isinstance(d, datetime):
    +260        return d
    +261    return datetime(d.year, d.month, d.day, 0, 0, 0)
    +
    + + + + +
    +
    + +
    + + def + default_temporal_model( data: Any, default_start: datetime.datetime) -> Union[Dict[datetime.datetime, Any], NoneType]: + + + +
    + +
    264def default_temporal_model(data: Any, default_start: datetime) -> Optional[Dict[datetime, Any]]:
    +265    """Ensure the data is a time dependent dict. Also convert all dates to datetime with default time 00:00:00
    +266    :param default_start: the start time to use as default
    +267    :param data:
    +268    :return:
    +269    """
    +270    if data is None:
    +271        return None
    +272    elif is_temporal_model(data):
    +273        # Already a date-dict
    +274        return {convert_date_to_datetime(_date): value for _date, value in data.items()}
    +275    else:
    +276        # Set default start
    +277        return {
    +278            default_start: data,
    +279        }
    +
    + + +

    Ensure the data is a time dependent dict. Also convert all dates to datetime with default time 00:00:00

    + +
    Parameters
    + +
      +
    • default_start: the start time to use as default
    • +
    • data:
    • +
    + +
    Returns
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/units.html b/docs/about/references/api/libecalc/common/units.html new file mode 100644 index 0000000000..e7ca1404e0 --- /dev/null +++ b/docs/about/references/api/libecalc/common/units.html @@ -0,0 +1,1322 @@ + + + + + + + libecalc.common.units API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.units

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3from collections import defaultdict
    +  4from enum import Enum
    +  5from functools import singledispatch
    +  6from typing import Callable, Dict, TypeVar, Union
    +  7
    +  8import numpy as np
    +  9from numpy.typing import NDArray
    + 10
    + 11from libecalc.common.logger import logger
    + 12
    + 13TInput = TypeVar("TInput", bound=Union[int, float, NDArray[np.float64], list])
    + 14
    + 15
    + 16def _type_handler(unit_func: Callable[[TInput], TInput]) -> Callable[[TInput], TInput]:
    + 17    """
    + 18    Receives a unit conversion function and registers a list specific override so that the resulting unit
    + 19    function can handle conversion of both lists and single items.
    + 20
    + 21    Args:
    + 22        unit_func: the unit conversion function
    + 23
    + 24    Returns: a unit conversion function that can handle both lists and single items
    + 25
    + 26    """
    + 27
    + 28    @singledispatch
    + 29    def func(i: TInput) -> Callable[[TInput], TInput]:
    + 30        """
    + 31        Apply unit_func to a single item
    + 32        Args:
    + 33            i: the single item that should be converted
    + 34
    + 35        Returns:
    + 36
    + 37        """
    + 38        return unit_func(i)
    + 39
    + 40    @func.register  # type: ignore
    + 41    def _(i: list) -> TInput:
    + 42        """
    + 43        List specific override. The type of the first parameter is used to decide which function to use.
    + 44        Args:
    + 45            i: list of items that should be converted
    + 46
    + 47        Returns:
    + 48
    + 49        """
    + 50        return unit_func(np.asarray(i, dtype=(type(i)))).tolist()  # type: ignore
    + 51
    + 52    return func
    + 53
    + 54
    + 55class UnitConstants:
    + 56    TO_KILO = 1e-3
    + 57    STANDARD_PRESSURE_BARA = 1.01325
    + 58    STANDARD_TEMPERATURE_KELVIN = 288.15
    + 59    STANDARD_TEMPERATURE_CELSIUS = 15.0
    + 60    CELSIUS_TO_KELVIN = 273.15
    + 61    HOURS_PER_DAY = 24.0
    + 62    EARTH_GRAVITY = 9.81
    + 63    GAS_CONSTANT = 8.314472  # m3 * Pa / (K * mol) - SI units
    + 64    WATT_TO_MEGAWATT = 1e-6
    + 65    SECONDS_PER_HOUR = 3600.0
    + 66    SECONDS_IN_A_DAY = 86400.0
    + 67    WATT_PER_MEGAWATT = 1e6
    + 68
    + 69
    + 70class Unit(str, Enum):
    + 71    """A very simple unit registry to convert between common eCalc units."""
    + 72
    + 73    NONE = "N/A"
    + 74    KG_BOE = "kg/BOE"
    + 75    KG_SM3 = "kg/Sm3"
    + 76    KG_M3 = "kg/m3"
    + 77    STANDARD_CUBIC_METER = "Sm3"
    + 78    BOE = "BOE"
    + 79
    + 80    TONS_PER_DAY = "t/d"
    + 81    TONS = "t"
    + 82
    + 83    KILO_PER_DAY = "kg/d"
    + 84    KILO_PER_HOUR = "kg/h"
    + 85    KILO = "kg"
    + 86
    + 87    LITRES_PER_DAY = "L/d"
    + 88    LITRES = "L"
    + 89
    + 90    MEGA_WATT_DAYS = "MWd"
    + 91    GIGA_WATT_HOURS = "GWh"
    + 92    MEGA_WATT = "MW"
    + 93
    + 94    YEAR = "Y"
    + 95    BARA = "bara"
    + 96    KILO_PASCAL = "kPa"
    + 97    PASCAL = "Pa"
    + 98
    + 99    CELSIUS = "C"
    +100    KELVIN = "K"
    +101
    +102    FRACTION = "frac"
    +103    PERCENTAGE = "%"
    +104
    +105    POLYTROPIC_HEAD_KILO_JOULE_PER_KG = "kJ/kg"
    +106    POLYTROPIC_HEAD_JOULE_PER_KG = "J/kg"
    +107    POLYTROPIC_HEAD_METER_LIQUID_COLUMN = "N.m/kg"
    +108
    +109    ACTUAL_VOLUMETRIC_M3_PER_HOUR = "Am3/h"
    +110    STANDARD_CUBIC_METER_PER_DAY = "Sm3/d"
    +111
    +112    SPEED_RPM = "RPM"
    +113
    +114    def __str__(self) -> str:
    +115        return self.value
    +116
    +117    @staticmethod
    +118    def _unit_registry() -> Dict[Unit, Dict[Unit, Callable]]:
    +119        unit_registry: Dict[Unit, Dict[Unit, Callable]] = defaultdict(dict)
    +120
    +121        unit_registry[Unit.TONS_PER_DAY][Unit.KILO_PER_DAY] = lambda a: a * 1000
    +122        unit_registry[Unit.KILO_PER_DAY][Unit.TONS_PER_DAY] = lambda a: a / 1000
    +123
    +124        unit_registry[Unit.KILO][Unit.TONS] = lambda a: a / 1000
    +125        unit_registry[Unit.TONS][Unit.KILO] = lambda a: a * 1000
    +126
    +127        unit_registry[Unit.STANDARD_CUBIC_METER][Unit.LITRES] = lambda a: a * 1000
    +128        unit_registry[Unit.LITRES][Unit.STANDARD_CUBIC_METER] = lambda a: a / 1000
    +129
    +130        # Temperature
    +131        unit_registry[Unit.CELSIUS][Unit.KELVIN] = lambda a: a + 273.15
    +132        unit_registry[Unit.KELVIN][Unit.CELSIUS] = lambda a: a - 273.15
    +133
    +134        # Pressure
    +135        unit_registry[Unit.BARA][Unit.KILO_PASCAL] = lambda a: a * 100
    +136        unit_registry[Unit.KILO_PASCAL][Unit.BARA] = lambda a: a / 100
    +137        unit_registry[Unit.BARA][Unit.PASCAL] = lambda a: a * 1e5
    +138        unit_registry[Unit.PASCAL][Unit.BARA] = lambda a: a / 1e5
    +139
    +140        # User for compressor charts.
    +141        unit_registry[Unit.PERCENTAGE][Unit.FRACTION] = lambda a: a / 100
    +142        unit_registry[Unit.FRACTION][Unit.PERCENTAGE] = lambda a: a * 100
    +143
    +144        # Compressor chart polytropic head
    +145        unit_registry[Unit.POLYTROPIC_HEAD_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG] = lambda a: a / 1000
    +146        unit_registry[Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_JOULE_PER_KG] = lambda a: a * 1000
    +147        unit_registry[Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN][Unit.POLYTROPIC_HEAD_JOULE_PER_KG] = (
    +148            lambda a: a * UnitConstants.EARTH_GRAVITY
    +149        )
    +150        unit_registry[Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN][Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG] = (
    +151            lambda a: (a * UnitConstants.EARTH_GRAVITY) / 1000
    +152        )
    +153        unit_registry[Unit.POLYTROPIC_HEAD_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN] = (
    +154            lambda a: a / UnitConstants.EARTH_GRAVITY
    +155        )
    +156        unit_registry[Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN] = (
    +157            lambda a: (a * 1000) / UnitConstants.EARTH_GRAVITY
    +158        )
    +159
    +160        # Other
    +161        unit_registry[Unit.KG_BOE][Unit.KG_SM3] = lambda a: a * 6.29
    +162        unit_registry[Unit.KG_SM3][Unit.KG_BOE] = lambda a: a / 6.29
    +163        unit_registry[Unit.STANDARD_CUBIC_METER][Unit.BOE] = lambda a: a * 6.29
    +164        unit_registry[Unit.BOE][Unit.STANDARD_CUBIC_METER] = lambda a: a / 6.29
    +165        unit_registry[Unit.MEGA_WATT_DAYS][Unit.GIGA_WATT_HOURS] = lambda a: a * 24 / 1000
    +166
    +167        return unit_registry
    +168
    +169    def to(self, unit: Unit) -> Callable:
    +170        if self is unit:
    +171            return lambda a: a
    +172
    +173        try:
    +174            unit_registry = Unit._unit_registry()
    +175            try:
    +176                converter = _type_handler(unit_registry[self][unit])
    +177                if converter is not None:
    +178                    return converter
    +179            except KeyError as ke:
    +180                msg = (
    +181                    f"The conversion between {self.value} to {unit.value}"
    +182                    f" has not been added to unit conversion registry."
    +183                )
    +184                logger.exception(msg)
    +185                raise NotImplementedError(msg) from ke
    +186                # NOTE: Not sure about this one, add conversion manually both ways for now
    +187                # Maybe add all conversions as of base of 10?
    +188                # return lambda inv: inv / unit_registry[unit][self](1)
    +189        except Exception as e:
    +190            msg = (
    +191                f"The conversion between {self.value} to {unit.value}"
    +192                f" has not been added to unit conversion registry.: {e}"
    +193            )
    +194            logger.exception(msg)
    +195            raise NotImplementedError(msg) from e
    +196
    +197    def volume_to_rate(self) -> Unit:
    +198        """
    +199        For a unit describing volume in a period, the corresponding rate unit is returned.
    +200        """
    +201        if self == Unit.STANDARD_CUBIC_METER:
    +202            return Unit.STANDARD_CUBIC_METER_PER_DAY
    +203        elif self == Unit.MEGA_WATT_DAYS:
    +204            return Unit.MEGA_WATT
    +205        elif self == Unit.TONS:
    +206            return Unit.TONS_PER_DAY
    +207        elif self == Unit.KILO:
    +208            return Unit.KILO_PER_DAY
    +209        elif self == Unit.LITRES:
    +210            return Unit.LITRES_PER_DAY
    +211        else:
    +212            raise NotImplementedError(f"Unknown unit for cumulative calculation '{self}'")
    +213
    +214    def rate_to_volume(self) -> Unit:
    +215        """
    +216        For a unit describing rates, the corresponding unit for volume in a period is returned.
    +217        """
    +218        if self == Unit.STANDARD_CUBIC_METER_PER_DAY:
    +219            return Unit.STANDARD_CUBIC_METER
    +220        elif self == Unit.MEGA_WATT:
    +221            return Unit.MEGA_WATT_DAYS
    +222        elif self == Unit.TONS_PER_DAY:
    +223            return Unit.TONS
    +224        elif self == Unit.KILO_PER_DAY:
    +225            return Unit.KILO
    +226        elif self == Unit.LITRES_PER_DAY:
    +227            return Unit.LITRES
    +228        else:
    +229            raise NotImplementedError(f"Unknown unit for rate calculation '{self}'")
    +
    + + +
    +
    + +
    + + class + UnitConstants: + + + +
    + +
    56class UnitConstants:
    +57    TO_KILO = 1e-3
    +58    STANDARD_PRESSURE_BARA = 1.01325
    +59    STANDARD_TEMPERATURE_KELVIN = 288.15
    +60    STANDARD_TEMPERATURE_CELSIUS = 15.0
    +61    CELSIUS_TO_KELVIN = 273.15
    +62    HOURS_PER_DAY = 24.0
    +63    EARTH_GRAVITY = 9.81
    +64    GAS_CONSTANT = 8.314472  # m3 * Pa / (K * mol) - SI units
    +65    WATT_TO_MEGAWATT = 1e-6
    +66    SECONDS_PER_HOUR = 3600.0
    +67    SECONDS_IN_A_DAY = 86400.0
    +68    WATT_PER_MEGAWATT = 1e6
    +
    + + + + +
    +
    + +
    + + class + Unit(builtins.str, enum.Enum): + + + +
    + +
     71class Unit(str, Enum):
    + 72    """A very simple unit registry to convert between common eCalc units."""
    + 73
    + 74    NONE = "N/A"
    + 75    KG_BOE = "kg/BOE"
    + 76    KG_SM3 = "kg/Sm3"
    + 77    KG_M3 = "kg/m3"
    + 78    STANDARD_CUBIC_METER = "Sm3"
    + 79    BOE = "BOE"
    + 80
    + 81    TONS_PER_DAY = "t/d"
    + 82    TONS = "t"
    + 83
    + 84    KILO_PER_DAY = "kg/d"
    + 85    KILO_PER_HOUR = "kg/h"
    + 86    KILO = "kg"
    + 87
    + 88    LITRES_PER_DAY = "L/d"
    + 89    LITRES = "L"
    + 90
    + 91    MEGA_WATT_DAYS = "MWd"
    + 92    GIGA_WATT_HOURS = "GWh"
    + 93    MEGA_WATT = "MW"
    + 94
    + 95    YEAR = "Y"
    + 96    BARA = "bara"
    + 97    KILO_PASCAL = "kPa"
    + 98    PASCAL = "Pa"
    + 99
    +100    CELSIUS = "C"
    +101    KELVIN = "K"
    +102
    +103    FRACTION = "frac"
    +104    PERCENTAGE = "%"
    +105
    +106    POLYTROPIC_HEAD_KILO_JOULE_PER_KG = "kJ/kg"
    +107    POLYTROPIC_HEAD_JOULE_PER_KG = "J/kg"
    +108    POLYTROPIC_HEAD_METER_LIQUID_COLUMN = "N.m/kg"
    +109
    +110    ACTUAL_VOLUMETRIC_M3_PER_HOUR = "Am3/h"
    +111    STANDARD_CUBIC_METER_PER_DAY = "Sm3/d"
    +112
    +113    SPEED_RPM = "RPM"
    +114
    +115    def __str__(self) -> str:
    +116        return self.value
    +117
    +118    @staticmethod
    +119    def _unit_registry() -> Dict[Unit, Dict[Unit, Callable]]:
    +120        unit_registry: Dict[Unit, Dict[Unit, Callable]] = defaultdict(dict)
    +121
    +122        unit_registry[Unit.TONS_PER_DAY][Unit.KILO_PER_DAY] = lambda a: a * 1000
    +123        unit_registry[Unit.KILO_PER_DAY][Unit.TONS_PER_DAY] = lambda a: a / 1000
    +124
    +125        unit_registry[Unit.KILO][Unit.TONS] = lambda a: a / 1000
    +126        unit_registry[Unit.TONS][Unit.KILO] = lambda a: a * 1000
    +127
    +128        unit_registry[Unit.STANDARD_CUBIC_METER][Unit.LITRES] = lambda a: a * 1000
    +129        unit_registry[Unit.LITRES][Unit.STANDARD_CUBIC_METER] = lambda a: a / 1000
    +130
    +131        # Temperature
    +132        unit_registry[Unit.CELSIUS][Unit.KELVIN] = lambda a: a + 273.15
    +133        unit_registry[Unit.KELVIN][Unit.CELSIUS] = lambda a: a - 273.15
    +134
    +135        # Pressure
    +136        unit_registry[Unit.BARA][Unit.KILO_PASCAL] = lambda a: a * 100
    +137        unit_registry[Unit.KILO_PASCAL][Unit.BARA] = lambda a: a / 100
    +138        unit_registry[Unit.BARA][Unit.PASCAL] = lambda a: a * 1e5
    +139        unit_registry[Unit.PASCAL][Unit.BARA] = lambda a: a / 1e5
    +140
    +141        # User for compressor charts.
    +142        unit_registry[Unit.PERCENTAGE][Unit.FRACTION] = lambda a: a / 100
    +143        unit_registry[Unit.FRACTION][Unit.PERCENTAGE] = lambda a: a * 100
    +144
    +145        # Compressor chart polytropic head
    +146        unit_registry[Unit.POLYTROPIC_HEAD_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG] = lambda a: a / 1000
    +147        unit_registry[Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_JOULE_PER_KG] = lambda a: a * 1000
    +148        unit_registry[Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN][Unit.POLYTROPIC_HEAD_JOULE_PER_KG] = (
    +149            lambda a: a * UnitConstants.EARTH_GRAVITY
    +150        )
    +151        unit_registry[Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN][Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG] = (
    +152            lambda a: (a * UnitConstants.EARTH_GRAVITY) / 1000
    +153        )
    +154        unit_registry[Unit.POLYTROPIC_HEAD_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN] = (
    +155            lambda a: a / UnitConstants.EARTH_GRAVITY
    +156        )
    +157        unit_registry[Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN] = (
    +158            lambda a: (a * 1000) / UnitConstants.EARTH_GRAVITY
    +159        )
    +160
    +161        # Other
    +162        unit_registry[Unit.KG_BOE][Unit.KG_SM3] = lambda a: a * 6.29
    +163        unit_registry[Unit.KG_SM3][Unit.KG_BOE] = lambda a: a / 6.29
    +164        unit_registry[Unit.STANDARD_CUBIC_METER][Unit.BOE] = lambda a: a * 6.29
    +165        unit_registry[Unit.BOE][Unit.STANDARD_CUBIC_METER] = lambda a: a / 6.29
    +166        unit_registry[Unit.MEGA_WATT_DAYS][Unit.GIGA_WATT_HOURS] = lambda a: a * 24 / 1000
    +167
    +168        return unit_registry
    +169
    +170    def to(self, unit: Unit) -> Callable:
    +171        if self is unit:
    +172            return lambda a: a
    +173
    +174        try:
    +175            unit_registry = Unit._unit_registry()
    +176            try:
    +177                converter = _type_handler(unit_registry[self][unit])
    +178                if converter is not None:
    +179                    return converter
    +180            except KeyError as ke:
    +181                msg = (
    +182                    f"The conversion between {self.value} to {unit.value}"
    +183                    f" has not been added to unit conversion registry."
    +184                )
    +185                logger.exception(msg)
    +186                raise NotImplementedError(msg) from ke
    +187                # NOTE: Not sure about this one, add conversion manually both ways for now
    +188                # Maybe add all conversions as of base of 10?
    +189                # return lambda inv: inv / unit_registry[unit][self](1)
    +190        except Exception as e:
    +191            msg = (
    +192                f"The conversion between {self.value} to {unit.value}"
    +193                f" has not been added to unit conversion registry.: {e}"
    +194            )
    +195            logger.exception(msg)
    +196            raise NotImplementedError(msg) from e
    +197
    +198    def volume_to_rate(self) -> Unit:
    +199        """
    +200        For a unit describing volume in a period, the corresponding rate unit is returned.
    +201        """
    +202        if self == Unit.STANDARD_CUBIC_METER:
    +203            return Unit.STANDARD_CUBIC_METER_PER_DAY
    +204        elif self == Unit.MEGA_WATT_DAYS:
    +205            return Unit.MEGA_WATT
    +206        elif self == Unit.TONS:
    +207            return Unit.TONS_PER_DAY
    +208        elif self == Unit.KILO:
    +209            return Unit.KILO_PER_DAY
    +210        elif self == Unit.LITRES:
    +211            return Unit.LITRES_PER_DAY
    +212        else:
    +213            raise NotImplementedError(f"Unknown unit for cumulative calculation '{self}'")
    +214
    +215    def rate_to_volume(self) -> Unit:
    +216        """
    +217        For a unit describing rates, the corresponding unit for volume in a period is returned.
    +218        """
    +219        if self == Unit.STANDARD_CUBIC_METER_PER_DAY:
    +220            return Unit.STANDARD_CUBIC_METER
    +221        elif self == Unit.MEGA_WATT:
    +222            return Unit.MEGA_WATT_DAYS
    +223        elif self == Unit.TONS_PER_DAY:
    +224            return Unit.TONS
    +225        elif self == Unit.KILO_PER_DAY:
    +226            return Unit.KILO
    +227        elif self == Unit.LITRES_PER_DAY:
    +228            return Unit.LITRES
    +229        else:
    +230            raise NotImplementedError(f"Unknown unit for rate calculation '{self}'")
    +
    + + +

    A very simple unit registry to convert between common eCalc units.

    +
    + + +
    +
    + NONE = +<Unit.NONE: 'N/A'> + + +
    + + + + +
    +
    +
    + KG_BOE = +<Unit.KG_BOE: 'kg/BOE'> + + +
    + + + + +
    +
    +
    + KG_SM3 = +<Unit.KG_SM3: 'kg/Sm3'> + + +
    + + + + +
    +
    +
    + KG_M3 = +<Unit.KG_M3: 'kg/m3'> + + +
    + + + + +
    +
    +
    + STANDARD_CUBIC_METER = +<Unit.STANDARD_CUBIC_METER: 'Sm3'> + + +
    + + + + +
    +
    +
    + BOE = +<Unit.BOE: 'BOE'> + + +
    + + + + +
    +
    +
    + TONS_PER_DAY = +<Unit.TONS_PER_DAY: 't/d'> + + +
    + + + + +
    +
    +
    + TONS = +<Unit.TONS: 't'> + + +
    + + + + +
    +
    +
    + KILO_PER_DAY = +<Unit.KILO_PER_DAY: 'kg/d'> + + +
    + + + + +
    +
    +
    + KILO_PER_HOUR = +<Unit.KILO_PER_HOUR: 'kg/h'> + + +
    + + + + +
    +
    +
    + KILO = +<Unit.KILO: 'kg'> + + +
    + + + + +
    +
    +
    + LITRES_PER_DAY = +<Unit.LITRES_PER_DAY: 'L/d'> + + +
    + + + + +
    +
    +
    + LITRES = +<Unit.LITRES: 'L'> + + +
    + + + + +
    +
    +
    + MEGA_WATT_DAYS = +<Unit.MEGA_WATT_DAYS: 'MWd'> + + +
    + + + + +
    +
    +
    + GIGA_WATT_HOURS = +<Unit.GIGA_WATT_HOURS: 'GWh'> + + +
    + + + + +
    +
    +
    + MEGA_WATT = +<Unit.MEGA_WATT: 'MW'> + + +
    + + + + +
    +
    +
    + YEAR = +<Unit.YEAR: 'Y'> + + +
    + + + + +
    +
    +
    + BARA = +<Unit.BARA: 'bara'> + + +
    + + + + +
    +
    +
    + KILO_PASCAL = +<Unit.KILO_PASCAL: 'kPa'> + + +
    + + + + +
    +
    +
    + PASCAL = +<Unit.PASCAL: 'Pa'> + + +
    + + + + +
    +
    +
    + CELSIUS = +<Unit.CELSIUS: 'C'> + + +
    + + + + +
    +
    +
    + KELVIN = +<Unit.KELVIN: 'K'> + + +
    + + + + +
    +
    +
    + FRACTION = +<Unit.FRACTION: 'frac'> + + +
    + + + + +
    +
    +
    + PERCENTAGE = +<Unit.PERCENTAGE: '%'> + + +
    + + + + +
    +
    +
    + POLYTROPIC_HEAD_KILO_JOULE_PER_KG = +<Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG: 'kJ/kg'> + + +
    + + + + +
    +
    +
    + POLYTROPIC_HEAD_JOULE_PER_KG = +<Unit.POLYTROPIC_HEAD_JOULE_PER_KG: 'J/kg'> + + +
    + + + + +
    +
    +
    + POLYTROPIC_HEAD_METER_LIQUID_COLUMN = +<Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN: 'N.m/kg'> + + +
    + + + + +
    +
    +
    + ACTUAL_VOLUMETRIC_M3_PER_HOUR = +<Unit.ACTUAL_VOLUMETRIC_M3_PER_HOUR: 'Am3/h'> + + +
    + + + + +
    +
    +
    + STANDARD_CUBIC_METER_PER_DAY = +<Unit.STANDARD_CUBIC_METER_PER_DAY: 'Sm3/d'> + + +
    + + + + +
    +
    +
    + SPEED_RPM = +<Unit.SPEED_RPM: 'RPM'> + + +
    + + + + +
    +
    + +
    + + def + to(self, unit: libecalc.common.units.Unit) -> Callable: + + + +
    + +
    170    def to(self, unit: Unit) -> Callable:
    +171        if self is unit:
    +172            return lambda a: a
    +173
    +174        try:
    +175            unit_registry = Unit._unit_registry()
    +176            try:
    +177                converter = _type_handler(unit_registry[self][unit])
    +178                if converter is not None:
    +179                    return converter
    +180            except KeyError as ke:
    +181                msg = (
    +182                    f"The conversion between {self.value} to {unit.value}"
    +183                    f" has not been added to unit conversion registry."
    +184                )
    +185                logger.exception(msg)
    +186                raise NotImplementedError(msg) from ke
    +187                # NOTE: Not sure about this one, add conversion manually both ways for now
    +188                # Maybe add all conversions as of base of 10?
    +189                # return lambda inv: inv / unit_registry[unit][self](1)
    +190        except Exception as e:
    +191            msg = (
    +192                f"The conversion between {self.value} to {unit.value}"
    +193                f" has not been added to unit conversion registry.: {e}"
    +194            )
    +195            logger.exception(msg)
    +196            raise NotImplementedError(msg) from e
    +
    + + + + +
    +
    + +
    + + def + volume_to_rate(self) -> libecalc.common.units.Unit: + + + +
    + +
    198    def volume_to_rate(self) -> Unit:
    +199        """
    +200        For a unit describing volume in a period, the corresponding rate unit is returned.
    +201        """
    +202        if self == Unit.STANDARD_CUBIC_METER:
    +203            return Unit.STANDARD_CUBIC_METER_PER_DAY
    +204        elif self == Unit.MEGA_WATT_DAYS:
    +205            return Unit.MEGA_WATT
    +206        elif self == Unit.TONS:
    +207            return Unit.TONS_PER_DAY
    +208        elif self == Unit.KILO:
    +209            return Unit.KILO_PER_DAY
    +210        elif self == Unit.LITRES:
    +211            return Unit.LITRES_PER_DAY
    +212        else:
    +213            raise NotImplementedError(f"Unknown unit for cumulative calculation '{self}'")
    +
    + + +

    For a unit describing volume in a period, the corresponding rate unit is returned.

    +
    + + +
    +
    + +
    + + def + rate_to_volume(self) -> libecalc.common.units.Unit: + + + +
    + +
    215    def rate_to_volume(self) -> Unit:
    +216        """
    +217        For a unit describing rates, the corresponding unit for volume in a period is returned.
    +218        """
    +219        if self == Unit.STANDARD_CUBIC_METER_PER_DAY:
    +220            return Unit.STANDARD_CUBIC_METER
    +221        elif self == Unit.MEGA_WATT:
    +222            return Unit.MEGA_WATT_DAYS
    +223        elif self == Unit.TONS_PER_DAY:
    +224            return Unit.TONS
    +225        elif self == Unit.KILO_PER_DAY:
    +226            return Unit.KILO
    +227        elif self == Unit.LITRES_PER_DAY:
    +228            return Unit.LITRES
    +229        else:
    +230            raise NotImplementedError(f"Unknown unit for rate calculation '{self}'")
    +
    + + +

    For a unit describing rates, the corresponding unit for volume in a period is returned.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/version.html b/docs/about/references/api/libecalc/common/version.html new file mode 100644 index 0000000000..3e00101c83 --- /dev/null +++ b/docs/about/references/api/libecalc/common/version.html @@ -0,0 +1,516 @@ + + + + + + + libecalc.common.version API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.version

    + + + + + + +
     1import re
    + 2from typing import Optional
    + 3
    + 4from libecalc.dto.base import EcalcBaseModel
    + 5
    + 6VERSION_FORMAT = r"^(\d+)(\.\d+)?(\.\d+)?$"
    + 7
    + 8
    + 9class Version(EcalcBaseModel):
    +10    major: int = 0
    +11    minor: int = 0
    +12    patch: int = 0
    +13
    +14    def __init__(self, major: int = 0, minor: int = 0, patch: int = 0):
    +15        super().__init__()
    +16        self.major = major
    +17        self.minor = minor
    +18        self.patch = patch
    +19
    +20    @classmethod
    +21    def from_string(cls, version_string: Optional[str]) -> "Version":
    +22        """From any version that has either major, minor or patch in string, get the full
    +23        version with major, minor and patch set.
    +24
    +25        If null, empty or invalid string, return Version 0.0.0
    +26
    +27        :param version_string:
    +28        :return:
    +29        """
    +30        if version_string is None:
    +31            return Version()
    +32
    +33        pattern = re.compile(VERSION_FORMAT)
    +34        match = pattern.match(version_string)
    +35
    +36        if match is None:
    +37            return Version()
    +38
    +39        if len(match.groups()):
    +40            # NOTE! Group 0 is full (matched) expression
    +41            major = int(match[1]) if match[1] is not None else 0
    +42            minor = int(match[2][1:]) if match[2] is not None else 0
    +43            patch = int(match[3][1:]) if match[3] is not None else 0
    +44            return cls(major=major, minor=minor, patch=patch)
    +45        else:
    +46            # ignore wrong format for now, assume not set
    +47            return Version()
    +48
    +49    def __str__(self) -> str:
    +50        return f"{self.major}.{self.minor}.{self.patch}"
    +51
    +52    def __repr__(self) -> str:
    +53        return f"Major: {self.major}\nMinor: {self.minor}\nPatch: {self.patch}"
    +
    + + +
    +
    + +
    + + class + Version(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    10class Version(EcalcBaseModel):
    +11    major: int = 0
    +12    minor: int = 0
    +13    patch: int = 0
    +14
    +15    def __init__(self, major: int = 0, minor: int = 0, patch: int = 0):
    +16        super().__init__()
    +17        self.major = major
    +18        self.minor = minor
    +19        self.patch = patch
    +20
    +21    @classmethod
    +22    def from_string(cls, version_string: Optional[str]) -> "Version":
    +23        """From any version that has either major, minor or patch in string, get the full
    +24        version with major, minor and patch set.
    +25
    +26        If null, empty or invalid string, return Version 0.0.0
    +27
    +28        :param version_string:
    +29        :return:
    +30        """
    +31        if version_string is None:
    +32            return Version()
    +33
    +34        pattern = re.compile(VERSION_FORMAT)
    +35        match = pattern.match(version_string)
    +36
    +37        if match is None:
    +38            return Version()
    +39
    +40        if len(match.groups()):
    +41            # NOTE! Group 0 is full (matched) expression
    +42            major = int(match[1]) if match[1] is not None else 0
    +43            minor = int(match[2][1:]) if match[2] is not None else 0
    +44            patch = int(match[3][1:]) if match[3] is not None else 0
    +45            return cls(major=major, minor=minor, patch=patch)
    +46        else:
    +47            # ignore wrong format for now, assume not set
    +48            return Version()
    +49
    +50    def __str__(self) -> str:
    +51        return f"{self.major}.{self.minor}.{self.patch}"
    +52
    +53    def __repr__(self) -> str:
    +54        return f"Major: {self.major}\nMinor: {self.minor}\nPatch: {self.patch}"
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    + + Version(major: int = 0, minor: int = 0, patch: int = 0) + + + +
    + +
    15    def __init__(self, major: int = 0, minor: int = 0, patch: int = 0):
    +16        super().__init__()
    +17        self.major = major
    +18        self.minor = minor
    +19        self.patch = patch
    +
    + + +

    Create a new model by parsing and validating input data from keyword arguments.

    + +

    Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be +validated to form a valid model.

    + +

    self is explicitly positional-only to allow self as a field name.

    +
    + + +
    +
    + +
    +
    @classmethod
    + + def + from_string( cls, version_string: Union[str, NoneType]) -> libecalc.common.version.Version: + + + +
    + +
    21    @classmethod
    +22    def from_string(cls, version_string: Optional[str]) -> "Version":
    +23        """From any version that has either major, minor or patch in string, get the full
    +24        version with major, minor and patch set.
    +25
    +26        If null, empty or invalid string, return Version 0.0.0
    +27
    +28        :param version_string:
    +29        :return:
    +30        """
    +31        if version_string is None:
    +32            return Version()
    +33
    +34        pattern = re.compile(VERSION_FORMAT)
    +35        match = pattern.match(version_string)
    +36
    +37        if match is None:
    +38            return Version()
    +39
    +40        if len(match.groups()):
    +41            # NOTE! Group 0 is full (matched) expression
    +42            major = int(match[1]) if match[1] is not None else 0
    +43            minor = int(match[2][1:]) if match[2] is not None else 0
    +44            patch = int(match[3][1:]) if match[3] is not None else 0
    +45            return cls(major=major, minor=minor, patch=patch)
    +46        else:
    +47            # ignore wrong format for now, assume not set
    +48            return Version()
    +
    + + +

    From any version that has either major, minor or patch in string, get the full +version with major, minor and patch set.

    + +

    If null, empty or invalid string, return Version 0.0.0

    + +
    Parameters
    + +
      +
    • version_string:
    • +
    + +
    Returns
    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/domain.html b/docs/about/references/api/libecalc/domain.html new file mode 100644 index 0000000000..f2d56c2758 --- /dev/null +++ b/docs/about/references/api/libecalc/domain.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.domain API documentation + + + + + + + + + +
    +
    +

    +libecalc.domain

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/domain/stream_conditions.html b/docs/about/references/api/libecalc/domain/stream_conditions.html new file mode 100644 index 0000000000..78e1c73fec --- /dev/null +++ b/docs/about/references/api/libecalc/domain/stream_conditions.html @@ -0,0 +1,740 @@ + + + + + + + libecalc.domain.stream_conditions API documentation + + + + + + + + + +
    +
    +

    +libecalc.domain.stream_conditions

    + +

    Point in time stream conditions

    +
    + + + + + +
      1"""
    +  2Point in time stream conditions
    +  3"""
    +  4from __future__ import annotations
    +  5
    +  6import dataclasses
    +  7import operator
    +  8from dataclasses import dataclass
    +  9from datetime import datetime
    + 10from functools import reduce
    + 11from typing import Dict, List
    + 12
    + 13from libecalc.common.string.string_utils import generate_id
    + 14from libecalc.common.units import Unit
    + 15
    + 16
    + 17@dataclass
    + 18class Pressure:
    + 19    value: float
    + 20    unit: Unit
    + 21
    + 22    def __lt__(self, other: Pressure) -> bool:
    + 23        if self.unit != other.unit:
    + 24            raise ValueError("Unit mismatch")
    + 25
    + 26        return self.value < other.value
    + 27
    + 28
    + 29@dataclass
    + 30class Rate:
    + 31    value: float
    + 32    unit: Unit
    + 33
    + 34    def __add__(self, other) -> Rate:
    + 35        if self.unit != other.unit:
    + 36            raise ValueError("Unit mismatch")
    + 37
    + 38        return Rate(
    + 39            value=self.value + other.value,
    + 40            unit=self.unit,
    + 41        )
    + 42
    + 43
    + 44@dataclass
    + 45class Density:
    + 46    value: float
    + 47    unit: Unit
    + 48
    + 49
    + 50@dataclass
    + 51class Temperature:
    + 52    value: float
    + 53    unit: Unit
    + 54
    + 55
    + 56@dataclass
    + 57class StreamConditions:
    + 58    id: str
    + 59    name: str
    + 60    timestep: datetime
    + 61    rate: Rate
    + 62    pressure: Pressure
    + 63    density: Density = None
    + 64    temperature: Temperature = None
    + 65
    + 66    def mix(self, *other_stream_conditions: StreamConditions) -> StreamConditions:
    + 67        streams = [self, *other_stream_conditions]
    + 68        if any(stream.rate is None for stream in streams):
    + 69            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    + 70            raise ValueError(
    + 71                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    + 72            )
    + 73
    + 74        if any(stream.pressure is None for stream in streams):
    + 75            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    + 76            raise ValueError(
    + 77                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    + 78            )
    + 79
    + 80        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    + 81        if any(stream.pressure < target_pressure for stream in other_stream_conditions):
    + 82            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    + 83
    + 84        target_temperature = self.temperature  # Assuming 'self' decides the target temperature
    + 85        if target_temperature is not None and any(
    + 86            stream.temperature == target_temperature for stream in other_stream_conditions
    + 87        ):
    + 88            raise ValueError("Changing temperature when mixing streams. That should not happen.")
    + 89
    + 90        return StreamConditions(
    + 91            id=generate_id(*[stream.id for stream in streams]),
    + 92            name=f"{'-'.join(stream.name for stream in streams)}",
    + 93            timestep=self.timestep,
    + 94            rate=reduce(operator.add, [stream.rate for stream in streams]),
    + 95            pressure=target_pressure,
    + 96            density=self.density,  # TODO: Check that they are equal? Or handle it?
    + 97            temperature=self.temperature,
    + 98        )
    + 99
    +100    def copy(self, update: Dict = None):
    +101        if update is None:
    +102            update = {}
    +103
    +104        return dataclasses.replace(self, **update)
    +105
    +106    @classmethod
    +107    def mix_all(cls, streams: List[StreamConditions]) -> StreamConditions:
    +108        if len(streams) == 0:
    +109            raise ValueError("No streams to mix")
    +110        if len(streams) == 1:
    +111            return streams[0].copy()
    +112
    +113        first, *rest = streams
    +114        return first.copy().mix(*rest)
    +
    + + +
    +
    + +
    + + class + Pressure: + + + +
    + +
    19class Pressure:
    +20    value: float
    +21    unit: Unit
    +22
    +23    def __lt__(self, other: Pressure) -> bool:
    +24        if self.unit != other.unit:
    +25            raise ValueError("Unit mismatch")
    +26
    +27        return self.value < other.value
    +
    + + + + +
    +
    + + Pressure(value: float, unit: libecalc.common.units.Unit) + + +
    + + + + +
    +
    +
    + +
    + + class + Rate: + + + +
    + +
    31class Rate:
    +32    value: float
    +33    unit: Unit
    +34
    +35    def __add__(self, other) -> Rate:
    +36        if self.unit != other.unit:
    +37            raise ValueError("Unit mismatch")
    +38
    +39        return Rate(
    +40            value=self.value + other.value,
    +41            unit=self.unit,
    +42        )
    +
    + + + + +
    +
    + + Rate(value: float, unit: libecalc.common.units.Unit) + + +
    + + + + +
    +
    +
    + +
    + + class + Density: + + + +
    + +
    46class Density:
    +47    value: float
    +48    unit: Unit
    +
    + + + + +
    +
    + + Density(value: float, unit: libecalc.common.units.Unit) + + +
    + + + + +
    +
    +
    + +
    + + class + Temperature: + + + +
    + +
    52class Temperature:
    +53    value: float
    +54    unit: Unit
    +
    + + + + +
    +
    + + Temperature(value: float, unit: libecalc.common.units.Unit) + + +
    + + + + +
    +
    +
    + +
    + + class + StreamConditions: + + + +
    + +
     58class StreamConditions:
    + 59    id: str
    + 60    name: str
    + 61    timestep: datetime
    + 62    rate: Rate
    + 63    pressure: Pressure
    + 64    density: Density = None
    + 65    temperature: Temperature = None
    + 66
    + 67    def mix(self, *other_stream_conditions: StreamConditions) -> StreamConditions:
    + 68        streams = [self, *other_stream_conditions]
    + 69        if any(stream.rate is None for stream in streams):
    + 70            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    + 71            raise ValueError(
    + 72                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    + 73            )
    + 74
    + 75        if any(stream.pressure is None for stream in streams):
    + 76            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    + 77            raise ValueError(
    + 78                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    + 79            )
    + 80
    + 81        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    + 82        if any(stream.pressure < target_pressure for stream in other_stream_conditions):
    + 83            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    + 84
    + 85        target_temperature = self.temperature  # Assuming 'self' decides the target temperature
    + 86        if target_temperature is not None and any(
    + 87            stream.temperature == target_temperature for stream in other_stream_conditions
    + 88        ):
    + 89            raise ValueError("Changing temperature when mixing streams. That should not happen.")
    + 90
    + 91        return StreamConditions(
    + 92            id=generate_id(*[stream.id for stream in streams]),
    + 93            name=f"{'-'.join(stream.name for stream in streams)}",
    + 94            timestep=self.timestep,
    + 95            rate=reduce(operator.add, [stream.rate for stream in streams]),
    + 96            pressure=target_pressure,
    + 97            density=self.density,  # TODO: Check that they are equal? Or handle it?
    + 98            temperature=self.temperature,
    + 99        )
    +100
    +101    def copy(self, update: Dict = None):
    +102        if update is None:
    +103            update = {}
    +104
    +105        return dataclasses.replace(self, **update)
    +106
    +107    @classmethod
    +108    def mix_all(cls, streams: List[StreamConditions]) -> StreamConditions:
    +109        if len(streams) == 0:
    +110            raise ValueError("No streams to mix")
    +111        if len(streams) == 1:
    +112            return streams[0].copy()
    +113
    +114        first, *rest = streams
    +115        return first.copy().mix(*rest)
    +
    + + + + +
    +
    + + StreamConditions( id: str, name: str, timestep: datetime.datetime, rate: libecalc.domain.stream_conditions.Rate, pressure: libecalc.domain.stream_conditions.Pressure, density: libecalc.domain.stream_conditions.Density = None, temperature: libecalc.domain.stream_conditions.Temperature = None) + + +
    + + + + +
    +
    + +
    + + def + mix( self, *other_stream_conditions: libecalc.domain.stream_conditions.StreamConditions) -> libecalc.domain.stream_conditions.StreamConditions: + + + +
    + +
    67    def mix(self, *other_stream_conditions: StreamConditions) -> StreamConditions:
    +68        streams = [self, *other_stream_conditions]
    +69        if any(stream.rate is None for stream in streams):
    +70            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    +71            raise ValueError(
    +72                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    +73            )
    +74
    +75        if any(stream.pressure is None for stream in streams):
    +76            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    +77            raise ValueError(
    +78                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    +79            )
    +80
    +81        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    +82        if any(stream.pressure < target_pressure for stream in other_stream_conditions):
    +83            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    +84
    +85        target_temperature = self.temperature  # Assuming 'self' decides the target temperature
    +86        if target_temperature is not None and any(
    +87            stream.temperature == target_temperature for stream in other_stream_conditions
    +88        ):
    +89            raise ValueError("Changing temperature when mixing streams. That should not happen.")
    +90
    +91        return StreamConditions(
    +92            id=generate_id(*[stream.id for stream in streams]),
    +93            name=f"{'-'.join(stream.name for stream in streams)}",
    +94            timestep=self.timestep,
    +95            rate=reduce(operator.add, [stream.rate for stream in streams]),
    +96            pressure=target_pressure,
    +97            density=self.density,  # TODO: Check that they are equal? Or handle it?
    +98            temperature=self.temperature,
    +99        )
    +
    + + + + +
    +
    + +
    + + def + copy(self, update: Dict = None): + + + +
    + +
    101    def copy(self, update: Dict = None):
    +102        if update is None:
    +103            update = {}
    +104
    +105        return dataclasses.replace(self, **update)
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + mix_all( cls, streams: List[libecalc.domain.stream_conditions.StreamConditions]) -> libecalc.domain.stream_conditions.StreamConditions: + + + +
    + +
    107    @classmethod
    +108    def mix_all(cls, streams: List[StreamConditions]) -> StreamConditions:
    +109        if len(streams) == 0:
    +110            raise ValueError("No streams to mix")
    +111        if len(streams) == 1:
    +112            return streams[0].copy()
    +113
    +114        first, *rest = streams
    +115        return first.copy().mix(*rest)
    +
    + + + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto.html b/docs/about/references/api/libecalc/dto.html new file mode 100644 index 0000000000..ebc0058353 --- /dev/null +++ b/docs/about/references/api/libecalc/dto.html @@ -0,0 +1,311 @@ + + + + + + + libecalc.dto API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto

    + + + + + + +
     1from libecalc.dto.components import (
    + 2    Asset,
    + 3    BaseConsumer,
    + 4    ElectricityConsumer,
    + 5    FuelConsumer,
    + 6    GeneratorSet,
    + 7    Installation,
    + 8)
    + 9from libecalc.dto.emission import Emission
    +10from libecalc.dto.models import (
    +11    ChartCurve,
    +12    CompressorChart,
    +13    CompressorConsumerFunction,
    +14    CompressorModel,
    +15    CompressorSampled,
    +16    CompressorSystemCompressor,
    +17    CompressorSystemConsumerFunction,
    +18    CompressorSystemOperationalSetting,
    +19    CompressorTrainSimplifiedWithKnownStages,
    +20    CompressorTrainSimplifiedWithUnknownStages,
    +21    CompressorWithTurbine,
    +22    ConsumerFunction,
    +23    DirectConsumerFunction,
    +24    ElectricEnergyUsageModel,
    +25    EnergyModel,
    +26    EnergyModelSampled,
    +27    FluidComposition,
    +28    FluidModel,
    +29    FluidStream,
    +30    FuelEnergyUsageModel,
    +31    GeneratorSetSampled,
    +32    GenericChartFromDesignPoint,
    +33    GenericChartFromInput,
    +34    PumpConsumerFunction,
    +35    PumpModel,
    +36    PumpSystemConsumerFunction,
    +37    PumpSystemOperationalSetting,
    +38    PumpSystemPump,
    +39    SingleSpeedChart,
    +40    SystemOperationalSetting,
    +41    TabulatedConsumerFunction,
    +42    TabulatedData,
    +43    Turbine,
    +44    Variables,
    +45    VariableSpeedChart,
    +46)
    +47from libecalc.dto.models.compressor import (
    +48    CompressorStage,
    +49    InterstagePressureControl,
    +50    MultipleStreamsAndPressureStream,
    +51    MultipleStreamsCompressorStage,
    +52    SingleSpeedCompressorTrain,
    +53    VariableSpeedCompressorTrain,
    +54    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +55)
    +56from libecalc.dto.result_options import ResultOptions
    +57from libecalc.dto.types import FuelType, TimeSeriesType
    +58from libecalc.dto.variables import VariablesMap
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/base.html b/docs/about/references/api/libecalc/dto/base.html new file mode 100644 index 0000000000..de10884320 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/base.html @@ -0,0 +1,1396 @@ + + + + + + + libecalc.dto.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.base

    + + + + + + +
     1from abc import ABC, abstractmethod
    + 2from enum import Enum
    + 3
    + 4from pydantic import BaseModel, ConfigDict
    + 5
    + 6from libecalc.common.string.string_utils import to_camel_case
    + 7
    + 8
    + 9class ComponentType(str, Enum):
    +10    ASSET = "ASSET"
    +11    INSTALLATION = "INSTALLATION"
    +12    GENERATOR_SET = "GENERATOR_SET"
    +13
    +14    CONSUMER_SYSTEM_V2 = "CONSUMER_SYSTEM@v2"
    +15    COMPRESSOR_SYSTEM = "COMPRESSOR_SYSTEM"
    +16    PUMP_SYSTEM = "PUMP_SYSTEM"
    +17    COMPRESSOR = "COMPRESSOR"
    +18    COMPRESSOR_V2 = "COMPRESSOR@v2"
    +19    PUMP = "PUMP"
    +20    PUMP_V2 = "PUMP@v2"
    +21    GENERIC = "GENERIC"
    +22    # TURBINE = "TURBINE"
    +23    VENTING_EMITTER = "VENTING_EMITTER"
    +24    TRAIN_V2 = "TRAIN@V2"
    +25
    +26    def __lt__(self, other: "ComponentType"):  # type: ignore[override]
    +27        if self == other:
    +28            return False
    +29        # the following works because the order of elements in the definition is preserved
    +30        for elem in ComponentType:
    +31            if self == elem:
    +32                return True
    +33            elif other == elem:
    +34                return False
    +35
    +36
    +37class ConsumerUserDefinedCategoryType(str, Enum):
    +38    """
    +39    Consumer category
    +40    """
    +41
    +42    BASE_LOAD = "BASE-LOAD"
    +43    COLD_VENTING_FUGITIVE = "COLD-VENTING-FUGITIVE"
    +44    COMPRESSOR = "COMPRESSOR"
    +45    FIXED_PRODUCTION_LOAD = "FIXED-PRODUCTION-LOAD"
    +46    FLARE = "FLARE"
    +47    MISCELLANEOUS = "MISCELLANEOUS"
    +48    PUMP = "PUMP"
    +49    GAS_DRIVEN_COMPRESSOR = "GAS-DRIVEN-COMPRESSOR"
    +50    TURBINE_GENERATOR = "TURBINE-GENERATOR"
    +51    POWER_FROM_SHORE = "POWER-FROM-SHORE"
    +52    OFFSHORE_WIND = "OFFSHORE-WIND"
    +53    LOADING = "LOADING"
    +54    STORAGE = "STORAGE"
    +55    STEAM_TURBINE_GENERATOR = "STEAM-TURBINE-GENERATOR"
    +56    BOILER = "BOILER"
    +57    HEATER = "HEATER"
    +58
    +59
    +60class InstallationUserDefinedCategoryType(str, Enum):
    +61    """
    +62    Installation category
    +63    """
    +64
    +65    FIXED = "FIXED"
    +66    MOBILE = "MOBILE"
    +67
    +68
    +69class FuelTypeUserDefinedCategoryType(str, Enum):
    +70    FUEL_GAS = "FUEL-GAS"
    +71    DIESEL = "DIESEL"
    +72
    +73
    +74class EcalcBaseModel(BaseModel):
    +75    model_config = ConfigDict(
    +76        extra="forbid",
    +77        alias_generator=to_camel_case,
    +78        populate_by_name=True,
    +79    )
    +80
    +81
    +82class Component(EcalcBaseModel, ABC):
    +83    component_type: ComponentType
    +84
    +85    @property
    +86    @abstractmethod
    +87    def id(self) -> str:
    +88        ...
    +
    + + +
    +
    + +
    + + class + ComponentType(builtins.str, enum.Enum): + + + +
    + +
    10class ComponentType(str, Enum):
    +11    ASSET = "ASSET"
    +12    INSTALLATION = "INSTALLATION"
    +13    GENERATOR_SET = "GENERATOR_SET"
    +14
    +15    CONSUMER_SYSTEM_V2 = "CONSUMER_SYSTEM@v2"
    +16    COMPRESSOR_SYSTEM = "COMPRESSOR_SYSTEM"
    +17    PUMP_SYSTEM = "PUMP_SYSTEM"
    +18    COMPRESSOR = "COMPRESSOR"
    +19    COMPRESSOR_V2 = "COMPRESSOR@v2"
    +20    PUMP = "PUMP"
    +21    PUMP_V2 = "PUMP@v2"
    +22    GENERIC = "GENERIC"
    +23    # TURBINE = "TURBINE"
    +24    VENTING_EMITTER = "VENTING_EMITTER"
    +25    TRAIN_V2 = "TRAIN@V2"
    +26
    +27    def __lt__(self, other: "ComponentType"):  # type: ignore[override]
    +28        if self == other:
    +29            return False
    +30        # the following works because the order of elements in the definition is preserved
    +31        for elem in ComponentType:
    +32            if self == elem:
    +33                return True
    +34            elif other == elem:
    +35                return False
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + ASSET = +<ComponentType.ASSET: 'ASSET'> + + +
    + + + + +
    +
    +
    + INSTALLATION = +<ComponentType.INSTALLATION: 'INSTALLATION'> + + +
    + + + + +
    +
    +
    + GENERATOR_SET = +<ComponentType.GENERATOR_SET: 'GENERATOR_SET'> + + +
    + + + + +
    +
    +
    + CONSUMER_SYSTEM_V2 = +<ComponentType.CONSUMER_SYSTEM_V2: 'CONSUMER_SYSTEM@v2'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_SYSTEM = +<ComponentType.COMPRESSOR_SYSTEM: 'COMPRESSOR_SYSTEM'> + + +
    + + + + +
    +
    +
    + PUMP_SYSTEM = +<ComponentType.PUMP_SYSTEM: 'PUMP_SYSTEM'> + + +
    + + + + +
    +
    +
    + COMPRESSOR = +<ComponentType.COMPRESSOR: 'COMPRESSOR'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_V2 = +<ComponentType.COMPRESSOR_V2: 'COMPRESSOR@v2'> + + +
    + + + + +
    +
    +
    + PUMP = +<ComponentType.PUMP: 'PUMP'> + + +
    + + + + +
    +
    +
    + PUMP_V2 = +<ComponentType.PUMP_V2: 'PUMP@v2'> + + +
    + + + + +
    +
    +
    + GENERIC = +<ComponentType.GENERIC: 'GENERIC'> + + +
    + + + + +
    +
    +
    + VENTING_EMITTER = +<ComponentType.VENTING_EMITTER: 'VENTING_EMITTER'> + + +
    + + + + +
    +
    +
    + TRAIN_V2 = +<ComponentType.TRAIN_V2: 'TRAIN@V2'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ConsumerUserDefinedCategoryType(builtins.str, enum.Enum): + + + +
    + +
    38class ConsumerUserDefinedCategoryType(str, Enum):
    +39    """
    +40    Consumer category
    +41    """
    +42
    +43    BASE_LOAD = "BASE-LOAD"
    +44    COLD_VENTING_FUGITIVE = "COLD-VENTING-FUGITIVE"
    +45    COMPRESSOR = "COMPRESSOR"
    +46    FIXED_PRODUCTION_LOAD = "FIXED-PRODUCTION-LOAD"
    +47    FLARE = "FLARE"
    +48    MISCELLANEOUS = "MISCELLANEOUS"
    +49    PUMP = "PUMP"
    +50    GAS_DRIVEN_COMPRESSOR = "GAS-DRIVEN-COMPRESSOR"
    +51    TURBINE_GENERATOR = "TURBINE-GENERATOR"
    +52    POWER_FROM_SHORE = "POWER-FROM-SHORE"
    +53    OFFSHORE_WIND = "OFFSHORE-WIND"
    +54    LOADING = "LOADING"
    +55    STORAGE = "STORAGE"
    +56    STEAM_TURBINE_GENERATOR = "STEAM-TURBINE-GENERATOR"
    +57    BOILER = "BOILER"
    +58    HEATER = "HEATER"
    +
    + + +

    Consumer category

    +
    + + +
    +
    + BASE_LOAD = +<ConsumerUserDefinedCategoryType.BASE_LOAD: 'BASE-LOAD'> + + +
    + + + + +
    +
    +
    + COLD_VENTING_FUGITIVE = +<ConsumerUserDefinedCategoryType.COLD_VENTING_FUGITIVE: 'COLD-VENTING-FUGITIVE'> + + +
    + + + + +
    +
    +
    + COMPRESSOR = +<ConsumerUserDefinedCategoryType.COMPRESSOR: 'COMPRESSOR'> + + +
    + + + + +
    +
    +
    + FIXED_PRODUCTION_LOAD = +<ConsumerUserDefinedCategoryType.FIXED_PRODUCTION_LOAD: 'FIXED-PRODUCTION-LOAD'> + + +
    + + + + +
    +
    +
    + FLARE = +<ConsumerUserDefinedCategoryType.FLARE: 'FLARE'> + + +
    + + + + +
    +
    +
    + MISCELLANEOUS = +<ConsumerUserDefinedCategoryType.MISCELLANEOUS: 'MISCELLANEOUS'> + + +
    + + + + +
    +
    +
    + PUMP = +<ConsumerUserDefinedCategoryType.PUMP: 'PUMP'> + + +
    + + + + +
    +
    +
    + GAS_DRIVEN_COMPRESSOR = +<ConsumerUserDefinedCategoryType.GAS_DRIVEN_COMPRESSOR: 'GAS-DRIVEN-COMPRESSOR'> + + +
    + + + + +
    +
    +
    + TURBINE_GENERATOR = +<ConsumerUserDefinedCategoryType.TURBINE_GENERATOR: 'TURBINE-GENERATOR'> + + +
    + + + + +
    +
    +
    + POWER_FROM_SHORE = +<ConsumerUserDefinedCategoryType.POWER_FROM_SHORE: 'POWER-FROM-SHORE'> + + +
    + + + + +
    +
    +
    + OFFSHORE_WIND = +<ConsumerUserDefinedCategoryType.OFFSHORE_WIND: 'OFFSHORE-WIND'> + + +
    + + + + +
    +
    +
    + LOADING = +<ConsumerUserDefinedCategoryType.LOADING: 'LOADING'> + + +
    + + + + +
    +
    +
    + STORAGE = +<ConsumerUserDefinedCategoryType.STORAGE: 'STORAGE'> + + +
    + + + + +
    +
    +
    + STEAM_TURBINE_GENERATOR = +<ConsumerUserDefinedCategoryType.STEAM_TURBINE_GENERATOR: 'STEAM-TURBINE-GENERATOR'> + + +
    + + + + +
    +
    +
    + BOILER = +<ConsumerUserDefinedCategoryType.BOILER: 'BOILER'> + + +
    + + + + +
    +
    +
    + HEATER = +<ConsumerUserDefinedCategoryType.HEATER: 'HEATER'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + InstallationUserDefinedCategoryType(builtins.str, enum.Enum): + + + +
    + +
    61class InstallationUserDefinedCategoryType(str, Enum):
    +62    """
    +63    Installation category
    +64    """
    +65
    +66    FIXED = "FIXED"
    +67    MOBILE = "MOBILE"
    +
    + + +

    Installation category

    +
    + + +
    +
    + FIXED = +<InstallationUserDefinedCategoryType.FIXED: 'FIXED'> + + +
    + + + + +
    +
    +
    + MOBILE = +<InstallationUserDefinedCategoryType.MOBILE: 'MOBILE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FuelTypeUserDefinedCategoryType(builtins.str, enum.Enum): + + + +
    + +
    70class FuelTypeUserDefinedCategoryType(str, Enum):
    +71    FUEL_GAS = "FUEL-GAS"
    +72    DIESEL = "DIESEL"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FUEL_GAS = +<FuelTypeUserDefinedCategoryType.FUEL_GAS: 'FUEL-GAS'> + + +
    + + + + +
    +
    +
    + DIESEL = +<FuelTypeUserDefinedCategoryType.DIESEL: 'DIESEL'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EcalcBaseModel(pydantic.main.BaseModel): + + + +
    + +
    75class EcalcBaseModel(BaseModel):
    +76    model_config = ConfigDict(
    +77        extra="forbid",
    +78        alias_generator=to_camel_case,
    +79        populate_by_name=True,
    +80    )
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + Component(EcalcBaseModel, abc.ABC): + + + +
    + +
    83class Component(EcalcBaseModel, ABC):
    +84    component_type: ComponentType
    +85
    +86    @property
    +87    @abstractmethod
    +88    def id(self) -> str:
    +89        ...
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/component_graph.html b/docs/about/references/api/libecalc/dto/component_graph.html new file mode 100644 index 0000000000..5412f6f440 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/component_graph.html @@ -0,0 +1,551 @@ + + + + + + + libecalc.dto.component_graph API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.component_graph

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from typing import List
    + 4
    + 5from libecalc import dto
    + 6from libecalc.common.component_info.component_level import ComponentLevel
    + 7from libecalc.common.graph import Graph, NodeID
    + 8from libecalc.dto.base import ComponentType
    + 9from libecalc.dto.node_info import NodeInfo
    +10
    +11
    +12class ComponentGraph(Graph):
    +13    def get_parent_installation_id(self, node_id: NodeID) -> NodeID:
    +14        """
    +15        Simple helper function to get the installation of any component with id
    +16
    +17        Args:
    +18            node_id:
    +19
    +20        Returns:
    +21
    +22        """
    +23
    +24        # stop as soon as we get an installation. Ie. an installation of an installation, is itself...
    +25        node_info = self.get_node_info(node_id)
    +26        if node_info.component_level == ComponentLevel.INSTALLATION:
    +27            return node_id
    +28
    +29        parent_id = self.get_predecessor(node_id)
    +30        return self.get_parent_installation_id(parent_id)
    +31
    +32    def get_node_info(self, node_id: NodeID) -> NodeInfo:
    +33        component_dto = self.nodes[node_id]
    +34        if isinstance(component_dto, dto.Asset):
    +35            component_level = ComponentLevel.ASSET
    +36        elif isinstance(component_dto, dto.Installation):
    +37            component_level = ComponentLevel.INSTALLATION
    +38        elif isinstance(component_dto, dto.GeneratorSet):
    +39            component_level = ComponentLevel.GENERATOR_SET
    +40        elif component_dto.component_type in [
    +41            ComponentType.COMPRESSOR_SYSTEM,
    +42            ComponentType.PUMP_SYSTEM,
    +43            ComponentType.CONSUMER_SYSTEM_V2,
    +44        ]:
    +45            component_level = ComponentLevel.SYSTEM
    +46        else:
    +47            component_level = ComponentLevel.CONSUMER
    +48
    +49        return NodeInfo(
    +50            id=component_dto.id,
    +51            name=component_dto.name,
    +52            component_type=component_dto.component_type,
    +53            component_level=component_level,
    +54        )
    +55
    +56    def get_node_id_by_name(self, name: str) -> NodeID:
    +57        for node in self.nodes.values():
    +58            if node.name == name:
    +59                return node.id
    +60
    +61        raise ValueError(f"Component with name '{name}' not found in '{self.nodes[self.root].name}'")
    +62
    +63    def get_nodes_of_type(self, component_type: ComponentType) -> List[NodeID]:
    +64        return [node.id for node in self.nodes.values() if node.component_type == component_type]
    +
    + + +
    +
    + +
    + + class + ComponentGraph(typing.Generic[~TNode]): + + + +
    + +
    13class ComponentGraph(Graph):
    +14    def get_parent_installation_id(self, node_id: NodeID) -> NodeID:
    +15        """
    +16        Simple helper function to get the installation of any component with id
    +17
    +18        Args:
    +19            node_id:
    +20
    +21        Returns:
    +22
    +23        """
    +24
    +25        # stop as soon as we get an installation. Ie. an installation of an installation, is itself...
    +26        node_info = self.get_node_info(node_id)
    +27        if node_info.component_level == ComponentLevel.INSTALLATION:
    +28            return node_id
    +29
    +30        parent_id = self.get_predecessor(node_id)
    +31        return self.get_parent_installation_id(parent_id)
    +32
    +33    def get_node_info(self, node_id: NodeID) -> NodeInfo:
    +34        component_dto = self.nodes[node_id]
    +35        if isinstance(component_dto, dto.Asset):
    +36            component_level = ComponentLevel.ASSET
    +37        elif isinstance(component_dto, dto.Installation):
    +38            component_level = ComponentLevel.INSTALLATION
    +39        elif isinstance(component_dto, dto.GeneratorSet):
    +40            component_level = ComponentLevel.GENERATOR_SET
    +41        elif component_dto.component_type in [
    +42            ComponentType.COMPRESSOR_SYSTEM,
    +43            ComponentType.PUMP_SYSTEM,
    +44            ComponentType.CONSUMER_SYSTEM_V2,
    +45        ]:
    +46            component_level = ComponentLevel.SYSTEM
    +47        else:
    +48            component_level = ComponentLevel.CONSUMER
    +49
    +50        return NodeInfo(
    +51            id=component_dto.id,
    +52            name=component_dto.name,
    +53            component_type=component_dto.component_type,
    +54            component_level=component_level,
    +55        )
    +56
    +57    def get_node_id_by_name(self, name: str) -> NodeID:
    +58        for node in self.nodes.values():
    +59            if node.name == name:
    +60                return node.id
    +61
    +62        raise ValueError(f"Component with name '{name}' not found in '{self.nodes[self.root].name}'")
    +63
    +64    def get_nodes_of_type(self, component_type: ComponentType) -> List[NodeID]:
    +65        return [node.id for node in self.nodes.values() if node.component_type == component_type]
    +
    + + +

    Abstract base class for generic types.

    + +

    A generic type is typically declared by inheriting from +this class parameterized with one or more type variables. +For example, a generic mapping type might be defined as::

    + +

    class Mapping(Generic[KT, VT]): + def __getitem__(self, key: KT) -> VT: + ... + # Etc.

    + +

    This class can then be used as follows::

    + +

    def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: + try: + return mapping[key] + except KeyError: + return default

    +
    + + +
    + +
    + + def + get_parent_installation_id(self, node_id: str) -> str: + + + +
    + +
    14    def get_parent_installation_id(self, node_id: NodeID) -> NodeID:
    +15        """
    +16        Simple helper function to get the installation of any component with id
    +17
    +18        Args:
    +19            node_id:
    +20
    +21        Returns:
    +22
    +23        """
    +24
    +25        # stop as soon as we get an installation. Ie. an installation of an installation, is itself...
    +26        node_info = self.get_node_info(node_id)
    +27        if node_info.component_level == ComponentLevel.INSTALLATION:
    +28            return node_id
    +29
    +30        parent_id = self.get_predecessor(node_id)
    +31        return self.get_parent_installation_id(parent_id)
    +
    + + +

    Simple helper function to get the installation of any component with id

    + +

    Args: + node_id:

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + get_node_info(self, node_id: str) -> libecalc.dto.node_info.NodeInfo: + + + +
    + +
    33    def get_node_info(self, node_id: NodeID) -> NodeInfo:
    +34        component_dto = self.nodes[node_id]
    +35        if isinstance(component_dto, dto.Asset):
    +36            component_level = ComponentLevel.ASSET
    +37        elif isinstance(component_dto, dto.Installation):
    +38            component_level = ComponentLevel.INSTALLATION
    +39        elif isinstance(component_dto, dto.GeneratorSet):
    +40            component_level = ComponentLevel.GENERATOR_SET
    +41        elif component_dto.component_type in [
    +42            ComponentType.COMPRESSOR_SYSTEM,
    +43            ComponentType.PUMP_SYSTEM,
    +44            ComponentType.CONSUMER_SYSTEM_V2,
    +45        ]:
    +46            component_level = ComponentLevel.SYSTEM
    +47        else:
    +48            component_level = ComponentLevel.CONSUMER
    +49
    +50        return NodeInfo(
    +51            id=component_dto.id,
    +52            name=component_dto.name,
    +53            component_type=component_dto.component_type,
    +54            component_level=component_level,
    +55        )
    +
    + + + + +
    +
    + +
    + + def + get_node_id_by_name(self, name: str) -> str: + + + +
    + +
    57    def get_node_id_by_name(self, name: str) -> NodeID:
    +58        for node in self.nodes.values():
    +59            if node.name == name:
    +60                return node.id
    +61
    +62        raise ValueError(f"Component with name '{name}' not found in '{self.nodes[self.root].name}'")
    +
    + + + + +
    +
    + +
    + + def + get_nodes_of_type(self, component_type: libecalc.dto.base.ComponentType) -> List[str]: + + + +
    + +
    64    def get_nodes_of_type(self, component_type: ComponentType) -> List[NodeID]:
    +65        return [node.id for node in self.nodes.values() if node.component_type == component_type]
    +
    + + + + +
    + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/components.html b/docs/about/references/api/libecalc/dto/components.html new file mode 100644 index 0000000000..3aa99d2593 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/components.html @@ -0,0 +1,3049 @@ + + + + + + + libecalc.dto.components API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.components

    + + + + + + +
      1from abc import ABC
    +  2from collections import defaultdict
    +  3from datetime import datetime
    +  4from typing import Dict, List, Literal, Optional, TypeVar, Union
    +  5
    +  6from pydantic import ConfigDict, Field, field_validator, model_validator
    +  7from pydantic.class_validators import validator
    +  8from pydantic_core.core_schema import ValidationInfo
    +  9from typing_extensions import Annotated
    + 10
    + 11from libecalc import dto
    + 12from libecalc.common.priorities import Priorities
    + 13from libecalc.common.stream_conditions import TimeSeriesStreamConditions
    + 14from libecalc.common.string.string_utils import generate_id, get_duplicates
    + 15from libecalc.common.units import Unit
    + 16from libecalc.common.utils.rates import (
    + 17    RateType,
    + 18    TimeSeriesFloat,
    + 19    TimeSeriesStreamDayRate,
    + 20)
    + 21from libecalc.dto.base import (
    + 22    Component,
    + 23    ComponentType,
    + 24    ConsumerUserDefinedCategoryType,
    + 25    EcalcBaseModel,
    + 26    InstallationUserDefinedCategoryType,
    + 27)
    + 28from libecalc.dto.component_graph import ComponentGraph
    + 29from libecalc.dto.models import (
    + 30    ConsumerFunction,
    + 31    ElectricEnergyUsageModel,
    + 32    FuelEnergyUsageModel,
    + 33    GeneratorSetSampled,
    + 34)
    + 35from libecalc.dto.models.compressor import CompressorModel
    + 36from libecalc.dto.models.pump import PumpModel
    + 37from libecalc.dto.types import ConsumptionType, EnergyUsageType, FuelType
    + 38from libecalc.dto.utils.validators import (
    + 39    ComponentNameStr,
    + 40    ExpressionType,
    + 41    convert_expression,
    + 42    validate_temporal_model,
    + 43)
    + 44from libecalc.dto.variables import VariablesMap
    + 45from libecalc.expression import Expression
    + 46from libecalc.presentation.yaml.yaml_types.emitters.yaml_venting_emitter import (
    + 47    YamlVentingEmitter,
    + 48)
    + 49
    + 50
    + 51def check_model_energy_usage_type(model_data: Dict[datetime, ConsumerFunction], energy_type: EnergyUsageType):
    + 52    for model in model_data.values():
    + 53        if model.energy_usage_type != energy_type:
    + 54            raise ValueError(f"Model does not consume {energy_type}")
    + 55    return model_data
    + 56
    + 57
    + 58class BaseComponent(Component, ABC):
    + 59    name: ComponentNameStr
    + 60
    + 61    regularity: Dict[datetime, Expression]
    + 62
    + 63    _validate_base_temporal_model = validator("regularity", allow_reuse=True)(validate_temporal_model)
    + 64
    + 65
    + 66class BaseEquipment(BaseComponent, ABC):
    + 67    user_defined_category: Dict[datetime, ConsumerUserDefinedCategoryType] = Field(..., validate_default=True)
    + 68
    + 69    @property
    + 70    def id(self) -> str:
    + 71        return generate_id(self.name)
    + 72
    + 73    @field_validator("user_defined_category", mode="before")
    + 74    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    + 75        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    + 76        if isinstance(user_defined_category, dict) and len(user_defined_category.values()) > 0:
    + 77            for user_category in user_defined_category.values():
    + 78                if user_category not in list(ConsumerUserDefinedCategoryType):
    + 79                    name_context_str = ""
    + 80                    if (name := info.data.get("name")) is not None:
    + 81                        name_context_str = f"with the name {name}"
    + 82
    + 83                    raise ValueError(
    + 84                        f"CATEGORY: {user_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[(consumer_user_defined_category.value) for consumer_user_defined_category in ConsumerUserDefinedCategoryType]}"
    + 85                    )
    + 86
    + 87        return user_defined_category
    + 88
    + 89
    + 90class BaseConsumer(BaseEquipment, ABC):
    + 91    """Base class for all consumers."""
    + 92
    + 93    consumes: ConsumptionType
    + 94    fuel: Optional[Dict[datetime, FuelType]] = None
    + 95
    + 96    @field_validator("fuel")
    + 97    @classmethod
    + 98    def validate_fuel_exist(cls, fuel, info: ValidationInfo):
    + 99        """
    +100        Make sure fuel is set if consumption type is FUEL.
    +101        """
    +102        if info.data.get("consumes") == ConsumptionType.FUEL and (fuel is None or len(fuel) < 1):
    +103            msg = f"Missing fuel for fuel consumer '{info.data.get('name')}'"
    +104            raise ValueError(msg)
    +105        return fuel
    +106
    +107
    +108class ElectricityConsumer(BaseConsumer):
    +109    component_type: Literal[
    +110        ComponentType.COMPRESSOR,
    +111        ComponentType.PUMP,
    +112        ComponentType.GENERIC,
    +113        ComponentType.PUMP_SYSTEM,
    +114        ComponentType.COMPRESSOR_SYSTEM,
    +115    ]
    +116    consumes: Literal[ConsumptionType.ELECTRICITY] = ConsumptionType.ELECTRICITY
    +117    energy_usage_model: Dict[
    +118        datetime,
    +119        ElectricEnergyUsageModel,
    +120    ]
    +121
    +122    _validate_el_consumer_temporal_model = validator("energy_usage_model", allow_reuse=True)(validate_temporal_model)
    +123
    +124    _check_model_energy_usage = validator("energy_usage_model", allow_reuse=True)(
    +125        lambda data: check_model_energy_usage_type(data, EnergyUsageType.POWER)
    +126    )
    +127
    +128
    +129class FuelConsumer(BaseConsumer):
    +130    component_type: Literal[
    +131        ComponentType.COMPRESSOR,
    +132        ComponentType.GENERIC,
    +133        ComponentType.COMPRESSOR_SYSTEM,
    +134    ]
    +135    consumes: Literal[ConsumptionType.FUEL] = ConsumptionType.FUEL
    +136    fuel: Dict[datetime, FuelType]
    +137    energy_usage_model: Dict[datetime, FuelEnergyUsageModel]
    +138
    +139    _validate_fuel_consumer_temporal_models = validator("energy_usage_model", "fuel", allow_reuse=True)(
    +140        validate_temporal_model
    +141    )
    +142
    +143    _check_model_energy_usage = validator("energy_usage_model", allow_reuse=True)(
    +144        lambda data: check_model_energy_usage_type(data, EnergyUsageType.FUEL)
    +145    )
    +146
    +147
    +148Consumer = Annotated[Union[FuelConsumer, ElectricityConsumer], Field(discriminator="consumes")]
    +149
    +150
    +151class CompressorOperationalSettings(EcalcBaseModel):
    +152    rate: Expression
    +153    inlet_pressure: Expression
    +154    outlet_pressure: Expression
    +155
    +156
    +157class PumpOperationalSettings(EcalcBaseModel):
    +158    rate: Expression
    +159    inlet_pressure: Expression
    +160    outlet_pressure: Expression
    +161    fluid_density: Expression
    +162
    +163
    +164class CompressorComponent(BaseConsumer):
    +165    component_type: Literal[ComponentType.COMPRESSOR] = ComponentType.COMPRESSOR
    +166    energy_usage_model: Dict[datetime, CompressorModel]
    +167
    +168
    +169class PumpComponent(BaseConsumer):
    +170    component_type: Literal[ComponentType.PUMP] = ComponentType.PUMP
    +171    energy_usage_model: Dict[datetime, PumpModel]
    +172
    +173
    +174class Stream(EcalcBaseModel):
    +175    model_config = ConfigDict(populate_by_name=True)
    +176
    +177    stream_name: Optional[str] = Field(None)
    +178    from_component_id: str
    +179    to_component_id: str
    +180
    +181
    +182ConsumerComponent = TypeVar("ConsumerComponent", bound=Union[CompressorComponent, PumpComponent])
    +183
    +184
    +185class TrainComponent(BaseConsumer):
    +186    component_type: Literal[ComponentType.TRAIN_V2] = Field(
    +187        ComponentType.TRAIN_V2,
    +188        title="TYPE",
    +189        description="The type of the component",
    +190        alias="TYPE",
    +191    )
    +192    stages: List[ConsumerComponent]
    +193    streams: List[Stream]
    +194
    +195
    +196class ExpressionTimeSeries(EcalcBaseModel):
    +197    value: ExpressionType
    +198    unit: Unit
    +199    type: Optional[RateType] = None
    +200
    +201
    +202class ExpressionStreamConditions(EcalcBaseModel):
    +203    rate: Optional[ExpressionTimeSeries] = None
    +204    pressure: Optional[ExpressionTimeSeries] = None
    +205    temperature: Optional[ExpressionTimeSeries] = None
    +206    fluid_density: Optional[ExpressionTimeSeries] = None
    +207
    +208
    +209ConsumerID = str
    +210PriorityID = str
    +211StreamID = str
    +212
    +213SystemStreamConditions = Dict[ConsumerID, Dict[StreamID, ExpressionStreamConditions]]
    +214
    +215
    +216class Crossover(EcalcBaseModel):
    +217    model_config = ConfigDict(populate_by_name=True)
    +218
    +219    stream_name: Optional[str] = Field(None)
    +220    from_component_id: str
    +221    to_component_id: str
    +222
    +223
    +224class SystemComponentConditions(EcalcBaseModel):
    +225    crossover: List[Crossover]
    +226
    +227
    +228class ConsumerSystem(BaseConsumer):
    +229    component_type: Literal[ComponentType.CONSUMER_SYSTEM_V2] = Field(
    +230        ComponentType.CONSUMER_SYSTEM_V2,
    +231        title="TYPE",
    +232        description="The type of the component",
    +233    )
    +234    component_conditions: SystemComponentConditions
    +235    stream_conditions_priorities: Priorities[SystemStreamConditions]
    +236    consumers: Union[List[CompressorComponent], List[PumpComponent]]
    +237
    +238    def get_graph(self) -> ComponentGraph:
    +239        graph = ComponentGraph()
    +240        graph.add_node(self)
    +241        for consumer in self.consumers:
    +242            graph.add_node(consumer)
    +243            graph.add_edge(self.id, consumer.id)
    +244        return graph
    +245
    +246    def evaluate_stream_conditions(
    +247        self, variables_map: VariablesMap
    +248    ) -> Priorities[Dict[ConsumerID, List[TimeSeriesStreamConditions]]]:
    +249        parsed_priorities: Priorities[Dict[ConsumerID, List[TimeSeriesStreamConditions]]] = defaultdict(dict)
    +250        for priority_name, priority in self.stream_conditions_priorities.items():
    +251            for consumer_name, streams_conditions in priority.items():
    +252                parsed_priorities[priority_name][generate_id(consumer_name)] = [
    +253                    TimeSeriesStreamConditions(
    +254                        id=generate_id(consumer_name, stream_name),
    +255                        name="-".join([consumer_name, stream_name]),
    +256                        rate=TimeSeriesStreamDayRate(
    +257                            timesteps=variables_map.time_vector,
    +258                            values=list(
    +259                                Expression.setup_from_expression(stream_conditions.rate.value).evaluate(
    +260                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +261                                )
    +262                            ),
    +263                            unit=stream_conditions.rate.unit,
    +264                        )
    +265                        if stream_conditions.rate is not None
    +266                        else None,
    +267                        pressure=TimeSeriesFloat(
    +268                            timesteps=variables_map.time_vector,
    +269                            values=list(
    +270                                Expression.setup_from_expression(stream_conditions.pressure.value).evaluate(
    +271                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +272                                )
    +273                            ),
    +274                            unit=stream_conditions.pressure.unit,
    +275                        )
    +276                        if stream_conditions.pressure is not None
    +277                        else None,
    +278                        fluid_density=TimeSeriesFloat(
    +279                            timesteps=variables_map.time_vector,
    +280                            values=list(
    +281                                Expression.setup_from_expression(stream_conditions.fluid_density.value).evaluate(
    +282                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +283                                )
    +284                            ),
    +285                            unit=stream_conditions.fluid_density.unit,
    +286                        )
    +287                        if stream_conditions.fluid_density is not None
    +288                        else None,
    +289                    )
    +290                    for stream_name, stream_conditions in streams_conditions.items()
    +291                ]
    +292        return dict(parsed_priorities)
    +293
    +294
    +295class GeneratorSet(BaseEquipment):
    +296    component_type: Literal[ComponentType.GENERATOR_SET] = ComponentType.GENERATOR_SET
    +297    fuel: Dict[datetime, FuelType]
    +298    generator_set_model: Dict[datetime, GeneratorSetSampled]
    +299    consumers: List[
    +300        Annotated[
    +301            Union[ElectricityConsumer, ConsumerSystem],
    +302            Field(discriminator="component_type"),
    +303        ]
    +304    ] = Field(default_factory=list)
    +305    _validate_genset_temporal_models = validator("generator_set_model", "fuel", allow_reuse=True)(
    +306        validate_temporal_model
    +307    )
    +308
    +309    @field_validator("user_defined_category", mode="before")
    +310    @classmethod
    +311    def check_mandatory_category_for_generator_set(cls, user_defined_category, info: ValidationInfo):
    +312        """This could be handled automatically with Pydantic, but I want to inform the users in a better way, in
    +313        particular since we introduced a breaking change for this to be mandatory for GeneratorSets in v7.2.
    +314        """
    +315        if user_defined_category is None or user_defined_category == "":
    +316            raise ValueError(f"CATEGORY is mandatory and must be set for '{info.data.get('name', cls.__name__)}'")
    +317
    +318        return user_defined_category
    +319
    +320    def get_graph(self) -> ComponentGraph:
    +321        graph = ComponentGraph()
    +322        graph.add_node(self)
    +323        for electricity_consumer in self.consumers:
    +324            if hasattr(electricity_consumer, "get_graph"):
    +325                graph.add_subgraph(electricity_consumer.get_graph())
    +326            else:
    +327                graph.add_node(electricity_consumer)
    +328
    +329            graph.add_edge(self.id, electricity_consumer.id)
    +330
    +331        return graph
    +332
    +333
    +334class Installation(BaseComponent):
    +335    component_type: Literal[ComponentType.INSTALLATION] = ComponentType.INSTALLATION
    +336    user_defined_category: Optional[InstallationUserDefinedCategoryType] = Field(default=None, validate_default=True)
    +337    hydrocarbon_export: Dict[datetime, Expression]
    +338    fuel_consumers: List[
    +339        Annotated[
    +340            Union[GeneratorSet, FuelConsumer, ConsumerSystem],
    +341            Field(discriminator="component_type"),
    +342        ]
    +343    ] = Field(default_factory=list)
    +344    venting_emitters: List[YamlVentingEmitter] = Field(default_factory=list)
    +345
    +346    @property
    +347    def id(self) -> str:
    +348        return generate_id(self.name)
    +349
    +350    _validate_installation_temporal_model = validator("hydrocarbon_export", allow_reuse=True)(validate_temporal_model)
    +351
    +352    _convert_expression_installation = validator("regularity", "hydrocarbon_export", allow_reuse=True, pre=True)(
    +353        convert_expression
    +354    )
    +355
    +356    @field_validator("user_defined_category", mode="before")
    +357    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +358        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +359        if user_defined_category is not None:
    +360            if user_defined_category not in list(InstallationUserDefinedCategoryType):
    +361                name_context_str = ""
    +362                if (name := info.data.get("name")) is not None:
    +363                    name_context_str = f"with the name {name}"
    +364
    +365                raise ValueError(
    +366                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[str(installation_user_defined_category.value) for installation_user_defined_category in InstallationUserDefinedCategoryType]}"
    +367                )
    +368
    +369        return user_defined_category
    +370
    +371    def get_graph(self) -> ComponentGraph:
    +372        graph = ComponentGraph()
    +373        graph.add_node(self)
    +374        for component in [*self.fuel_consumers, *self.venting_emitters]:
    +375            if hasattr(component, "get_graph"):
    +376                graph.add_subgraph(component.get_graph())
    +377            else:
    +378                graph.add_node(component)
    +379
    +380            graph.add_edge(self.id, component.id)
    +381
    +382        return graph
    +383
    +384
    +385class Asset(Component):
    +386    @property
    +387    def id(self):
    +388        return generate_id(self.name)
    +389
    +390    component_type: Literal[ComponentType.ASSET] = ComponentType.ASSET
    +391
    +392    name: ComponentNameStr
    +393    installations: List[Installation] = Field(default_factory=list)
    +394
    +395    @property
    +396    def installation_ids(self) -> List[str]:
    +397        return [installation.id for installation in self.installations]
    +398
    +399    def get_component_ids_for_installation_id(self, installation_id: str) -> List[str]:
    +400        installation = self.get_installation(installation_id)
    +401        component_ids = []
    +402        for fuel_consumer in installation.fuel_consumers:
    +403            component_ids.append(fuel_consumer.id)
    +404            if isinstance(fuel_consumer, dto.GeneratorSet):
    +405                for electricity_consumer in fuel_consumer.consumers:
    +406                    component_ids.append(electricity_consumer.id)
    +407
    +408        for emitter in installation.venting_emitters:
    +409            component_ids.append(emitter.id)
    +410        return component_ids
    +411
    +412    def get_installation(self, installation_id: str) -> Installation:
    +413        return next(installation for installation in self.installations if installation.id == installation_id)
    +414
    +415    @model_validator(mode="after")
    +416    def validate_unique_names(self):
    +417        """Ensure unique component names within installation."""
    +418        names = [self.name]
    +419        fuel_types = [dto.FuelType]
    +420        fuel_names = [str]
    +421        for installation in self.installations:
    +422            names.append(installation.name)
    +423            fuel_consumers = installation.fuel_consumers
    +424            venting_emitters = installation.venting_emitters
    +425
    +426            names.extend([venting_emitter.name for venting_emitter in venting_emitters])
    +427            for fuel_consumer in fuel_consumers:
    +428                names.append(fuel_consumer.name)
    +429                if isinstance(fuel_consumer, GeneratorSet):
    +430                    for electricity_consumer in fuel_consumer.consumers:
    +431                        if isinstance(electricity_consumer, ConsumerSystem):
    +432                            for consumer in electricity_consumer.consumers:
    +433                                names.append(consumer.name)
    +434                elif isinstance(fuel_consumer, ConsumerSystem):
    +435                    for consumer in fuel_consumer.consumers:
    +436                        names.append(consumer.name)
    +437                if fuel_consumer.fuel is not None:
    +438                    for fuel_type in fuel_consumer.fuel.values():
    +439                        # Need to verify that it is a different fuel
    +440                        if fuel_type is not None and fuel_type not in fuel_types:
    +441                            fuel_types.append(fuel_type)
    +442                            fuel_names.append(fuel_type.name)
    +443
    +444        duplicated_names = get_duplicates(names)
    +445        duplicated_fuel_names = get_duplicates(fuel_names)
    +446
    +447        if len(duplicated_names) > 0:
    +448            raise ValueError(
    +449                "Component names must be unique. Components include the main model, installations,"
    +450                " generator sets, electricity consumers, fuel consumers, systems and its consumers and direct emitters."
    +451                f" Duplicated names are: {', '.join(duplicated_names)}"
    +452            )
    +453
    +454        if len(duplicated_fuel_names) > 0:
    +455            raise ValueError(
    +456                "Fuel type names must be unique across installations."
    +457                f" Duplicated names are: {', '.join(duplicated_fuel_names)}"
    +458            )
    +459        return self
    +460
    +461    def get_graph(self) -> ComponentGraph:
    +462        graph = ComponentGraph()
    +463        graph.add_node(self)
    +464        for installation in self.installations:
    +465            graph.add_subgraph(installation.get_graph())
    +466            graph.add_edge(self.id, installation.id)
    +467
    +468        return graph
    +469
    +470
    +471ComponentDTO = Union[
    +472    Asset,
    +473    Installation,
    +474    GeneratorSet,
    +475    FuelConsumer,
    +476    ElectricityConsumer,
    +477    ConsumerSystem,
    +478    CompressorComponent,
    +479    PumpComponent,
    +480]
    +
    + + +
    +
    + +
    + + def + check_model_energy_usage_type( model_data: Dict[datetime.datetime, libecalc.dto.models.base.ConsumerFunction], energy_type: libecalc.dto.types.EnergyUsageType): + + + +
    + +
    52def check_model_energy_usage_type(model_data: Dict[datetime, ConsumerFunction], energy_type: EnergyUsageType):
    +53    for model in model_data.values():
    +54        if model.energy_usage_type != energy_type:
    +55            raise ValueError(f"Model does not consume {energy_type}")
    +56    return model_data
    +
    + + + + +
    +
    + +
    + + class + BaseComponent(libecalc.dto.base.Component, abc.ABC): + + + +
    + +
    59class BaseComponent(Component, ABC):
    +60    name: ComponentNameStr
    +61
    +62    regularity: Dict[datetime, Expression]
    +63
    +64    _validate_base_temporal_model = validator("regularity", allow_reuse=True)(validate_temporal_model)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + BaseEquipment(BaseComponent, abc.ABC): + + + +
    + +
    67class BaseEquipment(BaseComponent, ABC):
    +68    user_defined_category: Dict[datetime, ConsumerUserDefinedCategoryType] = Field(..., validate_default=True)
    +69
    +70    @property
    +71    def id(self) -> str:
    +72        return generate_id(self.name)
    +73
    +74    @field_validator("user_defined_category", mode="before")
    +75    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +76        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +77        if isinstance(user_defined_category, dict) and len(user_defined_category.values()) > 0:
    +78            for user_category in user_defined_category.values():
    +79                if user_category not in list(ConsumerUserDefinedCategoryType):
    +80                    name_context_str = ""
    +81                    if (name := info.data.get("name")) is not None:
    +82                        name_context_str = f"with the name {name}"
    +83
    +84                    raise ValueError(
    +85                        f"CATEGORY: {user_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[(consumer_user_defined_category.value) for consumer_user_defined_category in ConsumerUserDefinedCategoryType]}"
    +86                    )
    +87
    +88        return user_defined_category
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('user_defined_category', mode='before')
    + + def + check_user_defined_category( cls, user_defined_category, info: pydantic_core.core_schema.ValidationInfo): + + + +
    + +
    74    @field_validator("user_defined_category", mode="before")
    +75    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +76        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +77        if isinstance(user_defined_category, dict) and len(user_defined_category.values()) > 0:
    +78            for user_category in user_defined_category.values():
    +79                if user_category not in list(ConsumerUserDefinedCategoryType):
    +80                    name_context_str = ""
    +81                    if (name := info.data.get("name")) is not None:
    +82                        name_context_str = f"with the name {name}"
    +83
    +84                    raise ValueError(
    +85                        f"CATEGORY: {user_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[(consumer_user_defined_category.value) for consumer_user_defined_category in ConsumerUserDefinedCategoryType]}"
    +86                    )
    +87
    +88        return user_defined_category
    +
    + + +

    Provide which value and context to make it easier for user to correct wrt mandatory changes.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + BaseConsumer(BaseEquipment, abc.ABC): + + + +
    + +
     91class BaseConsumer(BaseEquipment, ABC):
    + 92    """Base class for all consumers."""
    + 93
    + 94    consumes: ConsumptionType
    + 95    fuel: Optional[Dict[datetime, FuelType]] = None
    + 96
    + 97    @field_validator("fuel")
    + 98    @classmethod
    + 99    def validate_fuel_exist(cls, fuel, info: ValidationInfo):
    +100        """
    +101        Make sure fuel is set if consumption type is FUEL.
    +102        """
    +103        if info.data.get("consumes") == ConsumptionType.FUEL and (fuel is None or len(fuel) < 1):
    +104            msg = f"Missing fuel for fuel consumer '{info.data.get('name')}'"
    +105            raise ValueError(msg)
    +106        return fuel
    +
    + + +

    Base class for all consumers.

    +
    + + +
    + +
    +
    @field_validator('fuel')
    +
    @classmethod
    + + def + validate_fuel_exist(cls, fuel, info: pydantic_core.core_schema.ValidationInfo): + + + +
    + +
     97    @field_validator("fuel")
    + 98    @classmethod
    + 99    def validate_fuel_exist(cls, fuel, info: ValidationInfo):
    +100        """
    +101        Make sure fuel is set if consumption type is FUEL.
    +102        """
    +103        if info.data.get("consumes") == ConsumptionType.FUEL and (fuel is None or len(fuel) < 1):
    +104            msg = f"Missing fuel for fuel consumer '{info.data.get('name')}'"
    +105            raise ValueError(msg)
    +106        return fuel
    +
    + + +

    Make sure fuel is set if consumption type is FUEL.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + ElectricityConsumer(BaseConsumer): + + + +
    + +
    109class ElectricityConsumer(BaseConsumer):
    +110    component_type: Literal[
    +111        ComponentType.COMPRESSOR,
    +112        ComponentType.PUMP,
    +113        ComponentType.GENERIC,
    +114        ComponentType.PUMP_SYSTEM,
    +115        ComponentType.COMPRESSOR_SYSTEM,
    +116    ]
    +117    consumes: Literal[ConsumptionType.ELECTRICITY] = ConsumptionType.ELECTRICITY
    +118    energy_usage_model: Dict[
    +119        datetime,
    +120        ElectricEnergyUsageModel,
    +121    ]
    +122
    +123    _validate_el_consumer_temporal_model = validator("energy_usage_model", allow_reuse=True)(validate_temporal_model)
    +124
    +125    _check_model_energy_usage = validator("energy_usage_model", allow_reuse=True)(
    +126        lambda data: check_model_energy_usage_type(data, EnergyUsageType.POWER)
    +127    )
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + FuelConsumer(BaseConsumer): + + + +
    + +
    130class FuelConsumer(BaseConsumer):
    +131    component_type: Literal[
    +132        ComponentType.COMPRESSOR,
    +133        ComponentType.GENERIC,
    +134        ComponentType.COMPRESSOR_SYSTEM,
    +135    ]
    +136    consumes: Literal[ConsumptionType.FUEL] = ConsumptionType.FUEL
    +137    fuel: Dict[datetime, FuelType]
    +138    energy_usage_model: Dict[datetime, FuelEnergyUsageModel]
    +139
    +140    _validate_fuel_consumer_temporal_models = validator("energy_usage_model", "fuel", allow_reuse=True)(
    +141        validate_temporal_model
    +142    )
    +143
    +144    _check_model_energy_usage = validator("energy_usage_model", allow_reuse=True)(
    +145        lambda data: check_model_energy_usage_type(data, EnergyUsageType.FUEL)
    +146    )
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + CompressorOperationalSettings(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    152class CompressorOperationalSettings(EcalcBaseModel):
    +153    rate: Expression
    +154    inlet_pressure: Expression
    +155    outlet_pressure: Expression
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + PumpOperationalSettings(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    158class PumpOperationalSettings(EcalcBaseModel):
    +159    rate: Expression
    +160    inlet_pressure: Expression
    +161    outlet_pressure: Expression
    +162    fluid_density: Expression
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorComponent(BaseConsumer): + + + +
    + +
    165class CompressorComponent(BaseConsumer):
    +166    component_type: Literal[ComponentType.COMPRESSOR] = ComponentType.COMPRESSOR
    +167    energy_usage_model: Dict[datetime, CompressorModel]
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + PumpComponent(BaseConsumer): + + + +
    + +
    170class PumpComponent(BaseConsumer):
    +171    component_type: Literal[ComponentType.PUMP] = ComponentType.PUMP
    +172    energy_usage_model: Dict[datetime, PumpModel]
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + Stream(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    175class Stream(EcalcBaseModel):
    +176    model_config = ConfigDict(populate_by_name=True)
    +177
    +178    stream_name: Optional[str] = Field(None)
    +179    from_component_id: str
    +180    to_component_id: str
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + TrainComponent(BaseConsumer): + + + +
    + +
    186class TrainComponent(BaseConsumer):
    +187    component_type: Literal[ComponentType.TRAIN_V2] = Field(
    +188        ComponentType.TRAIN_V2,
    +189        title="TYPE",
    +190        description="The type of the component",
    +191        alias="TYPE",
    +192    )
    +193    stages: List[ConsumerComponent]
    +194    streams: List[Stream]
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + ExpressionTimeSeries(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    197class ExpressionTimeSeries(EcalcBaseModel):
    +198    value: ExpressionType
    +199    unit: Unit
    +200    type: Optional[RateType] = None
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + ExpressionStreamConditions(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    203class ExpressionStreamConditions(EcalcBaseModel):
    +204    rate: Optional[ExpressionTimeSeries] = None
    +205    pressure: Optional[ExpressionTimeSeries] = None
    +206    temperature: Optional[ExpressionTimeSeries] = None
    +207    fluid_density: Optional[ExpressionTimeSeries] = None
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + Crossover(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    217class Crossover(EcalcBaseModel):
    +218    model_config = ConfigDict(populate_by_name=True)
    +219
    +220    stream_name: Optional[str] = Field(None)
    +221    from_component_id: str
    +222    to_component_id: str
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + SystemComponentConditions(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    225class SystemComponentConditions(EcalcBaseModel):
    +226    crossover: List[Crossover]
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + ConsumerSystem(BaseConsumer): + + + +
    + +
    229class ConsumerSystem(BaseConsumer):
    +230    component_type: Literal[ComponentType.CONSUMER_SYSTEM_V2] = Field(
    +231        ComponentType.CONSUMER_SYSTEM_V2,
    +232        title="TYPE",
    +233        description="The type of the component",
    +234    )
    +235    component_conditions: SystemComponentConditions
    +236    stream_conditions_priorities: Priorities[SystemStreamConditions]
    +237    consumers: Union[List[CompressorComponent], List[PumpComponent]]
    +238
    +239    def get_graph(self) -> ComponentGraph:
    +240        graph = ComponentGraph()
    +241        graph.add_node(self)
    +242        for consumer in self.consumers:
    +243            graph.add_node(consumer)
    +244            graph.add_edge(self.id, consumer.id)
    +245        return graph
    +246
    +247    def evaluate_stream_conditions(
    +248        self, variables_map: VariablesMap
    +249    ) -> Priorities[Dict[ConsumerID, List[TimeSeriesStreamConditions]]]:
    +250        parsed_priorities: Priorities[Dict[ConsumerID, List[TimeSeriesStreamConditions]]] = defaultdict(dict)
    +251        for priority_name, priority in self.stream_conditions_priorities.items():
    +252            for consumer_name, streams_conditions in priority.items():
    +253                parsed_priorities[priority_name][generate_id(consumer_name)] = [
    +254                    TimeSeriesStreamConditions(
    +255                        id=generate_id(consumer_name, stream_name),
    +256                        name="-".join([consumer_name, stream_name]),
    +257                        rate=TimeSeriesStreamDayRate(
    +258                            timesteps=variables_map.time_vector,
    +259                            values=list(
    +260                                Expression.setup_from_expression(stream_conditions.rate.value).evaluate(
    +261                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +262                                )
    +263                            ),
    +264                            unit=stream_conditions.rate.unit,
    +265                        )
    +266                        if stream_conditions.rate is not None
    +267                        else None,
    +268                        pressure=TimeSeriesFloat(
    +269                            timesteps=variables_map.time_vector,
    +270                            values=list(
    +271                                Expression.setup_from_expression(stream_conditions.pressure.value).evaluate(
    +272                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +273                                )
    +274                            ),
    +275                            unit=stream_conditions.pressure.unit,
    +276                        )
    +277                        if stream_conditions.pressure is not None
    +278                        else None,
    +279                        fluid_density=TimeSeriesFloat(
    +280                            timesteps=variables_map.time_vector,
    +281                            values=list(
    +282                                Expression.setup_from_expression(stream_conditions.fluid_density.value).evaluate(
    +283                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +284                                )
    +285                            ),
    +286                            unit=stream_conditions.fluid_density.unit,
    +287                        )
    +288                        if stream_conditions.fluid_density is not None
    +289                        else None,
    +290                    )
    +291                    for stream_name, stream_conditions in streams_conditions.items()
    +292                ]
    +293        return dict(parsed_priorities)
    +
    + + +

    Base class for all consumers.

    +
    + + +
    + +
    + + def + get_graph(self) -> libecalc.dto.component_graph.ComponentGraph: + + + +
    + +
    239    def get_graph(self) -> ComponentGraph:
    +240        graph = ComponentGraph()
    +241        graph.add_node(self)
    +242        for consumer in self.consumers:
    +243            graph.add_node(consumer)
    +244            graph.add_edge(self.id, consumer.id)
    +245        return graph
    +
    + + + + +
    +
    + +
    + + def + evaluate_stream_conditions( self, variables_map: libecalc.dto.variables.VariablesMap) -> Dict[str, Dict[str, List[libecalc.common.stream_conditions.TimeSeriesStreamConditions]]]: + + + +
    + +
    247    def evaluate_stream_conditions(
    +248        self, variables_map: VariablesMap
    +249    ) -> Priorities[Dict[ConsumerID, List[TimeSeriesStreamConditions]]]:
    +250        parsed_priorities: Priorities[Dict[ConsumerID, List[TimeSeriesStreamConditions]]] = defaultdict(dict)
    +251        for priority_name, priority in self.stream_conditions_priorities.items():
    +252            for consumer_name, streams_conditions in priority.items():
    +253                parsed_priorities[priority_name][generate_id(consumer_name)] = [
    +254                    TimeSeriesStreamConditions(
    +255                        id=generate_id(consumer_name, stream_name),
    +256                        name="-".join([consumer_name, stream_name]),
    +257                        rate=TimeSeriesStreamDayRate(
    +258                            timesteps=variables_map.time_vector,
    +259                            values=list(
    +260                                Expression.setup_from_expression(stream_conditions.rate.value).evaluate(
    +261                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +262                                )
    +263                            ),
    +264                            unit=stream_conditions.rate.unit,
    +265                        )
    +266                        if stream_conditions.rate is not None
    +267                        else None,
    +268                        pressure=TimeSeriesFloat(
    +269                            timesteps=variables_map.time_vector,
    +270                            values=list(
    +271                                Expression.setup_from_expression(stream_conditions.pressure.value).evaluate(
    +272                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +273                                )
    +274                            ),
    +275                            unit=stream_conditions.pressure.unit,
    +276                        )
    +277                        if stream_conditions.pressure is not None
    +278                        else None,
    +279                        fluid_density=TimeSeriesFloat(
    +280                            timesteps=variables_map.time_vector,
    +281                            values=list(
    +282                                Expression.setup_from_expression(stream_conditions.fluid_density.value).evaluate(
    +283                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +284                                )
    +285                            ),
    +286                            unit=stream_conditions.fluid_density.unit,
    +287                        )
    +288                        if stream_conditions.fluid_density is not None
    +289                        else None,
    +290                    )
    +291                    for stream_name, stream_conditions in streams_conditions.items()
    +292                ]
    +293        return dict(parsed_priorities)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + GeneratorSet(BaseEquipment): + + + +
    + +
    296class GeneratorSet(BaseEquipment):
    +297    component_type: Literal[ComponentType.GENERATOR_SET] = ComponentType.GENERATOR_SET
    +298    fuel: Dict[datetime, FuelType]
    +299    generator_set_model: Dict[datetime, GeneratorSetSampled]
    +300    consumers: List[
    +301        Annotated[
    +302            Union[ElectricityConsumer, ConsumerSystem],
    +303            Field(discriminator="component_type"),
    +304        ]
    +305    ] = Field(default_factory=list)
    +306    _validate_genset_temporal_models = validator("generator_set_model", "fuel", allow_reuse=True)(
    +307        validate_temporal_model
    +308    )
    +309
    +310    @field_validator("user_defined_category", mode="before")
    +311    @classmethod
    +312    def check_mandatory_category_for_generator_set(cls, user_defined_category, info: ValidationInfo):
    +313        """This could be handled automatically with Pydantic, but I want to inform the users in a better way, in
    +314        particular since we introduced a breaking change for this to be mandatory for GeneratorSets in v7.2.
    +315        """
    +316        if user_defined_category is None or user_defined_category == "":
    +317            raise ValueError(f"CATEGORY is mandatory and must be set for '{info.data.get('name', cls.__name__)}'")
    +318
    +319        return user_defined_category
    +320
    +321    def get_graph(self) -> ComponentGraph:
    +322        graph = ComponentGraph()
    +323        graph.add_node(self)
    +324        for electricity_consumer in self.consumers:
    +325            if hasattr(electricity_consumer, "get_graph"):
    +326                graph.add_subgraph(electricity_consumer.get_graph())
    +327            else:
    +328                graph.add_node(electricity_consumer)
    +329
    +330            graph.add_edge(self.id, electricity_consumer.id)
    +331
    +332        return graph
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('user_defined_category', mode='before')
    +
    @classmethod
    + + def + check_mandatory_category_for_generator_set( cls, user_defined_category, info: pydantic_core.core_schema.ValidationInfo): + + + +
    + +
    310    @field_validator("user_defined_category", mode="before")
    +311    @classmethod
    +312    def check_mandatory_category_for_generator_set(cls, user_defined_category, info: ValidationInfo):
    +313        """This could be handled automatically with Pydantic, but I want to inform the users in a better way, in
    +314        particular since we introduced a breaking change for this to be mandatory for GeneratorSets in v7.2.
    +315        """
    +316        if user_defined_category is None or user_defined_category == "":
    +317            raise ValueError(f"CATEGORY is mandatory and must be set for '{info.data.get('name', cls.__name__)}'")
    +318
    +319        return user_defined_category
    +
    + + +

    This could be handled automatically with Pydantic, but I want to inform the users in a better way, in +particular since we introduced a breaking change for this to be mandatory for GeneratorSets in v7.2.

    +
    + + +
    +
    + +
    + + def + get_graph(self) -> libecalc.dto.component_graph.ComponentGraph: + + + +
    + +
    321    def get_graph(self) -> ComponentGraph:
    +322        graph = ComponentGraph()
    +323        graph.add_node(self)
    +324        for electricity_consumer in self.consumers:
    +325            if hasattr(electricity_consumer, "get_graph"):
    +326                graph.add_subgraph(electricity_consumer.get_graph())
    +327            else:
    +328                graph.add_node(electricity_consumer)
    +329
    +330            graph.add_edge(self.id, electricity_consumer.id)
    +331
    +332        return graph
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + Installation(BaseComponent): + + + +
    + +
    335class Installation(BaseComponent):
    +336    component_type: Literal[ComponentType.INSTALLATION] = ComponentType.INSTALLATION
    +337    user_defined_category: Optional[InstallationUserDefinedCategoryType] = Field(default=None, validate_default=True)
    +338    hydrocarbon_export: Dict[datetime, Expression]
    +339    fuel_consumers: List[
    +340        Annotated[
    +341            Union[GeneratorSet, FuelConsumer, ConsumerSystem],
    +342            Field(discriminator="component_type"),
    +343        ]
    +344    ] = Field(default_factory=list)
    +345    venting_emitters: List[YamlVentingEmitter] = Field(default_factory=list)
    +346
    +347    @property
    +348    def id(self) -> str:
    +349        return generate_id(self.name)
    +350
    +351    _validate_installation_temporal_model = validator("hydrocarbon_export", allow_reuse=True)(validate_temporal_model)
    +352
    +353    _convert_expression_installation = validator("regularity", "hydrocarbon_export", allow_reuse=True, pre=True)(
    +354        convert_expression
    +355    )
    +356
    +357    @field_validator("user_defined_category", mode="before")
    +358    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +359        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +360        if user_defined_category is not None:
    +361            if user_defined_category not in list(InstallationUserDefinedCategoryType):
    +362                name_context_str = ""
    +363                if (name := info.data.get("name")) is not None:
    +364                    name_context_str = f"with the name {name}"
    +365
    +366                raise ValueError(
    +367                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[str(installation_user_defined_category.value) for installation_user_defined_category in InstallationUserDefinedCategoryType]}"
    +368                )
    +369
    +370        return user_defined_category
    +371
    +372    def get_graph(self) -> ComponentGraph:
    +373        graph = ComponentGraph()
    +374        graph.add_node(self)
    +375        for component in [*self.fuel_consumers, *self.venting_emitters]:
    +376            if hasattr(component, "get_graph"):
    +377                graph.add_subgraph(component.get_graph())
    +378            else:
    +379                graph.add_node(component)
    +380
    +381            graph.add_edge(self.id, component.id)
    +382
    +383        return graph
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('user_defined_category', mode='before')
    + + def + check_user_defined_category( cls, user_defined_category, info: pydantic_core.core_schema.ValidationInfo): + + + +
    + +
    357    @field_validator("user_defined_category", mode="before")
    +358    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +359        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +360        if user_defined_category is not None:
    +361            if user_defined_category not in list(InstallationUserDefinedCategoryType):
    +362                name_context_str = ""
    +363                if (name := info.data.get("name")) is not None:
    +364                    name_context_str = f"with the name {name}"
    +365
    +366                raise ValueError(
    +367                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[str(installation_user_defined_category.value) for installation_user_defined_category in InstallationUserDefinedCategoryType]}"
    +368                )
    +369
    +370        return user_defined_category
    +
    + + +

    Provide which value and context to make it easier for user to correct wrt mandatory changes.

    +
    + + +
    +
    + +
    + + def + get_graph(self) -> libecalc.dto.component_graph.ComponentGraph: + + + +
    + +
    372    def get_graph(self) -> ComponentGraph:
    +373        graph = ComponentGraph()
    +374        graph.add_node(self)
    +375        for component in [*self.fuel_consumers, *self.venting_emitters]:
    +376            if hasattr(component, "get_graph"):
    +377                graph.add_subgraph(component.get_graph())
    +378            else:
    +379                graph.add_node(component)
    +380
    +381            graph.add_edge(self.id, component.id)
    +382
    +383        return graph
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + Asset(libecalc.dto.base.Component): + + + +
    + +
    386class Asset(Component):
    +387    @property
    +388    def id(self):
    +389        return generate_id(self.name)
    +390
    +391    component_type: Literal[ComponentType.ASSET] = ComponentType.ASSET
    +392
    +393    name: ComponentNameStr
    +394    installations: List[Installation] = Field(default_factory=list)
    +395
    +396    @property
    +397    def installation_ids(self) -> List[str]:
    +398        return [installation.id for installation in self.installations]
    +399
    +400    def get_component_ids_for_installation_id(self, installation_id: str) -> List[str]:
    +401        installation = self.get_installation(installation_id)
    +402        component_ids = []
    +403        for fuel_consumer in installation.fuel_consumers:
    +404            component_ids.append(fuel_consumer.id)
    +405            if isinstance(fuel_consumer, dto.GeneratorSet):
    +406                for electricity_consumer in fuel_consumer.consumers:
    +407                    component_ids.append(electricity_consumer.id)
    +408
    +409        for emitter in installation.venting_emitters:
    +410            component_ids.append(emitter.id)
    +411        return component_ids
    +412
    +413    def get_installation(self, installation_id: str) -> Installation:
    +414        return next(installation for installation in self.installations if installation.id == installation_id)
    +415
    +416    @model_validator(mode="after")
    +417    def validate_unique_names(self):
    +418        """Ensure unique component names within installation."""
    +419        names = [self.name]
    +420        fuel_types = [dto.FuelType]
    +421        fuel_names = [str]
    +422        for installation in self.installations:
    +423            names.append(installation.name)
    +424            fuel_consumers = installation.fuel_consumers
    +425            venting_emitters = installation.venting_emitters
    +426
    +427            names.extend([venting_emitter.name for venting_emitter in venting_emitters])
    +428            for fuel_consumer in fuel_consumers:
    +429                names.append(fuel_consumer.name)
    +430                if isinstance(fuel_consumer, GeneratorSet):
    +431                    for electricity_consumer in fuel_consumer.consumers:
    +432                        if isinstance(electricity_consumer, ConsumerSystem):
    +433                            for consumer in electricity_consumer.consumers:
    +434                                names.append(consumer.name)
    +435                elif isinstance(fuel_consumer, ConsumerSystem):
    +436                    for consumer in fuel_consumer.consumers:
    +437                        names.append(consumer.name)
    +438                if fuel_consumer.fuel is not None:
    +439                    for fuel_type in fuel_consumer.fuel.values():
    +440                        # Need to verify that it is a different fuel
    +441                        if fuel_type is not None and fuel_type not in fuel_types:
    +442                            fuel_types.append(fuel_type)
    +443                            fuel_names.append(fuel_type.name)
    +444
    +445        duplicated_names = get_duplicates(names)
    +446        duplicated_fuel_names = get_duplicates(fuel_names)
    +447
    +448        if len(duplicated_names) > 0:
    +449            raise ValueError(
    +450                "Component names must be unique. Components include the main model, installations,"
    +451                " generator sets, electricity consumers, fuel consumers, systems and its consumers and direct emitters."
    +452                f" Duplicated names are: {', '.join(duplicated_names)}"
    +453            )
    +454
    +455        if len(duplicated_fuel_names) > 0:
    +456            raise ValueError(
    +457                "Fuel type names must be unique across installations."
    +458                f" Duplicated names are: {', '.join(duplicated_fuel_names)}"
    +459            )
    +460        return self
    +461
    +462    def get_graph(self) -> ComponentGraph:
    +463        graph = ComponentGraph()
    +464        graph.add_node(self)
    +465        for installation in self.installations:
    +466            graph.add_subgraph(installation.get_graph())
    +467            graph.add_edge(self.id, installation.id)
    +468
    +469        return graph
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    + + def + get_component_ids_for_installation_id(self, installation_id: str) -> List[str]: + + + +
    + +
    400    def get_component_ids_for_installation_id(self, installation_id: str) -> List[str]:
    +401        installation = self.get_installation(installation_id)
    +402        component_ids = []
    +403        for fuel_consumer in installation.fuel_consumers:
    +404            component_ids.append(fuel_consumer.id)
    +405            if isinstance(fuel_consumer, dto.GeneratorSet):
    +406                for electricity_consumer in fuel_consumer.consumers:
    +407                    component_ids.append(electricity_consumer.id)
    +408
    +409        for emitter in installation.venting_emitters:
    +410            component_ids.append(emitter.id)
    +411        return component_ids
    +
    + + + + +
    +
    + +
    + + def + get_installation(self, installation_id: str) -> libecalc.dto.components.Installation: + + + +
    + +
    413    def get_installation(self, installation_id: str) -> Installation:
    +414        return next(installation for installation in self.installations if installation.id == installation_id)
    +
    + + + + +
    +
    + +
    +
    @model_validator(mode='after')
    + + def + validate_unique_names(self): + + + +
    + +
    416    @model_validator(mode="after")
    +417    def validate_unique_names(self):
    +418        """Ensure unique component names within installation."""
    +419        names = [self.name]
    +420        fuel_types = [dto.FuelType]
    +421        fuel_names = [str]
    +422        for installation in self.installations:
    +423            names.append(installation.name)
    +424            fuel_consumers = installation.fuel_consumers
    +425            venting_emitters = installation.venting_emitters
    +426
    +427            names.extend([venting_emitter.name for venting_emitter in venting_emitters])
    +428            for fuel_consumer in fuel_consumers:
    +429                names.append(fuel_consumer.name)
    +430                if isinstance(fuel_consumer, GeneratorSet):
    +431                    for electricity_consumer in fuel_consumer.consumers:
    +432                        if isinstance(electricity_consumer, ConsumerSystem):
    +433                            for consumer in electricity_consumer.consumers:
    +434                                names.append(consumer.name)
    +435                elif isinstance(fuel_consumer, ConsumerSystem):
    +436                    for consumer in fuel_consumer.consumers:
    +437                        names.append(consumer.name)
    +438                if fuel_consumer.fuel is not None:
    +439                    for fuel_type in fuel_consumer.fuel.values():
    +440                        # Need to verify that it is a different fuel
    +441                        if fuel_type is not None and fuel_type not in fuel_types:
    +442                            fuel_types.append(fuel_type)
    +443                            fuel_names.append(fuel_type.name)
    +444
    +445        duplicated_names = get_duplicates(names)
    +446        duplicated_fuel_names = get_duplicates(fuel_names)
    +447
    +448        if len(duplicated_names) > 0:
    +449            raise ValueError(
    +450                "Component names must be unique. Components include the main model, installations,"
    +451                " generator sets, electricity consumers, fuel consumers, systems and its consumers and direct emitters."
    +452                f" Duplicated names are: {', '.join(duplicated_names)}"
    +453            )
    +454
    +455        if len(duplicated_fuel_names) > 0:
    +456            raise ValueError(
    +457                "Fuel type names must be unique across installations."
    +458                f" Duplicated names are: {', '.join(duplicated_fuel_names)}"
    +459            )
    +460        return self
    +
    + + +

    Ensure unique component names within installation.

    +
    + + +
    +
    + +
    + + def + get_graph(self) -> libecalc.dto.component_graph.ComponentGraph: + + + +
    + +
    462    def get_graph(self) -> ComponentGraph:
    +463        graph = ComponentGraph()
    +464        graph.add_node(self)
    +465        for installation in self.installations:
    +466            graph.add_subgraph(installation.get_graph())
    +467            graph.add_edge(self.id, installation.id)
    +468
    +469        return graph
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs.html b/docs/about/references/api/libecalc/dto/core_specs.html new file mode 100644 index 0000000000..75c0c28cad --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs.html @@ -0,0 +1,240 @@ + + + + + + + libecalc.dto.core_specs API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/base.html b/docs/about/references/api/libecalc/dto/core_specs/base.html new file mode 100644 index 0000000000..ab9718ee33 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/base.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.dto.core_specs.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.base

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/base/operational_settings.html b/docs/about/references/api/libecalc/dto/core_specs/base/operational_settings.html new file mode 100644 index 0000000000..70fb3a1e3d --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/base/operational_settings.html @@ -0,0 +1,341 @@ + + + + + + + libecalc.dto.core_specs.base.operational_settings API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.base.operational_settings

    + + + + + + +
     1from abc import ABC, abstractmethod
    + 2from datetime import datetime
    + 3
    + 4from typing_extensions import Self
    + 5
    + 6from libecalc.dto.base import EcalcBaseModel
    + 7
    + 8
    + 9class OperationalSettings(ABC, EcalcBaseModel):
    +10    @abstractmethod
    +11    def get_subset_for_timestep(self, timestep: datetime) -> Self:
    +12        ...
    +
    + + +
    +
    + +
    + + class + OperationalSettings(abc.ABC, libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    10class OperationalSettings(ABC, EcalcBaseModel):
    +11    @abstractmethod
    +12    def get_subset_for_timestep(self, timestep: datetime) -> Self:
    +13        ...
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    + +
    +
    @abstractmethod
    + + def + get_subset_for_timestep(self, timestep: datetime.datetime) -> typing_extensions.Self: + + + +
    + +
    11    @abstractmethod
    +12    def get_subset_for_timestep(self, timestep: datetime) -> Self:
    +13        ...
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/compressor.html b/docs/about/references/api/libecalc/dto/core_specs/compressor.html new file mode 100644 index 0000000000..3d996554e2 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/compressor.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.dto.core_specs.compressor API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.compressor

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/compressor/operational_settings.html b/docs/about/references/api/libecalc/dto/core_specs/compressor/operational_settings.html new file mode 100644 index 0000000000..42eac1fee2 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/compressor/operational_settings.html @@ -0,0 +1,394 @@ + + + + + + + libecalc.dto.core_specs.compressor.operational_settings API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.compressor.operational_settings

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from datetime import datetime
    + 4from typing import List
    + 5
    + 6from typing_extensions import Self
    + 7
    + 8from libecalc.common.stream_conditions import TimeSeriesStreamConditions
    + 9from libecalc.dto.core_specs.base.operational_settings import OperationalSettings
    +10
    +11
    +12class CompressorOperationalSettings(OperationalSettings):
    +13    inlet_streams: List[TimeSeriesStreamConditions]
    +14    outlet_stream: TimeSeriesStreamConditions
    +15
    +16    timesteps: List[datetime]
    +17
    +18    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +19        """
    +20        For a given timestep, get the operational settings that is relevant
    +21        for that timestep only. Only valid for timesteps a part of the global timevector.
    +22        :param current_timestep: the timestep must be a part of the global timevector
    +23        :return:
    +24        """
    +25
    +26        return CompressorOperationalSettings(
    +27            inlet_streams=[stream_condition.for_timestep(current_timestep) for stream_condition in self.inlet_streams],
    +28            outlet_stream=self.outlet_stream.for_timestep(current_timestep),
    +29            timesteps=[current_timestep],
    +30        )
    +
    + + +
    +
    + +
    + + class + CompressorOperationalSettings(libecalc.dto.core_specs.base.operational_settings.OperationalSettings): + + + +
    + +
    13class CompressorOperationalSettings(OperationalSettings):
    +14    inlet_streams: List[TimeSeriesStreamConditions]
    +15    outlet_stream: TimeSeriesStreamConditions
    +16
    +17    timesteps: List[datetime]
    +18
    +19    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +20        """
    +21        For a given timestep, get the operational settings that is relevant
    +22        for that timestep only. Only valid for timesteps a part of the global timevector.
    +23        :param current_timestep: the timestep must be a part of the global timevector
    +24        :return:
    +25        """
    +26
    +27        return CompressorOperationalSettings(
    +28            inlet_streams=[stream_condition.for_timestep(current_timestep) for stream_condition in self.inlet_streams],
    +29            outlet_stream=self.outlet_stream.for_timestep(current_timestep),
    +30            timesteps=[current_timestep],
    +31        )
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    + +
    + + def + get_subset_for_timestep(self, current_timestep: datetime.datetime) -> typing_extensions.Self: + + + +
    + +
    19    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +20        """
    +21        For a given timestep, get the operational settings that is relevant
    +22        for that timestep only. Only valid for timesteps a part of the global timevector.
    +23        :param current_timestep: the timestep must be a part of the global timevector
    +24        :return:
    +25        """
    +26
    +27        return CompressorOperationalSettings(
    +28            inlet_streams=[stream_condition.for_timestep(current_timestep) for stream_condition in self.inlet_streams],
    +29            outlet_stream=self.outlet_stream.for_timestep(current_timestep),
    +30            timesteps=[current_timestep],
    +31        )
    +
    + + +

    For a given timestep, get the operational settings that is relevant +for that timestep only. Only valid for timesteps a part of the global timevector.

    + +
    Parameters
    + +
      +
    • current_timestep: the timestep must be a part of the global timevector
    • +
    + +
    Returns
    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/pump.html b/docs/about/references/api/libecalc/dto/core_specs/pump.html new file mode 100644 index 0000000000..a1be5ff613 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/pump.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.dto.core_specs.pump API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.pump

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/pump/operational_settings.html b/docs/about/references/api/libecalc/dto/core_specs/pump/operational_settings.html new file mode 100644 index 0000000000..da7c39608d --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/pump/operational_settings.html @@ -0,0 +1,394 @@ + + + + + + + libecalc.dto.core_specs.pump.operational_settings API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.pump.operational_settings

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from datetime import datetime
    + 4from typing import List
    + 5
    + 6from typing_extensions import Self
    + 7
    + 8from libecalc.common.stream_conditions import TimeSeriesStreamConditions
    + 9from libecalc.dto.core_specs.base.operational_settings import OperationalSettings
    +10
    +11
    +12class PumpOperationalSettings(OperationalSettings):
    +13    inlet_streams: List[TimeSeriesStreamConditions]
    +14    outlet_stream: TimeSeriesStreamConditions
    +15
    +16    timesteps: List[datetime]
    +17
    +18    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +19        """
    +20        For a given timestep, get the operational settings that is relevant
    +21        for that timestep only. Only valid for timesteps a part of the global timevector.
    +22        :param current_timestep: the timestep must be a part of the global timevector
    +23        :return:
    +24        """
    +25
    +26        return PumpOperationalSettings(
    +27            inlet_streams=[stream_condition.for_timestep(current_timestep) for stream_condition in self.inlet_streams],
    +28            outlet_stream=self.outlet_stream.for_timestep(current_timestep),
    +29            timesteps=[current_timestep],
    +30        )
    +
    + + +
    +
    + +
    + + class + PumpOperationalSettings(libecalc.dto.core_specs.base.operational_settings.OperationalSettings): + + + +
    + +
    13class PumpOperationalSettings(OperationalSettings):
    +14    inlet_streams: List[TimeSeriesStreamConditions]
    +15    outlet_stream: TimeSeriesStreamConditions
    +16
    +17    timesteps: List[datetime]
    +18
    +19    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +20        """
    +21        For a given timestep, get the operational settings that is relevant
    +22        for that timestep only. Only valid for timesteps a part of the global timevector.
    +23        :param current_timestep: the timestep must be a part of the global timevector
    +24        :return:
    +25        """
    +26
    +27        return PumpOperationalSettings(
    +28            inlet_streams=[stream_condition.for_timestep(current_timestep) for stream_condition in self.inlet_streams],
    +29            outlet_stream=self.outlet_stream.for_timestep(current_timestep),
    +30            timesteps=[current_timestep],
    +31        )
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    + +
    + + def + get_subset_for_timestep(self, current_timestep: datetime.datetime) -> typing_extensions.Self: + + + +
    + +
    19    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +20        """
    +21        For a given timestep, get the operational settings that is relevant
    +22        for that timestep only. Only valid for timesteps a part of the global timevector.
    +23        :param current_timestep: the timestep must be a part of the global timevector
    +24        :return:
    +25        """
    +26
    +27        return PumpOperationalSettings(
    +28            inlet_streams=[stream_condition.for_timestep(current_timestep) for stream_condition in self.inlet_streams],
    +29            outlet_stream=self.outlet_stream.for_timestep(current_timestep),
    +30            timesteps=[current_timestep],
    +31        )
    +
    + + +

    For a given timestep, get the operational settings that is relevant +for that timestep only. Only valid for timesteps a part of the global timevector.

    + +
    Parameters
    + +
      +
    • current_timestep: the timestep must be a part of the global timevector
    • +
    + +
    Returns
    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/system.html b/docs/about/references/api/libecalc/dto/core_specs/system.html new file mode 100644 index 0000000000..4fff21cb13 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/system.html @@ -0,0 +1,233 @@ + + + + + + + libecalc.dto.core_specs.system API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.system

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/ecalc_model.html b/docs/about/references/api/libecalc/dto/ecalc_model.html new file mode 100644 index 0000000000..7d2723c05a --- /dev/null +++ b/docs/about/references/api/libecalc/dto/ecalc_model.html @@ -0,0 +1,341 @@ + + + + + + + libecalc.dto.ecalc_model API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.ecalc_model

    + + + + + + +
     1from typing import List
    + 2
    + 3from pydantic import Field
    + 4
    + 5from libecalc.dto.base import EcalcBaseModel
    + 6
    + 7
    + 8class SchemaSettings(EcalcBaseModel):
    + 9    uri: str
    +10    fileMatch: List[str]
    +11    ecalc_schema: dict = Field(alias="schema")
    +
    + + +
    +
    + +
    + + class + SchemaSettings(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
     9class SchemaSettings(EcalcBaseModel):
    +10    uri: str
    +11    fileMatch: List[str]
    +12    ecalc_schema: dict = Field(alias="schema")
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/emission.html b/docs/about/references/api/libecalc/dto/emission.html new file mode 100644 index 0000000000..efcd7f4491 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/emission.html @@ -0,0 +1,379 @@ + + + + + + + libecalc.dto.emission API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.emission

    + + + + + + +
     1from pydantic import field_validator, validator
    + 2
    + 3from libecalc.dto.base import EcalcBaseModel
    + 4from libecalc.dto.utils.validators import EmissionNameStr, convert_expression
    + 5from libecalc.expression import Expression
    + 6
    + 7
    + 8class Emission(EcalcBaseModel):
    + 9    name: EmissionNameStr
    +10    factor: Expression  # Conversion factor for kg/day, i.e. fuel rate * factor -> kg/day
    +11
    +12    _convert_expression = validator("factor", allow_reuse=True, pre=True)(convert_expression)
    +13
    +14    @field_validator("name", mode="before")
    +15    @classmethod
    +16    def convert_name(cls, name):
    +17        return name.lower()
    +
    + + +
    +
    + +
    + + class + Emission(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
     9class Emission(EcalcBaseModel):
    +10    name: EmissionNameStr
    +11    factor: Expression  # Conversion factor for kg/day, i.e. fuel rate * factor -> kg/day
    +12
    +13    _convert_expression = validator("factor", allow_reuse=True, pre=True)(convert_expression)
    +14
    +15    @field_validator("name", mode="before")
    +16    @classmethod
    +17    def convert_name(cls, name):
    +18        return name.lower()
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('name', mode='before')
    +
    @classmethod
    + + def + convert_name(cls, name): + + + +
    + +
    15    @field_validator("name", mode="before")
    +16    @classmethod
    +17    def convert_name(cls, name):
    +18        return name.lower()
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models.html b/docs/about/references/api/libecalc/dto/models.html new file mode 100644 index 0000000000..612c8e6304 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models.html @@ -0,0 +1,332 @@ + + + + + + + libecalc.dto.models API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models

    + + + + + + +
     1from typing import Union
    + 2
    + 3from pydantic import Field
    + 4from typing_extensions import Annotated
    + 5
    + 6from libecalc.dto.models.compressor import (
    + 7    CompressorChart,
    + 8    CompressorConsumerFunction,
    + 9    CompressorModel,
    +10    CompressorSampled,
    +11    CompressorStage,
    +12    CompressorTrainSimplifiedWithKnownStages,
    +13    CompressorTrainSimplifiedWithUnknownStages,
    +14    CompressorWithTurbine,
    +15    FluidComposition,
    +16    FluidModel,
    +17    FluidStream,
    +18    InterstagePressureControl,
    +19    MultipleStreamsAndPressureStream,
    +20    MultipleStreamsCompressorStage,
    +21    SingleSpeedCompressorTrain,
    +22    VariableSpeedCompressorTrain,
    +23    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +24)
    +25
    +26from .base import ConsumerFunction, EnergyModel
    +27from .chart import (
    +28    ChartCurve,
    +29    GenericChartFromDesignPoint,
    +30    GenericChartFromInput,
    +31    SingleSpeedChart,
    +32    VariableSpeedChart,
    +33)
    +34from .consumer_system import (
    +35    CompressorSystemCompressor,
    +36    CompressorSystemConsumerFunction,
    +37    CompressorSystemOperationalSetting,
    +38    PumpSystemConsumerFunction,
    +39    PumpSystemOperationalSetting,
    +40    PumpSystemPump,
    +41    SystemOperationalSetting,
    +42)
    +43from .direct import DirectConsumerFunction
    +44from .generator_set import GeneratorSetSampled
    +45from .pump import PumpConsumerFunction, PumpModel
    +46from .sampled import EnergyModelSampled
    +47from .tabulated import TabulatedConsumerFunction, TabulatedData, Variables
    +48from .turbine import Turbine
    +49
    +50ElectricEnergyUsageModel = Annotated[
    +51    Union[
    +52        DirectConsumerFunction,
    +53        CompressorConsumerFunction,
    +54        CompressorSystemConsumerFunction,
    +55        PumpConsumerFunction,
    +56        TabulatedConsumerFunction,
    +57        PumpSystemConsumerFunction,
    +58    ],
    +59    Field(discriminator="typ"),
    +60]
    +61
    +62FuelEnergyUsageModel = Annotated[
    +63    Union[
    +64        DirectConsumerFunction,
    +65        CompressorConsumerFunction,
    +66        CompressorSystemConsumerFunction,
    +67        TabulatedConsumerFunction,
    +68    ],
    +69    Field(discriminator="typ"),
    +70]
    +71
    +72EnergyUsageModel = Annotated[
    +73    Union[
    +74        FuelEnergyUsageModel,
    +75        ElectricEnergyUsageModel,
    +76    ],
    +77    Field(discriminator="typ"),
    +78]
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/base.html b/docs/about/references/api/libecalc/dto/models/base.html new file mode 100644 index 0000000000..6e3ce71571 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/base.html @@ -0,0 +1,423 @@ + + + + + + + libecalc.dto.models.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.base

    + + + + + + +
     1from typing import Optional
    + 2
    + 3from pydantic import ConfigDict, validator
    + 4
    + 5from libecalc.dto.base import EcalcBaseModel
    + 6from libecalc.dto.types import ConsumerType, EnergyUsageType
    + 7from libecalc.dto.utils.validators import convert_expression
    + 8from libecalc.expression import Expression
    + 9
    +10
    +11class ConsumerFunction(EcalcBaseModel):
    +12    typ: ConsumerType
    +13    energy_usage_type: EnergyUsageType
    +14    condition: Optional[Expression] = None
    +15
    +16    _convert_condition_to_expression = validator("condition", allow_reuse=True, pre=True)(convert_expression)
    +17    model_config = ConfigDict(use_enum_values=True)
    +18
    +19
    +20class EnergyModel(EcalcBaseModel):
    +21    """Generic/template/protocol. Only for sub classing, not direct use."""
    +22
    +23    energy_usage_adjustment_constant: float
    +24    energy_usage_adjustment_factor: float
    +25    model_config = ConfigDict(use_enum_values=True)
    +
    + + +
    +
    + +
    + + class + ConsumerFunction(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    12class ConsumerFunction(EcalcBaseModel):
    +13    typ: ConsumerType
    +14    energy_usage_type: EnergyUsageType
    +15    condition: Optional[Expression] = None
    +16
    +17    _convert_condition_to_expression = validator("condition", allow_reuse=True, pre=True)(convert_expression)
    +18    model_config = ConfigDict(use_enum_values=True)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + EnergyModel(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    21class EnergyModel(EcalcBaseModel):
    +22    """Generic/template/protocol. Only for sub classing, not direct use."""
    +23
    +24    energy_usage_adjustment_constant: float
    +25    energy_usage_adjustment_factor: float
    +26    model_config = ConfigDict(use_enum_values=True)
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/chart.html b/docs/about/references/api/libecalc/dto/models/chart.html new file mode 100644 index 0000000000..c08359a256 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/chart.html @@ -0,0 +1,947 @@ + + + + + + + libecalc.dto.models.chart API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.chart

    + + + + + + +
      1from typing import List, Literal, Optional
    +  2
    +  3import numpy as np
    +  4from pydantic import AfterValidator, Field, field_validator, model_validator
    +  5from typing_extensions import Annotated, Self
    +  6
    +  7from libecalc.common.logger import logger
    +  8from libecalc.common.math.numbers import Numbers
    +  9from libecalc.dto.base import EcalcBaseModel
    + 10from libecalc.dto.types import ChartType
    + 11
    + 12FloatWithPrecision = Annotated[float, AfterValidator(lambda v: float(Numbers.format_to_precision(v, precision=6)))]
    + 13
    + 14
    + 15class ChartCurve(EcalcBaseModel):
    + 16    speed_rpm: FloatWithPrecision = Field(..., ge=0)
    + 17    rate_actual_m3_hour: List[Annotated[FloatWithPrecision, Field(ge=0)]]
    + 18    polytropic_head_joule_per_kg: List[Annotated[FloatWithPrecision, Field(ge=0)]]
    + 19    efficiency_fraction: List[Annotated[FloatWithPrecision, Field(ge=0, le=1)]]
    + 20
    + 21    @model_validator(mode="after")
    + 22    def validate_equal_lengths_and_sort(self) -> Self:
    + 23        rate = self.rate_actual_m3_hour
    + 24        head = self.polytropic_head_joule_per_kg
    + 25        efficiency = self.efficiency_fraction
    + 26
    + 27        if not len(rate) == len(head) == len(efficiency):
    + 28            raise ValueError("All chart curve data must have equal number of points")
    + 29
    + 30        if not len(rate) > 1:
    + 31            raise ValueError("A chart curve can not be defined by a single point. At least two points must be given.")
    + 32
    + 33        # Sort all values by rate
    + 34        array = np.asarray([rate, head, efficiency]).T
    + 35        array_sorted = array[array[:, 0].argsort()]
    + 36
    + 37        self.rate_actual_m3_hour = list(array_sorted[:, 0])
    + 38        self.polytropic_head_joule_per_kg = list(array_sorted[:, 1])
    + 39        self.efficiency_fraction = list(array_sorted[:, 2])
    + 40
    + 41        if len(set(self.rate_actual_m3_hour)) != len(self.rate_actual_m3_hour):
    + 42            duplicate_rates = {x for x in self.rate_actual_m3_hour if self.rate_actual_m3_hour.count(x) > 1}
    + 43            logger.warning(f"Duplicate rate values in ChartCurve: {duplicate_rates}")
    + 44
    + 45        if not np.all(np.diff(np.asarray(self.polytropic_head_joule_per_kg)) <= 0):
    + 46            heads = self.polytropic_head_joule_per_kg
    + 47            rates = self.rate_actual_m3_hour
    + 48            logger.warning(
    + 49                "Head is increasing with rate in a ChartCurve."
    + 50                " Interpolations are based on the assumption of an inverse monotonic function between head and rate."
    + 51                f" Given head values: {heads}"
    + 52                f" Given rate values: {rates}"
    + 53            )
    + 54
    + 55        return self
    + 56
    + 57    @property
    + 58    def rate(self) -> List[float]:
    + 59        return self.rate_actual_m3_hour
    + 60
    + 61    @property
    + 62    def head(self) -> List[float]:
    + 63        return self.polytropic_head_joule_per_kg
    + 64
    + 65    @property
    + 66    def efficiency(self) -> List[float]:
    + 67        return self.efficiency_fraction
    + 68
    + 69    @property
    + 70    def speed(self) -> float:
    + 71        return self.speed_rpm
    + 72
    + 73
    + 74class SingleSpeedChart(ChartCurve):
    + 75    typ: Literal[ChartType.SINGLE_SPEED] = ChartType.SINGLE_SPEED
    + 76
    + 77
    + 78class VariableSpeedChart(EcalcBaseModel):
    + 79    typ: Literal[ChartType.VARIABLE_SPEED] = ChartType.VARIABLE_SPEED
    + 80    curves: List[ChartCurve]
    + 81    control_margin: Optional[FloatWithPrecision] = None  # Todo: Raise warning if this is used in an un-supported model.
    + 82    design_rate: Optional[FloatWithPrecision] = Field(None, ge=0)
    + 83    design_head: Optional[FloatWithPrecision] = Field(None, ge=0)
    + 84
    + 85    @field_validator("curves")
    + 86    def sort_chart_curves_by_speed(cls, curves: List[ChartCurve]) -> List[ChartCurve]:
    + 87        """Note: It is essential that the sort the curves by speed in order to set up the interpolations correctly."""
    + 88        return sorted(curves, key=lambda x: x.speed)
    + 89
    + 90    @property
    + 91    def min_speed(self) -> float:
    + 92        return min([curve.speed for curve in self.curves])
    + 93
    + 94    @property
    + 95    def max_speed(self) -> float:
    + 96        return max([curve.speed for curve in self.curves])
    + 97
    + 98
    + 99class GenericChartFromDesignPoint(EcalcBaseModel):
    +100    typ: Literal[ChartType.GENERIC_FROM_DESIGN_POINT] = ChartType.GENERIC_FROM_DESIGN_POINT
    +101    polytropic_efficiency_fraction: float = Field(..., ge=0, le=1)
    +102    design_rate_actual_m3_per_hour: float = Field(..., ge=0)
    +103    design_polytropic_head_J_per_kg: float = Field(..., ge=0)
    +104
    +105
    +106class GenericChartFromInput(EcalcBaseModel):
    +107    typ: Literal[ChartType.GENERIC_FROM_INPUT] = ChartType.GENERIC_FROM_INPUT
    +108    polytropic_efficiency_fraction: float = Field(..., ge=0, le=1)
    +
    + + +
    +
    + +
    + + class + ChartCurve(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    16class ChartCurve(EcalcBaseModel):
    +17    speed_rpm: FloatWithPrecision = Field(..., ge=0)
    +18    rate_actual_m3_hour: List[Annotated[FloatWithPrecision, Field(ge=0)]]
    +19    polytropic_head_joule_per_kg: List[Annotated[FloatWithPrecision, Field(ge=0)]]
    +20    efficiency_fraction: List[Annotated[FloatWithPrecision, Field(ge=0, le=1)]]
    +21
    +22    @model_validator(mode="after")
    +23    def validate_equal_lengths_and_sort(self) -> Self:
    +24        rate = self.rate_actual_m3_hour
    +25        head = self.polytropic_head_joule_per_kg
    +26        efficiency = self.efficiency_fraction
    +27
    +28        if not len(rate) == len(head) == len(efficiency):
    +29            raise ValueError("All chart curve data must have equal number of points")
    +30
    +31        if not len(rate) > 1:
    +32            raise ValueError("A chart curve can not be defined by a single point. At least two points must be given.")
    +33
    +34        # Sort all values by rate
    +35        array = np.asarray([rate, head, efficiency]).T
    +36        array_sorted = array[array[:, 0].argsort()]
    +37
    +38        self.rate_actual_m3_hour = list(array_sorted[:, 0])
    +39        self.polytropic_head_joule_per_kg = list(array_sorted[:, 1])
    +40        self.efficiency_fraction = list(array_sorted[:, 2])
    +41
    +42        if len(set(self.rate_actual_m3_hour)) != len(self.rate_actual_m3_hour):
    +43            duplicate_rates = {x for x in self.rate_actual_m3_hour if self.rate_actual_m3_hour.count(x) > 1}
    +44            logger.warning(f"Duplicate rate values in ChartCurve: {duplicate_rates}")
    +45
    +46        if not np.all(np.diff(np.asarray(self.polytropic_head_joule_per_kg)) <= 0):
    +47            heads = self.polytropic_head_joule_per_kg
    +48            rates = self.rate_actual_m3_hour
    +49            logger.warning(
    +50                "Head is increasing with rate in a ChartCurve."
    +51                " Interpolations are based on the assumption of an inverse monotonic function between head and rate."
    +52                f" Given head values: {heads}"
    +53                f" Given rate values: {rates}"
    +54            )
    +55
    +56        return self
    +57
    +58    @property
    +59    def rate(self) -> List[float]:
    +60        return self.rate_actual_m3_hour
    +61
    +62    @property
    +63    def head(self) -> List[float]:
    +64        return self.polytropic_head_joule_per_kg
    +65
    +66    @property
    +67    def efficiency(self) -> List[float]:
    +68        return self.efficiency_fraction
    +69
    +70    @property
    +71    def speed(self) -> float:
    +72        return self.speed_rpm
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @model_validator(mode='after')
    + + def + validate_equal_lengths_and_sort(self) -> typing_extensions.Self: + + + +
    + +
    22    @model_validator(mode="after")
    +23    def validate_equal_lengths_and_sort(self) -> Self:
    +24        rate = self.rate_actual_m3_hour
    +25        head = self.polytropic_head_joule_per_kg
    +26        efficiency = self.efficiency_fraction
    +27
    +28        if not len(rate) == len(head) == len(efficiency):
    +29            raise ValueError("All chart curve data must have equal number of points")
    +30
    +31        if not len(rate) > 1:
    +32            raise ValueError("A chart curve can not be defined by a single point. At least two points must be given.")
    +33
    +34        # Sort all values by rate
    +35        array = np.asarray([rate, head, efficiency]).T
    +36        array_sorted = array[array[:, 0].argsort()]
    +37
    +38        self.rate_actual_m3_hour = list(array_sorted[:, 0])
    +39        self.polytropic_head_joule_per_kg = list(array_sorted[:, 1])
    +40        self.efficiency_fraction = list(array_sorted[:, 2])
    +41
    +42        if len(set(self.rate_actual_m3_hour)) != len(self.rate_actual_m3_hour):
    +43            duplicate_rates = {x for x in self.rate_actual_m3_hour if self.rate_actual_m3_hour.count(x) > 1}
    +44            logger.warning(f"Duplicate rate values in ChartCurve: {duplicate_rates}")
    +45
    +46        if not np.all(np.diff(np.asarray(self.polytropic_head_joule_per_kg)) <= 0):
    +47            heads = self.polytropic_head_joule_per_kg
    +48            rates = self.rate_actual_m3_hour
    +49            logger.warning(
    +50                "Head is increasing with rate in a ChartCurve."
    +51                " Interpolations are based on the assumption of an inverse monotonic function between head and rate."
    +52                f" Given head values: {heads}"
    +53                f" Given rate values: {rates}"
    +54            )
    +55
    +56        return self
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + SingleSpeedChart(ChartCurve): + + + +
    + +
    75class SingleSpeedChart(ChartCurve):
    +76    typ: Literal[ChartType.SINGLE_SPEED] = ChartType.SINGLE_SPEED
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + VariableSpeedChart(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    79class VariableSpeedChart(EcalcBaseModel):
    +80    typ: Literal[ChartType.VARIABLE_SPEED] = ChartType.VARIABLE_SPEED
    +81    curves: List[ChartCurve]
    +82    control_margin: Optional[FloatWithPrecision] = None  # Todo: Raise warning if this is used in an un-supported model.
    +83    design_rate: Optional[FloatWithPrecision] = Field(None, ge=0)
    +84    design_head: Optional[FloatWithPrecision] = Field(None, ge=0)
    +85
    +86    @field_validator("curves")
    +87    def sort_chart_curves_by_speed(cls, curves: List[ChartCurve]) -> List[ChartCurve]:
    +88        """Note: It is essential that the sort the curves by speed in order to set up the interpolations correctly."""
    +89        return sorted(curves, key=lambda x: x.speed)
    +90
    +91    @property
    +92    def min_speed(self) -> float:
    +93        return min([curve.speed for curve in self.curves])
    +94
    +95    @property
    +96    def max_speed(self) -> float:
    +97        return max([curve.speed for curve in self.curves])
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('curves')
    + + def + sort_chart_curves_by_speed( cls, curves: List[libecalc.dto.models.chart.ChartCurve]) -> List[libecalc.dto.models.chart.ChartCurve]: + + + +
    + +
    86    @field_validator("curves")
    +87    def sort_chart_curves_by_speed(cls, curves: List[ChartCurve]) -> List[ChartCurve]:
    +88        """Note: It is essential that the sort the curves by speed in order to set up the interpolations correctly."""
    +89        return sorted(curves, key=lambda x: x.speed)
    +
    + + +

    Note: It is essential that the sort the curves by speed in order to set up the interpolations correctly.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + GenericChartFromDesignPoint(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    100class GenericChartFromDesignPoint(EcalcBaseModel):
    +101    typ: Literal[ChartType.GENERIC_FROM_DESIGN_POINT] = ChartType.GENERIC_FROM_DESIGN_POINT
    +102    polytropic_efficiency_fraction: float = Field(..., ge=0, le=1)
    +103    design_rate_actual_m3_per_hour: float = Field(..., ge=0)
    +104    design_polytropic_head_J_per_kg: float = Field(..., ge=0)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + GenericChartFromInput(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    107class GenericChartFromInput(EcalcBaseModel):
    +108    typ: Literal[ChartType.GENERIC_FROM_INPUT] = ChartType.GENERIC_FROM_INPUT
    +109    polytropic_efficiency_fraction: float = Field(..., ge=0, le=1)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor.html b/docs/about/references/api/libecalc/dto/models/compressor.html new file mode 100644 index 0000000000..ff82c1c93d --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor.html @@ -0,0 +1,283 @@ + + + + + + + libecalc.dto.models.compressor API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor

    + + + + + + +
     1from typing import Union
    + 2
    + 3from .base import CompressorConsumerFunction, CompressorWithTurbine
    + 4from .chart import CompressorChart
    + 5from .fluid import (
    + 6    FluidComposition,
    + 7    FluidModel,
    + 8    FluidStream,
    + 9    MultipleStreamsAndPressureStream,
    +10)
    +11from .sampled import CompressorSampled
    +12from .stage import (
    +13    CompressorStage,
    +14    InterstagePressureControl,
    +15    MultipleStreamsCompressorStage,
    +16)
    +17from .train import (
    +18    CompressorTrainSimplifiedWithKnownStages,
    +19    CompressorTrainSimplifiedWithUnknownStages,
    +20    SingleSpeedCompressorTrain,
    +21    VariableSpeedCompressorTrain,
    +22    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +23)
    +24
    +25CompressorModel = Union[
    +26    CompressorSampled,
    +27    CompressorTrainSimplifiedWithUnknownStages,
    +28    CompressorTrainSimplifiedWithKnownStages,
    +29    CompressorWithTurbine,
    +30    VariableSpeedCompressorTrain,
    +31    SingleSpeedCompressorTrain,
    +32    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +33]
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/base.html b/docs/about/references/api/libecalc/dto/models/compressor/base.html new file mode 100644 index 0000000000..f17f6e52c7 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/base.html @@ -0,0 +1,489 @@ + + + + + + + libecalc.dto.models.compressor.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.base

    + + + + + + +
     1from typing import List, Literal, Optional, Union
    + 2
    + 3from pydantic import Field, validator
    + 4
    + 5from libecalc.dto.models.base import ConsumerFunction, EnergyModel
    + 6from libecalc.dto.models.compressor.sampled import CompressorSampled
    + 7from libecalc.dto.models.compressor.train import (
    + 8    CompressorTrainSimplifiedWithKnownStages,
    + 9    CompressorTrainSimplifiedWithUnknownStages,
    +10    SingleSpeedCompressorTrain,
    +11    VariableSpeedCompressorTrain,
    +12    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +13)
    +14from libecalc.dto.models.turbine import Turbine
    +15from libecalc.dto.types import ConsumerType, EnergyModelType
    +16from libecalc.dto.utils.validators import convert_expression, convert_expressions
    +17from libecalc.expression import Expression
    +18
    +19
    +20class CompressorWithTurbine(EnergyModel):
    +21    typ: Literal[EnergyModelType.COMPRESSOR_WITH_TURBINE] = EnergyModelType.COMPRESSOR_WITH_TURBINE
    +22    compressor_train: Union[
    +23        CompressorSampled,
    +24        CompressorTrainSimplifiedWithKnownStages,
    +25        CompressorTrainSimplifiedWithUnknownStages,
    +26        SingleSpeedCompressorTrain,
    +27        VariableSpeedCompressorTrain,
    +28        VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +29    ] = Field(..., discriminator="typ")
    +30    turbine: Turbine
    +31
    +32
    +33CompressorModel = Union[
    +34    CompressorSampled,
    +35    CompressorTrainSimplifiedWithUnknownStages,
    +36    CompressorTrainSimplifiedWithKnownStages,
    +37    CompressorWithTurbine,
    +38    VariableSpeedCompressorTrain,
    +39    SingleSpeedCompressorTrain,
    +40    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +41]
    +42
    +43
    +44class CompressorConsumerFunction(ConsumerFunction):
    +45    typ: Literal[ConsumerType.COMPRESSOR] = ConsumerType.COMPRESSOR
    +46    power_loss_factor: Optional[Expression] = None
    +47    model: CompressorModel = Field(..., discriminator="typ")
    +48    rate_standard_m3_day: Union[Expression, List[Expression]]
    +49    suction_pressure: Optional[Expression] = None
    +50    discharge_pressure: Optional[Expression] = None
    +51    interstage_control_pressure: Optional[Expression] = None
    +52    # Todo: add pressure_control_first_part, pressure_control_last_part and stage_number_interstage_pressure
    +53    # TODO: validate power loss factor wrt energy usage type
    +54    # validate energy function has the same energy_usage_type
    +55
    +56    _convert_expressions = validator(
    +57        "suction_pressure",
    +58        "discharge_pressure",
    +59        "power_loss_factor",
    +60        "interstage_control_pressure",
    +61        allow_reuse=True,
    +62        pre=True,
    +63    )(convert_expression)
    +64    _convert_rate_expressions = validator(
    +65        "rate_standard_m3_day",
    +66        allow_reuse=True,
    +67        pre=True,
    +68    )(convert_expressions)
    +
    + + +
    +
    + +
    + + class + CompressorWithTurbine(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    21class CompressorWithTurbine(EnergyModel):
    +22    typ: Literal[EnergyModelType.COMPRESSOR_WITH_TURBINE] = EnergyModelType.COMPRESSOR_WITH_TURBINE
    +23    compressor_train: Union[
    +24        CompressorSampled,
    +25        CompressorTrainSimplifiedWithKnownStages,
    +26        CompressorTrainSimplifiedWithUnknownStages,
    +27        SingleSpeedCompressorTrain,
    +28        VariableSpeedCompressorTrain,
    +29        VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +30    ] = Field(..., discriminator="typ")
    +31    turbine: Turbine
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    45class CompressorConsumerFunction(ConsumerFunction):
    +46    typ: Literal[ConsumerType.COMPRESSOR] = ConsumerType.COMPRESSOR
    +47    power_loss_factor: Optional[Expression] = None
    +48    model: CompressorModel = Field(..., discriminator="typ")
    +49    rate_standard_m3_day: Union[Expression, List[Expression]]
    +50    suction_pressure: Optional[Expression] = None
    +51    discharge_pressure: Optional[Expression] = None
    +52    interstage_control_pressure: Optional[Expression] = None
    +53    # Todo: add pressure_control_first_part, pressure_control_last_part and stage_number_interstage_pressure
    +54    # TODO: validate power loss factor wrt energy usage type
    +55    # validate energy function has the same energy_usage_type
    +56
    +57    _convert_expressions = validator(
    +58        "suction_pressure",
    +59        "discharge_pressure",
    +60        "power_loss_factor",
    +61        "interstage_control_pressure",
    +62        allow_reuse=True,
    +63        pre=True,
    +64    )(convert_expression)
    +65    _convert_rate_expressions = validator(
    +66        "rate_standard_m3_day",
    +67        allow_reuse=True,
    +68        pre=True,
    +69    )(convert_expressions)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/chart.html b/docs/about/references/api/libecalc/dto/models/compressor/chart.html new file mode 100644 index 0000000000..c55bc495cc --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/chart.html @@ -0,0 +1,262 @@ + + + + + + + libecalc.dto.models.compressor.chart API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.chart

    + + + + + + +
     1from typing import Union
    + 2
    + 3from pydantic import Field
    + 4from typing_extensions import Annotated
    + 5
    + 6from libecalc.dto.models.chart import (
    + 7    GenericChartFromDesignPoint,
    + 8    GenericChartFromInput,
    + 9    SingleSpeedChart,
    +10    VariableSpeedChart,
    +11)
    +12
    +13CompressorChart = Annotated[
    +14    Union[
    +15        GenericChartFromInput,
    +16        GenericChartFromDesignPoint,
    +17        VariableSpeedChart,
    +18        SingleSpeedChart,
    +19    ],
    +20    Field(discriminator="typ"),
    +21]
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/fluid.html b/docs/about/references/api/libecalc/dto/models/compressor/fluid.html new file mode 100644 index 0000000000..417cc793ac --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/fluid.html @@ -0,0 +1,762 @@ + + + + + + + libecalc.dto.models.compressor.fluid API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.fluid

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from typing import Optional
    + 4
    + 5from pydantic import Field, model_validator
    + 6
    + 7from libecalc.dto.base import EcalcBaseModel
    + 8from libecalc.dto.types import EoSModel, FluidStreamType
    + 9
    +10
    +11class FluidComposition(EcalcBaseModel):
    +12    water: float = Field(0.0, ge=0.0)
    +13    nitrogen: float = Field(0.0, ge=0.0)
    +14    CO2: float = Field(0.0, ge=0.0)
    +15    methane: float = Field(0.0, ge=0.0)
    +16    ethane: float = Field(0.0, ge=0.0)
    +17    propane: float = Field(0.0, ge=0.0)
    +18    i_butane: float = Field(0.0, ge=0.0)
    +19    n_butane: float = Field(0.0, ge=0.0)
    +20    i_pentane: float = Field(0.0, ge=0.0)
    +21    n_pentane: float = Field(0.0, ge=0.0)
    +22    n_hexane: float = Field(0.0, ge=0.0)
    +23
    +24
    +25class FluidModel(EcalcBaseModel):
    +26    eos_model: EoSModel
    +27    composition: FluidComposition
    +28
    +29
    +30class FluidStream(FluidModel):
    +31    pressure_bara: float
    +32    temperature_kelvin: float
    +33    density_kg_per_m3: float
    +34    kappa: float
    +35    z: float
    +36
    +37    @classmethod
    +38    def from_fluid_domain_object(cls, fluid_stream) -> FluidStream:
    +39        return cls(
    +40            eos_model=fluid_stream.fluid_model.eos_model,
    +41            composition=fluid_stream.fluid_model.composition,
    +42            pressure_bara=fluid_stream.pressure_bara,
    +43            temperature_kelvin=fluid_stream.temperature_kelvin,
    +44            density_kg_per_m3=fluid_stream.density,
    +45            kappa=fluid_stream.kappa,
    +46            z=fluid_stream.z,
    +47        )
    +48
    +49
    +50class MultipleStreamsAndPressureStream(EcalcBaseModel):
    +51    name: str
    +52    typ: FluidStreamType
    +53    fluid_model: Optional[FluidModel] = None
    +54
    +55    @model_validator(mode="after")
    +56    def validate_stream(self):
    +57        stream_name, stream_type, stream_fluid_model = (
    +58            self.name,
    +59            self.typ,
    +60            self.fluid_model,
    +61        )
    +62        if stream_type == FluidStreamType.INGOING and not isinstance(stream_fluid_model, FluidModel):
    +63            raise ValueError(f"Stream {stream_name} is of type {stream_type} and needs a fluid model to be defined")
    +64        if stream_type == FluidStreamType.OUTGOING and isinstance(stream_fluid_model, FluidModel):
    +65            raise ValueError(f"Stream {stream_name} is of type {stream_type} and should not have a fluid model defined")
    +66        return self
    +
    + + +
    +
    + +
    + + class + FluidComposition(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    12class FluidComposition(EcalcBaseModel):
    +13    water: float = Field(0.0, ge=0.0)
    +14    nitrogen: float = Field(0.0, ge=0.0)
    +15    CO2: float = Field(0.0, ge=0.0)
    +16    methane: float = Field(0.0, ge=0.0)
    +17    ethane: float = Field(0.0, ge=0.0)
    +18    propane: float = Field(0.0, ge=0.0)
    +19    i_butane: float = Field(0.0, ge=0.0)
    +20    n_butane: float = Field(0.0, ge=0.0)
    +21    i_pentane: float = Field(0.0, ge=0.0)
    +22    n_pentane: float = Field(0.0, ge=0.0)
    +23    n_hexane: float = Field(0.0, ge=0.0)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + FluidModel(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    26class FluidModel(EcalcBaseModel):
    +27    eos_model: EoSModel
    +28    composition: FluidComposition
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + FluidStream(FluidModel): + + + +
    + +
    31class FluidStream(FluidModel):
    +32    pressure_bara: float
    +33    temperature_kelvin: float
    +34    density_kg_per_m3: float
    +35    kappa: float
    +36    z: float
    +37
    +38    @classmethod
    +39    def from_fluid_domain_object(cls, fluid_stream) -> FluidStream:
    +40        return cls(
    +41            eos_model=fluid_stream.fluid_model.eos_model,
    +42            composition=fluid_stream.fluid_model.composition,
    +43            pressure_bara=fluid_stream.pressure_bara,
    +44            temperature_kelvin=fluid_stream.temperature_kelvin,
    +45            density_kg_per_m3=fluid_stream.density,
    +46            kappa=fluid_stream.kappa,
    +47            z=fluid_stream.z,
    +48        )
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @classmethod
    + + def + from_fluid_domain_object(cls, fluid_stream) -> libecalc.dto.models.compressor.fluid.FluidStream: + + + +
    + +
    38    @classmethod
    +39    def from_fluid_domain_object(cls, fluid_stream) -> FluidStream:
    +40        return cls(
    +41            eos_model=fluid_stream.fluid_model.eos_model,
    +42            composition=fluid_stream.fluid_model.composition,
    +43            pressure_bara=fluid_stream.pressure_bara,
    +44            temperature_kelvin=fluid_stream.temperature_kelvin,
    +45            density_kg_per_m3=fluid_stream.density,
    +46            kappa=fluid_stream.kappa,
    +47            z=fluid_stream.z,
    +48        )
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + MultipleStreamsAndPressureStream(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    51class MultipleStreamsAndPressureStream(EcalcBaseModel):
    +52    name: str
    +53    typ: FluidStreamType
    +54    fluid_model: Optional[FluidModel] = None
    +55
    +56    @model_validator(mode="after")
    +57    def validate_stream(self):
    +58        stream_name, stream_type, stream_fluid_model = (
    +59            self.name,
    +60            self.typ,
    +61            self.fluid_model,
    +62        )
    +63        if stream_type == FluidStreamType.INGOING and not isinstance(stream_fluid_model, FluidModel):
    +64            raise ValueError(f"Stream {stream_name} is of type {stream_type} and needs a fluid model to be defined")
    +65        if stream_type == FluidStreamType.OUTGOING and isinstance(stream_fluid_model, FluidModel):
    +66            raise ValueError(f"Stream {stream_name} is of type {stream_type} and should not have a fluid model defined")
    +67        return self
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @model_validator(mode='after')
    + + def + validate_stream(self): + + + +
    + +
    56    @model_validator(mode="after")
    +57    def validate_stream(self):
    +58        stream_name, stream_type, stream_fluid_model = (
    +59            self.name,
    +60            self.typ,
    +61            self.fluid_model,
    +62        )
    +63        if stream_type == FluidStreamType.INGOING and not isinstance(stream_fluid_model, FluidModel):
    +64            raise ValueError(f"Stream {stream_name} is of type {stream_type} and needs a fluid model to be defined")
    +65        if stream_type == FluidStreamType.OUTGOING and isinstance(stream_fluid_model, FluidModel):
    +66            raise ValueError(f"Stream {stream_name} is of type {stream_type} and should not have a fluid model defined")
    +67        return self
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/sampled.html b/docs/about/references/api/libecalc/dto/models/compressor/sampled.html new file mode 100644 index 0000000000..163488b83c --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/sampled.html @@ -0,0 +1,454 @@ + + + + + + + libecalc.dto.models.compressor.sampled API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.sampled

    + + + + + + +
     1from typing import List, Literal, Optional
    + 2
    + 3from pydantic import Field, model_validator
    + 4from typing_extensions import Annotated
    + 5
    + 6from libecalc.dto.models.base import EnergyModel
    + 7from libecalc.dto.types import EnergyModelType, EnergyUsageType
    + 8
    + 9
    +10class CompressorSampled(EnergyModel):
    +11    typ: Literal[EnergyModelType.COMPRESSOR_SAMPLED] = EnergyModelType.COMPRESSOR_SAMPLED
    +12    energy_usage_type: EnergyUsageType
    +13    energy_usage_values: List[Annotated[float, Field(ge=0)]]
    +14    rate_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +15    suction_pressure_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +16    discharge_pressure_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +17    power_interpolation_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +18
    +19    # skip_on_failure required if not pre=True, we don't need validation of lengths if other validations fails
    +20    @model_validator(mode="after")
    +21    def validate_equal_list_lengths(self):
    +22        number_of_data_points = len(self.energy_usage_values)
    +23        for variable_name in (
    +24            "rate_values",
    +25            "suction_pressure_values",
    +26            "discharge_pressure_values",
    +27            "power_interpolation_values",
    +28        ):
    +29            variable = getattr(self, variable_name)
    +30            if variable is not None:
    +31                if len(variable) != number_of_data_points:
    +32                    raise ValueError(
    +33                        f"{variable_name} has wrong number of points. "
    +34                        f"Should have {number_of_data_points} (equal to number of energy usage value points)"
    +35                    )
    +36        return self
    +37
    +38    @model_validator(mode="before")
    +39    def validate_minimum_one_variable(cls, values):
    +40        rate_not_given = "rate_values" not in values
    +41        suction_pressure_not_given = "suction_pressure_values" not in values
    +42        discharge_pressure_not_given = "discharge_pressure_values" not in values
    +43        if rate_not_given and suction_pressure_not_given and discharge_pressure_not_given:
    +44            raise ValueError(
    +45                "Need at least one variable for CompressorTrainSampled (rate, suction_pressure or discharge_pressure)"
    +46            )
    +47        return values
    +
    + + +
    +
    + +
    + + class + CompressorSampled(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    11class CompressorSampled(EnergyModel):
    +12    typ: Literal[EnergyModelType.COMPRESSOR_SAMPLED] = EnergyModelType.COMPRESSOR_SAMPLED
    +13    energy_usage_type: EnergyUsageType
    +14    energy_usage_values: List[Annotated[float, Field(ge=0)]]
    +15    rate_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +16    suction_pressure_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +17    discharge_pressure_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +18    power_interpolation_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +19
    +20    # skip_on_failure required if not pre=True, we don't need validation of lengths if other validations fails
    +21    @model_validator(mode="after")
    +22    def validate_equal_list_lengths(self):
    +23        number_of_data_points = len(self.energy_usage_values)
    +24        for variable_name in (
    +25            "rate_values",
    +26            "suction_pressure_values",
    +27            "discharge_pressure_values",
    +28            "power_interpolation_values",
    +29        ):
    +30            variable = getattr(self, variable_name)
    +31            if variable is not None:
    +32                if len(variable) != number_of_data_points:
    +33                    raise ValueError(
    +34                        f"{variable_name} has wrong number of points. "
    +35                        f"Should have {number_of_data_points} (equal to number of energy usage value points)"
    +36                    )
    +37        return self
    +38
    +39    @model_validator(mode="before")
    +40    def validate_minimum_one_variable(cls, values):
    +41        rate_not_given = "rate_values" not in values
    +42        suction_pressure_not_given = "suction_pressure_values" not in values
    +43        discharge_pressure_not_given = "discharge_pressure_values" not in values
    +44        if rate_not_given and suction_pressure_not_given and discharge_pressure_not_given:
    +45            raise ValueError(
    +46                "Need at least one variable for CompressorTrainSampled (rate, suction_pressure or discharge_pressure)"
    +47            )
    +48        return values
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    + +
    +
    @model_validator(mode='after')
    + + def + validate_equal_list_lengths(self): + + + +
    + +
    21    @model_validator(mode="after")
    +22    def validate_equal_list_lengths(self):
    +23        number_of_data_points = len(self.energy_usage_values)
    +24        for variable_name in (
    +25            "rate_values",
    +26            "suction_pressure_values",
    +27            "discharge_pressure_values",
    +28            "power_interpolation_values",
    +29        ):
    +30            variable = getattr(self, variable_name)
    +31            if variable is not None:
    +32                if len(variable) != number_of_data_points:
    +33                    raise ValueError(
    +34                        f"{variable_name} has wrong number of points. "
    +35                        f"Should have {number_of_data_points} (equal to number of energy usage value points)"
    +36                    )
    +37        return self
    +
    + + + + +
    +
    + +
    +
    @model_validator(mode='before')
    + + def + validate_minimum_one_variable(cls, values): + + + +
    + +
    39    @model_validator(mode="before")
    +40    def validate_minimum_one_variable(cls, values):
    +41        rate_not_given = "rate_values" not in values
    +42        suction_pressure_not_given = "suction_pressure_values" not in values
    +43        discharge_pressure_not_given = "discharge_pressure_values" not in values
    +44        if rate_not_given and suction_pressure_not_given and discharge_pressure_not_given:
    +45            raise ValueError(
    +46                "Need at least one variable for CompressorTrainSampled (rate, suction_pressure or discharge_pressure)"
    +47            )
    +48        return values
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/stage.html b/docs/about/references/api/libecalc/dto/models/compressor/stage.html new file mode 100644 index 0000000000..d448ab5c38 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/stage.html @@ -0,0 +1,522 @@ + + + + + + + libecalc.dto.models.compressor.stage API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.stage

    + + + + + + +
     1from typing import List, Optional
    + 2
    + 3from pydantic import Field
    + 4from typing_extensions import Annotated
    + 5
    + 6from libecalc.dto.base import EcalcBaseModel
    + 7from libecalc.dto.models.compressor.chart import CompressorChart, VariableSpeedChart
    + 8from libecalc.dto.types import FixedSpeedPressureControl
    + 9
    +10
    +11class CompressorStage(EcalcBaseModel):
    +12    compressor_chart: CompressorChart
    +13    inlet_temperature_kelvin: Annotated[float, Field(ge=0)]
    +14    pressure_drop_before_stage: Annotated[float, Field(ge=0)]
    +15    remove_liquid_after_cooling: bool
    +16    control_margin: Annotated[float, Field(ge=0, le=1)] = 0.0  # Todo: this probably belong to the chart, not the stage.
    +17
    +18
    +19class InterstagePressureControl(EcalcBaseModel):
    +20    upstream_pressure_control: FixedSpeedPressureControl
    +21    downstream_pressure_control: FixedSpeedPressureControl
    +22
    +23
    +24class MultipleStreamsCompressorStage(CompressorStage):
    +25    """Special case for multiple streams model."""
    +26
    +27    compressor_chart: VariableSpeedChart
    +28    stream_reference: Optional[List[str]] = None
    +29    interstage_pressure_control: Optional[InterstagePressureControl] = None
    +30
    +31    @property
    +32    def has_control_pressure(self):
    +33        return self.interstage_pressure_control is not None
    +
    + + +
    +
    + +
    + + class + CompressorStage(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    12class CompressorStage(EcalcBaseModel):
    +13    compressor_chart: CompressorChart
    +14    inlet_temperature_kelvin: Annotated[float, Field(ge=0)]
    +15    pressure_drop_before_stage: Annotated[float, Field(ge=0)]
    +16    remove_liquid_after_cooling: bool
    +17    control_margin: Annotated[float, Field(ge=0, le=1)] = 0.0  # Todo: this probably belong to the chart, not the stage.
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + InterstagePressureControl(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    20class InterstagePressureControl(EcalcBaseModel):
    +21    upstream_pressure_control: FixedSpeedPressureControl
    +22    downstream_pressure_control: FixedSpeedPressureControl
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + MultipleStreamsCompressorStage(CompressorStage): + + + +
    + +
    25class MultipleStreamsCompressorStage(CompressorStage):
    +26    """Special case for multiple streams model."""
    +27
    +28    compressor_chart: VariableSpeedChart
    +29    stream_reference: Optional[List[str]] = None
    +30    interstage_pressure_control: Optional[InterstagePressureControl] = None
    +31
    +32    @property
    +33    def has_control_pressure(self):
    +34        return self.interstage_pressure_control is not None
    +
    + + +

    Special case for multiple streams model.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/train.html b/docs/about/references/api/libecalc/dto/models/compressor/train.html new file mode 100644 index 0000000000..dbea80dfec --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/train.html @@ -0,0 +1,999 @@ + + + + + + + libecalc.dto.models.compressor.train API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.train

    + + + + + + +
      1from typing import List, Literal, Optional
    +  2
    +  3from pydantic import Field, field_validator
    +  4from typing_extensions import Annotated
    +  5
    +  6from libecalc.dto.models.base import EnergyModel
    +  7from libecalc.dto.models.compressor.chart import SingleSpeedChart, VariableSpeedChart
    +  8from libecalc.dto.models.compressor.fluid import (
    +  9    FluidModel,
    + 10    MultipleStreamsAndPressureStream,
    + 11)
    + 12from libecalc.dto.models.compressor.stage import (
    + 13    CompressorStage,
    + 14    MultipleStreamsCompressorStage,
    + 15)
    + 16from libecalc.dto.types import EnergyModelType, FixedSpeedPressureControl
    + 17
    + 18
    + 19class CompressorTrain(EnergyModel):
    + 20    typ: EnergyModelType
    + 21    stages: List[CompressorStage]
    + 22    fluid_model: FluidModel
    + 23    calculate_max_rate: bool = False
    + 24    maximum_power: Optional[float] = None
    + 25    pressure_control: FixedSpeedPressureControl
    + 26
    + 27
    + 28class CompressorTrainSimplifiedWithKnownStages(CompressorTrain):
    + 29    typ: Literal[
    + 30        EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES
    + 31    ] = EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES
    + 32
    + 33    # Not in use:
    + 34    pressure_control: Optional[FixedSpeedPressureControl] = None  # Not relevant for simplified trains.
    + 35
    + 36    @field_validator("stages")
    + 37    @classmethod
    + 38    def _validate_stages(cls, stages):
    + 39        for stage in stages:
    + 40            if isinstance(stage.compressor_chart, SingleSpeedChart):
    + 41                raise ValueError(
    + 42                    "Simplified Compressor Train does not support Single Speed Compressor Chart."
    + 43                    f" Given type was {type(stage.compressor_chart)}"
    + 44                )
    + 45        return stages
    + 46
    + 47
    + 48class CompressorTrainSimplifiedWithUnknownStages(CompressorTrain):
    + 49    """Unknown stages does not have stages, instead we have one stage that will be multiplied as many times as needed.
    + 50    Will be constrained by a maximum pressure ratio per stage.
    + 51    """
    + 52
    + 53    typ: Literal[
    + 54        EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES
    + 55    ] = EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES
    + 56    stage: CompressorStage
    + 57    maximum_pressure_ratio_per_stage: Annotated[float, Field(ge=0)]
    + 58
    + 59    # Not in use:
    + 60    stages: List[CompressorStage] = []  # Not relevant since the stage is Unknown
    + 61    pressure_control: Optional[FixedSpeedPressureControl] = None  # Not relevant for simplified trains.
    + 62
    + 63    @field_validator("stage")
    + 64    @classmethod
    + 65    def _validate_stages(cls, stage):
    + 66        if isinstance(stage.compressor_chart, SingleSpeedChart):
    + 67            raise ValueError(
    + 68                "Simplified Compressor Train does not support Single Speed Compressor Chart."
    + 69                f" Given type was {type(stage.compressor_chart)}"
    + 70            )
    + 71        return stage
    + 72
    + 73
    + 74class SingleSpeedCompressorTrain(CompressorTrain):
    + 75    """Single speed train has a control mechanism for max discharge pressure."""
    + 76
    + 77    typ: Literal[
    + 78        EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 79    ] = EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 80    maximum_discharge_pressure: Optional[Annotated[float, Field(ge=0)]] = None
    + 81
    + 82    @field_validator("stages")
    + 83    @classmethod
    + 84    def _validate_stages(cls, stages):
    + 85        for stage in stages:
    + 86            if not isinstance(stage.compressor_chart, SingleSpeedChart):
    + 87                raise ValueError(
    + 88                    "Single Speed Compressor train only accepts Single Speed Compressor Charts."
    + 89                    f" Given type was {type(stage.compressor_chart)}"
    + 90                )
    + 91        return stages
    + 92
    + 93
    + 94class VariableSpeedCompressorTrain(CompressorTrain):
    + 95    typ: Literal[
    + 96        EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 97    ] = EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 98
    + 99    @field_validator("stages")
    +100    @classmethod
    +101    def _validate_stages(cls, stages):
    +102        min_speed_per_stage = []
    +103        max_speed_per_stage = []
    +104        for stage in stages:
    +105            if not isinstance(stage.compressor_chart, VariableSpeedChart):
    +106                raise ValueError(
    +107                    "Variable Speed Compressor train only accepts Variable Speed Compressor Charts."
    +108                    f" Given type was {type(stage.compressor_chart)}"
    +109                )
    +110            max_speed_per_stage.append(stage.compressor_chart.max_speed)
    +111            min_speed_per_stage.append(stage.compressor_chart.min_speed)
    +112        if max(min_speed_per_stage) > min(max_speed_per_stage):
    +113            raise ValueError(
    +114                "Variable speed compressors in compressor train have incompatible compressor charts."
    +115                f" Stage {min_speed_per_stage.index(max(min_speed_per_stage)) + 1}'s minimum speed is higher"
    +116                f" than max speed of stage {max_speed_per_stage.index(min(max_speed_per_stage)) + 1}"
    +117            )
    +118        return stages
    +119
    +120
    +121class VariableSpeedCompressorTrainMultipleStreamsAndPressures(CompressorTrain):
    +122    """This is the dto for the "advanced" (common shaft) compressor train model, with multiple input and output streams and
    +123    possibly an interstage control pressure
    +124    The streams are listed separately and then mapped into the stages. We need to keep the info of the input ordering of
    +125    the streams, as this determine the mapping of which rate is mapped to which stream at evaluation
    +126    Two options - either keep the streams as a separate attribute from stages and do the mapping at evaluation, or do
    +127    the mapping of streams and add these to the stages now, but let the stream get a number representing it's placement
    +128    in the syntax. The first option - keep the reference and do the mapping later is used here to keep the yaml syntax
    +129    and the dto similar.
    +130    """
    +131
    +132    typ: Literal[
    +133        EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    +134    ] = EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    +135    streams: List[MultipleStreamsAndPressureStream]
    +136    stages: List[MultipleStreamsCompressorStage]
    +137
    +138    # Not in use:
    +139    fluid_model: Optional[FluidModel] = None  # Not relevant. set by the individual stream.
    +140
    +141    @field_validator("stages")
    +142    @classmethod
    +143    def _validate_stages(cls, stages):
    +144        if sum([stage.has_control_pressure for stage in stages]) > 1:
    +145            raise ValueError("Only one interstage pressure should be defined for a compressor train")
    +146        min_speed_per_stage = []
    +147        max_speed_per_stage = []
    +148        for stage in stages:
    +149            if not isinstance(stage.compressor_chart, VariableSpeedChart):
    +150                raise ValueError(
    +151                    "Variable Speed Compressor train only accepts Variable Speed Compressor Charts."
    +152                    f" Given type was {type(stage.compressor_chart)}"
    +153                )
    +154            max_speed_per_stage.append(stage.compressor_chart.max_speed)
    +155            min_speed_per_stage.append(stage.compressor_chart.min_speed)
    +156        if max(min_speed_per_stage) > min(max_speed_per_stage):
    +157            raise ValueError(
    +158                "Variable speed compressors in compressor train have incompatible compressor charts."
    +159                f" Stage {min_speed_per_stage.index(max(min_speed_per_stage)) + 1}'s minimum speed is higher"
    +160                f" than max speed of stage {max_speed_per_stage.index(min(max_speed_per_stage)) + 1}"
    +161            )
    +162        return stages
    +163
    +164    @property
    +165    def has_interstage_pressure(self):
    +166        return any(stage.has_control_pressure for stage in self.stages)
    +167
    +168    @property
    +169    def stage_number_interstage_pressure(self):
    +170        """Number of the stage after the fixed intermediate pressure, meaning the intermediate pressure will be the
    +171        inlet pressure of this stage. Must be larger than 0 and smaller than the number of stages in the train
    +172        (zero indexed, first stage is stage_0).
    +173        """
    +174        return (
    +175            [i for i, stage in enumerate(self.stages) if stage.has_control_pressure][0]
    +176            if self.has_interstage_pressure
    +177            else None
    +178        )
    +179
    +180    @property
    +181    def stream_references(self):
    +182        return {
    +183            stream_ref: i
    +184            for i, stage in enumerate(self.stages)
    +185            if stage.stream_reference
    +186            for stream_ref in stage.stream_reference
    +187        }
    +188
    +189    @property
    +190    def pressure_control_first_part(self) -> FixedSpeedPressureControl:
    +191        return (
    +192            self.stages[self.stage_number_interstage_pressure].interstage_pressure_control.upstream_pressure_control
    +193            if self.stage_number_interstage_pressure
    +194            else None
    +195        )
    +196
    +197    @property
    +198    def pressure_control_last_part(self) -> FixedSpeedPressureControl:
    +199        return (
    +200            self.stages[self.stage_number_interstage_pressure].interstage_pressure_control.downstream_pressure_control
    +201            if self.stage_number_interstage_pressure
    +202            else None
    +203        )
    +
    + + +
    +
    + +
    + + class + CompressorTrain(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    20class CompressorTrain(EnergyModel):
    +21    typ: EnergyModelType
    +22    stages: List[CompressorStage]
    +23    fluid_model: FluidModel
    +24    calculate_max_rate: bool = False
    +25    maximum_power: Optional[float] = None
    +26    pressure_control: FixedSpeedPressureControl
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorTrainSimplifiedWithKnownStages(CompressorTrain): + + + +
    + +
    29class CompressorTrainSimplifiedWithKnownStages(CompressorTrain):
    +30    typ: Literal[
    +31        EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES
    +32    ] = EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES
    +33
    +34    # Not in use:
    +35    pressure_control: Optional[FixedSpeedPressureControl] = None  # Not relevant for simplified trains.
    +36
    +37    @field_validator("stages")
    +38    @classmethod
    +39    def _validate_stages(cls, stages):
    +40        for stage in stages:
    +41            if isinstance(stage.compressor_chart, SingleSpeedChart):
    +42                raise ValueError(
    +43                    "Simplified Compressor Train does not support Single Speed Compressor Chart."
    +44                    f" Given type was {type(stage.compressor_chart)}"
    +45                )
    +46        return stages
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorTrainSimplifiedWithUnknownStages(CompressorTrain): + + + +
    + +
    49class CompressorTrainSimplifiedWithUnknownStages(CompressorTrain):
    +50    """Unknown stages does not have stages, instead we have one stage that will be multiplied as many times as needed.
    +51    Will be constrained by a maximum pressure ratio per stage.
    +52    """
    +53
    +54    typ: Literal[
    +55        EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES
    +56    ] = EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES
    +57    stage: CompressorStage
    +58    maximum_pressure_ratio_per_stage: Annotated[float, Field(ge=0)]
    +59
    +60    # Not in use:
    +61    stages: List[CompressorStage] = []  # Not relevant since the stage is Unknown
    +62    pressure_control: Optional[FixedSpeedPressureControl] = None  # Not relevant for simplified trains.
    +63
    +64    @field_validator("stage")
    +65    @classmethod
    +66    def _validate_stages(cls, stage):
    +67        if isinstance(stage.compressor_chart, SingleSpeedChart):
    +68            raise ValueError(
    +69                "Simplified Compressor Train does not support Single Speed Compressor Chart."
    +70                f" Given type was {type(stage.compressor_chart)}"
    +71            )
    +72        return stage
    +
    + + +

    Unknown stages does not have stages, instead we have one stage that will be multiplied as many times as needed. +Will be constrained by a maximum pressure ratio per stage.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + SingleSpeedCompressorTrain(CompressorTrain): + + + +
    + +
    75class SingleSpeedCompressorTrain(CompressorTrain):
    +76    """Single speed train has a control mechanism for max discharge pressure."""
    +77
    +78    typ: Literal[
    +79        EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    +80    ] = EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    +81    maximum_discharge_pressure: Optional[Annotated[float, Field(ge=0)]] = None
    +82
    +83    @field_validator("stages")
    +84    @classmethod
    +85    def _validate_stages(cls, stages):
    +86        for stage in stages:
    +87            if not isinstance(stage.compressor_chart, SingleSpeedChart):
    +88                raise ValueError(
    +89                    "Single Speed Compressor train only accepts Single Speed Compressor Charts."
    +90                    f" Given type was {type(stage.compressor_chart)}"
    +91                )
    +92        return stages
    +
    + + +

    Single speed train has a control mechanism for max discharge pressure.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + VariableSpeedCompressorTrain(CompressorTrain): + + + +
    + +
     95class VariableSpeedCompressorTrain(CompressorTrain):
    + 96    typ: Literal[
    + 97        EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 98    ] = EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 99
    +100    @field_validator("stages")
    +101    @classmethod
    +102    def _validate_stages(cls, stages):
    +103        min_speed_per_stage = []
    +104        max_speed_per_stage = []
    +105        for stage in stages:
    +106            if not isinstance(stage.compressor_chart, VariableSpeedChart):
    +107                raise ValueError(
    +108                    "Variable Speed Compressor train only accepts Variable Speed Compressor Charts."
    +109                    f" Given type was {type(stage.compressor_chart)}"
    +110                )
    +111            max_speed_per_stage.append(stage.compressor_chart.max_speed)
    +112            min_speed_per_stage.append(stage.compressor_chart.min_speed)
    +113        if max(min_speed_per_stage) > min(max_speed_per_stage):
    +114            raise ValueError(
    +115                "Variable speed compressors in compressor train have incompatible compressor charts."
    +116                f" Stage {min_speed_per_stage.index(max(min_speed_per_stage)) + 1}'s minimum speed is higher"
    +117                f" than max speed of stage {max_speed_per_stage.index(min(max_speed_per_stage)) + 1}"
    +118            )
    +119        return stages
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + VariableSpeedCompressorTrainMultipleStreamsAndPressures(CompressorTrain): + + + +
    + +
    122class VariableSpeedCompressorTrainMultipleStreamsAndPressures(CompressorTrain):
    +123    """This is the dto for the "advanced" (common shaft) compressor train model, with multiple input and output streams and
    +124    possibly an interstage control pressure
    +125    The streams are listed separately and then mapped into the stages. We need to keep the info of the input ordering of
    +126    the streams, as this determine the mapping of which rate is mapped to which stream at evaluation
    +127    Two options - either keep the streams as a separate attribute from stages and do the mapping at evaluation, or do
    +128    the mapping of streams and add these to the stages now, but let the stream get a number representing it's placement
    +129    in the syntax. The first option - keep the reference and do the mapping later is used here to keep the yaml syntax
    +130    and the dto similar.
    +131    """
    +132
    +133    typ: Literal[
    +134        EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    +135    ] = EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    +136    streams: List[MultipleStreamsAndPressureStream]
    +137    stages: List[MultipleStreamsCompressorStage]
    +138
    +139    # Not in use:
    +140    fluid_model: Optional[FluidModel] = None  # Not relevant. set by the individual stream.
    +141
    +142    @field_validator("stages")
    +143    @classmethod
    +144    def _validate_stages(cls, stages):
    +145        if sum([stage.has_control_pressure for stage in stages]) > 1:
    +146            raise ValueError("Only one interstage pressure should be defined for a compressor train")
    +147        min_speed_per_stage = []
    +148        max_speed_per_stage = []
    +149        for stage in stages:
    +150            if not isinstance(stage.compressor_chart, VariableSpeedChart):
    +151                raise ValueError(
    +152                    "Variable Speed Compressor train only accepts Variable Speed Compressor Charts."
    +153                    f" Given type was {type(stage.compressor_chart)}"
    +154                )
    +155            max_speed_per_stage.append(stage.compressor_chart.max_speed)
    +156            min_speed_per_stage.append(stage.compressor_chart.min_speed)
    +157        if max(min_speed_per_stage) > min(max_speed_per_stage):
    +158            raise ValueError(
    +159                "Variable speed compressors in compressor train have incompatible compressor charts."
    +160                f" Stage {min_speed_per_stage.index(max(min_speed_per_stage)) + 1}'s minimum speed is higher"
    +161                f" than max speed of stage {max_speed_per_stage.index(min(max_speed_per_stage)) + 1}"
    +162            )
    +163        return stages
    +164
    +165    @property
    +166    def has_interstage_pressure(self):
    +167        return any(stage.has_control_pressure for stage in self.stages)
    +168
    +169    @property
    +170    def stage_number_interstage_pressure(self):
    +171        """Number of the stage after the fixed intermediate pressure, meaning the intermediate pressure will be the
    +172        inlet pressure of this stage. Must be larger than 0 and smaller than the number of stages in the train
    +173        (zero indexed, first stage is stage_0).
    +174        """
    +175        return (
    +176            [i for i, stage in enumerate(self.stages) if stage.has_control_pressure][0]
    +177            if self.has_interstage_pressure
    +178            else None
    +179        )
    +180
    +181    @property
    +182    def stream_references(self):
    +183        return {
    +184            stream_ref: i
    +185            for i, stage in enumerate(self.stages)
    +186            if stage.stream_reference
    +187            for stream_ref in stage.stream_reference
    +188        }
    +189
    +190    @property
    +191    def pressure_control_first_part(self) -> FixedSpeedPressureControl:
    +192        return (
    +193            self.stages[self.stage_number_interstage_pressure].interstage_pressure_control.upstream_pressure_control
    +194            if self.stage_number_interstage_pressure
    +195            else None
    +196        )
    +197
    +198    @property
    +199    def pressure_control_last_part(self) -> FixedSpeedPressureControl:
    +200        return (
    +201            self.stages[self.stage_number_interstage_pressure].interstage_pressure_control.downstream_pressure_control
    +202            if self.stage_number_interstage_pressure
    +203            else None
    +204        )
    +
    + + +

    This is the dto for the "advanced" (common shaft) compressor train model, with multiple input and output streams and +possibly an interstage control pressure +The streams are listed separately and then mapped into the stages. We need to keep the info of the input ordering of +the streams, as this determine the mapping of which rate is mapped to which stream at evaluation +Two options - either keep the streams as a separate attribute from stages and do the mapping at evaluation, or do +the mapping of streams and add these to the stages now, but let the stream get a number representing it's placement +in the syntax. The first option - keep the reference and do the mapping later is used here to keep the yaml syntax +and the dto similar.

    +
    + + +
    +
    + stage_number_interstage_pressure + + +
    + + +

    Number of the stage after the fixed intermediate pressure, meaning the intermediate pressure will be the +inlet pressure of this stage. Must be larger than 0 and smaller than the number of stages in the train +(zero indexed, first stage is stage_0).

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/consumer_system.html b/docs/about/references/api/libecalc/dto/models/consumer_system.html new file mode 100644 index 0000000000..30eb7a37cf --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/consumer_system.html @@ -0,0 +1,1091 @@ + + + + + + + libecalc.dto.models.consumer_system API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.consumer_system

    + + + + + + +
      1from typing import List, Literal, Optional
    +  2
    +  3from pydantic import Field, field_validator, validator
    +  4
    +  5from libecalc.common.logger import logger
    +  6from libecalc.dto.base import EcalcBaseModel
    +  7from libecalc.dto.models.base import ConsumerFunction
    +  8from libecalc.dto.models.compressor import CompressorModel
    +  9from libecalc.dto.models.compressor.train import (
    + 10    CompressorTrainSimplifiedWithKnownStages,
    + 11    CompressorTrainSimplifiedWithUnknownStages,
    + 12)
    + 13from libecalc.dto.models.pump import PumpModel
    + 14from libecalc.dto.types import ChartType, ConsumerType, EnergyUsageType
    + 15from libecalc.dto.utils.validators import convert_expression
    + 16from libecalc.expression import Expression
    + 17
    + 18
    + 19class CompressorSystemCompressor(EcalcBaseModel):
    + 20    name: str
    + 21    compressor_train: CompressorModel = Field(..., discriminator="typ")
    + 22
    + 23
    + 24class SystemOperationalSetting(EcalcBaseModel):
    + 25    rate_fractions: Optional[List[Expression]] = None
    + 26    rates: Optional[List[Expression]] = None
    + 27    suction_pressure: Optional[Expression] = None
    + 28    suction_pressures: Optional[List[Expression]] = None
    + 29    discharge_pressure: Optional[Expression] = None
    + 30    discharge_pressures: Optional[List[Expression]] = None
    + 31    crossover: Optional[List[int]] = None
    + 32
    + 33    _convert_expression_lists = validator(
    + 34        "rate_fractions",
    + 35        "rates",
    + 36        "suction_pressures",
    + 37        "discharge_pressures",
    + 38        allow_reuse=True,
    + 39        pre=True,
    + 40        each_item=True,
    + 41    )(convert_expression)
    + 42    _convert_expression = validator("suction_pressure", "discharge_pressure", allow_reuse=True, pre=True)(
    + 43        convert_expression
    + 44    )
    + 45
    + 46
    + 47class PumpSystemOperationalSetting(SystemOperationalSetting):
    + 48    fluid_densities: Optional[List[Expression]] = None
    + 49
    + 50    _convert_expression_lists = validator(
    + 51        "fluid_densities",
    + 52        allow_reuse=True,
    + 53        pre=True,
    + 54        each_item=True,
    + 55    )(convert_expression)
    + 56
    + 57
    + 58class PumpSystemPump(EcalcBaseModel):
    + 59    name: str
    + 60    pump_model: PumpModel
    + 61
    + 62
    + 63class PumpSystemConsumerFunction(ConsumerFunction):
    + 64    typ: Literal[ConsumerType.PUMP_SYSTEM] = ConsumerType.PUMP_SYSTEM
    + 65    energy_usage_type: EnergyUsageType = EnergyUsageType.POWER
    + 66    power_loss_factor: Optional[Expression] = None
    + 67    pumps: List[PumpSystemPump]
    + 68    fluid_density: Expression
    + 69    total_system_rate: Optional[Expression] = None
    + 70    operational_settings: List[PumpSystemOperationalSetting]
    + 71
    + 72    _convert_expression = validator(
    + 73        "fluid_density", "total_system_rate", "power_loss_factor", allow_reuse=True, pre=True
    + 74    )(convert_expression)
    + 75
    + 76
    + 77class CompressorSystemOperationalSetting(SystemOperationalSetting):
    + 78    pass
    + 79
    + 80
    + 81class CompressorSystemConsumerFunction(ConsumerFunction):
    + 82    typ: Literal[ConsumerType.COMPRESSOR_SYSTEM] = ConsumerType.COMPRESSOR_SYSTEM
    + 83    power_loss_factor: Optional[Expression] = None
    + 84    compressors: List[CompressorSystemCompressor]
    + 85    total_system_rate: Optional[Expression] = None
    + 86    operational_settings: List[CompressorSystemOperationalSetting]
    + 87
    + 88    _convert_total_system_rate_to_expression = validator(
    + 89        "total_system_rate", "power_loss_factor", allow_reuse=True, pre=True
    + 90    )(convert_expression)
    + 91
    + 92    @field_validator("compressors")
    + 93    @classmethod
    + 94    def check_for_generic_from_input_compressor_chart_in_simplified_train_compressor_system(
    + 95        cls, v: List[CompressorSystemCompressor]
    + 96    ) -> List[CompressorSystemCompressor]:
    + 97        for compressor_system_compressor in v:
    + 98            compressor_train = compressor_system_compressor.compressor_train
    + 99            if isinstance(compressor_train, CompressorTrainSimplifiedWithKnownStages):
    +100                for i, stage in enumerate(compressor_train.stages):
    +101                    if stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +102                        logger.warning(
    +103                            f"Stage number {i + 1} in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +104                            f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +105                            f"the rate input used to generate a specific compressor chart will also change. Consider"
    +106                            f" to define a design point yourself instead of letting an algorithm find one based on"
    +107                            f" changing rates!"
    +108                        )
    +109            elif isinstance(compressor_train, CompressorTrainSimplifiedWithUnknownStages):
    +110                if compressor_train.stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +111                    logger.warning(
    +112                        f"Compressor chart in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +113                        f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +114                        f"the rate input used to generate a specific compressor chart will also change. Consider"
    +115                        f" to define a design point yourself instead of letting an algorithm find one based on"
    +116                        f" changing rates!"
    +117                    )
    +118        return v
    +
    + + +
    +
    + +
    + + class + CompressorSystemCompressor(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    20class CompressorSystemCompressor(EcalcBaseModel):
    +21    name: str
    +22    compressor_train: CompressorModel = Field(..., discriminator="typ")
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + SystemOperationalSetting(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    25class SystemOperationalSetting(EcalcBaseModel):
    +26    rate_fractions: Optional[List[Expression]] = None
    +27    rates: Optional[List[Expression]] = None
    +28    suction_pressure: Optional[Expression] = None
    +29    suction_pressures: Optional[List[Expression]] = None
    +30    discharge_pressure: Optional[Expression] = None
    +31    discharge_pressures: Optional[List[Expression]] = None
    +32    crossover: Optional[List[int]] = None
    +33
    +34    _convert_expression_lists = validator(
    +35        "rate_fractions",
    +36        "rates",
    +37        "suction_pressures",
    +38        "discharge_pressures",
    +39        allow_reuse=True,
    +40        pre=True,
    +41        each_item=True,
    +42    )(convert_expression)
    +43    _convert_expression = validator("suction_pressure", "discharge_pressure", allow_reuse=True, pre=True)(
    +44        convert_expression
    +45    )
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + PumpSystemOperationalSetting(SystemOperationalSetting): + + + +
    + +
    48class PumpSystemOperationalSetting(SystemOperationalSetting):
    +49    fluid_densities: Optional[List[Expression]] = None
    +50
    +51    _convert_expression_lists = validator(
    +52        "fluid_densities",
    +53        allow_reuse=True,
    +54        pre=True,
    +55        each_item=True,
    +56    )(convert_expression)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + PumpSystemPump(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    59class PumpSystemPump(EcalcBaseModel):
    +60    name: str
    +61    pump_model: PumpModel
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + PumpSystemConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    64class PumpSystemConsumerFunction(ConsumerFunction):
    +65    typ: Literal[ConsumerType.PUMP_SYSTEM] = ConsumerType.PUMP_SYSTEM
    +66    energy_usage_type: EnergyUsageType = EnergyUsageType.POWER
    +67    power_loss_factor: Optional[Expression] = None
    +68    pumps: List[PumpSystemPump]
    +69    fluid_density: Expression
    +70    total_system_rate: Optional[Expression] = None
    +71    operational_settings: List[PumpSystemOperationalSetting]
    +72
    +73    _convert_expression = validator(
    +74        "fluid_density", "total_system_rate", "power_loss_factor", allow_reuse=True, pre=True
    +75    )(convert_expression)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorSystemOperationalSetting(SystemOperationalSetting): + + + +
    + +
    78class CompressorSystemOperationalSetting(SystemOperationalSetting):
    +79    pass
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorSystemConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
     82class CompressorSystemConsumerFunction(ConsumerFunction):
    + 83    typ: Literal[ConsumerType.COMPRESSOR_SYSTEM] = ConsumerType.COMPRESSOR_SYSTEM
    + 84    power_loss_factor: Optional[Expression] = None
    + 85    compressors: List[CompressorSystemCompressor]
    + 86    total_system_rate: Optional[Expression] = None
    + 87    operational_settings: List[CompressorSystemOperationalSetting]
    + 88
    + 89    _convert_total_system_rate_to_expression = validator(
    + 90        "total_system_rate", "power_loss_factor", allow_reuse=True, pre=True
    + 91    )(convert_expression)
    + 92
    + 93    @field_validator("compressors")
    + 94    @classmethod
    + 95    def check_for_generic_from_input_compressor_chart_in_simplified_train_compressor_system(
    + 96        cls, v: List[CompressorSystemCompressor]
    + 97    ) -> List[CompressorSystemCompressor]:
    + 98        for compressor_system_compressor in v:
    + 99            compressor_train = compressor_system_compressor.compressor_train
    +100            if isinstance(compressor_train, CompressorTrainSimplifiedWithKnownStages):
    +101                for i, stage in enumerate(compressor_train.stages):
    +102                    if stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +103                        logger.warning(
    +104                            f"Stage number {i + 1} in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +105                            f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +106                            f"the rate input used to generate a specific compressor chart will also change. Consider"
    +107                            f" to define a design point yourself instead of letting an algorithm find one based on"
    +108                            f" changing rates!"
    +109                        )
    +110            elif isinstance(compressor_train, CompressorTrainSimplifiedWithUnknownStages):
    +111                if compressor_train.stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +112                    logger.warning(
    +113                        f"Compressor chart in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +114                        f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +115                        f"the rate input used to generate a specific compressor chart will also change. Consider"
    +116                        f" to define a design point yourself instead of letting an algorithm find one based on"
    +117                        f" changing rates!"
    +118                    )
    +119        return v
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('compressors')
    +
    @classmethod
    + + def + check_for_generic_from_input_compressor_chart_in_simplified_train_compressor_system( cls, v: List[libecalc.dto.models.consumer_system.CompressorSystemCompressor]) -> List[libecalc.dto.models.consumer_system.CompressorSystemCompressor]: + + + +
    + +
     93    @field_validator("compressors")
    + 94    @classmethod
    + 95    def check_for_generic_from_input_compressor_chart_in_simplified_train_compressor_system(
    + 96        cls, v: List[CompressorSystemCompressor]
    + 97    ) -> List[CompressorSystemCompressor]:
    + 98        for compressor_system_compressor in v:
    + 99            compressor_train = compressor_system_compressor.compressor_train
    +100            if isinstance(compressor_train, CompressorTrainSimplifiedWithKnownStages):
    +101                for i, stage in enumerate(compressor_train.stages):
    +102                    if stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +103                        logger.warning(
    +104                            f"Stage number {i + 1} in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +105                            f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +106                            f"the rate input used to generate a specific compressor chart will also change. Consider"
    +107                            f" to define a design point yourself instead of letting an algorithm find one based on"
    +108                            f" changing rates!"
    +109                        )
    +110            elif isinstance(compressor_train, CompressorTrainSimplifiedWithUnknownStages):
    +111                if compressor_train.stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +112                    logger.warning(
    +113                        f"Compressor chart in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +114                        f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +115                        f"the rate input used to generate a specific compressor chart will also change. Consider"
    +116                        f" to define a design point yourself instead of letting an algorithm find one based on"
    +117                        f" changing rates!"
    +118                    )
    +119        return v
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/direct.html b/docs/about/references/api/libecalc/dto/models/direct.html new file mode 100644 index 0000000000..7b0b9e49a5 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/direct.html @@ -0,0 +1,402 @@ + + + + + + + libecalc.dto.models.direct API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.direct

    + + + + + + +
     1from typing import Literal, Optional
    + 2
    + 3from pydantic import model_validator, validator
    + 4from typing_extensions import Self
    + 5
    + 6from libecalc.common.utils.rates import RateType
    + 7from libecalc.dto.models.base import ConsumerFunction
    + 8from libecalc.dto.types import ConsumerType
    + 9from libecalc.dto.utils.validators import convert_expression
    +10from libecalc.expression import Expression
    +11
    +12
    +13class DirectConsumerFunction(ConsumerFunction):
    +14    typ: Literal[ConsumerType.DIRECT] = ConsumerType.DIRECT
    +15    fuel_rate: Optional[Expression] = None
    +16    load: Optional[Expression] = None
    +17    power_loss_factor: Optional[Expression] = None
    +18    consumption_rate_type: RateType = RateType.STREAM_DAY
    +19
    +20    _convert_expressions = validator("fuel_rate", "load", "power_loss_factor", allow_reuse=True, pre=True)(
    +21        convert_expression
    +22    )
    +23
    +24    @model_validator(mode="after")
    +25    def validate_either_load_or_fuel_rate(self) -> Self:
    +26        has_fuel_rate = getattr(self, "fuel_rate", None) is not None
    +27        has_load = getattr(self, "load", None) is not None
    +28        if (has_fuel_rate and not has_load) or (not has_fuel_rate and has_load):
    +29            return self
    +30        raise ValueError(f"Either 'fuel_rate' or 'load' should be specified for '{ConsumerType.DIRECT}' models.")
    +
    + + +
    +
    + +
    + + class + DirectConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    14class DirectConsumerFunction(ConsumerFunction):
    +15    typ: Literal[ConsumerType.DIRECT] = ConsumerType.DIRECT
    +16    fuel_rate: Optional[Expression] = None
    +17    load: Optional[Expression] = None
    +18    power_loss_factor: Optional[Expression] = None
    +19    consumption_rate_type: RateType = RateType.STREAM_DAY
    +20
    +21    _convert_expressions = validator("fuel_rate", "load", "power_loss_factor", allow_reuse=True, pre=True)(
    +22        convert_expression
    +23    )
    +24
    +25    @model_validator(mode="after")
    +26    def validate_either_load_or_fuel_rate(self) -> Self:
    +27        has_fuel_rate = getattr(self, "fuel_rate", None) is not None
    +28        has_load = getattr(self, "load", None) is not None
    +29        if (has_fuel_rate and not has_load) or (not has_fuel_rate and has_load):
    +30            return self
    +31        raise ValueError(f"Either 'fuel_rate' or 'load' should be specified for '{ConsumerType.DIRECT}' models.")
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @model_validator(mode='after')
    + + def + validate_either_load_or_fuel_rate(self) -> typing_extensions.Self: + + + +
    + +
    25    @model_validator(mode="after")
    +26    def validate_either_load_or_fuel_rate(self) -> Self:
    +27        has_fuel_rate = getattr(self, "fuel_rate", None) is not None
    +28        has_load = getattr(self, "load", None) is not None
    +29        if (has_fuel_rate and not has_load) or (not has_fuel_rate and has_load):
    +30            return self
    +31        raise ValueError(f"Either 'fuel_rate' or 'load' should be specified for '{ConsumerType.DIRECT}' models.")
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/generator_set.html b/docs/about/references/api/libecalc/dto/models/generator_set.html new file mode 100644 index 0000000000..5c83083694 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/generator_set.html @@ -0,0 +1,416 @@ + + + + + + + libecalc.dto.models.generator_set API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.generator_set

    + + + + + + +
     1from typing import List, Literal
    + 2
    + 3from pydantic import field_validator
    + 4
    + 5from libecalc.dto.types import EnergyModelType
    + 6
    + 7from .sampled import EnergyModelSampled
    + 8
    + 9
    +10class GeneratorSetSampled(EnergyModelSampled):
    +11    typ: Literal[EnergyModelType.GENERATOR_SET_SAMPLED] = EnergyModelType.GENERATOR_SET_SAMPLED
    +12
    +13    @field_validator("headers")
    +14    @classmethod
    +15    def validate_headers(cls, headers: List[str]) -> List[str]:
    +16        is_valid_headers = len(headers) == 2 and "FUEL" in headers and "POWER" in headers
    +17        if not is_valid_headers:
    +18            raise ValueError("Sampled generator set data should have a 'FUEL' and 'POWER' header")
    +19        return headers
    +20
    +21    @field_validator("data")
    +22    @classmethod
    +23    def validate_data(cls, data: List[List[float]]) -> List[List[float]]:
    +24        if len({len(lst) for lst in data}) > 1:
    +25            raise ValueError("Sampled generator set data should have equal number of datapoints for FUEL and POWER.")
    +26        return data
    +27
    +28    @property
    +29    def fuel_values(self) -> List[float]:
    +30        return self.data[self.headers.index("FUEL")]
    +31
    +32    @property
    +33    def power_values(self) -> List[float]:
    +34        return self.data[self.headers.index("POWER")]
    +
    + + +
    +
    + +
    + + class + GeneratorSetSampled(libecalc.dto.models.sampled.EnergyModelSampled): + + + +
    + +
    11class GeneratorSetSampled(EnergyModelSampled):
    +12    typ: Literal[EnergyModelType.GENERATOR_SET_SAMPLED] = EnergyModelType.GENERATOR_SET_SAMPLED
    +13
    +14    @field_validator("headers")
    +15    @classmethod
    +16    def validate_headers(cls, headers: List[str]) -> List[str]:
    +17        is_valid_headers = len(headers) == 2 and "FUEL" in headers and "POWER" in headers
    +18        if not is_valid_headers:
    +19            raise ValueError("Sampled generator set data should have a 'FUEL' and 'POWER' header")
    +20        return headers
    +21
    +22    @field_validator("data")
    +23    @classmethod
    +24    def validate_data(cls, data: List[List[float]]) -> List[List[float]]:
    +25        if len({len(lst) for lst in data}) > 1:
    +26            raise ValueError("Sampled generator set data should have equal number of datapoints for FUEL and POWER.")
    +27        return data
    +28
    +29    @property
    +30    def fuel_values(self) -> List[float]:
    +31        return self.data[self.headers.index("FUEL")]
    +32
    +33    @property
    +34    def power_values(self) -> List[float]:
    +35        return self.data[self.headers.index("POWER")]
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    + +
    +
    @field_validator('headers')
    +
    @classmethod
    + + def + validate_headers(cls, headers: List[str]) -> List[str]: + + + +
    + +
    14    @field_validator("headers")
    +15    @classmethod
    +16    def validate_headers(cls, headers: List[str]) -> List[str]:
    +17        is_valid_headers = len(headers) == 2 and "FUEL" in headers and "POWER" in headers
    +18        if not is_valid_headers:
    +19            raise ValueError("Sampled generator set data should have a 'FUEL' and 'POWER' header")
    +20        return headers
    +
    + + + + +
    +
    + +
    +
    @field_validator('data')
    +
    @classmethod
    + + def + validate_data(cls, data: List[List[float]]) -> List[List[float]]: + + + +
    + +
    22    @field_validator("data")
    +23    @classmethod
    +24    def validate_data(cls, data: List[List[float]]) -> List[List[float]]:
    +25        if len({len(lst) for lst in data}) > 1:
    +26            raise ValueError("Sampled generator set data should have equal number of datapoints for FUEL and POWER.")
    +27        return data
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/pump.html b/docs/about/references/api/libecalc/dto/models/pump.html new file mode 100644 index 0000000000..2da9a674cd --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/pump.html @@ -0,0 +1,444 @@ + + + + + + + libecalc.dto.models.pump API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.pump

    + + + + + + +
     1from typing import Literal, Optional, Union
    + 2
    + 3from pydantic import validator
    + 4
    + 5from libecalc.dto.models.base import ConsumerFunction, EnergyModel
    + 6from libecalc.dto.models.chart import SingleSpeedChart, VariableSpeedChart
    + 7from libecalc.dto.types import ConsumerType, EnergyModelType, EnergyUsageType
    + 8from libecalc.dto.utils.validators import convert_expression
    + 9from libecalc.expression import Expression
    +10
    +11
    +12class PumpModel(EnergyModel):
    +13    typ: Literal[EnergyModelType.PUMP_MODEL] = EnergyModelType.PUMP_MODEL
    +14    chart: Union[SingleSpeedChart, VariableSpeedChart]
    +15    head_margin: float
    +16
    +17
    +18class PumpConsumerFunction(ConsumerFunction):
    +19    typ: Literal[ConsumerType.PUMP] = ConsumerType.PUMP
    +20    energy_usage_type: EnergyUsageType = EnergyUsageType.POWER
    +21    power_loss_factor: Optional[Expression] = None
    +22    model: PumpModel
    +23    rate_standard_m3_day: Expression
    +24    suction_pressure: Expression
    +25    discharge_pressure: Expression
    +26    fluid_density: Expression
    +27
    +28    _convert_pump_expressions = validator(
    +29        "rate_standard_m3_day",
    +30        "suction_pressure",
    +31        "discharge_pressure",
    +32        "fluid_density",
    +33        "power_loss_factor",
    +34        allow_reuse=True,
    +35        pre=True,
    +36    )(convert_expression)
    +
    + + +
    +
    + +
    + + class + PumpModel(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    13class PumpModel(EnergyModel):
    +14    typ: Literal[EnergyModelType.PUMP_MODEL] = EnergyModelType.PUMP_MODEL
    +15    chart: Union[SingleSpeedChart, VariableSpeedChart]
    +16    head_margin: float
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + PumpConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    19class PumpConsumerFunction(ConsumerFunction):
    +20    typ: Literal[ConsumerType.PUMP] = ConsumerType.PUMP
    +21    energy_usage_type: EnergyUsageType = EnergyUsageType.POWER
    +22    power_loss_factor: Optional[Expression] = None
    +23    model: PumpModel
    +24    rate_standard_m3_day: Expression
    +25    suction_pressure: Expression
    +26    discharge_pressure: Expression
    +27    fluid_density: Expression
    +28
    +29    _convert_pump_expressions = validator(
    +30        "rate_standard_m3_day",
    +31        "suction_pressure",
    +32        "discharge_pressure",
    +33        "fluid_density",
    +34        "power_loss_factor",
    +35        allow_reuse=True,
    +36        pre=True,
    +37    )(convert_expression)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/sampled.html b/docs/about/references/api/libecalc/dto/models/sampled.html new file mode 100644 index 0000000000..375eb73f4e --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/sampled.html @@ -0,0 +1,315 @@ + + + + + + + libecalc.dto.models.sampled API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.sampled

    + + + + + + +
     1from typing import List
    + 2
    + 3from libecalc.dto.models.base import EnergyModel
    + 4
    + 5
    + 6class EnergyModelSampled(EnergyModel):
    + 7    headers: List[str]
    + 8    data: List[List[float]]
    + 9    # TODO: validate number of headers equals number of vectors
    +10    # validate all vectors (in data) have equal length
    +
    + + +
    +
    + +
    + + class + EnergyModelSampled(libecalc.dto.models.base.EnergyModel): + + + +
    + +
     7class EnergyModelSampled(EnergyModel):
    + 8    headers: List[str]
    + 9    data: List[List[float]]
    +10    # TODO: validate number of headers equals number of vectors
    +11    # validate all vectors (in data) have equal length
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/tabulated.html b/docs/about/references/api/libecalc/dto/models/tabulated.html new file mode 100644 index 0000000000..f10a89ae87 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/tabulated.html @@ -0,0 +1,559 @@ + + + + + + + libecalc.dto.models.tabulated API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.tabulated

    + + + + + + +
     1from typing import List, Literal, Optional
    + 2
    + 3from pydantic import field_validator, validator
    + 4
    + 5from libecalc.dto.base import EcalcBaseModel
    + 6from libecalc.dto.models.base import ConsumerFunction
    + 7from libecalc.dto.models.sampled import EnergyModelSampled
    + 8from libecalc.dto.types import ConsumerType, EnergyModelType
    + 9from libecalc.dto.utils.validators import convert_expression
    +10from libecalc.expression import Expression
    +11
    +12
    +13class TabulatedData(EnergyModelSampled):
    +14    typ: Literal[EnergyModelType.TABULATED] = EnergyModelType.TABULATED
    +15
    +16    @field_validator("headers")
    +17    @classmethod
    +18    def validate_headers(cls, headers: List[str]) -> List[str]:
    +19        is_valid_headers = len(headers) > 0 and "FUEL" in headers or "POWER" in headers
    +20        if not is_valid_headers:
    +21            raise ValueError("TABULAR facility input type data must have a 'FUEL' or 'POWER' header")
    +22        return headers
    +23
    +24
    +25class Variables(EcalcBaseModel):
    +26    name: str
    +27    expression: Expression
    +28
    +29    _convert_variable_expression = validator("expression", allow_reuse=True, pre=True)(convert_expression)
    +30
    +31
    +32class TabulatedConsumerFunction(ConsumerFunction):
    +33    typ: Literal[ConsumerType.TABULATED] = ConsumerType.TABULATED
    +34    power_loss_factor: Optional[Expression] = None
    +35    model: TabulatedData
    +36    variables: List[Variables]
    +37
    +38    _convert_to_expression = validator("power_loss_factor", allow_reuse=True, pre=True)(convert_expression)
    +
    + + +
    +
    + +
    + + class + TabulatedData(libecalc.dto.models.sampled.EnergyModelSampled): + + + +
    + +
    14class TabulatedData(EnergyModelSampled):
    +15    typ: Literal[EnergyModelType.TABULATED] = EnergyModelType.TABULATED
    +16
    +17    @field_validator("headers")
    +18    @classmethod
    +19    def validate_headers(cls, headers: List[str]) -> List[str]:
    +20        is_valid_headers = len(headers) > 0 and "FUEL" in headers or "POWER" in headers
    +21        if not is_valid_headers:
    +22            raise ValueError("TABULAR facility input type data must have a 'FUEL' or 'POWER' header")
    +23        return headers
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    + +
    +
    @field_validator('headers')
    +
    @classmethod
    + + def + validate_headers(cls, headers: List[str]) -> List[str]: + + + +
    + +
    17    @field_validator("headers")
    +18    @classmethod
    +19    def validate_headers(cls, headers: List[str]) -> List[str]:
    +20        is_valid_headers = len(headers) > 0 and "FUEL" in headers or "POWER" in headers
    +21        if not is_valid_headers:
    +22            raise ValueError("TABULAR facility input type data must have a 'FUEL' or 'POWER' header")
    +23        return headers
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + Variables(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    26class Variables(EcalcBaseModel):
    +27    name: str
    +28    expression: Expression
    +29
    +30    _convert_variable_expression = validator("expression", allow_reuse=True, pre=True)(convert_expression)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + TabulatedConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    33class TabulatedConsumerFunction(ConsumerFunction):
    +34    typ: Literal[ConsumerType.TABULATED] = ConsumerType.TABULATED
    +35    power_loss_factor: Optional[Expression] = None
    +36    model: TabulatedData
    +37    variables: List[Variables]
    +38
    +39    _convert_to_expression = validator("power_loss_factor", allow_reuse=True, pre=True)(convert_expression)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/turbine.html b/docs/about/references/api/libecalc/dto/models/turbine.html new file mode 100644 index 0000000000..d675c64b73 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/turbine.html @@ -0,0 +1,379 @@ + + + + + + + libecalc.dto.models.turbine API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.turbine

    + + + + + + +
     1from typing import List, Literal
    + 2
    + 3from pydantic import Field, model_validator
    + 4from typing_extensions import Annotated, Self
    + 5
    + 6from libecalc.dto.types import EnergyModelType
    + 7
    + 8from .base import EnergyModel
    + 9
    +10
    +11class Turbine(EnergyModel):
    +12    typ: Literal[EnergyModelType.TURBINE] = EnergyModelType.TURBINE  # type: ignore
    +13    lower_heating_value: Annotated[float, Field(ge=0)]
    +14    turbine_loads: List[Annotated[float, Field(ge=0)]]
    +15    turbine_efficiency_fractions: List[float]
    +16
    +17    @model_validator(mode="after")
    +18    def validate_loads_and_efficiency_factors(self) -> Self:
    +19        turbine_loads, turbine_efficiencies = (
    +20            self.turbine_loads,
    +21            self.turbine_efficiency_fractions,
    +22        )
    +23        if len(turbine_loads) != len(turbine_efficiencies):
    +24            raise ValueError("Need equal number of load and efficiency values for turbine model")
    +25
    +26        if not all(0 <= x <= 1 for x in turbine_efficiencies):
    +27            raise ValueError("Turbine efficiency fraction should be a number between 0 and 1")
    +28        return self
    +
    + + +
    +
    + +
    + + class + Turbine(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    12class Turbine(EnergyModel):
    +13    typ: Literal[EnergyModelType.TURBINE] = EnergyModelType.TURBINE  # type: ignore
    +14    lower_heating_value: Annotated[float, Field(ge=0)]
    +15    turbine_loads: List[Annotated[float, Field(ge=0)]]
    +16    turbine_efficiency_fractions: List[float]
    +17
    +18    @model_validator(mode="after")
    +19    def validate_loads_and_efficiency_factors(self) -> Self:
    +20        turbine_loads, turbine_efficiencies = (
    +21            self.turbine_loads,
    +22            self.turbine_efficiency_fractions,
    +23        )
    +24        if len(turbine_loads) != len(turbine_efficiencies):
    +25            raise ValueError("Need equal number of load and efficiency values for turbine model")
    +26
    +27        if not all(0 <= x <= 1 for x in turbine_efficiencies):
    +28            raise ValueError("Turbine efficiency fraction should be a number between 0 and 1")
    +29        return self
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    + +
    +
    @model_validator(mode='after')
    + + def + validate_loads_and_efficiency_factors(self) -> typing_extensions.Self: + + + +
    + +
    18    @model_validator(mode="after")
    +19    def validate_loads_and_efficiency_factors(self) -> Self:
    +20        turbine_loads, turbine_efficiencies = (
    +21            self.turbine_loads,
    +22            self.turbine_efficiency_fractions,
    +23        )
    +24        if len(turbine_loads) != len(turbine_efficiencies):
    +25            raise ValueError("Need equal number of load and efficiency values for turbine model")
    +26
    +27        if not all(0 <= x <= 1 for x in turbine_efficiencies):
    +28            raise ValueError("Turbine efficiency fraction should be a number between 0 and 1")
    +29        return self
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/node_info.html b/docs/about/references/api/libecalc/dto/node_info.html new file mode 100644 index 0000000000..f64e8567ed --- /dev/null +++ b/docs/about/references/api/libecalc/dto/node_info.html @@ -0,0 +1,343 @@ + + + + + + + libecalc.dto.node_info API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.node_info

    + + + + + + +
     1from pydantic import BaseModel
    + 2
    + 3from libecalc.common.component_info.component_level import ComponentLevel
    + 4from libecalc.dto.base import ComponentType
    + 5from libecalc.dto.utils.validators import ComponentNameStr
    + 6
    + 7
    + 8class NodeInfo(BaseModel):
    + 9    id: str
    +10    name: ComponentNameStr
    +11    component_level: ComponentLevel
    +12    component_type: ComponentType
    +
    + + +
    +
    + +
    + + class + NodeInfo(pydantic.main.BaseModel): + + + +
    + +
     9class NodeInfo(BaseModel):
    +10    id: str
    +11    name: ComponentNameStr
    +12    component_level: ComponentLevel
    +13    component_type: ComponentType
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result.html b/docs/about/references/api/libecalc/dto/result.html new file mode 100644 index 0000000000..530ade966d --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result.html @@ -0,0 +1,262 @@ + + + + + + + libecalc.dto.result API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result

    + + + + + + +
     1from .emission import EmissionResult
    + 2from .results import (
    + 3    AssetResult,
    + 4    ComponentResult,
    + 5    CompressorModelResult,
    + 6    CompressorResult,
    + 7    ConsumerModelResult,
    + 8    ConsumerSystemResult,
    + 9    EcalcModelResult,
    +10    GeneratorSetResult,
    +11    GenericConsumerResult,
    +12    GenericModelResult,
    +13    InstallationResult,
    +14    PumpModelResult,
    +15    PumpResult,
    +16    VentingEmitterResult,
    +17)
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/base.html b/docs/about/references/api/libecalc/dto/result/base.html new file mode 100644 index 0000000000..aedcd45340 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/base.html @@ -0,0 +1,415 @@ + + + + + + + libecalc.dto.result.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.base

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from pydantic import field_validator
    + 4
    + 5from libecalc.common.math.numbers import Numbers
    + 6from libecalc.common.utils.rates import TimeSeries, TimeSeriesInt
    + 7from libecalc.dto.base import EcalcBaseModel
    + 8
    + 9
    +10def control_maximum_decimals(v):
    +11    """Control maximum number of decimals and convert null-floats to NaN."""
    +12    if isinstance(v, TimeSeries) and not isinstance(v, TimeSeriesInt):
    +13        return v.model_copy(
    +14            update={
    +15                "values": [
    +16                    float(Numbers.format_to_precision(n, precision=6)) if n is not None else n for n in v.values
    +17                ],
    +18            }
    +19        )
    +20
    +21    if isinstance(v, list):
    +22        return [control_maximum_decimals(x) for x in v]
    +23
    +24    if isinstance(v, tuple):
    +25        return [control_maximum_decimals(x) for x in v]
    +26
    +27    if isinstance(v, float):
    +28        if v.is_integer():
    +29            return v
    +30
    +31        return float(Numbers.format_to_precision(v, precision=6))
    +32
    +33    return v
    +34
    +35
    +36class EcalcResultBaseModel(EcalcBaseModel):
    +37    # TODO: Think of a better way? Seems like a lot of unnecessary work, and it is probably not obvious that we are
    +38    #   doing this at all in other places of the code.
    +39    _pre_control_maximum_decimals = field_validator("*", mode="after")(control_maximum_decimals)
    +
    + + +
    +
    + +
    + + def + control_maximum_decimals(v): + + + +
    + +
    11def control_maximum_decimals(v):
    +12    """Control maximum number of decimals and convert null-floats to NaN."""
    +13    if isinstance(v, TimeSeries) and not isinstance(v, TimeSeriesInt):
    +14        return v.model_copy(
    +15            update={
    +16                "values": [
    +17                    float(Numbers.format_to_precision(n, precision=6)) if n is not None else n for n in v.values
    +18                ],
    +19            }
    +20        )
    +21
    +22    if isinstance(v, list):
    +23        return [control_maximum_decimals(x) for x in v]
    +24
    +25    if isinstance(v, tuple):
    +26        return [control_maximum_decimals(x) for x in v]
    +27
    +28    if isinstance(v, float):
    +29        if v.is_integer():
    +30            return v
    +31
    +32        return float(Numbers.format_to_precision(v, precision=6))
    +33
    +34    return v
    +
    + + +

    Control maximum number of decimals and convert null-floats to NaN.

    +
    + + +
    +
    + +
    + + class + EcalcResultBaseModel(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    37class EcalcResultBaseModel(EcalcBaseModel):
    +38    # TODO: Think of a better way? Seems like a lot of unnecessary work, and it is probably not obvious that we are
    +39    #   doing this at all in other places of the code.
    +40    _pre_control_maximum_decimals = field_validator("*", mode="after")(control_maximum_decimals)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/emission.html b/docs/about/references/api/libecalc/dto/result/emission.html new file mode 100644 index 0000000000..5a06540993 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/emission.html @@ -0,0 +1,640 @@ + + + + + + + libecalc.dto.result.emission API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.emission

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from datetime import datetime
    + 4from typing import List
    + 5
    + 6from typing_extensions import Self
    + 7
    + 8from libecalc.common.units import Unit
    + 9from libecalc.common.utils.rates import (
    +10    TimeSeriesFloat,
    +11    TimeSeriesIntensity,
    +12    TimeSeriesRate,
    +13    TimeSeriesVolumesCumulative,
    +14)
    +15from libecalc.core.result.emission import EmissionResult as EmissionCoreResult
    +16from libecalc.dto.result.tabular_time_series import TabularTimeSeries
    +17
    +18
    +19class EmissionResult(TabularTimeSeries):
    +20    """The emissions for a result component."""
    +21
    +22    name: str
    +23    rate: TimeSeriesRate
    +24    cumulative: TimeSeriesVolumesCumulative
    +25
    +26    @classmethod
    +27    def create_empty(cls, name: str, timesteps: List[datetime]):
    +28        """Empty placeholder for emissions, when needed
    +29
    +30        Args:
    +31            name:
    +32            timesteps:
    +33
    +34        Returns:
    +35
    +36        """
    +37        return cls(
    +38            name=name,
    +39            timesteps=timesteps,
    +40            rate=TimeSeriesRate(
    +41                timesteps=timesteps,
    +42                values=[0] * len(timesteps),
    +43                unit=Unit.TONS_PER_DAY,
    +44            ),
    +45            cumulative=TimeSeriesVolumesCumulative(
    +46                timesteps=timesteps,
    +47                values=[0] * len(timesteps),
    +48                unit=Unit.TONS,
    +49            ),
    +50        )
    +51
    +52
    +53class PartialEmissionResult(TabularTimeSeries):
    +54    """The partial emissions - a direct translation from the core emission results"""
    +55
    +56    name: str
    +57    rate: TimeSeriesRate
    +58
    +59    @classmethod
    +60    def from_emission_core_result(cls, emission_result: EmissionCoreResult, regularity: TimeSeriesFloat) -> Self:
    +61        return PartialEmissionResult(
    +62            name=emission_result.name,
    +63            timesteps=emission_result.timesteps,
    +64            rate=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.rate, regularity),
    +65        )
    +66
    +67
    +68class EmissionIntensityResult(TabularTimeSeries):
    +69    name: str
    +70    intensity_sm3: TimeSeriesIntensity
    +71    intensity_boe: TimeSeriesIntensity
    +72    intensity_yearly_sm3: TimeSeriesIntensity
    +73    intensity_yearly_boe: TimeSeriesIntensity
    +
    + + +
    +
    + +
    + + class + EmissionResult(libecalc.dto.result.tabular_time_series.TabularTimeSeries): + + + +
    + +
    20class EmissionResult(TabularTimeSeries):
    +21    """The emissions for a result component."""
    +22
    +23    name: str
    +24    rate: TimeSeriesRate
    +25    cumulative: TimeSeriesVolumesCumulative
    +26
    +27    @classmethod
    +28    def create_empty(cls, name: str, timesteps: List[datetime]):
    +29        """Empty placeholder for emissions, when needed
    +30
    +31        Args:
    +32            name:
    +33            timesteps:
    +34
    +35        Returns:
    +36
    +37        """
    +38        return cls(
    +39            name=name,
    +40            timesteps=timesteps,
    +41            rate=TimeSeriesRate(
    +42                timesteps=timesteps,
    +43                values=[0] * len(timesteps),
    +44                unit=Unit.TONS_PER_DAY,
    +45            ),
    +46            cumulative=TimeSeriesVolumesCumulative(
    +47                timesteps=timesteps,
    +48                values=[0] * len(timesteps),
    +49                unit=Unit.TONS,
    +50            ),
    +51        )
    +
    + + +

    The emissions for a result component.

    +
    + + +
    + +
    +
    @classmethod
    + + def + create_empty(cls, name: str, timesteps: List[datetime.datetime]): + + + +
    + +
    27    @classmethod
    +28    def create_empty(cls, name: str, timesteps: List[datetime]):
    +29        """Empty placeholder for emissions, when needed
    +30
    +31        Args:
    +32            name:
    +33            timesteps:
    +34
    +35        Returns:
    +36
    +37        """
    +38        return cls(
    +39            name=name,
    +40            timesteps=timesteps,
    +41            rate=TimeSeriesRate(
    +42                timesteps=timesteps,
    +43                values=[0] * len(timesteps),
    +44                unit=Unit.TONS_PER_DAY,
    +45            ),
    +46            cumulative=TimeSeriesVolumesCumulative(
    +47                timesteps=timesteps,
    +48                values=[0] * len(timesteps),
    +49                unit=Unit.TONS,
    +50            ),
    +51        )
    +
    + + +

    Empty placeholder for emissions, when needed

    + +

    Args: + name: + timesteps:

    + +

    Returns:

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + PartialEmissionResult(libecalc.dto.result.tabular_time_series.TabularTimeSeries): + + + +
    + +
    54class PartialEmissionResult(TabularTimeSeries):
    +55    """The partial emissions - a direct translation from the core emission results"""
    +56
    +57    name: str
    +58    rate: TimeSeriesRate
    +59
    +60    @classmethod
    +61    def from_emission_core_result(cls, emission_result: EmissionCoreResult, regularity: TimeSeriesFloat) -> Self:
    +62        return PartialEmissionResult(
    +63            name=emission_result.name,
    +64            timesteps=emission_result.timesteps,
    +65            rate=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.rate, regularity),
    +66        )
    +
    + + +

    The partial emissions - a direct translation from the core emission results

    +
    + + +
    + +
    +
    @classmethod
    + + def + from_emission_core_result( cls, emission_result: libecalc.core.result.emission.EmissionResult, regularity: libecalc.common.utils.rates.TimeSeriesFloat) -> typing_extensions.Self: + + + +
    + +
    60    @classmethod
    +61    def from_emission_core_result(cls, emission_result: EmissionCoreResult, regularity: TimeSeriesFloat) -> Self:
    +62        return PartialEmissionResult(
    +63            name=emission_result.name,
    +64            timesteps=emission_result.timesteps,
    +65            rate=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.rate, regularity),
    +66        )
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + EmissionIntensityResult(libecalc.dto.result.tabular_time_series.TabularTimeSeries): + + + +
    + +
    69class EmissionIntensityResult(TabularTimeSeries):
    +70    name: str
    +71    intensity_sm3: TimeSeriesIntensity
    +72    intensity_boe: TimeSeriesIntensity
    +73    intensity_yearly_sm3: TimeSeriesIntensity
    +74    intensity_yearly_boe: TimeSeriesIntensity
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/results.html b/docs/about/references/api/libecalc/dto/result/results.html new file mode 100644 index 0000000000..5eeb1079ec --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/results.html @@ -0,0 +1,2271 @@ + + + + + + + libecalc.dto.result.results API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.results

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3from operator import attrgetter
    +  4from typing import Any, Dict, List, Literal, Optional, Union
    +  5
    +  6from pydantic import Field, field_validator
    +  7from pydantic_core.core_schema import ValidationInfo
    +  8from typing_extensions import Annotated
    +  9
    + 10from libecalc.common.component_info.component_level import ComponentLevel
    + 11from libecalc.common.logger import logger
    + 12from libecalc.common.stream_conditions import TimeSeriesStreamConditions
    + 13from libecalc.common.time_utils import Frequency
    + 14from libecalc.common.units import Unit
    + 15from libecalc.common.utils.rates import (
    + 16    TimeSeriesBoolean,
    + 17    TimeSeriesFloat,
    + 18    TimeSeriesInt,
    + 19    TimeSeriesRate,
    + 20    TimeSeriesVolumesCumulative,
    + 21)
    + 22from libecalc.core.models.results.compressor import (
    + 23    CompressorTrainCommonShaftFailureStatus,
    + 24)
    + 25from libecalc.dto.base import ComponentType
    + 26from libecalc.dto.models import SingleSpeedChart, VariableSpeedChart
    + 27from libecalc.dto.result.base import EcalcResultBaseModel
    + 28from libecalc.dto.result.emission import EmissionIntensityResult, EmissionResult
    + 29from libecalc.dto.result.tabular_time_series import TabularTimeSeries
    + 30
    + 31
    + 32class NodeInfo(EcalcResultBaseModel):
    + 33    componentType: ComponentType
    + 34    component_level: ComponentLevel
    + 35    parent: Optional[str] = None  # reference parent id
    + 36    name: str
    + 37
    + 38
    + 39class CommonResultBase(TabularTimeSeries):
    + 40    """Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc."""
    + 41
    + 42    # we need to use camelCase here due to serialization/stub restrictions wrt FE stub generation
    + 43
    + 44    is_valid: TimeSeriesBoolean
    + 45
    + 46    # We need both energy usage and power rate since we sometimes want both fuel and power usage.
    + 47    energy_usage: TimeSeriesRate
    + 48    energy_usage_cumulative: TimeSeriesVolumesCumulative
    + 49
    + 50    power: Optional[TimeSeriesRate] = None
    + 51    power_cumulative: Optional[TimeSeriesVolumesCumulative] = None
    + 52
    + 53
    + 54class ComponentResultBase(CommonResultBase, NodeInfo):
    + 55    id: str
    + 56    emissions: Dict[str, EmissionResult]
    + 57
    + 58
    + 59class EquipmentResultBase(ComponentResultBase):
    + 60    ...
    + 61
    + 62
    + 63class AssetResult(ComponentResultBase):
    + 64    """The aggregated eCalc model result."""
    + 65
    + 66    componentType: Literal[ComponentType.ASSET]
    + 67    hydrocarbon_export_rate: TimeSeriesRate
    + 68    emission_intensities: List[EmissionIntensityResult]
    + 69
    + 70
    + 71class InstallationResult(AssetResult):
    + 72    """The installation result component."""
    + 73
    + 74    componentType: Literal[ComponentType.INSTALLATION]
    + 75    regularity: TimeSeriesFloat  # Regularity is currently set at per installation, send through. Possibly skip in output if confusing
    + 76
    + 77
    + 78class GeneratorSetResult(EquipmentResultBase):
    + 79    """The Generator set result component."""
    + 80
    + 81    componentType: Literal[ComponentType.GENERATOR_SET]
    + 82    power_capacity_margin: TimeSeriesRate
    + 83
    + 84
    + 85class ConsumerSystemResult(EquipmentResultBase):
    + 86    componentType: Literal[
    + 87        ComponentType.PUMP_SYSTEM,
    + 88        ComponentType.COMPRESSOR_SYSTEM,
    + 89        ComponentType.CONSUMER_SYSTEM_V2,
    + 90    ]
    + 91
    + 92    consumer_type: Literal[ComponentType.COMPRESSOR, ComponentType.PUMP] = None
    + 93
    + 94    @field_validator("consumer_type", mode="before")
    + 95    def set_consumer_type_based_on_component_type_if_possible(cls, consumer_type, info: ValidationInfo):
    + 96        """
    + 97        Set consumer type for legacy system where component type contains the same information.
    + 98        """
    + 99        component_type = info.data.get("componentType")
    +100        if consumer_type is None:
    +101            if component_type == ComponentType.PUMP_SYSTEM:
    +102                return ComponentType.PUMP
    +103            elif component_type == ComponentType.COMPRESSOR_SYSTEM:
    +104                return ComponentType.COMPRESSOR
    +105
    +106        return consumer_type
    +107
    +108    operational_settings_used: Optional[TimeSeriesInt] = Field(
    +109        None,
    +110        description="The operational settings used for this system. "
    +111        "0 indicates that no valid operational setting was found.",
    +112    )
    +113    operational_settings_results: Optional[Dict[int, List[Any]]] = None
    +114
    +115
    +116class GenericConsumerResult(EquipmentResultBase):
    +117    componentType: Literal[ComponentType.GENERIC]
    +118
    +119
    +120class PumpResult(EquipmentResultBase):
    +121    componentType: Literal[ComponentType.PUMP]
    +122    inlet_liquid_rate_m3_per_day: TimeSeriesRate
    +123    inlet_pressure_bar: TimeSeriesFloat
    +124    outlet_pressure_bar: TimeSeriesFloat
    +125    operational_head: TimeSeriesFloat
    +126
    +127    streams: Optional[List[TimeSeriesStreamConditions]]  # Optional because only in v2
    +128
    +129
    +130class CompressorResult(EquipmentResultBase):
    +131    componentType: Literal[ComponentType.COMPRESSOR]
    +132    recirculation_loss: TimeSeriesRate
    +133    rate_exceeds_maximum: TimeSeriesBoolean
    +134    outlet_pressure_before_choking: TimeSeriesFloat
    +135
    +136    streams: Optional[List[TimeSeriesStreamConditions]]  # Optional because only in v2
    +137
    +138
    +139class VentingEmitterResult(EquipmentResultBase):
    +140    componentType: Literal[ComponentType.VENTING_EMITTER]
    +141
    +142
    +143class ConsumerModelResultBase(NodeInfo, CommonResultBase):
    +144    """The Consumer base result component."""
    +145
    +146    ...
    +147
    +148
    +149class PumpModelResult(ConsumerModelResultBase):
    +150    """The Pump result component."""
    +151
    +152    componentType: Literal[ComponentType.PUMP]
    +153    inlet_liquid_rate_m3_per_day: Optional[TimeSeriesRate] = None
    +154    inlet_pressure_bar: Optional[TimeSeriesFloat] = None
    +155    outlet_pressure_bar: Optional[TimeSeriesFloat] = None
    +156    operational_head: Optional[TimeSeriesFloat] = None
    +157    is_valid: TimeSeriesBoolean
    +158
    +159
    +160class TurbineModelResult(EcalcResultBaseModel):
    +161    energy_usage_unit: Unit
    +162    power_unit: Unit
    +163    efficiency: TimeSeriesFloat
    +164    energy_usage: TimeSeriesRate
    +165    exceeds_maximum_load: TimeSeriesBoolean
    +166    fuel_rate: TimeSeriesRate
    +167    is_valid: TimeSeriesBoolean
    +168    load: TimeSeriesRate
    +169    power: TimeSeriesRate
    +170
    +171
    +172class CompressorStreamConditionResult(EcalcResultBaseModel):
    +173    actual_rate_m3_per_hr: TimeSeriesRate
    +174    actual_rate_before_asv_m3_per_hr: TimeSeriesRate
    +175    kappa: TimeSeriesFloat
    +176    density_kg_per_m3: TimeSeriesRate
    +177    pressure: TimeSeriesFloat
    +178    pressure_before_choking: TimeSeriesFloat
    +179    temperature_kelvin: TimeSeriesFloat
    +180    z: TimeSeriesFloat
    +181
    +182
    +183class CompressorModelStageResult(EcalcResultBaseModel):
    +184    chart: Optional[Union[SingleSpeedChart, VariableSpeedChart]]
    +185    chart_area_flags: List[str]
    +186    energy_usage_unit: Unit
    +187    power_unit: Unit
    +188    fluid_composition: Dict[str, Optional[float]]
    +189
    +190    head_exceeds_maximum: TimeSeriesBoolean
    +191    is_valid: TimeSeriesBoolean
    +192    polytropic_efficiency: TimeSeriesFloat
    +193    polytropic_enthalpy_change_before_choke_kJ_per_kg: TimeSeriesFloat
    +194    polytropic_enthalpy_change_kJ_per_kg: TimeSeriesFloat
    +195    polytropic_head_kJ_per_kg: TimeSeriesFloat
    +196    asv_recirculation_loss_mw: TimeSeriesRate
    +197    energy_usage: TimeSeriesRate
    +198    mass_rate_kg_per_hr: TimeSeriesRate
    +199    mass_rate_before_asv_kg_per_hr: TimeSeriesRate
    +200    power: TimeSeriesRate
    +201    pressure_is_choked: TimeSeriesBoolean
    +202    rate_exceeds_maximum: TimeSeriesBoolean
    +203    rate_has_recirculation: TimeSeriesBoolean
    +204    speed: TimeSeriesFloat
    +205    inlet_stream_condition: CompressorStreamConditionResult
    +206    outlet_stream_condition: CompressorStreamConditionResult
    +207
    +208
    +209class CompressorModelResult(ConsumerModelResultBase):
    +210    componentType: Literal[ComponentType.COMPRESSOR]
    +211    failure_status: List[Optional[CompressorTrainCommonShaftFailureStatus]]
    +212    requested_inlet_pressure: TimeSeriesFloat
    +213    requested_outlet_pressure: TimeSeriesFloat
    +214    rate: TimeSeriesRate
    +215    maximum_rate: TimeSeriesRate
    +216    stage_results: List[CompressorModelStageResult]
    +217    turbine_result: Optional[TurbineModelResult] = None
    +218    energy_usage_unit: Unit
    +219    power_unit: Unit
    +220
    +221
    +222class GenericModelResult(ConsumerModelResultBase):
    +223    """Generic consumer result component."""
    +224
    +225    componentType: Literal[ComponentType.GENERIC]
    +226
    +227
    +228# Consumer result is referred to as ENERGY_USAGE_MODEL in the input YAML
    +229ConsumerModelResult = Annotated[
    +230    Union[CompressorModelResult, PumpModelResult, GenericModelResult],
    +231    Field(discriminator="componentType"),
    +232]
    +233
    +234ComponentResult = Annotated[
    +235    Union[
    +236        AssetResult,
    +237        InstallationResult,
    +238        GeneratorSetResult,
    +239        ConsumerSystemResult,
    +240        CompressorResult,
    +241        PumpResult,
    +242        GenericConsumerResult,
    +243        VentingEmitterResult,
    +244    ],
    +245    Field(discriminator="componentType"),
    +246]
    +247
    +248
    +249class EcalcModelResult(EcalcResultBaseModel):
    +250    """Result object holding one component for each part of the eCalc model run:
    +251
    +252    ModelResult, InstallationResult, GeneratorSetResult, ConsumerSystemResult, ConsumerGroupResult and ConsumerResult
    +253    """
    +254
    +255    component_result: ComponentResult
    +256    # Setting min and max items to be able to generate OpenAPI:
    +257    # Ref. https://github.com/developmentseed/geojson-pydantic/issues/42
    +258    sub_components: Annotated[List[ComponentResult], Field(min_items=0, max_items=10000)]
    +259    models: Annotated[List[ConsumerModelResult], Field(min_items=0, max_items=10000)]
    +260
    +261    @field_validator("sub_components")
    +262    @classmethod
    +263    def sort_sub_components(cls, sub_components):
    +264        return sorted(sub_components, key=attrgetter("componentType", "name"))
    +265
    +266    @field_validator("models")
    +267    @classmethod
    +268    def sort_models(cls, models):
    +269        return sorted(models, key=attrgetter("componentType", "name"))
    +270
    +271    @property
    +272    def timesteps(self):
    +273        return self.component_result.timesteps
    +274
    +275    @property
    +276    def components(self) -> List[ComponentResult]:
    +277        return [self.component_result, *self.sub_components]
    +278
    +279    def get_components(self, component_ids: List[str]) -> List[ComponentResult]:
    +280        return [component for component in self.components if component.id in component_ids]
    +281
    +282    def get_component_by_name(self, component_name: str) -> Optional[ComponentResult]:
    +283        components = [component for component in self.components if component.name == component_name]
    +284        if not components:
    +285            return None
    +286
    +287        if len(components) > 1:
    +288            logger.warning(f"Querying duplicate component {component_name}. Returning first match")
    +289
    +290        return components[0]
    +291
    +292    def resample(self, freq: Frequency) -> EcalcModelResult:
    +293        return self.__class__(
    +294            component_result=self.component_result.resample(freq),
    +295            sub_components=[sub_component.resample(freq) for sub_component in self.sub_components],
    +296            models=[model.resample(freq) for model in self.models],
    +297        )
    +
    + + +
    +
    + +
    + + class + NodeInfo(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    33class NodeInfo(EcalcResultBaseModel):
    +34    componentType: ComponentType
    +35    component_level: ComponentLevel
    +36    parent: Optional[str] = None  # reference parent id
    +37    name: str
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CommonResultBase(libecalc.dto.result.tabular_time_series.TabularTimeSeries): + + + +
    + +
    40class CommonResultBase(TabularTimeSeries):
    +41    """Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc."""
    +42
    +43    # we need to use camelCase here due to serialization/stub restrictions wrt FE stub generation
    +44
    +45    is_valid: TimeSeriesBoolean
    +46
    +47    # We need both energy usage and power rate since we sometimes want both fuel and power usage.
    +48    energy_usage: TimeSeriesRate
    +49    energy_usage_cumulative: TimeSeriesVolumesCumulative
    +50
    +51    power: Optional[TimeSeriesRate] = None
    +52    power_cumulative: Optional[TimeSeriesVolumesCumulative] = None
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + ComponentResultBase(CommonResultBase, NodeInfo): + + + +
    + +
    55class ComponentResultBase(CommonResultBase, NodeInfo):
    +56    id: str
    +57    emissions: Dict[str, EmissionResult]
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + EquipmentResultBase(ComponentResultBase): + + + +
    + +
    60class EquipmentResultBase(ComponentResultBase):
    +61    ...
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + AssetResult(ComponentResultBase): + + + +
    + +
    64class AssetResult(ComponentResultBase):
    +65    """The aggregated eCalc model result."""
    +66
    +67    componentType: Literal[ComponentType.ASSET]
    +68    hydrocarbon_export_rate: TimeSeriesRate
    +69    emission_intensities: List[EmissionIntensityResult]
    +
    + + +

    The aggregated eCalc model result.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + InstallationResult(AssetResult): + + + +
    + +
    72class InstallationResult(AssetResult):
    +73    """The installation result component."""
    +74
    +75    componentType: Literal[ComponentType.INSTALLATION]
    +76    regularity: TimeSeriesFloat  # Regularity is currently set at per installation, send through. Possibly skip in output if confusing
    +
    + + +

    The installation result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + GeneratorSetResult(EquipmentResultBase): + + + +
    + +
    79class GeneratorSetResult(EquipmentResultBase):
    +80    """The Generator set result component."""
    +81
    +82    componentType: Literal[ComponentType.GENERATOR_SET]
    +83    power_capacity_margin: TimeSeriesRate
    +
    + + +

    The Generator set result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + ConsumerSystemResult(EquipmentResultBase): + + + +
    + +
     86class ConsumerSystemResult(EquipmentResultBase):
    + 87    componentType: Literal[
    + 88        ComponentType.PUMP_SYSTEM,
    + 89        ComponentType.COMPRESSOR_SYSTEM,
    + 90        ComponentType.CONSUMER_SYSTEM_V2,
    + 91    ]
    + 92
    + 93    consumer_type: Literal[ComponentType.COMPRESSOR, ComponentType.PUMP] = None
    + 94
    + 95    @field_validator("consumer_type", mode="before")
    + 96    def set_consumer_type_based_on_component_type_if_possible(cls, consumer_type, info: ValidationInfo):
    + 97        """
    + 98        Set consumer type for legacy system where component type contains the same information.
    + 99        """
    +100        component_type = info.data.get("componentType")
    +101        if consumer_type is None:
    +102            if component_type == ComponentType.PUMP_SYSTEM:
    +103                return ComponentType.PUMP
    +104            elif component_type == ComponentType.COMPRESSOR_SYSTEM:
    +105                return ComponentType.COMPRESSOR
    +106
    +107        return consumer_type
    +108
    +109    operational_settings_used: Optional[TimeSeriesInt] = Field(
    +110        None,
    +111        description="The operational settings used for this system. "
    +112        "0 indicates that no valid operational setting was found.",
    +113    )
    +114    operational_settings_results: Optional[Dict[int, List[Any]]] = None
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    + +
    +
    @field_validator('consumer_type', mode='before')
    + + def + set_consumer_type_based_on_component_type_if_possible(cls, consumer_type, info: pydantic_core.core_schema.ValidationInfo): + + + +
    + +
     95    @field_validator("consumer_type", mode="before")
    + 96    def set_consumer_type_based_on_component_type_if_possible(cls, consumer_type, info: ValidationInfo):
    + 97        """
    + 98        Set consumer type for legacy system where component type contains the same information.
    + 99        """
    +100        component_type = info.data.get("componentType")
    +101        if consumer_type is None:
    +102            if component_type == ComponentType.PUMP_SYSTEM:
    +103                return ComponentType.PUMP
    +104            elif component_type == ComponentType.COMPRESSOR_SYSTEM:
    +105                return ComponentType.COMPRESSOR
    +106
    +107        return consumer_type
    +
    + + +

    Set consumer type for legacy system where component type contains the same information.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + GenericConsumerResult(EquipmentResultBase): + + + +
    + +
    117class GenericConsumerResult(EquipmentResultBase):
    +118    componentType: Literal[ComponentType.GENERIC]
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + PumpResult(EquipmentResultBase): + + + +
    + +
    121class PumpResult(EquipmentResultBase):
    +122    componentType: Literal[ComponentType.PUMP]
    +123    inlet_liquid_rate_m3_per_day: TimeSeriesRate
    +124    inlet_pressure_bar: TimeSeriesFloat
    +125    outlet_pressure_bar: TimeSeriesFloat
    +126    operational_head: TimeSeriesFloat
    +127
    +128    streams: Optional[List[TimeSeriesStreamConditions]]  # Optional because only in v2
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + CompressorResult(EquipmentResultBase): + + + +
    + +
    131class CompressorResult(EquipmentResultBase):
    +132    componentType: Literal[ComponentType.COMPRESSOR]
    +133    recirculation_loss: TimeSeriesRate
    +134    rate_exceeds_maximum: TimeSeriesBoolean
    +135    outlet_pressure_before_choking: TimeSeriesFloat
    +136
    +137    streams: Optional[List[TimeSeriesStreamConditions]]  # Optional because only in v2
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + VentingEmitterResult(EquipmentResultBase): + + + +
    + +
    140class VentingEmitterResult(EquipmentResultBase):
    +141    componentType: Literal[ComponentType.VENTING_EMITTER]
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + ConsumerModelResultBase(NodeInfo, CommonResultBase): + + + +
    + +
    144class ConsumerModelResultBase(NodeInfo, CommonResultBase):
    +145    """The Consumer base result component."""
    +146
    +147    ...
    +
    + + +

    The Consumer base result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + PumpModelResult(ConsumerModelResultBase): + + + +
    + +
    150class PumpModelResult(ConsumerModelResultBase):
    +151    """The Pump result component."""
    +152
    +153    componentType: Literal[ComponentType.PUMP]
    +154    inlet_liquid_rate_m3_per_day: Optional[TimeSeriesRate] = None
    +155    inlet_pressure_bar: Optional[TimeSeriesFloat] = None
    +156    outlet_pressure_bar: Optional[TimeSeriesFloat] = None
    +157    operational_head: Optional[TimeSeriesFloat] = None
    +158    is_valid: TimeSeriesBoolean
    +
    + + +

    The Pump result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + TurbineModelResult(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    161class TurbineModelResult(EcalcResultBaseModel):
    +162    energy_usage_unit: Unit
    +163    power_unit: Unit
    +164    efficiency: TimeSeriesFloat
    +165    energy_usage: TimeSeriesRate
    +166    exceeds_maximum_load: TimeSeriesBoolean
    +167    fuel_rate: TimeSeriesRate
    +168    is_valid: TimeSeriesBoolean
    +169    load: TimeSeriesRate
    +170    power: TimeSeriesRate
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorStreamConditionResult(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    173class CompressorStreamConditionResult(EcalcResultBaseModel):
    +174    actual_rate_m3_per_hr: TimeSeriesRate
    +175    actual_rate_before_asv_m3_per_hr: TimeSeriesRate
    +176    kappa: TimeSeriesFloat
    +177    density_kg_per_m3: TimeSeriesRate
    +178    pressure: TimeSeriesFloat
    +179    pressure_before_choking: TimeSeriesFloat
    +180    temperature_kelvin: TimeSeriesFloat
    +181    z: TimeSeriesFloat
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorModelStageResult(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    184class CompressorModelStageResult(EcalcResultBaseModel):
    +185    chart: Optional[Union[SingleSpeedChart, VariableSpeedChart]]
    +186    chart_area_flags: List[str]
    +187    energy_usage_unit: Unit
    +188    power_unit: Unit
    +189    fluid_composition: Dict[str, Optional[float]]
    +190
    +191    head_exceeds_maximum: TimeSeriesBoolean
    +192    is_valid: TimeSeriesBoolean
    +193    polytropic_efficiency: TimeSeriesFloat
    +194    polytropic_enthalpy_change_before_choke_kJ_per_kg: TimeSeriesFloat
    +195    polytropic_enthalpy_change_kJ_per_kg: TimeSeriesFloat
    +196    polytropic_head_kJ_per_kg: TimeSeriesFloat
    +197    asv_recirculation_loss_mw: TimeSeriesRate
    +198    energy_usage: TimeSeriesRate
    +199    mass_rate_kg_per_hr: TimeSeriesRate
    +200    mass_rate_before_asv_kg_per_hr: TimeSeriesRate
    +201    power: TimeSeriesRate
    +202    pressure_is_choked: TimeSeriesBoolean
    +203    rate_exceeds_maximum: TimeSeriesBoolean
    +204    rate_has_recirculation: TimeSeriesBoolean
    +205    speed: TimeSeriesFloat
    +206    inlet_stream_condition: CompressorStreamConditionResult
    +207    outlet_stream_condition: CompressorStreamConditionResult
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorModelResult(ConsumerModelResultBase): + + + +
    + +
    210class CompressorModelResult(ConsumerModelResultBase):
    +211    componentType: Literal[ComponentType.COMPRESSOR]
    +212    failure_status: List[Optional[CompressorTrainCommonShaftFailureStatus]]
    +213    requested_inlet_pressure: TimeSeriesFloat
    +214    requested_outlet_pressure: TimeSeriesFloat
    +215    rate: TimeSeriesRate
    +216    maximum_rate: TimeSeriesRate
    +217    stage_results: List[CompressorModelStageResult]
    +218    turbine_result: Optional[TurbineModelResult] = None
    +219    energy_usage_unit: Unit
    +220    power_unit: Unit
    +
    + + +

    The Consumer base result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + GenericModelResult(ConsumerModelResultBase): + + + +
    + +
    223class GenericModelResult(ConsumerModelResultBase):
    +224    """Generic consumer result component."""
    +225
    +226    componentType: Literal[ComponentType.GENERIC]
    +
    + + +

    Generic consumer result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + EcalcModelResult(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    250class EcalcModelResult(EcalcResultBaseModel):
    +251    """Result object holding one component for each part of the eCalc model run:
    +252
    +253    ModelResult, InstallationResult, GeneratorSetResult, ConsumerSystemResult, ConsumerGroupResult and ConsumerResult
    +254    """
    +255
    +256    component_result: ComponentResult
    +257    # Setting min and max items to be able to generate OpenAPI:
    +258    # Ref. https://github.com/developmentseed/geojson-pydantic/issues/42
    +259    sub_components: Annotated[List[ComponentResult], Field(min_items=0, max_items=10000)]
    +260    models: Annotated[List[ConsumerModelResult], Field(min_items=0, max_items=10000)]
    +261
    +262    @field_validator("sub_components")
    +263    @classmethod
    +264    def sort_sub_components(cls, sub_components):
    +265        return sorted(sub_components, key=attrgetter("componentType", "name"))
    +266
    +267    @field_validator("models")
    +268    @classmethod
    +269    def sort_models(cls, models):
    +270        return sorted(models, key=attrgetter("componentType", "name"))
    +271
    +272    @property
    +273    def timesteps(self):
    +274        return self.component_result.timesteps
    +275
    +276    @property
    +277    def components(self) -> List[ComponentResult]:
    +278        return [self.component_result, *self.sub_components]
    +279
    +280    def get_components(self, component_ids: List[str]) -> List[ComponentResult]:
    +281        return [component for component in self.components if component.id in component_ids]
    +282
    +283    def get_component_by_name(self, component_name: str) -> Optional[ComponentResult]:
    +284        components = [component for component in self.components if component.name == component_name]
    +285        if not components:
    +286            return None
    +287
    +288        if len(components) > 1:
    +289            logger.warning(f"Querying duplicate component {component_name}. Returning first match")
    +290
    +291        return components[0]
    +292
    +293    def resample(self, freq: Frequency) -> EcalcModelResult:
    +294        return self.__class__(
    +295            component_result=self.component_result.resample(freq),
    +296            sub_components=[sub_component.resample(freq) for sub_component in self.sub_components],
    +297            models=[model.resample(freq) for model in self.models],
    +298        )
    +
    + + +

    Result object holding one component for each part of the eCalc model run:

    + +

    ModelResult, InstallationResult, GeneratorSetResult, ConsumerSystemResult, ConsumerGroupResult and ConsumerResult

    +
    + + +
    + +
    +
    @field_validator('sub_components')
    +
    @classmethod
    + + def + sort_sub_components(cls, sub_components): + + + +
    + +
    262    @field_validator("sub_components")
    +263    @classmethod
    +264    def sort_sub_components(cls, sub_components):
    +265        return sorted(sub_components, key=attrgetter("componentType", "name"))
    +
    + + + + +
    +
    + +
    +
    @field_validator('models')
    +
    @classmethod
    + + def + sort_models(cls, models): + + + +
    + +
    267    @field_validator("models")
    +268    @classmethod
    +269    def sort_models(cls, models):
    +270        return sorted(models, key=attrgetter("componentType", "name"))
    +
    + + + + +
    +
    + + + +
    280    def get_components(self, component_ids: List[str]) -> List[ComponentResult]:
    +281        return [component for component in self.components if component.id in component_ids]
    +
    + + + + +
    +
    + + + +
    283    def get_component_by_name(self, component_name: str) -> Optional[ComponentResult]:
    +284        components = [component for component in self.components if component.name == component_name]
    +285        if not components:
    +286            return None
    +287
    +288        if len(components) > 1:
    +289            logger.warning(f"Querying duplicate component {component_name}. Returning first match")
    +290
    +291        return components[0]
    +
    + + + + +
    +
    + +
    + + def + resample( self, freq: libecalc.common.time_utils.Frequency) -> libecalc.dto.result.results.EcalcModelResult: + + + +
    + +
    293    def resample(self, freq: Frequency) -> EcalcModelResult:
    +294        return self.__class__(
    +295            component_result=self.component_result.resample(freq),
    +296            sub_components=[sub_component.resample(freq) for sub_component in self.sub_components],
    +297            models=[model.resample(freq) for model in self.models],
    +298        )
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/tabular_time_series.html b/docs/about/references/api/libecalc/dto/result/tabular_time_series.html new file mode 100644 index 0000000000..bb82a5bce0 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/tabular_time_series.html @@ -0,0 +1,626 @@ + + + + + + + libecalc.dto.result.tabular_time_series API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.tabular_time_series

    + + + + + + +
      1from abc import ABC
    +  2from datetime import datetime
    +  3from typing import List, Optional
    +  4
    +  5import pandas as pd
    +  6from typing_extensions import Self
    +  7
    +  8from libecalc.common.time_utils import Frequency, resample_time_steps
    +  9from libecalc.common.units import Unit
    + 10from libecalc.common.utils.rates import (
    + 11    RateType,
    + 12    TimeSeries,
    + 13    TimeSeriesBoolean,
    + 14    TimeSeriesRate,
    + 15    TimeSeriesVolumesCumulative,
    + 16)
    + 17from libecalc.dto.result.base import EcalcResultBaseModel
    + 18
    + 19
    + 20class TabularTimeSeries(ABC, EcalcResultBaseModel):
    + 21    name: str
    + 22    timesteps: List[datetime]
    + 23
    + 24    def to_dataframe(
    + 25        self,
    + 26        prefix: Optional[str] = None,
    + 27    ) -> pd.DataFrame:
    + 28        timesteps = self.timesteps
    + 29        df = pd.DataFrame(index=timesteps)
    + 30
    + 31        for attribute_name, attribute_value in self.__dict__.items():
    + 32            if isinstance(attribute_value, TimeSeries):
    + 33                unit_value = attribute_value.unit
    + 34                if isinstance(attribute_value, TimeSeriesRate):
    + 35                    unit_extension = "sd" if attribute_value.rate_type == RateType.STREAM_DAY else "cd"
    + 36                    if attribute_value.unit == Unit.MEGA_WATT:
    + 37                        unit_value = unit_value.replace(Unit.MEGA_WATT, f"{Unit.MEGA_WATT} ({unit_extension})")
    + 38                    else:
    + 39                        unit_value = unit_value.replace("/d", f"/{unit_extension}")
    + 40                elif isinstance(attribute_value, TimeSeriesVolumesCumulative):
    + 41                    unit_value = unit_value.replace(attribute_value.unit, f"{attribute_value.unit} (cd)")
    + 42                column_name = f"{attribute_name}[{unit_value}]"
    + 43
    + 44                if isinstance(attribute_value, TimeSeriesBoolean):
    + 45                    values = [int(v) for v in attribute_value.values]
    + 46                else:
    + 47                    values = attribute_value.values
    + 48
    + 49                timeseries_df = pd.DataFrame({column_name: values}, index=attribute_value.timesteps)
    + 50                df = df.join(timeseries_df)
    + 51            elif isinstance(attribute_value, list):
    + 52                if len(attribute_value) > 0 and all(isinstance(item, TabularTimeSeries) for item in attribute_value):
    + 53                    for item in attribute_value:
    + 54                        tabular_df = item.to_dataframe(prefix=item.name)
    + 55                        df = df.join(tabular_df)
    + 56
    + 57            elif (
    + 58                isinstance(attribute_value, dict)
    + 59                and len(attribute_value) > 0
    + 60                and all(isinstance(item, TabularTimeSeries) for item in attribute_value.values())
    + 61            ):
    + 62                for item in attribute_value.values():
    + 63                    tabular_df = item.to_dataframe(prefix=item.name)
    + 64                    df = df.join(tabular_df)
    + 65
    + 66        if prefix is not None:
    + 67            df = df.add_prefix(prefix=f"{prefix}.")
    + 68
    + 69        return df
    + 70
    + 71    def resample(self, freq: Frequency) -> Self:
    + 72        """
    + 73        Immutable - returns a copy of itself
    + 74
    + 75        Resample the given time series to the new Frequency given. Only data
    + 76        that is defined as a timeseries will be resampled.
    + 77
    + 78        Args:
    + 79            freq: which frequency to resample to
    + 80
    + 81        Returns: return a copy of itself with all data resampled to given frequency
    + 82
    + 83        """
    + 84        if freq == freq.NONE:
    + 85            return self.copy()
    + 86        resampled = self.copy()
    + 87        for attribute, values in self.__dict__.items():
    + 88            if isinstance(values, TimeSeries):
    + 89                resampled.__setattr__(attribute, values.resample(freq=freq))
    + 90
    + 91            elif isinstance(values, list):
    + 92                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values):
    + 93                    resampled.__setattr__(attribute, [item.resample(freq) for item in values])
    + 94
    + 95            elif isinstance(values, dict):
    + 96                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values.values()):
    + 97                    resampled.__setattr__(attribute, {key: item.resample(freq) for key, item in values.items()})
    + 98                else:
    + 99                    # NOTE: Operational settings are not resampled. Should add support?
    +100                    pass
    +101            else:
    +102                # NOTE: turbine_result is not resampled. Should add support?
    +103                pass
    +104
    +105        resampled.timesteps = resample_time_steps(self.timesteps, frequency=freq)
    +106        return resampled
    +
    + + +
    +
    + +
    + + class + TabularTimeSeries(abc.ABC, libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
     21class TabularTimeSeries(ABC, EcalcResultBaseModel):
    + 22    name: str
    + 23    timesteps: List[datetime]
    + 24
    + 25    def to_dataframe(
    + 26        self,
    + 27        prefix: Optional[str] = None,
    + 28    ) -> pd.DataFrame:
    + 29        timesteps = self.timesteps
    + 30        df = pd.DataFrame(index=timesteps)
    + 31
    + 32        for attribute_name, attribute_value in self.__dict__.items():
    + 33            if isinstance(attribute_value, TimeSeries):
    + 34                unit_value = attribute_value.unit
    + 35                if isinstance(attribute_value, TimeSeriesRate):
    + 36                    unit_extension = "sd" if attribute_value.rate_type == RateType.STREAM_DAY else "cd"
    + 37                    if attribute_value.unit == Unit.MEGA_WATT:
    + 38                        unit_value = unit_value.replace(Unit.MEGA_WATT, f"{Unit.MEGA_WATT} ({unit_extension})")
    + 39                    else:
    + 40                        unit_value = unit_value.replace("/d", f"/{unit_extension}")
    + 41                elif isinstance(attribute_value, TimeSeriesVolumesCumulative):
    + 42                    unit_value = unit_value.replace(attribute_value.unit, f"{attribute_value.unit} (cd)")
    + 43                column_name = f"{attribute_name}[{unit_value}]"
    + 44
    + 45                if isinstance(attribute_value, TimeSeriesBoolean):
    + 46                    values = [int(v) for v in attribute_value.values]
    + 47                else:
    + 48                    values = attribute_value.values
    + 49
    + 50                timeseries_df = pd.DataFrame({column_name: values}, index=attribute_value.timesteps)
    + 51                df = df.join(timeseries_df)
    + 52            elif isinstance(attribute_value, list):
    + 53                if len(attribute_value) > 0 and all(isinstance(item, TabularTimeSeries) for item in attribute_value):
    + 54                    for item in attribute_value:
    + 55                        tabular_df = item.to_dataframe(prefix=item.name)
    + 56                        df = df.join(tabular_df)
    + 57
    + 58            elif (
    + 59                isinstance(attribute_value, dict)
    + 60                and len(attribute_value) > 0
    + 61                and all(isinstance(item, TabularTimeSeries) for item in attribute_value.values())
    + 62            ):
    + 63                for item in attribute_value.values():
    + 64                    tabular_df = item.to_dataframe(prefix=item.name)
    + 65                    df = df.join(tabular_df)
    + 66
    + 67        if prefix is not None:
    + 68            df = df.add_prefix(prefix=f"{prefix}.")
    + 69
    + 70        return df
    + 71
    + 72    def resample(self, freq: Frequency) -> Self:
    + 73        """
    + 74        Immutable - returns a copy of itself
    + 75
    + 76        Resample the given time series to the new Frequency given. Only data
    + 77        that is defined as a timeseries will be resampled.
    + 78
    + 79        Args:
    + 80            freq: which frequency to resample to
    + 81
    + 82        Returns: return a copy of itself with all data resampled to given frequency
    + 83
    + 84        """
    + 85        if freq == freq.NONE:
    + 86            return self.copy()
    + 87        resampled = self.copy()
    + 88        for attribute, values in self.__dict__.items():
    + 89            if isinstance(values, TimeSeries):
    + 90                resampled.__setattr__(attribute, values.resample(freq=freq))
    + 91
    + 92            elif isinstance(values, list):
    + 93                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values):
    + 94                    resampled.__setattr__(attribute, [item.resample(freq) for item in values])
    + 95
    + 96            elif isinstance(values, dict):
    + 97                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values.values()):
    + 98                    resampled.__setattr__(attribute, {key: item.resample(freq) for key, item in values.items()})
    + 99                else:
    +100                    # NOTE: Operational settings are not resampled. Should add support?
    +101                    pass
    +102            else:
    +103                # NOTE: turbine_result is not resampled. Should add support?
    +104                pass
    +105
    +106        resampled.timesteps = resample_time_steps(self.timesteps, frequency=freq)
    +107        return resampled
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    + +
    + + def + to_dataframe(self, prefix: Union[str, NoneType] = None) -> pandas.core.frame.DataFrame: + + + +
    + +
    25    def to_dataframe(
    +26        self,
    +27        prefix: Optional[str] = None,
    +28    ) -> pd.DataFrame:
    +29        timesteps = self.timesteps
    +30        df = pd.DataFrame(index=timesteps)
    +31
    +32        for attribute_name, attribute_value in self.__dict__.items():
    +33            if isinstance(attribute_value, TimeSeries):
    +34                unit_value = attribute_value.unit
    +35                if isinstance(attribute_value, TimeSeriesRate):
    +36                    unit_extension = "sd" if attribute_value.rate_type == RateType.STREAM_DAY else "cd"
    +37                    if attribute_value.unit == Unit.MEGA_WATT:
    +38                        unit_value = unit_value.replace(Unit.MEGA_WATT, f"{Unit.MEGA_WATT} ({unit_extension})")
    +39                    else:
    +40                        unit_value = unit_value.replace("/d", f"/{unit_extension}")
    +41                elif isinstance(attribute_value, TimeSeriesVolumesCumulative):
    +42                    unit_value = unit_value.replace(attribute_value.unit, f"{attribute_value.unit} (cd)")
    +43                column_name = f"{attribute_name}[{unit_value}]"
    +44
    +45                if isinstance(attribute_value, TimeSeriesBoolean):
    +46                    values = [int(v) for v in attribute_value.values]
    +47                else:
    +48                    values = attribute_value.values
    +49
    +50                timeseries_df = pd.DataFrame({column_name: values}, index=attribute_value.timesteps)
    +51                df = df.join(timeseries_df)
    +52            elif isinstance(attribute_value, list):
    +53                if len(attribute_value) > 0 and all(isinstance(item, TabularTimeSeries) for item in attribute_value):
    +54                    for item in attribute_value:
    +55                        tabular_df = item.to_dataframe(prefix=item.name)
    +56                        df = df.join(tabular_df)
    +57
    +58            elif (
    +59                isinstance(attribute_value, dict)
    +60                and len(attribute_value) > 0
    +61                and all(isinstance(item, TabularTimeSeries) for item in attribute_value.values())
    +62            ):
    +63                for item in attribute_value.values():
    +64                    tabular_df = item.to_dataframe(prefix=item.name)
    +65                    df = df.join(tabular_df)
    +66
    +67        if prefix is not None:
    +68            df = df.add_prefix(prefix=f"{prefix}.")
    +69
    +70        return df
    +
    + + + + +
    +
    + +
    + + def + resample( self, freq: libecalc.common.time_utils.Frequency) -> typing_extensions.Self: + + + +
    + +
     72    def resample(self, freq: Frequency) -> Self:
    + 73        """
    + 74        Immutable - returns a copy of itself
    + 75
    + 76        Resample the given time series to the new Frequency given. Only data
    + 77        that is defined as a timeseries will be resampled.
    + 78
    + 79        Args:
    + 80            freq: which frequency to resample to
    + 81
    + 82        Returns: return a copy of itself with all data resampled to given frequency
    + 83
    + 84        """
    + 85        if freq == freq.NONE:
    + 86            return self.copy()
    + 87        resampled = self.copy()
    + 88        for attribute, values in self.__dict__.items():
    + 89            if isinstance(values, TimeSeries):
    + 90                resampled.__setattr__(attribute, values.resample(freq=freq))
    + 91
    + 92            elif isinstance(values, list):
    + 93                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values):
    + 94                    resampled.__setattr__(attribute, [item.resample(freq) for item in values])
    + 95
    + 96            elif isinstance(values, dict):
    + 97                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values.values()):
    + 98                    resampled.__setattr__(attribute, {key: item.resample(freq) for key, item in values.items()})
    + 99                else:
    +100                    # NOTE: Operational settings are not resampled. Should add support?
    +101                    pass
    +102            else:
    +103                # NOTE: turbine_result is not resampled. Should add support?
    +104                pass
    +105
    +106        resampled.timesteps = resample_time_steps(self.timesteps, frequency=freq)
    +107        return resampled
    +
    + + +

    Immutable - returns a copy of itself

    + +

    Resample the given time series to the new Frequency given. Only data +that is defined as a timeseries will be resampled.

    + +

    Args: + freq: which frequency to resample to

    + +

    Returns: return a copy of itself with all data resampled to given frequency

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/types.html b/docs/about/references/api/libecalc/dto/result/types.html new file mode 100644 index 0000000000..5002489c30 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/types.html @@ -0,0 +1,455 @@ + + + + + + + libecalc.dto.result.types API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.types

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from enum import Enum
    + 4from typing import Optional
    + 5
    + 6opt_float: Optional[float] = Optional[float]
    + 7
    + 8
    + 9class CompressorTrainCommonShaftFailureStatus(str, Enum):
    +10    TARGET_DISCHARGE_PRESSURE_TOO_HIGH = "TARGET_DISCHARGE_PRESSURE_TOO_HIGH"
    +11    TARGET_DISCHARGE_PRESSURE_TOO_LOW = "TARGET_DISCHARGE_PRESSURE_TOO_LOW"
    +12    SUCTION_PRESSURE_TOO_LOW = "SUCTION_PRESSURE_TOO_LOW"
    +13    ABOVE_MAXIMUM_FLOW_RATE = "ABOVE_MAXIMUM_FLOW_RATE"
    +14    BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_FLOW_RATE"
    +15    ABOVE_MAXIMUM_POWER = "ABOVE_MAXIMUM_POWER"
    +16    NOT_CALCULATED = "NOT_CALCULATED"
    +
    + + +
    +
    + +
    + + class + CompressorTrainCommonShaftFailureStatus(builtins.str, enum.Enum): + + + +
    + +
    10class CompressorTrainCommonShaftFailureStatus(str, Enum):
    +11    TARGET_DISCHARGE_PRESSURE_TOO_HIGH = "TARGET_DISCHARGE_PRESSURE_TOO_HIGH"
    +12    TARGET_DISCHARGE_PRESSURE_TOO_LOW = "TARGET_DISCHARGE_PRESSURE_TOO_LOW"
    +13    SUCTION_PRESSURE_TOO_LOW = "SUCTION_PRESSURE_TOO_LOW"
    +14    ABOVE_MAXIMUM_FLOW_RATE = "ABOVE_MAXIMUM_FLOW_RATE"
    +15    BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_FLOW_RATE"
    +16    ABOVE_MAXIMUM_POWER = "ABOVE_MAXIMUM_POWER"
    +17    NOT_CALCULATED = "NOT_CALCULATED"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + TARGET_DISCHARGE_PRESSURE_TOO_HIGH = + + <CompressorTrainCommonShaftFailureStatus.TARGET_DISCHARGE_PRESSURE_TOO_HIGH: 'TARGET_DISCHARGE_PRESSURE_TOO_HIGH'> + + +
    + + + + +
    +
    +
    + TARGET_DISCHARGE_PRESSURE_TOO_LOW = + + <CompressorTrainCommonShaftFailureStatus.TARGET_DISCHARGE_PRESSURE_TOO_LOW: 'TARGET_DISCHARGE_PRESSURE_TOO_LOW'> + + +
    + + + + +
    +
    +
    + SUCTION_PRESSURE_TOO_LOW = +<CompressorTrainCommonShaftFailureStatus.SUCTION_PRESSURE_TOO_LOW: 'SUCTION_PRESSURE_TOO_LOW'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_FLOW_RATE = +<CompressorTrainCommonShaftFailureStatus.ABOVE_MAXIMUM_FLOW_RATE: 'ABOVE_MAXIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_FLOW_RATE = +<CompressorTrainCommonShaftFailureStatus.BELOW_MINIMUM_FLOW_RATE: 'BELOW_MINIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_POWER = +<CompressorTrainCommonShaftFailureStatus.ABOVE_MAXIMUM_POWER: 'ABOVE_MAXIMUM_POWER'> + + +
    + + + + +
    +
    +
    + NOT_CALCULATED = +<CompressorTrainCommonShaftFailureStatus.NOT_CALCULATED: 'NOT_CALCULATED'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result_options.html b/docs/about/references/api/libecalc/dto/result_options.html new file mode 100644 index 0000000000..4e8be54124 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result_options.html @@ -0,0 +1,343 @@ + + + + + + + libecalc.dto.result_options API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result_options

    + + + + + + +
     1from datetime import datetime
    + 2from typing import Optional
    + 3
    + 4from libecalc.common.time_utils import Frequency
    + 5from libecalc.dto.base import EcalcBaseModel
    + 6
    + 7
    + 8class ResultOptions(EcalcBaseModel):
    + 9    start: Optional[datetime] = None
    +10    end: Optional[datetime] = None
    +11
    +12    output_frequency: Frequency = Frequency.NONE
    +
    + + +
    +
    + +
    + + class + ResultOptions(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
     9class ResultOptions(EcalcBaseModel):
    +10    start: Optional[datetime] = None
    +11    end: Optional[datetime] = None
    +12
    +13    output_frequency: Frequency = Frequency.NONE
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/types.html b/docs/about/references/api/libecalc/dto/types.html new file mode 100644 index 0000000000..8b72651eff --- /dev/null +++ b/docs/about/references/api/libecalc/dto/types.html @@ -0,0 +1,2907 @@ + + + + + + + libecalc.dto.types API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.types

    + + + + + + +
      1from enum import Enum
    +  2from typing import List, Optional
    +  3
    +  4from pydantic import Field, field_validator
    +  5from pydantic_core.core_schema import ValidationInfo
    +  6
    +  7from libecalc.dto.base import EcalcBaseModel, FuelTypeUserDefinedCategoryType
    +  8from libecalc.dto.emission import Emission
    +  9
    + 10
    + 11class ConsumptionType(str, Enum):
    + 12    FUEL = "FUEL"
    + 13    ELECTRICITY = "ELECTRICITY"
    + 14
    + 15
    + 16class EnergyUsageType(str, Enum):
    + 17    FUEL = "FUEL"
    + 18    POWER = "POWER"
    + 19
    + 20
    + 21class ConsumerType(str, Enum):
    + 22    DIRECT = "DIRECT"
    + 23    COMPRESSOR = "COMPRESSOR"
    + 24    PUMP = "PUMP"
    + 25    COMPRESSOR_SYSTEM = "COMPRESSOR_SYSTEM"
    + 26    PUMP_SYSTEM = "PUMP_SYSTEM"
    + 27    TABULATED = "TABULATED"
    + 28    GENERATOR_SET_SIMPLE = "GENERATOR_SET_SIMPLE"
    + 29
    + 30
    + 31class EnergyModelType(str, Enum):
    + 32    GENERATOR_SET_SAMPLED = "GENERATOR_SET_SAMPLED"
    + 33    TABULATED = "TABULATED"
    + 34    COMPRESSOR_SAMPLED = "COMPRESSOR_SAMPLED"
    + 35    PUMP_MODEL = "PUMP_MODEL"
    + 36    COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES = "COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_NUMBER_OF_COMPRESSORS"
    + 37    COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES = "COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_NUMBER_OF_COMPRESSORS"
    + 38    VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = "VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT"
    + 39    SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = "SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT"
    + 40    VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES = (
    + 41        "VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"
    + 42    )
    + 43    TURBINE = "TURBINE"
    + 44    COMPRESSOR_WITH_TURBINE = "COMPRESSOR_WITH_TURBINE"
    + 45
    + 46
    + 47class ChartType(str, Enum):
    + 48    SINGLE_SPEED = "SINGLE_SPEED_CHART"
    + 49    VARIABLE_SPEED = "VARIABLE_SPEED_CHART"
    + 50    GENERIC_FROM_DESIGN_POINT = "GENERIC_CHART_FROM_DESIGN_POINT"
    + 51    GENERIC_FROM_INPUT = "GENERIC_CHART_FROM_INPUT"
    + 52
    + 53
    + 54class ChartRateUnit(str, Enum):
    + 55    AM3_PER_HOUR = "AM3_PER_HOUR"
    + 56
    + 57
    + 58class ChartPolytropicHeadUnit(str, Enum):
    + 59    J_PER_KG = "JOULE_PER_KG"
    + 60    KJ_PER_KG = "KJ_PER_KG"
    + 61    M = "M"
    + 62
    + 63
    + 64class ChartEfficiencyUnit(str, Enum):
    + 65    FRACTION = "FRACTION"
    + 66    PERCENTAGE = "PERCENTAGE"
    + 67
    + 68
    + 69class ChartControlMarginUnit(str, Enum):
    + 70    FRACTION = "FRACTION"
    + 71    PERCENTAGE = "PERCENTAGE"
    + 72
    + 73
    + 74class EoSModel(str, Enum):
    + 75    SRK = "SRK"
    + 76    PR = "PR"
    + 77    GERG_SRK = "GERG_SRK"
    + 78    GERG_PR = "GERG_PR"
    + 79
    + 80
    + 81class FluidStreamFlowRateType(str, Enum):
    + 82    STANDARD_RATE = "Sm3/day"  # Standard conditions are 15 C at 1 atm = 1.01325 bara
    + 83    ACTUAL_VOLUME_RATE = "Am3/hr"
    + 84    MASS_RATE = "kg/hr"
    + 85
    + 86
    + 87class FixedSpeedPressureControl(str, Enum):
    + 88    UPSTREAM_CHOKE = "UPSTREAM_CHOKE"
    + 89    DOWNSTREAM_CHOKE = "DOWNSTREAM_CHOKE"
    + 90    INDIVIDUAL_ASV_PRESSURE = "INDIVIDUAL_ASV_PRESSURE"
    + 91    INDIVIDUAL_ASV_RATE = "INDIVIDUAL_ASV_RATE"
    + 92    COMMON_ASV = "COMMON_ASV"
    + 93
    + 94
    + 95class FluidStreamType(str, Enum):
    + 96    INGOING = "INGOING"
    + 97    OUTGOING = "OUTGOING"
    + 98
    + 99
    +100# TODO: time series types defined both here and in yaml_entities.py. Should be defined once.
    +101class TimeSeriesType(str, Enum):
    +102    MISCELLANEOUS = "MISCELLANEOUS"
    +103    DEFAULT = "DEFAULT"
    +104
    +105
    +106class InterpolationType(str, Enum):
    +107    LEFT = "LEFT"
    +108    RIGHT = "RIGHT"
    +109    LINEAR = "LINEAR"
    +110
    +111
    +112class FuelType(EcalcBaseModel):
    +113    name: str
    +114    user_defined_category: Optional[FuelTypeUserDefinedCategoryType] = Field(default=None, validate_default=True)
    +115    emissions: List[Emission] = Field(default_factory=list)
    +116
    +117    @field_validator("user_defined_category", mode="before")
    +118    @classmethod
    +119    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +120        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +121        if user_defined_category is not None:
    +122            if user_defined_category not in list(FuelTypeUserDefinedCategoryType):
    +123                name_context_str = ""
    +124                if (name := info.data.get("name")) is not None:
    +125                    name_context_str = f"with the name {name}"
    +126
    +127                raise ValueError(
    +128                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[str(fuel_type_user_defined_category.value) for fuel_type_user_defined_category in FuelTypeUserDefinedCategoryType]}"
    +129                )
    +130
    +131        return user_defined_category
    +132
    +133
    +134class ChartAreaFlag(str, Enum):
    +135    INTERNAL_POINT = "INTERNAL_POINT"
    +136    BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_FLOW_RATE"
    +137    BELOW_MINIMUM_HEAD = "BELOW_MINIMUM_HEAD"
    +138    BELOW_MINIMUM_SPEED = "BELOW_MINIMUM_SPEED"
    +139    ABOVE_MAXIMUM_FLOW_RATE = "ABOVE_MAXIMUM_FLOW_RATE"
    +140    ABOVE_MAXIMUM_HEAD = "ABOVE_MAXIMUM_HEAD"
    +141    ABOVE_MAXIMUM_SPEED = "ABOVE_MAXIMUM_SPEED"
    +142    BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE"
    +143    BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE = "BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE"
    +144    NOT_CALCULATED = "NOT_CALCULATED"
    +145    NO_FLOW_RATE = "NO_FLOW_RATE"
    +
    + + +
    +
    + +
    + + class + ConsumptionType(builtins.str, enum.Enum): + + + +
    + +
    12class ConsumptionType(str, Enum):
    +13    FUEL = "FUEL"
    +14    ELECTRICITY = "ELECTRICITY"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FUEL = +<ConsumptionType.FUEL: 'FUEL'> + + +
    + + + + +
    +
    +
    + ELECTRICITY = +<ConsumptionType.ELECTRICITY: 'ELECTRICITY'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EnergyUsageType(builtins.str, enum.Enum): + + + +
    + +
    17class EnergyUsageType(str, Enum):
    +18    FUEL = "FUEL"
    +19    POWER = "POWER"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FUEL = +<EnergyUsageType.FUEL: 'FUEL'> + + +
    + + + + +
    +
    +
    + POWER = +<EnergyUsageType.POWER: 'POWER'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ConsumerType(builtins.str, enum.Enum): + + + +
    + +
    22class ConsumerType(str, Enum):
    +23    DIRECT = "DIRECT"
    +24    COMPRESSOR = "COMPRESSOR"
    +25    PUMP = "PUMP"
    +26    COMPRESSOR_SYSTEM = "COMPRESSOR_SYSTEM"
    +27    PUMP_SYSTEM = "PUMP_SYSTEM"
    +28    TABULATED = "TABULATED"
    +29    GENERATOR_SET_SIMPLE = "GENERATOR_SET_SIMPLE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + DIRECT = +<ConsumerType.DIRECT: 'DIRECT'> + + +
    + + + + +
    +
    +
    + COMPRESSOR = +<ConsumerType.COMPRESSOR: 'COMPRESSOR'> + + +
    + + + + +
    +
    +
    + PUMP = +<ConsumerType.PUMP: 'PUMP'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_SYSTEM = +<ConsumerType.COMPRESSOR_SYSTEM: 'COMPRESSOR_SYSTEM'> + + +
    + + + + +
    +
    +
    + PUMP_SYSTEM = +<ConsumerType.PUMP_SYSTEM: 'PUMP_SYSTEM'> + + +
    + + + + +
    +
    +
    + TABULATED = +<ConsumerType.TABULATED: 'TABULATED'> + + +
    + + + + +
    +
    +
    + GENERATOR_SET_SIMPLE = +<ConsumerType.GENERATOR_SET_SIMPLE: 'GENERATOR_SET_SIMPLE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EnergyModelType(builtins.str, enum.Enum): + + + +
    + +
    32class EnergyModelType(str, Enum):
    +33    GENERATOR_SET_SAMPLED = "GENERATOR_SET_SAMPLED"
    +34    TABULATED = "TABULATED"
    +35    COMPRESSOR_SAMPLED = "COMPRESSOR_SAMPLED"
    +36    PUMP_MODEL = "PUMP_MODEL"
    +37    COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES = "COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_NUMBER_OF_COMPRESSORS"
    +38    COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES = "COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_NUMBER_OF_COMPRESSORS"
    +39    VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = "VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT"
    +40    SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = "SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT"
    +41    VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES = (
    +42        "VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"
    +43    )
    +44    TURBINE = "TURBINE"
    +45    COMPRESSOR_WITH_TURBINE = "COMPRESSOR_WITH_TURBINE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + GENERATOR_SET_SAMPLED = +<EnergyModelType.GENERATOR_SET_SAMPLED: 'GENERATOR_SET_SAMPLED'> + + +
    + + + + +
    +
    +
    + TABULATED = +<EnergyModelType.TABULATED: 'TABULATED'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_SAMPLED = +<EnergyModelType.COMPRESSOR_SAMPLED: 'COMPRESSOR_SAMPLED'> + + +
    + + + + +
    +
    +
    + PUMP_MODEL = +<EnergyModelType.PUMP_MODEL: 'PUMP_MODEL'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES = + + <EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES: 'COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_NUMBER_OF_COMPRESSORS'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES = + + <EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES: 'COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_NUMBER_OF_COMPRESSORS'> + + +
    + + + + +
    +
    +
    + VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = + + <EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT: 'VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT'> + + +
    + + + + +
    +
    +
    + SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = + + <EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT: 'SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT'> + + +
    + + + + +
    +
    +
    + VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES = + + <EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES: 'VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES'> + + +
    + + + + +
    +
    +
    + TURBINE = +<EnergyModelType.TURBINE: 'TURBINE'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_WITH_TURBINE = +<EnergyModelType.COMPRESSOR_WITH_TURBINE: 'COMPRESSOR_WITH_TURBINE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartType(builtins.str, enum.Enum): + + + +
    + +
    48class ChartType(str, Enum):
    +49    SINGLE_SPEED = "SINGLE_SPEED_CHART"
    +50    VARIABLE_SPEED = "VARIABLE_SPEED_CHART"
    +51    GENERIC_FROM_DESIGN_POINT = "GENERIC_CHART_FROM_DESIGN_POINT"
    +52    GENERIC_FROM_INPUT = "GENERIC_CHART_FROM_INPUT"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + SINGLE_SPEED = +<ChartType.SINGLE_SPEED: 'SINGLE_SPEED_CHART'> + + +
    + + + + +
    +
    +
    + VARIABLE_SPEED = +<ChartType.VARIABLE_SPEED: 'VARIABLE_SPEED_CHART'> + + +
    + + + + +
    +
    +
    + GENERIC_FROM_DESIGN_POINT = +<ChartType.GENERIC_FROM_DESIGN_POINT: 'GENERIC_CHART_FROM_DESIGN_POINT'> + + +
    + + + + +
    +
    +
    + GENERIC_FROM_INPUT = +<ChartType.GENERIC_FROM_INPUT: 'GENERIC_CHART_FROM_INPUT'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartRateUnit(builtins.str, enum.Enum): + + + +
    + +
    55class ChartRateUnit(str, Enum):
    +56    AM3_PER_HOUR = "AM3_PER_HOUR"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + AM3_PER_HOUR = +<ChartRateUnit.AM3_PER_HOUR: 'AM3_PER_HOUR'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartPolytropicHeadUnit(builtins.str, enum.Enum): + + + +
    + +
    59class ChartPolytropicHeadUnit(str, Enum):
    +60    J_PER_KG = "JOULE_PER_KG"
    +61    KJ_PER_KG = "KJ_PER_KG"
    +62    M = "M"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + J_PER_KG = +<ChartPolytropicHeadUnit.J_PER_KG: 'JOULE_PER_KG'> + + +
    + + + + +
    +
    +
    + KJ_PER_KG = +<ChartPolytropicHeadUnit.KJ_PER_KG: 'KJ_PER_KG'> + + +
    + + + + +
    +
    +
    + M = +<ChartPolytropicHeadUnit.M: 'M'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartEfficiencyUnit(builtins.str, enum.Enum): + + + +
    + +
    65class ChartEfficiencyUnit(str, Enum):
    +66    FRACTION = "FRACTION"
    +67    PERCENTAGE = "PERCENTAGE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FRACTION = +<ChartEfficiencyUnit.FRACTION: 'FRACTION'> + + +
    + + + + +
    +
    +
    + PERCENTAGE = +<ChartEfficiencyUnit.PERCENTAGE: 'PERCENTAGE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartControlMarginUnit(builtins.str, enum.Enum): + + + +
    + +
    70class ChartControlMarginUnit(str, Enum):
    +71    FRACTION = "FRACTION"
    +72    PERCENTAGE = "PERCENTAGE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FRACTION = +<ChartControlMarginUnit.FRACTION: 'FRACTION'> + + +
    + + + + +
    +
    +
    + PERCENTAGE = +<ChartControlMarginUnit.PERCENTAGE: 'PERCENTAGE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EoSModel(builtins.str, enum.Enum): + + + +
    + +
    75class EoSModel(str, Enum):
    +76    SRK = "SRK"
    +77    PR = "PR"
    +78    GERG_SRK = "GERG_SRK"
    +79    GERG_PR = "GERG_PR"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + SRK = +<EoSModel.SRK: 'SRK'> + + +
    + + + + +
    +
    +
    + PR = +<EoSModel.PR: 'PR'> + + +
    + + + + +
    +
    +
    + GERG_SRK = +<EoSModel.GERG_SRK: 'GERG_SRK'> + + +
    + + + + +
    +
    +
    + GERG_PR = +<EoSModel.GERG_PR: 'GERG_PR'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FluidStreamFlowRateType(builtins.str, enum.Enum): + + + +
    + +
    82class FluidStreamFlowRateType(str, Enum):
    +83    STANDARD_RATE = "Sm3/day"  # Standard conditions are 15 C at 1 atm = 1.01325 bara
    +84    ACTUAL_VOLUME_RATE = "Am3/hr"
    +85    MASS_RATE = "kg/hr"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + STANDARD_RATE = +<FluidStreamFlowRateType.STANDARD_RATE: 'Sm3/day'> + + +
    + + + + +
    +
    +
    + ACTUAL_VOLUME_RATE = +<FluidStreamFlowRateType.ACTUAL_VOLUME_RATE: 'Am3/hr'> + + +
    + + + + +
    +
    +
    + MASS_RATE = +<FluidStreamFlowRateType.MASS_RATE: 'kg/hr'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FixedSpeedPressureControl(builtins.str, enum.Enum): + + + +
    + +
    88class FixedSpeedPressureControl(str, Enum):
    +89    UPSTREAM_CHOKE = "UPSTREAM_CHOKE"
    +90    DOWNSTREAM_CHOKE = "DOWNSTREAM_CHOKE"
    +91    INDIVIDUAL_ASV_PRESSURE = "INDIVIDUAL_ASV_PRESSURE"
    +92    INDIVIDUAL_ASV_RATE = "INDIVIDUAL_ASV_RATE"
    +93    COMMON_ASV = "COMMON_ASV"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + UPSTREAM_CHOKE = +<FixedSpeedPressureControl.UPSTREAM_CHOKE: 'UPSTREAM_CHOKE'> + + +
    + + + + +
    +
    +
    + DOWNSTREAM_CHOKE = +<FixedSpeedPressureControl.DOWNSTREAM_CHOKE: 'DOWNSTREAM_CHOKE'> + + +
    + + + + +
    +
    +
    + INDIVIDUAL_ASV_PRESSURE = +<FixedSpeedPressureControl.INDIVIDUAL_ASV_PRESSURE: 'INDIVIDUAL_ASV_PRESSURE'> + + +
    + + + + +
    +
    +
    + INDIVIDUAL_ASV_RATE = +<FixedSpeedPressureControl.INDIVIDUAL_ASV_RATE: 'INDIVIDUAL_ASV_RATE'> + + +
    + + + + +
    +
    +
    + COMMON_ASV = +<FixedSpeedPressureControl.COMMON_ASV: 'COMMON_ASV'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FluidStreamType(builtins.str, enum.Enum): + + + +
    + +
    96class FluidStreamType(str, Enum):
    +97    INGOING = "INGOING"
    +98    OUTGOING = "OUTGOING"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + INGOING = +<FluidStreamType.INGOING: 'INGOING'> + + +
    + + + + +
    +
    +
    + OUTGOING = +<FluidStreamType.OUTGOING: 'OUTGOING'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + TimeSeriesType(builtins.str, enum.Enum): + + + +
    + +
    102class TimeSeriesType(str, Enum):
    +103    MISCELLANEOUS = "MISCELLANEOUS"
    +104    DEFAULT = "DEFAULT"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + MISCELLANEOUS = +<TimeSeriesType.MISCELLANEOUS: 'MISCELLANEOUS'> + + +
    + + + + +
    +
    +
    + DEFAULT = +<TimeSeriesType.DEFAULT: 'DEFAULT'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + InterpolationType(builtins.str, enum.Enum): + + + +
    + +
    107class InterpolationType(str, Enum):
    +108    LEFT = "LEFT"
    +109    RIGHT = "RIGHT"
    +110    LINEAR = "LINEAR"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + LEFT = +<InterpolationType.LEFT: 'LEFT'> + + +
    + + + + +
    +
    +
    + RIGHT = +<InterpolationType.RIGHT: 'RIGHT'> + + +
    + + + + +
    +
    +
    + LINEAR = +<InterpolationType.LINEAR: 'LINEAR'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FuelType(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    113class FuelType(EcalcBaseModel):
    +114    name: str
    +115    user_defined_category: Optional[FuelTypeUserDefinedCategoryType] = Field(default=None, validate_default=True)
    +116    emissions: List[Emission] = Field(default_factory=list)
    +117
    +118    @field_validator("user_defined_category", mode="before")
    +119    @classmethod
    +120    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +121        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +122        if user_defined_category is not None:
    +123            if user_defined_category not in list(FuelTypeUserDefinedCategoryType):
    +124                name_context_str = ""
    +125                if (name := info.data.get("name")) is not None:
    +126                    name_context_str = f"with the name {name}"
    +127
    +128                raise ValueError(
    +129                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[str(fuel_type_user_defined_category.value) for fuel_type_user_defined_category in FuelTypeUserDefinedCategoryType]}"
    +130                )
    +131
    +132        return user_defined_category
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('user_defined_category', mode='before')
    +
    @classmethod
    + + def + check_user_defined_category( cls, user_defined_category, info: pydantic_core.core_schema.ValidationInfo): + + + +
    + +
    118    @field_validator("user_defined_category", mode="before")
    +119    @classmethod
    +120    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +121        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +122        if user_defined_category is not None:
    +123            if user_defined_category not in list(FuelTypeUserDefinedCategoryType):
    +124                name_context_str = ""
    +125                if (name := info.data.get("name")) is not None:
    +126                    name_context_str = f"with the name {name}"
    +127
    +128                raise ValueError(
    +129                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[str(fuel_type_user_defined_category.value) for fuel_type_user_defined_category in FuelTypeUserDefinedCategoryType]}"
    +130                )
    +131
    +132        return user_defined_category
    +
    + + +

    Provide which value and context to make it easier for user to correct wrt mandatory changes.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + ChartAreaFlag(builtins.str, enum.Enum): + + + +
    + +
    135class ChartAreaFlag(str, Enum):
    +136    INTERNAL_POINT = "INTERNAL_POINT"
    +137    BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_FLOW_RATE"
    +138    BELOW_MINIMUM_HEAD = "BELOW_MINIMUM_HEAD"
    +139    BELOW_MINIMUM_SPEED = "BELOW_MINIMUM_SPEED"
    +140    ABOVE_MAXIMUM_FLOW_RATE = "ABOVE_MAXIMUM_FLOW_RATE"
    +141    ABOVE_MAXIMUM_HEAD = "ABOVE_MAXIMUM_HEAD"
    +142    ABOVE_MAXIMUM_SPEED = "ABOVE_MAXIMUM_SPEED"
    +143    BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE"
    +144    BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE = "BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE"
    +145    NOT_CALCULATED = "NOT_CALCULATED"
    +146    NO_FLOW_RATE = "NO_FLOW_RATE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + INTERNAL_POINT = +<ChartAreaFlag.INTERNAL_POINT: 'INTERNAL_POINT'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_FLOW_RATE = +<ChartAreaFlag.BELOW_MINIMUM_FLOW_RATE: 'BELOW_MINIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_HEAD = +<ChartAreaFlag.BELOW_MINIMUM_HEAD: 'BELOW_MINIMUM_HEAD'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_SPEED = +<ChartAreaFlag.BELOW_MINIMUM_SPEED: 'BELOW_MINIMUM_SPEED'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_FLOW_RATE = +<ChartAreaFlag.ABOVE_MAXIMUM_FLOW_RATE: 'ABOVE_MAXIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_HEAD = +<ChartAreaFlag.ABOVE_MAXIMUM_HEAD: 'ABOVE_MAXIMUM_HEAD'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_SPEED = +<ChartAreaFlag.ABOVE_MAXIMUM_SPEED: 'ABOVE_MAXIMUM_SPEED'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE = + + <ChartAreaFlag.BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE: 'BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE = + + <ChartAreaFlag.BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE: 'BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + NOT_CALCULATED = +<ChartAreaFlag.NOT_CALCULATED: 'NOT_CALCULATED'> + + +
    + + + + +
    +
    +
    + NO_FLOW_RATE = +<ChartAreaFlag.NO_FLOW_RATE: 'NO_FLOW_RATE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/utils.html b/docs/about/references/api/libecalc/dto/utils.html new file mode 100644 index 0000000000..8e97ae7799 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/utils.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.dto.utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.utils

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/utils/aggregators.html b/docs/about/references/api/libecalc/dto/utils/aggregators.html new file mode 100644 index 0000000000..15a0d85d18 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/utils/aggregators.html @@ -0,0 +1,533 @@ + + + + + + + libecalc.dto.utils.aggregators API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.utils.aggregators

    + + + + + + +
     1import operator
    + 2from functools import reduce
    + 3from typing import Dict, List, Protocol
    + 4
    + 5from libecalc.common.list.list_utils import transpose
    + 6from libecalc.common.utils.rates import (
    + 7    TimeSeriesBoolean,
    + 8)
    + 9from libecalc.dto.result.emission import PartialEmissionResult
    +10
    +11
    +12class HasIsValid(Protocol):
    +13    is_valid: TimeSeriesBoolean
    +14
    +15
    +16def aggregate_is_valid(components: List[HasIsValid]) -> List[bool]:
    +17    is_valid_arrays = [component.is_valid.values for component in components]
    +18    return [all(is_valid_step) for is_valid_step in transpose(is_valid_arrays)]
    +19
    +20
    +21class HasEmissions(Protocol):
    +22    emissions: List[PartialEmissionResult]
    +23
    +24
    +25def aggregate_emissions(
    +26    emissions_lists: List[Dict[str, PartialEmissionResult]],
    +27) -> Dict[str, PartialEmissionResult]:
    +28    """Aggregates emissions e.g. for a total asset across installations
    +29    Args:
    +30        emissions_lists (List[Dict[str, PartialEmissionResult]] or dict.values): Includes emissions to aggregate
    +31
    +32    Returns:
    +33        dto.types.FuelType
    +34    """
    +35
    +36    all_emissions = [emission for emissions in emissions_lists for emission in emissions.values()]
    +37
    +38    # Keep order of emissions
    +39    emission_names = []
    +40    for emission in all_emissions:
    +41        if emission.name not in emission_names:
    +42            emission_names.append(emission.name)
    +43
    +44    emissions_aggregated = {}
    +45    for emission_name in emission_names:
    +46        emissions = [emission for emission in all_emissions if emission.name == emission_name]
    +47
    +48        emissions_aggregated[emission_name] = PartialEmissionResult(
    +49            name=emission_name,
    +50            timesteps=emissions[0].timesteps,
    +51            rate=reduce(operator.add, [emission.rate.to_calendar_day() for emission in emissions]),
    +52        )
    +53
    +54    return emissions_aggregated
    +
    + + +
    +
    + +
    + + class + HasIsValid(typing.Protocol): + + + +
    + +
    13class HasIsValid(Protocol):
    +14    is_valid: TimeSeriesBoolean
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + HasIsValid(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    +
    + +
    + + def + aggregate_is_valid( components: List[libecalc.dto.utils.aggregators.HasIsValid]) -> List[bool]: + + + +
    + +
    17def aggregate_is_valid(components: List[HasIsValid]) -> List[bool]:
    +18    is_valid_arrays = [component.is_valid.values for component in components]
    +19    return [all(is_valid_step) for is_valid_step in transpose(is_valid_arrays)]
    +
    + + + + +
    +
    + +
    + + class + HasEmissions(typing.Protocol): + + + +
    + +
    22class HasEmissions(Protocol):
    +23    emissions: List[PartialEmissionResult]
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + HasEmissions(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    +
    + +
    + + def + aggregate_emissions( emissions_lists: List[Dict[str, libecalc.dto.result.emission.PartialEmissionResult]]) -> Dict[str, libecalc.dto.result.emission.PartialEmissionResult]: + + + +
    + +
    26def aggregate_emissions(
    +27    emissions_lists: List[Dict[str, PartialEmissionResult]],
    +28) -> Dict[str, PartialEmissionResult]:
    +29    """Aggregates emissions e.g. for a total asset across installations
    +30    Args:
    +31        emissions_lists (List[Dict[str, PartialEmissionResult]] or dict.values): Includes emissions to aggregate
    +32
    +33    Returns:
    +34        dto.types.FuelType
    +35    """
    +36
    +37    all_emissions = [emission for emissions in emissions_lists for emission in emissions.values()]
    +38
    +39    # Keep order of emissions
    +40    emission_names = []
    +41    for emission in all_emissions:
    +42        if emission.name not in emission_names:
    +43            emission_names.append(emission.name)
    +44
    +45    emissions_aggregated = {}
    +46    for emission_name in emission_names:
    +47        emissions = [emission for emission in all_emissions if emission.name == emission_name]
    +48
    +49        emissions_aggregated[emission_name] = PartialEmissionResult(
    +50            name=emission_name,
    +51            timesteps=emissions[0].timesteps,
    +52            rate=reduce(operator.add, [emission.rate.to_calendar_day() for emission in emissions]),
    +53        )
    +54
    +55    return emissions_aggregated
    +
    + + +

    Aggregates emissions e.g. for a total asset across installations +Args: + emissions_lists (List[Dict[str, PartialEmissionResult]] or dict.values): Includes emissions to aggregate

    + +

    Returns: + dto.types.FuelType

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/utils/validators.html b/docs/about/references/api/libecalc/dto/utils/validators.html new file mode 100644 index 0000000000..8157ffdece --- /dev/null +++ b/docs/about/references/api/libecalc/dto/utils/validators.html @@ -0,0 +1,405 @@ + + + + + + + libecalc.dto.utils.validators API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.utils.validators

    + + + + + + +
     1from datetime import date, datetime
    + 2from typing import Dict, List, Optional, TypeVar, Union
    + 3
    + 4from pydantic import StringConstraints
    + 5from typing_extensions import Annotated
    + 6
    + 7from libecalc.common.time_utils import is_temporal_model
    + 8from libecalc.expression import Expression
    + 9
    +10EmissionNameStr = Annotated[str, StringConstraints(pattern=r"^\w*$")]
    +11COMPONENT_NAME_ALLOWED_CHARS = "A-ZÆØÅa-zæøå\\d_/\\- "
    +12COMPONENT_NAME_PATTERN = r"^[" + COMPONENT_NAME_ALLOWED_CHARS + "]*$"
    +13ComponentNameStr = Annotated[
    +14    str, StringConstraints(pattern=COMPONENT_NAME_PATTERN)
    +15]  # synced with valid regexp in BE4FE
    +16
    +17ExpressionType = Union[str, int, float, Expression]
    +18
    +19
    +20def convert_expression(
    +21    value: Optional[Union[ExpressionType, Dict[date, ExpressionType]]]
    +22) -> Optional[Union[Expression, Dict[date, Expression]]]:
    +23    if value is None or isinstance(value, Expression):
    +24        return value
    +25    elif is_temporal_model(value):
    +26        return {start_time: convert_expression(value=expression) for start_time, expression in value.items()}
    +27    return Expression.setup_from_expression(value=value)
    +28
    +29
    +30def convert_expressions(
    +31    value: Optional[List[Optional[Union[ExpressionType, Dict[date, ExpressionType]]]]]
    +32) -> Optional[List[Optional[Union[Expression, Dict[date, Expression]]]]]:
    +33    if value is None:
    +34        return value
    +35    if not isinstance(value, list):
    +36        return convert_expression(value=value)
    +37    else:
    +38        return [convert_expression(value=value) for value in value]
    +39
    +40
    +41def uppercase_user_defined_category(value):
    +42    if value is not None and isinstance(value, str):
    +43        return value.upper()
    +44    elif value is not None and is_temporal_model(value):
    +45        return {timestep: category.upper() for timestep, category in value.items()}
    +46    return value
    +47
    +48
    +49TModel = TypeVar("TModel")
    +50
    +51
    +52def validate_temporal_model(model: Dict[datetime, TModel]) -> Dict[datetime, TModel]:
    +53    if not (list(model.keys()) == sorted(model)):
    +54        raise ValueError("Dates in a temporal model should be sorted with the earliest date first")
    +55
    +56    return model
    +
    + + +
    +
    + +
    + + def + convert_expression( value: Union[str, int, float, libecalc.expression.expression.Expression, Dict[datetime.date, Union[str, int, float, libecalc.expression.expression.Expression]], NoneType]) -> Union[libecalc.expression.expression.Expression, Dict[datetime.date, libecalc.expression.expression.Expression], NoneType]: + + + +
    + +
    21def convert_expression(
    +22    value: Optional[Union[ExpressionType, Dict[date, ExpressionType]]]
    +23) -> Optional[Union[Expression, Dict[date, Expression]]]:
    +24    if value is None or isinstance(value, Expression):
    +25        return value
    +26    elif is_temporal_model(value):
    +27        return {start_time: convert_expression(value=expression) for start_time, expression in value.items()}
    +28    return Expression.setup_from_expression(value=value)
    +
    + + + + +
    +
    + +
    + + def + convert_expressions( value: Union[List[Union[str, int, float, libecalc.expression.expression.Expression, Dict[datetime.date, Union[str, int, float, libecalc.expression.expression.Expression]], NoneType]], NoneType]) -> Union[List[Union[libecalc.expression.expression.Expression, Dict[datetime.date, libecalc.expression.expression.Expression], NoneType]], NoneType]: + + + +
    + +
    31def convert_expressions(
    +32    value: Optional[List[Optional[Union[ExpressionType, Dict[date, ExpressionType]]]]]
    +33) -> Optional[List[Optional[Union[Expression, Dict[date, Expression]]]]]:
    +34    if value is None:
    +35        return value
    +36    if not isinstance(value, list):
    +37        return convert_expression(value=value)
    +38    else:
    +39        return [convert_expression(value=value) for value in value]
    +
    + + + + +
    +
    + +
    + + def + uppercase_user_defined_category(value): + + + +
    + +
    42def uppercase_user_defined_category(value):
    +43    if value is not None and isinstance(value, str):
    +44        return value.upper()
    +45    elif value is not None and is_temporal_model(value):
    +46        return {timestep: category.upper() for timestep, category in value.items()}
    +47    return value
    +
    + + + + +
    +
    + +
    + + def + validate_temporal_model( model: Dict[datetime.datetime, ~TModel]) -> Dict[datetime.datetime, ~TModel]: + + + +
    + +
    53def validate_temporal_model(model: Dict[datetime, TModel]) -> Dict[datetime, TModel]:
    +54    if not (list(model.keys()) == sorted(model)):
    +55        raise ValueError("Dates in a temporal model should be sorted with the earliest date first")
    +56
    +57    return model
    +
    + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/variables.html b/docs/about/references/api/libecalc/dto/variables.html new file mode 100644 index 0000000000..403d78be16 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/variables.html @@ -0,0 +1,541 @@ + + + + + + + libecalc.dto.variables API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.variables

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from datetime import datetime, timedelta
    + 4from typing import Dict, List
    + 5
    + 6from pydantic import BaseModel, Field
    + 7from typing_extensions import Annotated
    + 8
    + 9from libecalc.common.time_utils import Period
    +10
    +11
    +12class VariablesMap(BaseModel):
    +13    """A map of all (timeseries) variables that can be used in eCalc YAML
    +14    A variable name has the format "{name_of_case};{title_of_header} from the original
    +15    file/resource with time series, ie;
    +16
    +17    A file is named "reservoir1" and contains headers "rgi" and "pwi", then this will
    +18    result in 2 mappings in this object; "reservoir1;rgi" and "reservoir1;pwi", which
    +19    can be referred to in the eCalc YAML.
    +20
    +21    Currently, the relevant variables are sent/injected to the components that have used
    +22    it in the yaml, but at some point it may be replaced with the data/parameters directly,
    +23    ie the variables will be evaluated before the calculation starts.
    +24
    +25    The variables must be interpolated and extrapolated before being added to the variablesmap,
    +26    to make sure that the resolution of ALL variables are the same for everywhere it is being used,
    +27    BEFORE the calculation starts; ie happens as a pre step before calculation, and not in the calculation
    +28    directly.
    +29    """
    +30
    +31    time_vector: List[datetime] = Field(default_factory=list)
    +32    variables: Dict[str, List[Annotated[float, Field(allow_inf_nan=False)]]] = Field(default_factory=dict)
    +33
    +34    @property
    +35    def period(self):
    +36        return Period(
    +37            start=self.time_vector[0],
    +38            end=self.time_vector[-1] + timedelta(microseconds=1),  # Make sure the last timestep is included
    +39            # TODO: Change this? Need to change where stuff depends on this ...
    +40        )
    +41
    +42    @property
    +43    def length(self) -> int:
    +44        return len(self.time_vector)
    +45
    +46    def get_subset(self, start_index: int = 0, end_index: int = -1) -> VariablesMap:
    +47        subset_time_vector = self.time_vector[start_index:end_index]
    +48        subset_dict = {ref: array[start_index:end_index] for ref, array in self.variables.items()}
    +49        return VariablesMap(variables=subset_dict, time_vector=subset_time_vector)
    +50
    +51    def get_subset_from_period(self, period: Period) -> VariablesMap:
    +52        start_index, end_index = period.get_timestep_indices(self.time_vector)
    +53        return self.get_subset(start_index, end_index)
    +54
    +55    def get_subset_for_timestep(self, current_timestep: datetime) -> VariablesMap:
    +56        """
    +57        Get variables that are active and in use for the given timestep only
    +58        :param current_timestep:
    +59        :return:
    +60        """
    +61        timestep_index = self.time_vector.index(current_timestep)
    +62        return self.get_subset(timestep_index, timestep_index + 1)
    +63
    +64    def zeros(self) -> List[float]:
    +65        return [0.0] * len(self.time_vector)
    +
    + + +
    +
    + +
    + + class + VariablesMap(pydantic.main.BaseModel): + + + +
    + +
    13class VariablesMap(BaseModel):
    +14    """A map of all (timeseries) variables that can be used in eCalc YAML
    +15    A variable name has the format "{name_of_case};{title_of_header} from the original
    +16    file/resource with time series, ie;
    +17
    +18    A file is named "reservoir1" and contains headers "rgi" and "pwi", then this will
    +19    result in 2 mappings in this object; "reservoir1;rgi" and "reservoir1;pwi", which
    +20    can be referred to in the eCalc YAML.
    +21
    +22    Currently, the relevant variables are sent/injected to the components that have used
    +23    it in the yaml, but at some point it may be replaced with the data/parameters directly,
    +24    ie the variables will be evaluated before the calculation starts.
    +25
    +26    The variables must be interpolated and extrapolated before being added to the variablesmap,
    +27    to make sure that the resolution of ALL variables are the same for everywhere it is being used,
    +28    BEFORE the calculation starts; ie happens as a pre step before calculation, and not in the calculation
    +29    directly.
    +30    """
    +31
    +32    time_vector: List[datetime] = Field(default_factory=list)
    +33    variables: Dict[str, List[Annotated[float, Field(allow_inf_nan=False)]]] = Field(default_factory=dict)
    +34
    +35    @property
    +36    def period(self):
    +37        return Period(
    +38            start=self.time_vector[0],
    +39            end=self.time_vector[-1] + timedelta(microseconds=1),  # Make sure the last timestep is included
    +40            # TODO: Change this? Need to change where stuff depends on this ...
    +41        )
    +42
    +43    @property
    +44    def length(self) -> int:
    +45        return len(self.time_vector)
    +46
    +47    def get_subset(self, start_index: int = 0, end_index: int = -1) -> VariablesMap:
    +48        subset_time_vector = self.time_vector[start_index:end_index]
    +49        subset_dict = {ref: array[start_index:end_index] for ref, array in self.variables.items()}
    +50        return VariablesMap(variables=subset_dict, time_vector=subset_time_vector)
    +51
    +52    def get_subset_from_period(self, period: Period) -> VariablesMap:
    +53        start_index, end_index = period.get_timestep_indices(self.time_vector)
    +54        return self.get_subset(start_index, end_index)
    +55
    +56    def get_subset_for_timestep(self, current_timestep: datetime) -> VariablesMap:
    +57        """
    +58        Get variables that are active and in use for the given timestep only
    +59        :param current_timestep:
    +60        :return:
    +61        """
    +62        timestep_index = self.time_vector.index(current_timestep)
    +63        return self.get_subset(timestep_index, timestep_index + 1)
    +64
    +65    def zeros(self) -> List[float]:
    +66        return [0.0] * len(self.time_vector)
    +
    + + +

    A map of all (timeseries) variables that can be used in eCalc YAML +A variable name has the format "{name_of_case};{title_of_header} from the original +file/resource with time series, ie;

    + +

    A file is named "reservoir1" and contains headers "rgi" and "pwi", then this will +result in 2 mappings in this object; "reservoir1;rgi" and "reservoir1;pwi", which +can be referred to in the eCalc YAML.

    + +

    Currently, the relevant variables are sent/injected to the components that have used +it in the yaml, but at some point it may be replaced with the data/parameters directly, +ie the variables will be evaluated before the calculation starts.

    + +

    The variables must be interpolated and extrapolated before being added to the variablesmap, +to make sure that the resolution of ALL variables are the same for everywhere it is being used, +BEFORE the calculation starts; ie happens as a pre step before calculation, and not in the calculation +directly.

    +
    + + +
    + +
    + + def + get_subset( self, start_index: int = 0, end_index: int = -1) -> libecalc.dto.variables.VariablesMap: + + + +
    + +
    47    def get_subset(self, start_index: int = 0, end_index: int = -1) -> VariablesMap:
    +48        subset_time_vector = self.time_vector[start_index:end_index]
    +49        subset_dict = {ref: array[start_index:end_index] for ref, array in self.variables.items()}
    +50        return VariablesMap(variables=subset_dict, time_vector=subset_time_vector)
    +
    + + + + +
    +
    + +
    + + def + get_subset_from_period( self, period: libecalc.common.time_utils.Period) -> libecalc.dto.variables.VariablesMap: + + + +
    + +
    52    def get_subset_from_period(self, period: Period) -> VariablesMap:
    +53        start_index, end_index = period.get_timestep_indices(self.time_vector)
    +54        return self.get_subset(start_index, end_index)
    +
    + + + + +
    +
    + +
    + + def + get_subset_for_timestep( self, current_timestep: datetime.datetime) -> libecalc.dto.variables.VariablesMap: + + + +
    + +
    56    def get_subset_for_timestep(self, current_timestep: datetime) -> VariablesMap:
    +57        """
    +58        Get variables that are active and in use for the given timestep only
    +59        :param current_timestep:
    +60        :return:
    +61        """
    +62        timestep_index = self.time_vector.index(current_timestep)
    +63        return self.get_subset(timestep_index, timestep_index + 1)
    +
    + + +

    Get variables that are active and in use for the given timestep only

    + +
    Parameters
    + +
      +
    • current_timestep:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + zeros(self) -> List[float]: + + + +
    + +
    65    def zeros(self) -> List[float]:
    +66        return [0.0] * len(self.time_vector)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/examples.html b/docs/about/references/api/libecalc/examples.html new file mode 100644 index 0000000000..77a8799e9c --- /dev/null +++ b/docs/about/references/api/libecalc/examples.html @@ -0,0 +1,244 @@ + + + + + + + libecalc.examples API documentation + + + + + + + + + +
    +
    +

    +libecalc.examples

    + + + + + + +
    1from .advanced import *  # noqa: F403
    +2from .simple import *  # noqa: F403
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/examples/advanced.html b/docs/about/references/api/libecalc/examples/advanced.html new file mode 100644 index 0000000000..aa0726af30 --- /dev/null +++ b/docs/about/references/api/libecalc/examples/advanced.html @@ -0,0 +1,304 @@ + + + + + + + libecalc.examples.advanced API documentation + + + + + + + + + +
    +
    +

    +libecalc.examples.advanced

    + + + + + + +
     1from pathlib import Path
    + 2
    + 3import pytest
    + 4
    + 5from libecalc.fixtures import YamlCase
    + 6from libecalc.fixtures.case_utils import YamlCaseLoader
    + 7
    + 8"""
    + 9Test project for Advanced
    +10
    +11The purpose of this fixture is to showcase an advanced version an eCalc Model for use with
    +12examples and testing.
    +13
    +14"""
    +15
    +16
    +17@pytest.fixture
    +18def advanced_yaml() -> YamlCase:
    +19    return YamlCaseLoader.load(
    +20        case_path=Path(__file__).parent,
    +21        main_file="model.yaml",
    +22        resource_names=[
    +23            "base_profile.csv",
    +24            "compressor_chart.csv",
    +25            "compressor_sampled.csv",
    +26            "genset.csv",
    +27            "pump_chart.csv",
    +28        ],
    +29    )
    +
    + + +
    +
    + +
    +
    @pytest.fixture
    + + def + advanced_yaml() -> libecalc.fixtures.case_types.YamlCase: + + + +
    + +
    18@pytest.fixture
    +19def advanced_yaml() -> YamlCase:
    +20    return YamlCaseLoader.load(
    +21        case_path=Path(__file__).parent,
    +22        main_file="model.yaml",
    +23        resource_names=[
    +24            "base_profile.csv",
    +25            "compressor_chart.csv",
    +26            "compressor_sampled.csv",
    +27            "genset.csv",
    +28            "pump_chart.csv",
    +29        ],
    +30    )
    +
    + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/examples/simple.html b/docs/about/references/api/libecalc/examples/simple.html new file mode 100644 index 0000000000..9ec7cda34d --- /dev/null +++ b/docs/about/references/api/libecalc/examples/simple.html @@ -0,0 +1,306 @@ + + + + + + + libecalc.examples.simple API documentation + + + + + + + + + +
    +
    +

    +libecalc.examples.simple

    + + + + + + +
     1from pathlib import Path
    + 2
    + 3import pytest
    + 4
    + 5from libecalc.fixtures import YamlCase
    + 6from libecalc.fixtures.case_utils import YamlCaseLoader
    + 7
    + 8"""
    + 9Test project for Simple
    +10
    +11The purpose of this fixture is to show a simple example of an eCalc model for testing and examples, and to
    +12have a lightweight version of a complete model for lightweight e2e testing.
    +13
    +14"""
    +15
    +16
    +17@pytest.fixture
    +18def simple_yaml() -> YamlCase:
    +19    return YamlCaseLoader.load(
    +20        case_path=Path(__file__).parent,
    +21        main_file="model.yaml",
    +22        resource_names=[
    +23            "compressor_sampled.csv",
    +24            "compressor_sampled_with_turbine.csv",
    +25            "genset.csv",
    +26            "production_data.csv",
    +27            "pump_chart.csv",
    +28            "pump_sampled.csv",
    +29        ],
    +30    )
    +
    + + +
    +
    + +
    +
    @pytest.fixture
    + + def + simple_yaml() -> libecalc.fixtures.case_types.YamlCase: + + + +
    + +
    18@pytest.fixture
    +19def simple_yaml() -> YamlCase:
    +20    return YamlCaseLoader.load(
    +21        case_path=Path(__file__).parent,
    +22        main_file="model.yaml",
    +23        resource_names=[
    +24            "compressor_sampled.csv",
    +25            "compressor_sampled_with_turbine.csv",
    +26            "genset.csv",
    +27            "production_data.csv",
    +28            "pump_chart.csv",
    +29            "pump_sampled.csv",
    +30        ],
    +31    )
    +
    + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/expression.html b/docs/about/references/api/libecalc/expression.html new file mode 100644 index 0000000000..aa689be9d9 --- /dev/null +++ b/docs/about/references/api/libecalc/expression.html @@ -0,0 +1,243 @@ + + + + + + + libecalc.expression API documentation + + + + + + + + + +
    +
    +

    +libecalc.expression

    + + + + + + +
    1from libecalc.expression.expression import Expression
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/expression/expression.html b/docs/about/references/api/libecalc/expression/expression.html new file mode 100644 index 0000000000..fa5f76ee16 --- /dev/null +++ b/docs/about/references/api/libecalc/expression/expression.html @@ -0,0 +1,897 @@ + + + + + + + libecalc.expression.expression API documentation + + + + + + + + + +
    +
    +

    +libecalc.expression.expression

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3from datetime import datetime
    +  4from typing import Any, Dict, List, Union
    +  5
    +  6import numpy as np
    +  7from numpy.typing import NDArray
    +  8from pydantic import GetCoreSchemaHandler, GetJsonSchemaHandler, TypeAdapter
    +  9from pydantic.json_schema import JsonSchemaValue
    + 10from pydantic_core import CoreSchema, core_schema
    + 11from pydantic_core.core_schema import ValidationInfo
    + 12
    + 13from libecalc.common.errors.exceptions import EcalcError, EcalcErrorType
    + 14from libecalc.common.logger import logger
    + 15from libecalc.expression.expression_evaluator import (
    + 16    Operators,
    + 17    Token,
    + 18    TokenTag,
    + 19    eval_tokens,
    + 20    lexer,
    + 21)
    + 22
    + 23LEFT_PARENTHESIS_TOKEN = Token(tag=TokenTag.operator, value=Operators.left_parenthesis.value)
    + 24RIGHT_PARENTHESIS_TOKEN = Token(tag=TokenTag.operator, value=Operators.right_parenthesis.value)
    + 25MULTIPLICATION_TOKEN = Token(tag=TokenTag.operator, value=Operators.multiply.value)
    + 26
    + 27ExpressionType = Union[str, float, int]
    + 28
    + 29
    + 30class InvalidExpressionError(EcalcError):
    + 31    """
    + 32    Invalid expression error
    + 33    """
    + 34
    + 35    def __init__(self, message: str):
    + 36        super().__init__(
    + 37            title="Invalid expression",
    + 38            message=message,
    + 39            error_type=EcalcErrorType.CLIENT_ERROR,
    + 40        )
    + 41
    + 42
    + 43class Expression:
    + 44    def __init__(
    + 45        self,
    + 46        tokens: List[Token],
    + 47    ):
    + 48        self.tokens = tokens
    + 49
    + 50    @classmethod
    + 51    def setup_from_expression(
    + 52        cls,
    + 53        value: ExpressionType,
    + 54    ) -> Expression:
    + 55        tokens = cls.validate(value)
    + 56        return cls(tokens=tokens)
    + 57
    + 58    def __str__(self):
    + 59        expression_string = " ".join(str(token) for token in self.tokens)
    + 60        expression_string = expression_string.replace(" )", ")")
    + 61        expression_string = expression_string.replace("( ", "(")
    + 62        return expression_string
    + 63
    + 64    @property
    + 65    def variables(self) -> List[str]:
    + 66        return [token.value for token in self.tokens if token.tag == TokenTag.reference]
    + 67
    + 68    @classmethod
    + 69    def multiply(cls, expression1: Expression, expression2: Expression) -> Expression:
    + 70        """Create new expression by multiplying two expressions
    + 71        new expression = "(expression1) {*} (expression2)".
    + 72        """
    + 73        tokens1 = expression1.tokens
    + 74        tokens2 = expression2.tokens
    + 75        tokens_multiplied = (
    + 76            [LEFT_PARENTHESIS_TOKEN]
    + 77            + tokens1
    + 78            + [RIGHT_PARENTHESIS_TOKEN]
    + 79            + [MULTIPLICATION_TOKEN]
    + 80            + [LEFT_PARENTHESIS_TOKEN]
    + 81            + tokens2
    + 82            + [RIGHT_PARENTHESIS_TOKEN]
    + 83        )
    + 84        return cls(tokens=tokens_multiplied)
    + 85
    + 86    @classmethod
    + 87    def validate(cls, expression: ExpressionType) -> List[Token]:
    + 88        expression = _expression_as_number_if_number(expression_input=expression)
    + 89
    + 90        if not isinstance(expression, (str, float, int)):
    + 91            raise InvalidExpressionError("Expression should be of type str, int or float")
    + 92
    + 93        try:
    + 94            return lexer(expression)
    + 95        except (KeyError, ValueError) as e:
    + 96            raise InvalidExpressionError(message=str(e)) from e
    + 97
    + 98    @classmethod
    + 99    def __get_pydantic_core_schema__(cls, source_type: Any, handler: GetCoreSchemaHandler) -> CoreSchema:
    +100        # TODO[pydantic]: Why is list passed into validation and serialization? Bug: https://github.com/pydantic/pydantic/issues/7642
    +101        def parse_expression(x: Union[List[ExpressionType], ExpressionType], info: ValidationInfo):
    +102            if isinstance(x, Expression):
    +103                return x
    +104
    +105            if isinstance(x, dict):
    +106                datetime_validation_func = (
    +107                    TypeAdapter(datetime).validate_python
    +108                    if info.mode == "python"
    +109                    else TypeAdapter(datetime).validate_json
    +110                )
    +111                return {datetime_validation_func(key): parse_expression(value, info) for key, value in x.items()}
    +112
    +113            if isinstance(x, list):
    +114                return [parse_expression(v, info) for v in x]
    +115
    +116            return Expression(tokens=cls.validate(x))
    +117
    +118        # item_schema = [core_schema.int_schema(), core_schema.float_schema(), core_schema.str_schema()]
    +119        # list_schema = core_schema.list_schema(core_schema.union_schema(item_schema))
    +120        # dict_schema = core_schema.dict_schema(core_schema.str_schema(), core_schema.union_schema(item_schema))
    +121        from_str_schema = core_schema.chain_schema(
    +122            [
    +123                # core_schema.union_schema(
    +124                #    [*item_schema, list_schema, dict_schema],
    +125                # ),
    +126                core_schema.with_info_plain_validator_function(parse_expression),
    +127            ]
    +128        )
    +129
    +130        def serialize_expression(instance):
    +131            if isinstance(instance, list):
    +132                # TODO[pydantic]: Why is list passed into this? Bug: https://github.com/pydantic/pydantic/issues/7642
    +133                return [serialize_expression(x) for x in instance]
    +134            if isinstance(instance, Expression):
    +135                return str(instance)
    +136
    +137            raise ValueError("Wrong type")
    +138
    +139        return core_schema.json_or_python_schema(
    +140            json_schema=from_str_schema,
    +141            python_schema=core_schema.union_schema(
    +142                [
    +143                    # check if it's an instance first before doing any further work
    +144                    core_schema.is_instance_schema(Expression),
    +145                    from_str_schema,
    +146                ]
    +147            ),
    +148            serialization=core_schema.plain_serializer_function_ser_schema(serialize_expression),
    +149        )
    +150
    +151    @classmethod
    +152    def validator(cls, expression: Union[str, float, int, Expression]):
    +153        if isinstance(expression, Expression):
    +154            return expression
    +155        tokens = cls.validate(expression=expression)
    +156        instance = cls(tokens=tokens)
    +157        return instance
    +158
    +159    def evaluate(self, variables: Dict[str, List[float]], fill_length: int) -> NDArray[np.float64]:
    +160        missing_references = [reference_id for reference_id in self.variables if reference_id not in variables]
    +161        if len(missing_references) != 0:
    +162            msg = f"Unable to evaluate expression. Missing reference(s) {', '.join(missing_references)}"
    +163            logger.error(msg)
    +164            raise InvalidExpressionError(msg)
    +165
    +166        tokens = [
    +167            Token(
    +168                tag=TokenTag.numeric,
    +169                value=np.asarray(variables.get(token.value)),
    +170            )
    +171            if token.tag == TokenTag.reference
    +172            else token
    +173            for token in self.tokens
    +174        ]
    +175        try:
    +176            return eval_tokens(tokens=tokens, array_length=fill_length)
    +177        except (KeyError, ValueError) as e:
    +178            raise InvalidExpressionError(message=str(e)) from e
    +179
    +180    def __eq__(self, other):
    +181        if not isinstance(other, Expression):
    +182            return NotImplemented
    +183        return self.tokens == other.tokens
    +184
    +185    def __repr__(self):
    +186        return f"Expression(tokens={''.join(repr(token) for token in self.tokens)})"
    +187
    +188    @classmethod
    +189    def __get_pydantic_json_schema__(
    +190        cls, _core_schema: core_schema.CoreSchema, handler: GetJsonSchemaHandler
    +191    ) -> JsonSchemaValue:
    +192        # TODO: missing pattern, removed when migrating to pydantic v2
    +193        return handler(
    +194            core_schema.union_schema(
    +195                [core_schema.int_schema(), core_schema.float_schema(), core_schema.str_schema()],
    +196            )
    +197        )
    +198
    +199
    +200def _expression_as_number_if_number(expression_input: ExpressionType) -> ExpressionType:
    +201    """Expressions may be either pure numbers, booleans or strings which define a combination of numbers, operators and
    +202    references as a string. If very small numbers are parsed and represented in scientific notation, the expression
    +203    parsing will wrongfully treat these as expressions with references/operators instead of pure numeric values. Thus,
    +204    all inputs are tested if they can be directly converted to a number, and if so we use the value instead of the
    +205    string representation in further calculations.
    +206    """
    +207    if isinstance(expression_input, str):
    +208        try:
    +209            expression_as_number_if_number = float(expression_input)
    +210        except Exception:
    +211            expression_as_number_if_number = expression_input  # type: ignore[assignment]
    +212    else:
    +213        expression_as_number_if_number = expression_input
    +214
    +215    return expression_as_number_if_number
    +
    + + +
    +
    + +
    + + class + InvalidExpressionError(libecalc.common.errors.exceptions.EcalcError): + + + +
    + +
    31class InvalidExpressionError(EcalcError):
    +32    """
    +33    Invalid expression error
    +34    """
    +35
    +36    def __init__(self, message: str):
    +37        super().__init__(
    +38            title="Invalid expression",
    +39            message=message,
    +40            error_type=EcalcErrorType.CLIENT_ERROR,
    +41        )
    +
    + + +

    Invalid expression error

    +
    + + +
    + +
    + + InvalidExpressionError(message: str) + + + +
    + +
    36    def __init__(self, message: str):
    +37        super().__init__(
    +38            title="Invalid expression",
    +39            message=message,
    +40            error_type=EcalcErrorType.CLIENT_ERROR,
    +41        )
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + Expression: + + + +
    + +
     44class Expression:
    + 45    def __init__(
    + 46        self,
    + 47        tokens: List[Token],
    + 48    ):
    + 49        self.tokens = tokens
    + 50
    + 51    @classmethod
    + 52    def setup_from_expression(
    + 53        cls,
    + 54        value: ExpressionType,
    + 55    ) -> Expression:
    + 56        tokens = cls.validate(value)
    + 57        return cls(tokens=tokens)
    + 58
    + 59    def __str__(self):
    + 60        expression_string = " ".join(str(token) for token in self.tokens)
    + 61        expression_string = expression_string.replace(" )", ")")
    + 62        expression_string = expression_string.replace("( ", "(")
    + 63        return expression_string
    + 64
    + 65    @property
    + 66    def variables(self) -> List[str]:
    + 67        return [token.value for token in self.tokens if token.tag == TokenTag.reference]
    + 68
    + 69    @classmethod
    + 70    def multiply(cls, expression1: Expression, expression2: Expression) -> Expression:
    + 71        """Create new expression by multiplying two expressions
    + 72        new expression = "(expression1) {*} (expression2)".
    + 73        """
    + 74        tokens1 = expression1.tokens
    + 75        tokens2 = expression2.tokens
    + 76        tokens_multiplied = (
    + 77            [LEFT_PARENTHESIS_TOKEN]
    + 78            + tokens1
    + 79            + [RIGHT_PARENTHESIS_TOKEN]
    + 80            + [MULTIPLICATION_TOKEN]
    + 81            + [LEFT_PARENTHESIS_TOKEN]
    + 82            + tokens2
    + 83            + [RIGHT_PARENTHESIS_TOKEN]
    + 84        )
    + 85        return cls(tokens=tokens_multiplied)
    + 86
    + 87    @classmethod
    + 88    def validate(cls, expression: ExpressionType) -> List[Token]:
    + 89        expression = _expression_as_number_if_number(expression_input=expression)
    + 90
    + 91        if not isinstance(expression, (str, float, int)):
    + 92            raise InvalidExpressionError("Expression should be of type str, int or float")
    + 93
    + 94        try:
    + 95            return lexer(expression)
    + 96        except (KeyError, ValueError) as e:
    + 97            raise InvalidExpressionError(message=str(e)) from e
    + 98
    + 99    @classmethod
    +100    def __get_pydantic_core_schema__(cls, source_type: Any, handler: GetCoreSchemaHandler) -> CoreSchema:
    +101        # TODO[pydantic]: Why is list passed into validation and serialization? Bug: https://github.com/pydantic/pydantic/issues/7642
    +102        def parse_expression(x: Union[List[ExpressionType], ExpressionType], info: ValidationInfo):
    +103            if isinstance(x, Expression):
    +104                return x
    +105
    +106            if isinstance(x, dict):
    +107                datetime_validation_func = (
    +108                    TypeAdapter(datetime).validate_python
    +109                    if info.mode == "python"
    +110                    else TypeAdapter(datetime).validate_json
    +111                )
    +112                return {datetime_validation_func(key): parse_expression(value, info) for key, value in x.items()}
    +113
    +114            if isinstance(x, list):
    +115                return [parse_expression(v, info) for v in x]
    +116
    +117            return Expression(tokens=cls.validate(x))
    +118
    +119        # item_schema = [core_schema.int_schema(), core_schema.float_schema(), core_schema.str_schema()]
    +120        # list_schema = core_schema.list_schema(core_schema.union_schema(item_schema))
    +121        # dict_schema = core_schema.dict_schema(core_schema.str_schema(), core_schema.union_schema(item_schema))
    +122        from_str_schema = core_schema.chain_schema(
    +123            [
    +124                # core_schema.union_schema(
    +125                #    [*item_schema, list_schema, dict_schema],
    +126                # ),
    +127                core_schema.with_info_plain_validator_function(parse_expression),
    +128            ]
    +129        )
    +130
    +131        def serialize_expression(instance):
    +132            if isinstance(instance, list):
    +133                # TODO[pydantic]: Why is list passed into this? Bug: https://github.com/pydantic/pydantic/issues/7642
    +134                return [serialize_expression(x) for x in instance]
    +135            if isinstance(instance, Expression):
    +136                return str(instance)
    +137
    +138            raise ValueError("Wrong type")
    +139
    +140        return core_schema.json_or_python_schema(
    +141            json_schema=from_str_schema,
    +142            python_schema=core_schema.union_schema(
    +143                [
    +144                    # check if it's an instance first before doing any further work
    +145                    core_schema.is_instance_schema(Expression),
    +146                    from_str_schema,
    +147                ]
    +148            ),
    +149            serialization=core_schema.plain_serializer_function_ser_schema(serialize_expression),
    +150        )
    +151
    +152    @classmethod
    +153    def validator(cls, expression: Union[str, float, int, Expression]):
    +154        if isinstance(expression, Expression):
    +155            return expression
    +156        tokens = cls.validate(expression=expression)
    +157        instance = cls(tokens=tokens)
    +158        return instance
    +159
    +160    def evaluate(self, variables: Dict[str, List[float]], fill_length: int) -> NDArray[np.float64]:
    +161        missing_references = [reference_id for reference_id in self.variables if reference_id not in variables]
    +162        if len(missing_references) != 0:
    +163            msg = f"Unable to evaluate expression. Missing reference(s) {', '.join(missing_references)}"
    +164            logger.error(msg)
    +165            raise InvalidExpressionError(msg)
    +166
    +167        tokens = [
    +168            Token(
    +169                tag=TokenTag.numeric,
    +170                value=np.asarray(variables.get(token.value)),
    +171            )
    +172            if token.tag == TokenTag.reference
    +173            else token
    +174            for token in self.tokens
    +175        ]
    +176        try:
    +177            return eval_tokens(tokens=tokens, array_length=fill_length)
    +178        except (KeyError, ValueError) as e:
    +179            raise InvalidExpressionError(message=str(e)) from e
    +180
    +181    def __eq__(self, other):
    +182        if not isinstance(other, Expression):
    +183            return NotImplemented
    +184        return self.tokens == other.tokens
    +185
    +186    def __repr__(self):
    +187        return f"Expression(tokens={''.join(repr(token) for token in self.tokens)})"
    +188
    +189    @classmethod
    +190    def __get_pydantic_json_schema__(
    +191        cls, _core_schema: core_schema.CoreSchema, handler: GetJsonSchemaHandler
    +192    ) -> JsonSchemaValue:
    +193        # TODO: missing pattern, removed when migrating to pydantic v2
    +194        return handler(
    +195            core_schema.union_schema(
    +196                [core_schema.int_schema(), core_schema.float_schema(), core_schema.str_schema()],
    +197            )
    +198        )
    +
    + + + + +
    + +
    + + Expression(tokens: List[libecalc.expression.expression_evaluator.Token]) + + + +
    + +
    45    def __init__(
    +46        self,
    +47        tokens: List[Token],
    +48    ):
    +49        self.tokens = tokens
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + setup_from_expression( cls, value: Union[str, float, int]) -> libecalc.expression.expression.Expression: + + + +
    + +
    51    @classmethod
    +52    def setup_from_expression(
    +53        cls,
    +54        value: ExpressionType,
    +55    ) -> Expression:
    +56        tokens = cls.validate(value)
    +57        return cls(tokens=tokens)
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + multiply( cls, expression1: libecalc.expression.expression.Expression, expression2: libecalc.expression.expression.Expression) -> libecalc.expression.expression.Expression: + + + +
    + +
    69    @classmethod
    +70    def multiply(cls, expression1: Expression, expression2: Expression) -> Expression:
    +71        """Create new expression by multiplying two expressions
    +72        new expression = "(expression1) {*} (expression2)".
    +73        """
    +74        tokens1 = expression1.tokens
    +75        tokens2 = expression2.tokens
    +76        tokens_multiplied = (
    +77            [LEFT_PARENTHESIS_TOKEN]
    +78            + tokens1
    +79            + [RIGHT_PARENTHESIS_TOKEN]
    +80            + [MULTIPLICATION_TOKEN]
    +81            + [LEFT_PARENTHESIS_TOKEN]
    +82            + tokens2
    +83            + [RIGHT_PARENTHESIS_TOKEN]
    +84        )
    +85        return cls(tokens=tokens_multiplied)
    +
    + + +

    Create new expression by multiplying two expressions +new expression = "(expression1) {*} (expression2)".

    +
    + + +
    +
    + +
    +
    @classmethod
    + + def + validate( cls, expression: Union[str, float, int]) -> List[libecalc.expression.expression_evaluator.Token]: + + + +
    + +
    87    @classmethod
    +88    def validate(cls, expression: ExpressionType) -> List[Token]:
    +89        expression = _expression_as_number_if_number(expression_input=expression)
    +90
    +91        if not isinstance(expression, (str, float, int)):
    +92            raise InvalidExpressionError("Expression should be of type str, int or float")
    +93
    +94        try:
    +95            return lexer(expression)
    +96        except (KeyError, ValueError) as e:
    +97            raise InvalidExpressionError(message=str(e)) from e
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + validator( cls, expression: Union[str, float, int, libecalc.expression.expression.Expression]): + + + +
    + +
    152    @classmethod
    +153    def validator(cls, expression: Union[str, float, int, Expression]):
    +154        if isinstance(expression, Expression):
    +155            return expression
    +156        tokens = cls.validate(expression=expression)
    +157        instance = cls(tokens=tokens)
    +158        return instance
    +
    + + + + +
    +
    + +
    + + def + evaluate( self, variables: Dict[str, List[float]], fill_length: int) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
    160    def evaluate(self, variables: Dict[str, List[float]], fill_length: int) -> NDArray[np.float64]:
    +161        missing_references = [reference_id for reference_id in self.variables if reference_id not in variables]
    +162        if len(missing_references) != 0:
    +163            msg = f"Unable to evaluate expression. Missing reference(s) {', '.join(missing_references)}"
    +164            logger.error(msg)
    +165            raise InvalidExpressionError(msg)
    +166
    +167        tokens = [
    +168            Token(
    +169                tag=TokenTag.numeric,
    +170                value=np.asarray(variables.get(token.value)),
    +171            )
    +172            if token.tag == TokenTag.reference
    +173            else token
    +174            for token in self.tokens
    +175        ]
    +176        try:
    +177            return eval_tokens(tokens=tokens, array_length=fill_length)
    +178        except (KeyError, ValueError) as e:
    +179            raise InvalidExpressionError(message=str(e)) from e
    +
    + + + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/expression/expression_evaluator.html b/docs/about/references/api/libecalc/expression/expression_evaluator.html new file mode 100644 index 0000000000..b9a90ef21c --- /dev/null +++ b/docs/about/references/api/libecalc/expression/expression_evaluator.html @@ -0,0 +1,1608 @@ + + + + + + + libecalc.expression.expression_evaluator API documentation + + + + + + + + + +
    +
    +

    +libecalc.expression.expression_evaluator

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3import operator as op
    +  4import re
    +  5import warnings
    +  6from enum import Enum
    +  7from numbers import Number
    +  8from typing import List, Optional, Tuple, Union
    +  9
    + 10import numpy as np
    + 11from numpy.typing import NDArray
    + 12from pydantic import BaseModel, ConfigDict, Field
    + 13
    + 14from libecalc.common.logger import logger
    + 15
    + 16"""
    + 17Module for expression parsing used in Energy/CO2/emissions calculator
    + 18
    + 19Eval expressions
    + 20
    + 21Variable example: SIM1;OIL_PROD:SC-102
    + 22
    + 23Operators allowed: (with {} to allow + - * / in variable names)
    + 24    plus:       {+}
    + 25    minus:      {-}
    + 26    multiply:   {*}
    + 27    division:   {/}
    + 28    power:      {^}
    + 29
    + 30Parenteses are supported: ()
    + 31
    + 32Logicals are supported and returns 0 or 1
    + 33    Larger than:              >
    + 34    Larger than or equal to:  >=
    + 35    Smaller than:             <
    + 36    Smaller than or equal to: <=
    + 37    Equal to:                 ==
    + 38    Not equal to:             !=
    + 39
    + 40Example: SIM2;OIL_PROD:SC-102 {*} 2.0 {-} SIM1;OIL_PROD {+} SIM3:OIL_PROD_TOTAL:TMP; {*} (SIM3:OIL_PROD>0)
    + 41
    + 42"""
    + 43
    + 44
    + 45def eval_tokens(tokens: List[Token], array_length: int) -> NDArray[np.float64]:
    + 46    token_values = [token.value for token in tokens]
    + 47    check_tokens(token_values)
    + 48
    + 49    evaluated_values = np.nan_to_num(
    + 50        x=eval_parentheses(
    + 51            tokens=token_values,
    + 52        )  # type: ignore[arg-type]
    + 53    )
    + 54
    + 55    if isinstance(evaluated_values, (Number, int, float)):
    + 56        evaluated_values = np.full(fill_value=evaluated_values, shape=array_length)
    + 57    return evaluated_values
    + 58
    + 59
    + 60def eval_parentheses(
    + 61    tokens: List[Union[float, int, bool, NDArray[np.float64], str]],
    + 62    original_expression: Optional[str] = None,
    + 63) -> Union[NDArray[np.float64], Number]:
    + 64    """Evaluate expressions within parentheses"""
    + 65    with warnings.catch_warnings():
    + 66        warnings.simplefilter("ignore")
    + 67        number_of_left_parentheses, number_of_right_parentheses = count_parentheses(tokens=tokens)
    + 68        while number_of_left_parentheses or number_of_right_parentheses:
    + 69            if number_of_left_parentheses != number_of_right_parentheses:
    + 70                error_message = "Number of left and right parentheses do not match"
    + 71                if original_expression is not None:
    + 72                    error_message += f" for expression '{original_expression}'"
    + 73                raise ValueError(error_message)
    + 74
    + 75            ind = 0
    + 76            while ind < len(tokens) and str(tokens[ind]) != ")":
    + 77                ind += 1
    + 78            subend = ind
    + 79            while ind >= 0 and str(tokens[ind]) != "(":
    + 80                ind -= 1
    + 81            substart = ind
    + 82
    + 83            tokens_to_evaluate = tokens[substart + 1 : subend]
    + 84
    + 85            try:
    + 86                tokens_evaluated = eval_parentheses(
    + 87                    tokens_to_evaluate,
    + 88                    original_expression=original_expression,
    + 89                )
    + 90            except Exception as e:
    + 91                logger.exception(e)
    + 92                errorstr = ""
    + 93                if tokens_to_evaluate:
    + 94                    for token in tokens_to_evaluate:
    + 95                        if isinstance(token, np.ndarray):
    + 96                            errorstr += "array(len=" + str(len(token)) + ") "
    + 97                        else:
    + 98                            errorstr += str(token) + " "
    + 99                raise ValueError(
    +100                    "expression evaluator" + ": I have trouble calculating the expression: " + errorstr
    +101                ) from e
    +102
    +103            tokens = tokens[:substart] + [tokens_evaluated] + tokens[subend + 1 :]
    +104            number_of_left_parentheses, number_of_right_parentheses = count_parentheses(tokens=tokens)
    +105
    +106    return eval_logicals(tokens)
    +107
    +108
    +109def count_parentheses(tokens: List[Union[float, int, bool, NDArray[np.float64], str]]) -> Tuple[int, int]:
    +110    """Count the number of left "(" and right ")" parentheses in a list of tokens"""
    +111    strings_in_tokens = [element for element in tokens if isinstance(element, str)]
    +112    return strings_in_tokens.count(Operators.left_parenthesis.value), strings_in_tokens.count(
    +113        Operators.right_parenthesis.value
    +114    )
    +115
    +116
    +117def eval_logicals(tokens):
    +118    """Evaluate logical operators in expression"""
    +119    logical_ops = [">", "<", ">=", "<=", "==", "!="]
    +120    ind = 0
    +121    while ind < len(tokens):
    +122        if str(tokens[ind]) in logical_ops:
    +123            divind = ind
    +124            left_tokens = tokens[0:divind]
    +125            right_tokens = tokens[divind + 1 :]
    +126            # Check that there are not more than one logical operator in tokens
    +127            for right_tok in right_tokens:
    +128                if str(right_tok)[0] in logical_ops or str(right_tok)[:2] in logical_ops:
    +129                    raise KeyError("Not more than one logical operator within each parenthesis set")
    +130            return np.array(
    +131                OPERATORS[tokens[divind]](
    +132                    eval_additions(left_tokens),
    +133                    eval_additions(right_tokens),
    +134                ),
    +135                dtype=float,
    +136            )
    +137        ind += 1
    +138    return eval_additions(tokens)
    +139
    +140
    +141def eval_additions(tokens):
    +142    """Evaluate additions and subtractions in expression"""
    +143    add_ops = ["{+}", "{-}"]
    +144    values = []
    +145    with warnings.catch_warnings():
    +146        warnings.simplefilter("ignore")
    +147        if tokens.count("{+}") or tokens.count(
    +148            "{-}"
    +149        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +150            ind = 0
    +151            seqstart = 0
    +152            signNext = 1.0
    +153            while ind < len(tokens):
    +154                if str(tokens[ind]) in add_ops:
    +155                    values.append(signNext * eval_mults(tokens[seqstart:ind]))
    +156                    signNext = 1.0 if tokens[ind] == "{+}" else -1.0
    +157                    seqstart = ind + 1
    +158                ind += 1
    +159            if tokens[seqstart - 1] == "{+}":
    +160                values.append(eval_mults(tokens[seqstart:ind]))
    +161            else:
    +162                values.append(-1.0 * eval_mults(tokens[seqstart:ind]))
    +163
    +164        else:
    +165            values.append(eval_mults(tokens))
    +166    return sum(values)
    +167
    +168
    +169def eval_mults(tokens):
    +170    """Evaluate multiplications in expression"""
    +171    mult_ops = ["{*}", "{/}"]
    +172    values = []
    +173
    +174    # We may sometimes divide by zero in large vectors, but as these values might get removed
    +175    # by conditions later, we allow this and ignore related warnings
    +176    current_numpy_error = np.geterr()
    +177    np.seterr(divide="ignore", invalid="ignore")
    +178    with warnings.catch_warnings():
    +179        warnings.simplefilter("ignore")
    +180        if tokens.count("{*}") or tokens.count(
    +181            "{/}"
    +182        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +183            ind = 0
    +184            seqstart = 0
    +185            opnext = "mult"
    +186            while ind < len(tokens):
    +187                if str(tokens[ind]) in mult_ops:
    +188                    if opnext == "mult":
    +189                        values.append(eval_powers(tokens[seqstart:ind]))
    +190                    else:
    +191                        denominator = eval_powers(tokens[seqstart:ind])
    +192                        # By default, this throws a warning when denomonator contains 0
    +193                        # Want to allow division by 0 here, as these values may be ruled out later anyway
    +194                        # by conditions
    +195                        mult = np.divide(1.0, denominator)
    +196                        values.append(mult)
    +197                    opnext = "mult" if tokens[ind] == "{*}" else "div"
    +198                    seqstart = ind + 1
    +199                ind += 1
    +200            if tokens[seqstart - 1] == "{*}":
    +201                values.append(eval_powers(tokens[seqstart:ind]))
    +202            else:
    +203                denominator = eval_powers(tokens[seqstart:ind])
    +204                mult = np.divide(1.0, denominator)
    +205                values.append(mult)
    +206        else:
    +207            tmp = eval_powers(tokens)
    +208            if tmp is not None:
    +209                values.append(eval_powers(tokens))
    +210        value = 1.0
    +211        for factor in values:
    +212            value = value * factor
    +213        np.seterr(**current_numpy_error)
    +214    return np.nan_to_num(value)
    +215
    +216
    +217def eval_powers(tokens):
    +218    """Evaluate exponential calculations in expression"""
    +219    with warnings.catch_warnings():
    +220        warnings.simplefilter("ignore")
    +221        if tokens.count(
    +222            "{^}"
    +223        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +224            if len(tokens) != 3:
    +225                raise ValueError("Number of tokens needs to be 3 for evalPowers, quotient, {^} and exponent")
    +226            quotient = eval_value([tokens[0]])
    +227            exponent = eval_value([tokens[2]])
    +228            value = np.power(quotient, exponent)
    +229        else:
    +230            value = eval_value(tokens)
    +231
    +232    return np.nan_to_num(value)
    +233
    +234
    +235def eval_value(tokens):
    +236    numpattern = r"[0-9.]+"
    +237    regexnumber = re.compile(numpattern)
    +238
    +239    if type(tokens) is NDArray[np.float64]:
    +240        var = tokens[0]
    +241    elif len(tokens) < 1:
    +242        raise ValueError(f"expression_evaluator: I can not evaluate {tokens}")
    +243    elif len(tokens) > 2:
    +244        outtext = "Wrong format of variable "
    +245        for ind in range(len(tokens)):
    +246            outtext += " " + str(tokens[ind])
    +247        raise Exception(outtext)
    +248    elif len(tokens) == 2:
    +249        raise ValueError("Should not enter here - no time series in expression evaluator")
    +250    elif isinstance(tokens[0], (int, float)):
    +251        return float(tokens[0])
    +252    else:
    +253        pos = 0
    +254        match = regexnumber.match(str(tokens[0]), pos)
    +255        if match:  # This is a number
    +256            return float(match.group(0))
    +257        elif type(tokens[0]) is not np.ndarray:
    +258            tmp = tokens[0].split(";")
    +259            if len(tmp) != 2:
    +260                raise KeyError(
    +261                    'Not correct format of reservoir variable "'
    +262                    + tokens[0]
    +263                    + '", did you forget to specify reservoir case (e.g. "SIM1;'
    +264                    + tokens[0]
    +265                    + '")?'
    +266                )
    +267            raise ValueError("Should not enter here - no time series in expression evaluator")
    +268        else:
    +269            var = tokens[0]
    +270    var = np.nan_to_num(var)
    +271    return var
    +272
    +273
    +274def lex(expression: str, token_exprs: List[Tuple[str, Optional[TokenTag]]]) -> List[Token]:
    +275    pos = 0
    +276    tokens = []
    +277
    +278    while pos < len(expression):
    +279        match = None
    +280        for token_expr in token_exprs:
    +281            pattern, tag = token_expr
    +282            regex = re.compile(pattern)
    +283            match = regex.match(expression, pos)
    +284            if match:
    +285                text = match.group(0)
    +286                if tag:
    +287                    token = text  # (text, tag)
    +288                    tokens.append(
    +289                        Token(
    +290                            tag=tag,
    +291                            value=token,
    +292                        )
    +293                    )
    +294                break
    +295        if not match:
    +296            raise KeyError(
    +297                f'Illegal character: "{str(expression[pos])}" in "{expression}". '
    +298                f"Did you forget to put {{}} around operators?"
    +299            )
    +300        else:
    +301            pos = match.end(0)
    +302    return tokens
    +303
    +304
    +305def lexer(expression: Union[str, int, float]) -> List[Token]:
    +306    if isinstance(expression, (int, float)):
    +307        return [Token(tag=TokenTag.numeric, value=expression)]
    +308
    +309    number_of_left_parentheses = expression.count(Operators.left_parenthesis.value)
    +310    number_of_right_parentheses = expression.count(Operators.right_parenthesis.value)
    +311    if number_of_left_parentheses != number_of_right_parentheses:
    +312        raise ValueError(f"Number of left and right parentheses do not match for expression '{expression}'")
    +313
    +314    # Arithmetic operators redefined with {} to allow +-*/ et.c. in variable names
    +315    token_exprs = [
    +316        (r"[ \n\t]+", None),
    +317        (r"#[^\n]*", None),
    +318        (r"\:=", TokenTag.operator),
    +319        (r"\(", TokenTag.operator),
    +320        (r"\)", TokenTag.operator),
    +321        (r";", TokenTag.operator),
    +322        (r"\{\+\}", TokenTag.operator),
    +323        (
    +324            r"\{-\}",
    +325            TokenTag.operator,
    +326        ),  # Redef - to {-} to allow - in summary variable names
    +327        (r"\{\*\}", TokenTag.operator),
    +328        (r"\{/\}", TokenTag.operator),
    +329        (r"\{\^\}", TokenTag.operator),
    +330        (r"<=", TokenTag.operator),
    +331        (r"<", TokenTag.operator),
    +332        (r">=", TokenTag.operator),
    +333        (r">", TokenTag.operator),
    +334        (r"==", TokenTag.operator),
    +335        (r"!=", TokenTag.operator),
    +336        (r"and", TokenTag.operator),
    +337        (r"or", TokenTag.operator),
    +338        (r"not", TokenTag.operator),
    +339        (r"if", TokenTag.operator),
    +340        (r"then", TokenTag.operator),
    +341        (r"else", TokenTag.operator),
    +342        (r"while", TokenTag.operator),
    +343        (r"do", TokenTag.operator),
    +344        (r"end", TokenTag.operator),
    +345        (r"[0-9](\.[0-9]+)?e[-+]?[0-9]+", TokenTag.numeric),  # Scientific notation, e.g. 1.23e-05, 3.4e7, 1e+1
    +346        (r"[0-9.]+", TokenTag.numeric),
    +347        (r"[A-Za-z][A-Za-z0-9._;:+*/-]*", TokenTag.reference),
    +348        (r"\$var\.[A-Za-z][A-Za-z0-9_]*", TokenTag.reference),
    +349    ]
    +350
    +351    return lex(expression, token_exprs)
    +352
    +353
    +354OPERATORS = {
    +355    "{+}": op.add,
    +356    "{-}": op.sub,
    +357    "{/}": op.truediv,
    +358    "{*}": op.mul,
    +359    "{^}": op.pow,
    +360    ">": op.gt,
    +361    ">=": op.ge,
    +362    "<": op.lt,
    +363    "<=": op.le,
    +364    "==": op.eq,
    +365    "ne": op.ne,
    +366}
    +367
    +368
    +369# Check that two operators are not coming after each other, e.g. {+} {-} or {+} > et.c.
    +370def check_tokens(tokens):
    +371    tokens_dummy = ["ref" if isinstance(token, np.ndarray) else str(token) for token in tokens]
    +372    var = " ".join(tokens_dummy)
    +373    first_token, last_token = tokens[0], tokens[-1]
    +374    if str(first_token) in list(OPERATORS.keys()):
    +375        raise ValueError(f"Expression ({var}) can not start with an operator")
    +376    if str(last_token) in list(OPERATORS.keys()):
    +377        raise ValueError(f"Expression ({var}) can not end with an operator")
    +378    for idx, token in enumerate(tokens):
    +379        prev_token = tokens[idx - 1]
    +380        if str(prev_token) in list(OPERATORS.keys()) and str(token) in list(OPERATORS.keys()):
    +381            raise ValueError(f"Expression ({var}) can not have two operators after each other")
    +382
    +383
    +384class TokenTag(Enum):
    +385    reference = "ID"
    +386    operator = "RESERVED"
    +387    numeric = "NUMBER"
    +388
    +389
    +390class Operators(Enum):
    +391    add = "{+}"
    +392    subtract = "{-}"
    +393    divide = "{/}"
    +394    multiply = "{*}"
    +395    power = "{^}"
    +396    left_parenthesis = "("
    +397    right_parenthesis = ")"
    +398    larger_than = ">"
    +399    larger_than_or_equal = ">="
    +400    less_than = "<"
    +401    less_than_or_equal = "<="
    +402    equal = "=="
    +403    not_equal = "ne"
    +404
    +405
    +406class Token(BaseModel):
    +407    tag: TokenTag
    +408    value: Union[float, int, bool, NDArray[np.float64], str] = Field(union_mode="left_to_right")
    +409
    +410    def __str__(self):
    +411        return str(self.value)
    +412
    +413    model_config = ConfigDict(arbitrary_types_allowed=True)
    +
    + + +
    +
    + +
    + + def + eval_tokens( tokens: List[libecalc.expression.expression_evaluator.Token], array_length: int) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
    46def eval_tokens(tokens: List[Token], array_length: int) -> NDArray[np.float64]:
    +47    token_values = [token.value for token in tokens]
    +48    check_tokens(token_values)
    +49
    +50    evaluated_values = np.nan_to_num(
    +51        x=eval_parentheses(
    +52            tokens=token_values,
    +53        )  # type: ignore[arg-type]
    +54    )
    +55
    +56    if isinstance(evaluated_values, (Number, int, float)):
    +57        evaluated_values = np.full(fill_value=evaluated_values, shape=array_length)
    +58    return evaluated_values
    +
    + + + + +
    +
    + +
    + + def + eval_parentheses( tokens: List[Union[float, int, bool, numpy.ndarray[Any, numpy.dtype[numpy.float64]], str]], original_expression: Union[str, NoneType] = None) -> Union[numpy.ndarray[Any, numpy.dtype[numpy.float64]], numbers.Number]: + + + +
    + +
     61def eval_parentheses(
    + 62    tokens: List[Union[float, int, bool, NDArray[np.float64], str]],
    + 63    original_expression: Optional[str] = None,
    + 64) -> Union[NDArray[np.float64], Number]:
    + 65    """Evaluate expressions within parentheses"""
    + 66    with warnings.catch_warnings():
    + 67        warnings.simplefilter("ignore")
    + 68        number_of_left_parentheses, number_of_right_parentheses = count_parentheses(tokens=tokens)
    + 69        while number_of_left_parentheses or number_of_right_parentheses:
    + 70            if number_of_left_parentheses != number_of_right_parentheses:
    + 71                error_message = "Number of left and right parentheses do not match"
    + 72                if original_expression is not None:
    + 73                    error_message += f" for expression '{original_expression}'"
    + 74                raise ValueError(error_message)
    + 75
    + 76            ind = 0
    + 77            while ind < len(tokens) and str(tokens[ind]) != ")":
    + 78                ind += 1
    + 79            subend = ind
    + 80            while ind >= 0 and str(tokens[ind]) != "(":
    + 81                ind -= 1
    + 82            substart = ind
    + 83
    + 84            tokens_to_evaluate = tokens[substart + 1 : subend]
    + 85
    + 86            try:
    + 87                tokens_evaluated = eval_parentheses(
    + 88                    tokens_to_evaluate,
    + 89                    original_expression=original_expression,
    + 90                )
    + 91            except Exception as e:
    + 92                logger.exception(e)
    + 93                errorstr = ""
    + 94                if tokens_to_evaluate:
    + 95                    for token in tokens_to_evaluate:
    + 96                        if isinstance(token, np.ndarray):
    + 97                            errorstr += "array(len=" + str(len(token)) + ") "
    + 98                        else:
    + 99                            errorstr += str(token) + " "
    +100                raise ValueError(
    +101                    "expression evaluator" + ": I have trouble calculating the expression: " + errorstr
    +102                ) from e
    +103
    +104            tokens = tokens[:substart] + [tokens_evaluated] + tokens[subend + 1 :]
    +105            number_of_left_parentheses, number_of_right_parentheses = count_parentheses(tokens=tokens)
    +106
    +107    return eval_logicals(tokens)
    +
    + + +

    Evaluate expressions within parentheses

    +
    + + +
    +
    + +
    + + def + count_parentheses( tokens: List[Union[float, int, bool, numpy.ndarray[Any, numpy.dtype[numpy.float64]], str]]) -> Tuple[int, int]: + + + +
    + +
    110def count_parentheses(tokens: List[Union[float, int, bool, NDArray[np.float64], str]]) -> Tuple[int, int]:
    +111    """Count the number of left "(" and right ")" parentheses in a list of tokens"""
    +112    strings_in_tokens = [element for element in tokens if isinstance(element, str)]
    +113    return strings_in_tokens.count(Operators.left_parenthesis.value), strings_in_tokens.count(
    +114        Operators.right_parenthesis.value
    +115    )
    +
    + + +

    Count the number of left "(" and right ")" parentheses in a list of tokens

    +
    + + +
    +
    + +
    + + def + eval_logicals(tokens): + + + +
    + +
    118def eval_logicals(tokens):
    +119    """Evaluate logical operators in expression"""
    +120    logical_ops = [">", "<", ">=", "<=", "==", "!="]
    +121    ind = 0
    +122    while ind < len(tokens):
    +123        if str(tokens[ind]) in logical_ops:
    +124            divind = ind
    +125            left_tokens = tokens[0:divind]
    +126            right_tokens = tokens[divind + 1 :]
    +127            # Check that there are not more than one logical operator in tokens
    +128            for right_tok in right_tokens:
    +129                if str(right_tok)[0] in logical_ops or str(right_tok)[:2] in logical_ops:
    +130                    raise KeyError("Not more than one logical operator within each parenthesis set")
    +131            return np.array(
    +132                OPERATORS[tokens[divind]](
    +133                    eval_additions(left_tokens),
    +134                    eval_additions(right_tokens),
    +135                ),
    +136                dtype=float,
    +137            )
    +138        ind += 1
    +139    return eval_additions(tokens)
    +
    + + +

    Evaluate logical operators in expression

    +
    + + +
    +
    + +
    + + def + eval_additions(tokens): + + + +
    + +
    142def eval_additions(tokens):
    +143    """Evaluate additions and subtractions in expression"""
    +144    add_ops = ["{+}", "{-}"]
    +145    values = []
    +146    with warnings.catch_warnings():
    +147        warnings.simplefilter("ignore")
    +148        if tokens.count("{+}") or tokens.count(
    +149            "{-}"
    +150        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +151            ind = 0
    +152            seqstart = 0
    +153            signNext = 1.0
    +154            while ind < len(tokens):
    +155                if str(tokens[ind]) in add_ops:
    +156                    values.append(signNext * eval_mults(tokens[seqstart:ind]))
    +157                    signNext = 1.0 if tokens[ind] == "{+}" else -1.0
    +158                    seqstart = ind + 1
    +159                ind += 1
    +160            if tokens[seqstart - 1] == "{+}":
    +161                values.append(eval_mults(tokens[seqstart:ind]))
    +162            else:
    +163                values.append(-1.0 * eval_mults(tokens[seqstart:ind]))
    +164
    +165        else:
    +166            values.append(eval_mults(tokens))
    +167    return sum(values)
    +
    + + +

    Evaluate additions and subtractions in expression

    +
    + + +
    +
    + +
    + + def + eval_mults(tokens): + + + +
    + +
    170def eval_mults(tokens):
    +171    """Evaluate multiplications in expression"""
    +172    mult_ops = ["{*}", "{/}"]
    +173    values = []
    +174
    +175    # We may sometimes divide by zero in large vectors, but as these values might get removed
    +176    # by conditions later, we allow this and ignore related warnings
    +177    current_numpy_error = np.geterr()
    +178    np.seterr(divide="ignore", invalid="ignore")
    +179    with warnings.catch_warnings():
    +180        warnings.simplefilter("ignore")
    +181        if tokens.count("{*}") or tokens.count(
    +182            "{/}"
    +183        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +184            ind = 0
    +185            seqstart = 0
    +186            opnext = "mult"
    +187            while ind < len(tokens):
    +188                if str(tokens[ind]) in mult_ops:
    +189                    if opnext == "mult":
    +190                        values.append(eval_powers(tokens[seqstart:ind]))
    +191                    else:
    +192                        denominator = eval_powers(tokens[seqstart:ind])
    +193                        # By default, this throws a warning when denomonator contains 0
    +194                        # Want to allow division by 0 here, as these values may be ruled out later anyway
    +195                        # by conditions
    +196                        mult = np.divide(1.0, denominator)
    +197                        values.append(mult)
    +198                    opnext = "mult" if tokens[ind] == "{*}" else "div"
    +199                    seqstart = ind + 1
    +200                ind += 1
    +201            if tokens[seqstart - 1] == "{*}":
    +202                values.append(eval_powers(tokens[seqstart:ind]))
    +203            else:
    +204                denominator = eval_powers(tokens[seqstart:ind])
    +205                mult = np.divide(1.0, denominator)
    +206                values.append(mult)
    +207        else:
    +208            tmp = eval_powers(tokens)
    +209            if tmp is not None:
    +210                values.append(eval_powers(tokens))
    +211        value = 1.0
    +212        for factor in values:
    +213            value = value * factor
    +214        np.seterr(**current_numpy_error)
    +215    return np.nan_to_num(value)
    +
    + + +

    Evaluate multiplications in expression

    +
    + + +
    +
    + +
    + + def + eval_powers(tokens): + + + +
    + +
    218def eval_powers(tokens):
    +219    """Evaluate exponential calculations in expression"""
    +220    with warnings.catch_warnings():
    +221        warnings.simplefilter("ignore")
    +222        if tokens.count(
    +223            "{^}"
    +224        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +225            if len(tokens) != 3:
    +226                raise ValueError("Number of tokens needs to be 3 for evalPowers, quotient, {^} and exponent")
    +227            quotient = eval_value([tokens[0]])
    +228            exponent = eval_value([tokens[2]])
    +229            value = np.power(quotient, exponent)
    +230        else:
    +231            value = eval_value(tokens)
    +232
    +233    return np.nan_to_num(value)
    +
    + + +

    Evaluate exponential calculations in expression

    +
    + + +
    +
    + +
    + + def + eval_value(tokens): + + + +
    + +
    236def eval_value(tokens):
    +237    numpattern = r"[0-9.]+"
    +238    regexnumber = re.compile(numpattern)
    +239
    +240    if type(tokens) is NDArray[np.float64]:
    +241        var = tokens[0]
    +242    elif len(tokens) < 1:
    +243        raise ValueError(f"expression_evaluator: I can not evaluate {tokens}")
    +244    elif len(tokens) > 2:
    +245        outtext = "Wrong format of variable "
    +246        for ind in range(len(tokens)):
    +247            outtext += " " + str(tokens[ind])
    +248        raise Exception(outtext)
    +249    elif len(tokens) == 2:
    +250        raise ValueError("Should not enter here - no time series in expression evaluator")
    +251    elif isinstance(tokens[0], (int, float)):
    +252        return float(tokens[0])
    +253    else:
    +254        pos = 0
    +255        match = regexnumber.match(str(tokens[0]), pos)
    +256        if match:  # This is a number
    +257            return float(match.group(0))
    +258        elif type(tokens[0]) is not np.ndarray:
    +259            tmp = tokens[0].split(";")
    +260            if len(tmp) != 2:
    +261                raise KeyError(
    +262                    'Not correct format of reservoir variable "'
    +263                    + tokens[0]
    +264                    + '", did you forget to specify reservoir case (e.g. "SIM1;'
    +265                    + tokens[0]
    +266                    + '")?'
    +267                )
    +268            raise ValueError("Should not enter here - no time series in expression evaluator")
    +269        else:
    +270            var = tokens[0]
    +271    var = np.nan_to_num(var)
    +272    return var
    +
    + + + + +
    +
    + +
    + + def + lex( expression: str, token_exprs: List[Tuple[str, Union[libecalc.expression.expression_evaluator.TokenTag, NoneType]]]) -> List[libecalc.expression.expression_evaluator.Token]: + + + +
    + +
    275def lex(expression: str, token_exprs: List[Tuple[str, Optional[TokenTag]]]) -> List[Token]:
    +276    pos = 0
    +277    tokens = []
    +278
    +279    while pos < len(expression):
    +280        match = None
    +281        for token_expr in token_exprs:
    +282            pattern, tag = token_expr
    +283            regex = re.compile(pattern)
    +284            match = regex.match(expression, pos)
    +285            if match:
    +286                text = match.group(0)
    +287                if tag:
    +288                    token = text  # (text, tag)
    +289                    tokens.append(
    +290                        Token(
    +291                            tag=tag,
    +292                            value=token,
    +293                        )
    +294                    )
    +295                break
    +296        if not match:
    +297            raise KeyError(
    +298                f'Illegal character: "{str(expression[pos])}" in "{expression}". '
    +299                f"Did you forget to put {{}} around operators?"
    +300            )
    +301        else:
    +302            pos = match.end(0)
    +303    return tokens
    +
    + + + + +
    +
    + +
    + + def + lexer( expression: Union[str, int, float]) -> List[libecalc.expression.expression_evaluator.Token]: + + + +
    + +
    306def lexer(expression: Union[str, int, float]) -> List[Token]:
    +307    if isinstance(expression, (int, float)):
    +308        return [Token(tag=TokenTag.numeric, value=expression)]
    +309
    +310    number_of_left_parentheses = expression.count(Operators.left_parenthesis.value)
    +311    number_of_right_parentheses = expression.count(Operators.right_parenthesis.value)
    +312    if number_of_left_parentheses != number_of_right_parentheses:
    +313        raise ValueError(f"Number of left and right parentheses do not match for expression '{expression}'")
    +314
    +315    # Arithmetic operators redefined with {} to allow +-*/ et.c. in variable names
    +316    token_exprs = [
    +317        (r"[ \n\t]+", None),
    +318        (r"#[^\n]*", None),
    +319        (r"\:=", TokenTag.operator),
    +320        (r"\(", TokenTag.operator),
    +321        (r"\)", TokenTag.operator),
    +322        (r";", TokenTag.operator),
    +323        (r"\{\+\}", TokenTag.operator),
    +324        (
    +325            r"\{-\}",
    +326            TokenTag.operator,
    +327        ),  # Redef - to {-} to allow - in summary variable names
    +328        (r"\{\*\}", TokenTag.operator),
    +329        (r"\{/\}", TokenTag.operator),
    +330        (r"\{\^\}", TokenTag.operator),
    +331        (r"<=", TokenTag.operator),
    +332        (r"<", TokenTag.operator),
    +333        (r">=", TokenTag.operator),
    +334        (r">", TokenTag.operator),
    +335        (r"==", TokenTag.operator),
    +336        (r"!=", TokenTag.operator),
    +337        (r"and", TokenTag.operator),
    +338        (r"or", TokenTag.operator),
    +339        (r"not", TokenTag.operator),
    +340        (r"if", TokenTag.operator),
    +341        (r"then", TokenTag.operator),
    +342        (r"else", TokenTag.operator),
    +343        (r"while", TokenTag.operator),
    +344        (r"do", TokenTag.operator),
    +345        (r"end", TokenTag.operator),
    +346        (r"[0-9](\.[0-9]+)?e[-+]?[0-9]+", TokenTag.numeric),  # Scientific notation, e.g. 1.23e-05, 3.4e7, 1e+1
    +347        (r"[0-9.]+", TokenTag.numeric),
    +348        (r"[A-Za-z][A-Za-z0-9._;:+*/-]*", TokenTag.reference),
    +349        (r"\$var\.[A-Za-z][A-Za-z0-9_]*", TokenTag.reference),
    +350    ]
    +351
    +352    return lex(expression, token_exprs)
    +
    + + + + +
    +
    + +
    + + def + check_tokens(tokens): + + + +
    + +
    371def check_tokens(tokens):
    +372    tokens_dummy = ["ref" if isinstance(token, np.ndarray) else str(token) for token in tokens]
    +373    var = " ".join(tokens_dummy)
    +374    first_token, last_token = tokens[0], tokens[-1]
    +375    if str(first_token) in list(OPERATORS.keys()):
    +376        raise ValueError(f"Expression ({var}) can not start with an operator")
    +377    if str(last_token) in list(OPERATORS.keys()):
    +378        raise ValueError(f"Expression ({var}) can not end with an operator")
    +379    for idx, token in enumerate(tokens):
    +380        prev_token = tokens[idx - 1]
    +381        if str(prev_token) in list(OPERATORS.keys()) and str(token) in list(OPERATORS.keys()):
    +382            raise ValueError(f"Expression ({var}) can not have two operators after each other")
    +
    + + + + +
    +
    + +
    + + class + TokenTag(enum.Enum): + + + +
    + +
    385class TokenTag(Enum):
    +386    reference = "ID"
    +387    operator = "RESERVED"
    +388    numeric = "NUMBER"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + reference = +<TokenTag.reference: 'ID'> + + +
    + + + + +
    +
    +
    + operator = +<TokenTag.operator: 'RESERVED'> + + +
    + + + + +
    +
    +
    + numeric = +<TokenTag.numeric: 'NUMBER'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    +
    +
    +
    + +
    + + class + Operators(enum.Enum): + + + +
    + +
    391class Operators(Enum):
    +392    add = "{+}"
    +393    subtract = "{-}"
    +394    divide = "{/}"
    +395    multiply = "{*}"
    +396    power = "{^}"
    +397    left_parenthesis = "("
    +398    right_parenthesis = ")"
    +399    larger_than = ">"
    +400    larger_than_or_equal = ">="
    +401    less_than = "<"
    +402    less_than_or_equal = "<="
    +403    equal = "=="
    +404    not_equal = "ne"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + add = +<Operators.add: '{+}'> + + +
    + + + + +
    +
    +
    + subtract = +<Operators.subtract: '{-}'> + + +
    + + + + +
    +
    +
    + divide = +<Operators.divide: '{/}'> + + +
    + + + + +
    +
    +
    + multiply = +<Operators.multiply: '{*}'> + + +
    + + + + +
    +
    +
    + power = +<Operators.power: '{^}'> + + +
    + + + + +
    +
    +
    + left_parenthesis = +<Operators.left_parenthesis: '('> + + +
    + + + + +
    +
    +
    + right_parenthesis = +<Operators.right_parenthesis: ')'> + + +
    + + + + +
    +
    +
    + larger_than = +<Operators.larger_than: '>'> + + +
    + + + + +
    +
    +
    + larger_than_or_equal = +<Operators.larger_than_or_equal: '>='> + + +
    + + + + +
    +
    +
    + less_than = +<Operators.less_than: '<'> + + +
    + + + + +
    +
    +
    + less_than_or_equal = +<Operators.less_than_or_equal: '<='> + + +
    + + + + +
    +
    +
    + equal = +<Operators.equal: '=='> + + +
    + + + + +
    +
    +
    + not_equal = +<Operators.not_equal: 'ne'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    +
    +
    +
    + +
    + + class + Token(pydantic.main.BaseModel): + + + +
    + +
    407class Token(BaseModel):
    +408    tag: TokenTag
    +409    value: Union[float, int, bool, NDArray[np.float64], str] = Field(union_mode="left_to_right")
    +410
    +411    def __str__(self):
    +412        return str(self.value)
    +413
    +414    model_config = ConfigDict(arbitrary_types_allowed=True)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/infrastructure.html b/docs/about/references/api/libecalc/infrastructure.html new file mode 100644 index 0000000000..feb379a1dd --- /dev/null +++ b/docs/about/references/api/libecalc/infrastructure.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.infrastructure API documentation + + + + + + + + + +
    +
    +

    +libecalc.infrastructure

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/infrastructure/file_io.html b/docs/about/references/api/libecalc/infrastructure/file_io.html new file mode 100644 index 0000000000..d6c54dda37 --- /dev/null +++ b/docs/about/references/api/libecalc/infrastructure/file_io.html @@ -0,0 +1,2356 @@ + + + + + + + libecalc.infrastructure.file_io API documentation + + + + + + + + + +
    +
    +

    +libecalc.infrastructure.file_io

    + + + + + + +
      1import enum
    +  2import math
    +  3import re
    +  4import uuid
    +  5import zipfile
    +  6from abc import abstractmethod
    +  7from collections import Counter
    +  8from dataclasses import dataclass
    +  9from io import BytesIO, StringIO
    + 10from pathlib import Path
    + 11from tempfile import TemporaryFile
    + 12from typing import IO, Dict, List, Protocol, TextIO, Tuple, Union
    + 13
    + 14import numpy as np
    + 15import pandas
    + 16import pandas as pd
    + 17
    + 18from libecalc.common.errors.exceptions import EcalcError, EcalcErrorType
    + 19from libecalc.common.logger import logger
    + 20from libecalc.presentation.yaml.yaml_entities import Resource, YamlTimeseriesType
    + 21
    + 22YAML_EXTENSIONS = [".yml", ".yaml"]
    + 23CSV_EXTENSION = ".csv"
    + 24ZIP_EXTENSION = ".zip"
    + 25MAIN_PROVEN_FILE = ["INSTALLATION", "TIME_SERIES", "FACILITY_INPUTS", "FUEL_TYPES"]
    + 26
    + 27IGNORED_ZIP_CONTENTS_KEYWORDS = [".DS_Store", "__MACOSX"]
    + 28
    + 29
    + 30def is_main_yaml_file(file: IO) -> bool:
    + 31    """Deprecated. To be removed when zip is verified.
    + 32    :param file:
    + 33    :return:
    + 34    """
    + 35    bytes_str = file.read()
    + 36    file.seek(0)
    + 37    text_obj = bytes_str.decode("UTF-8")
    + 38    return any(x in text_obj for x in MAIN_PROVEN_FILE)
    + 39
    + 40
    + 41def is_ignored_zip_content(file: Path) -> bool:
    + 42    return bool(file.is_dir() or any(substring in str(file) for substring in IGNORED_ZIP_CONTENTS_KEYWORDS))
    + 43
    + 44
    + 45class FileWithName(Protocol):
    + 46    filename: str
    + 47    file: IO
    + 48
    + 49
    + 50@dataclass
    + 51class UnzippedFile:
    + 52    """Class for mimicking FileWithName."""
    + 53
    + 54    filename: str  # including path
    + 55    file: IO
    + 56
    + 57
    + 58class EcalcFileType(str, enum.Enum):
    + 59    YAML = "yaml"
    + 60    CSV = "csv"
    + 61    ZIP = "zip"
    + 62
    + 63
    + 64@dataclass
    + 65class EcalcFile:
    + 66    @abstractmethod
    + 67    def is_valid(self) -> bool:
    + 68        pass
    + 69
    + 70    @staticmethod
    + 71    def is_csv(filename: Path) -> bool:
    + 72        return filename.suffix.lower() == CSV_EXTENSION
    + 73
    + 74    @staticmethod
    + 75    def is_yaml(filename: Path) -> bool:
    + 76        try:
    + 77            file_extension = filename.suffix
    + 78            return file_extension.lower() in YAML_EXTENSIONS
    + 79        except AttributeError as e:
    + 80            logger.exception(e)
    + 81            return False
    + 82
    + 83    @staticmethod
    + 84    def is_zip(filename: Path) -> bool:
    + 85        try:
    + 86            file_extension = filename.suffix
    + 87            return file_extension.lower() in ZIP_EXTENSION
    + 88        except AttributeError as e:
    + 89            logger.exception(e)
    + 90            return False
    + 91
    + 92    @staticmethod
    + 93    def get_type(filename: Path) -> EcalcFileType:
    + 94        if EcalcFile.is_csv(filename):
    + 95            return EcalcFileType.CSV
    + 96        elif EcalcFile.is_yaml(filename):
    + 97            return EcalcFileType.YAML
    + 98        elif EcalcFile.is_zip(filename):
    + 99            return EcalcFileType.ZIP
    +100
    +101        message = f"Cannot get (valid) file type of {filename}"
    +102        logger.warning(message)
    +103        raise EcalcError(
    +104            message=message,
    +105            title="Invalid file type",
    +106            error_type=EcalcErrorType.CLIENT_ERROR,
    +107        )
    +108
    +109
    +110@dataclass
    +111class ValidEcalcFile(EcalcFile):
    +112    """Class for mimicking FileWithName."""
    +113
    +114    original_filename: Path  # full path, e.g. in archive
    +115    filename: str  # just the (file)name
    +116    file: IO
    +117    file_type: EcalcFileType
    +118
    +119    def is_valid(self) -> bool:
    +120        return True
    +121
    +122    def is_main_yaml_file(self) -> bool:
    +123        bytes_str = self.file.read()
    +124        self.file.seek(0)
    +125        text_obj = bytes_str.decode("UTF-8")
    +126        return any(x in text_obj for x in MAIN_PROVEN_FILE)
    +127
    +128
    +129@dataclass
    +130class InvalidEcalcFile(EcalcFile):
    +131    """Class for mimicking FileWithName."""
    +132
    +133    original_filename: Path  # full path in archive
    +134    filename: str  # just the filename
    +135    error: str
    +136
    +137    def is_valid(self) -> bool:
    +138        return False
    +139
    +140
    +141@dataclass
    +142class EcalcFiles:
    +143    ALLOWED_EXTENSIONS = {"yaml", "csv", "yml", "zip"}
    +144
    +145    @staticmethod
    +146    def allowed_file(filename: str) -> bool:
    +147        return "." in filename and Path(filename).suffix.split(".")[1] in EcalcFiles.ALLOWED_EXTENSIONS
    +148
    +149    @staticmethod
    +150    def get_main_file(files: List[ValidEcalcFile]) -> ValidEcalcFile:
    +151        """Get the main yaml file. Detected by checking for a specific format. Only the main
    +152        yaml file can have !include and a certain set of sections.
    +153
    +154        * Only one main file is allowed
    +155
    +156        if none or more than one main file is detected an exception is raised
    +157        :param files:
    +158        :return:
    +159        """
    +160        main_files = [file for file in files if file.is_yaml(file.original_filename) and file.is_main_yaml_file()]
    +161        if len(main_files) > 1:
    +162            raise EcalcError(
    +163                "Bad Request",
    +164                f"Only one main file is supported, the following files were detected as main files: {', '.join([main_file.filename for main_file in main_files])}",
    +165                error_type=EcalcErrorType.CLIENT_ERROR,
    +166            )
    +167
    +168        if len(main_files) == 0:
    +169            raise EcalcError(
    +170                "Bad Request",
    +171                "No main files found. There must be one main file",
    +172                error_type=EcalcErrorType.CLIENT_ERROR,
    +173            )
    +174
    +175        return main_files[0]
    +176
    +177    @staticmethod
    +178    def validate_filetypes(files: List[FileWithName]) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +179        """Given a list of files (e.g uploaded by a user), given a name, do an initial attempt to
    +180        filter out bad files for further processing of good files only.
    +181
    +182        The current validation implementation is very naĩve, by only checking file extension.
    +183
    +184        :param files:
    +185        :return:
    +186        """
    +187        valid_files: List[ValidEcalcFile] = []
    +188        invalid_files: List[InvalidEcalcFile] = []
    +189        for file in files:
    +190            if EcalcFiles.allowed_file(file.filename):
    +191                if EcalcFile.is_zip(Path(file.filename)):
    +192                    if len(files) > 1:
    +193                        raise EcalcError(
    +194                            title="Invalid file combination",
    +195                            message="A zip file cannot be combined with other file types. Please provide a zip file alone.",
    +196                        )
    +197
    +198                    valid_files, invalid_files = unpack_zip(file.file)
    +199                elif EcalcFile.is_csv(Path(file.filename)) or EcalcFile.is_yaml(Path(file.filename)):
    +200                    valid_files.append(
    +201                        ValidEcalcFile(
    +202                            original_filename=Path(file.filename),
    +203                            filename=file.filename,
    +204                            file=file.file,
    +205                            file_type=EcalcFile.get_type(filename=Path(file.filename)),
    +206                        )
    +207                    )
    +208                else:
    +209                    invalid_files.append(
    +210                        InvalidEcalcFile(
    +211                            original_filename=Path(file.filename),
    +212                            filename=file.filename,
    +213                            error="Invalid File Extension",
    +214                        )
    +215                    )
    +216            else:
    +217                invalid_files.append(
    +218                    InvalidEcalcFile(
    +219                        original_filename=Path(file.filename),
    +220                        filename=file.filename,
    +221                        error="Invalid File Extension",
    +222                    )
    +223                )
    +224
    +225        return valid_files, invalid_files
    +226
    +227
    +228def find_longest_common_path(file_path_1: Path, file_path_2: Path) -> str:
    +229    """Given 2 paths, find the longest common path, part by part that the 2 paths share; ie
    +230    until which position in the file hierarchy do they diverge?
    +231
    +232    :param file_path_1:
    +233    :param file_path_2:
    +234    :return:
    +235    """
    +236    common_path = ""
    +237    for path_1, path_2 in zip(file_path_1.parts, file_path_2.parts):
    +238        if path_1 == path_2:
    +239            common_path += path_1 + "/"
    +240        else:
    +241            break
    +242
    +243    return common_path
    +244
    +245
    +246def strip_common_path(common_path: str, path: str) -> str:
    +247    """Remove/strip the given subpath from path
    +248    :param common_path:
    +249    :param path:
    +250    :return:
    +251    """
    +252    return path.replace(common_path, "")
    +253
    +254
    +255def make_relative_path(linked_file: str, main_file: str) -> str:
    +256    """Given a main file and a file to be linked to from that file, only
    +257    include the parts of the path of both files that _differ_.
    +258
    +259    The parts that is different in main_file, will be replaced with "../",
    +260
    +261    :param linked_file:
    +262    :param main_file:
    +263    :return:
    +264    """
    +265    main_file_path = Path(main_file)
    +266    for part in main_file_path.parts[:-1]:
    +267        if part != "" and part != "/":
    +268            linked_file = "../" + linked_file
    +269
    +270    return linked_file
    +271
    +272
    +273def find_duplicates(files: List[ValidEcalcFile]) -> List[str]:
    +274    """Find files with duplicate names (names = without path).
    +275
    +276    :param files:
    +277    :return:
    +278    """
    +279    count_filenames = Counter([file.filename for file in files])
    +280    duplicates = [filename for filename, count in count_filenames.items() if count > 1]
    +281
    +282    return duplicates
    +283
    +284
    +285def rename_duplicates(valid_files: List[ValidEcalcFile], duplicates: List[str]) -> Dict[Path, str]:
    +286    """Rename duplicate files. All with same name will be renamed. Those that are not duplicates,
    +287    will also be returned, with the original filename in the mapping.
    +288
    +289    Only resource files (csv) needs to be renamed, because they are flattened out and will then exist
    +290    at the same level.
    +291
    +292    :param valid_files:
    +293    :param duplicates:
    +294    :return:
    +295    """
    +296    renamed_files: Dict[Path, str] = {}
    +297    for file in valid_files:
    +298        if file.filename in duplicates:
    +299            renamed_filename = str(file.original_filename).replace("/", "_")
    +300            if len(renamed_filename) > 100:
    +301                renamed_filename = renamed_filename[-94:] + str(uuid.uuid4().hex.upper()[0:6])
    +302            renamed_files[file.original_filename] = renamed_filename
    +303        else:
    +304            renamed_files[file.original_filename] = file.filename
    +305
    +306    return renamed_files
    +307
    +308
    +309def make_relative_paths(files: List[ValidEcalcFile], main_yaml: ValidEcalcFile) -> Dict[Path, str]:
    +310    """For all files in the list, generate the relative paths for all files, relative
    +311    to the provided main file. All files provided, must have the original_filename set, which must
    +312    be the relative path to the root of the model; e.g. the (zip) archive path, or
    +313    if only one level, the filename itself.
    +314
    +315    :param files:
    +316    :param main_yaml:
    +317    :return:
    +318    """
    +319    relative_paths: Dict[Path, str] = {}
    +320    for file in files:
    +321        if file == main_yaml:
    +322            # since all files are relative to this given file, this must be the filename itself, only
    +323            relative_paths[main_yaml.original_filename] = main_yaml.filename
    +324        else:
    +325            common_path = find_longest_common_path(Path(file.original_filename), Path(main_yaml.original_filename))
    +326            stripped_file = strip_common_path(common_path, str(file.original_filename))
    +327            stripped_main = strip_common_path(common_path, str(main_yaml.original_filename))
    +328            relative_path = make_relative_path(stripped_file, stripped_main)
    +329
    +330            relative_paths[file.original_filename] = relative_path
    +331
    +332    return relative_paths
    +333
    +334
    +335def unpack_zip(file: IO) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +336    """Unpack the zip similarility to how single files are handled, by returning a tuple
    +337    of valid and invalid files.
    +338
    +339    :param file:
    +340    :return:
    +341    """
    +342    valid_files: List[ValidEcalcFile] = []
    +343    invalid_files: List[InvalidEcalcFile] = []
    +344    try:
    +345        with zipfile.ZipFile(BytesIO(file.read())) as archive:
    +346            for zip_info in archive.infolist():
    +347                try:
    +348                    file_path = Path(zip_info.filename)
    +349
    +350                    if is_ignored_zip_content(file_path) or zip_info.is_dir():
    +351                        # Just ignore, dont event mention it. Will just confuse users (because those files are normally hidden)
    +352                        continue
    +353                    elif EcalcFile.is_csv(file_path) or EcalcFile.is_yaml(file_path):
    +354                        with archive.open(zip_info) as file:
    +355                            file_like = TemporaryFile()
    +356                            file_like.write(file.read())
    +357                            file_like.seek(0)
    +358                            valid_files.append(
    +359                                ValidEcalcFile(
    +360                                    original_filename=file_path,
    +361                                    filename=file_path.name,
    +362                                    file=file_like,
    +363                                    file_type=EcalcFile.get_type(filename=file_path),
    +364                                )
    +365                            )
    +366                    else:
    +367                        invalid_files.append(
    +368                            InvalidEcalcFile(
    +369                                original_filename=file_path, filename=file_path.name, error="Invalid file extension"
    +370                            )
    +371                        )
    +372                        continue
    +373
    +374                except EcalcError as ee:
    +375                    logger.warning(f"An error occurred while reading file({file_path}) in zip archive")
    +376                    invalid_files.append(
    +377                        InvalidEcalcFile(original_filename=file_path, filename=file_path.name, error=ee.message)
    +378                    )
    +379
    +380        valid_file_paths = [valid_file.original_filename for valid_file in valid_files]
    +381        if len(valid_file_paths) != len(set(valid_file_paths)):
    +382            raise EcalcError(title="Bad zip file", message="Duplicated filepaths in zip archive detected. Please fix.")
    +383
    +384        return valid_files, invalid_files
    +385
    +386    except zipfile.BadZipFile as e:
    +387        raise EcalcError(title="Bad zip file", message="An error occurred while unpacking the zip file") from e
    +388
    +389
    +390def _validate_headers(headers: List[str]):
    +391    for header in headers:
    +392        if not re.match(r"^[A-Za-z][A-Za-z0-9_.,\-\s#+:\/]*$", header):
    +393            raise ValueError(
    +394                "Each header value must start with a letter in the english "
    +395                "alphabet (a-zA-Z). And may only contain letters, spaces, numbers or any of the following characters "
    +396                "[ _ - # + : . , /] "
    +397            )
    +398        elif re.match(r"^Unnamed: \d+$", header):
    +399            raise ValueError("CSV input file must include header")
    +400
    +401
    +402def _validate_not_nan(columns: List[List]):
    +403    for column in columns:
    +404        for index, item in enumerate(column):
    +405            if isinstance(item, float) and math.isnan(item):
    +406                raise ValueError(
    +407                    f"csv file contains invalid data at row {index + 1}, "
    +408                    f"all headers must be associated with a valid column value"
    +409                )
    +410
    +411
    +412def _dataframe_to_resource(df: pd.DataFrame, validate_headers: bool = True) -> Resource:
    +413    headers = df.columns.tolist()
    +414    headers = [header.strip() for header in headers]
    +415    if validate_headers:
    +416        _validate_headers(headers)
    +417    df.columns = df.columns.str.strip()
    +418    columns = [df[header].tolist() for header in headers]
    +419    return Resource(
    +420        headers=headers,
    +421        data=columns,
    +422    )
    +423
    +424
    +425def read_csv(csv_data: Union[str, TextIO, BytesIO]) -> pandas.DataFrame:
    +426    """Wrapper of pandas read csv function
    +427
    +428    Settings used:
    +429        float_precision="round_trip" to avoid reading inaccurate floats, i.e. 0.724 becomes 0.7240000000000001
    +430        skipinitialspace=True converts "  10" to 10,
    +431        thousands=" " removes spaces used as thousand separators (normal in excel)
    +432
    +433    Args:
    +434        csv_data:
    +435
    +436    Returns:
    +437
    +438    """
    +439    stream = StringIO(csv_data) if isinstance(csv_data, str) else csv_data
    +440
    +441    return pd.read_csv(stream, comment="#", float_precision="round_trip", skipinitialspace=True, thousands=" ")
    +442
    +443
    +444def read_resource_from_string(resource_string: str, validate_headers: bool = True) -> Resource:
    +445    """Read resource from stream without validation."""
    +446    resource_df = read_csv(resource_string)
    +447
    +448    resource = _dataframe_to_resource(resource_df.replace(np.nan, ""), validate_headers=validate_headers)
    +449    return resource
    +450
    +451
    +452def convert_dataframe_to_timeseries_resource(resource_df: pd.DataFrame) -> Resource:
    +453    # TODO: This might give a different result than calculator-cli since we are not yet
    +454    #  filtering on columns that are actually used. I.e. an unused column might have a number where all used columns
    +455    #  have nan. This method would include that row. Although it is unlikely.
    +456    # Drop rows if all values are na (sometimes lines with ,,, are exported from Excel).
    +457
    +458    resource_df = resource_df.dropna(axis=0, how="all")
    +459    # Drop columns if all values are na
    +460    resource_df = resource_df.dropna(axis=1, how="all")
    +461
    +462    return _dataframe_to_resource(resource_df)
    +463
    +464
    +465def read_timeseries_resource(
    +466    resource_input: Union[Path, BytesIO, str], timeseries_type: YamlTimeseriesType
    +467) -> Resource:
    +468    """Read timeseries resource from filepath with timeseries specific manipulation/validation.
    +469
    +470    - Timeseries is allowed to have nans
    +471    """
    +472    if not isinstance(resource_input, (BytesIO, str, Path)):
    +473        raise ValueError(f"Invalid resource_input type '{type(resource_input)}'")
    +474
    +475    if timeseries_type in (YamlTimeseriesType.DEFAULT, YamlTimeseriesType.MISCELLANEOUS):
    +476        if isinstance(resource_input, Path):
    +477            with open(resource_input) as resource_file:
    +478                resource_df = read_csv(resource_file)
    +479        else:
    +480            resource_df = read_csv(resource_input)
    +481    else:
    +482        raise ValueError(f"Invalid timeseries type '{timeseries_type}' for resource '{resource_input}'")
    +483
    +484    return convert_dataframe_to_timeseries_resource(resource_df=resource_df)
    +485
    +486
    +487def read_facility_resource(resource_input: Union[Path, BytesIO, str]) -> Resource:
    +488    """Read facility file from filepath with facility file specific validation.
    +489
    +490    - Facility files are not allowed to have nans
    +491    """
    +492    if isinstance(resource_input, Path):
    +493        with open(resource_input) as resource_file:
    +494            resource_df = read_csv(resource_file)
    +495    elif isinstance(resource_input, (BytesIO, str)):
    +496        resource_df = read_csv(resource_input)
    +497    else:
    +498        raise ValueError("")
    +499    resource = _dataframe_to_resource(resource_df)
    +500    _validate_not_nan(resource.data)
    +501    return resource
    +502
    +503
    +504def read_resource_from_filepath(resource_path: Path) -> Resource:
    +505    """Read resource from filepath without validation, should only be used as a util for tests/fixtures."""
    +506    if EcalcFile.is_csv(resource_path):
    +507        with open(resource_path) as resource_file:
    +508            resource_df = read_csv(resource_file)
    +509            return _dataframe_to_resource(resource_df)
    +510    else:
    +511        raise ValueError(f"Invalid file extension: {resource_path}")
    +
    + + +
    +
    + +
    + + def + is_main_yaml_file(file: <class 'IO'>) -> bool: + + + +
    + +
    31def is_main_yaml_file(file: IO) -> bool:
    +32    """Deprecated. To be removed when zip is verified.
    +33    :param file:
    +34    :return:
    +35    """
    +36    bytes_str = file.read()
    +37    file.seek(0)
    +38    text_obj = bytes_str.decode("UTF-8")
    +39    return any(x in text_obj for x in MAIN_PROVEN_FILE)
    +
    + + +

    Deprecated. To be removed when zip is verified.

    + +
    Parameters
    + +
      +
    • file:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + is_ignored_zip_content(file: pathlib.Path) -> bool: + + + +
    + +
    42def is_ignored_zip_content(file: Path) -> bool:
    +43    return bool(file.is_dir() or any(substring in str(file) for substring in IGNORED_ZIP_CONTENTS_KEYWORDS))
    +
    + + + + +
    +
    + +
    + + class + FileWithName(typing.Protocol): + + + +
    + +
    46class FileWithName(Protocol):
    +47    filename: str
    +48    file: IO
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + FileWithName(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    +
    + +
    + + class + UnzippedFile: + + + +
    + +
    52class UnzippedFile:
    +53    """Class for mimicking FileWithName."""
    +54
    +55    filename: str  # including path
    +56    file: IO
    +
    + + +

    Class for mimicking FileWithName.

    +
    + + +
    +
    + + UnzippedFile(filename: str, file: <class 'IO'>) + + +
    + + + + +
    +
    +
    + +
    + + class + EcalcFileType(builtins.str, enum.Enum): + + + +
    + +
    59class EcalcFileType(str, enum.Enum):
    +60    YAML = "yaml"
    +61    CSV = "csv"
    +62    ZIP = "zip"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + YAML = +<EcalcFileType.YAML: 'yaml'> + + +
    + + + + +
    +
    +
    + CSV = +<EcalcFileType.CSV: 'csv'> + + +
    + + + + +
    +
    +
    + ZIP = +<EcalcFileType.ZIP: 'zip'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EcalcFile: + + + +
    + +
     66class EcalcFile:
    + 67    @abstractmethod
    + 68    def is_valid(self) -> bool:
    + 69        pass
    + 70
    + 71    @staticmethod
    + 72    def is_csv(filename: Path) -> bool:
    + 73        return filename.suffix.lower() == CSV_EXTENSION
    + 74
    + 75    @staticmethod
    + 76    def is_yaml(filename: Path) -> bool:
    + 77        try:
    + 78            file_extension = filename.suffix
    + 79            return file_extension.lower() in YAML_EXTENSIONS
    + 80        except AttributeError as e:
    + 81            logger.exception(e)
    + 82            return False
    + 83
    + 84    @staticmethod
    + 85    def is_zip(filename: Path) -> bool:
    + 86        try:
    + 87            file_extension = filename.suffix
    + 88            return file_extension.lower() in ZIP_EXTENSION
    + 89        except AttributeError as e:
    + 90            logger.exception(e)
    + 91            return False
    + 92
    + 93    @staticmethod
    + 94    def get_type(filename: Path) -> EcalcFileType:
    + 95        if EcalcFile.is_csv(filename):
    + 96            return EcalcFileType.CSV
    + 97        elif EcalcFile.is_yaml(filename):
    + 98            return EcalcFileType.YAML
    + 99        elif EcalcFile.is_zip(filename):
    +100            return EcalcFileType.ZIP
    +101
    +102        message = f"Cannot get (valid) file type of {filename}"
    +103        logger.warning(message)
    +104        raise EcalcError(
    +105            message=message,
    +106            title="Invalid file type",
    +107            error_type=EcalcErrorType.CLIENT_ERROR,
    +108        )
    +
    + + + + +
    + +
    +
    @abstractmethod
    + + def + is_valid(self) -> bool: + + + +
    + +
    67    @abstractmethod
    +68    def is_valid(self) -> bool:
    +69        pass
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + is_csv(filename: pathlib.Path) -> bool: + + + +
    + +
    71    @staticmethod
    +72    def is_csv(filename: Path) -> bool:
    +73        return filename.suffix.lower() == CSV_EXTENSION
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + is_yaml(filename: pathlib.Path) -> bool: + + + +
    + +
    75    @staticmethod
    +76    def is_yaml(filename: Path) -> bool:
    +77        try:
    +78            file_extension = filename.suffix
    +79            return file_extension.lower() in YAML_EXTENSIONS
    +80        except AttributeError as e:
    +81            logger.exception(e)
    +82            return False
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + is_zip(filename: pathlib.Path) -> bool: + + + +
    + +
    84    @staticmethod
    +85    def is_zip(filename: Path) -> bool:
    +86        try:
    +87            file_extension = filename.suffix
    +88            return file_extension.lower() in ZIP_EXTENSION
    +89        except AttributeError as e:
    +90            logger.exception(e)
    +91            return False
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + get_type(filename: pathlib.Path) -> libecalc.infrastructure.file_io.EcalcFileType: + + + +
    + +
     93    @staticmethod
    + 94    def get_type(filename: Path) -> EcalcFileType:
    + 95        if EcalcFile.is_csv(filename):
    + 96            return EcalcFileType.CSV
    + 97        elif EcalcFile.is_yaml(filename):
    + 98            return EcalcFileType.YAML
    + 99        elif EcalcFile.is_zip(filename):
    +100            return EcalcFileType.ZIP
    +101
    +102        message = f"Cannot get (valid) file type of {filename}"
    +103        logger.warning(message)
    +104        raise EcalcError(
    +105            message=message,
    +106            title="Invalid file type",
    +107            error_type=EcalcErrorType.CLIENT_ERROR,
    +108        )
    +
    + + + + +
    +
    +
    + +
    + + class + ValidEcalcFile(EcalcFile): + + + +
    + +
    112class ValidEcalcFile(EcalcFile):
    +113    """Class for mimicking FileWithName."""
    +114
    +115    original_filename: Path  # full path, e.g. in archive
    +116    filename: str  # just the (file)name
    +117    file: IO
    +118    file_type: EcalcFileType
    +119
    +120    def is_valid(self) -> bool:
    +121        return True
    +122
    +123    def is_main_yaml_file(self) -> bool:
    +124        bytes_str = self.file.read()
    +125        self.file.seek(0)
    +126        text_obj = bytes_str.decode("UTF-8")
    +127        return any(x in text_obj for x in MAIN_PROVEN_FILE)
    +
    + + +

    Class for mimicking FileWithName.

    +
    + + +
    +
    + + ValidEcalcFile( original_filename: pathlib.Path, filename: str, file: <class 'IO'>, file_type: libecalc.infrastructure.file_io.EcalcFileType) + + +
    + + + + +
    +
    + +
    + + def + is_valid(self) -> bool: + + + +
    + +
    120    def is_valid(self) -> bool:
    +121        return True
    +
    + + + + +
    +
    + +
    + + def + is_main_yaml_file(self) -> bool: + + + +
    + +
    123    def is_main_yaml_file(self) -> bool:
    +124        bytes_str = self.file.read()
    +125        self.file.seek(0)
    +126        text_obj = bytes_str.decode("UTF-8")
    +127        return any(x in text_obj for x in MAIN_PROVEN_FILE)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    + +
    +
    +
    +
    + +
    + + class + InvalidEcalcFile(EcalcFile): + + + +
    + +
    131class InvalidEcalcFile(EcalcFile):
    +132    """Class for mimicking FileWithName."""
    +133
    +134    original_filename: Path  # full path in archive
    +135    filename: str  # just the filename
    +136    error: str
    +137
    +138    def is_valid(self) -> bool:
    +139        return False
    +
    + + +

    Class for mimicking FileWithName.

    +
    + + +
    +
    + + InvalidEcalcFile(original_filename: pathlib.Path, filename: str, error: str) + + +
    + + + + +
    +
    + +
    + + def + is_valid(self) -> bool: + + + +
    + +
    138    def is_valid(self) -> bool:
    +139        return False
    +
    + + + + +
    +
    +
    Inherited Members
    +
    + +
    +
    +
    +
    + +
    + + class + EcalcFiles: + + + +
    + +
    143class EcalcFiles:
    +144    ALLOWED_EXTENSIONS = {"yaml", "csv", "yml", "zip"}
    +145
    +146    @staticmethod
    +147    def allowed_file(filename: str) -> bool:
    +148        return "." in filename and Path(filename).suffix.split(".")[1] in EcalcFiles.ALLOWED_EXTENSIONS
    +149
    +150    @staticmethod
    +151    def get_main_file(files: List[ValidEcalcFile]) -> ValidEcalcFile:
    +152        """Get the main yaml file. Detected by checking for a specific format. Only the main
    +153        yaml file can have !include and a certain set of sections.
    +154
    +155        * Only one main file is allowed
    +156
    +157        if none or more than one main file is detected an exception is raised
    +158        :param files:
    +159        :return:
    +160        """
    +161        main_files = [file for file in files if file.is_yaml(file.original_filename) and file.is_main_yaml_file()]
    +162        if len(main_files) > 1:
    +163            raise EcalcError(
    +164                "Bad Request",
    +165                f"Only one main file is supported, the following files were detected as main files: {', '.join([main_file.filename for main_file in main_files])}",
    +166                error_type=EcalcErrorType.CLIENT_ERROR,
    +167            )
    +168
    +169        if len(main_files) == 0:
    +170            raise EcalcError(
    +171                "Bad Request",
    +172                "No main files found. There must be one main file",
    +173                error_type=EcalcErrorType.CLIENT_ERROR,
    +174            )
    +175
    +176        return main_files[0]
    +177
    +178    @staticmethod
    +179    def validate_filetypes(files: List[FileWithName]) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +180        """Given a list of files (e.g uploaded by a user), given a name, do an initial attempt to
    +181        filter out bad files for further processing of good files only.
    +182
    +183        The current validation implementation is very naĩve, by only checking file extension.
    +184
    +185        :param files:
    +186        :return:
    +187        """
    +188        valid_files: List[ValidEcalcFile] = []
    +189        invalid_files: List[InvalidEcalcFile] = []
    +190        for file in files:
    +191            if EcalcFiles.allowed_file(file.filename):
    +192                if EcalcFile.is_zip(Path(file.filename)):
    +193                    if len(files) > 1:
    +194                        raise EcalcError(
    +195                            title="Invalid file combination",
    +196                            message="A zip file cannot be combined with other file types. Please provide a zip file alone.",
    +197                        )
    +198
    +199                    valid_files, invalid_files = unpack_zip(file.file)
    +200                elif EcalcFile.is_csv(Path(file.filename)) or EcalcFile.is_yaml(Path(file.filename)):
    +201                    valid_files.append(
    +202                        ValidEcalcFile(
    +203                            original_filename=Path(file.filename),
    +204                            filename=file.filename,
    +205                            file=file.file,
    +206                            file_type=EcalcFile.get_type(filename=Path(file.filename)),
    +207                        )
    +208                    )
    +209                else:
    +210                    invalid_files.append(
    +211                        InvalidEcalcFile(
    +212                            original_filename=Path(file.filename),
    +213                            filename=file.filename,
    +214                            error="Invalid File Extension",
    +215                        )
    +216                    )
    +217            else:
    +218                invalid_files.append(
    +219                    InvalidEcalcFile(
    +220                        original_filename=Path(file.filename),
    +221                        filename=file.filename,
    +222                        error="Invalid File Extension",
    +223                    )
    +224                )
    +225
    +226        return valid_files, invalid_files
    +
    + + + + +
    + +
    +
    @staticmethod
    + + def + allowed_file(filename: str) -> bool: + + + +
    + +
    146    @staticmethod
    +147    def allowed_file(filename: str) -> bool:
    +148        return "." in filename and Path(filename).suffix.split(".")[1] in EcalcFiles.ALLOWED_EXTENSIONS
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + get_main_file( files: List[libecalc.infrastructure.file_io.ValidEcalcFile]) -> libecalc.infrastructure.file_io.ValidEcalcFile: + + + +
    + +
    150    @staticmethod
    +151    def get_main_file(files: List[ValidEcalcFile]) -> ValidEcalcFile:
    +152        """Get the main yaml file. Detected by checking for a specific format. Only the main
    +153        yaml file can have !include and a certain set of sections.
    +154
    +155        * Only one main file is allowed
    +156
    +157        if none or more than one main file is detected an exception is raised
    +158        :param files:
    +159        :return:
    +160        """
    +161        main_files = [file for file in files if file.is_yaml(file.original_filename) and file.is_main_yaml_file()]
    +162        if len(main_files) > 1:
    +163            raise EcalcError(
    +164                "Bad Request",
    +165                f"Only one main file is supported, the following files were detected as main files: {', '.join([main_file.filename for main_file in main_files])}",
    +166                error_type=EcalcErrorType.CLIENT_ERROR,
    +167            )
    +168
    +169        if len(main_files) == 0:
    +170            raise EcalcError(
    +171                "Bad Request",
    +172                "No main files found. There must be one main file",
    +173                error_type=EcalcErrorType.CLIENT_ERROR,
    +174            )
    +175
    +176        return main_files[0]
    +
    + + +

    Get the main yaml file. Detected by checking for a specific format. Only the main +yaml file can have !include and a certain set of sections.

    + +
      +
    • Only one main file is allowed
    • +
    + +

    if none or more than one main file is detected an exception is raised

    + +
    Parameters
    + +
      +
    • files:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    +
    @staticmethod
    + + def + validate_filetypes( files: List[libecalc.infrastructure.file_io.FileWithName]) -> Tuple[List[libecalc.infrastructure.file_io.ValidEcalcFile], List[libecalc.infrastructure.file_io.InvalidEcalcFile]]: + + + +
    + +
    178    @staticmethod
    +179    def validate_filetypes(files: List[FileWithName]) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +180        """Given a list of files (e.g uploaded by a user), given a name, do an initial attempt to
    +181        filter out bad files for further processing of good files only.
    +182
    +183        The current validation implementation is very naĩve, by only checking file extension.
    +184
    +185        :param files:
    +186        :return:
    +187        """
    +188        valid_files: List[ValidEcalcFile] = []
    +189        invalid_files: List[InvalidEcalcFile] = []
    +190        for file in files:
    +191            if EcalcFiles.allowed_file(file.filename):
    +192                if EcalcFile.is_zip(Path(file.filename)):
    +193                    if len(files) > 1:
    +194                        raise EcalcError(
    +195                            title="Invalid file combination",
    +196                            message="A zip file cannot be combined with other file types. Please provide a zip file alone.",
    +197                        )
    +198
    +199                    valid_files, invalid_files = unpack_zip(file.file)
    +200                elif EcalcFile.is_csv(Path(file.filename)) or EcalcFile.is_yaml(Path(file.filename)):
    +201                    valid_files.append(
    +202                        ValidEcalcFile(
    +203                            original_filename=Path(file.filename),
    +204                            filename=file.filename,
    +205                            file=file.file,
    +206                            file_type=EcalcFile.get_type(filename=Path(file.filename)),
    +207                        )
    +208                    )
    +209                else:
    +210                    invalid_files.append(
    +211                        InvalidEcalcFile(
    +212                            original_filename=Path(file.filename),
    +213                            filename=file.filename,
    +214                            error="Invalid File Extension",
    +215                        )
    +216                    )
    +217            else:
    +218                invalid_files.append(
    +219                    InvalidEcalcFile(
    +220                        original_filename=Path(file.filename),
    +221                        filename=file.filename,
    +222                        error="Invalid File Extension",
    +223                    )
    +224                )
    +225
    +226        return valid_files, invalid_files
    +
    + + +

    Given a list of files (e.g uploaded by a user), given a name, do an initial attempt to +filter out bad files for further processing of good files only.

    + +

    The current validation implementation is very naĩve, by only checking file extension.

    + +
    Parameters
    + +
      +
    • files:
    • +
    + +
    Returns
    +
    + + +
    +
    +
    + +
    + + def + find_longest_common_path(file_path_1: pathlib.Path, file_path_2: pathlib.Path) -> str: + + + +
    + +
    229def find_longest_common_path(file_path_1: Path, file_path_2: Path) -> str:
    +230    """Given 2 paths, find the longest common path, part by part that the 2 paths share; ie
    +231    until which position in the file hierarchy do they diverge?
    +232
    +233    :param file_path_1:
    +234    :param file_path_2:
    +235    :return:
    +236    """
    +237    common_path = ""
    +238    for path_1, path_2 in zip(file_path_1.parts, file_path_2.parts):
    +239        if path_1 == path_2:
    +240            common_path += path_1 + "/"
    +241        else:
    +242            break
    +243
    +244    return common_path
    +
    + + +

    Given 2 paths, find the longest common path, part by part that the 2 paths share; ie +until which position in the file hierarchy do they diverge?

    + +
    Parameters
    + +
      +
    • file_path_1:
    • +
    • file_path_2:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + strip_common_path(common_path: str, path: str) -> str: + + + +
    + +
    247def strip_common_path(common_path: str, path: str) -> str:
    +248    """Remove/strip the given subpath from path
    +249    :param common_path:
    +250    :param path:
    +251    :return:
    +252    """
    +253    return path.replace(common_path, "")
    +
    + + +

    Remove/strip the given subpath from path

    + +
    Parameters
    + +
      +
    • common_path:
    • +
    • path:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + make_relative_path(linked_file: str, main_file: str) -> str: + + + +
    + +
    256def make_relative_path(linked_file: str, main_file: str) -> str:
    +257    """Given a main file and a file to be linked to from that file, only
    +258    include the parts of the path of both files that _differ_.
    +259
    +260    The parts that is different in main_file, will be replaced with "../",
    +261
    +262    :param linked_file:
    +263    :param main_file:
    +264    :return:
    +265    """
    +266    main_file_path = Path(main_file)
    +267    for part in main_file_path.parts[:-1]:
    +268        if part != "" and part != "/":
    +269            linked_file = "../" + linked_file
    +270
    +271    return linked_file
    +
    + + +

    Given a main file and a file to be linked to from that file, only +include the parts of the path of both files that _differ_.

    + +

    The parts that is different in main_file, will be replaced with "../",

    + +
    Parameters
    + +
      +
    • linked_file:
    • +
    • main_file:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + find_duplicates(files: List[libecalc.infrastructure.file_io.ValidEcalcFile]) -> List[str]: + + + +
    + +
    274def find_duplicates(files: List[ValidEcalcFile]) -> List[str]:
    +275    """Find files with duplicate names (names = without path).
    +276
    +277    :param files:
    +278    :return:
    +279    """
    +280    count_filenames = Counter([file.filename for file in files])
    +281    duplicates = [filename for filename, count in count_filenames.items() if count > 1]
    +282
    +283    return duplicates
    +
    + + +

    Find files with duplicate names (names = without path).

    + +
    Parameters
    + +
      +
    • files:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + rename_duplicates( valid_files: List[libecalc.infrastructure.file_io.ValidEcalcFile], duplicates: List[str]) -> Dict[pathlib.Path, str]: + + + +
    + +
    286def rename_duplicates(valid_files: List[ValidEcalcFile], duplicates: List[str]) -> Dict[Path, str]:
    +287    """Rename duplicate files. All with same name will be renamed. Those that are not duplicates,
    +288    will also be returned, with the original filename in the mapping.
    +289
    +290    Only resource files (csv) needs to be renamed, because they are flattened out and will then exist
    +291    at the same level.
    +292
    +293    :param valid_files:
    +294    :param duplicates:
    +295    :return:
    +296    """
    +297    renamed_files: Dict[Path, str] = {}
    +298    for file in valid_files:
    +299        if file.filename in duplicates:
    +300            renamed_filename = str(file.original_filename).replace("/", "_")
    +301            if len(renamed_filename) > 100:
    +302                renamed_filename = renamed_filename[-94:] + str(uuid.uuid4().hex.upper()[0:6])
    +303            renamed_files[file.original_filename] = renamed_filename
    +304        else:
    +305            renamed_files[file.original_filename] = file.filename
    +306
    +307    return renamed_files
    +
    + + +

    Rename duplicate files. All with same name will be renamed. Those that are not duplicates, +will also be returned, with the original filename in the mapping.

    + +

    Only resource files (csv) needs to be renamed, because they are flattened out and will then exist +at the same level.

    + +
    Parameters
    + +
      +
    • valid_files:
    • +
    • duplicates:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + make_relative_paths( files: List[libecalc.infrastructure.file_io.ValidEcalcFile], main_yaml: libecalc.infrastructure.file_io.ValidEcalcFile) -> Dict[pathlib.Path, str]: + + + +
    + +
    310def make_relative_paths(files: List[ValidEcalcFile], main_yaml: ValidEcalcFile) -> Dict[Path, str]:
    +311    """For all files in the list, generate the relative paths for all files, relative
    +312    to the provided main file. All files provided, must have the original_filename set, which must
    +313    be the relative path to the root of the model; e.g. the (zip) archive path, or
    +314    if only one level, the filename itself.
    +315
    +316    :param files:
    +317    :param main_yaml:
    +318    :return:
    +319    """
    +320    relative_paths: Dict[Path, str] = {}
    +321    for file in files:
    +322        if file == main_yaml:
    +323            # since all files are relative to this given file, this must be the filename itself, only
    +324            relative_paths[main_yaml.original_filename] = main_yaml.filename
    +325        else:
    +326            common_path = find_longest_common_path(Path(file.original_filename), Path(main_yaml.original_filename))
    +327            stripped_file = strip_common_path(common_path, str(file.original_filename))
    +328            stripped_main = strip_common_path(common_path, str(main_yaml.original_filename))
    +329            relative_path = make_relative_path(stripped_file, stripped_main)
    +330
    +331            relative_paths[file.original_filename] = relative_path
    +332
    +333    return relative_paths
    +
    + + +

    For all files in the list, generate the relative paths for all files, relative +to the provided main file. All files provided, must have the original_filename set, which must +be the relative path to the root of the model; e.g. the (zip) archive path, or +if only one level, the filename itself.

    + +
    Parameters
    + +
      +
    • files:
    • +
    • main_yaml:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + unpack_zip( file: <class 'IO'>) -> Tuple[List[libecalc.infrastructure.file_io.ValidEcalcFile], List[libecalc.infrastructure.file_io.InvalidEcalcFile]]: + + + +
    + +
    336def unpack_zip(file: IO) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +337    """Unpack the zip similarility to how single files are handled, by returning a tuple
    +338    of valid and invalid files.
    +339
    +340    :param file:
    +341    :return:
    +342    """
    +343    valid_files: List[ValidEcalcFile] = []
    +344    invalid_files: List[InvalidEcalcFile] = []
    +345    try:
    +346        with zipfile.ZipFile(BytesIO(file.read())) as archive:
    +347            for zip_info in archive.infolist():
    +348                try:
    +349                    file_path = Path(zip_info.filename)
    +350
    +351                    if is_ignored_zip_content(file_path) or zip_info.is_dir():
    +352                        # Just ignore, dont event mention it. Will just confuse users (because those files are normally hidden)
    +353                        continue
    +354                    elif EcalcFile.is_csv(file_path) or EcalcFile.is_yaml(file_path):
    +355                        with archive.open(zip_info) as file:
    +356                            file_like = TemporaryFile()
    +357                            file_like.write(file.read())
    +358                            file_like.seek(0)
    +359                            valid_files.append(
    +360                                ValidEcalcFile(
    +361                                    original_filename=file_path,
    +362                                    filename=file_path.name,
    +363                                    file=file_like,
    +364                                    file_type=EcalcFile.get_type(filename=file_path),
    +365                                )
    +366                            )
    +367                    else:
    +368                        invalid_files.append(
    +369                            InvalidEcalcFile(
    +370                                original_filename=file_path, filename=file_path.name, error="Invalid file extension"
    +371                            )
    +372                        )
    +373                        continue
    +374
    +375                except EcalcError as ee:
    +376                    logger.warning(f"An error occurred while reading file({file_path}) in zip archive")
    +377                    invalid_files.append(
    +378                        InvalidEcalcFile(original_filename=file_path, filename=file_path.name, error=ee.message)
    +379                    )
    +380
    +381        valid_file_paths = [valid_file.original_filename for valid_file in valid_files]
    +382        if len(valid_file_paths) != len(set(valid_file_paths)):
    +383            raise EcalcError(title="Bad zip file", message="Duplicated filepaths in zip archive detected. Please fix.")
    +384
    +385        return valid_files, invalid_files
    +386
    +387    except zipfile.BadZipFile as e:
    +388        raise EcalcError(title="Bad zip file", message="An error occurred while unpacking the zip file") from e
    +
    + + +

    Unpack the zip similarility to how single files are handled, by returning a tuple +of valid and invalid files.

    + +
    Parameters
    + +
      +
    • file:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + read_csv(csv_data: Union[str, TextIO, _io.BytesIO]) -> pandas.core.frame.DataFrame: + + + +
    + +
    426def read_csv(csv_data: Union[str, TextIO, BytesIO]) -> pandas.DataFrame:
    +427    """Wrapper of pandas read csv function
    +428
    +429    Settings used:
    +430        float_precision="round_trip" to avoid reading inaccurate floats, i.e. 0.724 becomes 0.7240000000000001
    +431        skipinitialspace=True converts "  10" to 10,
    +432        thousands=" " removes spaces used as thousand separators (normal in excel)
    +433
    +434    Args:
    +435        csv_data:
    +436
    +437    Returns:
    +438
    +439    """
    +440    stream = StringIO(csv_data) if isinstance(csv_data, str) else csv_data
    +441
    +442    return pd.read_csv(stream, comment="#", float_precision="round_trip", skipinitialspace=True, thousands=" ")
    +
    + + +

    Wrapper of pandas read csv function

    + +

    Settings used: + float_precision="round_trip" to avoid reading inaccurate floats, i.e. 0.724 becomes 0.7240000000000001 + skipinitialspace=True converts " 10" to 10, + thousands=" " removes spaces used as thousand separators (normal in excel)

    + +

    Args: + csv_data:

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + read_resource_from_string( resource_string: str, validate_headers: bool = True) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    445def read_resource_from_string(resource_string: str, validate_headers: bool = True) -> Resource:
    +446    """Read resource from stream without validation."""
    +447    resource_df = read_csv(resource_string)
    +448
    +449    resource = _dataframe_to_resource(resource_df.replace(np.nan, ""), validate_headers=validate_headers)
    +450    return resource
    +
    + + +

    Read resource from stream without validation.

    +
    + + +
    +
    + +
    + + def + convert_dataframe_to_timeseries_resource( resource_df: pandas.core.frame.DataFrame) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    453def convert_dataframe_to_timeseries_resource(resource_df: pd.DataFrame) -> Resource:
    +454    # TODO: This might give a different result than calculator-cli since we are not yet
    +455    #  filtering on columns that are actually used. I.e. an unused column might have a number where all used columns
    +456    #  have nan. This method would include that row. Although it is unlikely.
    +457    # Drop rows if all values are na (sometimes lines with ,,, are exported from Excel).
    +458
    +459    resource_df = resource_df.dropna(axis=0, how="all")
    +460    # Drop columns if all values are na
    +461    resource_df = resource_df.dropna(axis=1, how="all")
    +462
    +463    return _dataframe_to_resource(resource_df)
    +
    + + + + +
    +
    + +
    + + def + read_timeseries_resource( resource_input: Union[pathlib.Path, _io.BytesIO, str], timeseries_type: libecalc.presentation.yaml.yaml_entities.YamlTimeseriesType) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    466def read_timeseries_resource(
    +467    resource_input: Union[Path, BytesIO, str], timeseries_type: YamlTimeseriesType
    +468) -> Resource:
    +469    """Read timeseries resource from filepath with timeseries specific manipulation/validation.
    +470
    +471    - Timeseries is allowed to have nans
    +472    """
    +473    if not isinstance(resource_input, (BytesIO, str, Path)):
    +474        raise ValueError(f"Invalid resource_input type '{type(resource_input)}'")
    +475
    +476    if timeseries_type in (YamlTimeseriesType.DEFAULT, YamlTimeseriesType.MISCELLANEOUS):
    +477        if isinstance(resource_input, Path):
    +478            with open(resource_input) as resource_file:
    +479                resource_df = read_csv(resource_file)
    +480        else:
    +481            resource_df = read_csv(resource_input)
    +482    else:
    +483        raise ValueError(f"Invalid timeseries type '{timeseries_type}' for resource '{resource_input}'")
    +484
    +485    return convert_dataframe_to_timeseries_resource(resource_df=resource_df)
    +
    + + +

    Read timeseries resource from filepath with timeseries specific manipulation/validation.

    + +
      +
    • Timeseries is allowed to have nans
    • +
    +
    + + +
    +
    + +
    + + def + read_facility_resource( resource_input: Union[pathlib.Path, _io.BytesIO, str]) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    488def read_facility_resource(resource_input: Union[Path, BytesIO, str]) -> Resource:
    +489    """Read facility file from filepath with facility file specific validation.
    +490
    +491    - Facility files are not allowed to have nans
    +492    """
    +493    if isinstance(resource_input, Path):
    +494        with open(resource_input) as resource_file:
    +495            resource_df = read_csv(resource_file)
    +496    elif isinstance(resource_input, (BytesIO, str)):
    +497        resource_df = read_csv(resource_input)
    +498    else:
    +499        raise ValueError("")
    +500    resource = _dataframe_to_resource(resource_df)
    +501    _validate_not_nan(resource.data)
    +502    return resource
    +
    + + +

    Read facility file from filepath with facility file specific validation.

    + +
      +
    • Facility files are not allowed to have nans
    • +
    +
    + + +
    +
    + +
    + + def + read_resource_from_filepath( resource_path: pathlib.Path) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    505def read_resource_from_filepath(resource_path: Path) -> Resource:
    +506    """Read resource from filepath without validation, should only be used as a util for tests/fixtures."""
    +507    if EcalcFile.is_csv(resource_path):
    +508        with open(resource_path) as resource_file:
    +509            resource_df = read_csv(resource_file)
    +510            return _dataframe_to_resource(resource_df)
    +511    else:
    +512        raise ValueError(f"Invalid file extension: {resource_path}")
    +
    + + +

    Read resource from filepath without validation, should only be used as a util for tests/fixtures.

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/infrastructure/file_utils.html b/docs/about/references/api/libecalc/infrastructure/file_utils.html new file mode 100644 index 0000000000..be9ca6a932 --- /dev/null +++ b/docs/about/references/api/libecalc/infrastructure/file_utils.html @@ -0,0 +1,840 @@ + + + + + + + libecalc.infrastructure.file_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.infrastructure.file_utils

    + + + + + + +
      1import enum
    +  2import sys
    +  3from datetime import datetime
    +  4from typing import Any, Callable, Optional, Union
    +  5
    +  6import numpy as np
    +  7import pandas as pd
    +  8from orjson import orjson
    +  9from pydantic import BaseModel
    + 10
    + 11from libecalc.common.datetime.utils import DateTimeFormats
    + 12from libecalc.common.logger import logger
    + 13from libecalc.dto.result import ComponentResult, EcalcModelResult
    + 14from libecalc.presentation.simple_result import SimpleResultData
    + 15
    + 16
    + 17class OutputFormat(enum.Enum):
    + 18    """Supported output file formats from eCalc"""
    + 19
    + 20    CSV = "csv"
    + 21    JSON = "json"
    + 22
    + 23    def __str__(self):
    + 24        """Dump enum to string"""
    + 25        return self.value
    + 26
    + 27
    + 28def dataframe_to_csv(
    + 29    df: pd.DataFrame,
    + 30    separator: str = ",",
    + 31    show_index: bool = True,
    + 32    float_formatter: Optional[Union[Callable, str]] = "%20.5f",
    + 33    date_format: Optional[str] = None,
    + 34) -> str:
    + 35    """Dump pandas dataframe to csv file
    + 36
    + 37    Wraps pandas to_csv functionality, for more options see pandas docs
    + 38
    + 39    Args:
    + 40        df: Dataframe to dump
    + 41        separator: value separator in out, defaults to ',' for csv
    + 42        show_index: if true, will include index in dump
    + 43        float_formatter:
    + 44        date_format:
    + 45
    + 46    Returns:
    + 47
    + 48    """
    + 49    return df.to_csv(
    + 50        float_format=float_formatter,
    + 51        index=show_index,
    + 52        index_label="timesteps",
    + 53        encoding="utf-8",
    + 54        sep=separator,
    + 55        date_format=date_format,
    + 56    )
    + 57
    + 58
    + 59def find_float_64(data):
    + 60    if isinstance(data, np.float64):
    + 61        pass
    + 62    elif isinstance(data, list):
    + 63        for i in data:
    + 64            find_float_64(i)
    + 65    elif isinstance(data, dict):
    + 66        for v in data.values():
    + 67            find_float_64(v)
    + 68    elif isinstance(data, BaseModel):
    + 69        for v in data.model_dump().values():
    + 70            find_float_64(v)
    + 71
    + 72
    + 73def to_json(result: Union[ComponentResult, EcalcModelResult], simple_output: bool, date_format_option: int) -> str:
    + 74    """Dump result classes to json file
    + 75
    + 76    Args:
    + 77        result: eCalc result data class
    + 78        simple_output: If true, will provide a simplified output format
    + 79        date_format_option:
    + 80
    + 81    Returns:
    + 82        String dump of json output
    + 83
    + 84    """
    + 85
    + 86    data = (
    + 87        SimpleResultData.from_dto(result).model_dump(
    + 88            exclude_none=True,
    + 89        )
    + 90        if simple_output
    + 91        else result.model_dump(
    + 92            exclude_none=True,
    + 93        )
    + 94    )
    + 95    date_format = DateTimeFormats.get_format(date_format_option)
    + 96
    + 97    def default_serializer(x: Any):
    + 98        if isinstance(x, datetime):
    + 99            return x.strftime(date_format)
    +100        if isinstance(x, np.float64):
    +101            return float(x)
    +102
    +103        raise ValueError(f"Unable to serialize '{type(x)}'")
    +104
    +105    find_float_64(data)
    +106
    +107    # Using orjson to both allow custom date format and convert nan to null.
    +108    # NaN to null is not supported by json module.
    +109    # Custom date format is not supported by pydantic -> https://github.com/pydantic/pydantic/issues/7143
    +110    return orjson.dumps(
    +111        data,
    +112        default=default_serializer,
    +113        option=orjson.OPT_PASSTHROUGH_DATETIME | orjson.OPT_INDENT_2 | orjson.OPT_NON_STR_KEYS,
    +114    ).decode()
    +115
    +116
    +117def get_result_output(
    +118    results: EcalcModelResult,
    +119    output_format: OutputFormat,
    +120    simple_output: bool,
    +121    date_format_option: int,
    +122) -> str:
    +123    """Result output controller
    +124
    +125    Output eCalc results in desired format and
    +126
    +127    Args:
    +128        results:
    +129        output_format:
    +130        simple_output: If true, will provide a simplified output format. Only supported for json format
    +131        date_format_option:
    +132
    +133    Returns:
    +134
    +135    """
    +136    if output_format == OutputFormat.JSON:
    +137        return to_json(results, simple_output=simple_output, date_format_option=date_format_option)
    +138    elif output_format == OutputFormat.CSV:
    +139        df = pd.DataFrame(index=results.timesteps)
    +140        for component in results.components:
    +141            component_df = component.to_dataframe(
    +142                prefix=component.name,
    +143            )
    +144            try:
    +145                df = df.join(component_df)
    +146            except ValueError:
    +147                logger.warning(
    +148                    f"Duplicate component names in result detected. Component name '{component.name}', "
    +149                    f"component type '{component.componentType}'."
    +150                )
    +151                df = pd.concat([df, component_df], axis=1)
    +152        return dataframe_to_csv(df.fillna("nan"), date_format=DateTimeFormats.get_format(date_format_option))
    +153    else:
    +154        raise ValueError(
    +155            f"Invalid output format. Expected {OutputFormat.CSV} or {OutputFormat.JSON}, got '{output_format}'"
    +156        )
    +157
    +158
    +159def get_component_output(
    +160    results: EcalcModelResult,
    +161    component_name: str,
    +162    output_format: OutputFormat,
    +163    simple_output: bool,
    +164    date_format_option: int,
    +165) -> str:
    +166    """Get eCalc output for a single component by name
    +167
    +168    Args:
    +169        results: Complete from eCalc model
    +170        component_name: Name of component to output results from
    +171        output_format: Format of output file, CSV and JSON is currently supported
    +172        simple_output: If true, will provide a simplified output format. Only supported for json format
    +173        date_format_option:
    +174
    +175    Returns:
    +176
    +177    """
    +178    components = [component for component in results.components if component.name == component_name]
    +179
    +180    if len(components) == 0:
    +181        msg = f"Unable to find component with name '{component_name}'"
    +182        logger.error(msg)
    +183        raise ValueError(msg)
    +184    elif len(components) == 1:
    +185        component = components[0]
    +186    else:
    +187        print("Several components match this name\n")
    +188        format_str = "{:<5} {:<18} {:<10}"
    +189        print(format_str.format("index", "type", "name"))
    +190        for index, component in enumerate(components):
    +191            print(format_str.format(index, component.componentType.value, component.name))
    +192        print()
    +193        selected_component_index = input("Enter the index of the component you want to select (q to quit): ")
    +194        if selected_component_index == "q":
    +195            sys.exit(0)
    +196
    +197        component = components[int(selected_component_index)]
    +198
    +199    if output_format == OutputFormat.JSON:
    +200        return to_json(component, simple_output=simple_output, date_format_option=date_format_option)
    +201    elif output_format == OutputFormat.CSV:
    +202        df = component.to_dataframe()
    +203        return dataframe_to_csv(df, date_format=DateTimeFormats.get_format(date_format_option))
    +204    else:
    +205        raise ValueError(
    +206            f"Invalid output format. Expected {OutputFormat.CSV} or {OutputFormat.JSON}, got '{output_format}'"
    +207        )
    +
    + + +
    +
    + +
    + + class + OutputFormat(enum.Enum): + + + +
    + +
    18class OutputFormat(enum.Enum):
    +19    """Supported output file formats from eCalc"""
    +20
    +21    CSV = "csv"
    +22    JSON = "json"
    +23
    +24    def __str__(self):
    +25        """Dump enum to string"""
    +26        return self.value
    +
    + + +

    Supported output file formats from eCalc

    +
    + + +
    +
    + CSV = +<OutputFormat.CSV: 'csv'> + + +
    + + + + +
    +
    +
    + JSON = +<OutputFormat.JSON: 'json'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    +
    +
    +
    + +
    + + def + dataframe_to_csv( df: pandas.core.frame.DataFrame, separator: str = ',', show_index: bool = True, float_formatter: Union[Callable, str, NoneType] = '%20.5f', date_format: Union[str, NoneType] = None) -> str: + + + +
    + +
    29def dataframe_to_csv(
    +30    df: pd.DataFrame,
    +31    separator: str = ",",
    +32    show_index: bool = True,
    +33    float_formatter: Optional[Union[Callable, str]] = "%20.5f",
    +34    date_format: Optional[str] = None,
    +35) -> str:
    +36    """Dump pandas dataframe to csv file
    +37
    +38    Wraps pandas to_csv functionality, for more options see pandas docs
    +39
    +40    Args:
    +41        df: Dataframe to dump
    +42        separator: value separator in out, defaults to ',' for csv
    +43        show_index: if true, will include index in dump
    +44        float_formatter:
    +45        date_format:
    +46
    +47    Returns:
    +48
    +49    """
    +50    return df.to_csv(
    +51        float_format=float_formatter,
    +52        index=show_index,
    +53        index_label="timesteps",
    +54        encoding="utf-8",
    +55        sep=separator,
    +56        date_format=date_format,
    +57    )
    +
    + + +

    Dump pandas dataframe to csv file

    + +

    Wraps pandas to_csv functionality, for more options see pandas docs

    + +

    Args: + df: Dataframe to dump + separator: value separator in out, defaults to ',' for csv + show_index: if true, will include index in dump + float_formatter: + date_format:

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + find_float_64(data): + + + +
    + +
    60def find_float_64(data):
    +61    if isinstance(data, np.float64):
    +62        pass
    +63    elif isinstance(data, list):
    +64        for i in data:
    +65            find_float_64(i)
    +66    elif isinstance(data, dict):
    +67        for v in data.values():
    +68            find_float_64(v)
    +69    elif isinstance(data, BaseModel):
    +70        for v in data.model_dump().values():
    +71            find_float_64(v)
    +
    + + + + +
    +
    + + + +
     74def to_json(result: Union[ComponentResult, EcalcModelResult], simple_output: bool, date_format_option: int) -> str:
    + 75    """Dump result classes to json file
    + 76
    + 77    Args:
    + 78        result: eCalc result data class
    + 79        simple_output: If true, will provide a simplified output format
    + 80        date_format_option:
    + 81
    + 82    Returns:
    + 83        String dump of json output
    + 84
    + 85    """
    + 86
    + 87    data = (
    + 88        SimpleResultData.from_dto(result).model_dump(
    + 89            exclude_none=True,
    + 90        )
    + 91        if simple_output
    + 92        else result.model_dump(
    + 93            exclude_none=True,
    + 94        )
    + 95    )
    + 96    date_format = DateTimeFormats.get_format(date_format_option)
    + 97
    + 98    def default_serializer(x: Any):
    + 99        if isinstance(x, datetime):
    +100            return x.strftime(date_format)
    +101        if isinstance(x, np.float64):
    +102            return float(x)
    +103
    +104        raise ValueError(f"Unable to serialize '{type(x)}'")
    +105
    +106    find_float_64(data)
    +107
    +108    # Using orjson to both allow custom date format and convert nan to null.
    +109    # NaN to null is not supported by json module.
    +110    # Custom date format is not supported by pydantic -> https://github.com/pydantic/pydantic/issues/7143
    +111    return orjson.dumps(
    +112        data,
    +113        default=default_serializer,
    +114        option=orjson.OPT_PASSTHROUGH_DATETIME | orjson.OPT_INDENT_2 | orjson.OPT_NON_STR_KEYS,
    +115    ).decode()
    +
    + + +

    Dump result classes to json file

    + +

    Args: + result: eCalc result data class + simple_output: If true, will provide a simplified output format + date_format_option:

    + +

    Returns: + String dump of json output

    +
    + + +
    +
    + +
    + + def + get_result_output( results: libecalc.dto.result.results.EcalcModelResult, output_format: libecalc.infrastructure.file_utils.OutputFormat, simple_output: bool, date_format_option: int) -> str: + + + +
    + +
    118def get_result_output(
    +119    results: EcalcModelResult,
    +120    output_format: OutputFormat,
    +121    simple_output: bool,
    +122    date_format_option: int,
    +123) -> str:
    +124    """Result output controller
    +125
    +126    Output eCalc results in desired format and
    +127
    +128    Args:
    +129        results:
    +130        output_format:
    +131        simple_output: If true, will provide a simplified output format. Only supported for json format
    +132        date_format_option:
    +133
    +134    Returns:
    +135
    +136    """
    +137    if output_format == OutputFormat.JSON:
    +138        return to_json(results, simple_output=simple_output, date_format_option=date_format_option)
    +139    elif output_format == OutputFormat.CSV:
    +140        df = pd.DataFrame(index=results.timesteps)
    +141        for component in results.components:
    +142            component_df = component.to_dataframe(
    +143                prefix=component.name,
    +144            )
    +145            try:
    +146                df = df.join(component_df)
    +147            except ValueError:
    +148                logger.warning(
    +149                    f"Duplicate component names in result detected. Component name '{component.name}', "
    +150                    f"component type '{component.componentType}'."
    +151                )
    +152                df = pd.concat([df, component_df], axis=1)
    +153        return dataframe_to_csv(df.fillna("nan"), date_format=DateTimeFormats.get_format(date_format_option))
    +154    else:
    +155        raise ValueError(
    +156            f"Invalid output format. Expected {OutputFormat.CSV} or {OutputFormat.JSON}, got '{output_format}'"
    +157        )
    +
    + + +

    Result output controller

    + +

    Output eCalc results in desired format and

    + +

    Args: + results: + output_format: + simple_output: If true, will provide a simplified output format. Only supported for json format + date_format_option:

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + get_component_output( results: libecalc.dto.result.results.EcalcModelResult, component_name: str, output_format: libecalc.infrastructure.file_utils.OutputFormat, simple_output: bool, date_format_option: int) -> str: + + + +
    + +
    160def get_component_output(
    +161    results: EcalcModelResult,
    +162    component_name: str,
    +163    output_format: OutputFormat,
    +164    simple_output: bool,
    +165    date_format_option: int,
    +166) -> str:
    +167    """Get eCalc output for a single component by name
    +168
    +169    Args:
    +170        results: Complete from eCalc model
    +171        component_name: Name of component to output results from
    +172        output_format: Format of output file, CSV and JSON is currently supported
    +173        simple_output: If true, will provide a simplified output format. Only supported for json format
    +174        date_format_option:
    +175
    +176    Returns:
    +177
    +178    """
    +179    components = [component for component in results.components if component.name == component_name]
    +180
    +181    if len(components) == 0:
    +182        msg = f"Unable to find component with name '{component_name}'"
    +183        logger.error(msg)
    +184        raise ValueError(msg)
    +185    elif len(components) == 1:
    +186        component = components[0]
    +187    else:
    +188        print("Several components match this name\n")
    +189        format_str = "{:<5} {:<18} {:<10}"
    +190        print(format_str.format("index", "type", "name"))
    +191        for index, component in enumerate(components):
    +192            print(format_str.format(index, component.componentType.value, component.name))
    +193        print()
    +194        selected_component_index = input("Enter the index of the component you want to select (q to quit): ")
    +195        if selected_component_index == "q":
    +196            sys.exit(0)
    +197
    +198        component = components[int(selected_component_index)]
    +199
    +200    if output_format == OutputFormat.JSON:
    +201        return to_json(component, simple_output=simple_output, date_format_option=date_format_option)
    +202    elif output_format == OutputFormat.CSV:
    +203        df = component.to_dataframe()
    +204        return dataframe_to_csv(df, date_format=DateTimeFormats.get_format(date_format_option))
    +205    else:
    +206        raise ValueError(
    +207            f"Invalid output format. Expected {OutputFormat.CSV} or {OutputFormat.JSON}, got '{output_format}'"
    +208        )
    +
    + + +

    Get eCalc output for a single component by name

    + +

    Args: + results: Complete from eCalc model + component_name: Name of component to output results from + output_format: Format of output file, CSV and JSON is currently supported + simple_output: If true, will provide a simplified output format. Only supported for json format + date_format_option:

    + +

    Returns:

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/version.html b/docs/about/references/api/libecalc/version.html new file mode 100644 index 0000000000..0431b7423b --- /dev/null +++ b/docs/about/references/api/libecalc/version.html @@ -0,0 +1,285 @@ + + + + + + + libecalc.version API documentation + + + + + + + + + +
    +
    +

    +libecalc.version

    + + + + + + +
     1from libecalc.common.version import Version
    + 2
    + 3# DO NOT EDIT - replaced in CI with release please
    + 4__version__ = "8.9.0"  # x-release-please-version
    + 5# END DO NOT EDIT
    + 6
    + 7
    + 8def current_version() -> Version:
    + 9    """Get the current version of eCalc. This is set and
    +10    built in the CICD pipeline.
    +11    :return:
    +12    """
    +13    return Version.from_string(__version__)
    +
    + + +
    +
    + +
    + + def + current_version() -> libecalc.common.version.Version: + + + +
    + +
     9def current_version() -> Version:
    +10    """Get the current version of eCalc. This is set and
    +11    built in the CICD pipeline.
    +12    :return:
    +13    """
    +14    return Version.from_string(__version__)
    +
    + + +

    Get the current version of eCalc. This is set and +built in the CICD pipeline.

    + +
    Returns
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/cli_reference/index.html b/docs/about/references/cli_reference/index.html new file mode 100644 index 0000000000..c7cd665aad --- /dev/null +++ b/docs/about/references/cli_reference/index.html @@ -0,0 +1,106 @@ + + + + + +ecalc | eCalc™ Docs + + + + +

    ecalc

    +

    Args: +log_level: Log level of the CLI logger, defaults to INFO +log_folder: Path to location of log files +version: Option to show libecalc version.

    +

    Returns:

    +

    Usage:

    +
    $ ecalc [OPTIONS] COMMAND [ARGS]...
    +

    Options:

    +
      +
    • --log [ERROR|WARNING|INFO|DEBUG]: Set the loglevel. [default: INFO]
    • +
    • --log-folder PATH: Store log files in a folder
    • +
    • --version: Show current eCalc™ version.
    • +
    • --install-completion [bash|zsh|fish|powershell|pwsh]: Install completion for the specified shell.
    • +
    • --show-completion [bash|zsh|fish|powershell|pwsh]: Show completion for the specified shell, to copy it or customize the installation.
    • +
    • --help: Show this message and exit.
    • +
    +

    Commands:

    +
      +
    • run: CLI command to run a ecalc model.
    • +
    • selftest: Test that eCalc has been successfully...
    • +
    • show: Command to show information in the model...
    • +
    +

    ecalc run

    +

    CLI command to run a ecalc model.

    +

    Usage:

    +
    $ ecalc run [OPTIONS] MODEL_FILE
    +

    Arguments:

    +
      +
    • MODEL_FILE: The Model YAML-file specifying time series inputs, facility inputs and the relationship between energy consumers. [required]
    • +
    +

    Options:

    +
      +
    • -f, --output-frequency, --outputfrequency [NONE|YEAR|MONTH|DAY]: Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE]
    • +
    • -c, --csv: Toggle output of csv data. [default: True]
    • +
    • --json: Toggle output of json output.
    • +
    • -o, --output-folder, --outputfolder PATH: Outputfolder. Defaults to output/ relative to the yml setup file
    • +
    • -n, --name-prefix, --nameprefix TEXT: Name prefix for output data. Defaults to name of setup file.
    • +
    • --ltp-export: In addition to standard output, a specific Long Term Prognosis (LTP) file will be provided for simple export of LTP relevant data (Tabular Separated Values).
    • +
    • --stp-export: In addition to standard output, a specific Short Term Prognosis (STP) file will be provided for simple export of STP relevant data (Tabular Separated Values).
    • +
    • --flow-diagram: Output the input model formatted to be displayed in a custom flow diagram format in JSON
    • +
    • --detailed-output, --detailedoutput: Output detailed output. When False you will get basic results such as energy usage, power, time vector.
    • +
    • --date-format-option [0|1|2]: Date format option. 0: "YYYY-MM-DD HH:MM:SS" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM:SS" (ISO8601), 2: "DD.MM.YYYY HH:MM:SS". Default 0 (ISO 8601) [default: 0]
    • +
    • --help: Show this message and exit.
    • +
    +

    ecalc selftest

    +

    Test that eCalc has been successfully installed

    +

    Usage:

    +
    $ ecalc selftest [OPTIONS]
    +

    Options:

    +
      +
    • --help: Show this message and exit.
    • +
    +

    ecalc show

    +

    Command to show information in the model or results.

    +

    Usage:

    +
    $ ecalc show [OPTIONS] COMMAND [ARGS]...
    +

    Options:

    +
      +
    • --help: Show this message and exit.
    • +
    +

    Commands:

    +
      +
    • results: Show results.
    • +
    • yaml: Show yaml model.
    • +
    +

    ecalc show results

    +

    Show results. You need to run eCalc™ before this will be available.

    +

    Usage:

    +
    $ ecalc show results [OPTIONS]
    +

    Options:

    +
      +
    • -n, --name TEXT: Filter the results to only show the component with this name
    • +
    • --output-format [csv|json]: Show the data in this format. [default: json]
    • +
    • --file PATH: Write the data to a file with the specified name.
    • +
    • --output-folder PATH: Output folder. Defaults to current working directory
    • +
    • --detailed-output: Output detailed output. When False you will get basic energy usage and emissions results
    • +
    • --date-format-option [0|1|2]: Date format option. 0: "YYYY-MM-DD HH:MM:SS" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM:SS" (ISO8601), 2: "DD.MM.YYYY HH:MM:SS". Default 0 (ISO 8601) [default: 0]
    • +
    • -f, --output-frequency [NONE|YEAR|MONTH|DAY]: Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE]
    • +
    • --help: Show this message and exit.
    • +
    +

    ecalc show yaml

    +

    Show yaml model. This will show the yaml after processing !include.

    +

    Usage:

    +
    $ ecalc show yaml [OPTIONS] MODEL_FILE
    +

    Arguments:

    +
      +
    • MODEL_FILE: YAML file specifying time series inputs, facility inputs and the relationship between energy consumers. [required]
    • +
    +

    Options:

    +
      +
    • --file PATH: Write the data to a file with the specified name.
    • +
    • --help: Show this message and exit.
    • +
    + + \ No newline at end of file diff --git a/docs/about/references/index.html b/docs/about/references/index.html new file mode 100644 index 0000000000..30323b0f1f --- /dev/null +++ b/docs/about/references/index.html @@ -0,0 +1,13 @@ + + + + + +Reference documentation | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/ADJUSTMENT/index.html b/docs/about/references/keywords/ADJUSTMENT/index.html new file mode 100644 index 0000000000..ec88a190a1 --- /dev/null +++ b/docs/about/references/keywords/ADJUSTMENT/index.html @@ -0,0 +1,35 @@ + + + + + +ADJUSTMENT | eCalc™ Docs + + + + +

    ADJUSTMENT

    +

    eCalc Model +/ FACILITY_INPUTS +/ ADJUSTMENT

    +
    RequiredChild ofChildren/Options
    NoFACILITY_INPUTSCONSTANT
    FACTOR
    +

    Description

    +

    For various reasons (degenerated equipment, liquid pumps, etc.), the predicted energy usage from +the facility input does not always match the historic usage. To account for this, adjustments +may be added to the facility input. Currently, linear adjustment to the energy usage is supported.

    +
    warning

    Even though The ADJUSTMENT factor and constant can be added to any +FACILITY_INPUTS, it is only +implemented and used for a small subset of equipment, namely: SAMPLED COMPRESSOR MODEL, TABULATED ENERGY USAGE MODEL, +GENERATORSETS +, PUMP MODEL (Single Speed, Variable Speed and System) and compressors in a compressor system. +If you are not sure, give it a test first.

    +

    Format

    +
    ADJUSTMENT:
    <ADJUSTMENT 1>: <VALUE>
    <ADJUSTMENT 2>: <VALUE>
    +

    Example

    +

    Say you have input that is off by a constant and percentage. You could fix this in the following way:

    +
    NAME: some_facility_input
    FILE: filename.csv
    TYPE: FACILITY_INPUT_TYPE
    ADJUSTMENT:
    CONSTANT: 2
    FACTOR: 1.05
    +

    The resulting energy consumption EadjustedE_\mathrm{adjusted}, i.e. fuel or power, will then be

    +Eadjusted=2+1.05×EoriginalE_\mathrm{adjusted} = 2 + 1.05 \times E_\mathrm{original} +

    where EoriginalE_\mathrm{original} is the energy consumption before the adjustment.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CATEGORY/index.html b/docs/about/references/keywords/CATEGORY/index.html new file mode 100644 index 0000000000..f5e8ba25bc --- /dev/null +++ b/docs/about/references/keywords/CATEGORY/index.html @@ -0,0 +1,37 @@ + + + + + +CATEGORY | eCalc™ Docs + + + + +

    CATEGORY

    +

    eCalc Model +/ INSTALLATIONS +/ [...] / CATEGORY

    +
    RequiredChild ofChildren/Options
    YesCONSUMERS
    FUELCONSUMERS
    INSTALLATIONS
    FUEL_TYPES
    None
    +

    Description

    +

    The CATEGORY keyword is used to specify which category certain data types belong to - these data types are:

    + +

    Only a limited pre-defined set of categories is valid input to the +CATEGORY keyword. The complete list of possible categories is given below. +Please note that the input is case-sensitive. The names should be in upper-case and the spelling/dash must match the names in the list exactly.

    +

    Allowed categories for CONSUMERS and FUELCONSUMERS:

    +
    CategoryDescription/Examples
    BASE-LOADConsumers that do not vary with production
    COLD-VENTING-FUGITIVEDirect emissions through cold venting and fugitive emissions
    COMPRESSORGas injection compressors, export compressors, etc.
    FIXED-PRODUCTION-LOADConsumer that is fixed/constant when production stream is on. Note that this is simply the name of the category. eCalc™ does not imply any condition (that production must be > 0) when this keyword is applied. For this to occur, CONDITION must be used. See example below.
    FLAREFlaring related energy usage/emissions
    MISCELLANEOUSAnything that don't apply other categories. Compressor and Genset (New in v7.2)
    PUMPSingle speed pumps, variable speed pumps.
    GAS-DRIVEN-COMPRESSORCompressor only. New in v7.1
    TURBINE-GENERATORGenset only. New in v7.1
    POWER-FROM-SHOREGenset only. Dummy Genset (should have e.g. 0 fuel). New in v7.1
    OFFSHORE-WINDDirect load consumer only. Negative load. Indicate external power. New in v7.1
    LOADINGDirect load consumer only. Indicate oil volume to be loaded. New in v8.0
    STORAGEDirect load consumer only. Indicate oil volume to be stored. New in v8.0
    STEAM-TURBINE-GENERATORDirect load consumer only. Negative load. Indicate power generated steam turbine. New in v8.1
    BOILERGenset only. Indicate steam generated. New in v8.2
    HEATERGenset only. Indicate hot medium generated. New in v8.2
    +

    Allowed categories for INSTALLATIONS:

    +
    CategoryDescription/Examples
    FIXEDFixed installation
    MOBILEMobile/satellite installation.
    +

    Allowed categories for FUEL_TYPES:

    +
    CategoryDescription/Examples
    FUEL-GASNormally associated with a fixed installation
    DIESELNormally associated with a mobile installation
    +

    Format

    +
    CATEGORY: <CATEGORY>
    +

    Example

    +
    - NAME: name_of_my_electrical_consumer
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    LOAD: 5
    CONDITION: SIM;OIL_PROD > 0
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/COMPRESSOR_MODEL/index.html b/docs/about/references/keywords/COMPRESSOR_MODEL/index.html new file mode 100644 index 0000000000..eeb4f62c61 --- /dev/null +++ b/docs/about/references/keywords/COMPRESSOR_MODEL/index.html @@ -0,0 +1,22 @@ + + + + + +COMPRESSOR_MODEL | eCalc™ Docs + + + + +

    COMPRESSOR_MODEL

    +

    ENERGY_USAGE_MODEL / COMPRESSOR_MODEL

    +
    RequiredChild ofChildren/Options
    YesENERGY_USAGE_MODELNone
    +

    Description

    +

    This keyword links the predefined COMPRESSOR MODEL to the COMPRESSOR ENERGY USAGE MODEL.

    +

    Note that this can only be used when a COMPRESSOR SYSTEM is used. It is possible to use the same compressor model twice in the same system - this is a common feature when there are identical compressor trains in parallel.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: <name of compressor>
    COMPRESSOR_MODEL: <reference to compressor model>
    ...
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/COMPRESSOR_SYSTEM/index.html b/docs/about/references/keywords/COMPRESSOR_SYSTEM/index.html new file mode 100644 index 0000000000..3c6a579a8f --- /dev/null +++ b/docs/about/references/keywords/COMPRESSOR_SYSTEM/index.html @@ -0,0 +1,31 @@ + + + + + +COMPRESSORS | eCalc™ Docs + + + + +

    COMPRESSORS

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +COMPRESSOR_SYSTEM

    +
    RequiredChild ofChildren/Options
    YesENERGY_USAGE_MODELNone
    +

    Description

    +

    Used to define a list of compressors in a compressor system model (

    +

    ENERGY_USAGE_MODEL of type COMPRESSOR_SYSTEM). +Each compressor is defined with a name and a reference to a compressor energy function defined in either +FACILITY_INPUTS or MODELS

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: <name of compressor>
    COMPRESSOR_MODEL: <reference to compressor model in facility inputs>
    TOTAL_SYSTEM_RATE: <optional total system rate [Sm3/day]>
    OPERATIONAL_SETTINGS: <operational settings>
    +

    See OPERATIONAL_SETTINGS for details.

    +

    Example 1

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    +

    Example 2 (Detailed)

    +
    note

    When adding a “DATE” the next line is indented.

    +
    - NAME: gassys27
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    2020-04-01:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: gassys27a
    COMPRESSOR_MODEL: gas3da
    - NAME: gassys27b
    COMPRESSOR_MODEL: gas3db
    TOTAL_SYSTEM_RATE: SIM8;GAS_PROD # [Sm3/day]
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0]
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURE: 155
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURE: 155
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL/index.html b/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL/index.html new file mode 100644 index 0000000000..0465813352 --- /dev/null +++ b/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL/index.html @@ -0,0 +1,26 @@ + + + + + +COMPRESSOR_TRAIN_MODEL | eCalc™ Docs + + + + +

    COMPRESSOR_TRAIN_MODEL

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +COMPRESSOR_TRAIN_MODEL

    +
    RequiredChild ofChildren/Options
    YesENERGY_USAGE_MODELNone
    +

    Description

    +

    Reference to an compressor train model defined in FACILITY_INPUTS or +MODELS used for ENERGY_USAGE_MODEL +TYPE VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    COMPRESSOR_TRAIN_MODEL: <reference to compressor train model in facility inputs or models of compressor type>
    +

    Example

    +
    MODELS:
    - NAME: advanced_compressor_train
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    STREAMS:
    -
    -

    ...

    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    COMPRESSOR_TRAIN_MODEL: advanced_compressor_train
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONDITION/index.html b/docs/about/references/keywords/CONDITION/index.html new file mode 100644 index 0000000000..7f1d8ffe81 --- /dev/null +++ b/docs/about/references/keywords/CONDITION/index.html @@ -0,0 +1,32 @@ + + + + + +CONDITION | eCalc™ Docs + + + + +

    CONDITION

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +CONDITION

    +
    RequiredChild ofChildren/Options
    NoENERGY_USAGE_MODELNone
    +

    Description

    +

    All energy usage models may have a keyword CONDITION +which specifies conditions for the consumer to be used. At points in the time series where the condition +evaluates to 0 (or False), the energy consumption will be 0. +This is practical for some otherwise +constant consumers. +For example, if you use the category FIXED-PRODUCTION-LOAD and you want it to depend on whether or not there is production, the CONDITION keyword can be specified.

    +

    CONDITION supports the functionality described in Expressions, but is required to evaluate to True/False or 1/0.

    +

    Format

    +
    CONDITION: <CONDITION>
    +

    Example

    +

    A simple example is shown below where the load is only present whenever the oil production is positive:

    +
    - NAME: production_load
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    LOAD: 5
    CONDITION: SIM1;OIL_PROD:PLA > 0
    +

    This condition is an expression. See Expressions.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONDITIONS/index.html b/docs/about/references/keywords/CONDITIONS/index.html new file mode 100644 index 0000000000..4dd95d1626 --- /dev/null +++ b/docs/about/references/keywords/CONDITIONS/index.html @@ -0,0 +1,22 @@ + + + + + +CONDITIONS | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONSTANT/index.html b/docs/about/references/keywords/CONSTANT/index.html new file mode 100644 index 0000000000..a3d2d03a65 --- /dev/null +++ b/docs/about/references/keywords/CONSTANT/index.html @@ -0,0 +1,28 @@ + + + + + +CONSTANT | eCalc™ Docs + + + + +

    CONSTANT

    +

    FACILITY_INPUTS / +ADJUSTMENT / +CONSTANT

    +
    RequiredChild ofChildren/Options
    NoADJUSTMENTNone
    +

    Description

    +

    The keyword CONSTANT can be used for adjustment of input data with a constant.

    +

    Format

    +
    CONSTANT: <VALUE>
    +

    Example

    +

    Say you have input that that is off by -10 [some units]. +You could fix this like:

    +
    NAME: some_facility_input
    FILE: filename.csv
    TYPE: FACILITY_INPUT_TYPE
    ADJUSTMENT:
    CONSTANT: -10
    +

    The resulting energy consumption EadjustedE_\mathrm{adjusted}, i.e. fuel or power, will then be

    +Eadjusted=Eoriginal10E_\mathrm{adjusted} = E_\mathrm{original} - 10 +

    where EoriginalE_\mathrm{original} is the energy consumption before the adjustment.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONSUMERS/index.html b/docs/about/references/keywords/CONSUMERS/index.html new file mode 100644 index 0000000000..346e622d00 --- /dev/null +++ b/docs/about/references/keywords/CONSUMERS/index.html @@ -0,0 +1,25 @@ + + + + + +CONSUMERS | eCalc™ Docs + + + + +

    CONSUMERS

    +

    INSTALLATIONS / +GENERATORSETS / +CONSUMERS

    +
    RequiredChild ofChildren/Options
    YesGENERATORSETSCATEGORY
    NAME
    ENERGY_USAGE_MODEL
    +

    Description

    +

    Consumers getting electrical power from the generator set. The attributes NAME, +CATEGORY and ENERGY_USAGE_MODEL +are all required

    +

    Format

    +
    CONSUMERS:
    - NAME: <consumer name>
    CATEGORY: <category>
    ENERGY_USAGE_MODEL: <energy usage model>
    +

    Example

    +
    CONSUMERS:
    - NAME: SomeElectricalConsumer
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    - NAME: SomeOtherElectricalConsumer
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    ...
    - NAME: ElectricalConsumerN
    CATEGORY: MISCELLANEOUS
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONSUMPTION_RATE_TYPE/index.html b/docs/about/references/keywords/CONSUMPTION_RATE_TYPE/index.html new file mode 100644 index 0000000000..db3021ef1a --- /dev/null +++ b/docs/about/references/keywords/CONSUMPTION_RATE_TYPE/index.html @@ -0,0 +1,42 @@ + + + + + +CONSUMPTION_RATE_TYPE | eCalc™ Docs + + + + +

    CONSUMPTION_RATE_TYPE

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +CONSUMPTION_RATE_TYPE

    +
    RequiredChild ofChildren/Options
    NoENERGY_USAGE_MODELNone
    +

    Description

    +
    important

    You must have good control of the input rates - which are stream day rates and which are calendar day rates - and +specify CALENDAR_DAY as input if necessary.

    +

    When REGULARITY is used,the consumption rate type may be specified for +DIRECT ENERGY USAGE MODEL(LOAD or FUELRATE) +by setting CONSUMPTION_RATE_TYPE to either CALENDAR_DAY or +STREAM_DAY.

    +

    The default behaviour, is that these will be interpreted as STREAM_DAY if not set explicitly. This will result in +fuel rates being multiplied by regularity to obtain (average) calendar day fuel rates, while the loads will be kept +stream day when passed to the generator set calculation.

    +
    note

    CALENDAR_DAY: The average rate over a period after adjusting for operating conditions that keeps the +average throughput below the maximum achievable throughput for a single day, known as stream day.

    STREAM_DAY: The actual rate at a given moment. When multiplied with a REGULARITY +factor you get the calendar day rate which needs to be used when evaluating the economics of a process unit.

    stream day rate=calendar day rateregularitystream\ day\ rate = \frac{calendar\ day\ rate}{regularity}
    +

    Format

    +
    CONSUMPTION_RATE_TYPE: <consumption_rate_type>
    +

    Where <consumption_rate_type> can either be CALENDAR_DAY or STREAM_DAY.

    +

    Example

    +

    Specifying consumption rate type for fixed/direct consumers:

    +
    LOAD: 10
    CONSUMPTION_RATE_TYPE: CALENDAR_DAY
    ...
    FUELRATE: 10000
    CONSUMPTION_RATE_TYPE: STREAM_DAY
    +

    Given CALENDAR_DAY input the rate will be converted to STREAM_DAY when evaluating, and any fuel rate in output +will be converted back again to CALENDAR_DAY rate equivalent in the results.

    +

    Given STREAM_DAY input, and a REGULARITY factor of 0.5 (50%), the +interpretation is that the process unit will run at full capacity half of the time. The resulting fuel rate reported +for a fuel consumer will be halved compared to 1 (100%) regularity.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONTROL_MARGIN/index.html b/docs/about/references/keywords/CONTROL_MARGIN/index.html new file mode 100644 index 0000000000..873bd4d475 --- /dev/null +++ b/docs/about/references/keywords/CONTROL_MARGIN/index.html @@ -0,0 +1,34 @@ + + + + + +CONTROL_MARGIN | eCalc™ Docs + + + + +

    CONTROL_MARGIN

    +

    MODELS / +[...] / +STAGES

    +

    Description

    +

    This keyword defines the surge control margin for a variable speed compressor chart.

    +

    The CONTROL_MARGIN behaves as an alternate to the minimum flow line: The input will be 'cropped' to only include points to the right of the control line - modelling recirculation (ASV) from the correct control line.

    +

    The CONTROL_MARGIN is given as a percentage or fraction (CONTROL_MARGIN_UNIT) of the rate difference between minimum- and maximum flow, +for the given speed. It is used to calculate the increase in minimum flow for each individual speed curve. +It is defined when setting up the stages in a Variable speed compressor train model or Variable speed compressor train model with multiple streams and pressures.

    +

    It is currently only possible to define a surge control margin for variable speed compressors.

    +

    See Surge control margin for variable speed compressor chart for more details.

    +

    Use in Variable speed compressor train model

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Default value is zero>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    ....
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: fluid_model
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 20
    COMPRESSOR_CHART: 1_stage_chart
    CONTROL_MARGIN: 0.1
    CONTROL_MARGIN_UNIT: FRACTION
    ....
    +

    Use in Variable speed compressor train model with multiple streams and pressures

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ....
    STREAMS:
    - NAME: <name of stream 1>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - NAME: <name of stream 2>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - ...
    - NAME: <name of stream N>
    TYPE: OUTGOING # NB: No fluid definition for outgoing streams!
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <Optional>
    - <reference stream from STREAMS for one in- or outgoing stream. Optional>
    - <reference stream from STREAMS for another in- or outgoing stream. Optional>
    CONTROL_MARGIN: <Default value 0.0>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <pressure control>
    DOWNSTREAM_PRESSURE_CONTROL: <pressure control>
    - ...
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ....
    STREAMS:
    - NAME: 1_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_1
    - NAME: 3_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_2
    - NAME: 2_stage_outlet
    TYPE: OUTGOING
    STAGES:
    - COMPRESSOR_CHART: 1_stage_chart
    INLET_TEMPERATURE: 20
    STREAM:
    - 1_stage_inlet
    CONTROL_MARGIN: 10
    CONTROL_MARGIN_UNIT: PERCENTAGE
    - COMPRESSOR_CHART: 2_stage_chart
    INLET_TEMPERATURE: 30
    CONTROL_MARGIN: 15
    CONTROL_MARGIN_UNIT: PERCENTAGE
    - COMPRESSOR_CHART: 3_stage_chart
    INLET_TEMPERATURE: 35
    STREAM:
    - 2_stage_outlet
    - 3_stage_inlet
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage
    - COMPRESSOR_CHART: 4_stage_chart
    INLET_TEMPERATURE: 15
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONTROL_MARGIN_UNIT/index.html b/docs/about/references/keywords/CONTROL_MARGIN_UNIT/index.html new file mode 100644 index 0000000000..08e567b6a4 --- /dev/null +++ b/docs/about/references/keywords/CONTROL_MARGIN_UNIT/index.html @@ -0,0 +1,26 @@ + + + + + +CONTROL_MARGIN_UNIT | eCalc™ Docs + + + + +

    CONTROL_MARGIN_UNIT

    +

    MODELS / +[...] / +STAGES

    +

    Description

    +

    This keyword defines the unit of the surge control margin for a variable speed compressor chart.

    +

    The CONTROL_MARGIN_UNIT is given as a percentage or fraction of the rate difference between minimum- and maximum flow.

    +

    It is defined when setting up the stages in a Variable speed compressor train model or Variable speed compressor train model with multiple streams and pressures.

    +

    It is currently only possible to define a surge control margin for variable speed compressors.

    +

    See Surge control margin for variable speed compressor chart for more details.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Default value is zero>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    ....
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: fluid_model
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 20
    COMPRESSOR_CHART: 1_stage_chart
    CONTROL_MARGIN: 0.1
    CONTROL_MARGIN_UNIT: FRACTION
    ....
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CROSSOVER/index.html b/docs/about/references/keywords/CROSSOVER/index.html new file mode 100644 index 0000000000..9ec047ba8b --- /dev/null +++ b/docs/about/references/keywords/CROSSOVER/index.html @@ -0,0 +1,24 @@ + + + + + +CROSSOVER | eCalc™ Docs + + + + +

    CROSSOVER

    +

    INSTALLATIONS / +[...] / ENERGY_USAGE_MODEL / +OPERATIONAL_SETTINGS / CROSSOVER

    +
    RequiredChild ofChildren/Options
    YesOPERATIONAL_SETTINGSNone
    +

    Description

    +

    CROSSOVER specifies what rates will be crossed over from one consumer to another if rate capacity is exceed. +If the energy consumption calculation is not successful for a consumer, and the consumer has a valid cross-over defined, the consumer will be allocated its maximum rate and the exceeding rate will be added to the cross-over consumer. +To avoid loops, a consumer can only be either receiving or giving away rate. For a cross-over to be valid, the discharge pressure at the consumer "receiving" overshooting rate must be higher than or equal to the discharge pressure of the "sending" consumer. This is because it is possible to choke pressure down to meet the outlet pressure in a flow line with lower pressure, but not possible to "pressure up" in the crossover flow line. Some examples show how the crossover logic works:

    +

    Crossover is given as and list of integer values for the first position is the first consumer, second position is the second consumer, etc. The number specifies which consumer to send cross-over flow to, and 0 signifies no cross-over possible. Note that we use 1-index here.

    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT
    OPERATIONAL_SETTINGS:
    ...
    CROSSOVER: [3, 3, 0]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CURVE/index.html b/docs/about/references/keywords/CURVE/index.html new file mode 100644 index 0000000000..6502f124aa --- /dev/null +++ b/docs/about/references/keywords/CURVE/index.html @@ -0,0 +1,20 @@ + + + + + +CURVE | eCalc™ Docs + + + + +

    CURVE

    +

    Description

    +

    When using a detailed single speed compressor model, it is necessary to specify the single speed COMPRESSOR CHART. This can be defined from a .csv file, or it can be defined directly in the YAML file. +In either case, the keyword CURVE needs to be used. If a .csv file is being used, under the CURVE keyword, FILE must be used. If specified directly in the YAML file, SPEED, RATE, HEAD and EFFICIENCY must be defined.

    +

    Format

    +
    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    ...
    CURVE:
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>

    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    ...
    CURVE:
    - FILE: <filepath to compressor curve>
    +

    Example

    +
    MODELS:
    - NAME: predefined_single_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    ...
    CURVE:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]

    - NAME: compressor_chart
    TYPE: COMPRESSOR_CHART
    ...
    CURVE:
    - FILE: compressor_chart.csv
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CURVES/index.html b/docs/about/references/keywords/CURVES/index.html new file mode 100644 index 0000000000..a619ada95d --- /dev/null +++ b/docs/about/references/keywords/CURVES/index.html @@ -0,0 +1,20 @@ + + + + + +CURVES | eCalc™ Docs + + + + +

    CURVES

    +

    Description

    +

    When using a detailed variable speed compressor model, it is necessary to specify the variable speed COMPRESSOR CHART. This can be defined from a .csv file, or it can be defined directly in the YAML file. +In either case, the keyword CURVES needs to be used, and curves for at least two different speeds must be defined. If a .csv file is being used, under the CURVES keyword, FILE must be used. If specified directly in the YAML file, SPEED, RATE, HEAD and EFFICIENCY must be defined for each speed.

    +

    Format

    +
    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    ...
    CURVES:
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>

    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    ...
    CURVES:
    - FILE: <filepath to compressor curve>
    +

    Example

    +
    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    ...
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    - SPEED: 9886
    RATE: [3708, 4502, 4993.6, 5507, 5924]
    HEAD: [13845, 13182, 12425, 11276, 10054]
    EFFICIENCY: [ 0.72, 0.75, 0.748, 0.73, 0.70]

    - NAME: compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    ...
    CURVES:
    - FILE: compressor_chart.csv
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/DIRECT_EMITTERS/index.html b/docs/about/references/keywords/DIRECT_EMITTERS/index.html new file mode 100644 index 0000000000..2b73f0fcb4 --- /dev/null +++ b/docs/about/references/keywords/DIRECT_EMITTERS/index.html @@ -0,0 +1,30 @@ + + + + + +DIRECT_EMITTERS | eCalc™ Docs + + + + +

    DIRECT_EMITTERS

    +

    Deprecated from eCalc v8.7 (changed name to VENTING_EMITTERS).

    +

    INSTALLATIONS / +DIRECT_EMITTERS

    +
    RequiredChild ofChildren/Options
    YesINSTALLATIONSNAME
    EMISSION_NAME
    CATEGORY
    EMITTER_MODEL
    +
    important
      +
    • eCalc version 8.7: DIRECT_EMITTERS are renamed to VENTING_EMITTERS.
    • +
    • eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before.
    • +
    +

    Description

    +

    The DIRECT_EMITTERS keyword covers the direct emissions on the installation +that are not consuming energy. The attributes NAME, +EMISSION_NAME, CATEGORY and +EMITTER_MODEL are required.

    +

    Format

    +
    DIRECT_EMITTERS:
    - NAME: <emitter name>
    EMISSION_NAME: <emission name>
    CATEGORY: <category>
    EMITTER_MODEL: <emitter model>
    +

    Example

    +
    DIRECT_EMITTERS:
    - NAME: SomeDirectEmitter
    EMISSION_NAME: CH4
    CATEGORY: COLD-VENTING-FUGITIVE
    EMITTER_MODEL:
    <emitter model data>
    ...
    - NAME: SomeOtherDirectEmitter
    EMISSION_NAME: C2H6
    CATEGORY: COLD-VENTING-FUGITIVE
    EMITTER_MODEL:
    <emitter model data>
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/DISCHARGE_PRESSURE/index.html b/docs/about/references/keywords/DISCHARGE_PRESSURE/index.html new file mode 100644 index 0000000000..4107103219 --- /dev/null +++ b/docs/about/references/keywords/DISCHARGE_PRESSURE/index.html @@ -0,0 +1,26 @@ + + + + + +DISCHARGE_PRESSURE | eCalc™ Docs + + + + +

    DISCHARGE_PRESSURE

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +[...] / DISCHARGE_PRESSURE

    +
    RequiredChild ofChildren/Options
    YesENERGY_USAGE_MODEL
    OPERATIONAL_SETTINGS
    None
    +

    Description

    +

    Used to define the discharge pressure for some ENERGY_USAGE_MODEL +types and in OPERATIONAL_SETTINGS using an +Expressions.

    +

    Format

    +
    DISCHARGE_PRESSURE: <discharge pressure expression>
    +

    Example

    +
    DISCHARGE_PRESSURE: 200 # [bar]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL/index.html b/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL/index.html new file mode 100644 index 0000000000..228b4ae895 --- /dev/null +++ b/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL/index.html @@ -0,0 +1,25 @@ + + + + + +DOWNSTREAM_PRESSURE_CONTROL | eCalc™ Docs + + + + +

    DOWNSTREAM_PRESSURE_CONTROL

    +

    MODELS / +[...] / +INTERSTAGE_CONTROL_PRESSURE +/ DOWNSTREAM_PRESSURE_CONTROL

    +

    Description

    +

    This keyword is used only for VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES type. It is used within the INTERSTAGE_CONTROL_PRESSURE keyword.

    +

    The pressure control method downstream (after) the interstage pressure is specified in this keyword. +For more explanation see Variable speed compressor train model with multiple streams and pressures.

    +

    Format

    +
    MODELS:
    - NAME: <compressor model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    ...
    INTERSTAGE_CONTROL_PRESSURE:
    DOWNSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>
    ...
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    ...
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: UPSTREAM_CHOKE
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EFFICIENCY/index.html b/docs/about/references/keywords/EFFICIENCY/index.html new file mode 100644 index 0000000000..bcad05e630 --- /dev/null +++ b/docs/about/references/keywords/EFFICIENCY/index.html @@ -0,0 +1,29 @@ + + + + + +EFFICIENCY | eCalc™ Docs + + + + +

    EFFICIENCY

    +

    Description

    +

    EFFICIENCY is a keyword that is used defining PUMP and COMPRESSOR CHARTS. +Efficiency can either be given as a fraction or percentage.

    +

    For compressors, it is used in two separate ways under the MODELS or section:

    +
      +
    • Defining the UNITS of EFFICIENCY
    • +
    • Defining the set of values for EFFICIENCY under CURVES section. Here, this must be given as a set of values whose length (number of variables) match the correlating HEAD and RATE values.
    • +
    +

    For pumps, it is defined under the FACILITY_INPUTS section.

    +

    Format

    +

    COMPRESSORS

    +
    MODELS:
    - NAME: <compressor chart name>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: <compressor chart type>
    UNITS:
    ...
    EFFICIENCY: <FRACTION or PERCENTAGE>
    CURVES:
    ...
    EFFICIENCY: <set of values>
    +

    PUMPS

    +
    FACILITY_INPUTS:
    - NAME: <FACILITY_INPUT_NAME>
    FILE: <path_to_file.csv>
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    ...
    EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>
    +

    Example

    +
    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/ELECTRICITY2FUEL/index.html b/docs/about/references/keywords/ELECTRICITY2FUEL/index.html new file mode 100644 index 0000000000..b1ca6b1611 --- /dev/null +++ b/docs/about/references/keywords/ELECTRICITY2FUEL/index.html @@ -0,0 +1,36 @@ + + + + + +ELECTRICITY2FUEL | eCalc™ Docs + + + + +

    ELECTRICITY2FUEL

    +

    INSTALLATIONS / +GENERATORSETS / +ELECTRICITY2FUEL

    +
    RequiredChild ofChildren/Options
    YesGENERATORSETSNone
    +

    Description

    +

    ELECTRICITY2FUEL specifies the correlation between the electric power +delivered and the fuel consumed by a generator set.

    +
    note

    Note that this describes the relation for a set of generators and if there is more than one +generator, the power vs. fuel usually makes a "jump" when the capacity of the generator(s) is +exceeded and an additional generator is started.

    +

    ELECTRICITY2FUEL may be modelled with a constant function through time or +with different power vs. fuel relations for different time intervals.

    +

    Format

    +
    ELECTRICITY2FUEL: <facility_input_reference>
    +

    or

    +
    ELECTRICITY2FUEL:
    <DATE>: <facility_input_reference_1>
    <DATE>: <facility_input_reference_2>
    +

    Example

    +

    Example 1

    +
    ELECTRICITY2FUEL: generatorset_electricity_to_fuel_reference
    +

    Example 2

    +
    ELECTRICITY2FUEL:
    2001-01-01: generatorset_electricity_to_fuel_reference1
    2005-01-01: generatorset_electricity_to_fuel_reference2
    +

    Where generatorset_electricity_to_fuel_reference<N> is a FACILITY_INPUTS +of TYPE ELECTRICITY2FUEL.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMISSION/index.html b/docs/about/references/keywords/EMISSION/index.html new file mode 100644 index 0000000000..d8abc4007d --- /dev/null +++ b/docs/about/references/keywords/EMISSION/index.html @@ -0,0 +1,30 @@ + + + + + +EMISSION | eCalc™ Docs + + + + +

    EMISSION

    +

    New keyword from eCalc v8.8!

    +
    +

    INSTALLATIONS / +VENTING_EMITTERS

    +
    RequiredChild ofChildren/Options
    NoVENTING_EMITTERSNAME
    RATE
    +
    important
      +
    • From eCalc version 8.8: The new keyword EMISSION is a part of an updated definition of VENTING_EMITTERS.
    • +
    • eCalc version 8.7 and earlier: EMISSION-keyword cannot be used.
    • +
    +

    Description

    +

    The emission specifies the data to calculate the direct emissions on an installation. This data is used to set up +a function that may be evaluated for a set of time series and return an emission result.

    +

    The attributes NAME and RATE are required.

    +

    Format

    +
    EMISSION:
    - NAME: <emission name>
    RATE:
    VALUE: <emission rate>
    UNIT: <emission rate unit, default kg/d>
    TYPE: <emission rate type, default STREAM_DAY>
    +

    Example

    +
    EMISSION:
    - NAME: CH4
    RATE:
    VALUE: 4
    UNIT: kg/d
    TYPE: STREAM_DAY
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMISSIONS/index.html b/docs/about/references/keywords/EMISSIONS/index.html new file mode 100644 index 0000000000..d55adc4561 --- /dev/null +++ b/docs/about/references/keywords/EMISSIONS/index.html @@ -0,0 +1,25 @@ + + + + + +EMISSIONS | eCalc™ Docs + + + + +

    EMISSIONS

    +

    FUEL_TYPES / +EMISSIONS

    +
    RequiredChild ofChildren/Options
    NoFUEL_TYPESFACTOR
    NAME
    +

    Description

    +

    In EMISSIONS one or more emissions related to the use of fuel is specified as +a list. Each emission entry is required to have a NAME and a FACTOR.

    +

    Format

    +
    EMISSIONS:
    - NAME: <name>
    FACTOR: <factor>
    +

    Example

    +

    For example, if you want to add CO2 emissions associated to the usage of a FUEL_TYPES +you write the following:

    +
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.5 # [kg/Sm3]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMISSION_NAME/index.html b/docs/about/references/keywords/EMISSION_NAME/index.html new file mode 100644 index 0000000000..6b4b292471 --- /dev/null +++ b/docs/about/references/keywords/EMISSION_NAME/index.html @@ -0,0 +1,30 @@ + + + + + +EMISSION_NAME | eCalc™ Docs + + + + +

    EMISSION_NAME

    +

    Deprecated from eCalc v8.8 (is included in EMISSION).

    +
    +

    [...] / +EMISSION_NAME

    +
    RequiredChild ofChildren/Options
    YesVENTING_EMITTERSNone
    +
    important
    +

    Description

    +

    Name of an entity.

    +

    Format

    +
    EMISSION_NAME: <name>
    +

    Example

    +

    Usage in VENTING_EMITTERS:

    +
    VENTING_EMITTERS:
    - EMISSION_NAME: CH4
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMISSION_RATE/index.html b/docs/about/references/keywords/EMISSION_RATE/index.html new file mode 100644 index 0000000000..3f8c634ec6 --- /dev/null +++ b/docs/about/references/keywords/EMISSION_RATE/index.html @@ -0,0 +1,27 @@ + + + + + +EMISSION_RATE | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMITTER_MODEL/index.html b/docs/about/references/keywords/EMITTER_MODEL/index.html new file mode 100644 index 0000000000..c4ba769bf6 --- /dev/null +++ b/docs/about/references/keywords/EMITTER_MODEL/index.html @@ -0,0 +1,32 @@ + + + + + +EMITTER_MODEL | eCalc™ Docs + + + + +

    EMITTER_MODEL

    +

    Deprecated from eCalc v8.8 (replaced by EMISSION).

    +
    +

    INSTALLATIONS / +[...] / +EMITTER_MODEL

    +
    RequiredChild ofChildren/Options
    NoVENTING_EMITTERSEMISSION_RATE
    +
    important
    +

    Description

    +

    The emitter model specifies the data to calculate the direct emissions on an installation. This data is used to set up +a function that may be evaluated for a set of time series and return an emission result.

    +

    The EMISSION_RATE describes the rate [kg/day] of emissions, and is required.

    +

    Format

    +
    EMITTER_MODEL:
    - EMISSION_RATE: <emission rate [kg/day]>
    +

    Example

    +
    EMITTER_MODEL:
    - EMISSION_RATE: 4 # [kg/day]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/END/index.html b/docs/about/references/keywords/END/index.html new file mode 100644 index 0000000000..7a407c9bf1 --- /dev/null +++ b/docs/about/references/keywords/END/index.html @@ -0,0 +1,28 @@ + + + + + +END | eCalc™ Docs + + + + +

    END

    +

    END

    +
    RequiredChild ofChildren/Options
    NoNoneNone
    +

    Description

    +

    Global end date for eCalc to stop energy and emission calculations. It is recommended that you have control of which date you want data to be calculated and exported for.

    +

    If you specify the end date as 2080-01-01, the last period to be calculated is 2079 is included in the output. The hours, minutes and seconds of the day are implicitly set to "00:00:00", so the counting ends at midnight on January 1st 2080 (2079-12-31 23:59:59).

    +

    You can provide a date that is after the global time vector, but it is recommended to set it to the end of your timeseries data. Normally the timeseries do not provide this information directly. The last timestep provided in a timeseries is e.g. 2079-01-01, which would often mean that the data changed at that point, +and will e.g. be valid 1 year from then (if we work with YEARLY output frequency). To make sure that eCalc stops at the correct place, you should therefore specify the exclusive date of the data.

    +

    The START keyword have similar behaviour.

    +

    If END is not specified, eCalc will make an educated (but possibly incorrect) guess on when the output data should end.

    +

    Format

    +
    END: <YYYY-MM-DD>
    +

    Example

    +

    Given an input dataset from 01-01-2000 - 01-01-2040, ignoring the last 20 years of data +can be achieved as follows:

    +
    END: 2020-01-01
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/ENERGYFUNCTION/index.html b/docs/about/references/keywords/ENERGYFUNCTION/index.html new file mode 100644 index 0000000000..e4801a191e --- /dev/null +++ b/docs/about/references/keywords/ENERGYFUNCTION/index.html @@ -0,0 +1,30 @@ + + + + + +ENERGYFUNCTION | eCalc™ Docs + + + + +

    ENERGYFUNCTION

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +ENERGYFUNCTION

    +
    RequiredChild ofChildren/Options
    NoENERGY_USAGE_MODELNone
    +

    Description

    +

    This refers to an energy function model defined in either FACILITY INPUTS or in MODELS used for ENERGY USAGE MODEL. +The following attributes can be utilised:

    + +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: <energy usage model type>
    ENERGYFUNCTION: <reference to energy function in facility inputs or models of compressor type>
    +

    Example

    +

    FACILITY_INPUTS:
    - NAME: compressor_model_reference
    TYPE: COMPRESSOR_TABULAR
    FILE: <file path>

    ...

    INSTALLATIONS:
    - NAME: InstallationA
    CATEGORY: FIXED
    FUEL: fuel_gas
    GENERATORSETS:
    - NAME: gensetA
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_model_reference
    ...

    FUELCONSUMERS:
    - NAME: compressor
    CATEGORY: GAS-DRIVEN-COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_model_reference
    ...

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/ENERGY_USAGE_MODEL/index.html b/docs/about/references/keywords/ENERGY_USAGE_MODEL/index.html new file mode 100644 index 0000000000..517946fd77 --- /dev/null +++ b/docs/about/references/keywords/ENERGY_USAGE_MODEL/index.html @@ -0,0 +1,38 @@ + + + + + +ENERGY_USAGE_MODEL | eCalc™ Docs + + + + +

    ENERGY_USAGE_MODEL

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL

    +
    RequiredChild ofChildren/Options
    YesFUELCONSUMERSCOMPRESSORS
    CONSUMERSCONDITION
    CONDITIONS
    CONSUMPTION_RATE_TYPE
    DISCHARGE_PRESSURE
    ENERGYFUNCTION
    FLUID_DENSITY
    FUELRATE
    LOAD
    OPERATIONAL_SETTINGS
    POWERLOSSFACTOR
    PUMPS
    RATE
    SUCTION_PRESSURE
    TOTAL_SYSTEM_RATE
    TYPE
    VARIABLES
    +

    Description

    +

    The energy usage model specifies the data to calculate the energy usage of a consumer. This data is used to set up a +function that may be evaluated for a set of time series and returns a result including the calculated energy usage.

    +

    The type of energy usage model is defined by TYPE, and which keywords are required/supported will be different +for each type. The available types are:

    +

    Energy usage model types:

    + +

    For all types, the keywords CONDITION, CONDITIONS and POWERLOSSFACTOR are optional and supported, and these will act +on the calculated energy usage after the calculated energy usage from the model defined by TYPE.

    +

    Temporal energy usage model

    +

    It is possible to update the energy model within a consumer over time, as long as the +ENERGY_USAGE_MODEL stays within one type. The TYPE cannot change over time. In case TYPE evolution is needed, we recommend that you split the model into two CONSUMERS.

    +
    ENERGY_USAGE_MODEL:
    2020-01-01:
    TYPE: TABULATED
    ENERGYFUNCTION: tabulated_energy_function_reference_initial
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_PROD
    2022-01-01:
    TYPE: TABULATED
    ENERGYFUNCTION: tabulated_energy_function_reference_new
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_PROD
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EXPRESSION/index.html b/docs/about/references/keywords/EXPRESSION/index.html new file mode 100644 index 0000000000..5efcef6d1a --- /dev/null +++ b/docs/about/references/keywords/EXPRESSION/index.html @@ -0,0 +1,25 @@ + + + + + +EXPRESSION | eCalc™ Docs + + + + +

    EXPRESSION

    +

    VARIABLES / +EXPRESSION

    +
    RequiredChild ofChildren/Options
    NoVARIABLESNone
    +

    Description

    +

    Expression for a variable<VARIABLES> using EXPRESSIONS

    +

    Format

    +
    EXPRESSION: <expression>
    +

    Example

    +

    With time series reference

    +
    EXPRESSION: time_series_ref_1;vector_name_1 {+} time_series_ref_2;vector_name_2 {*} (time_series_ref_3;vector_name_3 > 0)
    +

    With variable reference

    +
    EXPRESSION: $var.variable_name1 {+} $var.variable_name2
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EXTRAPOLATION/index.html b/docs/about/references/keywords/EXTRAPOLATION/index.html new file mode 100644 index 0000000000..0ae8040c31 --- /dev/null +++ b/docs/about/references/keywords/EXTRAPOLATION/index.html @@ -0,0 +1,27 @@ + + + + + +EXTRAPOLATION | eCalc™ Docs + + + + +

    EXTRAPOLATION

    +

    TIME_SERIES / +EXTRAPOLATION

    +
    RequiredChild ofChildren/Options
    N/ATIME_SERIESNone
    +

    Description

    +
    caution

    Only valid for TIME_SERIES of TYPE MISCELLANEOUS. For type +DEFAULT the keyword is not supported as input, and the functionality is defaulted to False.

    +

    Defines whether the rates in the source should be set to 0 after the last time step (False), or equal +to value at last time step after the time interval (True).

    +

    Format

    +
    EXTRAPOLATION: <True/False>
    +

    Requirements

    +
    TYPE set toEXTRAPOLATION default
    DEFAULTalways False
    MISCELLANEOUSFalse
    +

    Example

    +

    See the TIME_SERIES time_series_format.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FACILITY_INPUTS/index.html b/docs/about/references/keywords/FACILITY_INPUTS/index.html new file mode 100644 index 0000000000..42c6b2598c --- /dev/null +++ b/docs/about/references/keywords/FACILITY_INPUTS/index.html @@ -0,0 +1,34 @@ + + + + + +FACILITY_INPUTS | eCalc™ Docs + + + + +

    FACILITY_INPUTS

    +

    FACILITY_INPUTS

    +
    RequiredChild ofChildren/Options
    YesNoneADJUSTMENT
    FILE
    HEAD_MARGIN
    TYPE
    +

    Description

    +

    This part of the setup defines input files that characterize various facility elements. Each facility element is +specified in a list. These are later used as input in the INSTALLATIONS part of the setup by referencing their +NAME.

    +

    All facility inputs are in essence a CSV (Comma separated file) file that specifies input data to a model that +calculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple +supported types.

    +

    Supported types

    +

    The facility input type is defined using the TYPE keyword and defines the type of model applied +to the data in this file. The input files are in CSV (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file.

    +

    The supported types are:

    +
      +
    • ELECTRICITY2FUEL
    • +
    • TABULAR
    • +
    • COMPRESSOR_TABULAR
    • +
    • PUMP_CHART_SINGLE_SPEED
    • +
    • PUMP_CHART_VARIABLE_SPEED
    • +
    +

    See FACILITY INPUTS for details about each of the above supported types and their usage.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FACTOR/index.html b/docs/about/references/keywords/FACTOR/index.html new file mode 100644 index 0000000000..96adc49992 --- /dev/null +++ b/docs/about/references/keywords/FACTOR/index.html @@ -0,0 +1,39 @@ + + + + + +FACTOR | eCalc™ Docs + + + + +

    FACTOR

    +

    [...] / +FACTOR

    +

    Description

    +

    The keyword FACTOR can be used to add a multiplier. The +FACTOR keyword can be used in various places in the eCalc configuration file. +A factor can either be a number, or an expression <Expressions>.

    +
    Warning

    The FACTOR keyword will have slightly different behavior depending on in which keyword +it is used. Carefully read the documentation below!

    +

    Use in ADJUSTMENT

    +

    Adjustment of input data with a factor.

    +

    Use in EMISSIONS

    +

    A single value with unit kg/Sm3 defines the CO2 factor for the fuel gas used on the +installation. That is, how many kilograms of CO2 are emitted

    +

    Format

    +
    FACTOR: <VALUE>
    +

    Example

    +

    Use in ADJUSTMENT

    +

    Say you have input that that is of by 3% percentage. +You could fix this like:

    +
    NAME: some_facility_input
    FILE: filename.csv
    TYPE: FACILITY_INPUT_TYPE
    ADJUSTMENT:
    FACTOR: 1.03
    +

    The resulting energy consumption EadjustedE_\mathrm{adjusted}, i.e. fuel or power, will then be

    +Eadjusted=1.03×EoriginalE_\mathrm{adjusted} = 1.03 \times E_\mathrm{original} +

    where EoriginalE_\mathrm{original} is the energy consumption before the adjustment.

    +

    Use in EMISSIONS

    +

    Say your fuel emits 2.5 kg CO2 per Sm3 of burned fuel, you can model this like:

    +
    FUEL_TYPES:
    - NAME: my_fuel
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.5 # [kg/Sm3]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FILE/index.html b/docs/about/references/keywords/FILE/index.html new file mode 100644 index 0000000000..b5b0071411 --- /dev/null +++ b/docs/about/references/keywords/FILE/index.html @@ -0,0 +1,22 @@ + + + + + +FILE | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FLUID_DENSITY/index.html b/docs/about/references/keywords/FLUID_DENSITY/index.html new file mode 100644 index 0000000000..bc1807afdb --- /dev/null +++ b/docs/about/references/keywords/FLUID_DENSITY/index.html @@ -0,0 +1,24 @@ + + + + + +FLUID_DENSITY | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FLUID_MODEL/index.html b/docs/about/references/keywords/FLUID_MODEL/index.html new file mode 100644 index 0000000000..eab59a7844 --- /dev/null +++ b/docs/about/references/keywords/FLUID_MODEL/index.html @@ -0,0 +1,19 @@ + + + + + +FLUID_MODEL | eCalc™ Docs + + + + +

    FLUID_MODEL

    +

    Description

    +

    This keyword is necessary when defining a compressor model. It relates to a defined fluid model in the MODELS section. How a fluid model is defined is described in further detail in FLUID MODEL.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: <compressor model type>
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    ...
    +

    Example

    +
    MODELS:
    - NAME: fluid_model
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM

    - NAME: single_speed_compressor
    TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: fluid_model
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FUEL/index.html b/docs/about/references/keywords/FUEL/index.html new file mode 100644 index 0000000000..77d9816a9a --- /dev/null +++ b/docs/about/references/keywords/FUEL/index.html @@ -0,0 +1,29 @@ + + + + + +FUEL | eCalc™ Docs + + + + +

    FUEL

    +

    ... / +FUEL

    +

    Description

    +

    The FUEL keyword defines the fuel type that can be used in +INSTALLATIONS, GENERATORSETS, or FUELCONSUMERS. +It can be set directly and used for the entire time interval, or it can be set differently for different time intervals.

    +

    Format

    +
    FUEL: <fuel_type>
    +

    or

    +
    FUEL:
    <DATE>: <fuel_type>
    <DATE>: <fuel_type>
    +

    Example

    +

    Constant fuel type

    +
    FUEL: fuel_gas
    +

    Time-varying fuel type

    +

    This example assumes that two fuels have been defined: fuel_gas and diesel.

    +
    FUEL:
    1994-01-01: fuel_gas
    2000-01-01: diesel
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FUELCONSUMERS/index.html b/docs/about/references/keywords/FUELCONSUMERS/index.html new file mode 100644 index 0000000000..c9214153fa --- /dev/null +++ b/docs/about/references/keywords/FUELCONSUMERS/index.html @@ -0,0 +1,26 @@ + + + + + +FUELCONSUMERS | eCalc™ Docs + + + + +

    FUELCONSUMERS

    +

    INSTALLATIONS / +FUELCONSUMERS

    +

    Description

    +

    The FUELCONSUMERS keyword covers the fuel consumers on the installation +that are not generators. The attributes NAME, +ENERGY_USAGE_MODEL and +CATEGORY are required, while +FUEL is optional and may be used to +override the installation's default fuel type.

    +

    Format

    +
    FUELCONSUMERS:
    - NAME: <consumer name>
    CATEGORY: <category>
    ENERGY_USAGE_MODEL: <energy usage model>
    FUEL: <fuel specification>
    +

    Example

    +
    FUELCONSUMERS:
    - NAME: CompressorFuelConsumer
    CATEGORY: GAS-DRIVEN-COMPRESSOR
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    - NAME: FlareFuelConsumer
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    ...
    - NAME: SomeOtherFuelConsumer
    CATEGORY: MISCELLANEOUS
    FUEL: fuel_gas
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FUELRATE/index.html b/docs/about/references/keywords/FUELRATE/index.html new file mode 100644 index 0000000000..5f6dca02b4 --- /dev/null +++ b/docs/about/references/keywords/FUELRATE/index.html @@ -0,0 +1,28 @@ + + + + + +FUELRATE | eCalc™ Docs + + + + +

    FUELRATE

    +

    INSTALLATIONS +/ +[...] / +ENERGY_USAGE_MODEL / +FUELRATE

    +

    Description

    +

    Used for direct fuel energy usage models<ENERGY_USAGE_MODEL> to define fuel consumption directly with an +expression <Expressions>

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: <fuel rate expression [m3/day]>
    CONSUMPTION_RATE_TYPE: <consumption rate type>
    CONDITION: <condition expression>
    +

    Example

    +

    Constant fuel rate:

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: 100000 # [m3/day]
    +

    Fuel rate varying in time:

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: fueldata;FUEL_RATE # [m3/day]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FUEL_TYPES/index.html b/docs/about/references/keywords/FUEL_TYPES/index.html new file mode 100644 index 0000000000..97b4c1fe9d --- /dev/null +++ b/docs/about/references/keywords/FUEL_TYPES/index.html @@ -0,0 +1,21 @@ + + + + + +FUEL_TYPES | eCalc™ Docs + + + + +

    FUEL_TYPES

    +

    FUEL_TYPES

    +

    Description

    +

    This part of the setup specifies the various fuel types and associated emissions +used in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the +INSTALLATIONS part of the setup by its name.

    +

    The use of fuel can lead to one or more emission types, specified in EMISSIONS. +You can optionally specify a CATEGORY.

    +

    See FUEL TYPES for more details about usage.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/GENERATORSETS/index.html b/docs/about/references/keywords/GENERATORSETS/index.html new file mode 100644 index 0000000000..3f86dd50b5 --- /dev/null +++ b/docs/about/references/keywords/GENERATORSETS/index.html @@ -0,0 +1,24 @@ + + + + + +GENERATORSETS | eCalc™ Docs + + + + +

    GENERATORSETS

    +

    INSTALLATIONS / +GENERATORSETS

    +

    Description

    +

    Under GENERATORSETS one or +several generator sets (a 'set' of an engine of some sort and a generator) are specified in a list. +Each generator set requires three sub-keywords, ELECTRICITY2FUEL and +CONSUMERS and CATEGORY.

    +

    This keyword is optional. However, the only requirement is that each +installation must have at least one of GENERATORSETS +and FUELCONSUMERS.

    +

    See GENERATOR SETS for more details about usage.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/HCEXPORT/index.html b/docs/about/references/keywords/HCEXPORT/index.html new file mode 100644 index 0000000000..b31bdab1c7 --- /dev/null +++ b/docs/about/references/keywords/HCEXPORT/index.html @@ -0,0 +1,36 @@ + + + + + +HCEXPORT | eCalc™ Docs + + + + +

    HCEXPORT

    +

    INSTALLATIONS / +HCEXPORT

    +

    Description

    +

    HCEXPORT defines the export of hydrocarbons as a number of oil equivalents in Sm3. +This keyword is required for the output of emission intensity (i.e., kg CO2/boe). +This could be a single time series variable or an expression <expressions> containing multiple time series variables. +Typically it would be the sum of exported oil and gas in units of oil equivalents.

    +
    What is hydrocarbon export?

    Hydrocarbon export is the oil equivalents of what is exported for sale and only these volumes should +be included here. I.e., it is important to distinguish between produced gas and sales gas. +See GL0093 in Docmap.

    +

    Format

    +
    HCEXPORT: <EXPRESSION>  # [Sm3/day]
    +

    or

    +
    HCEXPORT:
    <DATE>: <EXPRESSION> # [Sm3/day]
    <DATE>: <EXPRESSION> # [Sm3/day]
    +

    Example

    +

    Basic usage

    +
    HCEXPORT: SIM;OIL_PROD {+} SIM;GAS_SALES {/} 1000
    +

    With time dependency

    +

    In this example the gas export starts later than production start up:

    +
    HCEXPORT:
    2001-01-01: SIM1;OIL_PROD
    2005-01-01: SIM2:OIL_PROD {+} SIM1;GAS_SALES {/} 1000
    +

    Full example

    +

    Example showing HCEXPORT the modelling hierarchy:

    +
    INSTALLATIONS:
    - NAME: installation_A
    FUEL: fuel_gas
    HCEXPORT: SIM;OIL_PROD:FIELD_A {+} SIM;GAS_SALES:FIELD_A {/} 1000
    GENERATORSETS:
    <Data for the generator sets to be put her>
    FUELCONSUMERS:
    <Data for the fuel consumers to be put here>
    - NAME: installation_B
    HCEXPORT: SIM;OIL_PROD:FIELD_B {+} SIM;GAS_SALES:FIELD_B{/} 1000
    GENERATORSETS:
    <Data for the generator sets to be put her>
    FUELCONSUMERS:
    <Data for the fuel consumers to be put here>
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/HEAD/index.html b/docs/about/references/keywords/HEAD/index.html new file mode 100644 index 0000000000..7377d57f59 --- /dev/null +++ b/docs/about/references/keywords/HEAD/index.html @@ -0,0 +1,30 @@ + + + + + +HEAD | eCalc™ Docs + + + + +

    HEAD

    +

    Description

    +

    HEAD is a keyword that is used defining PUMP and COMPRESSOR CHARTS. +Head can either be given as a M, KJ_PER_KG, JOULE_PER_KG.

    +

    For compressors, it is used in two separate ways under the MODELS or section:

    +
      +
    • Defining the UNITS of HEAD
    • +
    • Defining the set of values for HEAD under CURVES section. Here, this must be given as a set of values whose length (number of variables) match the correlating EFFICIENCY and RATE values.
    • +
    +

    For pumps, it is defined under the FACILITY_INPUTS section.

    +

    Format

    +

    COMPRESSORS

    +
    MODELS:
    - NAME: <name of chart, for reference>
    ...
    UNITS:
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    ...
    ....
    +

    PUMPS

    +
    FACILITY_INPUTS:
    - NAME: <pump chart name>
    ...
    UNITS:
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    ...
    +

    Example

    +

    COMPRESSORS

    +
    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/HEAD_MARGIN/index.html b/docs/about/references/keywords/HEAD_MARGIN/index.html new file mode 100644 index 0000000000..27cf13c82d --- /dev/null +++ b/docs/about/references/keywords/HEAD_MARGIN/index.html @@ -0,0 +1,29 @@ + + + + + +HEAD_MARGIN | eCalc™ Docs + + + + +

    HEAD_MARGIN

    +

    FACILITY_INPUTS / +HEAD_MARGIN

    +

    Description

    +

    When calibrating pump charts to historical data, the head values at maximum speed +could be put in the cloud of data to be unbiased. However, eCalc will treat all +head values above the maximum defined area in the chart infeasible (i.e., +outside pump capacity). To mitigate this when running through historical data for +power calibration, one can adjust the head margin with this keyword.

    +

    Calculated head values above maximum head values from the chart will be set equal to +maximum head values before power calculations if they are within the margin given. +Calculated head values larger than maximum + margin will still be infeasible.

    +

    Format

    +

    The head margin can be specified in mlc (meter liquid column):

    +
    HEAD_MARGIN: <margin>
    +

    Example

    +
        NAME: pump_name
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE
    FILE: <path_to_chart_file>.csv
    HEAD_MARGIN: 10.0
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/INFLUENCE_TIME_VECTOR/index.html b/docs/about/references/keywords/INFLUENCE_TIME_VECTOR/index.html new file mode 100644 index 0000000000..17803896fb --- /dev/null +++ b/docs/about/references/keywords/INFLUENCE_TIME_VECTOR/index.html @@ -0,0 +1,23 @@ + + + + + +INFLUENCE_TIME_VECTOR | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/INLET_TEMPERATURE/index.html b/docs/about/references/keywords/INLET_TEMPERATURE/index.html new file mode 100644 index 0000000000..607b631d0b --- /dev/null +++ b/docs/about/references/keywords/INLET_TEMPERATURE/index.html @@ -0,0 +1,22 @@ + + + + + +INLET_TEMPERATURE | eCalc™ Docs + + + + +

    INLET_TEMPERATURE

    +

    MODELS / INLET_TEMPERATURE

    +
    RequiredChild ofChildren/Options
    YesMODELSNone
    +

    Description

    +

    This is a keyword used in COMPRESSOR MODELLING. It is a necessary input parameter which describes the inlet temperature to a compressor stage. Temperature must be given in oC.

    +

    As of now, this is can only be given as a single value. Time-series are not accepted here.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    ...
    +

    Example

    +
    MODELS:
    - NAME: compressor_train
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 20 #degC
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/INSTALLATIONS/index.html b/docs/about/references/keywords/INSTALLATIONS/index.html new file mode 100644 index 0000000000..ef3218878a --- /dev/null +++ b/docs/about/references/keywords/INSTALLATIONS/index.html @@ -0,0 +1,19 @@ + + + + + +INSTALLATIONS | eCalc™ Docs + + + + +

    INSTALLATIONS

    +

    INSTALLATIONS

    +

    Description

    +

    In INSTALLATIONS the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation.

    +

    The structure of the keywords under installations +is linked to the structure in the general consumer overview for an installation.

    +

    See INSTALLATIONS for more details about usage.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/INTERPOLATION_TYPE/index.html b/docs/about/references/keywords/INTERPOLATION_TYPE/index.html new file mode 100644 index 0000000000..b58ece488b --- /dev/null +++ b/docs/about/references/keywords/INTERPOLATION_TYPE/index.html @@ -0,0 +1,47 @@ + + + + + +INTERPOLATION_TYPE | eCalc™ Docs + + + + +

    INTERPOLATION_TYPE

    +

    TIME_SERIES / +INTERPOLATION_TYPE

    +

    New in v8.1, previously known as RATE_INTERPOLATION_TYPE that was renamed to INTERPOLATION_TYPE.

    +

    Description

    +
    Caution

    Only valid for CSV data of source MISCELLANEOUS. For TIME_SERIES of TYPE +DEFAULT the keyword is not allowed as input. The following applies:

      +
    • MISCELLANEOUS: Interpolation type is mandatory.
    • +
    • DEFAULT: Interpolation type not allowed. Default RIGHT is used.
    • +
    +
    Caution

    Different data types may require different types of interpolation. While reservoir rates are +typically interpolated RIGHT or LEFT, other data such as pressure is often interpolated +linearly (LINEAR). Data that should be interpolated differently must be specified in +different input files, as it is not possible to have multiple interpolation types for vectors +within the same file.

    +

    Rates are given at defined time steps in the data source but are in essence valid for a time +interval. The INTERPOLATION_TYPE +will determine how rates are interpolated between the given time steps.

    +
      +
    • LEFT: The rate given at the current time step is defining the rate in the time interval between the current and +previous time step. This is in data science also known as backwards filling of missing values.
    • +
    • RIGHT: The rate given at the current time step is defining the rate in the time interval between the current and +next time step. This is in data science also known as forward filling of missing values.
    • +
    • LINEAR: The rate will be linearly interpolated between the time steps.
    • +
    +

    The plot below shows how the different choices for INTERPOLATION_TYPE works in practice.

    +

    +

    Format

    +
    INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>
    +

    Requirements

    +

    INTERPOLATION_TYPE has to be specified if +TYPE is set to MISCELLANEOUS.

    +

    INTERPOLATION_TYPE can not be specified if TYPE is set to DEFAULT.

    +

    Example

    +

    See the TIME_SERIES time_series_format.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE/index.html b/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE/index.html new file mode 100644 index 0000000000..39c796aad0 --- /dev/null +++ b/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE/index.html @@ -0,0 +1,37 @@ + + + + + +INTERSTAGE_CONTROL_PRESSURE | eCalc™ Docs + + + + +

    INTERSTAGE_CONTROL_PRESSURE

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / [...] / +INTERSTAGE_CONTROL_PRESSURE

    +

    Description

    +

    This keyword can only be utilised for a VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES type, and it is used in two separate sections:

    +
      +
    • MODELS - to define the upstream and downstream pressure control methods
    • +
    • ENERGY_USAGE_MODEL - to define the interstage pressure
    • +
    +

    Use in MODELS

    +
    note

    This keyword cannot be specified for the first stage, and it may only be used once in a given compression train.

    +

    Under the INTERSTAGE_CONTROL_PRESSURE keyword, the UPSTREAM_PRESSURE_CONTROL and DOWNSTREAM_PRESSURE_CONTROL keywords can be specified.

    +

    Format

    +
    MODELS:
    - NAME: <compressor model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>
    ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>
    DOWNSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>
    ...
    +

    The reason why upstream and downstream pressure control methods need to be specified is that the compression train is essentially split in two - before and after the interstage pressure. Thus, a control method for each "side" of the model needs to be defined. +See Variable speed compressor train model with multiple streams and pressures for more details.

    +

    Use in ENERGY_USAGE_MODEL

    +

    Within the ENERGY_USAGE_MODEL section (only when TYPE is set to VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES) the actual value for the interstage pressure is set in bar. +This can either be a single value or an EXPRESSION.

    +

    Format

    +
          - NAME: <reference name>
    ...
    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    INTERSTAGE_CONTROL_PRESSURE: <interstage control pressure value/expression>
    ...
    +

    Example

    +
          - NAME: export_compressor
    ...
    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    SUCTION_PRESSURE: 10 # bar
    INTERSTAGE_CONTROL_PRESSURE: 40 #bar
    DISCHARGE_PRESSURE: 120 #bar
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/LOAD/index.html b/docs/about/references/keywords/LOAD/index.html new file mode 100644 index 0000000000..c1b8134873 --- /dev/null +++ b/docs/about/references/keywords/LOAD/index.html @@ -0,0 +1,24 @@ + + + + + +LOAD | eCalc™ Docs + + + + +

    LOAD

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +LOAD

    +

    Description

    +

    Used for direct load energy usage models<ENERGY_USAGE_MODEL> to define electrical power load directly +with an expression <Expressions>

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: <load expression>
    CONSUMPTION_RATE_TYPE: <consumption rate type>
    CONDITION: <condition expression>
    POWERLOSSFACTOR: <power loss factor (number)>
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 10
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/LOWER_HEATING_VALUE/index.html b/docs/about/references/keywords/LOWER_HEATING_VALUE/index.html new file mode 100644 index 0000000000..31ff55f786 --- /dev/null +++ b/docs/about/references/keywords/LOWER_HEATING_VALUE/index.html @@ -0,0 +1,21 @@ + + + + + +LOWER_HEATING_VALUE | eCalc™ Docs + + + + +

    LOWER_HEATING_VALUE

    +

    Description

    +

    LOWER_HEATING_VALUE is a required to be specified under the TURBINE_MODEL keyword. +This must be specified in MJ/Sm3

    +

    This can only be inputted as a single value and dictates the quantity of thermal energy available after burning a standard cubic metre of fuel (natural gas in this gas).

    +

    Format

    +
    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    ...
    LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>
    +

    Example

    +
    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE/index.html b/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE/index.html new file mode 100644 index 0000000000..d6ef06b7db --- /dev/null +++ b/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE/index.html @@ -0,0 +1,27 @@ + + + + + +MAXIMUM_DISCHARGE_PRESSURE | eCalc™ Docs + + + + +

    MAXIMUM_DISCHARGE_PRESSURE

    +

    MODELS / +MAXIMUM_DISCHARGE_PRESSURE

    +

    Description

    +

    MAXIMUM_DISCHARGE_PRESSURE sets the highest possible discharge pressure that a compressor can deliver. +In reality, setting the maximum discharge pressure can be to avoid excessively high pressures which can be a safety concern on an installation.

    +

    Functionality

    +

    This is an optional setting and is only supported for SINGLE SPEED COMPRESSORS, and only if the PRESSURE_CONTROL is DOWNSTREAM_CHOKE.

    +
      +
    • If MAXIMUM_DISCHARGE_PRESSURE has been defined and if any of the inputted discharge pressures exceeds the maximum value, a ValueError message will be raised.
    • +
    • If any of the input rates and suction pressures result in a discharge pressure which is above the MAXIMUM_DISCHARGE_PRESSURE, the suction pressure will be reduced until the calculations provide a discharge pressure below the maximum value (assuming an upstream choke can handle this).
    • +
    • The outlet stream will then be further choked from the MAXIMUM_DISCHARGE_PRESSURE to the target discharge pressure using the DOWNSTREAM_CHOKE pressure control.
    • +
    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    PRESSURE_CONTROL: <DOWNSTREAM_CHOKE>
    MAXIMUM_DISCHARGE_PRESSURE: <Maximum discharge pressure in bar>
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model>
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE/index.html b/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE/index.html new file mode 100644 index 0000000000..2da7061309 --- /dev/null +++ b/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE/index.html @@ -0,0 +1,26 @@ + + + + + +MAXIMUM_PRESSURE_RATIO_PER_STAGE | eCalc™ Docs + + + + +

    MAXIMUM_PRESSURE_RATIO_PER_STAGE

    +

    MODELS / +MAXIMUM_PRESSURE_RATIO_PER_STAGE

    +

    Description

    +

    MAXIMUM_PRESSURE_RATIO_PER_STAGE is used in the process of determining (at run time) the number of compressors +in a SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN +with unknown stages. The number of compressors is set such that there are just enough compressors to ensure no pressure ratios are above the given +MAXIMUM_PRESSURE_RATIO_PER_STAGE.

    +

    Functionality

    +

    This is an optional setting and is only supported for SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN with unknown stages, i.e. if STAGES are not specified.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in [MODELS]>
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: <maximum pressure ratio per stage>
    COMPRESSOR_CHART: <reference to compressor chart model used for all stages, must be defined in [MODELS] or [FACILITY_INPUTS]>
    INLET_TEMPERATURE: <inlet temperature for all stages>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    ...
    +

    Example

    +
    MODELS:
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: some_fluid_model
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5
    COMPRESSOR_CHART: some_compressor_chart
    INLET_TEMPERATURE: 30
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/MODELS/index.html b/docs/about/references/keywords/MODELS/index.html new file mode 100644 index 0000000000..1ad16ca3bd --- /dev/null +++ b/docs/about/references/keywords/MODELS/index.html @@ -0,0 +1,35 @@ + + + + + +MODELS | eCalc™ Docs + + + + +

    MODELS

    +

    MODELS

    +

    Description

    +

    Each element is specified in a list. These are later used as input to other models, or in the +INSTALLATIONS part of the setup by referencing their +NAME.

    +

    This part of the setup specifies models not having any input data and/or multi level models, that is models which use +other models (from both MODELS and from FACILITY_INPUTS).

    +

    Format

    +
    MODELS:
    - NAME: <name of model, for reference>
    TYPE: <model type>
    <other keywords according to TYPE>
    +

    Supported Model types

    +

    The supported types are:

    +
      +
    • FLUID
    • +
    • COMPRESSOR_CHART
    • +
    • SINGLE_SPEED_COMPRESSOR_TRAIN
    • +
    • SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    • +
    • TURBINE
    • +
    • COMPRESSOR_WITH_TURBINE
    • +
    +

    The documentation of each of these is found on the Compressor Modelling page.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/NAME/index.html b/docs/about/references/keywords/NAME/index.html new file mode 100644 index 0000000000..59917460c8 --- /dev/null +++ b/docs/about/references/keywords/NAME/index.html @@ -0,0 +1,25 @@ + + + + + +NAME | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/OPERATIONAL_SETTINGS/index.html b/docs/about/references/keywords/OPERATIONAL_SETTINGS/index.html new file mode 100644 index 0000000000..ba083b7017 --- /dev/null +++ b/docs/about/references/keywords/OPERATIONAL_SETTINGS/index.html @@ -0,0 +1,83 @@ + + + + + +OPERATIONAL_SETTINGS | eCalc™ Docs + + + + +

    OPERATIONAL_SETTINGS

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +OPERATIONAL_SETTINGS

    +

    Description

    +

    Used to define the operational settings in an ENERGY_USAGE_MODEL +of type PUMP_SYSTEM or COMPRESSOR_SYSTEM.

    +

    The rate [Sm3/day] through each consumer in the system may be specified in two different ways, either directly using +RATES, or by defining the rate fraction<RATE_FRACTIONS> for each consumer which is then multiplied with the +total system rate<TOTAL_SYSTEM_RATE>.

    +

    The suction pressure may either be specified with SUCTION_PRESSURE +which will then be the common suction pressure for all consumers in the system. Alternatively, +SUCTION_PRESSURES may be used to specify one suction pressure expression per consumer.

    +

    The discharge pressure may either be specified with DISCHARGE_PRESSURE +which will then be the common discharge pressure for all consumers in the system. Alternatively, +DISCHARGE_PRESSURES may be used to specify one discharge pressure expression per consumer.

    +

    CROSSOVER may be used to specify if there are any available cross-overs between the consumers in this operational +setting.

    +

    FLUID_DENSITIES may be used for pump systems to specify one fluid density expression per pump.

    +

    For all keywords where there is one expression per consumer, RATES, RATE_FRACTIONS, SUCTION_PRESSURES, +DISCHARGE_PRESSURES and FLUID_DENSITIES, the expressions must be entered in a +list where the number of elements is equal to the number of compressors<COMPRESSORS>/pumps<PUMPS>

    +

    RATES

    +

    A list with one expression per consumer specifying the rate [Sm3/day] for each consumer. Use either RATES or RATE_FRACTIONS, +not both in one operational setting.

    +

    RATE_FRACTIONS

    +

    A list with one expression per consumer specifying the rate fraction for each consumer. If this is used, +TOTAL_SYSTEM_RATE for the ENERGY_USAGE_MODEL +is also required. Use either RATES or RATE_FRACTIONS, not both in one operational setting.

    +

    SUCTION_PRESSURES

    +

    A list with one expression per consumer specifying the suction pressure for each consumer. Use either SUCTION_PRESSURES or +SUCTION_PRESSURE, not both in the same operational setting.

    +

    Use SUCTION_PRESSURE to set the same suction pressure for all consumers in the system and +SUCTION_PRESSURES to specify one suction pressure expression per consumer.

    +

    DISCHARGE_PRESSURES

    +

    A list with one expression per consumer specifying the discharge pressure for each consumer. Use either DISCHARGE_PRESSURES +or DISCHARGE_PRESSURE, not both in the same operational setting.

    +

    Use DISCHARGE_PRESSURE to set the same discharge pressure for all consumers in the system and +DISCHARGE_PRESSURES to specify one discharge pressure expression per consumer.

    +

    FLUID_DENSITIES

    +

    Only supported for energy usage models<ENERGY_USAGE_MODEL> of type PUMP_SYSTEM. +A list with one expression per consumer specifying the fluid density for each consumer. If used, it will over-ride +FLUID_DENSITY for the PUMP_SYSTEM.

    +

    Use FLUID_DENSITY for the energy usage models<ENERGY_USAGE_MODEL> +to set one fixed fluid density for the entire system for all operational settings. Use +FLUID_DENSITIES for the operational setting<OPERATIONAL_SETTINGS> to vary the fluid density between consumers and operational settings.

    +

    CROSSOVER

    +

    CROSSOVER specifies if rates are to be crossed over to another consumer if rate capacity is exceeded. If the +energy consumption calculation is not successful for a consumer, and the consumer has a valid cross-over defined, the +consumer will be allocated its maximum rate and the exceeding rate will be added to the cross-over consumer. To avoid +loops, a consumer can only be either receiving or giving away rate. For a cross-over to be valid, the discharge pressure +at the consumer "receiving" overshooting rate must be higher than or equal to the discharge pressure of the "sending" +consumer. This is because it is possible to choke pressure down to meet the outlet pressure in a flow line with lower +pressure, but not possible to "pressure up" in the crossover flow line. +Some examples show how the crossover logic works:

    +

    Crossover is given as and list of integer values for the first position is the first consumer, second position is the +second consumer, etc. The number specifies which consumer to send cross-over flow to, and 0 signifies no cross-over +possible. Note that we use 1-index here.

    +

    Example 1:

    +

    Two consumers where there is a cross-over such that if the rate for the first consumer exceeds its capacity, +the excess rate will be processed by the second consumer. The second consumer can not cross-over to anyone.

    +
    CROSSOVER: [2, 0]
    +

    Example 2:

    +

    The first and second consumers may both send exceeding rate to the third consumer if their capacity is +exceeded.

    +
    CROSSOVER: [3,3,0]
    +

    Format

    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT
    OPERATIONAL_SETTINGS:
    - RATES:
    - SIM1;GAS_SALES
    - 0
    - SIM1;GAS_INJ
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURES:
    - 150
    - 150
    - SIM1;INJ_PRESSURE
    - RATES:
    - SIM1;GAS_SALES {/} 2
    - SIM1;GAS_SALES {/} 2
    - SIM1;GAS_INJ
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURES:
    - 150
    - 150
    - SIM1;INJ_PRESSURE
    CROSSOVER: [3, 3, 0]
    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: water_injection_pump_reference
    - NAME: pump2
    CHART: water_injection_pump_reference
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: (1000 {*} SIM1;WATER_PROD {+} 1050 {*} SIM2;WATER_PROD) {/} (SIM1;WATER_PROD {+} SIM2;WATER_PROD)
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITIES:
    - 1000
    - 1050
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/POWERLOSSFACTOR/index.html b/docs/about/references/keywords/POWERLOSSFACTOR/index.html new file mode 100644 index 0000000000..1f44149f5b --- /dev/null +++ b/docs/about/references/keywords/POWERLOSSFACTOR/index.html @@ -0,0 +1,28 @@ + + + + + +POWERLOSSFACTOR | eCalc™ Docs + + + + +

    POWERLOSSFACTOR

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +POWERLOSSFACTOR

    +

    Description

    +

    A factor that may be added to account for power line losses. E.g. if you have a subsea installation with a power line to +another installation, there may be line losses. For a power line loss of 5%, POWERLOSSFACTOR +is set to 0.05 and the power required from the power source (generator set) will be

    +powerrequired=powersubsea1POWERLOSSFACTORpower_{required} = \frac{power_{subsea}}{1-POWERLOSSFACTOR} +

    where powersubseapower_{subsea} is the power calculated from the energy function (before power loss is taken into account).

    +

    Format

    +
    POWERLOSSFACTOR: <EXPRESSION>
    +

    Example

    +
    POWERLOSSFACTOR: 0.05
    +
    POWERLOSSFACTOR: SIM1;POWERLOSS {+} 0.05
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT/index.html b/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT/index.html new file mode 100644 index 0000000000..2fc39f15c2 --- /dev/null +++ b/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT/index.html @@ -0,0 +1,21 @@ + + + + + +POWER_ADJUSTMENT_CONSTANT | eCalc™ Docs + + + + +

    POWER_ADJUSTMENT_CONSTANT

    +

    MODELS / +POWER_ADJUSTMENT_CONSTANT

    +

    Description

    +

    Optional constant MW adjustment added to the model. Only added if (electrical) POWER > 0.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: <model type>
    ...
    POWER_ADJUSTMENT_CONSTANT: <value in MW>
    +

    Example

    +
    MODELS:
    - NAME: simple_compressor
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    ...
    POWER_ADJUSTMENT_CONSTANT: 10 #MW
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/PRESSURE_CONTROL/index.html b/docs/about/references/keywords/PRESSURE_CONTROL/index.html new file mode 100644 index 0000000000..21218eca06 --- /dev/null +++ b/docs/about/references/keywords/PRESSURE_CONTROL/index.html @@ -0,0 +1,28 @@ + + + + + +PRESSURE_CONTROL | eCalc™ Docs + + + + +

    PRESSURE_CONTROL

    +

    Description

    +

    PRESSURE_CONTROL is required when a compressor model is defined. This dictates how the compressor will be controlled, the method for pressure control are as follows:

    +
      +
    • DOWNSTREAM_CHOKE (default)
    • +
    • UPSTREAM_CHOKE
    • +
    • INDIVIDUAL_ASV_PRESSURE
    • +
    • INDIVIDUAL_ASV_RATE
    • +
    • COMMON_ASV
    • +
    • NONE
    • +
    +

    Further description on how each pressure control method works can be found in COMPRESSOR MODELLING

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: <compressor model type>
    ...
    PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE, COMMON_ASV or NONE>
    +

    Example

    +
    MODELS:
    - NAME: variable_compressor
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    ...
    PRESSURE_CONTROL: INDIVIDUAL_ASV_PRESSURE
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/PUMPS/index.html b/docs/about/references/keywords/PUMPS/index.html new file mode 100644 index 0000000000..39787a4947 --- /dev/null +++ b/docs/about/references/keywords/PUMPS/index.html @@ -0,0 +1,25 @@ + + + + + +PUMPS | eCalc™ Docs + + + + +

    PUMPS

    +

    INSTALLATIONS / [...] / +ENERGY_USAGE_MODEL / +PUMPS

    +

    Description

    +

    Used to define a list of pumps in a PUMP_SYSTEM ENERGY USAGE MODEL. Each pump is defined with a name and with a +facility input<FACILITY_INPUTS> reference to a pump type energy function.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: <name of compressor>
    CHART: <reference to pump model in facility inputs>
    +

    Example 1

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: water_injection_pump_reference
    - NAME: pump2
    CHART: water_injection_pump_reference
    +

    Example 2 (Detailed)

    +
    - NAME: waterinjection
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    2019-01-01:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump_a
    CHART: winj_pumpchart_PA03A
    - NAME: pump_b
    CHART: winj_pumpchart_PA03B
    - NAME: pump_c
    CHART: winj_pumpchart_PA03C
    - NAME: pump_d
    CHART: winj_pumpchart_PA03D
    - NAME: pump_e
    CHART: winj_pumpchart_PA03E
    TOTAL_SYSTEM_RATE: SIM8;WATER_INJ
    FLUID_DENSITY: 1030
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0, 0, 0, 0]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    - RATE_FRACTIONS: [0.5, 0.5, 0, 0, 0]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0, 0]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25, 0]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    - RATE_FRACTIONS: [0.2, 0.2, 0.2, 0.2, 0.2]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/RATE/index.html b/docs/about/references/keywords/RATE/index.html new file mode 100644 index 0000000000..6f9c1ce080 --- /dev/null +++ b/docs/about/references/keywords/RATE/index.html @@ -0,0 +1,36 @@ + + + + + +RATE | eCalc™ Docs + + + + +

    RATE

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +RATE

    +

    Description

    +

    This can be used in three ways:

    + +

    Format

    +
    RATE: <rate expression>
    +
        - NAME: <model name>
    TYPE: <pump or compressor type>
    ...
    UNITS:
    RATE: <AM3_PER_HOUR>
    ...
    +

    Example

    +
    RATE: SIM1:GAS_PROD
    +
        - NAME: pump
    TYPE: PUMP_CHART_VARIABLE_SPEED
    ...
    UNITS:
    RATE: <AM3_PER_HOUR>
    ...
    +

    Use in EMISSION for VENTING_EMITTERS (from eCalc v8.8)

    +

    Format

    +
    VENTING_EMITTERS:
    - NAME: <emitter name>
    CATEGORY: <category>
    EMISSION:
    NAME: <emission name>
    RATE:
    VALUE: <emission rate>
    UNIT: <emission rate unit, default kg/d>
    TYPE: <emission rate type, default STREAM_DAY>
    +

    Example

    +
    VENTING_EMITTERS:
    - NAME: SomeVentingEmitter
    CATEGORY: COLD-VENTING-FUGITIVE
    EMISSION:
    NAME: CH4
    RATE:
    VALUE: 4
    UNIT: kg/d
    TYPE: STREAM_DAY
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/RATE_FRACTIONS/index.html b/docs/about/references/keywords/RATE_FRACTIONS/index.html new file mode 100644 index 0000000000..04f0818a4f --- /dev/null +++ b/docs/about/references/keywords/RATE_FRACTIONS/index.html @@ -0,0 +1,21 @@ + + + + + +RATE_FRACTIONS | eCalc™ Docs + + + + +

    RATE_FRACTIONS

    +

    Description

    +

    A list with one expression per consumer specifying the rate fraction for each consumer. If this is used, TOTAL_SYSTEM_RATE for the ENERGY_USAGE_MODEL is also required. You can use either RATES or RATE_FRACTIONS; however, not both in one operational setting.

    +

    When specifying the rate fraction, the first fraction will relate to the first operational unit mentioned - i.e. if a pump system has two pumps, the first pump mentioned will relate to the rate fraction.

    +

    Note that in the case of a compressor, the same method is utilised for specifying rate fractions.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: <pump name>
    CHART: <chart reference>
    - NAME: <pump name>
    CHART: <chart reference>
    TOTAL_SYSTEM_RATE: <system rate>
    FLUID_DENSITY: <fluid density>
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: <[fraction 1, fraction 2]>
    ...
    - RATE_FRACTIONS: <[fraction 1, fraction 2]>
    ...
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: water_injection_pump_reference
    - NAME: pump2
    CHART: water_injection_pump_reference
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: 1030
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITIES:
    - 1000
    - 1050
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/RATE_PER_STREAM/index.html b/docs/about/references/keywords/RATE_PER_STREAM/index.html new file mode 100644 index 0000000000..743e96d545 --- /dev/null +++ b/docs/about/references/keywords/RATE_PER_STREAM/index.html @@ -0,0 +1,24 @@ + + + + + +RATE_PER_STREAM | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/REGULARITY/index.html b/docs/about/references/keywords/REGULARITY/index.html new file mode 100644 index 0000000000..2862eea9bd --- /dev/null +++ b/docs/about/references/keywords/REGULARITY/index.html @@ -0,0 +1,60 @@ + + + + + +REGULARITY | eCalc™ Docs + + + + +

    REGULARITY

    +

    INSTALLATIONS / +REGULARITY

    +

    Description

    +

    In eCalc™, consumers in an ENERGY USAGE MODEL are evaluated with the actual rate passing through them whilst +they are in operation. This actual rate is referred to as stream day (sd) rates. +Despite the consumers being evaluated with stream day rates, input files are often given in calender day (cd) rates. As expected from this definition, REGULARITY is closely related to the production efficiency (PE) of a facility.

    +

    Stream day rates can be expressed as:

    +stream day rate=calendar day rateregularitystream\ day\ rate = \frac{calendar\ day\ rate}{regularity} +

    To give an example of this, an input file may have a gas export rate for a whole year. However, this rate will take into account any downtime for the facility. So in reality, this calender day rate is not the rate the compressor will process whilst in operation that year. This will rather be the higher stream day rate.

    +

    An example of this can be seen in the figure below:

    +

    Regularity work flow example

    +

    For detailed modeling, it might be a better option to increase the resolution in the TIME_SERIES +inputs to capture down periods and variations in conditions rather than using regularity.

    +
    note
      +
    • Rates from reservoir simulations may be both stream day and calendar day.
    • +
    • If eCalc™ is used +without specifying REGULARITY, then regularity will default to 1.
    • +
    • All user defined input rates used in ENERGY_USAGE_MODEL are assumed to be calendar day rates.
    • +
    +

    Use in a DIRECT ENERGY USAGE MODEL

    +

    It should be noted that not all ENERGY USAGE MODELS are evaluated with stream day rates. +DIRECT ENERGY USAGE MODELS can be specified with the keyword CONSUMPTION_RATE_TYPE - where either CALENDAR_DAY or STREAM_DAY can be specified. +Note that the default input rate is STREAM_DAY rate - the opposite of the other models.

    +

    For further details on stream day rate vs. calendar day rate, see CONSUMPTION_RATE_TYPE.

    +
    ENERGY_USAGE_MODEL TypeCan use CONSUMPTION_RATE_TYPE?Evaluated rate type
    DIRECTStream/calendar day
    COMPRESSORStream day
    PUMPStream day
    COMPRESSOR_SYSTEMStream day
    PUMP_SYSTEMStream day
    TABULATEDStream day
    +

    Reporting

    +
      +
    • All fuel rates are reported in calendar days.
    • +
    • All power and volume rates results are reported in stream day rates. Note that the volume rates are only present in the .json file.
    • +
    +

    The reason for reporting calendar day rate is to account for potential downtime for process units, i.e. some units may not run all the time throughout a year due to different reasons. Typically all process units have some downtime, and regularity is +on average something closer to 0.99 over a longer period such as a year.

    +

    Format

    +

    REGULARITY can be specified by a single number or as an expression.

    +
    INSTALLATIONS:
    - NAME: <installation name>
    CATEGORY: <installation category>
    REGULARITY: <regularity expression>
    +

    Example

    +

    Constant regularity

    +
    REGULARITY: 0.95
    +

    Regularity from time series data

    +
    REGULARITY: SIM1;REGULARITY
    +

    Special: Combining calendar and stream day rates

    +

    If there is a need to combine stream day and calendar day rates in an expression, +(or to use a stream day rate from a TIME_SERIES source), one can manually do +what is necessary to obtain calendar day rates by dividing by regularity.

    +

    For example, combining a calendar day rate (SIM2;GAS_PROD_A) with stream day rate +(SIM1;GAS_PROD_B) on an installation with a fixed regularity of 0.95 can be done like:

    +
    RATE: SIM2:GAS_PROD_A {+} SIM1;GAS_PROD_B {*} 0.95
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/STAGES/index.html b/docs/about/references/keywords/STAGES/index.html new file mode 100644 index 0000000000..6d27193138 --- /dev/null +++ b/docs/about/references/keywords/STAGES/index.html @@ -0,0 +1,37 @@ + + + + + +STAGES | eCalc™ Docs + + + + +

    STAGES

    +

    MODELS / +[...] / +STREAMS

    +

    Description

    +

    This keyword is used to define each stage in a compression train model. This is to be defined for all compressor models types.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: <compressor type>
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    ....
    +

    Use in VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES

    +

    STAGES is a list of all the stages in the compressor train.

    +
      +
    • For each stage, a temperature in Celsius must be defined. It +is assumed that the gas is cooled down to this temperature ahead of the compression at this stage.
    • +
    • A reference to a +compressor chart needs to be specified for each stage.
    • +
    • For the first stage, it is required to have at least one stream of INGOING type. In addition, INTERSTAGE_CONTROL_PRESSURE cannot be used on the first stage.
    • +
    • Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream +will be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the +molar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will +be subtracted the rate of the outgoing stream.
    • +
    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ....
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>
    CONTROL_MARGIN: <Default value 0.0>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    - ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <Optional>
    - <reference stream from STREAMS for one in- or outgoing stream. Optional>
    - <reference stream from STREAMS for another in- or outgoing stream. Optional>
    CONTROL_MARGIN: <Default value 0.0>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <pressure control>
    DOWNSTREAM_PRESSURE_CONTROL: <pressure control>
    - ...
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ....
    STAGES:
    - COMPRESSOR_CHART: 1_stage_chart
    INLET_TEMPERATURE: 20
    STREAM:
    - 1_stage_inlet
    - COMPRESSOR_CHART: 2_stage_chart
    INLET_TEMPERATURE: 30
    - COMPRESSOR_CHART: 3_stage_chart
    INLET_TEMPERATURE: 35
    STREAM:
    - 2_stage_outlet
    - 3_stage_inlet
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage
    - COMPRESSOR_CHART: 4_stage_chart
    INLET_TEMPERATURE: 15
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/START/index.html b/docs/about/references/keywords/START/index.html new file mode 100644 index 0000000000..7384c139c6 --- /dev/null +++ b/docs/about/references/keywords/START/index.html @@ -0,0 +1,32 @@ + + + + + +START | eCalc™ Docs + + + + +

    START

    +

    START

    +

    Description

    +

    The global start date for eCalc to begin energy and emission calculations. It is recommended that you have control +of which date you want data to be calculated and exported for, in particular when using LTP and FDE workflows.

    +

    The is , meaning that if you specify 2020-01-01, the whole year of 2020 is included in the output. The hours, minutes and seconds +of the day are implicitly set to "00:00:00", so the counting starts from midnight on January 1st 2020.

    +

    You can provide a date that is before the global time vector, but it is recommended to set it to the start of your timeseries data. Normally the +timeseries data provides this information directly, when specifying the first time step e.g. 2020-01-01, meaning that the data is valid from January 1st 2020, +but data by default has (INTERPOLATION_TYPE), which means that it backfills data, and then we will know how far back +to backfill data (ie defines this for the first period).

    +

    The cousin of is END and have similar behaviour, but check the reference for details, to make sure you have the correct understanding.

    +

    If is not specified, eCalc will make and educated GUESS on when the output data should start, but that may be incorrect, therefore it is recommended that you +stay in control of that to make sure you get correct output.

    +

    Format

    +
    START: <YYYY-MM-DD>
    +

    Example

    +

    Given an input dataset from 01-01-2000 - 01-01-2040, ignoring the first 20 years of data +can be achieved as follows:

    +
    START: 2020-01-01
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/STREAM/index.html b/docs/about/references/keywords/STREAM/index.html new file mode 100644 index 0000000000..1b69ef54b8 --- /dev/null +++ b/docs/about/references/keywords/STREAM/index.html @@ -0,0 +1,24 @@ + + + + + +STREAM | eCalc™ Docs + + + + +

    STREAM

    +

    MODELS / +[...] / STAGES +STREAMS

    +
    note

    This keyword is not to be confused with STREAMS - which is also utilised for VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES

    +

    Description

    +

    This keyword can only be utilised for a VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES model type and is used under the STAGES keyword.

    +

    This is used to refer a STAGE to a previously defined STREAMS.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>
    - ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <Optional>
    - <reference stream from STREAMS for one in- or outgoing stream. Optional>
    - <reference stream from STREAMS for another in- or outgoing stream. Optional>
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    - COMPRESSOR_CHART: 1_stage_chart
    INLET_TEMPERATURE: 20
    STREAM:
    - 1_stage_inlet
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/STREAMS/index.html b/docs/about/references/keywords/STREAMS/index.html new file mode 100644 index 0000000000..f3d6fc2caf --- /dev/null +++ b/docs/about/references/keywords/STREAMS/index.html @@ -0,0 +1,27 @@ + + + + + +STREAMS | eCalc™ Docs + + + + +

    STREAMS

    +

    MODELS / +[...] / +STREAMS

    +

    Description

    +

    This keyword can only be utilised for a VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES model type.

    +

    STREAMS is a list of all in- and out-going streams for the compressor train.

    +
      +
    • The same equation of state (EOS) must be used for each INGOING stream fluid models
    • +
    • OUTGOING fluid models cannot be specified.
    • +
    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    STREAMS:
    - NAME: <name of stream 1>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - NAME: <name of stream 2>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - ...
    - NAME: <name of stream N>
    TYPE: OUTGOING
    ...
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    STREAMS:
    - NAME: 1_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_1
    - NAME: 3_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_2
    - NAME: 2_stage_outlet
    TYPE: OUTGOING
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/SUCTION_PRESSURE/index.html b/docs/about/references/keywords/SUCTION_PRESSURE/index.html new file mode 100644 index 0000000000..9bb02e2173 --- /dev/null +++ b/docs/about/references/keywords/SUCTION_PRESSURE/index.html @@ -0,0 +1,27 @@ + + + + + +SUCTION_PRESSURE | eCalc™ Docs + + + + +

    SUCTION_PRESSURE

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +[...] / +SUCTION_PRESSURE

    +

    Description

    +

    Used to define the suction pressure for some ENERGY_USAGE_MODEL +types and in OPERATIONAL_SETTINGS using +a fixed value or an expression. If an expression is used, a time series can be used so that the suction pressure of the unit can vary over the lifespan of the model.

    +

    Note that pressure values must be inputted in bar.

    +

    Format

    +
    SUCTION_PRESSURE: <suction pressure value/expression>
    +

    Example

    +
    SUCTION_PRESSURE: 10 
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/TIME_SERIES/index.html b/docs/about/references/keywords/TIME_SERIES/index.html new file mode 100644 index 0000000000..1661884bb3 --- /dev/null +++ b/docs/about/references/keywords/TIME_SERIES/index.html @@ -0,0 +1,32 @@ + + + + + +TIME_SERIES | eCalc™ Docs + + + + +

    TIME_SERIES

    +

    TIME_SERIES /

    +

    Description

    +

    This keyword defines the inputs for time dependent variables, or "reservoir +variables". For many fields, this may be only one reservoir simulation model. But in some +cases, one might have several sources for reservoir and other relevant time series variables.

    +

    For example, a field may have a reservoir simulation model for some areas and decline curves in other area of +the reservoir. There may also be tie-ins which are affecting the energy/emissions on the field +installations. Also, there may be time profiles for other variables. +Therefore, a set of sources may be specified with a name, path to data and type. The name is +later referred to in the system of energy consumers defined under INSTALLATIONS.

    +

    Reservoir variables and other time varying data not coming from a reservoir simulation model can +be specified in a CSV file.

    +

    Required attributes

    +
    AttributesDescription
    NAMEReference name of time series
    TYPETime series type; DEFAULT or MISCELLANEOUS
    FILEPath to input file
    +

    Attributes dependent on time series type

    +
    DEFAULTMISCELLANEOUSDescription
    INTERPOLATION_TYPERIGHTRequired: LEFT, RIGHT or LINEARDefines how rates are interpolated between the given time steps (LEFT/RIGHT/LINEAR).
    EXTRAPOLATIONFALSEOptional. Default: FALSEDefines whether the rates in the source should be set to 0 after the last time step (FALSE), or equal to value at last time step after the time interval (TRUE).
    INFLUENCE_TIME_VECTOROptional. Default: TRUEOptional. Default: TRUEDetermine if time steps should contribute to global time vector. TRUE or FALSE. At least one time vector is required to be TRUE.
    +

    Example

    +
    TIME_SERIES:
    - NAME: SIM1
    TYPE: DEFAULT
    FILE: /path_to_model1/model_data.csv
    - NAME: DATA2
    TYPE: MISCELLANEOUS # e.g. variable flare, compressor suction and discharge pressures
    FILE: inputs/somecsvdata.csv
    INFLUENCE_TIME_VECTOR: FALSE
    EXTRAPOLATION: TRUE
    INTERPOLATION_TYPE: RIGHT
    +

    See TIME SERIES for more details about usage.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/TOTAL_SYSTEM_RATE/index.html b/docs/about/references/keywords/TOTAL_SYSTEM_RATE/index.html new file mode 100644 index 0000000000..5c022f9300 --- /dev/null +++ b/docs/about/references/keywords/TOTAL_SYSTEM_RATE/index.html @@ -0,0 +1,25 @@ + + + + + +TOTAL_SYSTEM_RATE | eCalc™ Docs + + + + +

    TOTAL_SYSTEM_RATE

    +

    INSTALLATIONS / [...] / +ENERGY_USAGE_MODEL / +TOTAL_SYSTEM_RATE

    +

    Description

    +

    Used to define the total system rate [Sm3/day] for ENERGY_USAGE_MODEL of type COMPRESSOR_SYSTEM +and PUMP_SYSTEM.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    TOTAL_SYSTEM_RATE: <expression defining the total rate in the system [Sm3/day]>
    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/TURBINE_EFFICIENCIES/index.html b/docs/about/references/keywords/TURBINE_EFFICIENCIES/index.html new file mode 100644 index 0000000000..37b2ee203c --- /dev/null +++ b/docs/about/references/keywords/TURBINE_EFFICIENCIES/index.html @@ -0,0 +1,20 @@ + + + + + +TURBINE_EFFICIENCIES | eCalc™ Docs + + + + +

    TURBINE_EFFICIENCIES

    +

    Description

    +

    TURBINE_EFFICIENCIES is a required to be specified under the TURBINE_MODEL keyword.

    +

    This must be specified as a fraction and must have equal length to the corresponding TURBINE_LOAD values.

    +

    Format

    +
    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    ...
    TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>
    +

    Example

    +
    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/TURBINE_LOAD/index.html b/docs/about/references/keywords/TURBINE_LOAD/index.html new file mode 100644 index 0000000000..aa78c05515 --- /dev/null +++ b/docs/about/references/keywords/TURBINE_LOAD/index.html @@ -0,0 +1,20 @@ + + + + + +TURBINE_LOAD | eCalc™ Docs + + + + +

    TURBINE_LOAD

    +

    Description

    +

    TURBINE_LOAD is a required to be specified under the TURBINE_MODEL keyword.

    +

    This must be specified in MW (Mega-Watts) and must have equal length to the corresponding TURBINE_EFFICIENCY values.

    +

    Format

    +
    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    ...
    TURBINE_LOADS: <list of power values in mega watt>
    +

    Example

    +
    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/TURBINE_MODEL/index.html b/docs/about/references/keywords/TURBINE_MODEL/index.html new file mode 100644 index 0000000000..aaca50eb14 --- /dev/null +++ b/docs/about/references/keywords/TURBINE_MODEL/index.html @@ -0,0 +1,20 @@ + + + + + +TURBINE_MODEL | eCalc™ Docs + + + + +

    TURBINE_MODEL

    +

    Description

    +

    When using a TURBINE it is required for a TURBINE_MODEL to be specified. This is done under the MODELS section.

    +

    A turbine model describes a gas-fired turbine that is coupled to a compressor or compression train. It is specified in a similar way to a GENERATORSET. TURBINE_LOAD, TURBINE_EFFICIENCY and LOWER_HEATING_VALUE needs to be inputted here.

    +

    Format

    +
    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>
    TURBINE_LOADS: <list of power values in mega watt>
    TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    +

    Example

    +
    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/TYPE/index.html b/docs/about/references/keywords/TYPE/index.html new file mode 100644 index 0000000000..bdc5a68d87 --- /dev/null +++ b/docs/about/references/keywords/TYPE/index.html @@ -0,0 +1,53 @@ + + + + + +TYPE | eCalc™ Docs + + + + +

    TYPE

    +

    [...] / +TYPE /

    +

    Description

    +

    The TYPE is always a string. The allowed strings, and the resulting change in behavior, +will depend on where TYPE is used:

    +

    Use in FACILITY_INPUTS

    +
      +
    • ELECTRICITY2FUEL
    • +
    • TABULAR
    • +
    • COMPRESSOR_TABULAR
    • +
    • PUMP_CHART_SINGLE_SPEED
    • +
    • PUMP_CHART_VARIABLE_SPEED
    • +
    +

    Use in TIME_SERIES

    +
      +
    • MISCELLANEOUS
    • +
    • DEFAULT
    • +
    +

    Use in ENERGY_USAGE_MODEL

    +
      +
    • DIRECT
    • +
    • COMPRESSOR
    • +
    • PUMP
    • +
    • COMPRESSOR_SYSTEM
    • +
    • PUMP_SYSTEM
    • +
    • TABULATED
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    • +
    +

    Use in MODELS

    +
      +
    • FLUID
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    • +
    • SINGLE_SPEED_COMPRESSOR_TRAIN
    • +
    • TURBINE
    • +
    • COMPRESSOR_WITH_TURBINE
    • +
    • SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    • +
    +

    Format

    +
    TYPE: <type>
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/UNITS/index.html b/docs/about/references/keywords/UNITS/index.html new file mode 100644 index 0000000000..33358b42d9 --- /dev/null +++ b/docs/about/references/keywords/UNITS/index.html @@ -0,0 +1,26 @@ + + + + + +UNITS | eCalc™ Docs + + + + +

    UNITS

    +

    Description

    +

    UNITS is a keyword that can be specified for PUMP and COMPRESSOR CHARTS. This is a requirement and must be specified.

    +

    For pumps this must be specified in FACILITY_INPUTS, whilst for compressors it must be within MODELS.

    +

    Format

    +

    Pumps

    +
    FACILITY_INPUTS:
    - NAME: <pump chart name>
    ...
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>
    +

    Compressors

    +
    MODELS:
    - NAME: <name of chart, for reference>
    ...
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>
    ....
    +

    Example

    +

    Pumps

    +
    FACILITY_INPUTS:
    - NAME: single_speed_pump
    TYPE: PUMP_CHART_SINGLE_SPEED
    ...
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE
    +

    Compressors

    +
    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL/index.html b/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL/index.html new file mode 100644 index 0000000000..277d673751 --- /dev/null +++ b/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL/index.html @@ -0,0 +1,25 @@ + + + + + +UPSTREAM_PRESSURE_CONTROL | eCalc™ Docs + + + + +

    UPSTREAM_PRESSURE_CONTROL

    +

    MODELS / +[...] / +INTERSTAGE_CONTROL_PRESSURE +/ UPSTREAM_PRESSURE_CONTROL

    +

    Description

    +

    This keyword is used only for VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES type. It is used within the INTERSTAGE_CONTROL_PRESSURE keyword.

    +

    The pressure control method upstream (before) the interstage pressure is specified in this keyword. +For more explanation see Variable speed compressor train model with multiple streams and pressures.

    +

    Format

    +
    MODELS:
    - NAME: <compressor model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    ...
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>
    ...
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    ...
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: UPSTREAM_CHOKE
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/VARIABLES/index.html b/docs/about/references/keywords/VARIABLES/index.html new file mode 100644 index 0000000000..6e594cde04 --- /dev/null +++ b/docs/about/references/keywords/VARIABLES/index.html @@ -0,0 +1,18 @@ + + + + + +VARIABLES | eCalc™ Docs + + + + +

    VARIABLES

    +

    VARIABLES

    +

    Description

    +

    This keyword is used to define variables which can be used throughout the YAML file via the use of expressions. +These variables can be based on time or can be independent.

    +

    Information about defining and using variables can be seen here.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/VENTING_EMITTERS/index.html b/docs/about/references/keywords/VENTING_EMITTERS/index.html new file mode 100644 index 0000000000..5e14dc7fab --- /dev/null +++ b/docs/about/references/keywords/VENTING_EMITTERS/index.html @@ -0,0 +1,39 @@ + + + + + +VENTING_EMITTERS | eCalc™ Docs + + + + +

    VENTING_EMITTERS

    +

    New definition of VENTING_EMITTERS from eCalc v8.8!

    +
    +

    INSTALLATIONS / +VENTING_EMITTERS

    +
    RequiredChild ofChildren/Options
    YesINSTALLATIONSNAME
    EMISSION_NAME
    CATEGORY
    EMITTER_MODEL
    +
    important
      +
    • eCalc version 8.8: Updated definition of VENTING_EMITTERS. New keyword EMISSION is replacing EMITTER_MODEL and EMISSION_NAME. Now possible to define UNIT and TYPE for emission rate.
    • +
    • eCalc version 8.7: VENTING_EMITTERS keyword is replacing the DIRECT_EMITTERS keyword.
    • +
    • eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before.
    • +
    +

    eCalc version 8.7 and before: Description

    +

    The VENTING_EMITTERS keyword covers the direct emissions on the installation +that are not consuming energy. The attributes NAME, +EMISSION_NAME, CATEGORY and +EMITTER_MODEL are required.

    +

    Format

    +
    VENTING_EMITTERS:
    - NAME: <emitter name>
    EMISSION_NAME: <emission name>
    CATEGORY: <category>
    EMITTER_MODEL: <emitter model>
    +

    Example

    +
    VENTING_EMITTERS:
    - NAME: SomeVentingEmitter
    EMISSION_NAME: CH4
    CATEGORY: COLD-VENTING-FUGITIVE
    EMITTER_MODEL:
    <emitter model data>
    ...
    - NAME: SomeOtherVentingEmitter
    EMISSION_NAME: C2H6
    CATEGORY: COLD-VENTING-FUGITIVE
    EMITTER_MODEL:
    <emitter model data>
    +

    eCalc from version 8.8: Description

    +

    The attributes NAME, CATEGORY and +EMISSION are required.

    +

    Format

    +
    VENTING_EMITTERS:
    - NAME: <emitter name>
    CATEGORY: <category>
    EMISSION:
    <emission data>

    +

    Example

    +
    VENTING_EMITTERS:
    - NAME: SomeVentingEmitter
    CATEGORY: COLD-VENTING-FUGITIVE
    EMISSION:
    <emission data>
    ...
    - NAME: SomeOtherVentingEmitter
    CATEGORY: COLD-VENTING-FUGITIVE
    EMISSION:
    <emission data>
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/include/index.html b/docs/about/references/keywords/include/index.html new file mode 100644 index 0000000000..62f4decc46 --- /dev/null +++ b/docs/about/references/keywords/include/index.html @@ -0,0 +1,37 @@ + + + + + +!include | eCalc™ Docs + + + + +

    !include

    +

    Description

    +

    You can use !include to separate your model into several files. !include +can be used as value in a KEY: VALUE mapping, or as a value in a list.

    +

    Format

    +
    !include <some_yaml_file.yaml>
    +
    tip

    You can use ecalc show yaml <model_file> to see the read yaml with !include processed.

    New in v7.2.

    +

    Example 1 - include map/object into list item

    +

    !include can be used to insert a map/object as a single list element

    +
    main.yaml
     INSTALLATIONS:
    - !include installationA.yaml
    - NAME: installationB
    ...
    +
    installationA.yaml
        NAME: installationA
    ...

    +

    This is the same as

    +
    main.yaml
         INSTALLATIONS:
    - NAME: installationA
    ...
    - NAME: installationB
    ...

    +

    Example 2 - include map/object into object value

    +

    !include can be used to insert a map/object as a value in a KEY: VALUE mapping

    +
    main.yaml
     INSTALLATIONS:
    - NAME: installationA
    FUELCONSUMERS:
    - NAME: consumerB
    ENERGY_USAGE_MODEL: !include consumerB.yaml
    +
    consumerB.yaml
        TYPE: COMPRESSOR
    ...

    +

    This is the same as

    +
    main.yaml
         INSTALLATIONS:
    - NAME: installationA
    FUELCONSUMERS:
    - NAME: consumerB
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ...

    +

    Example 3 - include list into object value

    +

    !include can be used to insert a list as a value in a KEY: VALUE mapping

    +
    main.yaml
    INSTALLATIONS: !include installations.yaml

    +
    installations.yaml
        - NAME: installationA
    ...
    - NAME: installationB
    ...

    +

    This is the same as

    +
    main.yaml
         INSTALLATIONS:
    - NAME: installationA
    ...
    - NAME: installationB
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/index.html b/docs/about/references/keywords/index.html new file mode 100644 index 0000000000..473ca60830 --- /dev/null +++ b/docs/about/references/keywords/index.html @@ -0,0 +1,18 @@ + + + + + +YAML keywords | eCalc™ Docs + + + + +

    Keywords

    +

    eCalc models are defined using keywords in YAML (YAML Ain't Markup Language) model files. This +page gives an overview of the top level keywords as well as and overview of all available keywords in +eCalc with a short description.

    +

    Top level keywords

    +
    KeywordRequiredDescription
    ENDNoGlobal end date for eCalc calculations.
    FACILITY_INPUTSYesList of input files from facility characterization.
    FUEL_TYPESNoDefinition(s) the fuel type(s) being used in the model and the corresponding emissions.
    INSTALLATIONSYesDefinitions of the system of energy consumers on each installation (e.g. platform).
    STARTNoGlobal start date for eCalc calculations.
    TIME_SERIESYesList of input sources (files) containing all time series data.
    + + \ No newline at end of file diff --git a/docs/category/documentation/index.html b/docs/category/documentation/index.html new file mode 100644 index 0000000000..fe550edc21 --- /dev/null +++ b/docs/category/documentation/index.html @@ -0,0 +1,13 @@ + + + + + +Documentation | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/category/guides/index.html b/docs/category/guides/index.html new file mode 100644 index 0000000000..0bc677f023 --- /dev/null +++ b/docs/category/guides/index.html @@ -0,0 +1,13 @@ + + + + + +Guides | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/changelog/index.html b/docs/changelog/index.html new file mode 100644 index 0000000000..17ed5475d6 --- /dev/null +++ b/docs/changelog/index.html @@ -0,0 +1,485 @@ + + + + + +Changelog | eCalc™ Docs + + + + +

    Changelog

    +

    8.9.0 (2024-01-11)

    +

    Bug Fixes

    +
      +
    • don't run pdoc on application module (abbb704)
    • +
    +

    Documentation

    +
      +
    • maximum pressure ratio per stage in docs (#338) (261749f)
    • +
    • remove docstring for number of compressors (#339) (be148ba)
    • +
    • update migration guide economics (#335) (c4b50d6)
    • +
    +

    Miscellaneous Chores

    + +

    Code Refactoring

    + +

    8.8.0 (2023-12-27)

    +

    ⚠ BREAKING CHANGES

    +
      +
    • include direct emitter results in ltp export (#305)
    • +
    +

    Features

    +
      +
    • add emitter rate type to venting emitters (#312) (d6e16fa)
    • +
    +

    Bug Fixes

    +
      +
    • correct changelog for venting emitters (#324) (eff911e)
    • +
    • correct fallback to pydantic v1 (#332) (4f89e48)
    • +
    • include direct emitter results in ltp export (#305) (f6b6371)
    • +
    • remove interpolation method (#321) (d125552)
    • +
    • support mismatching timesteps in ltp delta profile (#319) (32f0289)
    • +
    +

    Documentation

    +
      +
    • remove costs mentioned in docs (#322) (ee03965)
    • +
    • remove reference to fuel price- and tax in drogon example (#323) (963d9ea)
    • +
    • update docs for v8.8 release (#334) (153f7c4)
    • +
    • update PR template with checkboxes for stuff we forget (09f52bd)
    • +
    +

    Miscellaneous Chores

    + +

    Code Refactoring

    +
      +
    • move simple result to presentation (#318) (e90a6eb)
    • +
    • use time series collection yaml classes (#328) (c36f62b)
    • +
    +

    Tests

    +
      +
    • update tests with maximum rate (2cb09e2)
    • +
    +

    Continuous Integration

    + +

    8.7.0 (2023-12-05)

    +

    Bug Fixes

    +
      +
    • bug in compressor with turbine models with multiple streams and only one date (#296) (8c2c786)
    • +
    • deep copy when aggregating model results (#311) (53c8df4)
    • +
    • do not merge model results (#304) (34cebc4)
    • +
    • error message when model/facility input does not exist (4437032)
    • +
    +

    Documentation

    +
      +
    • update documentation with info about direct emitters name change (#310) (990f3c2)
    • +
    +

    Miscellaneous Chores

    + +

    Code Refactoring

    +
      +
    • change emission rate type to calendar day (#300) (f8e5052)
    • +
    • change name from direct to venting emitter (#303) (8d03822)
    • +
    • remove duplicated function (ba48dcd)
    • +
    +

    Continuous Integration

    + +

    8.7.0

    +

    ⚠ BREAKING CHANGES

    +
      +
    • Change name from DIRECT_EMITTERS to VENTING_EMITTERS in input Yaml-file (#303)
    • +
    +

    8.6.0 (2023-11-21)

    +

    ⚠ BREAKING CHANGES

    +
      +
    • remove economy from ecalc (#282)
    • +
    • graph.components and graph.get_component renamed to nodes and get_node
    • +
    • add type to consumers in system
    • +
    • change name from DIRECT_EMITTERS to VENTING_EMITTERS in input Yaml-file (#303)
    • +
    +

    Features

    + +

    Bug Fixes

    +
      +
    • ensure that start date in global time vector is consistent with the requested output frequency (#269) (e8ef9b9)
    • +
    • make iteration loops for simplified train consistent (#263) (b066c74)
    • +
    • wrong handling of values and timesteps in temporal models (#261) (4e20264)
    • +
    +

    Documentation

    + +

    Miscellaneous Chores

    +
      +
    • add INVALID_INPUT and INVALID_MAX_RATE (d651ed6)
    • +
    • add test of get_max_standard_rate for single speed compressor train (d651ed6)
    • +
    • clean up common module (#277) (e1959ab)
    • +
    • extend tests of time series resampling (e8ef9b9)
    • +
    • improve algorithm to generate generic variable speed compressor charts from input points (#276) (b257567)
    • +
    • make sure no mismatch between timestamps and time series values (#251) (ae6ade9)
    • +
    • only calculate max standard rate for time steps with valid model input (#252) (d651ed6)
    • +
    • possibility to include start and end date in resampling (e8ef9b9)
    • +
    • update changelog for v8.6 release (#288) (af32274)
    • +
    • update dependencies for new v8.6 release (#289) (5a245a3)
    • +
    +

    Code Refactoring

    +
      +
    • add option to skip header validation on resource files (#260) (883b7e6)
    • +
    • calculate timesteps separately (#284) (bd9d684)
    • +
    • collect results in priority optimizer (16b9ccc)
    • +
    • common consumer system type (fe09263)
    • +
    • common yaml system v2 class (98198fc)
    • +
    • consistent naming of nodes in graph (676c7b8)
    • +
    • generic graph class (6f63e40)
    • +
    • move into presentation layer (#271) (52530e0)
    • +
    • remove economy from ecalc (#282) (a50148c)
    • +
    • rename Stream to StreamConditions (cf908ec)
    • +
    • rename to component graph (9629f22)
    • +
    • system v2 stream conditions format (#257) (e228e8b)
    • +
    • use common consumer system dto class (#267) (3c58b53)
    • +
    • use PriorityOptimizer outside ConsumerSystem (f1af9e6)
    • +
    +

    8.5.0 (2023-10-30)

    +

    Features

    + +

    Bug Fixes

    +
      +
    • don't require HCEXPORT in editor (#254) (e497245)
    • +
    • ensure unique names in system v2 (#238) (3634a9e)
    • +
    • rate when multiple streams model (#214) (892720e)
    • +
    • set_regularity fixture (#213) (e9ea04f)
    • +
    • update ecalc validation for yaml file in web (#243) (2981f2c)
    • +
    • use file reference instead of urls in docs (#216) (35c4f68)
    • +
    • wrong data for boilers and heaters in ltp-results (#237) (851e831)
    • +
    +

    Documentation

    +
      +
    • add missing keywords surge control margin (#239) (8b97673)
    • +
    • update changelog for upcoming release v8.4 (#203) (66671e0)
    • +
    +

    Miscellaneous Chores

    +
      +
    • add init file to ecalc_cli (af6bee9)
    • +
    • add chart area flag to test of full recirculation (0c45251)
    • +
    • add check for zero efficiency in stage (3ea3035)
    • +
    • add dependabot actions monitoring (#219) (d5f5dfd)
    • +
    • add ModelInputFailureStatus (6b0c728)
    • +
    • add NO_FLOW ChartAreaFlag (0c45251)
    • +
    • add rate type to pump model result (#209) (21deeb7)
    • +
    • cli: add all energy usage models load_results test (#220) (e09febb)
    • +
    • deps: bump actions/cache from 3.0.11 to 3.3.2 (#223) (087867c)
    • +
    • deps: bump actions/checkout from 2 to 4 (#221) (bcc2f81)
    • +
    • deps: bump actions/setup-node from 3 to 4 (cb7e816)
    • +
    • deps: bump snok/install-poetry from 1.3.3 to 1.3.4 (#222) (80dab72)
    • +
    • fix tests (6b0c728)
    • +
    • handle requested pressures correct for compressors without system (#233) (445fc9d)
    • +
    • handle requested pressures for compressor systems (#215) (6b05439)
    • +
    • more robust surge control margin calculation (#229) (74b4e59)
    • +
    • move feature experimental to main method for requested pressures (#230) (00ad854)
    • +
    • pre-commit (a310df2)
    • +
    • show correct version (#211) (f8de992)
    • +
    • update dependencies (#212) (c9b8506)
    • +
    • update dependencies (#259) (e7f031f)
    • +
    • update python deps (#247) (514da16)
    • +
    • update system v2 tests to only use one crossover (#205) (aa65163)
    • +
    • update zero efficiency error message (#258) (5be6fe4)
    • +
    • upgrade packages (#255) (035aad1)
    • +
    • version must be updated in version.py (63eb672)
    • +
    • warn user about full recirculation of fluids in a compressor stage in a multiple streams and pressures compressor train (#196) (0c45251)
    • +
    +

    Code Refactoring

    +
      +
    • implement evaluate streams in models (#232) (df6b6b0)
    • +
    • libecalc.core: stream as input (#224) (e06f970)
    • +
    • move crossover to component_conditions for system v2 (#204) (018b472)
    • +
    • move RateType into common module (#253) (c7f5a99)
    • +
    • move validate operational conditions from compressor train, rename to validate model input (#256) (6b0c728)
    • +
    • remove regularity our of core/domain (#246) (714888b)
    • +
    • remove temporal operational settings system v2 (#244) (a1d2ce6)
    • +
    • rename streamCondition to stream (32885b5)
    • +
    • separate optimization from system (#245) (b580e3d)
    • +
    • use Graph object to build graph (#250) (ce65dba)
    • +
    +

    8.4.0 (2023-09-25)

    +

    Features

    +
      +
    • add compressor inlet- and outlet pressures to models/train level (#152) (9b95ee5)
    • +
    • add input compressor pressures to output (#140) (74e3e56)
    • +
    • add support for system v2 in FDE (e6d1f93)
    • +
    • add support for temporal operational settings in v2 (f2b217a)
    • +
    +

    Bug Fixes

    +
      +
    • add system v2 subcomponents to components list (b61a0fe)
    • +
    • add system v2 to generator set consumers (#166) (d40558e)
    • +
    • avoid name conflicts with ecalc cli package (#197) (140c448)
    • +
    • bug in asset_result_dto (#170) (c45a7ac)
    • +
    • correct type for total system rate in pump system v2 (#167) (5559cdd)
    • +
    • do not return actual rate in results for compressor sampled since it can not be calculated (#190) (74fcfd8)
    • +
    • expression type in system v2 (5318fb5)
    • +
    • forbid extra attributes in TimeSeries (#195) (24c27bb)
    • +
    • full run with system v2 components (#147) (2279ef4)
    • +
    • generate system v2 schema (#161) (a27c392)
    • +
    • handle all situations where zero mass rate is entering a compressor stage in a multiple streams compressor train (#164) (ba9235e)
    • +
    • handle dates in yaml correctly (e9c28d0)
    • +
    • issue with crossover rate calculation in system v2 (#188) (623a1cf)
    • +
    • make ecalc installable again (58693de)
    • +
    • rate_type was snake_case in json output (#172) (dc82a88)
    • +
    • requested pressures not always an attribute (#155) (0078405)
    • +
    • system v2 evaluation (6494257)
    • +
    • use results base (#199) (cebde33)
    • +
    • wrongly accessed rate in pump system v2 (56da4b2)
    • +
    +

    Documentation

    +
      +
    • add further explanation to generic workflow (ddcb462)
    • +
    • add generic workflow (30553e0)
    • +
    • add powerlossfactor in generic workflow (3d152c8)
    • +
    • changelog v8.4 add input compressor pressures to output (#150) (46e308f)
    • +
    • correct order of diagrams (71a07f5)
    • +
    • make mermaid diagram of workflow render correctly (b1c5b23)
    • +
    • make mermaid workflow diagram render correctly (7a99b5b)
    • +
    • update changelog for v8.3 (b424176)
    • +
    • update workflow with comments (a71abfe)
    • +
    +

    Miscellaneous Chores

    +
      +
    • add pressure drop ahead of stage to inlet pressure before choking (#146) (e5368de)
    • +
    • add rate type to compressor model results and convert to time series (#187) (c86bf3f)
    • +
    • add validation for missing headers in csv resource file (#191) (60e8403)
    • +
    • adding test of full recirculation in multiple streams compressor trains (ba9235e)
    • +
    • calculate correct standard condition density when mixing two streams (ba9235e)
    • +
    • clarify neqsim depenedency in ecalc (#198) (d6635a9)
    • +
    • docs: fix equations showing twice (#141) (2455e34)
    • +
    • enable mypy for cli (#189) (da713fc)
    • +
    • fix spelling errors in changelog (de3c2eb)
    • +
    • remove unnecessary folders (#186) (e861d87)
    • +
    • rename conflicting file names (#153) (654175e)
    • +
    • revert nan to num in expressions (#202) (2f95c29)
    • +
    • update archive (#181) (03abf64)
    • +
    • update deps to latest (0f30f49)
    • +
    +

    Code Refactoring

    +
      +
    • change typ to rate_type for TimeSeriesRate (#89) (8be87dd)
    • +
    • generate asset/ecalc model schema (#157) (6818848)
    • +
    • generate direct emitter schema (#180) (924526a)
    • +
    • generate facility type schema (#182) (9428979)
    • +
    • generate fuel consumer schema (#160) (9f580c1)
    • +
    • generate fuel types schema (#179) (e17ef3b)
    • +
    • generate generator set schema (#165) (ab25e05)
    • +
    • generate installation schema (#159) (030a44b)
    • +
    • generate time series schema (#176) (b02d68d)
    • +
    • improve error message when wrong CURVE-keyword input to single speed compressor (#173) (9502bcc)
    • +
    • improve error message when wrong CURVES-keyword input to variable speed compressor (#175) (714e867)
    • +
    • merge functionality for results (#193) (db1e9b1)
    • +
    • move common properties for system v2 operational settings (10b5e07)
    • +
    • move yaml system into package (b477b15)
    • +
    • remove condition and power_loss_factor from system v2 (2507bb9)
    • +
    • remove rate_fractions from system v2 (ba788fd)
    • +
    • use common Period,Periods classes (76366ce)
    • +
    • use common to_camel_case function (#171) (f5f0c2f)
    • +
    • use yaml prefix for yaml klasses/modules (#174) (e91ac2a)
    • +
    +

    8.3.0 (2023-08-11)

    +

    ⚠ BREAKING CHANGES

    +
      +
    • energy model type not allowed to change over time (#131)
    • +
    +

    Features

    + +

    Bug Fixes

    +
      +
    • avoid zero discharge pressure after validation of operational conditions (830c75e)
    • +
    • bug fix to joining results from different temporal models with compressor train models having multiple inlet or outlet streams (#63) (da3144a)
    • +
    • json schema accepts MAXIMUM_DISCHARGE_PRESSURE for single speed train (#86) (a18de1e)
    • +
    • json schema allow stages to have control_margin and control_margin_unit (#90) (2415534)
    • +
    • make apply_condition work for 2D numpy arrays also (#78) (bce91cb)
    • +
    • make sure that suction pressure is less than or equal to discharge pressure for compressor train (#104) (d218273)
    • +
    • parse scientific notation numbers in expression (#85) (fdf322b)
    • +
    • parse spaces as thousand separators from excel (#107) (5a3bd6a)
    • +
    • pump results wrong when resampled (#71) (daffdb3)
    • +
    • resample emissions correctly to create valid json (3c9b52e)
    • +
    • result of validation of operational conditions when rate is zero should always be valid (9de403c)
    • +
    • validate time steps where rate is different from zero, not only when larger than zero (6ce07c4)
    • +
    • wrong standard_conditions_density when mixing two fluids (a16a695)
    • +
    +

    Documentation

    +
      +
    • fix generic compressor example (38870a3)
    • +
    • fix links (#116) (62cadfc)
    • +
    • how to migrate from 8.1 to 8.2 (4d3be58)
    • +
    • remove unnecessary information from migration guide (4730538)
    • +
    • specify only gensets for boiler/heater (#53) (2df3bdf)
    • +
    • update changelog 8.2 with changes for ltp- and stp (#43) (6fe4b77)
    • +
    • update changelog for 8.2 (3ccea74)
    • +
    • update docs and changelog for energy models (#133) (8f0d716)
    • +
    • update documentation for heaters and boilers (#52) (2bef707)
    • +
    • update migration guide with ltp- and stp changes (#42) (4b0b230)
    • +
    +

    Miscellaneous Chores

    +
      +
    • add 8.3 changelog (9f4a4af)
    • +
    • add fluid mixing checks (53c1626)
    • +
    • add fluid mixing checks (0f3ddca)
    • +
    • add installation filter to flare nmvoc (#87) (f37b76d)
    • +
    • add installation filter to remaining ltp-columns (#91) (39df792)
    • +
    • add power adjustment constant also for compressor trains with interstage pressure (#136) (c8a4861)
    • +
    • add test for adjust energy usage on multiple streams and pressures compressor trains (c8a4861)
    • +
    • add test of count_parentheses (0d1ce6f)
    • +
    • add test of validation of operational conditions when suction pressure exceeds discharge pressure (d218273)
    • +
    • added changelog entry about interstage pressure fix (#95) (2a1e8b0)
    • +
    • count parentheses in list of tokens only among the elements that are strings (#94) (0d1ce6f)
    • +
    • energy model type not allowed to change over time (#131) (670cff2)
    • +
    • enforce unique fuel type names, and unique emission names within one fuel type (#84) (4ea9c63)
    • +
    • fix broken link in documentation of GENERATORSETS keyword (#103) (329c8e9)
    • +
    • fix typing of fluid composition (c0d98b3)
    • +
    • improve documentation on defining compressor charts using CURVE and CURVES (#97) (1bde68a)
    • +
    • improve error message when bad yaml file name (#77) (d2eb733)
    • +
    • merge queue (d4489c6)
    • +
    • numpy ndarray typing (#46) (9b7b308)
    • +
    • pin numpy to compatible numpy version (35a3640)
    • +
    • remove limiting dependency typer-cli (8208444)
    • +
    • simplify dependencies for use with komodo (39c5c36)
    • +
    • update dependencies to be aligned with external requirements (fbfbfeb)
    • +
    • update snapshots after power adjustment constant fix for compressor trains with interstage pressure (c8a4861)
    • +
    +

    Code Refactoring

    +
      +
    • consumer system v2 (248dabb)
    • +
    • ensure neqsim fluid is contained to FluidStream object (#118) (d1d6ad6)
    • +
    • enthalpy calculations (#109) (a01a215)
    • +
    • enthalpy calculations (#110) (cf7d1a9)
    • +
    • improve naming and documentation (94be7fa)
    • +
    • molar_mass_kg_per_mol is not used in the code (3ea535e)
    • +
    • move NeqSimfluid creation into NeqSim wrapper (57c4b24)
    • +
    • NeqSim mapping (#120) (0a0b2fe)
    • +
    • remove FluidStream copy (#119) (0e30ab2)
    • +
    • Use a list comprehension to create a transformed list (#112) (5d7292b)
    • +
    +

    Tests

    +
      +
    • add test for fluid stream mixing (0ba8f8f)
    • +
    +

    Continuous Integration

    +
      +
    • create release-please pr against correct branch (be9426a)
    • +
    • fix issue with api reference docs generation (#44) (42c1402)
    • +
    • fix syntax for gh action workflow (d8700dd)
    • +
    • Lock pydantic version in CI and update hooks (#106) (2ea517e)
    • +
    • remove duplicate build of docs (#62) (e5b896b)
    • +
    • set default ownership for source (16d54f1)
    • +
    • support hotfix releases (0346929)
    • +
    • update pre-commit settings (6092255)
    • +
    +

    8.2.2 (2023-05-28)

    +

    Bug Fixes

    +
      +
    • allow electrical driven consumers in consumer system v2 (92cb4fa)
    • +
    • cast float to numpy array in function call (#39) (250928c)
    • +
    • NeqSim Wrapper: inconsistent return type (9482421)
    • +
    • output emissions in fixed and predicted order (059dab5)
    • +
    +

    Continuous Integration

    +
      +
    • enable mypy for neqsim wrapper (871c038)
    • +
    • parallelize tests in docker (4e73b68)
    • +
    • remove docker tests (a2b5c1a)
    • +
    • use xdist to parallelize test suite (2895ae7)
    • +
    +

    Tests

    +
      +
    • compare consumer system v1 vs v2 both fuel and power consumers (74fafce)
    • +
    +

    Code Refactoring

    +
      +
    • even more typing! (a7b22e2)
    • +
    • fix more typing (08394a3)
    • +
    • make units lowercase in function names (272f0d7)
    • +
    • raise exceptions from error (ee6e474)
    • +
    • remove duplicate function for converting to standard rate (93de4f4)
    • +
    • remove unused code (7ccf2c1)
    • +
    • rename function variables (c56693a)
    • +
    • typing and typos (936b941)
    • +
    +

    Documentation

    +
      +
    • add docstrings to undocumented functions (064adfa)
    • +
    • update compressor pressure control (#14) (1da1999)
    • +
    +

    Miscellaneous Chores

    +
      +
    • add consumer function utils (50e2d66)
    • +
    • add consumer system v2 sub results (b78b035)
    • +
    • add testing of condition in consumer system consumer function (50e2d66)
    • +
    • capture return values from a decorated function (09ef23e), closes #4489
    • +
    • capture valid neqsim states (f9c8b09)
    • +
    • change to absolute image links in readme (#16) (9a54f51)
    • +
    • conditions in tabular consumer function (50e2d66)
    • +
    • correct link to documentation from README.md (f185a7f)
    • +
    • coverage from coverage.py is not directly supported (8e76c8a)
    • +
    • enable B904 (65ac18b)
    • +
    • evaluate consumer system v2 consumers according to input order (0088232)
    • +
    • fix badges (dd2fd6b)
    • +
    • migration guide changed resampling method (#38) (d4f11dc)
    • +
    • move conditioning for consumer system consumer function (50e2d66)
    • +
    • move conditions for compressor consumer function (50e2d66)
    • +
    • move conditions for direct consumer function (50e2d66)
    • +
    • move conditions in pump consumer function (50e2d66)
    • +
    • move evaluation of conditions before calculations (#24) (50e2d66)
    • +
    • remove energy usage before conditioning from tests (50e2d66)
    • +
    • remove energy_usage_before_conditioning from results (50e2d66)
    • +
    • set power to zero when rate (and fuel consumption) is zero (#27) (1ee5bfd)
    • +
    • typo (9c3af00)
    • +
    • typo (389db6f)
    • +
    • update dependencies to latest compatible (5809862)
    • +
    • update description etc in readme (f37dbb7)
    • +
    • update docstring for numeric_methods (be435c3)
    • +
    • update test snapshots (1ee5bfd)
    • +
    +

    8.2.1 (2023-05-09)

    +

    Miscellaneous Chores

    + +

    Continuous Integration

    +
    + + \ No newline at end of file diff --git a/docs/changelog/latest/index.html b/docs/changelog/latest/index.html new file mode 100644 index 0000000000..ea55fad98f --- /dev/null +++ b/docs/changelog/latest/index.html @@ -0,0 +1,16 @@ + + + + + +Next | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/changelog/separator/index.html b/docs/changelog/separator/index.html new file mode 100644 index 0000000000..cc48428d34 --- /dev/null +++ b/docs/changelog/separator/index.html @@ -0,0 +1,13 @@ + + + + + +--- | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/changelog/v7-0-release/index.html b/docs/changelog/v7-0-release/index.html new file mode 100644 index 0000000000..1857b0b783 --- /dev/null +++ b/docs/changelog/v7-0-release/index.html @@ -0,0 +1,65 @@ + + + + + +v7.0 | eCalc™ Docs + + + + +

    eCalc v7.0

    +

    Features

    +
      +
    • +

      Add VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES compressor model. See Variable speed compressor train model with multiple streams and pressures.

      +
    • +
    • +

      Add GERG model to FLUID model as EOS_MODEL. Now available GERG_PR and GERG_SRK.

      +
    • +
    • +

      Add UNITS: EFFICIENCY to compressor charts and pump charts. Plus additional input unit support.

      +
    • +
    • +

      Add support for both water and H2O in fluid composition.

      +
    • +
    • +

      Add POWER_ADJUSTMENT_CONSTANT for all applicable models to adjust power/energy usage with a constant factor.

      +
    • +
    • +

      Add water as allowed FLUID model component.

      +
    • +
    • +

      Improve models documentation

      +
    • +
    • +

      Deprecation: CONDITION is now a single expression instead of list.

      +

      If you previously had a list it is recommended to use the CONDITIONS keyword instead. This will become a requirement in a future release.

      +

      Alternatively you could merge the conditions to a single expression. This is what is done automatically when using the CONDITIONS keyword.

      +
           CONDITION: expression1 {*} expression2 
      CONDITION:
      - expression1
      - expression2
      +
    • +
    +

    Fixes

    +
      +
    • Handle date columns year as year and not timestamps
    • +
    • Handle suppressed ecalc errors and division by zero
    • +
    • Handle timeseries with one entry
    • +
    • Handle poorly formatted csv data with tabs, multiple spaces and mixed float/integers.
    • +
    • Handle 0 regularity
    • +
    • Handle emission intensity when only one timestep
    • +
    • Changed emission intensity to NaN when hydrocarbon export is zero
    • +
    +

    CLI

    +

    Feature

    +
      +
    • Major revision of CLI for future development.
    • +
    • Add Flow diagram support
    • +
    • Improve logging, warnings and error messages. DEBUG should now give a lot of information.
    • +
    • Add support for list in 'CONDITION' keyword
    • +
    +

    Fix

    +
      +
    • Fix issue when using dates in ELECTRICITY2FUEL
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v7-1-release/index.html b/docs/changelog/v7-1-release/index.html new file mode 100644 index 0000000000..a060262a4d --- /dev/null +++ b/docs/changelog/v7-1-release/index.html @@ -0,0 +1,63 @@ + + + + + +v7.1 | eCalc™ Docs + + + + +

    eCalc v7.1

    +

    Features

    +
      +
    • +

      Add new CATEGORY with name OFFSHORE-WIND to report power usage from offshore windfarms. Should be negative load to deduct from genset, if what is supplied externally. Also added to LTP Reporting. See excerpt example below:

      +
      - NAME: wind_turbine
      CATEGORY: OFFSHORE-WIND
      ENERGY_USAGE_MODEL:
      TYPE: DIRECT
      LOAD: -4.4 # MW
      +
    • +
    • +

      Add new CATEGORY with name TURBINE-GENERATOR and POWER-FROM-SHORE to report power consumption separately from installation and onshore (land) for generators. If not set, +defaults to TURBINE-GENERATOR. See excerpt example below:

      +
      GENERATORSETS:
      - NAME: genset
      CATEGORY: TURBINE-GENERATOR
      ELECTRICITY2FUEL: A_genset
      ...
      ...
      - NAME: power_from_shore
      CATEGORY: POWER-FROM-SHORE
      ELECTRICITY2FUEL: onshore_power
      ...
      +
    • +
    +

    where electricity2fuel for onshore power in general would have power map to 0 fuel usage

    +
      +
    • +

      Add new CATEGORY with name GAS-DRIVEN-COMPRESSOR to report power consumption for gas(-turbine)-driven compressors for LTP. Also added to LTP Reporting. See excerpt example below:

      +
      - NAME: gascompression_2
      CATEGORY: GAS-DRIVEN-COMPRESSOR
      ENERGY_USAGE_MODEL:
      TYPE: COMPRESSOR
      +
    • +
    • +

      Allow single speed and variable speed compressor train to run with zero pressure and non-zero rate. Will raise warning, and affected time steps will not be calculated, but eCalc will run.

      +
    • +
    • +

      Add a POWER column data to the COMPRESSOR_TABULAR csv-file for a fuel-driven SAMPLED_COMPRESSOR in order to also get energy reported as power (MW). See Header requirements for the sampled compressor csv file

      +
    • +
    • +

      Add surge control margin to variable speed compressor charts. See Surge control margin for variable speed compressor chart.

      +
    • +
    • +

      Ensure non-infinite loops by setting max 50 iterations for compressor models. Will raise warning in the logger if not converged.

      +
    • +
    • +

      Bug in max rate calculation for simplified compressor train. Wrong convergence criterion leading to too early exit from iteration.

      +
    • +
    • +

      VARIABLES can be specified in yaml and referred to in expressions.

      +
      VARIABLES:
      salt_water_injection:
      VALUE: SIM1:COL1 {*} 2
      +

      Use this variable by referencing it as $var.salt_water_injection in an +expression.

      +
      EXPRESSION: "$var.salt_water_injection {/} 2"
      +

      See VARIABLES for more information.

      +
    • +
    +

    Breaking changes

    +
      +
    • CONVERT_TO_RATE no longer supported. If this was something you used, let us know so we can know the use case.
    • +
    +

    CLI

    +
      +
    • Experimental: Add JSON v3 output to cover needs that are no longer supported by v2 because of tight coupling with core code. Both new and old format is provided, and will be stored when using the --json argument.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v7-2-release/index.html b/docs/changelog/v7-2-release/index.html new file mode 100644 index 0000000000..edef82db12 --- /dev/null +++ b/docs/changelog/v7-2-release/index.html @@ -0,0 +1,59 @@ + + + + + +v7.2 | eCalc™ Docs + + + + +

    eCalc v7.2

    +

    Features

    +
      +
    • +

      Add :code:ecalc show yaml model.yaml command.

      +

      The command will only read the yaml file, include the files that should be included, then show the resulting yaml. +There is no need to run the model beforehand.

      +

      This should help figure out problems with :code:!include.

      +
    • +
    • +

      BREAKING CHANGE!: CATEGORY is MANDATORY for Generator Sets. To be able to handle this, the MISCELLANEOUS category +has been introduced for Generator sets for users to be able to set this to generator sets that do not apply to other categories, +and to e.g. except for LTP output.

      +
      GENERATORSETS:
      - NAME: genset
      CATEGORY: TURBINE-GENERATOR
      ELECTRICITY2FUEL: A_genset
      ...
      ...
      - NAME: power_from_shore
      CATEGORY: POWER-FROM-SHORE
      ELECTRICITY2FUEL: onshore_power
      ...
      +
    • +
    • +

      EXPERIMENTAL: Add show results command to cli.

      +

      When running ecalc, either by ecalc run model.yaml or ecalc model.yaml we will store the results in your +home-directory. You don't have to specify any specific arguments for this to happen.

      +

      A new command ecalc show results is introduced. This command can be used to display all the results, or you can use +the argument --name to only show results for a specific component.

      +

      What is a component? Currently the supported component names are the name of the model (filename without the yaml ending), +installation names, generator set names, electricity consumer names and fuel consumer names.

      +

      ecalc show results --name "component name" will give a json file with only the specified component results.

      +

      The output format can be changed to csv by specifying --output-format csv. This will try to give all the data represented +in the json output, but some of it will be filtered as it does not fit the tabular csv format.

      +

      Examples

      +

      Show all results in json format: ecalc show results or ecalc show results --output-format json +Show model results (totals) in json format ecalc show results --name model (if using the model.yaml file as shown above) +Show model results (totals) in csv format ecalc show results --name model --output-format csv

      +

      Deprecation warning: Running ecalc without the 'run' argument is deprecated. Use 'ecalc run arg1 ... argN' instead. +As this is an experimental feature ecalc run might see breaking changes in future releases, you are free to ignore +the deprecation warning for a while if you don't want to be exposed to those changes. ecalc show will still work as +expected.

      +
    • +
    +

    Fixes

    +
      +
    • Deprecate json_v2 output, json_v3 should be used instead. json_v2 (and json_v1) will be removed in the next release.
    • +
    • Allow Single and Variable Speed Compressor Trains to run regardless of non-convergence in numeric root finding algorithms. This is a rate situation and caused by numeric instability. If this happens there will be logged an error in the log together with relevant data. Use result with caution.
    • +
    • Use Brent's method instead of secant method to find roots used in numeric iterations for compressor models. Faster and more robust compared to old secant method.
    • +
    • Correct prioritazion of compressor system when the compressor system is more complex than only splitting rates on more and more duplicate compressor trains.
    • +
    • Added warning both in documentation and code about using Generic compressor chart with design point calculated from input data in a COMPRESSOR_SYSTEM energy usage model
    • +
    • Improved units and results mapping. The consumed energy is now reported under energy_usage, and power_rate is included if relevant regardless of energy_usage.
    • +
    • Suction pressures were not correctly set, and defaulting to 0, in some cases when a list of pressures were given.
    • +
    • In cases when only one timestep was evaluated in a consumer system, and the first prioritized operational setting was outside capacity, it was nevertheless chosen.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v7-3-release/index.html b/docs/changelog/v7-3-release/index.html new file mode 100644 index 0000000000..43f8667819 --- /dev/null +++ b/docs/changelog/v7-3-release/index.html @@ -0,0 +1,33 @@ + + + + + +v7.3 | eCalc™ Docs + + + + +

    eCalc v7.3

    +

    Features

    +
      +
    • +

      BREAKING CHANGE!: +Fixed speed pressure control options changed. One option is added, where the ASV is modelled as +being common for the entire train, and the names of the options with individual ASVs have changed. +The available options for pressure control in a single speed compressor train are now:

      +
        +
      • UPSTREAM_CHOKE
      • +
      • DOWNSTREAM_CHOKE
      • +
      • COMMON_ASV (NEW)
      • +
      • INDIVIDUAL_ASV_RATE (changed from ASV_BALANCED_MARGIN)
      • +
      • INDIVIDUAL_ASV_PRESSURE (changed from ASV_WITH_BALANCED_PRESSURE_RATIOS)
      • +
      +
    • +
    +

    Fixes

    +
      +
    • Power rate reporting now works for consumer systems for supported compressor models for LTP reporting.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v7-4-release/index.html b/docs/changelog/v7-4-release/index.html new file mode 100644 index 0000000000..c34ae8e412 --- /dev/null +++ b/docs/changelog/v7-4-release/index.html @@ -0,0 +1,64 @@ + + + + + +v7.4 | eCalc™ Docs + + + + +

    eCalc v7.4

    +

    Features

    +
      +
    • +

      Added is_valid and is_extrapolation flags in JSON-output.

      +
    • +
    • +

      Added is_valid flags to all energy usage model and consumer model results.

      +
    • +
    • +

      Add additional result data when compressors are running outside of capacity

      +
    • +
    • +

      Add Direct Emitters to JSON-output.

      +
    • +
    • +

      Add power capacity margin for generator set results.

      +
    • +
    • +

      Add design head, rate and efficiency for generic compressor charts from design point.

      +
    • +
    • +

      Add UNITS to PUMP_CHART_SINGLE_SPEED and PUMP_CHART_VARIABLE_SPEED

      +
    • +
    • +

      Added FixedSpeedPressureControl to VariableSpeedCompressorTrainCommonShaft and VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPressures, enabling eCalc to possibly find a solution either along the minimum speed curve or through choking if the discharge pressure at minimum speed it too high. Default set to DOWNSTREAM_CHOKING.

      +
    • +
    • +

      BREAKING CHANGE!: When specifying a stage in a VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPRessures, the STREAM yaml keyword has been changed from a string to a list, to allow for multiple streams entering or leaving the compressor train at the same stage.

      +
      STAGES:
      - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
      COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
      STREAM: <Optional>
      - <reference stream from STREAMS for one in- or outgoing stream. Optional>
      - <reference stream from STREAMS for another in- or outgoing stream. Optional>
      +
    • +
    • +

      BREAKING CHANGE!: A CONSUMER with a CONSUMER_SYSTEM. Mixing between SYSTEM and non-system is no longer supported.

      +
    • +
    • +

      BREAKING CHANGE!: User MUST specify FUEL or POWER as one of the headers in TABULAR format. This was documented as mandatory, but not validated properly, hence eCalc would be allowed to run assuming POWER (incorrectly).

      +
    • +
    +

    Fixes

    +
      +
    • Having several ingoing/outgoing streams at the same compressor train stage should now actually work.
    • +
    • Extrapolation flag in JSON/CSV-output now correctly indicates if data has been extrapolated. is_valid now indicates if datapoint is valid when extrapolation is turned off.
    • +
    • Speed-column no longer required for single speed compressor chart read from file
    • +
    • Support time-slots for CONSUMER with ENERGY_USAGE_MODEL TYPE: CONSUMER_SYSTEM
    • +
    • Re-add support for FUEL timeslots
    • +
    • Failing compressor train when target pressure is too low and pressure control is used. Now correctly runs with valid result and chart area flag "below minimum flow rate".
    • +
    • Use of TABULATED energy_usage_model was not supported in new json result format causing error, will now work.
    • +
    • Incorrect default energy_usage_type POWER was always set for TABULATED energy_usage_model. Now it will be set based on FUEL or POWER column specified in facility input. eCalc will fail if neither FUEL nor POWER is specified in the facility inputs file. Patched in v7.4.1
    • +
    • Correct LTP gasTurbineCompressorConsumption calculation when a consumer is not initialized at first timestep of global time vector. Patched in v7.4.2
    • +
    • Choke discharge pressure when using DOWNSTREAM_PRESSURE_CONTROL for variable speed compressor train. Patched in v7.4.2
    • +
    • eCalc must support when using more than one energy usage model for calculating FuelConsumerPowerConsumption for LTP. Previously this resulted in missing calculations. Patched in v7.4.3.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v7-5-release/index.html b/docs/changelog/v7-5-release/index.html new file mode 100644 index 0000000000..41c88fef28 --- /dev/null +++ b/docs/changelog/v7-5-release/index.html @@ -0,0 +1,66 @@ + + + + + +v7.5 | eCalc™ Docs + + + + +

    eCalc v7.5

    +

    Features

    +
      +
    • Add YAML interface for PRESSURE_CONTROL for Single and Variable Speed Compressor Train
    • +
    • Add support for PRESSURE_CONTROL: NONE for Variable Speed Compressor Train
    • +
    • Run GENERATORSETS at max capacity with invalid timestep-flags instead of forward-filling last valid value (extrapcorrection)
    • +
    • Add support for uploading models as a zip-file
    • +
    • Apply resampling by FREQUENCY when exporting CSV
    • +
    • Support single speed compressor chart as csv resource
    • +
    • Improved support for uploading YAML-files. Comments, whitespaces, inline lists should now be preserved instead of removed and reformatted
    • +
    +

    Fixes

    +
      +
    • +

      Add missing power loss factor for Compressor Train Variable Speed Multiple Pressure model.

      +
    • +
    • +

      Ensure that GENERATORSETS stops when consumer power rate is zero

      +
    • +
    • +

      Ensure invalid time-step and zero power rate for the genset when the el-consumer(s) starts before the Genset providing power.

      +
    • +
    • +

      Correct handling of power rate in LTP export wen combining compressors with and without fuel in temporal models.

      +
    • +
    • +

      validate order of temporal models

      +

      Temporal models should be specified in chronological order

      +
    • +
    • +

      validation of variable names

      +

      Make sure the full variable name is matched against the regular expression. +Previously we allowed special characters for all characters except the first.

      +
    • +
    • +

      Avoid crash when ENERGY_USAGE_MODELs are defined only outside the time window of the CONSUMER.

      +
    • +
    • +

      Proper result handling when GENERATORSETS has not yet started and el-consumer is running.

      +
    • +
    +

    CLI

    +
      +
    • +

      add --skip-validation argument

      +

      Make it possible to skip the validation step, passing the data to the next step. This will still have some +validation and might give a more clear error message.

      +
    • +
    • +

      add --simple-output argument

      +

      Use simple output argument to get a simplified result object showing only the most relevant results such as +energy consumption and emissions.

      +
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v7-6-release/index.html b/docs/changelog/v7-6-release/index.html new file mode 100644 index 0000000000..73a5b26f20 --- /dev/null +++ b/docs/changelog/v7-6-release/index.html @@ -0,0 +1,18 @@ + + + + + +v7.6 | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/changelog/v8.0-release/index.html b/docs/changelog/v8.0-release/index.html new file mode 100644 index 0000000000..bf888e2922 --- /dev/null +++ b/docs/changelog/v8.0-release/index.html @@ -0,0 +1,62 @@ + + + + + +v8.0 | eCalc™ Docs + + + + +

    eCalc v8.0

    +

    eCalc™ v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some +of the highlights:

    +

    New features

    +
      +
    • Improved the accuracy of the compressor and pump models
    • +
    • Changes to CSV output +
        +
      • reduced the number of columns
      • +
      • simplified headers, added units
      • +
      • renamed power_rate to power
      • +
      • the is_invalid column is now reported as is_valid
      • +
      +
    • +
    • Changes to LTP: +
        +
      • renamed loading and storage columns
      • +
      • added categories for flare, fugitive emissions, name should no longer be used
      • +
      +
    • +
    • Changes to JSON: +
        +
      • json_v1 and json_v2 has been removed.
      • +
      +
    • +
    +

    Experimental features

    +
      +
    • Add maximum power limit for compressor models
    • +
    +

    Breaking changes

    +

    Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:

    +

    YAML

    +
      +
    1. All component names must be unique to avoid ambiguity in reporting
    2. +
    3. UNITS are required when setting up compressor and pump charts
    4. +
    5. Restrict allowed characters in component names and emission names
    6. +
    7. NAME no longer used for LTP reporting, use CATEGORY instead
    8. +
    9. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)
    10. +
    +

    CLI

    +
      +
    1. Invoking eCalc™ directly is no longer supported, use ecalc run instead.
    2. +
    3. Log level should be specified as the first argument + log to file
    4. +
    5. Model yaml-file needs to come last
    6. +
    7. Extrapolation (correction) is now always used and cannot be disabled
    8. +
    9. Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export
    10. +
    11. Simple results are now default for json
    12. +
    +

    Check out the migration guide

    + + \ No newline at end of file diff --git a/docs/changelog/v8.1-release/index.html b/docs/changelog/v8.1-release/index.html new file mode 100644 index 0000000000..464a7b76c9 --- /dev/null +++ b/docs/changelog/v8.1-release/index.html @@ -0,0 +1,32 @@ + + + + + +v8.1 | eCalc™ Docs + + + + +

    eCalc v8.1

    +

    eCalc™ v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:

    +

    New features

    +
      +
    • Bug fixes
    • +
    +

    Breaking changes

    +

    Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:

    +

    Input: YAML / Resource files

    +
      +
    1. We do no longer accept missing data in resource or timeseries resource files, since it easily leads to ambiguities and errors.
    2. +
    3. New Category: STEAM-TURBINE-GENERATOR has been introduced, which works similar as OFFSHORE-WIND
    4. +
    5. TIME_SERIES has had a makeover with new type and renamed attributes, to be less ambiguous and error-prone.
    6. +
    +

    Output: LTP

    +
      +
    1. A few columns in LTP export has changed names in order to be compatible with Centuries
    2. +
    3. A new column in LTP export has been introduced: steamTurbineGeneratorConsumption (matching with the new category)
    4. +
    +

    Check out the migration guide

    + + \ No newline at end of file diff --git a/docs/changelog/v8.2-release/index.html b/docs/changelog/v8.2-release/index.html new file mode 100644 index 0000000000..3956b84e2b --- /dev/null +++ b/docs/changelog/v8.2-release/index.html @@ -0,0 +1,28 @@ + + + + + +v8.2 | eCalc™ Docs + + + + +

    eCalc v8.2

    +

    eCalc™ v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See +the migration guide for details on changes, where relevant.

    +

    New features

    +
      +
    • STP is available as a predefined TSV file-export of data. Use argument --stp-export on cli.
    • +
    • Output emissions in fixed and predicted order in JSON export
    • +
    • BREAKING: Conditions in YAML model that evaluates to false will no longer be calculated and outputted
    • +
    • Using average rates instead of forward filling when resampling rates to a given output frequency
    • +
    • New Categories added to STP and LTP export
    • +
    • Operational settings are now 1-based instead of 0-based.
    • +
    +

    Fixes

    +
      +
    • Some VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES models have returned a too low INTERSTAGE_PRESSURE when using INDIVIDUAL_ASV_RATE control. The INDIVIDUAL_ASV_RATE fixed speed pressure control now returns the required INTERSTAGE_PRESSURE correctly.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v8.3-release/index.html b/docs/changelog/v8.3-release/index.html new file mode 100644 index 0000000000..416fd31ddc --- /dev/null +++ b/docs/changelog/v8.3-release/index.html @@ -0,0 +1,29 @@ + + + + + +v8.3 | eCalc™ Docs + + + + +

    eCalc v8.3

    +

    eCalc™ v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See +the migration guide for details on changes, where relevant.

    +

    New Features

    +
      +
    • To save time in calibration and help diagnose pump issues: When calibrating or seeing why a pump is invalid, the most important thing to look at is the head. Now the head is available in the JSON file.
    • +
    +

    Fixes

    +
      +
    • A bug in the mixing of fluid-streams in compressor trains were fixed. This bug caused the density at standard conditions not to be updated, leading to the standard rates being wrong. This is expected to change the results of some eCalc Models
    • +
    +

    Breaking changes

    +

    Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:

    +

    Input: YAML / Resource files

    +
      +
    1. It is no longer accepted to change ENERGY_USAGE_MODEL TYPE over time, within one consumer. In case TYPE evolution is needed, the model can be split in two consumers.
    2. +
    + + \ No newline at end of file diff --git a/docs/changelog/v8.4-release/index.html b/docs/changelog/v8.4-release/index.html new file mode 100644 index 0000000000..a1ca0a5768 --- /dev/null +++ b/docs/changelog/v8.4-release/index.html @@ -0,0 +1,26 @@ + + + + + +v8.4 | eCalc™ Docs + + + + +

    eCalc

    +

    New Features

    +
      +
    • Add requested inlet- and outlet compressor pressures from input data to results. In cases where active pressure control mechanisms are active, requested inlet- and outlet pressures may differ from calculated pressures. It is now possible to analyse both requested- and calculated pressures.
    • +
    • Specify rate type for majority of output rate results as either stream day or calendar day.
    • +
    • Improved error messages
    • +
    +

    Fixes

    +
      +
    • Actual rate was incorrectly returned for compressor sampled. Actual rate cannot be known for compressor sampled since we need to know fluid properties in order to do that. Actual rate has therefore been removed from compressor sampled.
    • +
    • Handle bug in Variable Speed Compressor Train With Multiple Streams And Pressures when no rate is entering a compressor stage wrt. recirculation.
    • +
    • Other minor fixes
    • +
    +

    Breaking changes

    + + \ No newline at end of file diff --git a/docs/changelog/v8.5-release/index.html b/docs/changelog/v8.5-release/index.html new file mode 100644 index 0000000000..c085ee41bf --- /dev/null +++ b/docs/changelog/v8.5-release/index.html @@ -0,0 +1,28 @@ + + + + + +v8.5 | eCalc™ Docs + + + + +

    eCalc

    +

    New Features

    +
      +
    • Added chart area flag NO_FLOW_RATE to the possible statuses for an operational point in a variable speed compressor chart. The chart area flags can currently only be found in the json result file, but we will also try to find a way of displaying this information in the WebApp as well.
    • +
    • Whenever there is a variable speed compressor only recirculation fluid (can happen in a multiple streams and pressures compressor train) a warning will be logged.
    • +
    • Add rate type to more equipment in results
    • +
    +

    Fixes

    +
      +
    • nmvoc emissions were incorrectly reported for the ltp categories HEATER and BOILER: The emission query filters included nox, and are now corrected to nmvoc.
    • +
    • Instead of applying the surge control margin to the average of the minimum flow rate for all speed curves in the compressor chart, a more robust calculation is implemented for variable speed compressors: The updated minimum flow is calculated individually for each speed, using the control margin as the increase in minimum flow, in percentage or fraction of the rate difference between minimum- and maximum flow, for the given speed. This solves the problem of eCalc failing when the new calculated minimum rate was outside the compressor chart for a given speed.
    • +
    • Improved error messages
    • +
    • Other fixes
    • +
    +

    Breaking changes

    +

    None

    + + \ No newline at end of file diff --git a/docs/changelog/v8.6-release/index.html b/docs/changelog/v8.6-release/index.html new file mode 100644 index 0000000000..4ad61f0e84 --- /dev/null +++ b/docs/changelog/v8.6-release/index.html @@ -0,0 +1,28 @@ + + + + + +v8.6 | eCalc™ Docs + + + + +

    eCalc

    +

    New Features

    +
      +
    • Added a ModelInputFailureStatus. If there are errors in the rate or pressure input to a compressor a failure code will be returned in the compressors failure_status (INVALID_RATE_INPUT or INVALID_SUCTION/INTERMEDIATE/DISCHARGE_PRESSURE_INPUT.
    • +
    • Rate type is included in header for csv export. E.g. Sm3/sd for streaming day and Sm3/cd for calendar day.
    • +
    • Generating generic variable speed compressor charts from input rates/heads has a new and improved algorithm. The new algorithm tends to favour increase in head compared to the previous one. Running old models with this new algorithm may lead to slight changes in the results.
    • +
    +

    Fixes

    +
      +
    • Fixed bug giving small numerical difficulties when calculating maximum standard rate for a simplified compressor train
    • +
    • Ensure that start date and end date in the global time vector is consistent with the requested output frequency. This makes sure that resampling (typically for monthly or yearly reporting) can be done even when the start or end date is outside of the requested reporting frequency (e.g. starting in August when the reporting frquency is yearly), and that the resampling is done without dropping volumes.
    • +
    +

    Breaking changes

    +
      +
    • Economic details have been deprecated from eCalc. Input data such as tax, quota and price for fuel and emissions will now be ignored, and will hence also no longer be reported. If you have used those in your model, they will be ignored. It will be treated as an error in a future version of eCalc.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v8.7-release/index.html b/docs/changelog/v8.7-release/index.html new file mode 100644 index 0000000000..f42016d0b1 --- /dev/null +++ b/docs/changelog/v8.7-release/index.html @@ -0,0 +1,29 @@ + + + + + +v8.7 (Latest) | eCalc™ Docs + + + + +

    eCalc

    +

    New Features

    +
      +
    • Change emission rate type to calendar day, in alignment with the fuel rate which is also calendar day.
    • +
    • Update documentation with info about changing name from direct emitters to venting emitters. Both keywords will exist in the documentation for a while, with a description of which keyword is valid for which verisions of eCalc.
    • +
    +

    Fixes

    +
      +
    • Bug in compressor with turbine models with multiple streams and only one date.
    • +
    • Fix bug when aggregating model results, where the first model was wrongly reported as the aggregated result.
    • +
    • Fix problem with missing compressor chart when combining trains/compressors.
    • +
    • Improve error message when model/facility input does not exist.
    • +
    +

    Breaking changes

    +
      +
    • Change name from DIRECT_EMITTERS to VENTING_EMITTERS in input Yaml-file. Using DIRECT_EMITTERS will not cause eCalc to fail (this will change in a future version), but no output will be given for the actual emitters if the deprecated keyword is used.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v8.8-release/index.html b/docs/changelog/v8.8-release/index.html new file mode 100644 index 0000000000..da22c81d4c --- /dev/null +++ b/docs/changelog/v8.8-release/index.html @@ -0,0 +1,21 @@ + + + + + +v8.8 (Latest) | eCalc™ Docs + + + + +

    eCalc

    +

    New Features

    +
      +
    • Updated NeqSim to version 2.5.9. This may lead to small numerical differences in the results when old models are re-run with the latest version of eCalc.
    • +
    • Provide maximum rate in CompressorModelResult (if there are more than one stream, only max rate for the first one is reported)
    • +
    • Support for specifying RATE_TYPE (STREAM_DAY or CALENDAR_DAY) for VENTING_EMITTERS
    • +
    +

    Fixes

    +

    Breaking changes

    + + \ No newline at end of file diff --git a/docs/contribute/documentation-guide/documentation/index.html b/docs/contribute/documentation-guide/documentation/index.html new file mode 100644 index 0000000000..77804008a7 --- /dev/null +++ b/docs/contribute/documentation-guide/documentation/index.html @@ -0,0 +1,44 @@ + + + + + +Overview | eCalc™ Docs + + + + +

    Get started

    +

    This site was generated from the contents of your documentation folder using Docusaurus.

    +

    You will find the full documentation of Docusaurus here: Docusaurus Docs.

    +

    Prerequisites

    +

    You can contribute as long as you have access to the ecalc - GitHub Repository. +It is entirely possible to make changes by using your web browser alone. However, if you want to get live feedback on your +changes, we recommend that you run the documentation locally with the following prerequisites:

    + +
    info

    Since not all managed computers have the ability to install Node, you can use an IDE such as PyCharm, IntelliJ, VSCode, or similar, to preview Markdown code. +This has some limitations such as missing navigation bar, and it does not preview Docusaurus specific syntax such as the Admonitions used here.

    +

    Contributing

    +

    As a contributor you will have to use Git. Please find the Git Documentation for more details about git.

    +

    How it works

    +

    From Docusaurus own documentation:

    +
    +

    Docusaurus is a static-site generator. It builds a single-page application with fast client-side navigation, leveraging the full power of React to make your site interactive. It provides out-of-the-box documentation features but can be used to create any kind of site (personal website, product, blog, marketing landing pages, etc).

    +
    +

    While Docusaurus is rich on features, we use it mostly to host markdown pages. The main bulk of the documentation is located in documentation/docs. This is where you as a collaborator are encouraged to make changes.

    +

    For a quick intro to Markdown, see our Markdown section.

    +

    Special features

    +

    Docusuaurs has some special features that we are using actively. Please find the links listed here:

    +
    + + \ No newline at end of file diff --git a/docs/contribute/documentation-guide/markdown/index.html b/docs/contribute/documentation-guide/markdown/index.html new file mode 100644 index 0000000000..bdaa0011e0 --- /dev/null +++ b/docs/contribute/documentation-guide/markdown/index.html @@ -0,0 +1,21 @@ + + + + + +Markdown | eCalc™ Docs + + + + +

    Markdown

    +

    Docusaurus uses standard Markdown syntax plus Docusaurus Extended Markdown functionality.

    +

    Standard Markdown

    +

    Here is a quick summary or standard Markdown syntax:

    +

    summary = md`

    +

    Markdown summary

    +
    Desired styleUse the following Markdown annotationProduces the following sample HTML
    Heading 1# Title<h1>Title</h1>
    Heading 2## Title<h2>Title</h2>
    Heading 3### Title<h3>Title</h3>
    Heading 4#### Title<h4>Title</h4>
    Heading 5##### Title<h5>Title</h5>
    Heading 6###### Title<h6>Title</h6>
    ParagraphJust start typing<p>Just start typing<p>
    Bold**Text**<strong>Text</strong>
    Italic*Text*<em>Text</em>
    Strike~~Text~~<del>Text</del>
    Quoted (indent)> Text<blockquote><p>Text</p></blockquote>
    Code (inline)Statement<code>Statement</code>
    Code (fenced)Statement 1
    Statement 2
    Statement 3
    <pre><code><span>Statement 1</span><span>Statement 2</span><span>Statement 3</span></code></pre>
    List (unordered)* List item 1
    * List item 2
    * List item 3
    <ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul>
    List (ordered)1. List item 1
    2. List item 2
    3. List item 3
    <ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul>
    Images![Alternate text for image](path/to/image)<img src="path/image.jpg" alt="Alternative text for image>
    Hyperlinks[Link text](https://www.google.com/)<a href="https://www.google.com/">Link text</a>
    +
    note

    You may want to escape special html characters using \, and replace the great than symbol with &lt, otherwise Docusaurus +will confuse it with html code.

    + + \ No newline at end of file diff --git a/docs/contribute/get-started/index.html b/docs/contribute/get-started/index.html new file mode 100644 index 0000000000..58063aab50 --- /dev/null +++ b/docs/contribute/get-started/index.html @@ -0,0 +1,92 @@ + + + + + +Get started | eCalc™ Docs + + + + +

    Get started

    +

    Welcome! We are glad that you want to contribute to our project! 💖

    +

    This project accepts contributions via GitHub Pull Requests.

    +

    This document outlines the process to help get your contribution accepted.

    +

    There are many ways to contribute:

    + +

    You can start by looking through the GitHub Issues filtered by labels.

    +
    info

    We follow some contributor guidelines that you will find in our contributor guidelines.

    Don't worry if your contribution does not follow all the guidelines. We will guide you in the code review process. +The threshold for contributing is low, and we appreciate any contribution great or small. 🙏

    +

    Prerequisites

    + +

    How to contribute

    +

    Contribution is done in 3 simple steps:

    +

    Initiate change

    +

    For major changes, please open an issue first to discuss what you would like to change. For smaller changes, it is sufficient +to explain the change without referring to an issue.

    +

    Make a Pull Request

    +

    To contribute to the project, you will have to make the change and create a Pull Request on GitHub. How you do this depends on your role.

    +
      +
    1. Equinor internal contributors, you may open a Pull Request directly,
    2. +
    3. Independent contributors, you will Fork the repository.
    4. +
    +

    Get code review

    +

    Once a Pull Request has been made, we will give you feedback and maybe suggest changes.

    +

    The core team looks at pull requests on a regular basis, we review the code and guide you if needed. +Here you will find more information about the +GitHub Code Review Process

    +

    Guidelines

    +
      +
    • For major changes, please open an issue first to discuss what you would like to change
    • +
    • Work on your own fork of the main repo
    • +
    • Use a separate branch for each issue you’re working on
    • +
    • Use conventional commit. See our Git commit format for details, +and our Git guide for our full guide
    • +
    • Please include unit tests with all your code changes
    • +
    • We follow Trunk Based Development style of working with short-lived feature +branches.
    • +
    +

    Pull Requests

    +

    Please try to make your Pull Requests easy to review for us.

    +
      +
    • Make small pull requests. The smaller, the faster to review and the more likely it will be merged soon.
    • +
    • Don't make changes unrelated to the goals of your PR.
    • +
    +

    While you're writing up the pull request, you can add closes #<issue number> in the message body where issue number +is the issue you're fixing. Therefore, an example would be closes #42 would close issue #42.

    +

    Git commit format

    +

    Git commits are required to follow conventional commits. Please see +our Conventional Commit Guide for examples.

    +

    Readability

    +

    We use the pre-commit hooks in order to ensure uniform formatting and to exclude potential code issues.

    +

    We strive for readable code. A few good tips are:

    +
      +
    1. Self-documenting code with self-explaining variable names
    2. +
    3. Composition over inheritance
    4. +
    5. Functional code over Object-Oriented Code
    6. +
    7. Rugged code to write more robust code
    8. +
    9. Domain Driven Design to to match the code with the domain we are working on
    10. +
    +

    Code style

    +

    Except for the pre-commits hooks mentioned above, we also strive to follow the following code style:

    +
      +
    • Use capital letters for constants i.e. SECONDS_PER_HOUR
    • +
    • Try to split methods/modules/classes into smaller bits of code
    • +
    • Remove, do not comment out, unused code
    • +
    • Use types and type hinting
    • +
    • We comment the code when it is not self-explanatory
    • +
    • Be consistent with existing code style - try to make it look like the code is written by one developer
    • +
    • For Python, we follow PEP 8 – Style Guide for Python Code and PEP 20 - The Zen of Python:
    • +
    +
    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!
    +

    Please reach out to us if you have any questions. 👋

    +

    Thank you for your contribution! 🎉

    + + \ No newline at end of file diff --git a/docs/contribute/guides/conventional-commits/index.html b/docs/contribute/guides/conventional-commits/index.html new file mode 100644 index 0000000000..783cc9eed5 --- /dev/null +++ b/docs/contribute/guides/conventional-commits/index.html @@ -0,0 +1,24 @@ + + + + + +Conventional Commits | eCalc™ Docs + + + + +

    Conventional Commits

    +

    Git commits are required to follow conventional commits.

    +

    The message should be structured like this:

    +
    <type>[optional scope]: <description>

    [optional body]

    [optional footer(s)]
    +

    The type can be one of these types: feat, fix, build, ci, docs, style, refactor, test, and chore.

    +

    The description should be lower-case for the first letter. For description of optional parts, please refer to the +conventional Commits Docs.

    +

    Here are some simple example conventional commits:

    +
    feat: implement new awesome feature
    +
    docs: add developer guidelines
    +

    A more advanced example:

    +
    fix: prevent racing of requests

    Introduce a request id and a reference to latest request. Dismiss
    incoming responses other than from latest request.

    Remove timeouts which were used to mitigate the racing issue but are
    obsolete now.

    Reviewed-by: Z
    Refs: #123
    + + \ No newline at end of file diff --git a/docs/contribute/guides/git/index.html b/docs/contribute/guides/git/index.html new file mode 100644 index 0000000000..ae663da481 --- /dev/null +++ b/docs/contribute/guides/git/index.html @@ -0,0 +1,135 @@ + + + + + +Git | eCalc™ Docs + + + + +

    Git

    +

    Git is the version control system (VCS) that is responsible for tracking all changes done to the code base. +Git is a distributed version control system that tracks changes in any set of computer files, and allows for collaborative development +of source code and documentation. We use Git as a service through GitHub. See GitHub Docs +for more information about GitHub and how to get started.

    +
    info

    If you do not want to work with files locally, GitHub lets you complete many Git-related actions directly in the browser, including:

    +

    Setting up Git

    +

    Go to git-scm.com to download the appropriate git client unless it is already installed on your system.

    +

    To verify that git is installed, you can run:

    +
    git --version
    +

    See GitHub Docs - Set up Git for detailed instructions.

    +

    Using Git

    +

    Git is a powerful tool that can be used in many ways. We recommend the following resources:

    +
      +
    1. Introduction to git - GitHub - About git
    2. +
    3. How to get out of git trouble Oh shit, Git!?!
    4. +
    +

    Below we will describe the most commonly used commands and scenarios when working with git.

    +
    info

    In the following sections we use the syntax &ltsome text> where you should fill in your own values, such as:

      +
    • &ltchange type>: conventional commits change types such as feat, fix, docs, test, chore, refactor, etc.
    • +
    • &ltissue number>: the GitHub Issue Number that you are solving. This may be omitted if you are fixing something tiny.
    • +
    • &ltdescription>: a short summary of the code changes, e.g., fix: array parsing issue when multiple spaces were contained in string.
    • +
    +

    Cloning a git repository

    +

    Navigate to the location where you want to store the code, and clone the repository:

    +
    git clone git@github.com:equinor/ecalc.git
    +

    This will create a local copy of a project that already exists remotely. The copy will be stored in a sub-folder, with the +same name as the repository, ecalc/.

    +

    Tell Git who you are

    +
    git config --global user.name "My name"
    git config --global user.email example@email.com
    +

    This is what will show in the git log when you make changes.

    +

    Create your own branch

    +

    In order to create a new local branch and switch to it:

    +
    git checkout -b <type of change>/<issue number>-<description>
    +

    for new versions of git you may also use the more intuitive.

    +
    git switch -c <type of change>/<issue number>-<description>
    +

    Switch between existing branches

    +
    git checkout <branch name>
    +

    Fetch changes from GitHub

    +
    git pull
    +

    This will update the local branch you are currently in, with changes done in GitHub.

    +
    git push --set-upstream origin <change type>/<issue number>-<description>
    +

    Send your changes to GitHub

    +
    git push
    +

    This will update the remove repository on GitHub. If it is the first time for a new branch you will also +have to tell git that you are creating a new remote branch by using the command:

    +

    Check status of changes

    +

    List the files you have changed and those you still need to add or commit:

    +
    git status
    +

    Add files

    +

    Add new or changed files

    +
    git add <filename>
    +

    or adding everything in and below your working directory

    +
    git add .
    +

    Commit changes

    +

    Commit any files you've added with git add, and also commit any files you've changed since then:

    +
    git commit -m "<change type>: <description"
    +

    This will save a snapshot to the project history and completes the change-tracking process. +Anything that has been previously staged with git add will become a part of the snapshot with git commit.

    +

    Send changes to GitHub

    +

    In order to send changes back to GitHub, you will use the following command:

    +
    git commit -m "<change type>: <description"
    +

    Workflow examples

    +

    Pull Requests

    +

    For Equinor internal developers you are welcome to open a Pull Request directly in the ecalc repository.

    +

    Here's a quick guide:

    +
      +
    1. Clone the project to your machine: +
      git clone git@github.com:equinor/ecalc.git
      +
    2. +
    3. Create a branch locally with a succinct but descriptive name and prefixed with change type. +
      git checkout -b <change type>/<issue number>-<description of change>
      +
    4. +
    5. Add the changed files +
      git add <path to changed file(s)>
      +
    6. +
    7. Commit your changes using the conventional commits formatting for the commit messages. +
      git commit -m "<change type>: <description>"
      +
    8. +
    9. If your changes are in conflict with changes done by other, then you need to rebase and solve the change conflicts. This also ensures your code is running on the latest available code. +
      git fetch
      git rebase origin/main
      +
    10. +
    11. Push changes to GitHub +
      git push --set-upstream origin <change type>/<issue number>-<description>
      +
    12. +
    13. You can now Create a Pull Request
    14. +
    +

    Fork the repository

    +

    For external developers, you will contribute to the project through forking.

    +

    Here's a quick guide:

    +
      +
    1. Create your own fork of the repository
    2. +
    3. Clone the project to your machine +
      git clone git@github.com:equinor/ecalc.git
      +
    4. +
    5. To keep track of the original repository add another remote named upstream +
      git remote add upstream git@github.com:equinor/template-fastapi-react.git
      +
    6. +
    7. Create a branch locally with a succinct but descriptive name and prefixed with change type. +
      git checkout -b <change type>/<issue number>-<description>
      +
    8. +
    9. Make the changes in the created branch.
    10. +
    11. Add and run tests for your changes if needed (we only take pull requests with passing tests).
    12. +
    13. Add the changed files +
      git add <path to changed file(s)>
      +
    14. +
    15. Commit your changes using the conventional commits formatting for the commit messages. +
      git commit -m "<change type>: <description>"
      +
    16. +
    17. Before you send the pull request, be sure to rebase onto the upstream source. This ensures your code is running on the latest available code. +
      git fetch upstream
      git rebase upstream/main
      +
    18. +
    19. Push to your fork. +
      git push origin feature/my-new-feature
      +
    20. +
    21. Submit a Pull Request from a fork. Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us.
    22. +
    +

    That's it... thank you for your contribution!

    +

    After your pull request is merged, you can safely delete your branch.

    + + \ No newline at end of file diff --git a/docs/tags/e-calc/index.html b/docs/tags/e-calc/index.html new file mode 100644 index 0000000000..427bf4e865 --- /dev/null +++ b/docs/tags/e-calc/index.html @@ -0,0 +1,13 @@ + + + + + +18 docs tagged with "eCalc" | eCalc™ Docs + + + + +

    18 docs tagged with "eCalc"

    View All Tags

    v7.6

    Breaking changes

    v8.0

    eCalc™ v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some

    v8.1

    eCalc™ v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:

    v8.2

    eCalc™ v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See

    v8.3

    eCalc™ v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See

    + + \ No newline at end of file diff --git a/docs/tags/index.html b/docs/tags/index.html new file mode 100644 index 0000000000..4fd62b0c7e --- /dev/null +++ b/docs/tags/index.html @@ -0,0 +1,13 @@ + + + + + +Tags | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/tags/release/index.html b/docs/tags/release/index.html new file mode 100644 index 0000000000..d5630b1852 --- /dev/null +++ b/docs/tags/release/index.html @@ -0,0 +1,13 @@ + + + + + +18 docs tagged with "release" | eCalc™ Docs + + + + +

    18 docs tagged with "release"

    View All Tags

    v7.6

    Breaking changes

    v8.0

    eCalc™ v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some

    v8.1

    eCalc™ v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:

    v8.2

    eCalc™ v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See

    v8.3

    eCalc™ v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See

    + + \ No newline at end of file diff --git a/img/docs/asgb/asgb_lpp3_pd.png b/img/docs/asgb/asgb_lpp3_pd.png new file mode 100644 index 0000000000000000000000000000000000000000..400dfea968bcb91e6ba47099959f8fd4b79f6e0a GIT binary patch literal 8296 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 T#E$U)4geHislKd`Gx_*$?|LlL literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_fuel_result_comparison.png b/img/docs/asgb/asgb_lpp3_predef_fuel_result_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5c446cba995c2c97bdb0fcd265fe02ed7052f6 GIT binary patch literal 150658 zcmbSzcRZGT`1WmOCVTG?krCP13Yj6vCaYwxvR77!>>Z($Eqjk-WLC%~E1RsW_q=+Z z=lA~Jf8WnXo}S$9`?|j0^Lw7hc^t=ig=whWzKBPIheDw)Dk;j}MWHYVQ7Ci{oD1+T z&CT^g@E=?UMLlN}im)B|gBH(4NDKdn?V_ZrfW3f=gO7nrXJ{9OLNTF~=5 zlgJhJ51P{LG6)1P1o#N#)X-T(0|_*xWlS~6WC*Aqd*(rOX?UYwZx#m5*QKW$Z39*Ix~?701%0Ay#Kf~C&6@|8 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%0AL8tOs!vq@T`rSTpMNWPKs0dGCQh#N6 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ÌwZMAY&g+Y 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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_stage1.png b/img/docs/asgb/asgb_lpp3_predef_stage1.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0bd23bc3d1e24990cee592784313b9d07f841d GIT binary patch literal 19860 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 TBsmQTY7mHf literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_stage1_2031.png b/img/docs/asgb/asgb_lpp3_predef_stage1_2031.png new file mode 100644 index 0000000000000000000000000000000000000000..2adb02883040bc2fc35eb6b36d6032bd23b9bbd7 GIT binary patch literal 19734 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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_stage2.png b/img/docs/asgb/asgb_lpp3_predef_stage2.png new file mode 100644 index 0000000000000000000000000000000000000000..495e68ea58871f35166eb491017b81c633829e91 GIT binary patch literal 18719 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

    ;L>Vl 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

    fqD1)+6CiIoeHfo4dph1~wW$qj4|k7P z&u*&b{pl(Y9hh@*ks<$9qF6OI_l8AOQh7c|wZ#9n_1ZLGwaIzS5k0>39@N2`AhjPM zDT^x%Vfe|tRek{xLDZp?@8$UGbP00R3z#A_g-FG4G2?6oua!d;rdFYctvkuZwK3xw z$HZnDAAuclW(U?U3Y{cxfmp30i2-W&HufjG=dpQc(T zk`GXkIJ@h@XJK)n==!gG{yJf`UFnF@T|t@GWmA5T3trXyt@G_M?3gq1r|CJ4ZXT1m z;qUjO^+$8&+WUFg7OtnbaHtpRwE^_s&>Sy1_)J)|9Eun>y${%H3E39?#|l3E8GDkh z&~EJ_GPgY^yu4N{q=)}iCpfwX<{A3_^_+q3#MhskVmcsg$IC?SZa>Orp6pyos0oo3 zb>h5Y1+z5*+j_j13?C)!{N<(L{G|)X_XkL}zu5B=CabKp5)pf}KI5{fIM=#*jkb;w zHulho1t$8d1+-d*i_|WOdTMG2za{JI0FF~rZ8R#ku73+0BC`F_7NfQqmcX8GOo zR$XZ$gJqv#`Im{?MAypgRllJ2I%KV)iQ1O!aLW64x0;`8s3kFl+y0*`or`4vzWbkY zrjwCkcA-+6Fie!~iHD?Jz3v5<)Y>qKb$kil4T$%EE>`t6UOFV;m^3EoBq2EP3_oB< zHK9bZA|_Rjo*S(ss-;%chl{trh!e^}JzpEX1lDcZjpX zcY>=F>I^@>G%PyYEUIkyMkM>)n7;tai(`J5%Bz@teAhZ(kMWK%%JFDaiZaEWK@xmY zkdeq#r4j)IRRplo_vw>I%UzLCf7==2q$TWe2`c<0;P-D|U%CwP2A}*KRCF&Yt&g$Y zQlae1db*+z?!iU36pdoft=gCk@g8rKEY`Ui8Iz}u<|xr==n(2R@`r0|(?NH&xh|R~ z=U$vpSNf=c19*8}@2+>f<~=}}<>|<1#oJ#I?M*N*nk^IrW@J7#APut3OAh$|arfvb zv=04i#oegc#9S3E?_5#VSVM4ACcP@@7hX$%6hl|vfXwSGqm8{L_h~VhbHK>yveT>g z$gZkO7FHBOAWB%MSkorwz1O%;&9pnn{b15_H`*9GxhV=Vz}7{}Zs!K=FLNS2+d$-! zW)E1r*FzNUh|x;qznzsF0jUo!wMpM=b1ilR2+W04tE6F%~p1&1f}uIt#wFORUe_*l#DMM+Y(!ZmQ-{gMY+;(33(u3$@T6L?2oB1HQ{ncO z^I*wqbe8Qg!F11c|Ni`lOA{Usmpr>4cHN=h=2j zb;$m_C_3qQ@L?-z68t(@JR6;q>?K)z-|m9oOeUP7hXchLN>|gdrscABgq)Of_$&H+ zm}uNX)e)ghNJlaUVbmGw&!oc|uJ)uX6eO7%XpXmOF#8H&Yif`ggC~Pw=GPL=uNWr5 z{7>L@gFAmvS7U?XoPLs@Yv_Mox7U&vh|Y7n6m)@wIK6(@y%91ZXY=ABvV_1+?li3A zUL6y@8s}ANK0lpJjZ&n4{d}<_@p;IK^2X6qx;q{oJU?Z!-8TM#pvv;pSJhv=PxqV; zs?y1!H#t8*z8UiS+s?c!jO7C)w=DdQWDoc<8|wh}+Ji9UKM?!h5Tq@f__Cm_CMLUi zXX`TXJ&&*>C|1pN*|ed*zUvsN+Vb0 zDv%Kj_44D>^;A;BX9`!vSI1bZQ5%zziHo`sGvhG{8xvfNP)El9o^^ABeiwKXeyIL zMio;F-zpggwr0brBO&!0OMOld{T>*wfulc~m(z1aFuSMat#2qPRpSVF>?xoM>H$uL zA^LUs-)ceHybOZ--imwsl-5p)#3mpN5J{p-9YkOuz1wB>;4|Q+Lb!R*ZhD(UX`>nm zla72O z>^tN;Ri1s4lMen|ain!660gsw+(K_U8U!n0D!-)z+6%N#I=!*oE(Z!+IU+v9F^@ov zA^NtxzP-@0wq&dUd_h8x;{{ARZ^E%%7VU~G)6=A*V^I6VYE-#wTbzLP4qW}njWsr{ zx$L1j!Ak_qeq3V;FH>F^r#dV0@!DOF&%JKPGD-Hit?gwF;OQoFA#`e7vmYGg&}J;dhEP+RV?-=MA6ww`(nj+v^D+Vvy8v4SY#JNl|KQ8q+6|Cy)E z=Q-13d=CcY`rj$QmnaDN6g&*bP<4Mz3mc7Ed(2-g&Vs^&fo>#Ui}_s|(WAmn!G<82 zJDkqdsl;hl-6lProufNc!Kf}9AJOs5oltNT?A{1mVLlR97J-$v0y|e9_s^U(&vurP zcoEf}DS`jY*&?}(pXgH-(^YgcbS=w#WY6#P?lsn;$$#5|n0$*nXt5-BMcmjwGuP7N zMNIbC1}ChNS+B!f-6WUeFJ21Sp9mmlQl<#O`2gQy$Hzf4SiZAt8`8OfgflxTjCPas z(z|qyFMfw?W=+>snrFRtK?fO@!~9F}9#32xcaSJ<#ygyLWke@m8rNBiuR-$>-_>`< z*}}?n#&phO-2dF_*5(JmKUsYiqNZ&K#oraH%~RhNQ^*GIN$?)Psf4OhObuI&U8ork%= zF7Kc4U7EhaKfw5v8-J>0M~=W7N^JB_>By`&iQBDIDC8UB->mSM=afg0*hG>Jt#VAh zxUG7cL9Fp?c|+<>cvYD-`Y4k%Z-&67*BCqY^(;PTsnm+Xp9Af>3X4QojT`@_v)o`BTu7OIB-9`JjN=(0LMVt@Opl!HKsNRrNK21tYl1)J8Y+ zGy=%dD;eb$M~-=hp=w$=tKehw5jOsi~cdHS-dv1O(;bT7B)I7P*1MT^O!=clG z?*(`Ewx-fLnvjN8|Je?jTy~4zbE95vN%im8tbQfeRxsU9VPX?w;a*?a^#W^KmJXCV z4hFDQcr|nHuM|#Km)uT>7yyBLMtwbH5FB_sCoIMlri@L;0YuwYiwVu}Z%Xsv`yB-~ zJZJlb(7V(&DZJP}CgW$pj~}8Tw)%wfJ{1LXzNDg{HEnmiwhC|RK65q&1r%!X@xS!9 z?Du@?L_woD8`gSYu|fXe798 zm)hU_1MU4>d8*k{wwi1@LzCa&U;FSxIbJ&}m-=WK&-Y)xa`fn`-~E-pz4LFgaFYEp z^l<8~Pu#WxMaI4ch&KZJVL0zCp#P-mu{x^3gaMu;M*v?kq;p9oakzpHx? z*9S#1)P3gXw5_lcWFyuSyW647`J3C53UW{TaaMOtI9=fC)P&2vbq+1Q4fhA=?Z-6J z|Esprk$|43lzsc!p;A?aYDW8|vdBkPv@2L`yVs-g<QV*g&kEfDvv+ zA(Xdw4tQoZKm;6UoydfPf=3y_^~vo5L5FqzNj0wk)p;kh4+wB={{?IAdBk z8~Crp^hwNv+P<&ZT^0%!MrYUtxYUS7Ku~TnnH-(g*zML7z*n|yfX-~ZMqEB9T~u1Co_d#l_`TQavA>5&jTPa1+Li~Zkk%_q3p%5L!P37GgN>7TT8c8apUATyaiZ#l?_FR+=F7+=VVq`wbtKSXC( zl7k;NH+GMxeN9->Y%S;LDc~}GqsBPBcpQ0WARR+V3*w$LteQERx^HKl(x+M}KqmS0 zPms7z|5ZDT{W`5WE2X4-Fvfqjm~`Cn;!pBeciUgJKY7G*-@ndmNf#e)!F?z=5xKrq z(C9k%IbfI%qFejy6wmBTZy^P&w}yhETbm!3^R#b>(M6$$6sW~y7CwcLJERQR|2h~d zSMk**h_N@3vRSzZN)55vpr`r0#g*o#%izr_Y~{;!@m=LWtX$Dxji}4cY!GVb#~2@- z*Gxy88QH}?d8_nfFjpWrK)y`XS=Q|Au2}v7iv8_jpjng_SmAHD{(X-n*+LUD%9!I} zP%bI}*734dG%J{y{ACVBmW1%G4R%a(CGaY`TQ`lDf|HN38}Ra_&2EMRrDFN%;MxyO zHj@T$N%mflTUN;dxwZfyr{TrLtK|d&Wt%>lNLCJmtUQp`4`--$v|dzRQHHt!Wdt@v z|M8va4P1R^Rgsr2V6(t5d(s!RLvyh(W{Wl`Yq8EYa{(VFSUun-ay*p~>YSZ(3A?Q> zhZucxD<#Xt_x>P95#T|~%@sLGdQ{`2dHM}^C!C%sS;+iUy zz>BBp5lf%pRwzV~ybLQ&``nz*tHciEF^MO#ZS)^=fWGvAPur!+=3Q@W6vMK&mZgSb zrkev7AzU62Sqw6X?7FrKMh)*Zj*+9kD?<}%M)~J%jmV1rh;ppw7 zVKa~=qsz|Wso?~+_GxSDW4_4_DGuEVDehKSjuizp+9%wu@%VEYbrA*^_X?unOUu~fBFp*lBlU?z-lV>->bO1#7?`62M)(b(27r(`>*7l zC)sA%q@sJ)3rlU5X|13Nb)qPj^ATpsx3N#K*Y{_H57Y`c-)(s_>CUqz$&b%_=2YDi zj2BvcpC{PPt2=n&?Jio3Cvm+Ugm8KuXQs*#TCNjGVugn62166y>aRaKu#~bm!S1N6 zcY=s^3(gq$5^PO%V@Lpg_emB z!R+ffu?Dzg8;J-_(Jbw9x8b0hFmxGJ)NH#FJVFWNxT$Y97#Y$lX8VpPD7LmYTBr^7 z{OnPpqpG3F%Dp#6U0H1E@6&c5?TW@g^(_UWfDJw9b0aF$?`S)}ev_t>L265S? zK6qcD9r?`^OuOu9SOX*C9KMCILQ-<4`q4Kl5DHuhvL$i8AV zlz8Ro@Ynto$ujI{wdmWcJ7wqlLr{d(->#ef&_vB@eH%ePQ%gOm)^e}FAOu#EGR|%y z81y?EanvJoZpKc4dzuXkcFJnNS@_Q2N!KRm zFl-*I+IKy)E=AQHdUn3xtCM8G&Bw3cdg^ItmTd|eyDwwNCM9G#dHhUAySp7(Nqx!; zTd6E?B(mj`;5iBn5>91WjCwv{YF!D2vTzKCow$*^W-i4w{fz%4N=REX33r!WQOv^B z?ul@c_bMO*V)As4H8NurNUtg=9Q-Yz_RGPvtH&66)}C>3aK!=Z4-{FjGhq!eROdN! zj^u@nULt;a!?!OMgi=b3@Zl&DT60g>^wPa)J2l}%jb1}fbFswKwBYX#4f6M-@=3X#Tox66KTuFFv zR}nTt7BSpY`t$ZZJnEVpV`&}_s;Q;vS#R;!&|4YZoChce5O5!ZhLP`{uA&Ggy0bqDtNub zI1(>^dapmyT9Zmb0=$fpQ8ka(Ao+Lz{=slAON`MlZTU<*{RHj%t2kog;YS**+>~^~ zi0xK3U~5$3_1Wv%ypW`G;6aiUJ1)#<6UhVe?u!dpXC29czLN)a>E0?TkV0u|=zTRhEl4!R;{bfU#nS%I7;3-c z3anc(=9@RM9r52uw)Xpru!yF~3O9ymklkW3Wr*uUkPMJgKc1?;C?15SlY8 zCvaQ5y!76rO$Bjhpobif73)r-dbsQ=DNB!R%=iq}yEw`tg3^%F?>P9r8it?#(bXlq zy<^%i>rj5(B<3BhjKELF1Q95SJm8N;oYa`401j3fVdaC%kxXQ*VUNd15pxTE=P{V% z*?in}4E|uR*TpWYusGa@p1)4d>Ce2np0Y#eqLsH&Ql++b_Hrb;Tt|z#e!_i%58Pt+ zvk-9K-othqe4hxW(7LB3<@`>{U{J6W26qj^w$^FC|F+2x(5KGML1^Y(DZSi@58^*^Gb`^Oh&prIKmi|#m%v~&DqoYgyq;wf8h`r-|irZ(X^0IpQbDE2i zfKjrzNC?fa>mheNA#+6tB9E8u?45S&ifePWWw$cKul%FVnr)g}-01gvQCe49#7mXJ zDg^YVGn`Vul=97f#s&M7Q1!C{*HS!dw|@J(il$oDq_F6L`_b8)c;xM}lXx}#(qIf> z*K)^!1Obn9yQi(XdUgfYu~X~d;NX~X0`ZSHP0^`eH16A4E~1qotFZKm0{#-U7pG=H zp0-0v%DemnNdb+D>G#&%IXJI38Ac6C+iG1*UXw(Y`gkvVb`yYSr#}=6RGSv`CiDAX z(VskvACiAD38N{zY0?!>JbAW!j=h#5pzW*7@bNG)?4u`!^n?z#h129RE$_2kCgeV| zBVXmCtF%6iLb?V%y7?K#$v_o0eN)KXW?p?1@w<(kfrNxyfYD3A^uwr-pWYP8lEp$# zyNsg{9#@FJzBOT#PYcQ86rgT73Q+x>e(7omJ8UoNvM2YA5p*gN4A{S=34a!Ed{kWb z4|Jo%Ol)j_*??xi%B)JFu{V)$i{ZeDii$@}27#^aA;a1g#&^%TJ$y7k(n)-HwT(8D zGK!6|E29$ZBOvpudL64@vg7FId~EHt!C z3UfhWPSw+>yIg^6ks3^y>B~|r(5MXSk7oxEaehD1e)?P=D%!tsvM6}U%dOe4I(Fbv ziTp~4yA^g^Wz_&RRNJt~=*=I`YPkXHAeDH9haM`PYx0=RXqCXm8|m`KQNr<^3OL8zUIoD;Hs4^dw*#vS=1WN)}QgVJRk(q z1dZ%&O3;ksI<_BFC4oc*DOA3d?`+BnGOf)61*TX7h!y0WK{LIHxMop%d~rcSM1;&x z*Vj7!dDPq$_XFhaz}HJILF=vF@WBiEx`6r0y1Ub0?D)Yv-D>%L;>(@^l~{2L-Yf=? zp`QMb50_CS&1%-U(#my+rYklxEkR1)d;D5fzASw{^S>J7PAk_U5u~Gu_!Z)p7xiwI zTf{C)T1GhS02Q$O4sQTQ^}Gq0_q{wi)B&)gAN#u}Cy0}O^Cjbighde>4?O!a1VMz+ zv=B!4qbBcAe3P3XK!_lr4LJ15H<%NsY;NJ?m>j25c}g;(uLl@^F3dBbq;7sLsoEWx zR~gi{{Z99_LcjJ#U0VgUn=gD%xcSVnT(Q~GuR)y$uY#7zbpnaYJfMA#9pj%(BoRsI z5p&ixXDd{1a?XQ_ii-E~$6hJ(zl7}BYUNsQyCETPF4{c*=}w1IOrJ7whpCuMTLQnb zBGi}p>M~2PztGRQsOp?Rz1A)VcIX@5Sm~r%Cy~jlZtMF|vvn=0m&hL;&Mz^veE0nx zV_tb;xS!wcV6A21>0%_b>K*1_ePXW7 z1O60bp3@i9`L_Ea;F&Z@)b><(b-#)2_;BNV&2Y+6P!TMv^Zby8?@hU z*2SZJ^v-T?j>9YgOB*|G*<>gWI@zMZtV^So+-WP%*^#F~f``Y)5DE+o418WsHw$HI z9sqzcjf%8%#H^{bre@iXoTa0L91N2+_c7#Cel&vrj4E<(1ud7$H*ShSOghcrPDyyc z^sJH@*YMQl&~DVgt|yN&w&9HLVs{=Z{~}BA^(9eY$9B_@W!kc!Ary4MFHN=CXrZJD zEJtDl&KXPHm(HTier!?$&teeU7<60q&4E=FanfNdyt#}_jz~NK>53{VE6dC0EgJHn zLJUG8BcUTr!nL9ay6pdaDLQ=JXCskQ*3n{LiZK^%Y@(XiX9AoTv%>4)TY{uKrh*el?;tvASg27LQ-)Hn<) zY-hLUgk`toLNNFzV1JCB(2=v z1;d|&G-x-Nvya-?;sFe(>Rei6Llv07GgsTh$esECf0%}Fdxhe-z;TF+zjM!XW+0D3 z=bh)rJsfum5Q;Pdx4>8p>ieH(n0Qnx2}3m`q|K8F_kV0z98eg8nn0!FTVpqTylGrR z?LyVzGlKK-V>ew|g75Nt4un;T1A*yGI7w}RJ*%mFV&L=f{`~UFQk`X7wh)M{$_(Ok z+w|a_#Om|eTliEaZ5_4kvR7ob-Edt~_-wQGOA=^VY6tS=Q2# zI>P&_VNg#7$CmsP>A&ocD1luPj2Ey>3wj2WeF9M$f}HM;w_ub?&p2aTvFaOii=IK)lpMTLy9v*Lh$bR! z%jZBQ{qGO+TiAXK4iG6%w7Bee-i`6}$drLz4=`W92^nr955zQk^I!o6G5P zax!j%hP7Hqgo1Mi{6B~J3N@kWw5rN4_97}Jci{Iyg?Kmv{_L(T8{17zM~8T(6pYK@ za;f`{T;Sy>>W7X2#4<{|rJ~(>yBa2{A+b$EZNiu>>&C2824<}qdwU)>2Jb+6!I0e? zKqyy$6R(34pAEe^=KmROC@d_jGo2#lal7pHg)EZIAUh_+!eaAzdjV-E6KK^2hlaRG zy5a0`uXxPF{VBfhGe-Z7pc#(QYF)WMPpViW#3NxGh_v4z(gsi;Aozx$E!4y7u;lWX z%Ek9qG$s)NWfpEJ`}$tn6MWpJV}lPFyV{rrlO`?&rjM|G^a%$kmVhE_EFaAt%%0cm zO3Z#aaj~B;MvVanQBx`xhNU!QSORcZhv-%hDmDhRy-pFuY@(z=yj6YkG0=Et*_VL( zbT0==&e2{77l#}3#nRMZCUn-WhZ9?%Dtqyj6G6+$#S3k`;{7&{E&)jTT~~MWYIlf* zU8HiRw?=o|9;6Mz5}V&4GQ!&vIhzTp9Ws3!eSSs@SKzSTDc z_=kBr9Cruj`5MC^`pz3#1_qdmWC<1yc!Jctr4ub8MU*NImjUx^b}H!9gBOIF22>4Z z`Rw)H>N=ETY3>T2uSauuZKd!e9m$8%Yk(RsQ=iq~0s0CezhT^PTMc|1mY@&^6_tcZ zyBEPA9>t1c?$_*(Y;K%NRN^W}`K21iWYRBT*jQufBVkdlg zMZJ6T@XQ{O>hjK*T~+FtYWv~zb4MTdzqYr1q5)OYy<0|g<>BVlp;A`_<>5{(iQ3n( zD%%OFeOtv4?S=9`(@k5J`!wm;GEc7xmwbu)Vbi=F6c7;5cHWAJZ5Ojv4FeJ>(lK!} zJOn-$K6=dIpPiMgrE|H1ge%XwKOe&DOSVM(A=8|jpE}i8Nf$|hf3hUR#Kpz!?Q0YT z;e(8BPB2MFMUuQcJ(m@YIQ>DQ-$d}wZ%)s>RXS394{hYkBB(rvAX$brh`IK9VB2nK zPhP&C+4%+{-&wis!7^V(zX;=ePFBuUoYo#s$5<~?iVV*PeESOr39{>y5~PX()##uk zdk59*pfkB4avhX{6d0JI7x%?wWsu)t6y9F0rv$S#H8oXeRIIE{b4A0+s3wk<=Jb=C z0mjP#ZaBt|!fSAywiL>V!UygdEJn-c(+2R+SFtu#F zUG9Hs8kqgUPD)51;sxBq$?^GiRU=Wny}eysT{Ue0EPwn!aGM~LeH8u^J^Z!m4^j|; zGh*Hlpt_4H^cOz%p>tt zZQh27F;|3S=8E+f@SinNJo3OxZrK5;K7T4m3j&x!1uUfC{f2{vYbY^LY*UxJWga2h zm0zi@yZAgG?CkBoJ&ft-=+xBIjEs!%zaGgYF=!)1u_SGx;_VF!WdF+}<)BShi%I@1 zwr5%27!Q&@lA#jo@{UZcKJ13U9imIqfM2AZXu)X1IKxE36qs;)f%7MXYAwwrqlNUK zjY01}ZQcsDLH@Jf;)LvmK$&oZOs!U>4b z2Za$3p{1qe^f$NNuDi>H8jnQ&D?@QZ<~N*BfLO$9r@QiWdvfvoGc|n2 zlk5xXcetC<3G;;%Cs-#jRb{UAg&duP)bycvBh@17!Zrr0uODL4pIgedp?14S^RcXt z3p$teQm8t%r(tsf*36e5QhPM1|4~r?e^V3>i)E+0P+Rd~xkQ4ql#;?RYs7{NSl%5_ z6;RauD^(R?fT#dwNESGNM>FLi_>sbq!ul@m8!1U+a(_sGL!R@1c-J{*F18DW-F`Lw z)mZ;5Lx;wZnz0IvKhFjdifZTlL;U2;C*-D_#1<;h}U<14S5-7JYEcv8&?agnYn;u6gn{J zo{sCFFfwY{@5b(_rT@Rgl40L^uS6{CaR1#nGnyINGD0aCtv^yq zp7@IXKURXcr+7BfH%z}Bq?ZvhU5WYl`~P3%+^3#>ghmYY zkMR;l%LuF=TQ|yQ(SpYR=OXU(@cr{h2WG82;8k7ma2 z*q}SElAzDCr4mzl*A#Zv)U8HE0i_F1I!e~eT-$-dK% z2PD)M*JlKM4;%+Tcf_Z6x?&Kik0gE)M^|40Y0guItg;P&LQ6jnBJiYvMpBq3CWYcs zec<7jpuk{=KXgequ^=L|`4rbeGX;5uQ0-5`HYE}O>I%vI;$KyHAiaf~(Z29Y+`R$UBE zfAwV32lcZcC##z-N*_BWI0qwzF50o2L=i<#{NjvGW{3hkJ|g8g3H;hE|KpU4BCWTH zLag|Rs>X$Xf-0f<%%pH4Hg{XVij_`s$*z06^*cj-0}x9j2R?$PxfTgq!^?8|F+<2*zsMOTAcT{wD7j8`^@TDbw%-Azuv*7(#~7!&YoO$ zNwz+uT*&*H>hDWS|3`i_-2U#-V_?^FjFv4l6h_ifL) zvg7>M&g^o@P4_b|Jawl*_4TCMmy_aR(`H1M|NOYXVfQTHSq`G1>-JAF*=>AB^?dV; zX)7L@lswT{nKLu_;4bgmeEerc*W8~r(_PA=9;asoB4b*=1V^2h*S-(55 z>e#EH_rYR@`}crdmv)(@zy9?m;}hRZw?o^weWfQZcsT1WTj7N{8*WZ}y+*n)_x9D* zWgGHt-~009#+JF&=Bi#d3b?P`)NK$6w{Es=b1~zU0IG^S?0&|;`d)?j;S8~LCkz;l zEfZ=Ni1NQE#dhsO+qE61c6AnR(~8dNOt^dIOIp_S65i)Cx1XNYy++zS*z;l;8+dj1 z?b({kG7ltx5=)N9l(yN?<-jm61SR7M6M5UDU4i9+K3O>oUDIKK+;d@8_f%zDCB=?% zu<~Brp_ZjyT{G*h*rKMavfYYZrbcrd8r|CDOYR&4db!=pIE_6Z`HGX8#7yN4-?^n0 zKDs2?&&F#wbB94!uS=(b7_jJTQw_}8xMikWv6BAH!rE(Z&igmrX5C%%ZU!E_!DH-Ea(9o9cjkkH*^HMK9(c{LaQnu+JcsfG>yFgMiMlbD#JlkA zW_*?K-7v@RPD;Vkt)Zf7jdwC1K3`g9YH{n>Ilj^o9W4_h3yljW43rBm-}{ncWw&cX zJM$O)&9mP9Oo+Mp$|uVH>Z=u8lRP3ad|9aMU)p60woEIEM8bBL781ICii%tE+a_Lmg z2~qd&tjm|V87BF@Kk@#;g{;*#Ri*rLZ<9|2eRlQQuBaI^b{KFSxwYo-%=gE#ipx@68_Um~$c@s8 z&eFb9+j#8EIfahfbNhNU0v1f1$aHu9?6bSp@7Xf1$LYOYpzr#Xi&y(U$ylxXV%fpo zr(cz_ze#^O8|i*n+L3+H87{qA7U$QSSAOnOU;=4w0-bHLVhzu-awX?ui-4ZQFrfhlT^DN$A?gf={jk`-HO*2~ZU*}D( zqkynMrcRSV+=tHAoTxOz3(s=yy5`Ci&DnM%ZK5EnTCb}B+qUIVI&1v=4U@9!6ybazTjJfBWp_zNAZYbL@eK8Zmgf L`njxgN@xNAcVBYh literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_stage2_2031.png b/img/docs/asgb/asgb_lpp3_predef_stage2_2031.png new file mode 100644 index 0000000000000000000000000000000000000000..4ad0daba60f4f955ff4dd8247f9cf3ceb17790a5 GIT binary patch literal 16372 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

    _9GC=MNPB^=sVaHod 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 a|J0`%^}gSnSW*tu$l&Sf=d#Wzp$Py3Opy`* literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_capacity_and_rate.png b/img/docs/asgb/asgb_lpp3_sys26_capacity_and_rate.png new file mode 100644 index 0000000000000000000000000000000000000000..a426c3ddda5c2ffa3101f46e792b71202acfdc74 GIT binary patch literal 11469 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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd200.png b/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd200.png new file mode 100644 index 0000000000000000000000000000000000000000..64c6f8296ac8dd3f443b43d2d1d83cacc21d8ee8 GIT binary patch literal 7903 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 W$E;WRIB-R2fV#4_QpGcy$o~TSWmR?n literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd250.png b/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd250.png new file mode 100644 index 0000000000000000000000000000000000000000..332651bad374ab39473ef1b56d1a02d23ee6b322 GIT binary patch literal 6555 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≫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 bwr?L+N^ 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 UZ>u4&>BWU7s#=dK9-4>#7xbE$Jpcdz literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_stage1_at_ps31pd250.png b/img/docs/asgb/asgb_lpp3_sys26_stage1_at_ps31pd250.png new file mode 100644 index 0000000000000000000000000000000000000000..439c83b3ea600fc6859f4bb5a04c20e9789fbcad GIT binary patch literal 40153 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

    ^c{T3c;w@OY3KDVb~zx&dL2;jinH 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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys27_crossover_and_mode.png b/img/docs/asgb/asgb_lpp3_sys27_crossover_and_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..58be5ebd7a6d798746e2ee3b2fac80cf9d2cc009 GIT binary patch literal 12063 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 JOGUqY|6fwR`3L|2 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys27_rate_and_mode.png b/img/docs/asgb/asgb_lpp3_sys27_rate_and_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..58b5750809575b0530d7692d7c1b5c702ef8c763 GIT binary patch literal 16959 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 LS*k?R#Q(nl-rGvw literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_unisim_stage1_filtered.png b/img/docs/asgb/asgb_lpp3_unisim_stage1_filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..098f755b46e2d5cb0f931e6386a32b481a31c364 GIT binary patch literal 28371 zcmb@tWo#VL+B9g49dlyl#LUbLF*C%>FlHJvQ%o^4Gcz;WF*7r>$IR?+?tNcrrTw+5 z-5;&dwA6I^oT{hlsSZ<=mq13qLx6yQK$epHr3?W9xeDH7;Gw{KJ~~#3z(0_V$`T?F zRg(lK;6E^C!g9h85Vg^WZ-%ho|6lDTH60-!Q2PI~K@QoKm_R_-noIo>R&~=m&xF&# z7{VTUe3|j&9nGc6Ga3pgseN2V#AAQJGY%V!E0UscC*0*CQcBfJ<`-Q(g12hQ)nrw_I^ZC9)4x=`)Ih#MZ z3dYa1$P9(?7khjTnnQjh!pu#P4w51{IUpZvBAKUZ$VwZD1T2jsBBn3kcK)4gK(I?=cq1iI9KeO&Z|q`R`5ch*$5|FT!7^%g!9O7QPXb$s1&ysz zy+qIYZ!J#^PsLc~Dr%^7!Jf*qMYMvyInEI{sNJ}f`2> z)FNnm;5YXc@<$iWv=HhGsGVSxj84)f_RILfEzTT9SuOE_1nBzX`$f=S?F7l)ZSAw_ z;zg2Jd@t;i+O3}7<=gJY$6=(B2g2Oqn|N^=Xfl6+=$Mu%;?L{I^9?{`V?Pe7Fg*0e z`Fel_l6kDaSYABcul=f~^Ttr=Gyflhum?Eq+S9?*4p7q|tpif=%RDhsM9l`Ok_Mj+ z&;j0{Uz?B3J&E9_@?Fa=mPIc^e9E%2JhJd60@cv)+E2Prji$oZuOa~pyWWNC2!!<`8$ERLNJO=Mk>VIaPz{C7d_{yZR;3RpeDS*9XlPh# z)`0jDxfSu-L}oZmS=MY7T_lJIiDuWJ!b4>QBK$^+ZVtYxARk|N6DPs=U&|j@%!ls8 zgIoI2c2i{>JFE)Mv|m7zZmmdTBay$t1OtV~wUG2l>xC5z0x<5{-~}T7t8!pKLg82> zBtOv}DS^@}&xcm}h3*)Fa}`#Jppm;Wf9Okt#vnsllq6eJ>?aENA{weW1Ak`w0@;%o z2&>ibe1hcnMY4m$BkxIrzBYWe{2@wS%L61E37q!nB1OlD$8dgulOi1yW{tx&iIdmJ z4PV>F4AR^0%N;ze9mK%IE}lFkMM){&5LHpRW*%+}OrpLArj}J_TMheRHBvHS!L_tv zUgWtV7)k_G%}rW(@OCn8Z+eJ#=WU=BSpE_da{x?cSeTg=QwznEk+il7s#dC8Me8G`^6y z`Ij+`{x~<#Ifyc^S{f3X2|rY9wraV`mLn!TKdL`ImbBiDoxdVRz_e3N{P&#X>ss4E zOWT)ad4$=y1=`x$R5A6CAHONc$zdzOm=oiQT7)J7MkVkJ`u_=){vSe_A9Fmb1!W41 zQ&Ggce5h1DtG+2NoN5~Z7(6%7F)_vb3CcJ5IXR=2-Qx8k1Uu~ig$9M}ov<(GY~&$Q zGp?V=C4rGO1wxWpGy~Izwc)U=WNRCOhC)rGIx%X0_yf&hTQ)NDjFU-`03Gj(glZG` z#DADo6}D>0ID&!b7RBD!Ve96Q)z;i#WHvU)B0!f(LNKq~TSeAnjRVYl(-I+%0rk6_sM)7$j9CXdx;D1X0 zFkuyr^Ec@HVWlZ~0<3?4RLRGjWv>ugok2-KK|ugmcW4c|B8303j$M>Bzikkq5;~p*%(>BhrTQMEYu^qp9pAx}SDm9DRTbgdOqX{y&?) z$p=zTA{bQ%C&0r6&*m^quvAn~JJE!{y$vw;!m+3Kp?n#FL88ENHXZv93qiAHV77^} zu}wn@{I!|Jg@!7D&CsK3%B?#H2JZ9)MG^8^s>N_Z=#8fA5tlD+XR;w6wMN?Gjo%Qm z;wBgy`;!>aUCHCY9u7O)NAQA~tkmKE3wizDr%3@+L2BK>TK}O=vA7zB`>>h(FKdD?=J~qUl&Tz8_mCA63B{4SaIZ= zLAyhP>AHY#J(H_;#ApIRj9f}Lqg8oyE`D?@pFt-_t*SsgBFAze&)T}gAG**g08rWa zCkwg25&`OSL!z2R)Q{zi?MG+VypgJf9_ypev@tCcXakbc;zqud0I$%Z)+FE=k2>w zzrZcm<9S)%No{v`ic_KG(MX-%bg*&cVA0OBl(E6dg+S_@y zI(%^H4k%Ce45TqZ3)g$Lsb!$agfTuw%hh2u$IP#FL$Ys)b|A}h5^8`#zr5R1zSJk`&!5~t9&D$? zXNnFC(Gm%$5|l_y;iQK-YXK6Ds8_T z%a$YP%(S-2{-x~TFuzi-s)*L;$vI(q*Jm0+P|2b8?sc;2stY_I1&ZHU=_vZ#i zOd`Pi^uuj;(~KdzUg*2z92}$!u+QA%Dut2OnjBx@*3XPDY)fjV_~*VYps1(7uH)fzld<+>RosZtD*Y& z>>%B-$fv>PvQ~i-<@75MKs@=4Ft7Am zsW5ouE#Mm;ghKo-d|fwipTDaXP7`K0kxLuiJ<&%!+c=3n51DW4Fzjs>1R*#rAer$S zyU)ky=~u4b(eb$4-BpuZNHFMik~i6S4m=Qk(}R>d{WDiPZjXVh8)qQ0P;J+22u;CS zCiS1|q$te23~x5*3HlVP06T<}aI?D`HJWP?Xw@7mFF zonwX0=-Red?sY7{Io(y%wMn?JD;Xl*Lt*3eCnSCBat$?-c*X8>=C+xHC@l>>yTdIt zGxKrj!dIw*pI_(J6xNGqx#ss7(jRDN-j}G1j`b!}bXpn5*1y;d&%d{~U*SIPF~fj9 zf?fOhn}iv>4YKhgvieYE_kzYg198F-*K_@?`Z9}?>tuf>YA3iTC&B)W7WCdnCSlR zF+#imiGbGBlPLZWFE6|cfgEXNZ=4%9`1_ZE>CMV+-fx!AGc{WHiz;1R2|=)LLQ;H# zjaKv3-O9f2Vq)UThlgah1j^sWV~y2JObVKtn~SyyNx19G_3V*437A}ukOVzy&yWXc zI1>=D8Jy0RmHvZbN=izDFC!CcPNra9N_UH`;4if(LQF<>yPg$3d!TtvTq%xcXtcYH zn2L9OJsY+7=vIxVNQg#VXrT7qPKQ=NlplmP&oC1z{8drfWO}z1VLxoz^?Z zL25qSbA5l#HOo29pr^i0dwxEC79c{1?Sk0=qL;l`Dv7l^!?*j#JP^}lsT@Hb!JH-$Ms)mCPlVY#wW zD)(V_h0d1qu+x(@vhDi{Cv;XJxkg=o;NvJr%iD z;jK1pjq>$E7A;PI+q63H(G zANL|5lNI-(nFWWR*JiJ&2XTz?L0QZ8 zfcItoIrV)SIM*A~D{AI;;q~_I9aJBzCq9TI_PYP=kX~ zPZF4+qqDx^&KKVnhx>YnPSsT*!lvEcUy}%!BHj}Fu0XOcJyyZ~mtiz&X4l6nB#IZe z&UyFvodeF}s!KU+wq4@&x9X> zY}5fPc*&pec|LkO+zWP2=XEX!&yVjJwOL^l75DZm(JtSF>~D|h3Dj*bxw21RKXa(3 z;A?R9um+W|H7nMZ%v{KcGUyRHQ}A_cZNu^h3!cvjTJ@5w_y^V%Pnn}a%W==(IXS`5 zv0153b(_Z9ct%g)a4!G*1@V{LVcxI%@eQ z*L+eT15B*L#E4nYN<5EG2HBW?OUx5(l`iQ>^3Dhbfou~AQlLAKj=N6q4}!UzPWyK$ z0$sJxVO`k)DTuuUtHl^R$Ya%4j)`>6vd4q7na__}``fyc^5Xe983m-e`=xWqX$e<# zGgF&t+{}=O3#_X^eQa8R&#|V?Y^@baaRFS+=a<3aTWt9>;vgvk#`J<6ROAfV zw5TNf>2`EJOdOKRqxRvL^uEd>xnir#ob6x{z+=+O+}Fk~tr5@hO90VPxt`^#Btf^&cswB3gyO zw*CpZxj8lKARz>iclC(^4xB=P-X{++ z0))Th9}o)Th7Nir?cwRBht#lI8oD2|v)Jk$FL|S#ZMHfz``ZfDtb7h5`fm<8+-5hD zna!u;xe-zMhDU}I)326^o19$gs*FGjcxR)uuz^zYVM{zReZ)u9}4me z>iheLW`F|Co#j-t68F#UqwUv+jbSg%-twi=`feR`S}E}QTa{4ATNuLqHNuPQAc#;FWT&xs zxfPFz0cz7}S2MNAGy?EiZu&bmxBud^aXHX?r7r*UPEE*P+3EEEi3eZY`@>A^zg8Qh zqqCeEe=(E;Pw0kWeeLMC!`Rr=#^YDy+oTFy-dhkeYuAh0pgOvluP5!UKcGH#nh-_3 zIB6|UVd&v>|8n1)x5HOmf;YXgSK{2Ja;Ne$Muf?vcf8>VQInfOR4^iii;{_cgRHve zZ?+c;@RTwkEUdzncxBc3AR=_`o=#MorEy9`%E1A2NyIKv0))0zAU^e$pS7WgAAQ+U}}<47#* zXY~2d|Iw8F$Bi|Cz08n-VOsd*1cpRENcP0>3OKI zCeipInxmhn%%E#Nuz%h1W7IhKv9W;-T8V@C8`AND!)^)W4;z2c5J}d|q)L!L&Qj-6 zDWD$vu?BEp^KhAE0;uH*A$~n)VUcZBqZd8wos&^kN|`yQ;KMJL2U)mQJ<8beCZ2cdc;wZWU~9js|C` z({7o&NK1-SzOHDG6Ix3pcuMrkWakmT@Fex?*XrLiKSXa?G8_%OAtav}cjl*3ueFXaD!4L zAj`@qK_T7T*qrxxjlkAh%k$8pfU}+MUN(TLeCsx_pOQfypVve&Ti#xJZ1J7jcd#TopebzP}>^7_#V!$Ht;QSY7C3HBGjQ@?&QAqFDh~<}1!O8|4DCWJc7Fm(?Rw`W#O01RNmor+zHC(;=z2oM|vKf(dYH ze3Y4$b*F|qTNbA*Q8j;kBt2S19d;`b0GyD+$fmJ%)#46Gh$589+ucO{pS%Apo<_aq zh4Zm}J08^W)f?}qXaMhk5^mS|^IApI-)KwFEZ>;i0Iyy%1FDt4sdWv`23#R?H0U>X zO33$T)l)`4dB6UogwsZ|4HCItX^8$c8D+4RmX08tX&6FN!g_9Yyxw(ixrX9$xqR3& zbGt>KL9=~(l7R`<`<_JT>T7-0^6Svqb3-Ns%7PX_i>6Ol2=}((?Z(WU0a#l3^>vQI zFGuq4@T&o=#o4q9S$r1DIb8rj<8K7A!GHG;ItBlZ6L1ek*aim#7LFy_J)dB@zs~m}`7Lky!%sZ;(ju z%9vq($b*3E!J(B!T4N!s`Ehf(kD$YaW&VqEmwr8Lgq#eb<8+HOvd$tv-_g~%3&*3~ z?$PBls|$GKlTaGQboxA|Ayuct&Y>f33A1_s2A60~fXDJ!Y zHn8tNS2jUmLOU!I6S7OTo7@16OV(stp?vUytCs3-+p63o0XCE#SSUU@l3(2yzP$}g z1qa18*n7XmIV`ZJ;U&$;6(^7XD2r1(&kS62SkUO=AMf7jlb@LEs}t$%dhD1vJlALZ z>=CHWtyYv=Z|_NW>av)@8}p3LsBNl~^dUcA>+DP{N%&-8l`3OJO?ye6eL zU1&F&G&Lt{d?U0W>QHHNB_3WcGt_^c>i)HbwXG!EFBjtb{5*$pS4Ol-VgAWzL;d-5 zPbVM&3BGeAuON}q#yZ2_pI4#qWh#_3^pQ?7M0^@u(S>a){TY})hF&+2k<@+&W7GyJ zMQz~+Gq$#z)C)IZDQn2fvFf&!9ra@)%R0sZx%s-JdyVP|SLXAyn)LYFa^T0v%KGsgQ3kbf4FC)6>Q`qoVgL2<@n401K2`O7Is9QHovdr0emxX1 ziqAF&1(QL&*Z7qkbBc4$bQ*(<%|vc)Zju>Nlv#H32+T1LYgWFFP+M_arhxTU+63>8 zhYU9XhWoZqoOo*yEsNuR$_n+LnA7NXbV?4*`1g%L9y6h>VwzO8^f8sX5jhd`0J-xGx$^YJ7%zj<<7A#qOi#E>7L*Kpv-aMJlptSqhJx!Ni zZ4_&_qpmjDlQ>}K3x|O{1ZsAA$JG`?I`h~(Rq2Dj_uBLm6G>Gs^t`;uV+RaRQL+Ka z>6G~rCey^uhzEw|lYbvFflLC$qMMT8Tbxb46f}l5A@r4E}pf(M3>?2YU`q4{gMEPtaAgjJ{EK9 zkGl(3|J12PAiM3F{qoJK0;u{0NX#UpjOv!<$k46?K265k^j*DK3`=&Zkoc!qG>(U+ z^mOaphZ<@{Iczp09_-I7ZB1EQyUnT>vrG(j5@`?N9#uk6Fi+|l8!3pOVQLkTb5{$? zeJ+=aW)f>8h+XWCD1a=}LPf-=nQP5&=alK>F52X17 z>Vk?r zcgoZL!p>^97JPYF#yx0YK2RW0&3=2|<#DT5LG~3!o*~)MJ!6U5!rlFuLS*O8K~&9d z^@0MZ_k3_C-D>4bt=w+|XG1rkX`K|*`kXKWja9we;Pg>IF8D6s3CscXj5S)B&?rxv zDvIJw_x1>}tSF~*)QID^mM4wd&eqt%z5{uVy9j#NXM-^HB_l6Z%2$9oqcLXe3oJPz zh@-W&RG&+z0Z?@*86*?K!)mY2)C?h@gOgE5t9-&q&u#N~Ic?}+4)(mWJ2wARZ`;MQ zHS7$zpf|vTEZ(a!A!~(YC3}Btw~N`@DQWb0@K~0E-Nd#4B~B$;G;YdKhv@AYtNTr2{Dir zsJ@sC>*>lcFN{qL*RYjs|wIP4>Jq9!9_dXtW zv`+j%%XmpMjp<(l6mZ#-_ogohkHs&Er#kiTmvK;|xw4>)q3~ETRbl zQL-7$eqm|Ierwr&sq`oXqr{J7M^)*hzsj{5*`s<(4|dd6_&t{kb7<~)2j45iIx{e{ z89qwEuJDxJzfL#mlexz8YscKlC>Q<7%&WOUo4SAi#={8xdUwi_G6h1>;)=yQ4xlf` zw;SFsY~5b;yGIAv>F{njmDzHi=J!RJdlC<{K#ifH*sn?d?Ovz^6)D3}fUQ&3?nJdur`hAl#xmn?5A+9zFb`#zC^x=c%=S%AtyL37nJRhSfQ3*P)=y;MI3}Pz9CGbtJ zCpb+;%khMfla0%?Jjq8P4wlh`T9e-HJpDU_;;y7~6^G|H9Ha}Se{5r5Pz|A6@;>!5 zh!d>hzq5P@?<1nR&g@=t0=ei?W%Yhg=2@E>CNa|1)Ytx1kPY4d6nDP$kGuOUuXsDB zMS6JE`?z>qz!5s~xag+nUhWB$6WHkCOcwm>I!M#EHq|iYzvPG{tdqZ0gYV zF%3Uc;9;>20dP@Sj4@*e2H55Pz$elpV2ihB!{>7}KZhDtlG-ApF}m^hLJ`Qz-no|f z2x|%LxU1$m4Q)*iPxt-9{m>1a;QLFTqn-HmbppujGyzgt*9_3WX3wvd^(*kkhK-EK2VX-5$Q*mf8 zD%JMt1TWm(%l6wWdQmrNpSKU7x>1vscF!KTxYy7l(KU zr>1NNkxo}w+Nba0M+iNgU^J&DM+&W~=uU7`Wqe*DiT=oGQEN(N@+73= zUz_$9%i-5)O_Ul27Ti;Bct>>YJwl)*1Z~;L%F4Un^F$8qjUMC-E6Q4%uxyJI0v#Q^ z65|kLp2-BsH6~Pj1b#OsffxlDl+_iTdu9vZr26}N21YL2o!AS3BE@ zcB{9ttePO-*&6-_an&RWDrt7JwU!_~zi!W-M+naT6wV_Z=YXNmgjNVrC;h%o+S zO}B{fil+8w>kj^lJp{&2R$5MeR$gAp%S1NlE->sX>UG6Hu11J}?K`-;Q+WEmwYI=Y z_KKHg^ZlJeAoHEeM+< zdyMB3u{6ofvPN>eU>1k)Hgv+5z}peb#Bq&+%J?%2o0DA=R7883bk2ust5t)ek9aHqg~}ij zkK38ZT9Vw8mtL&q5lBWZ1Lu~^R(ivQ-;>bG3FNSLDAAndLPtxlr0Hkzb|2ln*>(%R zNpr#P^Wg96Xf9SShguUpH&;rl9vaDKBB}W`vmBOvnMX}~aA6&d0ka_r`4Uu9$;VtQG+2l6nbI=9 z%Ssgb79GTK|{ zv=Y@iEnFJ-%~c&C$OE^9zT=+niCXVlmJfrUKWTlP_>|euAvq08!+)_hcbbBTZhDZ= z2Gq;4TnX-Z*}UVeXr<0yJE_wMA+-8Kw^5RHdEjDi6>EFGTzRFQ%@2S|PjDNaD^zI~ ze9Y929_S7IWkWLbV-nNhH~?xW&m4-T$MsN^PL2*R#;iG}d+Fa$wHnOt-^2(Cl}(S} zd7aFO3GvgZ)QjNdCI|@a!aAEgUp%_JK3GjJZf`Abvwc+ge8zKC$>Rx5^cXcptvD|U z)|*wlcFV6xUlty#8Xt!>8A6~rx*|PLdiX;Wx}~MGnH($1hre!q-!7@6Gu0J3@b>QL zA$cez1^3Ef!wR(LSwS3U(c^KyA_#rnw`(bEw7Zzl3+z^RHydpN3(K2(GD9ehf^7Wl z;oj{oQw%$MAuiV{JL`?bMwtvCobRYc@I2mmaPyS;RU8%#KpOn;Wb?$8dw58M#7PNB z$+3xM7K6>q*a_(5YH>G_-xUAgBKm|zkuNeMr_B1=y)BOPemPTQS_g~0{JrnOugV1{ zV92#NUkX(-dE!t^gIq13=jL1OTW8}B+(*izS_l>9cO~T788of-ayx)qTiqklvAUBc zL2p%lf4MG}WmqsQYfNY~98=K$XS4BM-L0R0`_oW|fl-iAkeq#DVSxE3^}xu?;;$Y! z8TW^Mq1twM`Asy|B$vxsUeG|vxSns3M0jE6s;)bh4QlyeQinqKD>FL-1`Q|kHyoox zP^K?z5wn~T$yf2HC<)LZwi28fucr4J)xM`K z!tu@zj2J%d%o%W*nE(P?z1hz$dh?G&t0Xd7-THs;(_tV8m6`7QFFH$(>rf27 zYmc%Xn-u|{77aXLTA1@jnDMC=uDW~p$G6-V%O!agJ#TOV!`g`(1rd+i zPN4!&h_jriPO8z)*-<(az1Gx*a1g7`u(H{5Vh<{E7T*n5IkMH`CN>(}fv2Nqtpn~< zFBUMhcMu(Xz6g_m7QTVuTO}r&5#t8#{v;zc_4f}(u%$+B-g_#?`=q0%CSTQ>s%hy# zA;~fPOG_LeFMlym-i$)X>-((r)H=qQ^Cg$3I^btsMr-RI7t%QNqa)QSx&-Ix zoKSn>^hY-y9f$#zb1qBO8eA~&L zm?QN|O1IY48EX-~~($;1mgxfYa*8=HTk+?o9l#{JB;e53j8LReuIG zsbMz4)XGS&?dcn4wj92xDT9-f{j_vJedY9~^xeQEq3^5N?#%Qz=nUB}7t7Q8>m%`9 zK3<53T*&6-x}YM{hsi`a*crRY$pS`)N88gg&70Y)L8FM?PIC9x#c3$CLS% z;*NMznASmN@V$N*TUbho?>j^9hvbjT{T=1$K82Irw98`yJDaSmL@S#8cJ8&`&l_lZ zg(FWVXJ=d^<*dneei4A9eI=SC4~X|jMOq^b9!5D%}v6vnYdlF^B@rDEY_#>e=M8JJ*o5&)ECwVO+X zv^nx_uP79Pc%W4;%yZKzlpdgw4UyWWN#rYJ(dXBv%rU8jNnpt~a;;;}2H%NK$`bdBS))FgDQ#d$bR{-Q$z6Rgs{Nn0qRw>&3(d+y#FY`Yy z?{hQ{#$gMO_+U2**wZF8ulaZw*hyvLu0}T(5wc(|s^ke0m9t3R=?*s;;64`}tDSC1 zSqq^K6q*WxTwu&hOmtfvD35(T0djas#Z8{iVT?{wS2qjkyeL`EfXxEYA;!sU=CV6g zOj7Zf5|bK@{{HfeFu7MGF6SK&_r3Syrfu@?7_DbG!bM8`UPFe$q?}}U$2dvg$oWBp zGy9!ZPJO`O$l~c^=iA`@1!f8xVC*}eP9Y5zE#;D`4S9UCHA;GAjs}oJdjM)I(F=lV zhpKc2`{Vi9r{Z!jyObT2m4)Q)#kH^ z$uZ##E~$F~waYqDvT6{#_FNgS(OLHws~4-4p4EjG;F?LV(_-xa)a-i3?{MJ31#hM4 zn0U&q(6||K80qcdYzsQs!2{A0L;$fVLwdb=v-yZ$c-Z?#M{36uwqP^6XX-ah)y*bM zWKb5X7td0;4hNW7%qy+G6=XsI+NKbgiD&UA&OjWrtnOOVIysbi9~W^^Pbg8}NvgRNYPfXiaX?OZ zpPkdS>O_f@(!^kc(>2iqjY9ofWGUrzisv%6&ahCu%&3>X>!2*A+KvS3SISfO;r`-) z07}H-3&$q8J9{sSVFOe828Q%Bc+kT2+2+dUM}9FZENmTAkaVHtN`udFrROAyi%9PF zY-8x;xz=VY@$VnWVG_Bpj3eHq$mij(nY|zTNs*uxu35$`={zeJ0J$Z&da^* z{cyk9OYE}pIJKfcfyBy+S@r6i{By(OM{H9Pg)VQ?y}jczxb4A3dwzvBLBy65#_t(d z)nv64x}inR8SsG8!4j39x4Fqf*so#L8rBbBGuoztUS)1JGc#k((NQql#r%HI z4;Q@()&|5n+WrypGo;k_V~2LW%7&QubT3+Jk}$K`ZT0JPtM}MeGa-TCZhv_04%j;K zx#4@bwOgvzVoB$49^)o|q1T@3&AY6~`HDi31yeIe%+F#1|AY_OwpFUaKFa*3Ywr|p z)WI~@6e^+=LE^yq1gG16@aO%{|K^*%8B3I6&^b?KsQ9@2P}tclG3>k`W2UefPuhEq zjFPKqU6fyimce3WTk6sf_vZ2g*qQ7L0$&+>X2UW|VM_ zDv{uHj73pmgB;>k_ai}LeeL0O>j`e_tSYtXLa21NnVD6$(X#Li*mp1x(QZYP{NM2k}Y-S=8r=r4Ir!rdy zjw^y~*|%m-yccBbE*Zka6eI!Uz zOm{bp-<`<&d7k`oCEJS_>)@M1IA!t?4^J=mapso>SY+Y+D}V8m#htZP1U22awE0IX zollP^Z}gv1-d`7Ml}n*OT;%NZm(>YLtLxDu}5mLw3nreeB!bGx;6(PArfWJ zLEJ%eScBf4CT!%Z9FpzaQ>gztVb%4{`c_=PjA3&)8MBAnZ?~5;$2Hl{ z*i3Z&*Ccq3Yqh&C&DRE6hU*F=3!{&*Bw4Vw>Xr`{Gi>_7{nBN8gp1CmBUHNw}cc&Lb=R5cR3;GgE>9YAfZb%>z(eIpBtS~DaM5P1o)$#H-k~fOGRS&6%`p?g`)$TG?WSentk4tYxo??`sNk2Ikm>FE{_53RWtTeyUT<}6nxpKz{J#w>v(s-ap2TA7NsCqBe2y4Y z+g-d6Z!7prgA5%Tl6(5boxqs}e9j8bhuMh^uhgJc3$RMmSfZc^Sbq9df+fAJ1mnd+ zJuSDdT1GYZdj`dnDOJ#X4GN2d=-2tWZ=FOj2N?OlU2KD9({RC3m9fkzN_LZj{cC+b z&aF;Fz0;91M~Kk909dDeXjQlK#dr2}*YV7kZxwwanz`1$XJRepB=hCczl-@;F(C4A zWnQ4>oII=~&XtE3ahiZF%fkE%bh^cv;w71qcp7=v0M!jq8f{yu%V>gl!)d{gh|A9L zMdh>h7+f>sg$`ZFqMPYg;KZC;&Zt&aM*2QhhzWB3?5vr%jiqD|4kI97uDMsy~)hQXghD{u$Ztk1?JQ7 zh7ax7tCA(9lhSw+&Gmzu3SuMw-2)g~ z$aeB)N@r{ttp9#<@p$gGqJnX>^EA80-;q(ny;@I4OJ%-NA>6Je2kRw3^&`3e0%v;H zJ%Ws!y?=F7q*OJ)q&uky7UgWE$&{4I+F~oH=Gs70cUnAlD<;QJ_v_J1zO`2s*NdL$2p%sk;~|Ev9cXQz zWoVS@gPqwz@A5j4m9pKtec*`SAt7%`44UP9Npk|`+{mKkm{Rg0@?pa z0BUs|EFNzk!`J^4mPYlJtm(L)zpFaG@VOq@T%5?)B~+%j(QvPGai+t-t@EOUTRU6V ziDAOTnWVuA9|-PtZag1{GF2NsNKMsTY2{9?-r#XPS)E}$lFvep^myrzp!Ah8ife5x zl$HNgS!)kl8~;_^c4;1+?r!hy$E0SC?bKjOvs6@>M3bn(Bkqgv{Q{?$ z*}y3aTFwh`{_sF;D8OT7do1*;Q&Vlzlh4E_h1YzydUDf0PbN=}=Pt*g{S}op=+}}I zoMgj5e$e-?ff7n8`j>I}Ol2jc&Zmm8u>}&}x`bo5pa$y9bnsY!TiJx`sp-0*V2Z~u z3#uZ{AwaVKhPL&qHcUYVqhyAWUZ~mQ$wM9-@b%6zih@q_>QAt5z5bknVT7PJADyfSr*3GjfH+TQ5 z^Q$SS%P`RMg4eCiGx=cxpVNG<0mw>RT*iB_4}50yy?~A+ZH*pTHa8FAL)tE#u09IP zFUI5IGNJ6QbCL7qzt=N|*5v56BQDeC{K)Yq-zaL>%QKn$E2sVV+-!Y!SxPI1=MhM< zwxYqyvpkH5u=`!lSHSV^!*??Jv&5GkHIArWHC}V6{_V`YA}}yAefVTCQzA(XtJ`*C zt4nTfY>6a5jiI5rKA>MpL06B+_n9T`(?733PRk~%MRxRC(g95Mi?)jq$wCG0^JZf> zN~>qM^`l(1xp-d}mCFU|6)t_9C=9V^{2kwnz6w_&hy5cfv)3V-;eL1T;?Y)8cIWMAbH9 zgVEW)<^l^4+49d+qqDi#?daTZ#^no@(^Avl_fAdYV_yV=O7|wulW3EaTrUp~4^&9L z4b7`+|J2C5dV}C?unJLg%5!Db31|m+QYiNU`0(;ky!YAU9UdJ zT2Cw{!0Y-9ps!7jOcawc)?8Ay-Bw9QF^7&PwtjnY=9fS^+u1dLWMMEIi|S8{b-TA* zL&5!Ze@2bm&RITo^!`#sYj)n4 zK2W3Y89sZ~UUJ($WenL8I+KBP>{ z->{pdf|^e%z`qG%dXG}}sp52+1{Oefmq?(dJizNYbkkXD!Lgx^sj-n|iJ%mmY`}{q z^U`n0SvY7%$;*fA*KOms)Oqav@J*MT8)spWI{>1j4BnM=d<%SuAQs*={9N`i2b;M% z&Lv->$4qNARfbS3RJXLLwz*fd<6WPDA^RsNaZPNTw^pm$fPek}_A!W})02~{|0Gdi zWe?F(#q<^;kIV26FlXaBlsbzbZEZ#g0@&D1rAwhh8&N{icThQPHkQDO68vR`Bk<-o z9Su9XZmII(_ef8b<^}7Ro z4uX0e^Z4&O*CUmM0+KEmso9v>V1(sr=dAN7zc*g!w0bh(MO3Pg%LMdPnTOCpgRM&J@$UukgTjFZiU5-SBVAi*FHSfb_uRb zqjttUyW6y)R3pupkqQV{tuB9G7ibA_^3_-WwjPa$%GHcF{zD%Jh%Inx zlD1-(gY!8|7y8I)?49Z)6`c^C{f^;%TjobU>qKPz76ALuwFj`UiI zO;$fnsDFd*^BFSyF(H5c($2mub}|kt;y*hlCsR!)5qKO_xnGyWmE^%$>x%`=F98$@n zp;Y)zjU0pqLtdteeoo^+UkQ^{RWVaFx62~Rvto~(Fl4F5=q7N&w;NI4?vFv%Ynn^G zcJaS5sgXB�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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_unisim_stage2_filtered.png b/img/docs/asgb/asgb_lpp3_unisim_stage2_filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..1c4451ec6ff8212084a79b3d3d24c60fee3f0973 GIT binary patch literal 40488 zcmbrlV~}l4ur1oQZQJhM?%lR+o4ak>wr$(CZQFMD>+hWRBHr(Nf6Q1hYehxX%&N-F zF-BIHoQx!s!LstS#Z;dXmjtv|7ZR1})Um(mb{B>eY2^ymVq zU=Tp}yiqG1E-BbCn=jrk9z8D}frp1ia3KMN2oNCoQL!m0`Pk>+zKW_j6BTY3rH9RZg=ltW5mY$)6Z*jlSSiO$_}LrmUR(s8RxIu zm%|FiNbTVJwpDi3ZsO4+_@>PBJYVB!8iruDbggLnf0TU%rL(vTh3W-J0>W0?_Ae14 zOaUCli;9KG5rlvEr4|7Y7A)wCOY|0fT|@^$Er%nz3$+p=a05OjCIalt!t9;D1NcJ+ zVo=nnN)rYHVNxs(`|fgzmhV@H2KvLXBUG0d>V17XZMRgk#J-**gqj3g8U(Tc_@i4< zm{2a;)|v zNQbSDKvd}We!D)}HxR|WI3i>qSYR5QoWPdr&Gp*wMOXn0#j`;I&O<>{4$vH;i=M#M z?p5eYzFUb=YZ`iOC(l7rGv=0bbb=6y_+716l|V3H^&u^?)!~~Dh{>tb!QxR z`PX4(!^0hQdt3CJnKuBNH4M=IE5cc}$)#E}vd3FUs|uThvVXhF;w^HCvq zfUMWwJAnaHmapK&`alq&=^ot;&`5w&_AOQfz6@w~FGMRx{taiLz|P+Ox13<+i~{RM zO6E)J?w!z%Fd7{3URC2xUP36rYs4h>-$gz4op7dJCwLN$Rm@bHVe(cdo4#di} z65v2iXBTZ%P`nAS=zn=^ zK!O@lk)(eNfHNRAjt8gqYqW5I<^+C^U7AlC^_aC}I`dIdD`gP=E9|Kk=O-?EWm-b@hE!_&eN!ww4)2 zax&Rylc0+_^}0Z7NxE0W&||kO4Fdf&->B;aHia3N;i7QxHFs-7y&m%sT|m~EdL3pNWsU+M4A|C?;dlAbK|91U zRPT$?A@^LKhDB1x>S)lraG}uP_*|GDJTb;2qQfw>i#l|<6xu6qKp7!-F^K43DcrPU z+k9lGEM>p+DcwWMH(hgBplS#|OUCD?rxE&p{s%kYAMmg966yf>zxO!*7tZR+GLp29 zAcl1$s}k=Ov4R7p#!N}v_f<7rBlMy`0qcLjNgb(+pO!oC(!hh2Ur^HNJ9&3VQB#+QV`x;tYEGt zVZl89pEvfJ?cTV~eFb|B--MJ?0R5Q}L;lnalq<~8pwklg&v_SnHEltD4yZ*1v(^=J zMaqo&`ug@^9?CivkenJl`#`F&S5X!|{+DYWX`8?nhd<8LZrfr7vXGOchEXf-tChM8jxV~V-kE%d zB6{}vjF#OmXX+Q10K3%ac|NGjr@}W(T}7vd?6i<~xDe ze7ura?8dP(PrjvrQaN4FxbCS?&RQ8jWG|~#ho1&;>d_3Asd?GK+&Xl!@u2vg-LQZE z8yfl8+>%d&W}JSrRxTV?5xhkPx%{8xF)4_79f{}Dw;Q%%>x%;StOO>I-^dAdoUy75 zi_=vZ>&XkO5(zA8xlIt$3o@BQxVIA|%kzCUf&|n36T%u}lQetO4h7 zs%PiabS$#xl0Hp{lPH$>zVV+w?mQj2kt4LMvx+GR313cEAaO4RuzxjZAhYBmHYQwM z>_FP3TjsHGL#y45->anUEdNsSH?A)J3;TPpCGP*|BN-Hwd;V4;`_N*2;Nf};4mYVh z7pbs(WQdWv&)grAji)xDTW@r7oG~-~@sJST+Y&HmCW1O)dbKUAJV_HFK z*L5|dYt{4FA2bZR6uHr@Jg@}`c2XiQtf^SWLPN@0aCQ{x3}^E&ofcrd6Rq7D%HvZ# zG}8$V0rGI`i%mhHr>@=`Jsgb-J(F@)=L%$E0OU2xcg;?CXJiyQj1}&a z<))?8k9OS*I5@y2H$bqDy`aB-%_IPLH@|EJkZaUw`EG#XS+C%1<`r~(9w zntA{VdT(;BAhZA?2Y*%)JLxawq z7haM*H=e_aN99WGZbBC+pYWZYP41@-Y&R2GLKwUyzrYYNW@J`3JWBnTFv_WGKu zORYL=#fCF^s9&yf%F1@71*WBeTh#zdWKR!Y)B1>?84x#KPky{;Jn_E?YHF%pB;7Cp zDt-GtDuw`CV(ol|Hr|=EA!F|F&dJ5@@aJPF*ETKpc27r^SBk)p1SI4>A|1N?)nVtb zxD5v4@h&Fe7yD^Gd@mR%ml`~M%e)X(bH+k--(B zZd(czs3;L+IK zr(eE!2j>t1ufgGY_->B3fjOfK+0%c*=Z0*_;kr;)anrvaq2n{I*?A+VAQJW(w41>y zU}~9UftOX4-23DVf-h`l2O#3ojLs}s_B{QVD9J8xS7h-ctT=&K731m?wfAM!#l2Nr z^9?SQbtxt6b&jOykidMu#r@J5AqBRua>MHbZ3}SiqSJ-N<&FXkGx+LRm8-f8?lX`~ z!+2^@$J^)gvoZ0Zo0W0qL+W)&63O4IrOi>X{Mq?4OvC=+o9jZ>eoxn&UO|@r<;<(# zNO(uNR^`1OdXwaQ|LIq33oGPI&0=s7;eh-h0*l>Jc7)`2X&_$u(gGqStcUo)3x%pS zBHT-~-FbtR>hH#VEQMn2y!^td2BOG7ZzC-_Sd>)%r*#QZ%0%2s_6z}Il+Qhp&lGNF z8ZIUiIQSv84gCR?RZl4Eg5vvp=`#WyyvB>R9pP>vI(!DyK2+^E>-@WJ&n4!C{G=dP?XfBvO!!(Py1>(RrF51Y+svZypy_}+W(NG9n*12D(;7fCvsxng*gl$B#Y@@4 z%SeC!GN~L7pVld&9W?!f%A79O8v)~S-yhtx43hIbQbB{ovR8BVMOuXarX;hv5^#ES zR8&?*NyE>=|L&6w}>;|Kxlc})6506Nn2LOok^soEOh(y+)uXY5#zI)Y*Pap z(j^A9USjp?H86?o5krO{({g;y^mk+b*49)ts36$o*`yTS_XEv^l3u@E5G*o(x1~WC*%$ zw4Hf=Rj!JeudBU9_bvf@Jic~25fb6IeS&ot!8`vq$JT(yQ$#oJpLt?ou>Tk~!BxDvtr53IieDJ~K4Rtf~ z($N4cFtF~#tlcZrLwb=#`1%Op(0B!l(pZUcDw*vl`YDKw9%Cp54pG?JuyGYilLuc` zb|-|T@akom&YY%B%v>RqhB~jM*CsCdMOcsBf7Gj+P{K@QzI{Nde!8JbbfRW=dt;G0 zouyX>bf%Z-ZnJB?xvRo64@v-k>Lf6s7|v^OQy0oIF-GbBcW{6R*UE@&OId3kSWsfz z@S?o)42r~WR_ z8-flDdA?CPG)AY7jRL;sSqj=-_vgXz@INwqe@dfPi&Ncwi#isi(kiOzAM9aPFIS$J zb%t(LBA2qd-%|;diCMbb5lTf}Mp(#AN@COm9D z`DTgUxVLkCY(iC9{$bCkQS%fQzJLpg8iSpMd~AU8f{Z+(G2VjhDt0I5ZZ)^^an)i^ z$_vnQ+zhbSHJ|6t zz;R(g$vw8ZWr~PT906knwhvel5!(MmzGK&XTq}7w&4zCr*fPbWrf6wQXm5E@bK;qO z7RpiwD{YgD6(qGG`A8Y6NC$Uu;NG}#`6^$AI{L8DVmL1!P~h83C5s$8EGx>~WNywZ zc|~5<3@dAAZ%_L=klCte!!r@S)<2$x9-T7ugE=fMtoHtD+#cqwk*+R}%Kr@!m9 z%0eVSGh_({bvpPiTcq#VYb;GlC`a{HkTEvz!+|wR0$yzNh=22t$jSy`EsCJH=mAq{KZTO>>8cUW-boWt!ENKPy|~a@i!{C~b%f-xany?pRP7<%P6ABKSU;PBmf!4k9;<89a>e@Yc|V)_CBY z=?n9rF3=@JH^|Dp!f0w=f4IREGuaU&@-DO z?yl>hZCa2Ews!B35sjXwn4gaRLP%KVIdD(_q~@V*vGvYpW$sW@>8rX?aMN)MtL!9Y zei8DH?L@TBYZr9E9S;LR)1~43Q&avSBJ5^tps@{4_chSZx4ywuonbDzlxWMRO>*06 zB3%F3({V!ccD5P4bRY_MN~Wa>PTA=N4%+AV${*Ah2|+M25MnqG+-IJ&HESP`!j%^T zWL_uq3o`>VWQpmzsVa)*SOM6yrKGgP215!nuf-9?i;`OTEgd8mP?f$JT&4&re5)Q; zCk-XksoXWxQs@Z5RI*k3{}OI>ib{CCJ~u5y!IbfOmrV@MK7TtLtTZ8azUXY!nk6Qc z;n_rad&q;03i~$eplS=_=_0fv@;eyr{}O-*lUo9DINpIQ_VX%^72zh@j*P%Q<#=+ShptiC$!XS z^&!M@pjuQHeFi5NL}_?lEk=M$AEdJ0|3y->5Vjv10M>B{eEM~(tpszHm%Am-&IwmT z(l|aLj|f;B>|E?_cFBmxMf(u)k;;9-%;G{;2iv@--2M8x&V9aZq$F93Ey<&HI&so{~1DkOD@B zjjb8)D7>u$-SLVPj}T6Wsd@5pe)|x^+#VZvgcr&V5&u(6jwlm+mgiX|3XK-Sg;JOy zBFv}gH_4kDYr;^4RnM0)$5bW3bZRPiy3TPDCFVAt#4Dn_mFE8Q=fh#R95ACrTiaM8 zoo{NpA+(Sn=5FaIY$UT$>GDdi9Nf_GbIWt3UA!Y^n{{zTY>H-f2?=Zo(q&yF)S_%X zt>a`p23mAgLoPycRVW{(dRmVP)Cp|(UlLseli?*+&xU%`(fSU`JLBVHzGAAVEh(ClyFB&mG$3zpk~zBy0WA?T4Z<(?)JJz*Ai3b!lx%jex|$tuf-Jy$lU zh^(#`4Gm{g;?UT*J_<_GegTnRnhQR!U({XU%`1A5u$pJwir?)oJWe&OAMc70?e<2U z@wp{%d1z)IAQQ#h5Td-;UI07OMidKLGl zY>l-|tI+w39!Qw|=nC(xXleO)u8a6i-+y`uG!DU*5Z>{`CUPt^;1QW zO6alP*llWhc#-@$l`h;moo5Hqvh@fvhvuoj4v!q!ek=F(OMMUmpL-R>wDqz?gBWe~ zIwf%!Tt0gCMrhBv?m~*p3H$k2ty%t^?GhDy*gu|uUm3@Hg(d#RG}6^^~HhY3jl2t;hS8pEJ~O zjlBRhl)x81xfJRjAEUJR1v8Ud*6398xD*E|!dnaSNNM9@_zDM2>Zsp+0prbf4_ed9 zDO4QZh7GRz!Vk1^+~5C8O-^>bHWVyB9_Cqz)`IzSh5fjb)skGyf(*>M=cfrM--yP* zcZV~jdL1;Gu?VkrcYzMmbNA|1#WJNZu!)1!U!e*mVu!E3Wp^*q~GgFM{Wl;SG*afD8%C{X+#FCRD6!7ai)`gzsLAY9T>qbf*4m0ILI3Qu5~_EhX- z>eR#IV>FaQ+FQGh&vFQ76GQ+!!q+mkn@nu*#f+EvIppByZ~Hz7{ikdXffDmHEQ=qf zV|zhuNsZ`}Ryy)AFR1Fx{_$~%>TPa@m)`i=2L42jlWBb3FEf|Lu7Qgm8eT_~clPty za@6@Tb5k##^VGgt0)km|awWJHV`c%{SK-o7+ho*p^rB;{0nhoue`Bx*GB)T3Z#Y)8 zur$(-lV|Pp0tVtF>a?s!Cw+|XoaLMMP{7(zsew`ijlxpSgawW#F$tAZkL=fNP=Uv< zq(4IoU{-44k9L%=|F$A#d(=|EZasK-Qa&LQ?UoVT?Rd8XVr3v3jj&os4vA8vQic5aOP=mPVZCbDdH~k52WYb z!3IRRU}P37S)@QaZeIl9S}3#~2DknX%~5^52+$-wMx#(1n_849YpB@qtwFE>+u zyzPYu>)>IW+SLfOZPOn~l&c`6FHG>=+3l6dJ-Op+O*1coj03L+t<&QPB0YQk7pfJS zqMw;ln;tW%O5I${CrlqJ-M)IpyM@7LFk&d0(xi^qwJuVuX3 zs68FR5A0jjQi;nih*kfaI!r)Exo*J0`Ln!?nA6bt;|?&rwk!Z|B`4o!=s-;Y^)C{M z?T@%!b1p)TH~#4Hk-Sc~lINGk*%&fVNC5i1l9I&76Schq@IuTQ%^lPkw;TnEhF2DL zkwAw<2Qom$(z#{%03vJq(l6uF_8Te!hW);&+CV3%TfPeRnR`zLlT=6OdjLp%bX|G> zedqXOyKP!tHZ!jPUyfY;@u8l57&(A3!Q8e2<<0lYA+P!~zv1=KN($aL{PM}CqNKE6 zW#PJ^chOY-<$5c)%IfpoZ2f6}@apcaPW8@=u7%tTsF27VQhBT0HsJ7$X9uKruv$oC zhbjwPU=?irjHo54n9;_mP@$ykkW-rnuM`?dV}-Ky7*evL-zlI0x#+yIytt#J3aVAX ze=pSVJg!Dt@H z>1bhVlBcfokAz-C`GsENm`0YNTSB%s0 zsr1u&%dJBnmnm)TEmrPhXoQ*`89p-VQ9w#Q*K2WiHegT7sm(mZI&&#BE;dHXfqcZ> zh#cM$_{{E)zKIw;_lGf$vPOa@2E`{Fi&jV7*I0aDZkKNC`I%AUBcsbla~e(!>bHic zHbef%U32CJMxUSktR8%KBv#&sg&|E_wo_%C?}vZ(`{;Yo43)L1O?D4wkCy@r(o$2X z$=={<>VJj3zj0JXv#(Zr{c_nVb9MsG_8*@ZRaGxn853EmgBmw=wJO+$Rm*yEgtNMK zyEq5A%tBor0YbeBhQoh#mO+=D6+x;j15Koy991=_bpRkZ6|iqi? zE4EkMK^}M1AI53I-96YZ8!)S2adTcZL+f0f-<=XbKK=tBbr3G0Lzv)k_3O z)yd#X+TkkwMl+%hHozrZSuviL=2*)!x!bwEtT`N~q*FjUsGmlE0>Ri9!XF!Bvny(| zcfQNVm(xck_{yAL=MITrLF0V9m#F!|;*oG)k~Ahn5^we2*^g&@_o3X=5>mW_FXw-m z&O$uk6JUun$}3d2`?oZ(8Nw?F_<*@`3fpg@EijUH@MvU9H4Envb*Q24@%5=&R;m9v z;yaX0JgwtquvzqyK6dh9@S>&7<G@0ZEl&DNM~HrX&+w#o z2NS9DQs-d_jr!1E^zUhRW~88@DPzU*snY** zOTB-m=aXRLylv&GAI!do|*!7XBsYEsT18`|fWV*Dfi*His#+m*K zLT;_j*)Dr??V}UT+uaBFv)uw-Q#!C=lHLA{r6M_%DM3p_21a$C#>}7P61BdUiF9gF z6Ou8OZ?oJ_OZuz&=6iSB(xSm-6iW4bf6xxn&nB1!qjH%MpxK zW%8Nq)M4Kn2^)GTV`6^)bPk7^%7;dVpII1^8mCpj=hn8diXP;2>=`L}w&&*yAQm`Y z`6JT%=i5htSqd{*8y5SxhL~2E-h;*~8Phv-7q&&d8{02-^+ft$q@iEbSi3C<8^Sg0 z9C)$DTSzQ8%~I(7~`%|h>pR}wNy1pI?EU6eAJ#nWV>!Al7d_^P1kxIIiQe5;qi5tOt2jbn8Bhf3%|S#) zbrpDRE+4sRMVVadQBuZ>4mM-0hnSlGs8O`!bavfw4i7eY&8jz^dz!AuXRDnMJaszC zm7@HXg;Kr5_1l%ZBnF;ip3klHo&|vGFg!k@ycmJL>vzJZxTCLgPW)!(gO^)aF z`vpFFWG&NDLVFQSIT}MwVzQ~gLi}}vz>_j{f`ks}ReL(q`Ivpmsi|F7o&ENvu;qi2 zvu)b;C>PYdd}Ah79J~PwhqQ6Wen(6}smm$};zhIwjNB9{nlaZQX;zHseZ2!P%$CX4 zj@$ICw}tyEK3etprUKEh>Pa%KgilLr1=nl1ST1PwnCh&^u_1p7x;xBj`_Frwt|{%? z*=4YB!3T#Len(QO>Y$1$Aw8Dmy1TlgWgDx|OV6v`Oe;#b2uVH5GHCwhy>pL-lVz@& znK)4&N%Ak%Y%Y&zb$7vGtaV(Hfj0e6$%-~&SYZOs;re{{O^cUu9o$$gTC`O96~PoY zK&RaghvUnO0|PD3et*fcWhwz55`_0lb?|F!DhvXRSj;~%)H@Hk)C@%_4op&3tUB@9 zBsSQf1HWy)M;?_I6D^kUeR3K2=h17pQdLXO)NLXiCDItWzPQB%Zu*ukiK0zjfIupVMmx%ZUHn zh79H274A21U-_VQz-F?jwI03vl|wjLy$g~*I+!1@J$K>K!YHrzhJ^`Mtcb&gH@AoO zQ^;JdQ*QC*Y(oRaV$ZY}*!HSSlvj#~ppuw@ix#V!{4!98MNCO_S}ui0FslWeJ>ny} zj&?}rY9twwothL%LCc1%S{%qI$!v}bI(es1%t;(B^>I9j%MEJ*jfH1#vzI`=qr)Fh^;;=Jk_(y!muC}47owUd(%T6Q|~#NOqSkO+2~Z8+_j(Hk49 zMV6jgH3FF5M+0hV&0FNf#VQ<%m%I4_)=ucdU&44>Es+(+3}VuacM~5YMi#7*_poZh zt?JWHMmnNNYm<~jPL})F(_Ld4u|8QdEoQ081S*c}7LgF?drrFkx}^0ZN`cY<>Vx_2 zYe_+C`o#EOg<_nZst+O+Ck`Vc5%khnj_!OM@R&LSuZJdV{BVfuc-zMccOUsR<~!7x}?eV6+xt5yPZUc0quI+o#dNR}0>a`4%BrLLX+QlKmGDYN>X{P97 z6}1#!&(dvHDDYT-{aCo#95a6D?e1ue{S=(vfXgJj=c98y%tHG=q5x7>nVz2y>Bmvjcm1t;kI ziUI!@o#7$9jSqz5AvXd#Z;Y;vdYjjgD|9N~{UQJfVdWz|2 zVI&g<4#vhtx8Jj`E0*St%u21qmYn@rkYygqY=pP{bD?zsO*d! z4Ykgy!}w`sDPMc5aw&EaBh$(>cDLC&z+N(LTn77uYGtgXY{-MNvs_${3w+*UlbRl~ ziyd;SPPZg2+Brl4$bn&f{a`D}t2>0#;i)!5gT-?!uqpmer~7BN5B@Ec8we&)hIVyL zh0Y+w+Qk)MB=1d80n8Jta5|7ly6v4;RI4vM{-)X%HH%6)CuyEJM-R*a#_4CXr%OSQsSI|((;!QIIePTkAu7VU%x+^IA;IVGxX zBt#rO@Z<=oX-)?ogHz%F{tvGjkL_ub2cbM<8qo~XD$)#SoyAC-u6O2q=Wj^q-K)Do zh27?v@VXV+__?#D-S9g00yhx_w@BZfn`BC5fO1c^947Z<7Mj76+taHnLxuB^e7OQbyL#2{@~Z9u z6It$7gb&&&L$btX{?c8RLFtMF)-FCTB_}1-NXN?*ZePoBoQyBQ)k2~LNqy@7l@ zmuL|Lhr1r1U6zA;OAQP$f^lqyf|RUW!uEJMN4y^R@GofDRMe$jwp)Q==EjTTFc2v_gh6aSU`&Z!b>Qy0l=h(EX- zIS!x`MwOtx0XtIVCpDODSC>8r=OEMe+qq2#Af;LB{X6?l5-+c)N3J-$e@gZbOfB})*lKZ~zv=Gp3y1xw{CZ{}VAQc}HADXKjZJ!(R zyvb#yU>+%V+CjZr{i{GAIA8l1B5jZShH`lF*#pSr4{)JVhkN;Xona&zvhken40PZ> zk|Dgfgx)n^%xpHYPCc4H9uba%e2{Gjpmfl5&Bi(dJ$E#;=!vLrmJ=9EC^dCOS$RoC zhnyIKcWiQ03$4HUF&Qa$3v)?7R87rlq zyivIYdJ6=8m9a}2^QYrd^f*pFPc)&Dg)~y*eOmARdLrop_|ybfhn=Ymfd!=8TmWHA z_GD1J$YloRzG@-2P$65ectybo`(9v^br$`G?P6&{WD^e?wC8ce%Ij6%izFKxg4}-> z)rC;#7QJ#!)@Fw!fO(?J+HrTQT)Im&!x)m|+F%hP0{P=cZ@e^Umt+Uec?pwGGtrUN<{GSuicA6Cu+4Qck?TzVT-Rf);D6g8m(ev2~tq;9Gm)$=10vM^tF z2LyWDvDxi~a*$JW&B_&7mJ)%tM`G+7Bwyn_-gHLaL5VXx(yP|o#6=Z3=ol}0*GAxV zy?-@OC0$MHxnyQXU};ieCb^SLPcpneFd)!Unx&v9+Scu1+hdMT;yv`NTHF)kYV?6t z7i!78yd0|s57=M*mp;&9mPk6Dhog9IIBnU%TVhnx)6~l;?RVF`)aMwU{`UJI~c6W2csY|t!Ds+ZkFS;Q)Ykg8%LJZ*lBjkz)T z^++CH=?`RPibN*oEW15ie<9t%lSQb?!|ebzqa{BkU_qpp!EmO5@B{1^PS!J&X$_@m zYEBrQ79g(-AQ97MWOsy8P|&evOK*r2f}fkT8{d@JEeA?l9eMGwd3&Gzenhpb0cY*H zafQgnuGM(-7qY1rhB>u6aY;mp#>WxdJin8T4M*Ca05SkULGm}Pw5xxPcsMw2_7*l{ z;fw!%GbesLPRYK`%;L!w6ISFRkQbaXPh&MSJZ##J#a9awjTIN3C^{`39ftNukPg%U z=mDCWDGq6VdRBvnx;z61HEmz_9fVI+0aO$ooQun#nfRbXtHEJ1Z#7Jgntrf=r;r(8 z+CWBOA3UuN5q*9gn9^_jv3m%wJQTE%Eg7 z`XaKbSVWG-#mXb<#^h}-g?$iD7$;?q;W9(?-KnV1j8JO#sK5#4>b3RYj{o$=LKypj$1xK3<_-`y~Q!xhMcI$iT^IEk;iY^A(+3)rbA_K6vW zMl+FY+=RX5$9QkbwrI><(?=dN zEVrj)SS3Ks95((nE z346sYX^|I>+7BGBv5)+|zV63Lj zW3Lo22B20CU_TE^8v)i5%(~T}JC}+d#d}2hX-gGJwA*v#wMMqQh|H;hhnEw@4ef3D zjHI6w=T{L8(AFfz5&FXR!iYyh@ajqKuouCokOq+){BQZ;3ju9->Mt855XnzrQtuF< z_7+4s?L5pC&COI`DLi7z^~?YT_48Y%{>qKVAgnrl`Y~d@y5G3ouoGt4_oK=7deW0a zlYVJrDy^(ai00G{E8+4omNNFFZ$6>Iy-;k5)FvWOBhfSIV|>5e8| zk%Bz0RIH8_4{?fUp)GC9Zdl#WzhS*{-pr>6|pL9 zZOw$ua`Wfk1)0Z}(`)OV%#RMF8tXt?OcPpnS7YdF=F!(mz*fbtxO)m2K{D{6^?kfo zuib@485op=jZygaO4BaMS>KwCL#YrbkT+|_vgh9j=xh%@Z&26N#9pBx!VAS1NKAgF z+7D(16H%?iL$&hZ)3v7aV&MAkpDUQ;?Riy2K^VMq2)wlOv;O$_og=iMvR;-Syen?< zCV};3S3Q}l0-i(r^b&ZUy9QO<9cCVWf_7F_Hu$g{${|GW=f2^2c{ngm`z7C#*~I*u z%JE_ww#?kH!<{0-%Wi|%ijG=sMs2;O$ckls!}&(RIk+uIAW55oum zl#r5mNUOik?kcHKrekN7*S?E;Izfw3TmedQtom6y1%eqK{@{rqcB2ggum!Wp_6UBy zc<=o|c0K9M5Z5ePqvF8)IKjW1FVfaN;T-94jPk-_vX3Sgy!qd

    !6pc~wB4dJ(J_ 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ⅈs zDg0#^J|(5Stu3no0K=F;>MTUgE90EOhq&cD!-`L#GI2N=%{~*8vL|}_H1g04r8tzp zcbl*|y6@HBbLn^q-|bcbaml`XTpe4<)|tMJ+Aq>Zd`uSD81Wsj&(&ywy}Iks6#3t7 z9sjS7h5>U>QBiS|5J@c~_WRlaSJ}n|mpwN}`=~YDRt+#4yb{XHbas>WZg{7yoLLJO z+EFZ_UZ|B$PB_%PNiF*(81-QbQ%wB5q-S~ff3=|0b{Ms8hR9h+a1Zrm@ZDNFUzmNh zhD4OA$S|V*As#}t-dkCTP-FuGgT~+uRZ~bX8Vn6L2=iizokjnEUc`UMIvnh-lt}7D z-$BxSih>4DP1VGR>5ad0O_G-Zy_`l>lqab++Kp3W<+7*bT?~7!r&z-0c!Sm<#6^Qg ztYHv)uui#>2^cslp<-}#1rrw0z)r00D3=fM=XH4$M2_(Cvvw8jZ3&_=iReCWG#;vF^uA5^U{yZi(w5!voij5#}No&&A z&scB&MN^)4N|R-zcaU44@r8~7@?WRbN>;63AQ}x11BV?s;!OY!>RLLK zi!}pxep&?%S0L&%N4SFf_fv;}HanqQCZ3&B%5NXm@Ig4G!|SN`_k&qz-u8!;qhrq} z?qa$3Nv&aWcN^=LJiR)2SBE@+sG6Q*SSr6HHw&7_RsZl%Xuj)S#F%((v0k(bFR3pT z3V(O|NTr{ay7}#t5qsNBFkU7BDHMC!KBUJyz=#Ag&#gswrRq@xXiAZaG$)`zLR;Zo zv^@9#gX(vxQAatyL$Wuf?Va9ne!v!!fVjN;pqMtD`~AXPx83z?2eHEVtLh4Q90gwf zU1t-runySVDy2pR#oW2>T#(kxAXvL+L5bZQkQCEfF7pWa^x84<4f@R18%R%@o;Omc z{=m>vQwAf^l7zHULZWE&^7nlLPb`|-y1-QXORH1ehT2D>ByC?Y9gN4;s@pmuU|JK* zbk3G!T6t1pK+ASt8(kQQPz1t^h)AI#;CNK9vW)A>2f%<~ol<=^Nom`9zA@^S&>Q@< zvyVaMIE$ u>$Pq3V&|)9zVj{!I6;8@{VXgj?(u>}e$Pl;Cd?xMKY8glQuPuhA^!$q{~(S4 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_sys27a_unisim_model.png b/img/docs/asgb/asgb_sys27a_unisim_model.png new file mode 100644 index 0000000000000000000000000000000000000000..f942625e938b079eb2ac6a5e498a39794099cde9 GIT binary patch literal 11965 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 SKPBu3fRenrT#d~8;Qs|v;%Juu literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_sys27a_unisim_model_filtered.png b/img/docs/asgb/asgb_sys27a_unisim_model_filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..92d47f95f5f79e8661815a25aee13d29278c75ba GIT binary patch literal 7718 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 B;4c6G literal 0 HcmV?d00001 diff --git a/img/docs/asgb/ecalc_generic_chart_normalized.png b/img/docs/asgb/ecalc_generic_chart_normalized.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec88ae6ae498faaf5224a7415f8bb720c491ae5 GIT binary patch literal 21903 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 literal 0 HcmV?d00001 diff --git a/img/docs/changed_rate_resampling.png b/img/docs/changed_rate_resampling.png new file mode 100644 index 0000000000000000000000000000000000000000..001279ea62cb0b290286ecc16b38ce1b3dbe6390 GIT binary patch literal 237031 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≷?Gu@&hmiW*naLh2w>J!Zn z&j;pHC6)wXWy;>(7Jt=jR=T@0C>kGURrtTE&_GO+9c>TPl}k4)m%qn??i=f#b|D$Z96xS9{!O_R$)5}k}-!Z2h7^6trntYwZj zH1kdn@sR}0>yT}cs`gmk6nlEXA{av&`Rr>t-jInWzZfq}Z>uT1or{l3=s7ytkQ>+5 zDkn4#hbe&PsrKQBGVPNgDqzc)3AT*UT>XSgd&0EO*Ng-q%J6sc!I-2+V>g94eVeFJ zLd+T$GVvb5#<~3T&OjB0&Pg<0JT8xQRfCY5pvW*%2_6men>c;-i?jLx=Y-)VfSZh5 zm-|sNKA*MVCfp6P9#xXu&Blv$^h^0L@q$#?Y-=Q3>96GXh*6(ts|_^f6!tRA9>ZUP z_6SokE)cyqmsb=e1Biaj)LModZNt(!4&~BPCkbxNC_BRKpg)}CE&BEEK$Vu;6LTqvoj9@*1_b()_z@cx~6$Ug%AN8taQ z@c$hurIQcq__l%LL^zGlQSXW{kCBPaG9%Rku5LysmFr_1SywnaSviHLMk4-m{hqIn zrY*a^RHghCN58=+csnn`?jx;SHP>MmbxJ~fDm)WNp2^=8^yr;lA?4e(w&RahCN0dt zn&ee%eP!<>E)w0An{|^oet$kwMCpKy#mF(kLwEnp3w`uQ>;4)V&FPjw z{(!82c%{$gp20%O{>DkUTWf?cXL7g$lC?v#6|2TjM66memWt|Mo*NjLfgv__(9Ul6 z{p&j_IfSytuCLT(7HF*;5(VvDfl$B=nXy6(rNvW|lUZMMv|rB*VvMIDT}L;0?rzr@%dA39IUOt;T0;f^g@Ej@=YQ`17cKshbO z{qDSl2%D6;38$O%bCKnHl1xN~zO*gh&dv~4oW*C+nQJtQOeRP8Dtn)l(wmeD34%AmX(|!^v!%8kw3@?p|9%chG^Ym&c=?o z1G93g1BTqG<|M?b;Pp+D>4P^B7=_>b97`cNT%JIzc9C`Cy7sx3d0a$=A1QYy+m1*+ zvrZM8-=1CAnb_MM7Q9c32v(~M0<|%{YIcGk(0U3>$PdlJICZy$Y}NRKK%wfkP{&q= z5Fes5=CGS{ZuYl6(Dni*66g8GdE&Agv`;fP`0hU72z@@T(te~44KZAbv(u4>c9T+v zzgV4UtFh{lcz$a)4l;+Nk1t;%hFr@@64L{FJN6{ooVcoSg%}K6q0P%DB^{gfeJ7BRGg)5502~(){qxnkcLqz)I)th}p+=Pnh-xz0hBf5f+*N}qHl^hx z`=oTo=H=+PTCpp^BZ!t+gj~G~LWG(x)8AHX*^-_xHy%k}WY;%&y(wv;$bKMY8U<7m zrAS}0UjNIhzKJ4kcKN4q$&hHY8?KGWT44~o?fl%^ipNrU<+aOYV>;p&2ZU?L3sbao zX$E2c&#niG4tL%j5DUiKzLq}_I^UVhOGw#C;qvIM=`@&k?oJMR+>921W7fG> zEVNw;WEpcwEe!k@#Fd!|eOaEV+Fvy`FyaQ?)}=tRQeQV@a(j6)T6A{NpDFYvl=5G5 ztOTN=A#NCLe@#z3)+8uKbtL%`Z`VQbwJTbiK{WC0kNLX_S{2b(DPIbV)49G*$n(m0 zw>+wNRke}$AT9q#dU40N#FZA_gzPTYzGEXdm8t^>=Ry%1w@{oSi}z&f{abL^!!30Q z9Z7Q+DQl{g?_3xw8KNx^4#vb~*vQd#UJ-d!l&(ogE$@D_HW*Zwao$6r7T|~NS){|d z3_#D`XdUDD>3$^53}d>q=uWxqsyFiC11`{a^uT|UwITs5V5cS%M*|^EtHESmCH=NL z%}F%E=EdWdueXPo*3X?I%1m8qVsFIA3eiP6n9dx#!I8V1%fdTiFBU?`f0Jk6bm}r9 z`5|-&U=0mPghSv^BY54V5Ei6Z7?P7I=!#-K9CBmt2 z&FqKvxCw+aGw>qanJaf_&snNDjt%4*l|5`8o_&+&Il?&${7o*L+Al5@9iTh^iOb|o z`QR7FA=Uov;%4#9XWb_K@^SyE(3{CfYLiilM^dPzv<$M$GU!6<&c7lYl)VfZ*p9Ym zc#TKHyMc-p71nD@SWLDY{8ECba{7U|_N!Y}bVefGXRyMT_RNwry{nj*_o-D`mn3By?q3M^jlx$zr6D9?(liN7{|)B z#nCjsZB?O>!_W0uBbhgKG7mL8zOnDVWH+%&GETa9b-2AR&zL>`x7S| z%=4vBRL@z%^5ydgr=^UjDhjiF&fB$1)@{+8a?;E2i!0zhOaBS(6R3e2yz_k4)`K+f zOZ7hD*W}b|69tBtOim{q1N!HOh;N@%YgijP)=SAR-l-&MgF6I}MTe%uqw%o2$23hx*j*;05>r~H`G@dFsNIy8J zRfu~mAF1G?>~SHxA-PDUKFIe@VVUxvzkc(n>)honePym@%_8}7hlx$geQR5juP%Fg zUNHQyeOte7;5KInFIr3J%7=N+a*!J(2eFi%iYCk<`ytQz&ms8M?s!VA~MhT4C;MZf( zPw_`ECVXVHpInYk{r1=Z_$QI4J(yIF@7(~FPA1+x#dduOQ8xj-DtoSx$=ZP6R$?6* z$M=>xPqYq4JThgq1~ftOKU@R-?Cpgq?K1u;0mm^Dn=f~JX@_`fU$R6as?yY7uSIVz zF%x-trx;lL(z8|;L16La_SbxYk7~ix^bDdyXNs@KUYzCroaIFbZ_Rlt0MqV6dP}+& zkTyFg8Tc3w!8V$z1jvdj(u7JmbffMe%PhhRHX~uzdtUI$+a1N$?Wc;(YC^A--AIHk z!2B1sxXV=D#|FQ%*`ZNR|FXunX$2wY zGoU~JlRPN$rV_R6mA!aH9$mEr3~-JBw&5X|u8z(l9?O#>;>*uf(a?a!Oe<*DI}SuB z!vgmGTiq(=iVMaV_r+0`xz)(V?iHSF>#QJ125ChcK5}5Ejc-#6@j=E>5?x*;&nr3O zg^2RdNo{C%3dUHUT+cDva#dZVOhdR6Yzg#x-;?`;A#byNz7l+R4 zB=T=#x()Ta0HvhTpU(CH^?WQ{k{+;}Y~qsL1|gp1rG*HjGdY~JwXp~!J1XLR_Lyx$ z9CmwZdVTV``|B~k1GEp_*6XlFMn)HA243cKc|YUtGKhLND~oKJ0EPB7*-LK&uMSFE z{Mfb)!`u`=7b)xP>4)-oZ8lIL>*qG2uqI5xo=+o?1!PD;-N#N&WB~!M>67uYadkW+ z_ymM5xFd<3ov34XvhTiw(f1{3c5?a!#NPNfPv(*6=xDl#Yu2y)(AkjYw8ndJC!~0| zLEzu2LlZh#@i`405#t*(ckXmto0Ft?AghF!x5`Hs^@oXHP_v2$YcC=9HZZ$+WKyWw zgg;`dgBQDCW;>&_gnJ<)>RCZ5{D49FFkorl;11B)O+RzDCES6+p{kC9B;YO`WOlHu zMD{_BPT{eP3L=INmj5jFAIbi64F0)b|7e5%r}eCP&|<|ZD!XhwfA8dDv#sa*<cQJ#LPF;g^L(Qh2ZEc?7EJU!3Sr(s!Dxaxa0D^D?vJ_?k%)+7stet^z^f@_r zNYD2^PJ4#;kWSt5=aoUum9Oy8Hd_@96xh zdotjlDxt^p9%ME=q=ZY@o}#Rh^qmfW*P`^RUE%33lD z&_dOz=1cx5QLpoY>CoPY;Mcqe;))ET9mtQq4% zp2xNS+YU;^vL=$8I+?+YcsTD0@E(qWVdo2v-bVeKk*XF>PP1!gk2)^ioxsJb`h4AS zW}MEj_SqS51jxY=ApeV!V=qCJ6z5!sz`JmHbeQ@t#HCXwK0wa87jfxs5?ne8ow}hP z1ytwOYgL0KP%LJ4_hG%95utKyzD@I$6fCe_pa|Ig;OJTF-Z(DxMrqpqS$tPxi?mGInw}QHB&vM8rf)R~pZ}`XP>8 zW#x~JjqtJQXK7`hvb~m#?nJ~;!$Iww3-volbzeT)TmJJN)k%yd1P5k))F+_8O4*h2 zJ9!r$vTCkfgF8sr8UJ`{w4uPhY(IR0>M95Mc0l2%=h9d5F9MK5>5;9$*9;1?zU415 zyLUK^P;Qc%e=*>ZFi3fKk>#b-JB1ggR`P3JKr^#yl-zI04CGsSO ztACq08Z_T2E)se}=?>P!Ox!aI5ygh7R0#NoBE;54zBA9{tfGjcR&Zyq=^u+sWm@Jr zVLnJFMjAd#EJ0PiOoBOW>i6Ke7lT$WskEM)#h0V*cw{%1oDAc;=KdkNNOT7E+ z+&1RK`-?0MB%hBtzqzs{DmWU#)UaYo4ozhsoD*tO$C9et*(r(8#>>ciAb6Dv!b`uE1$n_N4f_EiAxgpvgbtlf3Jp!Y&t8*3KE#uvo6c-Uq#b;Q zL5A}-FV?d%UQR~Rs^-uTPu6J-7C&ri)=jl|R>DJVi0I0|B_+G$Bbj4!b6?eEV&Xui zwAZ)?^E!qK7d@^Ed$;%rC|spRsryl>lT*Ajy|?~JuVu<*VAhQ^1=L3J;?}4uATN|?G)5Qo9E#+rMHdc@K+cY7vh1<)Iz0?s(Bqr z&0#w%_JshpZb_c;25yoPaphW1;kQTogR#5fm`be@96sc5Q+MUVg{9U`G zE@?S2pYVMNwXl6N!R14Fv=jo8X=+3rq?C9V(&V_!?Fu^^C*=4`*u=-B8s`Y5GVE+R zd<-D=PbX!)Kx4&0kyh1V<<}$xU9fQW4_$yD%t0rk{QZ;e@PDX8P}A+swglt6o^C@V zxz?=DI-03t(=;Y`=j?r1h}U2HtDAs$SfM}-QDIVe)f%>?1ZBb3RE^mGlD#0g`zkLs zorLA&NjAcD3RJ-@zkb>|RV2`f{0>#wR?5XD&ZkglvvKha%oN@K6-m$Zt8s-E~q#0 zc@0ZQJWB;pF9U&>=}AafXq;;~Nswu6^XI(~vwXgP`O0D9Yh*`;cmmZzO4a`b zqRhMCEe^v#W})lBi3hWl4@iq6ATeRIBCa=znNqw~^dJ=?ybA3eC5?%KWk91<2IFOF zLyqyE63X4!VY{i*nb+o$Q`e6aGDPBQ6sl+pG^=FZCR{a@$)iff_E^GDURzr{qTlJn z+KQWsSI-fH+#=u)e1g{Ls=uIQF8yL)AfakP z=CIo1i;BNi6lC?siq2C`;P^+|#x)?L`mD+GdLop=&8%erDH?kWoRC*rLLM80{hX}a zK)5Y8v8$MYnKnp>&VDZg(w5#(dXdtZF+rr+Wfqxut6exVHx;*H_%n+Iw}~3%P)R}M zK>6}|oNkMaOeW4%zirCJAQ6w~^EX{2#O#_-Tbgw?wTl&!K_b{^z!(<@wTU{XQB5i0 z_^X6D_R1TegeEq)6Me7>7KMW`LDIEL(SKF)q#d=9P(6| zOb0)o6eHL*e$%bOJg>$a;|k$*ggbkdO=4Z%ipPGdF5}8iG{n>OKcFEK)V$$BK z-jX2~I~luj7cMhWkwm!6gZ?b123dby=9xb(b9QRL5^l1&8>M; zLFe&LtsB5Q+Z)4W@NgNX7?eS`+_P>RFfy^X^Uok>iI7Z1DsZaE6*ViBf1RbCKhBbl z2%M$%(bjrxSX|)ll|q>vL(SUd>cD0-4yqxO^Z4hdPCv4GulfpYV#|Q{zHeiBDl!L2 zo#lD-O(7NjhTRRcD3}WpRtD_1kuw#ymmTvfJQD~B)tZOOrup=q-`{1e96igIEe|!U zPhuTEu;LHd)td0`o)ftNuoK`p29?%5@a4*I~HN=$+ON{ z*egh@w7WivroTN|Iqu5=>gh`fu2&z<@t~uz8FYOSW;4Ar;T3#RfV?m zhJD-*Q-+xMRi(%O2C0)}fz6JD&Hf_;ITQN4JR6{-Re%`T+}4eNW7cl2Vl~%hs}I_n z?5YB(>RNW~Iq2LF%ad0d`Y&Kc)n`jd&Y(rB(~EOF8{Zj7-)^7N4iRoYaY6`6m3EOP zo=6Lp%)sz~?-QEe?P^SqH-t1-e<+b5@C4#PxJdg)(WHMyFZ-$zo6ODA#EvXCJN6uM z#xN{*XX_6S9}P|&t1frAmb?7*8sY|>rg#f+#BvG0%?$49)(lJlhv_g&B~37Q2hE}J zlsWZt*^vE6eKbo!UUqha5lm#KqA9=fj%XDbPtwDxk`zac>Zkks633C5bXk4iwf3 z2_|sx=^dqXz&GR^bvhgLyk&>+k+C-Y(c(8ZlRC20^G*?EHsP)s4TYW8erHNW^cO|= zoOK09^;{PIl=Ko#Hf}mUWOlTH^;u-dybcWo0x5MHd5rq|_J~Cdolv9p(XSq0I~X_F zUsUt`{bXeT(t@wcc;AwXm40XNx ztXF5|@?7$6;4p_359B?g-t*`~kdzaD4C17X>b^Qk9LW4j<@LS#q4FRSvEfEcd(CrC zo*W?)W4RbcHI*x)GpTN>qMKLNS!?J~ROfXOE^vrsf-xUIUA}pNVCQdN@|UH@gwP5i z=0dBNT-P|Mm;OAAUK!r@&Nu48j<_fj3Mka;O}}&7rdLI=IaIE3`iWWGm*gaVVdO;c z$xDCxmvDJPDkC1y`m-RMPwL|cLV;=yWExdC54_&f-Kl7r0H!RHZOSoteQpE- z(V6bT2BcEP$f1fVS0~T-Nrr%J_b^zg(T+S5liQhqSZw#g=#O5Q6VUhdov-3%{oSH% z&Qr0i2*NCH{G59CoC5n@)8=JuXuh8MOdle}}I5St#b9Wg(1OGkyN*F1o!+N5MYW7L&I zw`>#=Am9c){nHIXOnZU_iw6{#bZEXTW&sh!q=#rjluipq-j@84cru~QWa?Z#-2l|V zT$|HwIVgDMRwtt*%L7F^UThSxueD^_&Yd=$hIk$Q-1fJlXTe3e*al4ui%f6hrJyo6lrvyBbne0C>Q2Ms(v^UEXfJxe%N9XNm_JE(UdDD zTJny_!(s!kHtR8d+V^X*XuE$F`;TOo{y7H!Trep2{^uC{zi|vKof~bRBvG$aK!b{D zc!Z_p;m$bcjXQe3!+X7k%B>}^X5c$kzk^gDh%k~jz{}bicaSP0$ z(6IAz>;;+S{kI?Q3zm9x+T9olw_FXWBP&=b{+!TniMc06g0BpkV!Y|uD}Z#`6rDI2 zoC1F75~J)12q5DifE@g)R#-%ke<791LFH{1JLH}gB}2PY-|Mi@0NH{<%#)5K*~n*H`&y7xqYZEPbpJWzWv_R*o|A*<->{Y( zX8N!r(LX!2CJPn89e92(R;qrlQu&5q=h(7pti34>(L3^6P=a=}&4~ZqUw8INr|tIn ziH^9B4P4FeLw}Gv7*xL$NoH{N{fmj5d47Rc@-~pMZoardb@CzBgz<}zRXs5`wM27> z`%rC^;*;}u+VW?ROVUxkxBO|ZB@$)cPtmKN#0+C;d&6cidU`p}4if9LL2;(=*-#`0 z_vzG58(9dzb4I04Z`#bPK{ejPtEJALaBWnFtlPxFPhIJ9ULhx*p$?^r8pF{-74oV^4*k=e^9xQIG}&)D24B zA8|GPp8J<>pc_kQps#d0$ZmYEE|kHv(RvYek`t;S*{KIKs{!`H)&&p@h#8=os zR=&cq3F2LXT(d#0`YhGhZbFP<)tt0r3c3K=Wb6LdK8$AZYhQv(SlLKt-wZ&cytX$k zM7wn^j}dE`oC5tRdEy)qFODmRYQN2G8{U^MmGSU_)CyIGI`jrg`{E^oKh*wk7@-#G z$lu%1Ji5P_(w9@V*>~JcY^|oc<_=s9ejy6bLAaCLf7#xuf=su~AWV9?2cPjbZ7v^N zg5Yh?|K@dqNP!d=eEe(x{C@Bx?B~xo+-U%@L&)ilcd%-F@1k3G$=%a{E7iVKw}K^~ zAbN%6$~j78b9>6c--}R=J{_-!i34I1JvkUWhFC^EQj&tSiKR?7jv@IQIMpP> zNLfE>G>O-M@Z7HIzH1W@q|IEZ{PoL`d$c1%Lqr83$ji&G&FnI+3@vcnW7F-FH#`3 zO*DVu8y({Oq*2Yx{XxjF(Sr;^q;0BZH=j{LNJsA@i*f=0bAK_-1$>Zp{qh;NM-ZgB zktLDgAxOA|$3dGc`}@-q{U908J$YZv2r|6_Wx9Jf&Dx_~w>StRg@xI!%-DzWS0r0p zien*k1;(o~e%7~Xdhj+>7`cBS-4}2c3XaULE#rlxHPT;X+tZuCZ_^7?smG0Pefz7k z*xqFIsbEDNl2o-@`~FSK15>&I9O9)eQyplibFZ}RFBj^XOY=SG2vZ{*q57{cw514D zyw9}+>S5j3vwOaQFsrh%4R&-9WOJYL<%(cULjQZ<72bzmSi1_z2C5MKI$z7CsW{yS zusFi~uYCYlKs-rE(VL)4>K(skN^Czz$o!EEQA5$2qVra*%!20iQJn%?SFIrLFx#rg zQ3uItH8TZY8>?&C; z0<9Eza)_Y_2hkjT6DEI`Ae2bv2BkdSqi0hcU{1R3g3s?Z7Uuzn)fgD>)dAz|txm1x z8B83MfWig(`bpPYFMQozO->$>6d-83Z^SRQ8(%#w{!YyKjPQa!%DaT-iI#-L8Ov|f zKkslp04%XwCJN1|g!%$K?vIIrJiJ&K8#9B97arz*18LcI+phd4uRD2b=!R4zwwJDX z0eQ_V45+;nv**CE;p@#QGk&BrgOHbr>D|lDKuUe)gx*|RW>{Mh>he4(whfvn6hmCT zb88z})ub-qWsv4X)PWtIOyQfEJuUhp?|1;VBb1J3J4LGRg4Y93@ge#yEvp-uW zPo;ls75Ht?uU#NRY`4BJ@?;sA6Ke-lW_3f7Kn;&?MEN`PBAp*5F%B6wCnP7EumWjU z1U|^j5d?Lm>+*yiRS!%aa5I|r>TV{QDcg_HP+Z@OzdwD80f_YOaSuuSWmz}JsF)>#`fH; z*cJ5aD8vX^KHs;DSE@cFB)VG$`aCzbLUQC-%V+TNY8;{Xzgm>yE}W|`t0h1+2^CVKu9<|?!CQ%hLJ8=>C9+awb^}9RxliN_Rg+@YK1r&izIdR zfpa>LT1q(fA}itXnoyjDMlGHh zhbE!15@a^09x`RJH;{_+p*b&6!@w?f+J+Db_tgOyT9RRna%a1$9T^>(TJ=t0H%q}r zhZ;BXwnXC7hy}F5R(CK__PgS%XsXc{ae2I{vZ)Xy$-0c5{dqY9p>Ifs)U7Fj9$ca6 zFV`oAHy15p zZ8g`CG<|j5k2UH;PTBOW#ZS|BPVUOr%x1^!6z}C_-A4L%#$=zAcMPezd7iRno0}?w zY1WE8h%!NxMCHrHHW>Xg18kVnI(@(R$&fS92TeKgFI40Cs-PiDvmFa#U{4{?BPV7p z3H@ExZLT}SYDmNAxEs^6gNLG#drC%!-`~Fi{@h=0ZfIj_ej2X|@cLO73x=PPTwnpl zul0q|8(m;e8&VujS(LzR>po;a)~PAz2Xld`8qd!x4}aKm{MK81pT_p^-}^Lr&`uWl z-YZ=eWpHgY+Og1Dz|}4W3#7*&KwrU;-Y5a_!e3Ti-9X|LV&$QhoBZWU@oVFIYqSPo zN^t~l%6begEm9_*#Xn}y@)pWde)uPHU#oaf?#`<|4J^VH@U`zu`4tvurvGY zhNTy<{=z_taVz~GHyf)}PdJt&)T~#&fz$WBe&EXox%vS;Z(WTrb$`NgOD#0qG0Ngk zKs~FUMY;z66fL68osqJXlFnQSrDT$zkuQ)RXK{Zpurkx5_z)+J2lvN9>mHQH74+L>UDt8c#bz3G?$)S`niF~TQmukD%m8Ff9nDJV{+Ub$+H9l z?|b>oj*u(;foGrrCh8Qu*gqxs1JLj-+P2Xaz8?ba+Fw?O|29U? zkMOWlAAr^FH|HASdlQ@2DZ>i;D}tsKVb!z7GDm>=?qs3+d|p_E=6e7wV__ z4eDkMbt{4GAy)eyM<$YAh&@$H^ykm{e*9ehEk}n{qr23uKiBz!uugM&ci#~kWmn%v zlD`Zb1j|i?{c%(wmd=DmIzOp9ntyD~UBcE-MUnBQYTM-3e5AAedCy?~gb6>Ls12jG zdBi_vb}a-b)qZa4P9wsTok!#k7Xq1?`db;|-)p{OP4KC*+E~ZyAtp+DblLs)-};;& zJo&E(@vB;wZSo(;M0Edfl95CFo7!YwMiaQ?q_;o+G4S)mHNvAAEuvdX;R8P@d3NOY zizP1-mUU8r&;0W1(Q-Z|%|8YRo{%E^Ejg<}%R@L&Er#bM{`lK1!ru-ySEL^XJClCv zrt$AZL-8X%1eqSbVy6JK8Fo9)lmGtPJ9>mCU)SJs`UY!u`j+%dQebF*R1Yscj~Cwo z0mPfj3V+N*yd%j%I3V@sU&S1U)KF@QlmhU=BC^2CTk_xZxUm2J@eX2Oa>KWbX|8>F z4g_ybZw>%C|DT5>h9L05!?Lb+et?SEKb@Wa+bR0NKj=cC6>1Ad5MN}3Ottx;btO;0 zV-a#itBbLGr;s+AK!yCjy@8bQ26M6-fl6@3-QWN1@&6pse-7zChx8v!N>C^NXwrW) z>2KTezuVlOYt>IE6F;wG_$S|&T-(nV5pvwtMv;$A#C)?Qsy zL2_crlY_T@|J_cKC9wKP_@7yOe_aTGmm%4lKYZB19~h3DceLhdqtefP4mI?38)+AO zdy(Sna7O7~2)mQEC^Vn$+_jr|3JS>NJKC_SNPZ@gkj?tB-)hQ)*9c#Bc+rLnVhVls z)5CyYAc?%wfrVnjxOL5f4ufJlm$Md4&OOEUs^Stbk+QEvjv@K9{g;>TAjB(nMk<`g zAZ#|$S9LB{YZaR_}?!}#+sD8${77)0S*vAK`mzx6NZASxYser;FYON zzUa-blEt3u3;SF~s#76`>)#nyg;1<~Qi%WKPsx5{co6}lbg%!*2v$fIbHB)4ePjy&`4BZbDKUy8CDY+biV}v<3k9Uc^w|p zZ+4luqtFj7^xH3%q$5CWgSB}Vt9~R^3@oxD=}e(x3pT+nrhlrReK%g*(M zsm?py=Btjzo?`h?8oCVq2rP3;zcVEW75j>^(}jMf@#e(qX#IvjE&CUxlOqxMD$w%= zNC{kJ`$KKT+X2}a>neV>+|t1Sq)goEvme&v*kJ=6rVg7P$ZgCb>17~3`Xn5+BkU!< z2JP;VCH+t1LmW;^F>U@9@g>!i4UQ}wgIN{I{_{F1$v)7_vCx2M8@s8FoPdYF6C@~7 zrBrdR-qt6I$>n>_1j&1}X66WKSG=0cI*K9?4Hh9U2*_s1iCLo1LA3|ks2I9bQ4Xo< zh_*gEu#Gv#USur$qEo=e*998xS|%`c|MgPHPxI*ISN6e;W??}}J-uK33pa&T>g%Jg z*~D%qGD*@U4jt|`uH=91&#z;m=ur4rE8QO7L_%we{P(DmYN%Q6R4(YSts$DJ!p80^ z$#_|E`utUK~o*7lU9ThSI4#0@|};S96U9f4Ua_xW|G zJGSdDcUKwJQ|^uwhw+hW6ox+>RRee?$t0wPRAbOuKAWYYvfZR`Fo9CXXufi- zjVkP%jWmu&IYBIz>JI_f=l<6MxYn>>*$m7f2t!#JQl$wQl96;Z*!%;G|CgJek8J+w zXRbVFJ8TjQ-wERn%Yf$o+gz4Q^HD;#8>}h|lnjRg%+VA!4(4C|EI2n+e-ym`6G?qWoBX@&b=Fo55 zf<)&&-GG=|J6+}cmv37Ft{_9HaPJRghkR*y2?iE09vA;J@`uNeAvF_!x8nH7y%9LO zZ2TxT|K%wpP?Tcw_Fcy0pSlS&kUrEGbP}C*{WH~vJpCj*oh(B(`CkO^8kwHpa-Hta zWFEZs1UqC?FWe8R{}%~ZLd%m$&-nSD(CE*^1T{$Dy+38)zkH@o9Pn0^y^f-Pm(0!) z`1Png{*!-Z7Ca_P&3SOd0^5sVTZ@lz-Y25VjulTr@o7Hpi#@k!>b?Ry9dT z*8+Tay_MlAg&3p)>qP6ZSg0O7PmNnag2ZW3+ z2sth$94{!!e&^80;4(~G=*}_0^l!H?Y^$f+fN3L58=cXbABi<_h2iUY9zdSf3+3N^ zK%E#rZkKniLe93Yl)p}=1>I@vfp&Ydn0(=&ih!c-?klMIAd?d4SZG4X7gciQke;Ii zG10hfcnl2ma0T!+ZmK<7=ghKwVS2OZVz5EMb!EP{-s6uRl)^ZwBK?bM zn-bu4&gx(`q9ZYa_8vVwy)ZePOmjOi=fze<1V&_mo+=r&z=mp_e)Mier%(Ig+%))K zzHKcU_n&aRa-HdZ%*A{2>s$EuT5WjB!Tl>vEgndx7+6s>GW4QuAUPbwdjBw&kxR~- zr!7!~lzJU>Ul`V;0G;kGv4Kj+X!GtH$F<;WBs`qy^!l{ZahXiq$sH&0QqQEhGJT6? ze62P1&G2#5mP4`ErYnHh_H2IjkQ*Prc2l5e0=~Ej1HQ*1-?{Q?!myacabuVr^J&+u zR$XHlvf%-EN94O~ajy;L(l-mydBlSL?Mh8z&|ERQ-(>A>PrkWgdS{ITjJ=p$&O>>f zl_7rB477if%zg{WQFB?H>tVRHFgx%9Nu;DXqYpE!(hjWo^%UCZOx#|o=gcd~&U+)= z(yySGuv)R$B+`e_$7!nPmI3x(*T?!0<9Hy{wiLl>kRdm02P}BsU*irLU2K++P$8s1v-=@}oehmjz?6hSFOm?$`3K z1(|H6Q%V<6z`SUgjsODojQtdVMLok zV%50e%PSYuW>|wUm)CSHeV|Ey1I6_?D8Xm~WUmn!Y^!+>%dm|RXq9beT*5(rR3nXV<`qyz_nquWm*>^?q9X+`4 zELV{mU0HS0?L7?38HcXJ`0*&*aM^@QeR39RvlvC&P9N&H2Y_)W$`D5`ib#!7Q`YI? z0q?pi&ZJM{dg)mtio$gjhV&e@bE_8Sxa{47HWM-HiIpU${}TUxzihUYlh=PZf%!H| zuIXsKp#5{9n*pXqRJa@EW5(60}XYQf#W!9x=$t7dB?B{M|_j;)M-KQty`-w z|LxOuo5Z$8zU}8{>UP+z^*YCKT-}xXanj&qDLwX=cZ4Z~BIpmJNQK014)eEqyRD>C zh7Y|Qe%AYrBeHiHse|E&&oe0I=2fkfT>Jh&f-e8#OaGxt)kazI|MJahFZl(S5*D-j1Y?>Z#< zl^ggOFUC^i%Sn0u{_Ir zc`$WLQpx+`;mc!(hVq2dU#wodgB`dUiZxNyOP_MuK$$o!;haaVaTY$p$swE1IY3Rn z*$Ss4lZn!%lV~VU;AoLHdH6dWnkz@7ry=TbtzkfUT7}Jdua>FoUb*&3<@l?kADG=( zYm@EM0c~#1q1KJ{v2b6FD$kZXzE0E193~oJ&?pm2&4l2(TDZi4t?PWc9CMqS4^V3l zT35o44)+D~eK|E6E*ffct1F{sizob`==Zn7uQC~@qH2g0%%oX)@7E77u?!fvllG); zccr46y;lkt8&0=xSJT=%!|*$eg;}ZfZ$8w_-U-4k)~2C#hbV{l>|<1Q6pQw8Mw@9I zj~ovnuNwTo#K-i^k>?VyU>hm zgfQ>ah*(noG@Cmr_a&K`POb(cW{;|)3xqx@$M?D~waArOwLNu@uM^=km(*iL`(h8+ z-;$mvP&*338DNnhq3C1S9+%^Mljzv^5Vi1uaow&#^s{{byFpw^5>y(^ip{yJ$_I+Z ztkp}9tEZ0GY)jCfqIBjz;j-5Y)hZ(37mO99ajNzSrdtysAz2A^^jA9# zos><}YLl;e@6bQR;TBfMgBj^`k)wCfH07(Mr{Vj4e3FT2L`MKf37t_}HK^W3V#*@} z8y&?D*Mg6Wb=NT+sZ!hc^g#SEHX@?a1XZyai&~F;e1S2fenEb=KWgV`nwL>!G$XUT z=(FDtV#yx20j~zP1K0I-MiN0xM3Ap z-u=TZVMmRe)zKfBQ6saIG}mI>6zg_u)kZK;COc*-`$vi%lj=vWkD;(*Pip3G)4!KG z)&x|AD#xohJ6YCK>cgm{JeD#=6%BI>VPU9vLz8mZ_y+ov)<*+2c@-2n6az4h6b%i< znue(jVJ+p;jUTbwn`L?h*I9Tu^YVJtnca5Q4;=2&anvC_TjxW@wodN1_3Ywt^HZSc zL~~MyMNW}cDv?EMV5@8SC;H~R-EO+Q+7Q_swo~TK8}XQ6TbC&iUAa7)@UYCON{J$J z6J{W$MvCl`PI}yT!mV6Bw4OdYy+;+Z(Vq8EM7!$DDSJ-kgmZOuht#AJD&I!ce6C-X zcLo8K7_VROGxYE>km@FDWj)=zxL_uwAM+)!ivy)P+~gFHIUX&y6f>~Sh6<7?C^D>G z+t1Mxm}jH9jcMS)h_3e-dMg8v@7bGWBZ-^iKe>bxPkQ~xgo&bw0x_^lxc6&skUP$1 zR=0#(@-*SaE>%joC?iY_t$nt*t!A8|x{m!rtsA`+CwC=0I$$Z^Zmy;%EYGJk6)iG) z+-s?2_$)4!6zp7huMz96d40BZDnC(fwWrob3vog;ai>!&mBPz*jm)Q+68Q-Ppw}}P zw%OM+m@uEYQpFeJo1>2JoGjivAGq__!}ZmlUH-g#E0x$&hYxbBR~fDkrxtJz7|}c< zwS6d}3@+CEweQP7H_WAFLP|VwSfOb{xBfwTafhVmgyfU`j&7fk_WGLkH`_DzJnfg2 ztkFRVPaTsNyrRpaFIegwv^s^#v|e6S4K_qCDnE6s$oKwo^?}ej_X7dQuQ>%+omh@x zX!qxqh?bD*G4b8DcvP{f`X&?GbjH2c!rd7Ab&tfQ*B-VbPH4O60U2#<{HXc*qkyfi z7oSdIUODP)XK7_WY|g?_MqctRA+OiO#&ugKV{_vixx~Y&oCDu&ElQk;D9ahya|~Xl zdVihGui|y$Na@N54@$4ys0_L_CIs`bGJ+!D@JXakiuBCW0nlr9m6zL%Tsn}M01 zRAJ;>O>S?7u-gMTG4$CBvxeW@*1+2rU#EKATfvx&A)BL)tl3-7GcOaHid~ezon3b+ z>kVKGI~wI9j9$EiEvXZ5S9;p3$Lf?5X&ElkThEZq8nzN;GSR@(DboqgMby?^onwai z%EEgb-}S@f)57{J10M9|AZ6+rq|S^TW9y(ygTi(}{Cq%09Eao4&`NdZ`mZ^jN9vh( zo#E3pwmVU4B)#D1f!0v)W@Hntx*0A~b#V-eyx^jrdoA*fnRS74v7lMJY$;BacV%mc zXGDb(ZJ@KD`zF!UbKfp^)RRi_#}nZC%2MbsFrl+A&I-)$nphBvSH=;0Z* zlv}3Zb52pzNV|TWQ8iYDW4$mA6`OSrFsE(L7R26gu?wO7_a%zCbU<5CIqwa?pmEKukWx3 z=f;SA=vH6!s==Ef`ngZsc?R1TeLZ=eR19a*+LgT9p2A>lp68s~I;6TcT(>^CJ6)$+ zVc}L!xDv1XSV4J>>Oz|;Qa^~wHOyr8b371J9$jM=sIo4?EUP;{HxX4vKeETvk?UcN zO@pQ#wyt!zklNR@!zSSj_M8k;aOvksT-^Zox_TNew+%7iT#1Mi4PVR{=#_~VZlL&7 z7$xYUc=sb3z}g}-H)jbqj+2+QM%p(fN{xxNXeX8ep0m|$BgMpx@n< zB3OInsi>*y?qTUv?2rVOY5gw@H7Va6mbu(6D4V6w!^YB?9uDX*3l(CeMw_nHF@3of zuF}uqf?Xeropp_T$F_2|Ealwn~gWBRDGKFZn zmtPwV*F{basG}R^!Le2f4L|q|*hT8D>5($I>m&&_A3OYfgNb)yq?Cy_$|l_TR@Lc9 z`QyG5P=?rP#j7fnyww+)t}&|?UG(9*1oc%uG5wV(V|V8HG4WOOHIG_cor~`5c;r-A zIm!iM1D2tNfj$m2XIRd%5PiBa@0;O0G>+TkyEGPbj`y94j7xE}NHcsO%|F>-c5;Sz z-68z-Un3m*()Cz*Z;g--I?hnE8B<5mz8x_?TnN)N53k>9+H5ev^0~hc7{*XzSV zeAp1Ju75TeLM7x2Omg({Lu`2O1e*jlilMp%=dmpI9atn5FK!+~ej&l}@Q|v;Iil$DZc5(d+zpJXrmVGT+2dAXly|3BJ>y0hUKa{di`j0#Jb7b!Q=4|qu_mHdjM=wfLFMT}&2_(Y z^+^ukOQ+`xaOa$p;Y=N#t%fR0W(O)K#>$%0u~QLcq{HNud;t+&5E8_qroFL?scd1L zks%9lBcDQ4)_3}Ckx6^2oh;4X!#=$IVu8eZ-6sHb&FQajN$uge%-)@>bDNQ6Pby2e zQiqcr7MORg8_r%k=(T_{LnvKVfqdf4k~C$WqN9N~%PF^OI+%?1Im-9FQ-|qWM=3K3 zJQu=rBHjAy4h2i44BNlh`f?Hb)c=Up(fUYAa86TMX7=PMdtYJhycSRqvv){Uk@-zTbpzW`X)Q>Nahwpb>~2ulWuLAhu#K8cmb0R>&BA|PS$5d6TnxaG9e92FCX_{A1xh^Dmz>C{h450vWa7Cc(0Fv*j`SWo0N;j zr1xak)xB;QPc8Tx)tR+$NgN}uSg6S1mu~`0kP)3*@7*5hIfo=F#L;E4vu|@?U z=UjM8hAZsTWr7vgcizV=7L{^8{P12@>7M>8grx~adH3O(`z!V|Xltzw&KbC%qU#IK zk?bbtPrt-2X{;c5VfcF}$%6OusEabEgRA5C$T>Lzv}CzL4xQ6pmvv_+S)d4iAbL^l zFqt}|tRzWGT0~_a@A{bAR4?}9hc6y0-8L?(;?sRLD?(11Gkty8I&RIp17@CMZo!L` zYOIG$^3@jd>EVpd8h87D=r$~f*reQx3|V5RImEoPbcc8+}!OU?-W@<%)z1R_!sta zw>E2>)~2dk_R7Fu8vJ8ww6uLgXeBjYm@IR9 zv=19eap}vZHSWM=5A98R2WI%^759c`(W@^gs%)Xqg^m3YSudP#uo&}2+ zuWj{C+Xn3aq3No_nry@U7%@sx1!Q!oAR*yKhl=!Ybxi+E#fgf(?G`G} zigd*Jp8(A-g8`7G^IA3fRD5YQcWCgBA3{8zoQt6Q(Odk5n}fsa_r+|rMfPs!G!W+! zz3EKDLB@o8eR)4UI+tnrb4xF`@3G4ZCd!XwPPD5Y^-C2g=eSnuM>%Cu{la!JYCR6p zzv?QJra+`9m6MW-CLx@&d5<}VLgf;^k(M^)C(i=DUqDw=9Ikag8nzlNl_n#EmJ}i-Oo&LiiP^R>xpthsVuS_baaJ=9@>c=Svxr{HN=~ zZGgk*v)WXOt%Lh8^OB;DW3gD@z07j2fd^?}_Id~B#gkZcZkfb4;kQ1tRkGZDV^f?s zYN?JBG&qjYvzNB?I( zJO-70>oeGHId#8QzWVa${qnqn#0jiYFdAx@nny_kL@WIj8eS4Oed zrO}r1a{km=e~O3Gh2) z=nRNvWwZ;OB4^5lqtP?5&exQu2Rs4$2jB9RYU&_?nBm~sul`t|L z*4*wAjv7prs)e_&ah}Fac(%?4M6?{+-qf6z+up=m-n>~ZYtDGDrCkxQHf9O}E5cx~ zUIDDQXdc*;g1AZ%*0CmX(eRIcYd3vnw7;Rp;x*3!6C_?2X!r(8vRNjPQp8GXZ zWQ@?zZ;>8&pW~NfBVAmpozKGBld0301Kd)wkOu-=a-Z-xefJ`0S0{Lxn9qQ~N zJgzj!JY$zn)R_!itYJCBrorh5gfp2-|J!{41@IRR(LpyKx3442FqP>yIHlz&Ftd2| ze=k?8Yht`Un`jSzfZD0@iZACQ-_7a-z^{(lHDA@HzfqFn!cL^nGToI4Z_kO&|fO2)!A2tB?oBJDPuCvvMqq;+*@bltllMH@ZI?v6u zGYIwocn+6n{)?R3C=RKe%@xi^qGh+L0TKOhv(o7ggjKd=d2F12Ov4xwl8h$baJ{KH zFDytGJ!1~_Hz{K`C{xSIa(wN>p){~t)+#wcANF+^iKebx5SLSBiR%ves4YJ^Sr&lZ zE#&*wl<4$ZR-eLr;ujTGd(hnMkWJh(E+mTM-8G9tz1tW){&f+`I528d^UHtx$d>oS zb8e)yc4^Eqw< zh&iMuvgu&qSV}%;zfKVQp$w~poy&qKU7UM1HS`E&aO2~mO*+?1^3P#av{EY7W6jD< zLxJ=kbs=uY&2EQsplSpj2=emdum+2C1~3cjNlnhbKgcSFQG0oBhx+w|9=g_feqV>B z)~{2H(2rjcQZAV7f|%g9>*Xiu4KVbuoM!9$ONZ#+ae}p}wR8TL`tb9tVXTN*5U;1f|?l`-rO=&%&0ts%)C zrOZOPP!O=y3X&q*8V!zC@e|O2rMa%CO$|lC;aZJ40VqC1lmA{!3vFwkY2!v~W6IFY zhU2vrb1<8<2L1YCbVEFvM(WiBHm7PfHw?8=BTQ_;jfh zFaS{64nmbk1nu9;=wqsBt&aqK17RmM`pds|G^ldzb^)R-3GnQ!e6sn#vo5=0<$+`U zI2FcH_yHH@C_nXm3K_E(k4&&<#k1^)AQP9%P*`jhS(Ej(`}gn4vu9M&f_61Q!W`jp z!Z=4G-Hgl~f%xXhl9REojF=96#=9B*J*A0vgFWUmKk>r9P7$tjZdsh(YcYVqNW3Uy!o7zhk(9S#D;tl(>A45|k-!GR3eTjAQis^{tG1~8 zV-uX^m5N8Q5eweCB}CMByb)fNBoEg0tezf@Ss9{Z36Cq{)mfWO)%p^ z$yz|*6U;Cq56n#LrTYMudxYUw4yLAD&3z7D7?7qz?i7EF6iG#y=N4=C15MdqsP($TLVY{vNqI z_=foz!I$|gLo;!t*GBTT53O&&5hP&vw#=%4G5P;n`311D{8Sz~rm%^SG+cg@;3z?z zkbGfB`U2D^DDA&AS%=sp!{Tp znV@BRUSSc}FU5@dQ_vD7H=IV0{h?SL3tDLN#cK#ZKMKkS@}T`Wp!ppj*L->lUaKCO zKmJK%%@Zm*G8LkT=aRrVJJ0|I*_&^|lWy(4xgMQKxMsEC;=KYtJ3SxTlm&a)Fj??X z_Rkx{0CcFM(|Wu%CwA@e_Sb1er=}6tvgWhLE_^JT-{YDv&`>W;goSLSN6D{&%gq&c z{OgUZ__wW*6W8=5tN$HP)$-^|AeS%a)EHPInD1xCx|A~2Dm6Egrz5wo^Zn)r-kbLG z(*I3hYm0v7=F(7_8dOvn#|hp%=*1QM2lx*AH=ekjKA`RJlAlGdqrsWZE#~GeWqjYb=vjMu5no@7cvUO<1?jA_4m zD_zHar~O}Dk=uLa+=2$c0hT$OqQCJEl^<%US*3S!sFlRtd9vE5Aj@ZP-xM>Z%e@IsjP z#&G)-u@XEoVd4DvC-odi&D0AAN&it(qeZHr@85&CY;hsF66Ymx2|f9cfA$gYOp(2poBXs0r$usQ zn?&NP0nI~$h05DL%D)KvQ->x`ir)Gre2w+65&OF4M!~UX+34z- zfRlGzz^1m4RC>0wH7~+<`@KwS&}U<{16w=K7M3$~BiXy%%~DSkrlnL;Uk^Tm8wTsT zdP|YFbK~MA#8n(@rKvntp=ZjC@ic`lrdY)tAppk|RqB zho^1y^bu4oDFUQ4_-t^!32A8A{&Zy;yu5KS(t^(8%k%%GtNUl$FS<+Yut^Z!izC_Q zEV-*Yw4)(txS84cG`s9N8Mn@e1p7(-EmbBn&C>1mM!_02cJKQPX~vY6-lv7%GI-)W zI4WL8KC@ORv3}gZG<( ziG5=!Yp55WG~L`BNJ?nW(b!MIEb?g-)m=r-a|B6i>m9yAlQ>yzmZAR`c^+pa&ynSK z`1y&aB!bu{rTYU;j&d(fA_WIuT}E-Dw)um~Z5@<;NxIoxb2>>Zardk=0$a24Ja@9| zDK3lMlm&~!siV?Ht=iXtrSx^Xlkj(-vtX3f{SnJElrtmDl1FChTYNs zBa;i#+_mF3rt0RgN}$$ts-*FN({pOKMTMFMl1#5VTV?zWPbsC;kHiw0^PZrRoC4_ z>+EbE#*5LZ?;C803nt_F6yP<2B1F~;fW!XF=V)ELCXTq{{Jd1FtC;j-Ih^#0`|zbJ z=N6mp(k69`nBVDN@x57qb^RNtEQ~|?Qlej{ghR^O;6X;OvbKs&CI=S}mmLjrUk@>@ zK>89e-SSTQ@wbB9Sc@bgl!h4;bfHLv5C_EwDoBZlY$G_@Wkx!`*WY3+b+0nQDaz7u zr2?PlJ~7ZYZV>DIO{b#jKyN<}P)&j%)qCJiplr+!NmRv45HT5pCp*V>GO^GV*HALD z94$Nr;thOAiv+#HRQKG|Hu!>eMg(i7&|X6KBc(L5TiS>MR_T{sarFg`{7OkIx-}E* zxP5y0TQ4)*JrwpkFt1oDP6IuWfU@@cDmY=c|Ko}AMXz?gZ%ZNS$xXivs$V=YPmUX* zy1H`ie|WC(Za*RB%p=@6licjiLpFi;8Arif?D=!R5VLVz5eK4wwPC~8Yh9+(HkXk7 z1|X0&*S+Y3#Ohz@>9`TtTyw@u_0x#eJ`@5HCEXB|txM_qRB;nu=F4H|2%Z(xDmp2s zj%W_P7<*vHWSSTlLHRO ztNFc?&@Eo8cV--Z3mzq$6}&!Unv<0Mz=w5{(*Cc`Z`uU*uGPw$Hjz#=EBcXPO1M17(7KAeAMHVv7-XaRSJ{n(H5$1Fcu< zd~tCxuDDy>+k=2yF9M1vVLDi04bwutIzO4_M6V$>BJ=seEVbWrWW3QvDP=)m`|s;k zLeX9*ye@^sEnB6hIm@{?*mGn4;@%09w<*>^&F@%<>)0rQuov z2C^-lRVV=vAI?YI9ki!Tw`zU{*qApJYCpA z)!8xHNDQ2QxBfeJhXf zX4P-JNGrl(Ys1>pFx}m<>%cddqSk3@@AoQiUS7)V&vKr<1bK!1s&)Wf?+i3q zAb*~Q)gGpF3PbYu?#Y@(4V(v``FTB$sGBl}5=0E=OSkI3ujg1WF&hW?C(x~@;)qcX+=NaSw;E9yx_g}G_!@arh zqz4WS_NOMU^{qE=kK6)aw**j&=B#<^d;hq9I=n5mKvpDiAyqj!L0||CNHs}5l!|LW z(dhUq9dSOexx&_FvoLqwK zxXj~R1<>N=v?676qi_5`jgiKFZPs9P6^q#Qztz-<(OtU>3oxu(V;zzEY=f2m`HY-# zBx*op&OWz^92lVsCYe78SM_DZVaLHZ%ciy~P@v++jA=RASZ&1|EEwQQkz>G+W{P(BR>8GGAJYaqZ@Gd#u?#USe>XU?I_{!N)cimcz_kkW)}(dI|*gD&w*dR!vxDR{3Q9kRTR&X&l$jyc>6mI)j{BY?RB-BLxNicWRH&u z?u(G=KDjJ=K0M?Lz@N4^bTbpz+*8+MlJ8 zdP(q>P1vA^E_G{Q*s{f)?&7#|9rb!xa|!R-dz|~u%V#}kO_8j(+qiht2|s#Va34A~ z^*I#y@!zB<@x|4g2d3SB>K&3(%03*^;zCAb_&V`c4UDT2YOrPu4hFXn#@2f2Ng>_M z+UH)yeNFQ3WrK2=$Oo*(+Jg;~j8ziox^szKz+@qtIMTn3iH;`a74Wd%n5J=%cpq_| zi*Hcb{{eMIPBiVajg+2;SmBcHHgW{|qbVh)WN@X)x>H4Z@W<}2ilE2OyryTxbMK(U zlKeS7`lCnX2jXRWQ^Hcf?8FrGIb+xz&JJI4Y?RE7`VOEXP`6i zMsBT_=9a2A_-rfu!ul{NqWKf1+&EIgbdMv&)%&_$GTl6UZgmtNM4Kg=!$W4e)m@P| z44JgJpj-HG9E-2OcljC)?h${A)%X<#v_dq(6{b?930P~@w-3ft72n?OI0D(51J_m7 z)lB`CdY40sqmos#0bcv3=S@Jb>Mm7+?G~xF2CDma*wa&>eT@(X+Sks8?`KQCa{#=q zzt=~9Vb&maEB0n4k(~pTGd$MXR3jhogD72!n=12KP(9UcC8cc3zP{CR6>|+SVum~ zb|j%zP+d(nH3mMaDTyD1YZoR5aWG>5Pg9$4VzY-9eNP5#ko08&0XEhq9^u(TIG>8| zO&dFy8H{$$<1#yg8NR<}zw8oWJ$MwgU0|?rzu40bpHu6EBFd*<3_TjX(>~AEWJ5@h zR*xKR?l?*>bZQUSxW7vz5zO34Y^M+$8QJ``DIP9OxO`_b^`cN{I7Sk9IsB~ivHxgX z`nZ;0V6&s|D*YI=2>XH(Wq-#R#BoM7Tcb6s>LmcHD1I%TPctL6oOuzdV_vZ}u)xyg z6KNT9LW&tF1P6>%(x0u`P6vQOf#v-~_jWJo{8V~oJpLRW0~}xW5kR>=8(@!LOH~0$ z{ct&SW$tLO-%78U`u39Vjojf)e#H$dmV&-^HXvxtd_Hy$z)?>nNwt51R0{eMU%;$C z0HxI=lUqY-PS{ukwdyOiK`0d}gD6ug-}oVi5SR7+g8Q2<>4&$CoHrbJczO|8(7X5_ z!E(ypvPxpXo3;XcR# zLo|`U6uP=#9XSWwww8A}{{cdIDB;NrzFPy|v8vh1R%=p#NOV%k2Ip#O%k4@hM|L}D zdSI&*5pxJitTwH-={eyMbDPv?mBsDVZf1lIs;?qc&Xe1rO{n{G08K;V;^{IN0A$R) zmbTu0$s_^tpCm*O9u+7C|Lsg-^I|mQ`grOL_Qd(@QSxRxpYeKz1SyWk7mlpcv3D>d ztNegUs!WI3v~CD=X^~x-3gV8N`MK!H#p4 zTvR;55pu4C551;79&M4noSkzI+|8Dr7OWde5_&cg{+-KJKw{fS&vQuYclR|ut;qlk zFvaQzs{DNVX+U+u?D7sJ{vYO0XOkz{WynzFeCunUlcOeZz{#*eOlu^!%}w&$z`eYW z{=6=#Fw5vAbDH2 zPIQ3^p3!ZBkv{GgN05|Xj`SC!wU?H9sh^nn)YXiLd^J~;KeD5TU4@D3&q=JM;nKvE zJDFvcGJO4PDc}YtOgRy@KCsd|Vy+oNDbKGSJni%~qrD1mrP?gk3`BGizA(wr#$;=K zzR~{!#D>N-aVpGYYG$o|RImz&WR5Ea-Mb{Y(nL1DwQKx^r>cVv0c>3xI>tB4OKWdL zQZTu0aNZ)G)@DAsA1g=pdhapz<5-#?1{j0lIMBUTl}E_M!<) zN0#W+qx6?$%SED2G+Zz*l2<8<{sNQL4ZM3UmevhEwClE0B%-8N1waspK)DLxYL-Qg zDqVX5XmUT&mDroBm6L|U! zgo8wS$VNVL2edNRYv-3;h7ARfHXA76Uv41MxZDt%y)S0%J|Id|r{OU|3cb5SwVdug zZq)V*?^22i!F#{iiaGDO{jB_YtP>&e1in%^MweJkNsVw~$@9SFQb?5W~lY&R#= znlCZa9auH`K&!TEe*x?^XAxAlK%Wh_*0Q5bn!S@YY#5${w2+rFKAE<;5_wVK9L&O| zBIO8>DBEzW(M6v_L!qriV$rLx*Lds|L@UT$GkC*|W(G!!SmO6KFKNhFMh7P+`AR(R z*%i6iD@g_w5fkzP!$cj#nkE}^;8$g=zS8f~uQIK}MAFR9m>|dOM|il=>VXU)aGK~> zra~d&PjqRwWw&>HM4AOQW_u$GSq!qzzDaR+&~AR?F@$NsP2p1lY5YQs(&S{e=V0pN zdFN8|vE&$qdjvl!N$xy!gh(`!DZxBJPELmaI9W*%I(>QwIJC^Wy&hrA@0(yvI_&|j zj07a3e*qq!qFK|9YQIP8M*7JrJ+Ag}>vC2KP}uPT!M}b4ujbyC0=6!xD7(Y;UA}Va zzDx`LJ)j6tMWqRBg78I*6Ss<_^)E?Pk_qDpl?417F#%KOr_Kv9xUP?W(SGp!u2@>X zk%AKj@pHA3pjZkF)(L8mT-tOGtN&(9hl4wS{N**n3*>3x?KE1Ybxv|>8~dHUdid9^ zVmM&K*rZXC@VAh>dpMRVGz6Q2H3c!8X%6@f8!oA1PKmGL7iGD%TjI-arWssPQg#&* zfdW?0UmfO^={ky zsFpGScC5w+&|N(y*UQi5D!lxAT*pnD5{`i!ZFIX@&mf}K1oAQbb`F1h%I#=9Ro=o+ z4YG&BT?r%-1-osu_C(q$u4;caKdA_6@=#c?ITcaoq7_E)v*2~ZgJ&gMN2lx~;rejJ zcp_J6eJXl3%gzJV-no0xk+_Cpu6jh&Nt-Q-OuTCuE?^sYHyjn1Jo0v$Kw99OV#Sly z-lpmwatm387vT!^oV?oOF|rfG#-|^9?N@X&KB8+}BHI9@9h5)bl2wcR`sOmLL^$qj z+BYjH)@Rq1>2b%Y-Ip3(HI5s*Kua)gM&%yjQWO3)F+2!U%pzDSWcq!W+BMD}9T}^R zw3JPKFxJJA)`%iUG~v=ntDVO`PO`gI-V+>$ORmxly;?51R$9}_69hubX5!5!ntw?S z;uuaT#@*_`2D-b-D$UYf(z~SVJDw_=SeCcUx)C}tG2`9kRxW;aMh>#Ge`b<@DzC36 zHK2|u7yV@L&O!7!;|ze%@(3i&9c*8wNRUzd&Z5HT8n04B!Fx&12vyo}fkZ{xMNXAUbi4Fvk79uyxloufK=*&K z9U5RaSO{EiQo;BFJnfyO>$tFVKVU`K-Ux4|01tM#tw5(u&%WeYb5m=(A50%~d$LUC zXOu;Na7`eY>`;0n+@%Z&7^Qjwe>sOK-(@BiQJ8vkNcgBHdHtKUO`9$UY2tv}R#7C> z4aG~Pgpc_V@u7Lwu*W8OvHw~ZubdX4f=u{Q#MNkNr7GYL(+&JmZv-d#ltXt!z5m^> zv5mtl(P?shFCzJoU?+Kx{43*z=VH#;y&>*<72WxcfLkGO(=YlRSy6$+zKvpwp)u;? zTJd@{^^e-SIR2(XE}0LCpr0`e1;>F9#-z{THZFkEzu zrmgT`T)4YxEE1Es2@0Y$mhHre9S=GalEhW(Id%R_O0gq}%BV2-Ot={yq9~7nYpv8% z^o-o_Tij}X@W`BmQh%aX^XG4g#UtEcv*d3NlW^O-Mk&h+n$b4>nxtCp(ozCzHPmu- zB&4`5JBKb^W@iZx+jhWIk-8@uTl6g418_29lQQom7P|fc5$8XorVv`P2LU56Z0_@Q1?~7xAu4Hy&g-+rrPN zR>`Pzi+sBl%k7rxj#eeaamGgz7cY!hA(j?XJ^Fsk7PBQR8?Iouy3|a3sTlI zHUQEN&=XzM6#&P~Y$4G8U~6vqx{)b>%`K_AK`>GJ-9Fn~ar>-#8}KZkPLl#^7Uqk` zfOMd(xcaH(chpkvxVhs}n{)Se$KO{V9a5Q~aVB|ki;Q_7+>!|P7pd89b81!BlmWO1 ziE@{b8)#3!c({9J7OeTQUanjjwzyT+e@pB%Eq}Y)``LWaXQ#99Y}&JH6Mh(^&i?F8 za7X01_37{AK{b*uT#uk0NG)g#Qk{J$b83>dgbT`twO5*x&b|HYn|0%B4tT<;m@BnJzkC+oW~IQE zL?#95m-zZOcE8*IVa(mRq^pAutzuv0?bbrmjgq)3WMoy9B+Qda5!8pyw04Tj;QWHx zw&#|hXYHxr&_E3BV@drK6JfJ$8*b5L)fyJRsMpI3lc_BZzToz8T)+NCWi^_jUYUD- zOsU_6h+by9&=t7hc-WeIgYS&va8fdNx|>tw42hQ-2X9?&fMS5I(?Fdim(8ub@^S0g zMCq)~fv6p10ba(R-?S;oLcaYqqLy5ZT1`vuTG>*Y*WpEq4@bY0!|SzwccfEVX0?n5 zUU*uaS{qy%l=mI`U_49rk7J9c$Iq0Xx8lv?OW&EkpB_K02xG4XcGQBYzkFoI|9JdT z?KI}6rgHof4>^KkYq^Asq6{J7SCp58mqdOt%{nnD>Wsns5{FGE8iqZpg&FqmGy+@i z(7pjL#CZd90nQ1vl|u*xs>k^_HtWN%41@#1 z78W|Th{M|vewvRPQ?(1siF~CZS>F!xfZgy5z_2b5E21})(uhjDpik+tJ}$DZ{I10i z6CxoBDs`;WGEpar2oFK&!tX-W0~myUHsw9LmxjQ_P^>Tet`7fUK7Umvby+2)PdLHh zOHq{uDA!=(AY#5x`_Wk%rgQp}|AE2STMW~tU_Bs6)s*BQ zQ#$Nv4)$v6`Otpn8ELuG7B~4D_8S$Zy}uc?IO*onlzucMkGqoX+^7`*uC* zyUlWBaP|so1UJrm%pzMf%q)C$;r#T`EP>sb)Xj+$^)&Ak>*f#tk^pK1jfe?I26Xon z=WbS+FBF73=%%EKYKrQw)6}k-q&w-+(X#R*GqFpLmw)qK+00+yCmz3@WY?q+xpTR> zQgTEjK8QCV_fRk<{(i!5tmi1bWQ+>xgTsOW@+Q!N+>CmlA)*6^q0T- zev(}{RDR=_EY;l@H;C`Z$yQE`%1N=y&iU+{%OCX2wGv@9ZsUo&1;!-;=X7J%Cp935G)nCSnvaZ=VU+XDyKHILuevvbtq_?}ra2iCr%CX%@Wm$+?QW!V8SpxKx`*CUdw`Xc{RS|Y- z2?m8HI}0 z9%Y+z{AS9^aGQvlzlyHczAVyqv%f+hj}2nHRg`{3W_`vZqcZ3i{gCUV2G{Rf(5ka? z7tb=X?UVW-kk9_8!bX;FP&djdj&uq07!~7%r^JNu2{qS$HBx8_`Detd`12a{#IH-FrW6IC&3_b`Y8-I_ff`+lo zYR!#K89YbRHP~u*HPsjM5lwOulnnm>P2ald2VxM=lh=ets;`u$K>xmE#7S;2OVddV zl%P*GB^-*$Z-cx3zG;?_gps-vc2K(9eYg3g3OdXNHRBce=Qdi3?D?|Ph9vlh7dxzN z%pcaNbILGTzVZ6>s?qw?;36WdDU> zrr~FkNwi#l4XgZ{00xHu$Y*#j%5Hj4UE4cDxcqK|0S|l)c!l+C15j?oQMA!0y_N6# zV%0?g3bLy9J)Eu|CL1sk1QZO#0==)~{YGd>2$C+Fto=vcPg-C?k_u{yuJ>A|xwj7w zxcs>?cK=jWc?%tk|MZIYN9kJnO%xdkQ~7K8jA)AC2rwXte~E|?_%0&v`Ve_zkahx+ ze*^&%oI7xDQg`I>9!=!yY^hC3hU#X!owf&Gyx1b@-O8YHYf4=7-kfPxYMr@@=)PY!s!>jIc7e6}A?iqP_NM&uoD=p{FY@K&VvU0RqJSdao>G(DV zCw4d@{njvR`;3$s`|}YFzfhpp`G{)3MiSSoK}IKDr|fTc)o17<@;Wlmv{}THQ5mqG zu4E&pG{Xzr_k!88E?L{HU0nPlzAueeq1;@@5?$y07=hztB0iGhb^a+y=n!hppqdgQ z&Tj;JK6q|`P=anj2hrovlB>(1?RPj{ZPD*{jHoa%i@)^Zo#iIeg>|5QrIVBsjeU+r zl+$LkRMBbh-^}x5gtbiPCrQordz%>k4#czkY)~(9jaazy!`{nLVtjr$HicBSX6AZp zkwNACAndqnrvSlYU-tVo-MZ`dj(I!i&Y}LDv~Cszvn&05kJ17!)ihJb^Cu`>CCNX` zFSl&^@u}f_Y=&m4E5ovbZ#&#Nioe8tYiW^71^=i z7&iFpc1Ab^`#U^Jg^S~FS~`_S$hqL%!*mkHVDp~O2wM7!1x8Y z4X6VEgO~m^tz?2-ghQ&jZ5-k1!Nq@&_M#Cf8OalNgU$tLcm)hu(Fs1XA4{Yr?F%+1 zqs|*p4@qWG;@r%`{ANh08dbc2wWO8Ogzf^Ema1vpm4B)cssA7_5@1k*r7opy} zjFVd^^oh0x;l4GQGpJbur1Yo@KCNK?e&^`F7GzJ)lk`(qp{&v^5y>`@dgjm;r%XJZ z1YGWc!_?DVP%*<-exnc$j;>t)>2D@sL^LzNXbktzIC%1y{N>=W$?K}7zYqFm|G7}e zq^65on8t}92)A+=`8HHa>PLx)>Ob&|NtUY_mmmISoH#O=)Tl!K$d)ZOg*8Q{<;BR)xT51Oz z{#!shF{lG$fUfDC2{`MUJOjix=RYUBffnb#S4ZU<00h5;&Kh%Aa<+ta7d{vyzKSYJ z123(*)$+Ugf`Zmyg0DZoqv6YNF<6*_sSZzp9-XI4`iKmn04dwDd@61jE)@x`Q%{dB z_#{(tijZgv3km_faER6Yaa)5`l*8BeQp<=^)}14~BKYuwkCn+$m&#TZzDEB>ZG7g-6Tb`hpPO zcCS`I;>1VM`@MgstzheOUNw|X+`@g!`^0zU2&upKJPr3z@W#@w|;UVaod5JjBgR9C6ZBMSaU_Oj2egl(6X}srvq*UQPHSFI^ysAli;q z=WWSxAR9W|-mU*lMvLyq!d)FO%DPiM`5t6^X#V>U(2V=t^Jxy4nl(+!Vw%ion$W*P z&R#trILT?Qe+jqO8vT`gT8g;$&jkPaZ6=k^KVodl?N_y%wJTAY@t^nM2ll)!bhux# z>FZgBT&%<8@PCNHo6AGGk{X~Q>$C+buv@28@oWJ1Fu0w}&@$TAWUEe3%mP}>Ph;9jP8pPe@VI=4sW-3Y@z7u z-~Nfn3WC?H4A(b!5K=`x`4ih5doVE+#xnQvfT8m4Bw5;9y9wj)rxq-wc{!~>CXl&3 zWf)Ifja()R7LZi8KB)gd*i_8$G0-k7diKk1UNf!eR9q?M7$DQdYdz&^`}MHXv<{!^ z-w^@|Pnr|GnXP|2D+c5CMOG|fS?i&Or}F93!Lk|BjHBAPgoYe{K3SHpM0TfT$?SMCG;Z; zo28?VfQ3e$PZ-Nx`9(%XomW#_rx9PsPmjzzO|14QI`qXz*Q-1{-@P*<3N?ARbJAX( z!FEn2r^)3P#(ehsRKtig*~^AZq>OAPl{z9%rQf`LI1hM3JED}KGAY8?HPpoIajUQg z?X2JPunm$+%S&UQaF#juwSAT#_&&!=-uLW$p*)*W&&Td44#Zd9gi?}@BHw!N12Cu| z34neXN@!h{6;lHBdEP#7M7X;@#Ty@e(0;&Ycnh6|01u@qw?8?ez4B%QVp`9*R~_+D zW4ZwVc72==4_v%A`m{Hgh4b5&;UHS#=ZxY2Yef)oCC5QB87clmCrZUL#$1auO{UOj z5uN|+jtAfz%uPV@(~7DvF?erf1%29H_&Mk@`Y>_q9DO{^;Sx@?84^X&Pk)ii4`H)- z7yNV=6Wvlqa_^y*p8i2glf4d6+e0&H;zrI6j$d~>{xHj;S^$;*>mkKUuHsUtrbGSZ zapg-wEmGLZ)S5s%l``$E3 z%kqRAwv2FhtiGZ-Ljyrtvc%_~oSz5(8JLP6J-x?CcbT9g7_zzdl~A`4(191sTOW-5 zWFxJa%G=@Y&K)~%FEKZJW3J%-dQES@RX3$|U=`1&(QTvjRQ;bRmbS{@VC$h>)L82o zB&igyo%0yq5nv(<2S@2cuvOiZqI#ubyK8ltlV?Q7Z%Na7f^KuBY*_g$(Yh;kC9NEa z{JV|ET^cGILaCEH0n|h-@FIHk=A_I4W=CDTbr3zREkeMIz;yBItOPl3gDn~g6Js*rCM?OK`|*8hxhRtxJnFjIQ?pz2sF{&8fY z_#VGWgEDI{ce&cN&`Hf1em;&Dj_nCWDGdbyV$p3(S@ZX3sh4JwD$BjV#~{^ACco_` zz9nithUS?i*O&$?vU?aRSmu=>Yvk@Nk>@hovrUA?4YhGJWe@!4vKarc3%V>nt+#7R zHYn1!%ikNDChECDVw~hsosxJB80aJem)fR@GvH*e?EH&5l9zMpw{|hWc(M|1S+-rr z+pk-@&C@;sV9|1f0Y#AdrK6E-G2hg6#Q6OR8sPZff<0V$bGtNT|9fv>Yu>6EZ|QHM zu9Y43D(Wl4=m((-{77pTD~S~%RazV@%tG-QCR+f62Pk4=Ab>7z9W2PU*vFJ+)Y%lVNk^Lg@@9xMA+yNw~)oaX< zw;lqvY#-Q~aq1C4AndqYA?e^dF%zOqfiLGgIx>I##ZwB_@+}BKsxHH-2jYHajB5af z{)+j&RsPxj;}2^GsNV$9{cKwW67QQ&Cp%08{R2N3)*tfLEq@FQq5;YJ`58&KZn@H? zpcK8q#|0?K zPYD*r|KA&LC&?9D`GZL9UMK44kB78t?pT{cu;ZHe*A3o%z6JqJXG?G8^3TN){v!`= zOS6m?H2^HK1khz}t#+!J*gdJR{TDH|ake)DOIfP>fOvIe5l~rNz|eFhfb8pg_((TE zj82AW1EL%~E>~y#qCaKVJ7rXA!3;Hk%b_+wOr^qg-g#JbB5L~?u*^F_tkO@xTRUd` zgxy@hcdR+ee{(iz4ae|G>%M$~Qk{u!ROVme$2*^MY{d&6vAezIL^HN>Sy$+;+;?%X zyrFu@{;8z*$&egAH@b~*g_S2;M0mF5Ai9Vy-lKH3&@r#{B>$`;d6nbc(nj9E8dRx> zRe$UCZfm|5gna0)o zVvB#Hh2*z0DE|m7Ms(k*FLA68-q;U|z{iLEr8Tvym`9vDu#P{7T@s8dRsn+Y$ z@WSL)rXc}Le=~%^O^sMsQdOyS_*V`#t)}Y%N%cLwM&)23j<)kfzw?Fd>!|o`np4d{ z;L2b48kAxIx>CTZSif(R2t6j-S8-F^J-r9uxMhw2Vo;&{ACB9(sJ2nHJ{@qDW{(0~ zsWS=cKLCfS{96F&z4&63P3{BKcSiJmK0r&jKB2Atq4m)3kp2_b^|u0Xju0I?ZUZH& z#dcx~^Z@-9jkjrlfM<{y)6|K)X|ugJEC_kbONWkdu_NDmz)XwEROVlY?b??jH~>Wo z>4EVLW-92`fa35t*DeyE|0|Y4+}(&(<`oUx zqxi)p|J12Sc};ap8}}i%KoeKkQxANBO>rQK$soJ;*71-Og()a+`=Tn;s$QzDV(p$y zo*JV7#zxBYQ$ir+7uCv|`9xx;fW^b@sPscKH;(KEbJwu=M}Id+@O8V?mD~@4!M2j0 ziw(LQMExJgGlM~u12!iVi&cgFfQ((>-*I9qk~iRAI}@XQWe?|ozQ(6@038ch!NjGb zbF%2 zRmTN9n!UpbUjn7OYr=z@IiPnpR($+@HsHqRb=o)ITP4GiC~&LZH0Z~xx+pn`n}1WH z%Hru9s-1R0>;WB-q9oNy5v&sViT4gVr)-!Ig`f2bD1kOry8k=_vI@Q__98YBYxB0m zoI!CV&;ta=X|})B6XbG|tw`Xpqz%1Fx5&lfc}rrO@2H|mmqYE0RgVL0K#chDt5L=G zO`~l-w(`u35c;EI8&#iKDuzGcFjv@MptZv(>o`|vxU$7-C8-rgcu>Ww-*veYZg}jp zJ`RKK`wYue5{h_O*q53Dc=#<0nFfDRlXn%0z`=-gGX&}W*7F|wDKtFPr8=#VtvZ^e zjPO2&xrH!@Y`~XuZW0JFI5M|kh&aq~CroPG9j2)dTgz)U0RMW*N1X6Zl7D>n(2am2 zf?9JdE4CzbP&Kk;;Mr1Bp@MBdn0&vrp{bp~^%cBB?ZFmT#*zzN4`dpW6f!$&&> zC~Nj1kTq4MzJa!z1R$6cVU4cciOQRPpCP{k*9dbAP>k~f4Yx*P-E4qmzdX=i&yrQB z0vmZl1AryM;R`@n=GN2zoWPylK(E%7IOYdrx<~+~3z2qjTH)}DsB{dw>NWZkDM9dJ@8EUVqm-j8TTMF&*Nn({!h4Nk7WObPb_p! z+bp&|D1#>k5+cY{c(@$kogu#VxZLqL?+BD;EfWpDvX$zV0_hcE0z$CT;J>yX9}iqw zV?~E{392Wj8cwQNvg)dGxw zs9$cuc!AqFkGYq#ZIfoEVo|Cc$&Riq=b0OAs$eIa(G3%`w7=E|INl=?G)m79A9o#0 z?Mj9wZNNv!jaZdyY|$xF(0E2xwKYfT64y#pD=xyj;w@MQV4MA!&TpqXkX*O{Sqnp) zYR?wASN^gwUA*d@*)VAnT4w5cti~8O6j+!~OFgNJN^vfUK|gVhC74_Cw&4|dU&4*r z75N{UzB(?-=6ibyrKFKux|Nh#kdlxtQMysOQ(_4L0V$PkK|-V-LO>d%8)+1f?pkW8 z-z?wv{l|}r%6iY-Gv{3A3fDUHpT5ANSTXiyP2x126qayhc{;PPLICXJ#nLr7ZQqvYX6KKN^XI6MYG?s8h*7*ufggjbDO#E zZ*8yF)Y#*bVR-hm=r0+&8)X2XLTBizTaXe64_U`$Btf+x!~?YjDHSNC@k+(oxjo)f zwy9~L&mFniP&L7-Ys;bY<*)6anp@3lTzXG)A3C%ZJUUJ;a|9eTRfjH8IsO}|D&gwtt%M znZI-|nN#6y5=@kxR(ITyzMl#4(+ecvyaLWDdouckIEHvT)u+{ihIpoe9qiDHX_KIM z5OykzHrcA)pl8qTK>Hrm3Xv-(hL=th1brzm``53nKlb+-)haIf6H@nL464C^bU*?@ zdm@T9@XRgQtX1$=KwklJ-55f>>yt!baKSkPEd^< zue@IKAf9~@n1WTQ)Se}zgSI1`TaZ!+%fAlWxLo=;HGF$Oc+2cfa_eIKH zpw*E8H;jbXOOMtJ&x_w@`G$m!%8KA+%F~!$h!w5!h)D3$p!-~N1x7&S&FN4oHp*Lo z(=l}wtKX7zn-tqhVs9B#7bFDYrTV4n2A`q-mkIh;lZE>aW_1UmVEh4KpXb#p&Z%SEfE$dK%ohwtC3&|_ zbpQ%`qH~fd1uFcz(SZ9~#OZU?f==!DPu!$K-#6)7R|NpGfoK1jgX?7a`0m7Dl>`$5 z2LnL0tSVYB3bY{H#Cpz_G zH!&&kbgVZ><0wF&IOH-4;|w@<+VC^3Ii2D3l=)4f`sKRu;FhjJq?~Car$rJm_ z-5xb|GIq1a6hRCO5032zKTb>~D4E*>4g3K$NBjA9pPCIVV0bsj%N$Xsci9Ft9u;lU zBZDxY1O*9?rj1V_Zs%h;oXDz^$+!31)))zoD{9)u*6dx6{gi!UaM*66D|>M;8nfvCkLme{cUU@LGUxSLT*mmf#-nj z_M?mqyw(yHAFsMVWl<70hPoz%xk2MU^ZU5dbm`;xrYKjaTIUcXNDb_&mse%t?4)>n z9W)Rl^&MxRd%{_?yYX1zPB2x$E-zS#^{HP~##v%1fmC2hcNS&fh3H6f><$!#Nw7gt zW-PUf{s}Y(8n+0Icv-@f7s@I9Msa29P!A;UA5kt*9+c%fFWPOWo*!y#I}Lc!SZEM; zM6cm=V%4{85o=dkX-qO4wE5K`iyYF--)zzvNJ|43$>)>?K0ktTG5cN9h;la9=x%Ya zlzv$Cs1wM>S~sK>L(J%c31nWAgp>O>zg}GKf^`S8Ob2}W%GXCyau^>jN(ua$=?h&_ki4gd$G}V9BRxJulF;nXSX7p$xiC*b z)orI4Hq4A)=HSVA$KeTyJZ5%HE(BEZM@7pA4xJ?>UXkiDN zv8q~$pC8U8{vv}8eDmL8aK?X=WZUdXhiW2!1RtKCRb^ju!F6tH344Rb#!mLW`aeA1 z{yO6voHFx?wIm-dw|@!`pI2QKnr%kP+2+9ANypPFNkR|k|^lN<{owdx9HbD3T_{XLZU6TH&n!u zc}RSpQpqD^uSapjhOE@TOCi5XQSX2Vc$|&rc)`_kqanA|L^Lmv@94Lmg^#?_yKN<1Cf{z~Lk84Ot zoVY^FBSqVf+)yO7H)(OT)N4%-ajQ7Hc$0|G-lxW`*8DDy6r%c~5_Idfp2#t&dHhIP zCsxp1GaaTH`iX$-Nt`(x87&4%+3jt|g{di_WA>g;wnuX`cJNKo!@hEzvh>dfCz+(D|%!I$QB?C)^Ts;~G+RbR>4WNx|EP_Y@B|EgwOjr3a)JfKn?dRjqkt~Ix zh5rR8S5O2qmtic5@?f_H3w-|D-sq<4Ubg)s#e+2p8a*vIO#z%*U2xGjqFt)4gZz=4 zw4zDFl<(5oL#P*m*p{_Z3_Z2e%y6mPfj|oP5SxY6muh5!4LUA8=HpUk$XpRrU39b+ zH5(5mLv`TErx#*8>|!IXCD%TyABH<2C+1=Q-wObJBmf`?1%7EuGUJ2yuB$$Q4Ex9N z0X}b4CoqDnrRO+?2u0-MA-J@d2LAK%Ttts*RGG(X{jpGS)3D%f&(U>} z<+qpWw&4YD4&Cmfc`)H$&LWuSCFq5gruWlvk-mavS?ktYukBeP$!Zs)yFuOSPsC{! z`wae%X@g+xXTta9ULmmED_kblDnExY57O27z^n`ohN&H6m?q0m1}m(^bM|0sOxd6C zUL1k}zYeJ1{$`zygI%&i3YY2!Rh-xyaHa}*EdmBTvw`rq;o1do28H zAcircnL@X3DpYfuLN2hU$zll@o-;)!&kMJ~QuCc0Tk>~gAQso+ptx0))+8OM2SDJ9 z4V^PwPuvGg#OMl{qe`ZOb7cKpwk#L<)y~=In8az?J_zk0S@qZLBg=Z2H?{)478HUV zZ0HSqXre|ZrefpQpjB5%C)nYni6g~=>6nWjBo#{M_5~-bCsjREHsOqi0#Ep3 zG=u~;9*pgg=M8yqVQqD7L{;;+Lc@=;T)Nzq0aB3P35}FB;wDP8Bpcli@)kn3 znwn& z#P*KdEG$>hJF$ZQvbMUg`6H-ZGA!?B-rzZgy33Gz z5~Mw&5j|r%&;1<&{y9^C{AZ9m6w>3mcPP*6tA#5-F_cv>1g)Wb2_0$Q39C8*A?-@) zhWGixc`h~-q|y+DB3NTwq1u_p>6YTo-6*kT%`-^QUja@GtW1mbFL;`)eN(WJRbOa?61>*K7?hCv=~-D=SrMal zLRN3Hxo(CI4=!k}l)T4*+1X3jr)rqRcHXV!L`V`;WAwhH2xdvOh*I@zb&x(LZn zc-83vLYvYrkHc5{giK--F7ey|@X8%(BTR^KwVQ+R@$r~KK%YVIMydB9?;GMIaxUa) zI!$tmil@{LH0Xt<)B z;a`G+%ojjeYy9#nI0;W9^(F2KAjF;1BZ?+ve_I*PjDOeRiVWW5pa+is9>bmQI9N(q zbim*Ul}-8@Gd>adW@y!w@v-~C@U`T&AA~DI0g{ZZww5Qtu4vkR*nZfzL@liaGZyuO zm9Qk@hrcpWZ|&hM%=oPL3Yr4_v^4)p7a|-)`6mP(nm9^MB6#~Z@og+|S5DG){$FG7 z7?VD7v$!Ml!yAx$(0Ib)2OC8r+KM`VP?)7qpPV*yo;YGTyN`{mx%^6dBC%WC9Q*^S zI2*zDdewiqv%}#Yl6dIVP965;ra{pC*~^t~8BW}`!oUFo7?WtT(gxM_t4s9F4W)1e zdbnUs(Z@_j$B<|DxDG^p2*VUvAeKYAxl-wPNRn{EXzpCvK@G&3+*tFhcAX%>+gO7s z(Kjbk)2~iSjMs0b|9&`qz*{@}HzY%(E=B5)zf(B}pLA~*gEt*piKR{JOuoF$ewP_O`g-V#09-<((8hGf#qoi3`^aflKy27|9+}^X zK7Ud~2=y#wm`)q;+OU|b1;i!^Gq!D4SR zmT`8$Z>=V!>R*$-RP(=w<%&|a0l#)kd4e#mFr2y?-vk_6n+U{C#5Kl14o=W0baN#U zqFe_5_ed@wLAHC;_y1uZ?!dDM-D-aaQ^%J9l1V<4S+-t2JC^c-He9@dD+ zuuSYwGm(5ivrFTP_G&hx%*Pej!Nj(uT4$v`Fb~=t0+-i8trup)xAf*&t*0(t+l7c< z9;DCr+sso8;=c!wBm2(6j5}t00fj#=L$-~h&mDQsrsDSIlF;OGc8X`CUk@D`W7)(r z-`K8^;Wbu>K7jdqOGDrk* z8aJH#?v03B!Xzuzf}|;>XVvCt0#i6roZTLhOa(Q_1iZ(l<-lYKC-}&1{lsm+SE6X> z-%p*RQU8ul1HB~@qE~4CT}AUb$n<*U89w^Ct{K*3qbGI1U`x9aaaiW1t&nl*=+Kk+ z+jia?r=~v#584iCWhjW}w{D~^o}JIg9gM(t<9m%B5w~#QqbhK%ciwFz0>20Qec!)( zUH5X7^0J+x`6Dv(<}HY|W1|f_`fb%!)qt%j?N^KeH#Qx-_m+lB#4NX-i^7}*=~5?|WYvv zu_w?pP2AX@mZG+6`3$?&VZ;Ag4uCQMqQLDb{m(>RaK=UjMBCk}{gnp_TQ^#Xy{9k@ z(LIWJcS_TdnW3#muYF(5cg7WL<&FcZx03;k=Z(9ItBQ3q zqX#(&%F8I7RsSXjr{hx%r8w3708Cj&psj0DS7s0eLB4*Yut+8P^35c?TGN3)tSgTO z`X~Kki|z#pC8ue)q4}aY$7nFr&ihZN2N7;Z)+j_+Tt8DZ-QVm$`a@s#wv>mixBA*Y z?rz~rsdsUL<>g!>HZ!y`7uM?~@x{?T)Jzy3-{`jpCyQZQ!bj*3pgvzUE4y4d>X<}` zZkM?(J{|O2h9v24Q?+1KS2mC7(hKTLVO`-dG~y$o7PgLwnP&sgu~l^A`q6Hga^KZ9 zA-9UPFU1@ZLIU7h$+xva3k^ktz|>^PZuOD-0mI}pzb;5epwM4*vi;Sw-`EJrgoGvHvKZ=Fhf}mxWf@npU%7}Gsj2cN84@7Yi0XWI*f#ea?{mUc2h`ui)tkjVwh0Hw3NZ$S7O&AbXC{$+dr08`@tMP!fW*a*CGoU(Bj4 zwfiMgv-V)%uzT_!wJwT9rgLYFoZpn2{TMW)27rogSQ0OQ0-dSC{^w`g<@pQnPl_{V zTEIq`nYySmEooh-o7ImytH@lLj3?#9#FIVej@7;IJ;iwm6-3YN*(O~?XZH_fa{vC6 zaG$CLQ00->_c##?z>BZ);MlDKvkJ1!W=+ODFX)f%K#Yvn*2w(!71H`Udw+d|gj|Sl zKQ*x1PJErr`_Z5MHAehkFX-ote;J>QecC8%jvVUav627HMl!k{tVLjiJevo#cKZd&;lHDvcE8QYfa) zC)X_j%I-B!bx+m$=6l$^ltSI;fijRm8EMOD6fWcHv!ZoLwY>&&FV+l!Zgj~*-XSZb zS`D(comQf(&SkDKS6L2E63>=TCYvmg-B4HsMwtCK8N*ki;53#@N> z1~e#tgOg@Jh5zs1IB;G;CVJNN-Ut_N%&nZ%xKC9T0E78$|$mC3?6=|aoIndspXS5UeGV+Ee*bti6z#76Xn?~{r^}L0QNSF z)PHl`47yO%WtDMvSgw}wd8M$K(Ro!z_EgoD#OFU)nrMq`#W4gsgAnqkOgv;Z(@C#xuSP41 zpMK#Dmsz4bZP$q;o$SKe{Kg_?SJ4eV$7Y%#L)L%=0AugLEZDez;%zY zvNtBK5<;6x)qV9fy$QQ(>vYc96cd;*ok9r4HtbJHTw%(71}XzJkba&olFc0f@4nHP z`$od^T^;CU&K_->V%$+@wvn%EZnF};7ocD<=TK>SO2JF1RKeK{qgm8pyty1n!%qzP5A^$1AWVwA(k+f=~Y2VlJHTCavFtnY}Vq6?@vRcY+-67ZqzkgciPt?6tm7>M| zJDC}xGo;_QNyd=3(0N4iTrJ&2cs;h!DiziMsqZ6X*mdg^krLUS zx^tA29o%=5RCud?J@X!$lA)2c@EGRBltiPzGD%OAD;PN+-%aiMuQe}io)8f$E8YQr` zx6E*jklJ9)GfFcK*ep|iObmIaMq6>8x%>|p$3B4_c9N$5AUmFIjPU8JcWRD4L9>Lm z7R6a~t{m%B9b_bI;d1Gn6&j2K7Wp|oec^sQ7N<~PW0jK(f> zu~~@9tc2&1-0}s%bBEWC@%{Q8A3wHFJU8@nCOJO?$~Up#R@OnKoOodYEDTH9thfD! ze@UG46)sszfH-OCAIkyZc0=k@rxg{yx8{45;fHlrDRWeKOccA(iJ1b4U(3D1uB&6^ z)n79d-OPJ_W4tZZ7at~6*eoaJZ<}`rG|PIWa~Wc^ZZ(7c+Z)16U@o*@R6f-LO5h(i zo>M1EaA0n>Z3jd!As!=uie>!u&FNI}_1VtLO>pqco`JTl%X~GTyUOPFa1d5O3y!A4 zPo}7`TYd`|xL><|zXF=F%~<;B`r!qI%ua|d<^J-Y{N3zj5G0V{|3iev56MDi6t;i0lN zP{rxfi;23m-wjuuh{~CW_-#GE)+`%^3p;S3>`7QsejfJ57SS=-`_}mP9e3WI=u`+R z+6cNJBmlNGPvQ9~@UMI940agq#t!;$T6X&Cwpn}+Et%?r7G8f=uZW65Y4wYohCV_~ z45n|)1Q*|m^|$y3on6Z?I2|FV?CH1)7RWn2Ir7)x#9d)-`Ne9r0e=&-ZPSiQCMAS* zr<1!_AW>f>LQO!}1@rMRjQz=oD&27D`;zB5WGWBeKV=vD^p#MP>YZz>vE>l)q$^aQ z%aKM)INV+&w_fGB)5b{4ZOFbw-V!vl07ORpw7|vi)t@i0d5>98b7%yf+6Cr%=A_e+N z7E&7tO~Mt)z{Q5G@6WxPd&SsKg>qFot(AQQyZgp%TFmx|;JnBmO`%@@C2xGk8+hZn zN+e4c_Jxdgy$K4AluU9^|K6%U1S*PWeY{}2K0#%@eOU@Ng|0hlXM})?r&?XPjzl>2 zKft`Hmd|y%Yw<_3Mi+n`#EI_N_zg%jDkv@D++WsPaam6Am=$gJzJR#|lm1~DBpy5* z{Y6RoWMnfSM^dGy>UaJPu$KJ{Q5&Mo8PBjIZ0lN_$0&eA1#vol(aIoMFR|i4dxIp8 z=23siWIdS^PS>Ex($!=nD6RGdr-_MTxm~S;{V$e`jRL`zEffTtT3CJF2A`(r5<>TaaIPJKd-(Ml<~E^3G4k`^mxQ=0y6%jkKuO_tMtmRPl{w4%@h7}n zpcYQ=D&yx_{}^ESU5>+8EY+E*<=cPbga?*9=mmoMB02FR1?~85V-^g_99_$ROP1uZ z#7A&Hnx8|Lk?p$}(YxB-1{^q(sxjRQ{=biRKYjXe(jA-?eu8;~8y;Sy6lCt>G-?!w z4X*|rSzhJG7TsBQ#?Q2QHozP>khZg8k7TC^e1@Mj=g2nH*g{4yxo@L-4F>1Z;K(fe zG=Gi}WRVGbo3oE`D&cJCU3jrK(Wr1yoqUa!RDazeIEHy!Qn|+3fG)LZ__;@*$aqky zJ@qpEdD>!j)9aO?Cvn~8MYhfMNoSqG?Ay5S-)7zFU(k|OCG!o>x>w74v`%{IeNg>C z$*=N9IAP&?>%vwwxLzi?UIJ4huzsB!Ih{WAY$k5qEt7Y zW9t9{iYdRo!-4z>^>4i&-yJs>N&}1p-iz4xU+ztR)Yu(U;Z;+A6zgHmldj750H*F6 zOFBSG@cFa6Vn48>|CvbKStcx__>y5PkuyhLFC0>YGsV2UX0O*e$exb zK^mJO83V8Nm(qkoVb5{lddfZpgI7TmXg8Zb zq{EFm-!!j$R(Wx0+uhiFbcqZgSZpV0kNA)3f%yY-t#24_M0lFw2GgPrONZ^e;d!sy z$`*~z>QE?;`q0rETt{W8)}Qsb$J;{XK7*et!e{9iKKMXgXH>>T37)+=WUqdaTs z3p^49ux_Dp6+HUZv|}8HkmnmqD;Frrh{xM@quC7m<>oa@f}7DP>Y9mziucW*_J5>h zZ*L1t&Z1bQEKl0=j^qN(SjM$mrh#sSMAP&rI6g%s%;esaFb*k(eGolq-oV0DC2YSJ z1N~Q_Tgy}Q^Rp-ZpS8_OFl?VP04G8Tkc`8hyaLo5@=LjeVX#fg?zvqKBOe8N)!YVr zmKg@N9s62h$V-3*md35!S;hd+1?dmY7D@ZSBWF;)y3ul966A=5=`AM!zUN{HA>9Q* zG`~9jP=?Du^UfPyl^`4-T!8%t-f6Z%#Uh9@M`HJo_kWp|5)==hjLe(;mF%gURt!xL z4r}}lRuXfhavvj`HBn)LS0~AT{6q5CLgw_FVH4dxvGok5WFv8-DiuW_4=@?KJU;`% zxCD|1KA7J}C)?;(#K!vRV&zs!ywj7hnHH#kGt5tb5FPq=25hyMOAKR`EGhKlG*qb= z(Sh?NDaoSBMvB0*@n7h-IECJzKPU+3t?1D ztsH3~EWpuP=!EoT{tD9g!cJ>UQJav3tP5C_ScYC=+dRJ=Ta9M?IXOR|O~P6FaiJror0-R(INvZ|v;g#4kEETfpM%m3A+)|VCC$6zxcK9A;!Jeu zh+p&b(5$RJTB4hs#lG6(Rx+$GgzE#u*fS~L&B8W8$Z*V?vNC!NXbX|!yPgf%(vOd8jJ9{jOp z?@6L+j1{pH*9+@%yMdov9HA(B{l(?0^I&mNhrm8aop>V9^aGH-t#g|1I%qJ?co6C+eSkh=ypn z5&&0TEX>(1=>mktsWGJT6+){r^itq0Ai$Wy$@2v{MC&u;=SuM+pEF+RFC|vFP_I0~ zrfRAt@iVN~kHUVzikyCFt{XYy-6~L+|E8?*dFm$Pi!Z(8av$OLU-BbiUFlCK^Jluo z^IyE`7fVO~`O-^w`6%)3DtU{cscpOui&OC_B3eVyaHe)X2T`>L)O)DB1m?GGAyizrw>#BtRUMijI4ZgU>Y6 z#UNj>+o!YW5Q@57jr5Q!91K}!vEp)+W5=yt+g?<7+lwQYEDoAlY7LY0c6t zWf>)h5^yO4ZHLoDQ9{F~Wk!SqvMIRf-*|^H#(Ag0VkgO#eB>2JoZ?r?e(otd+Q!a) zH!CnL!>Z^{F;*{oNsI-x;R~RBo`N;P>ybrPJ9%>oh$L29Rh8@mXC%lF4Cpu_{Cp4z zGsXw#CrF%I0Eu%V2JUJg&}TLU#k-L>xdvXi+inVXt~~I#UrH@4{Bwa<57nN65j`O2 z30fijK?d2^n!B)R=9k+TuB)=xD>M)UCEAEh5OVe37!fuelj64kqWocmUgfE2T*I~5(DnPy!^qCzB` z6}YH(a$d}^s*q8cV3UV=tw3ji)ok+oDaaWY0mCK_eDqF3J+7)CdL(FQyHKPS{$@n$V_GShwVUy0teD zT2i_D(6O`=^atk~r?)SKsxdV(@DtiL&xsTwXKNjAWO?bVy%GNKo;1T6 z`!N@sU;mgWXK*;_lzM~C+p}bu=cktG1by)6 zGRvN>)bV}f=ws{2?f5pP{W1L;k!X+I$6TJhK(T{$iE00+%`F474sQWtV1jUsvC+D$ zcs=FNT7rBKjdWtEs2~E9QKPJx#t+A@9i@9%j zqaNm>jErdG_DXgHoplw_JGUMow4}1(Bsb$3(W#SPLb6>6M1_v;g1-zumlSWss9kTw zKF|-GzzR#=?sM&8Sl;i(w7p< z)ea}Qa1%bgLK#8~<~y#o`!0LjPeX$T*E=$J&snQ9usKhoQip%XiB5%GJCH7QZ*02) zcS#j@L9e~W-i!5YDWXSnjk6C7)3sx4fggJ}FYsYeCae-p5$`V|Wby0@Gc@=Zc#A z?O2@uUg6O+>+gv>lp2M}?0Q9Z2nR_?r`Vw7M+l<}S}v%QT;N!$f7bOdid93R2cn2_ zOw))q>_8Bj4pSOz`vL9%vIgxx8TQ# z`NKP~S8ac+ob)4LY7BMjjESYL0X=YoJ>Ylz@f<&Uit2OF!4C%P`6j88bT4jzRBiUd zpH&0;OO4PhAEkccG~G*HI}5~}4c?t#bW*A5zbB|c!kfvja&gkVdUS!3;xw%qx zwq9x8dR4C65*f_L`IkN<=a; zc9ywV=-o$N++6NU-C*JRCG+Q9fy-TkJ)Md7$;dti{ke3*?}xR*Euefv=~YReu8qhN z(spuwbA5Ap#{=e|SvNKh?}j(;pM^3e?jue>o}if;vxd3h49b$VO`gIy0a@v3JLW%m zN((o^Ab>eA_%kOVSop2`@!!v^UF5k+ZeCiQNY>^Ob*PJ2gldpzp+o81g1XS6eMsLV z{T$A+P3ypEE5SmVvk!-)Scbkyq@cj?B#D{?7L{f(e}GJ8TJ!$1NN);lF$gUbW|$rXYBh(>ijzUr%$|bP%&@u)Ko< z34(gFdAwIeZ37AtrpRBp?s1ps$*6zRz-9IV4AJ~6eM#o>lq==@Uf>&8;ety`SwPD! z+P^BbY{Y)NW)$~Pw*8kmWzRif&g@+On07@Qsi6}e>_V?T&O#O!@(Rw-k_x-{K74G_ z*%wk3TAZRQ4wA8M2L^`dd7Dy76}Brq?PX)U$`myDFn{1me1!jP5<%vgvyJIWG&x0Rc;*ustZ2dfal8;PkjvDJ7;^6 ze5q-UaJ1#+$GO7TiHeqncBZoV%4LhKwKx)Pdz3YW_F&0mgYV>K6(+G-S5b4}JhA@2 z11#Xr9fs|z29(rNURH;Zs8Ucv>W;x;#lOI{E^-GMZ14g};BD@sElZ8NH|OOQ$c#vr zQAHz#>4$lxVcv*3il~8ih|JRJ2cVPft6dDj>>LVUdobSa;J}RCX^Ry=zode#8mB>6 zfKOBjY_<^X7B(enTC=WViX3Z;WY5w|Gss-^0Tcttx93aY@s`FdnfI?qnXeJ!8XD^B zwyohq^w~=^vkH{Ja}uzH3B?bjsXL&*TS@Exu04xZ2%-$H`VRy3&!UvkXs2bv=|7bT z4Y$ceUDy$VXMn*zs6AcO*wT9&w)@(IY5ZN_(Uo!F^@%%0txkmUF@LSo##8+BGnD<~ zDrF6uxp@K)!H5m>bt>Shrv6-|fDgH6#kW?BokSm*i-<)!WC8I+m9YHuY}4uNWB$H> zm&$O!PLvXLsfz-C1LvpLtZiX_4>n4hYcZ0~n-UVZR?xFuY`j{Y1r`^mMODLH=Hs~Q z76L8@g9~W9h{1(@by|wz&x6M7%2l9P1AsP1OT&O8`CX)J0lYTO4ISCw#b~(^D%Jo6 zdvE5eyV~8;E0(GWnSk_PB{l0r<28!2|TkIvu$mu8WOW#42XU* zWT$>HcFz*m1)XmOSgm5|v6KO}zIi&xfRs`!(J3@iA#ZI1`KJx7a&I?s!e6+8MW}G5 z^XEDvf8HUEeO+NQ@T`kveM@jLyLR2^wj3nuv_+X9axtxvOUe)Oj>5)B7LPZPyKRwr=ddT>!0l<}J6oT7v|R*i-nV!P=Ej8yQ40P6~~4;>PtVCe-m(TB%n zilP%6--ck{RUU@3g-$;t{}fMqZVm-o5DqxHP$SQYSGGfw`|PV6+&Kh8;>QDb6@W+G z3NWOn%HV&kr-65arg*aIgKKCXL)}bi z{>zUMxcC3D8r^dw<0XogGku`^AhH{CU^Mx7Eo8JS0_z{%qj$*+#4jIE+y3S_Bv&fN zEZ2&*5p2!~uWFeYXtJLwGw>5an7pdFP#9~P{Qj!=6nfhjdpOL$7EAl4Q9t3T*w+5U z85X1e_c-e;VUR6?6f*^18ZjSzCBQb*djpjBHFC^R@1Z{hGh?QV+(B?vRe*H6^Ya^_ z@kzT|XW#Mk=fzHc94yp0d}n>$cTLLoNS)|w6YbAbSwEkuRQcl|(}EH*2ppFP&P06- zygb{_o=_8-6+jn%0!3%MAt1P%4zxdAuu7M*yrngoo9+8)dHd_e{zv(Aprc&Zu_%Ci zxf(A7P8Z(JI##h%-U=^VQC;$a;(wUy5+2cVkC@_cO`QBFb=bdvNP%24>T{qX1!oQn zxpS~qM_2W`%06MV9v)g{t#w356$}#tb-qfcx=$N`RJT%y#NuDTQQRH>LF&nhECkyzsw=^zr9Sw{6Jh-ro6}37AM3!%7`wy<=jrpX2 z1dkg_()~A=@=Y5iKd)Pe?ASZEofi~MJ$gf)1jq8dQUvxZBGD)!RuXn)<<{d5+8$*H z7hz&WRtN1ircZ%`)g2V3{;o3~{5lf$^>W+9qaRR7zAB*?xhtjuj-?Av7hHB;oXF!c z-0ZBZB$$L=$yTStgH+C#p0E74xwGdoL;z=)HJ<2>j;H1UKHxd!gb{aq zPg#R`=Ne`@vE9}m`JNW5*G)B_u`l^QAWDZym_518CF(dX3U5AL3CH#_@YN1rI}X@; zI8EsKRp(e}9cgU2tmJ%qmHvsTgOTXp{$fSkHN~YyROGd{%e9rhclS-y^^}u+<*mhS z&0Hr@Hfrg%?Yt{*8#H@s-Y^jTbAFZ}+KaN+Nd8$I-yIH~#wZMmz)s=JaA)f4G@lvv zoviv$RoPw*79lego9ta43{c;;nD4_^HOq>4QIe>M|G=YF!ij`v$L;%0{j@5~^4;1J z=sNHEr)#IMX<%QC9sVbGWuX~7=)8{Fr|BFs)=8TSGT{ ze9|AvvAd7O{i%0yk5Hthk+%!YMT{Y`DK3C1XB(5n1eFo8=w*{7g=N&skBawpKZ6fk zWQoacaSjOahOARv-`xLTj~hK@P$g%){rINKr5vS#-#O~%rT_Y&_|2B#V{YXeHCD$` z}Q zT3Ft)2|wtD+viUQZa<3!>*@@T()(LT6iBP*UOk&SKotOr+9bqFr(*TvQ;jvMz@d$c z(;qFyV`BWZyYGK2XLmS1X!q&U;`&3qURPz9!7ERMGjTD`wJm-$d?6mNKadV8BX||6 zo?lIcO7xR?<`c*lkD9L!WfnK2q~xvJ^@|^AC~FSO+>EUzw_Lr6s8YOb{0t9Cv`YOa3BBA{lXj9#lw2DlM zv)b1)F{a4QhNG_Hono}%-OANko@Ln}?3lIG`B+r8Y2E1N7jJ-856|-Zp8i>{%K#v;2YN zCc%c!Q6@0I@a14(c7X3Oe@K(=bL59+|I@1MCLRN|IVaL#wIdBb1(;1?-X4eCn)32v z+;E2XOR)P|rd_J{zc)|*F1OE0Rk&%xT8iOH=sN*&GY73vrz@{p)7m{It<9p{4-TKb zYCe!f?ke8;tk8EXhR|P`i5_cx9{|X0)5o7k=cz`c+o30>+XhPMg5)ZzqNp{hAj;&q zwpTMOmaJJ<#vS%M)qz`=2%brSFts<1vcqX>jbcW#fqrxs>@PHFD$#IqZd)-39j47D z0{%XcN@p*@DP@&oHcD+AN;NS_qIOgcU(3c9LcUAb7y7Tcp4c|EVbz&dnxWG) zQ01GY!A{F`;FF&prvoc*kqXhJmu#mCB~WwXOJ~PpYt+{&Z)=?f9Hm50O?O(n(o>M@ zM1e8XE79`r8OXnXjU<(Onaq(Z>@#-0`MyW0Gx8gBR5r9D)!kTGK;4NY@zj}xRMjWd#9dvEB{#pE75IuV+MQ}VY$Kz`{N+8-NiQSUQSWP2 zjdBl^$W1pg*K6iC92^Sxnb?mBd{{`vRvv?}&Mlt^S>Cdpv^9jz&G+(eJaT_h<339| z8pHRPZu5FqcHGHxts^!0Cjko;zDhh8kyvK!v??^pB=o&{tGAASZ7Ay9=7%dkkP@ml zH237a{Q|=6hMXz#L6P+@qKn{?Cp?_Y&s-SL*J4daI#?5`YF!Ae*?5 z*oyxpa^KD{-q8KZa1ZJD;Qm4`W;nwcN>&zWvFwn(p5plY##M8cc30HvDRYE)9O=h# z)!BLrIt+QoHxy~4t&jm6yq3e& zUeFxsd=OUuq!_P!b_o@?j8CjxlM>L47LNG0aZIy2?kUIFj{V6OjB=8)e+#5pG$OC&GWUQsxDsZ(~EILsk+{E zQZsZ1>1;Y@A0G%U$#p)#%eyKzIr&cF$wVDnl{)T&{md8k^p#)nr|7P^@9g2XSrUG} z-LYOP*}prnEmrUpsyJRb&UJ+d48bhd23i?cf%cB`Q^Z#M$g9lXhiCZCZ)F*GF8ij1 zZxF8l9+k|%K4F;yLhCuQNY_1(R(mi61x5KqO|smIe~oqQDk22tLt%==S}rft zqONF_H(oy|f=^n%DYIwwWZ6B!Vb2&b>}0!8P)HYD3?mX|OAX(;$imKVc5ON%gudgg z*0RU(RFcY$`30Ph<*$3~_{w>}Vjk&MKbn92xuW@KCoQcZ_3s%G+3gp4^O)D%Ig;DZ z?V2*y-@!F<^pR@iY@lco<&CtFvd4x`rM-*Ld~g5y0z35FFs{Cm{dD2<$88Bs^i1U~ zL3N;|*G|jkOrUV!4ADby$*v`H&IV2f?ZCFzz|Ff3Jf~3GxOAV?@Prfij4?iKUVne? zSFQd%WK7}y7s2o`(*O`cksf*eZ)Yj`C$Q~b&r*ALbxcEAf9YK!$LNCV_J!zvLE~y} zm+HAJHdfLT*N>zG6u3X-U`65u?EgxLV|IW=hMNe_OI%!>%HbVe~J&zxlqr z&tk<|Ay?`u^Pzq5r7YqllV+%esfUcvO_vhVv| zLWnkT8{-%;c{BsD+pKx=xx^8n!nOUh>J3HSMy94!{ygBY2{X@6}6mP^)}yMST0U{ zdqW48b6R^3G8u0G{{ft9e$nDWsznH-jqaqj)Q~lL3m8#oju0h(^Rb#axoLa!&elF^ z-m*Q%ZY528k=LV(Cmnw7CK+LjUjNDdbN#()D$u9Vj-31seG+nzuFj^+ZhhFPi$Z_iWbIQG`Bw=RPgU-`LDH=RSw+)6-B)i4LW9KfF|wUR|z>9?5?DVIgSo zx}RFYZ1)`-{?ThlR*E();43s+g*;tUFfVJy!bHFoWnJ=w8Kq+Rb-?Y4Orx2T}%t34!ie!9qM zvr~93ax-^6Z+~6CN8wn}7k1pu3xc zTJYY;3HA^;e?4$M22FquKM}n1`q~BO1DmIyhS&kl!i;Vx`rz)gtUDj@zfz~KyM^uc z8+!z>3_lMnKfL~>{f2X}Ua;w|k@=~o6T{Ed3A47(#q&lKJ3O*(M9e0i`1OkGy6ipK ziB0$Ex1KsaF+7kvqe&^7eBW6;Qt^+65MA4wnHy8Xk|Hd+SVWJkCQG>wR4W1LuS?F8 zbbZ2>A7fJP(1)N(b^#ZIHD;3aI6*X|Isznok#(9XUca_A$5vE8wM@po&Pk0J+KWa3 zAeAs;(7B;r$B*elL=SI{;Egf<^a0xB-;t2_H0sIdSDxLN#Sh`mcU9v0D zttHGER+I|l`{_5DkGU>+lqq=psTVcHrt^1eO_3nBtRtW>?BLcqBx3Apg|ypc!KNr? z1pCeh8(UM4V5NmGPX%RDA0hlqYFwcE8D@Jp1_-piWB1KfY|M}_12@!gF&o#f!OXnx z$jc?YT>2YIy?gm@OIF`m5i;8NZp5SGFXU!tB*$>2Do{u%J%`%q=r#U$A##;)gQ3qu z*%puw?lebdz1RvVKHr6Q$tbrAjF7_!A8DGi^G8%2Iqxwp|K_ah>7OI$o=@KOZ-G3W zYf44)^ur8wnJFwI$BrCfbJ2rqnzIN`B~a`_U9O#pyB^b}_zNtIJ0|mQ0m5K4^X5Yh zKz=5!uXG)I)m(1v)r+WB@NQ~CzLC;X3x8A+(uslI4$VtQ<=8WYtK zzQa)(T?R{4&Py%Ihb?qaEQcuh)roq5g;ax~80O*7MluVSuX=1;;sy9PL?I8_mB81> zpE`HfbIe#Z1x3+BAqoj1S`VC#LwaLH*)a+~z;5VS{1A?1fjkELVn&VHSCzP80_psB zS>g$F0ifex%KAxv`||vX!PKTk1eum%6^W{%vrqGMjs(=%dfJ1ijx47M5pnA$mCzO8 zfEo!5fFF28PQQ>yN2LT?Z4|Lxb{{2VqlY|U!PUu^5dER*Z8@%W|a8q+T z@tLM#an<4oXe+*9px?geqP*a4wVZRyr^}xs$MWM_EtMHxxl@7x@g8LBu_TI+C5iVZ zf-#J|CN1zi?YyK|ikWPYqv#6DpTX$QZ6yyt+*W4u)Rp($l&aR4H5{)+k_PS9Xj%kC zb7BfnR4@hqC?2wWQ`twR*2S$m!;o|O8a*$;V6XK0kgo8)kh~GoMzf_HP#}MMcG71a z>`T!o!Mz&ZU0~qfrAYR}m>6Ks%T@XjeduVPky?Gbr$LL*ztLN4e ztr*cb_#G%~F~8n-&mm3#F6vRQG#Q$oCeN7t1F*AOKUEqNC_ck{A3Gts9(e)1T=?l* z(XHuL@Y)c2{>4?^#PVLAR5QeRuSF?&Q3q38#lr+i!IzN5 zPK*vJsR%i>V&8!nKu_?uvW=jfwb^1Cb?{c7F9X*lO%W4z;?Zj_(~g=Qtizm09XHxZ zj~SWWYItu`2k)32#q#X>%oW*T;xGxv8mq~nE~s%aNXsJMW{Dvi+WEaUbn4md*;|EK zcibbkr8cjNCQ52eM8ERz}=48h;9Lcgf@#C^ur+ zSmkdWs;gAs4X9#jM6c%K4b4iQhuFq$`_jbL`=Wq~Xr#vMH-~WiNA;9|Ts+vAgwZ7AX7eZuJ>*G|Tb9Z!pK zz3fe!oC;9L3fs)eJ+w0)85v-XbWENyArvzZlP=%=sW=lg!sGzsY+KWf)0cjk-Q7xV ze%EPP7*n(nhzkvkV~Z$Nfc3ajr2BA*p;Z672n zwZvXXL7PF^`c!g@AFzoQ9&D+`7Y`Pe&c{sN)!8@Hb~3qz_~QxZ$-BYVLorTLaE8+G z;^@16@TJyB0|MnLQBSh1OlfOE9C}RqaX>Y)3U;qlOet})qe@Qd;L6x{z;e(OzM)D; zZKi{yc)Sc`AowHW(IOq$5J~7yYX${*&YMo^?5SFlszpk?LWc0rEv8G38P8DcUb1ie zy|E+H7oDr+lN&}J`;czvjxMe>TBb#ZOF1h%MBeaKx=3vJXsfhUM%E=upep7iW929L ze9%G`O^SEsbrKe-COH#16T$k_YoqUYzWSq2m+dQW&!g-g#O*gj(&g=A_nT`ufS=VRjkAi9ys28D~bCq5!c6$HhML6a1Z`&(t_65y{p05&S)`l$2% za&cCs#O~tNt&SFLeJd_K4{8pfy(B`BYL)81*adR#6%;#;Z=81g@n|?O*S|QhF(hT~ zqpGJ_dMi!7k5$BE{*%}F$BJpH10{K#=4CEDpF#d?iEK!Niw`4Yd@)}(Rr`-W-1*3A z=UT|hE^Y2Ek9N~;v{Z{yl~`ldLTVy>6uR+BU5RJ++_J=b=21QWAo#i66U`X`XfScL z*PIW0dt9rmoDUr4>=bJcP%pU0IqClDTUz+fGOFt-1;K|bk!K%BwY*a8GjTH+W0&t$ z4V!Yy8iHf8^N7XT-d7@m{8LZoU8Sgk*h_qOMf~Nj?dN?TKl%KL1cUcs|Dr?=%fq8% zJ>k*8sTi@lTYX-l4$DcH%Sbb}Rr3m2BNdU$rbW_UUwwbV7!{8Pc^k~1_=WI{K3qcb z4LCrLCuPVX-thXj*OD_woxYh9FJ=Y)xi)qRrqc?yD=jTEMj7kDE8_+;79X_(x~?=a zDrEWdnTi>|HXQu%xcOU$oy6T7>g94`)w z4~Q3hDv#^8KqdywY+{AgBd`3>c1coLugDKMvYl!_<^y9I-v>q;>ETVV!XOH_`0lPOR-5OC+xkaKR!&{df|<#NZN^2VYM{P7L*~ zOh&p?yiRljFBl|!GLl!Gdk>&sygm}!^Ew8-C{emOUE4I&XI9M;DMMLtY>Kbe;Se^N z_K=Ld70}BX81=_hx#Q;KjY4Y74;RK~dCSm5Xlc+)Z1=!ZgKtN)IE?OuHdDVOEW9$+ zAUKAvl3H#zvXZKU3;F~Gtlxdw8k8Iuy&z+gn3pDC8dq0ht)i~Z%ry9e9Jr*oE;tjO z$_e#Vg*LpVn}ecfO>(O`L9)_8ZaAa&>g@_ByWG!_7F%eEk;XoSRR%wClKbGB;KBWn zH%#IgfEtm!Ur)WfR_27t2Za}+*u1i47LO5&Uf*%F{jj~>yFF!NjeV5RMbS=BIfj$$ ztUU1s(10$hLaWN-heUg=)Bw}4l~gfinY$yTwd`Zi3X)5C3^V2C&{N7r{aIQnKhgUn z_CQ3Y8*x>?QoJ#TI^FE=q({`3BYFhr7~81iK7UIuQp=`$ z;oI!gZ9r}^H6dr(`DO3w(o0EC0sL=puYA96pbG6>NlNYB1?1Ho11FKOWHbP!CDtKQ zHQ}>l@E4jm)w)e_TL`@D6^_MkMX*IQfX}mEX^$L@cf71;q5Zyn^ZEJ(H{Ix~MAZ>V zl$wUYOhljhoQdO>+c%5cTiH2d!v^C{Oz6<{IR~g(@nm6POyCx-16I=~;MT!SGi}fx zx81@lQqpe9N^YKYw#%I;DEOIC%7&iF+K+_y^9ptD>SSkS z0(14@0UyOT@phi62gy9BZbQGq0FB`TN15F|Mw89hmNU8z_Sb7jUVfv|jW&=#QW~9Q zE!(rk7F^|~GzY~sT5VP#r70sk<dOpJNvGjcNIpYNlop#1y9z!_icXvY>#JL^H zb2kO{tC;lk;i(Ml1@EhtZxFU-&|sOqAl%2m0Oy0zA?(1H&lbiaOqxQYyMPoSTi!2L zV(SsmXtB&%9Gh`e=K!y~Jp85F7`l+EZN@>3yJyCoP4X}KU6Lb}F9q&>B zHg$P9;U$PfzihXvITKrb`K#Gzt&NdKjefeW)20O4_lj3F=5GIze)H^u;mLWJs;|_G z(%M*|w{Z85HXVLhjZe;=gmMRseh6nU}^_ryjayZ>T_^4dJgL>(s)_b>x+{*cK$}dcTIX#as*9 z98%6&;sFY2>8Ul#9VFQF{Z3mzviVj(;K(?j$jUiApVR)H=5DhL8`_+ysH9fUweD>u zszjRg2jH7Xco{aQcP8wSYq}z~!5NfHrMn4Q*bh4(sk5vLKIFp=V3_*asQ;$zbjkI^ zZVcLc^XV+=zj*l^-g?hRbhV`#vt(!XrypmUnTEFWSZzxt%WKJTFLlE?JlT5j^tS+{ z%!{sT2fHJ3CJ%$Vhwxhuuo#V=`9(#bm@F58s>*G~$j^e1Uifq*c4b^9c3-(fU}y3j zD}ANA_+S0D>qZA~zIi1|4!DE&VTM7NIhlS~QK5Vg{^H(!1hGf8jXx?$gF2e*P7g&q z8Lf6`bEg?Thkv;h%A7-SnS;G%ft$tOwr?1cKf{ub{i;GTy0XzTCEv$azceC_6g*kQ zcK6&>$}Qo0#jr}Ri{gbnnr!9_Yk-ugd_w|pdN(br-8BRc?6RKoB>|P5!YH+aFMoG4 zOE2Glu37J}0Or*}k6VIjsAlEyX*9eo&Qo_YVfzBE5upl@T$2Gn|2b;CKK=sNw&?J+Qpxj|dSKmPyk^gl(>qhA-zTjc-m4gcJI(GbXD zSU+b<`rn5B)9S0&P{7}~4SBbJxWQODbmGjO`Srwq1^D-U0x-ZT5P;p=wK*)J6kSAp z!{WTdE%rSH_Iuw`rwIOk_vb%iTxa0|2g+zVPTG>U54HF?1u#a|Q(irL`hP~^-*@)L zgBCX?4D~q}< zHxJ2po6G`6KX`I+;PAst=!6%x@f5AY;y3ZpAI2O&`)79lI~w$clrbnvHNp=7tf(f z);wT5GEW54ZXFi!7G3&Nk+l1VFOlgBb&HEAcX&K{{{(W#=8|jzv?EF(!s>ZdGhe^km~A#OOGBu-ciuJrLEn>!i)T1oSdC~RC9E& zgdrphNJ~3EI5_z9ki1e2;nc|; z{ql?zLrSXn;6d>x#WR$YI#b5Kvh_al`tG~y>g(4J4bi_5a_A{*CzagyKRnoL`1Xx3 zAtAy2=wRyxe9aZoiMn856Gpt(h{eRk&8)4%KO}e(>gnkr{>#gbbRze0m#X)2Kixwd zch{}a9qZ}o$uB67J~}*bS{awmy+p6OG+dQ@GlSRa`&-NQxoCBXhjDR~v6u7$+TI9F ze2>5CI@}98`}6&ES-4=;oT;y`#3y~OATrW}qLa)np4qtzUnotylYbr+6cj9PYy`s& z;E~XUIZu7ZLbP-AgG)<=8=IT2`FzmM!a{2HS5Jlz)8ZKz7?hTlj>fwUKh)0Zo>}rc zTuY=9bLVYsYg<_;84tFiIARa7}SIqAMswKY03L%_+&NkqkqRJbk0CZr@UoW?q*6%@vQB+G8EG&3G8i(R21F246GAkNs6pk4AvOhrXymZ%YNocd0m zZBoMkG1?z57pun*1O@-A>|u+6BJr(QE`xllc80-fA6mj-Y@V8Ze#CUF zJ{UtlP}dlKI<5K^M@*^v3X4Jn)k6rH!E)D=p`?sWPw20bQB!AJ9%+}@BQo(`IRPtx zHwQ)qGb=0U)FltD5D^nQ&2*kOtaK-r!R#+M_+_mLc(}WpLU3K+;HXa!_saL$vcF_f zT{%3NXW#Z(V0*cNbY-L0gq4Sf6awUPUx9_w>hG@#c8OF-x;$)XvPq3EFE4Lx1odSN zL&I$6dp9u;1#Ek22M6iym(lqh?TwJr((Wm#Js=Dy3b|~mFs`q)OE&cP>rWM0|75e??a48? zp{*T4Y3zboB$Ap=Wk9?@yHOu)I>`biMlOD zYz=#nw#0HZKr;8FHp6C~fwEc$nKU{*jZsuoOxNT~37+8A(nxcTK}r6-UxhT02Llc@%sf1KbyNLCwv@ixWB4!P;w;(| z#FbQ4Uu-6!ZEPQMczbie;fAsC6L_d&Ra?Ui>oY%(mTjF~T(X@k-BeYH_%B~(4w8!F zHiG=bWo2c}#Vn|Lc!(^H)Z{r^Pu~_oAZw-vN_b$&fo$ReD?IIhEi1GBRwLFwd>wH#8D-^z_dX5^_Jb zUbgz)C^X_77!-s%vtd|v|Ag1(ymgP@EELbsk`f`yw%5V$-m%OWvP()zZtv~&zSMzE z0O@IFWrc5HVewYXqp*ox#Kz!ow!Xf8`EYNE6}p0c4#hyRT|=%>1sMfJ6C!07nv%l0 zySZ>uU0vPX%WI;bnW5pefNkmwqu)NC{cvTt{ZRQ>#)kx%yLZ#SPvBr<^FEl@b@%kF zhm19W$c=B`7=O&8!ah{B`i-+Q+!I-zl02eDo40nZ;YE7McyTX5W3PoG$^HIe@3re_ zVTBUY8SaZu%Fs9wB}sDfUA^9l%bm(dA3Cf$fSKnv{N zQcZ99mhOQU(iA}*2t8#2p6X}lPH9y~nb+Lih40LIhYfIB8qVQ6`jbw$03|K3s7Rp8MqvNopuk~7!uxP%>S@a) ziljcaOFV`Oe8rab&fU9VOEpIf=g*&abaM+04aEnz@L<00#$0+6v`d|!&`^uMe6#$* z!utB)leXT?(snH-LvKZ#m%nl5jsCJql<&J*LOJu1L?0cSb2^OxmP-3Bgy;jxR< zHa`B&c@KIRug|WFVYv&z+EjZp;9(kpoDA(;+~?0-9ImNkR>p_*RmjoD-euWHG_%y+aj@$R*O#@M z%d9qEI#tv*Y^RjvO~}N`iZfK<7U$b4&lW8WJt0TC_v%6vh6HbX-2W+=>9-f({3gaZ z9N1aJmxgk%nKMtRdho|rUF+&0!4gve$O2`&Gc9){l#~QdlY>dHc-6#SDy&~=iDZYE zBbq);d=^iu#$}WHh5;!80PM@xug`qH-NaxO=@X~j)LZ&A`=|9)U~8-DjJcWFjk&e+ z=dlO~YJY!?IntKQRg&}UuQ)1{mHB-6<-G*|pp+*{o(E(jxbKSTkokp$jyw~|dqd@C zk!3)CGRYdXLqk==)_!s~JC8yREX)txg#DTQ(<9dx|ljcY<9NGczm&1}}9VVweRT{;0^!4_VsiNaCexT-d(D(&$|ZVKPxcZLH^QXd#Jo}sYkO11^3iSJlQu1ulDc{*H1x{K zN(4cnGn60zKjC%*#mr)2bjaw^5-FgWbL{MwbI4~Nk_=VQ5il`e-<5zB{+^s11DJ{U z(_ej%R9Z>}>yp*eqlUhbwpU(W4mq+m#L|gFU+qSXogU9?lfzyNl?m-6B_qDHFqa16 z5z8b>_#}1Qr4f%xPro21FR$GDW>uHPd`a*sE)kR=2<{q!FyI8A_Ll4{gKj&3fZ)q%rG_}PoF;z$j-h5gWL;ShGz+;OWL#q zqhp9oV1)kKSD0ZUSQVd0Wp$$s0%|M{!o<&iDmgiMd3jmtgIavP>zp@Yd=*|ha!s|_WCRW?M>j4QTdsV zR_zKJ8f0wOUkAaQX1>s0^zy13H>XnShrSBP>kaE=FXV9jgX9>*41%QH%vft+@b&ct ze9--dvY}o3mO;mHl@9kyL59H5$&6e(;^H0~qLZ?TV@(};N zKHZtkw{PhHeZM+;uJhLMqIdVl^02utU6KPN@IobRxRQziJE{1cK(E$jE(7c;e80OI zg#`diI;$HS0dQX`NLEBXZzN7fFiMKK!D+L;g}`jvFg(mqTwLtv;t~V{#QK{Nxzw7z z3Qq=XcVYi^aisEKbD$5<)VFWnH1zd34z9`VMpm_uNp)o-fC|F^hUJ^f*%5igL50)9 zLTj0BkbGl=~kM#LhrXYV+wubI3oedlH z&=FiEyE}Q6X+2t-_Owk7MDstYvV>R>NG%*B^}`2?<|p*f`kP@sgAJPz+2mHl4zu|= zDuO(G_^`7*#L~*DVPu5SYisc{pgNc_zY?CBxwvV6^(2-UyT86Da{JDmy7qQbWO*{q z#C-Zka$l8~5MbyKpc4KylvJ-@Pdj3~`hZAUS{gxUX=!2VD+rMDeDwG3nwpyWLpuWA z1uBCDd`{;l2(`ihx!wN3<4y6rQc9ceI3}|{qwW{*>=}6oDI*CWJL{*#DOAt3?W6vCm-(P>kp!4c!RX1;xc#fDSg#^}ycvBiEEQ*XDT zI5whr_*!>kgw*Z+{qfgQsZ)JuQObObbxlgHt4S7VCrB!$Kprgg2m2oEqIWwyJRBAo zc>;k4YX1AnGe}u~z^x>V60L5Jl%n#{@^8g~$-U>7SzF&5Mi_6Y2;eMInkA?#CV6yP=azGE-!)k54v1o)RsHjtN zW)GhY$55EBS#EN9l}P7^Vlzd5)zHvD5SZTspyH~ks^;4b2m)rqK>+lP{r(;F`}ghl zMHIg$PXq-a%E~dl(a$;ZygUj78;84lpCNhO$(U!KnP-9*YGb+P4Km|y*xE~tPfYLu zq4o038&*k4MgXLWPELG~4lZhj_g!6s^>hAIbO!_kJ}fQ$78$B?;@mk+V^R`JyY1%0 zs;m+p+Ql&8LAfuj!s*6+A-E~08gmZl>*|K|=rWVL6%YWI+S$4f0W1OqL%R)(9T^P` zVUG5|v0}Kh%1DIxa`nMC zGG?7PR_h(TQ64`tGA8<*2PFQ$TJ+?ZM4@z9Z7l-zO1H$G{)NhU7FJer*bL}`F0)+( z1|{~v1qFN~ITSBq-+Q&z%)a&ibcKO%dK$`SfkPF!_bBr8Ezu{p{xlm}wRR_J)LxY47BX~Uw4_HzrE7mYl}-xG&Dv*^VtMz(a#~}w7HjkeGXu?Z zElLqn;lh6?4=wF4?T=E?|MJG)@BbIR9CP1)T^APcfA@b$2e|%~m15A^lqsP$K#3XK z8u3&7pCFLov+#9XuQ>F!Uw`iDp~%R{=)429oJzpvO!u7qsgS zg4v$r&Ye4k;mUbAh6Lx%&kV=D(Dd-~svl0tyHs<{?f{= zM5uexu&mR}vsa0cVjQ5*m-hDNpX!p4a91y4V(L0NZoFQE5vNGMEhctd-;tM$Qm1T8 zBf~!^=-XUf-NKf@N4E@d+=rvTZ#TB-M?MWanY6k~LZDzD_Bgs|4i-r6PfRN~8cb>I z|Ln%kRV7W$GiL~cT{`YwF-*?rmi1RT(b%MYI4~^4G;d_XBh9oue?R>&kE$T8T{_L? z$ZsDDc^7k*k`gA{lTL^G9y5ZMFJFEZ9nEUAwY5dLx4B^JXbd%stmu8C9CK@H&`Yth z)se==&5GPYxA3Zg;-X!Ql()B-w~tRpg`2~SV2nyIu(pVliV9(2VIi-}w8neQPFt;J zVwil|xiUrRG!7bTHv_7!%^Lwi+$1yaCXmyDL~)w$C>nCe*Nke zF-qyEt*;NTbv#{QPg-MH;xMA1tW0q7^YERKLYOsQ4(bZ^MChvbM7Y|D>~kS3EbmB; z^_p}XewY?#I-jfu;1km{y2ZO%w4r}Y)O$#@O9Y)|HN!*EtUAt}FsxDXG6*L;QU)T3 zOdvH_7ivsOu6S+UD+OT77R@XmP&DjuuP+~qfq? zn9NclLwth|Zof*h-$<<6=jc!1W1#tRLuQ-{B4c4@mInS_3d1aS|9;_@FJH+19*|un z4rjZw-T`o6VP{v=)YJ^)vuFx)o$DcB4*Js4avFpt@)5tIDv%*^+(e+ao?jfU;)D+r z5YU2cMHLw4ATrP?SeTfk?iT3-Th9)_ZyRnRm`rAVq{igTnKKyXAdRf<`ko$bV3Fiu zXn}z~jZyaEg$rb`8RMgMf!PK)uACekr$BLlZVMy=Z~--a)jn5kwbk1)D|ctJST0@4 zuDdfT+9z7oQhjG=J=x9n=Q!3VFvs>13d6jIU0%bo$VET8#K?8Nuxk z&Fq5K!<67YP7uFGC+427EYHQmLm3+zI}Vf_TrVIXpb?(T`Rjf_v_eS8}}{o?;;NgIE95#V-z04Y7Q z)o_QO8ahUojcdwOvUV0Q7%WC^uC8{S6Sg0L^^xFlT%TBK_5DxKG~6KADFxYLEs#=b-Y(o+ezIv6FogH64r+AhQ7ij(q zG2ay0WivF#0Vi}q4&({VtdOdxsWribQQ$nKwhpn?(eAW3C?a;S{ISj%h!);aCZ-@lUp=2TKrGHsj9_yqyN=eB4FNoU@fsx0ib`1ZT^uZox`ZyYB^4WW&l4$+1=KcMog?cWt$�T+RaHT_$QDCP}4Z_^s?z1jCyA| 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 F{0H{b<4^zq literal 0 HcmV?d00001 diff --git a/img/favicon.svg b/img/favicon.svg new file mode 100644 index 0000000000..f0f7816130 --- /dev/null +++ b/img/favicon.svg @@ -0,0 +1,3 @@ + + + diff --git a/img/logo.svg b/img/logo.svg new file mode 100644 index 0000000000..4dd3cb7b62 --- /dev/null +++ b/img/logo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_mountain.svg b/img/undraw_docusaurus_mountain.svg new file mode 100644 index 0000000000..af961c49a8 --- /dev/null +++ b/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,171 @@ + + Easy to Use + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_react.svg b/img/undraw_docusaurus_react.svg new file mode 100644 index 0000000000..94b5cf08f8 --- /dev/null +++ b/img/undraw_docusaurus_react.svg @@ -0,0 +1,170 @@ + + Powered by React + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_tree.svg b/img/undraw_docusaurus_tree.svg new file mode 100644 index 0000000000..d9161d3392 --- /dev/null +++ b/img/undraw_docusaurus_tree.svg @@ -0,0 +1,40 @@ + + Focus on What Matters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000000..0e2a86a581 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + +eCalc™ Docs + + + + +

    + + \ No newline at end of file diff --git a/katex/fonts/KaTeX_AMS-Regular.ttf b/katex/fonts/KaTeX_AMS-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c6f9a5e7c03f9e64e9c7b4773a8e37ade8eaf406 GIT binary patch literal 63632 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_AMS-Regular.woff2 b/katex/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0acaaff03d4bb7606de02a827aeee338e5a86910 GIT binary patch literal 28076 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 G2<`xUL{2yW literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Caligraphic-Regular.ttf b/katex/fonts/KaTeX_Caligraphic-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f522294ff0f3f8c52dfdaef7ebfaa06ebfcfaabf GIT binary patch literal 12344 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 Mepdy)y#Y}F4=Hd9=l}o! literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Caligraphic-Regular.woff2 b/katex/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..75344a1f98e37e2c631e178065854c3a81fb842f GIT binary patch literal 6908 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 CFgb+) literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Fraktur-Bold.ttf b/katex/fonts/KaTeX_Fraktur-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4e98259c3b54076d684bf3459baeaeae8dbce97a GIT binary patch literal 19584 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Fraktur-Bold.woff2 b/katex/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..395f28beac23c7b0f7f3a1e714bd8dac253dd3bc GIT binary patch literal 11348 zcmV-aEUVLZPew8T0RR9104!7h4gdfE08HQj04x0f0RR9100000000000000000000 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 Y{My=5Zj3WbM|mX<0#Lulu=APmKiR?A3IG5A literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Bold.woff b/katex/fonts/KaTeX_Main-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..f38136ac1cc2dcdc9d9b10b8521487468b1f768c GIT binary patch literal 29912 zcmV)>K!d+`Pew)n0RR910Cd;@4gdfE0LX{{0RR91000000000000000000000000_ zQ!g?A0A;KI00341003Y{>Qb#^ZDDW#0A>UL00IR700TUEvqYO?c61;B0B>Lb0027x z003G7)){kVaA$1*0B8&V00z7O01gadF8zFGVRLW*0Cdm*000O8000O8000nYYDoWnp9h0Am~g001@s001^+6GM<_Xk}pl0A-8-001BW001Nk z1PAnJZFG150Ao}D00K4u00dkuAU@t~Z)0Hq0ATO{00Jxk00J^60sb#-VR&!=0ASDn z001BW001BX$qvVEVQpmq0B@WC00El-00d@UC3?4TZ*z120C6|~00Wo+00$Y8xLnn6 za%FG;0B*#^bxd&w-=(a!HQj@M`{5-5P1eUT>T~ecxxT zN8Meeu2-*KJ$~H`Vu}pId<9tyW(0;Q=_Ng1(lfwW_)I#VL-d+WuJGyHj-gb#AVL)Z#|FbJs=-h$Gcd4n z5M7q+OGUBhZ`{LTgaj5&p809#AR5Sa4h}G6v>dE}pQ4X5QKm*l%f}Tun&FOSnRF;J zQl(t0)~eM^nGRe%M_aDYS*%Lo)rzcW%9M>*kPIjLy|Z3Ls+^S#AI_x!|90F5|~_afM0)Dgj2bE9U*nyzRtJr5u8c<&f#t(*bxKx zd_3IABT?ZjRXlZ)HCGhJ7ay{G<7YIB={p>3okn9HOEf(fs&QU=;}{!d@kj&3RzH?CFy#GTQ^ z;=yWla7lN5%RbY&dWAor=?IwTZ6jB^4uAV6XGI=9vupY4qXrmCA-#6HNG@BQQi8W*Bi}i zAe1vW`wCu6IMN#CJmx5&oWtkuSU)aN%5iZ}tre@3LOehB?yh8#(0LUPlHW(NjHEdK=629aH4d zRmr7N;Mi7`-;?Z44W$B!YAHS>@pUBZtnc6J$lDIAKM_C?b*B8c$*3mf6ch>U{6TNu z;)=3;f)x-KhqXJlN45G!2|x-gE_5a<%dxWIVnrG~IZ(&AJ}}W=&jeVjD{QC|W?6Y) zYEb2?OY5rElh!NUKhD%x|9}`-Gw$2a`1siJq`34buV5j|Fu<&Y6~GaW6=V26QxGiV ztCS2p-dU@-%yXs7CY=?2o|Ap@v<-LxpWHR3N zHoo#+(xd+EoAc!o8KF)_*hWT3kr8xv1hR(3QmM7?c_EYbmQN4lbM&(UA(qGPt+~jx zy?KAc7Y`n}Jfx@yp`QW0b*Y^H=52iuALmcT9svOTtua+&6*Arm7=l;Gc++IOBtyo7 zG^LJ;i!X1((YbiruHqe0K&)zO17;{>E_U-4J%W^#vMy#t(T+QBf@_?FB?;`sR?@T* zXSp1Qp{QXUh0O?Othn6Qr*>Frj5fnj%ZP-7XK&GCbhW2uufY@ODke==11Rj?mbX$( z@nV^t#H@G{s+J;L;Yrc7L8BingB9qYWpYow+vD@^eu^{c8Azrj z;CDYoX=}C)i1{FsB%`U6wrVa`UQJv?W@XYY@>UMydcsLNI-+vCjco55rxVCYDdl%>JYdoHE%z29$9h8t||}5hC8gq*B0N}o9rz_PKYbR7pI5G+}4u`{v6%M zgy{~V*h}S-0%47na)xZp3K`kmvASNe;74}jxc)!?qt}N; zg>C$x@q;?W*9e&^M`l?k_v}*Wt~6T$iK4!}IfdrTs)Xs%$r6%t^&%>9JOM=d{$p=u z&=LLi!KtOy@kH-PbUL=GHg&Hi$tBF6-l{Q+Xb5sVL<4%R9i@v&7PuoznmP)UM(1RKlf9zif)uNCIN zZce4@ZfBt-ASrY48frx{%W885-e%9OKecZ2WdU@He|=|)58igcrPKMs>Oz+oi+4>2 z#b8`7=6POD2mu9UJCnWnzEWQ*-3z~3ym@>?HZCc$)?n|T?JQqAov&pF2RjEHjun*= zXJojhi-5SGAs__m%1U28WLC1>y_DLLEp|(`gPpK_Mp`r_%s?@5Js90<+ zh(!b;`9H7of`fwkt&bSmC5<0{_`{fIS&a{~97a2K?D+1(D=s2SzPtXN?*Ilw8vpL^ z=owg_*ahy|6AW_b0cI7!;G!P7-#oVGqN$E33Fq<@geD#2xvb zBq=sqv{7JY2sXzC(;>Qd$y7XHR;|tFD}1I!3*I$PJ_xPuc9U*$Id~{;_b$EC)Jfp_WrHqGwf7+VzpW6wXax_^(4V7sDPeg2FMy&bkB31 z>~ggt3Ov!4t46t0auwww0o3tyBBA*KCYcB2gtitRcz_r5I;0Z`Ngfi@96WLhLhq6a z5(Yp4r90!7-ua-h69Lc97%T=BVTlu1ghCI94KdGmt3&pCgpSJ_w~yg?h6ltP{JU$gN7ay~C?bi0F3I;PZ`>eTB{l?6UjDM+qN9tvU5E(}ZHihmtlT`@vmz@~IHm z<}2!L8PL`nf&_TS?e1+H_b1OrQ+?^69Oi(tBH{dW?*;p7YkI}|^8Wj#)-BtWOUAoW z{^+2=j|4C;op1cemsgPbPZu$sQd}4os90 z_zoDoYmIOc`DLF&X5mRt_%xBT2{MbQ(YC-_GE{i2OdZM;J&D>?SSVg$$>LH|x_;(W zk`_^|f%&yNR)LHa37lmt-aGS7UF21$0I9j34Cyd`=z&h3l*pF)G+FimC*Yi}a)2B) zI}eHr zoL4??Ko(3+8dmjpJccDzli0`JhAl;v z*t_qR@4A_js271bfhXWjMrA?-1BS*iXwHsFd5Rj>Ix&T9j>*AcILsRMnL#pm^BC61 zK}+aBKeVQpTla%(WA%U)> zH(FZ}bU#g!$yKTzq0b2j%iR!|g4AT7PmSl1c5KC)i;0=xL{tI*#IZq>{VkqGpCUTaZZe0R8#9#ScNSg2&by3dPCXL%wyD^(aqM}!fw&@?9ol=n~ zzT)|p`Jiv&T3g!MAM@$duD+wYUW{7(k;F*PN1nRxJ;%-;tljfOK}3SWsf(X}*cS;0 z?s`%N{}Z>1+3i;-kOmCAY8~1l#x{*^K!N2VzTsvZhwRX3|Dydv&Je{$7sKFj^gP*_ z6@rc8zyfW8AjOyyfQDrf(UEDj!s*X6Qe z-181Y>+h3Qd)Bt0uYdCe63Jo!d^fJKKKSOh$mv$Zs(fYX#2 zlz3dKX%W**@b5pcZbl1nXfs&`mpop;5n!I)F3Z0$$&eAjBz8X8@mQMd%lF^3G~LmWUV3ZSBoFud zJ3gci#kwu5tVbN?lo@|vc;&{oo6eEV2lG+L`6aY~4zW41%Ly*e9DeF>W_dh{E5$kn zfcl}$A&gLm)T9Nxi%{agYjEB6=@ANOpXhCNq^HOU+;6`9u^>UX8hq^Srg|JQ$JOSQ z=6BR4aWM>?4Q@-gh{=&oHD_d?{nG22=SkY@T1^4^`<7`bz?y{fHEOod3$Woorllcc;A z$DUI?k1}c3O)~2HxlcNN9Ar+6?zp5hu_G$-AQBk##y{wU*r4${PPAY3lw8RYVsIQj(H0RuE5 z7xTGtz*EZS`}dmMhs(`rOOD-^WB;>p?~r=?Q#ycu&EXH^mD`^VplCn*ySjh#ru{0< z>Q|(qk<=ABi|*|K|GRFJvl;o?bq68v*v)2m!=h6UZ#jH;OLn@N{7_z&^B+o9r#%UU z{+i$?#`IBtM?!9EC~YLQ#Xlj~V6G|gn;slW!0#{#0sq6tm&NbO%88+i0fSg@S{4q2%zy};FXT>c%>3Bym;0m?j(3BGn<(6iAJ(( z>vT22W2!;gmJel`>^DES0A1DEd_)Q^%E*4lt=I$M;>9^7+OeAw7JH^H?TmwpfI3IJ zmSnUbU;ux*kn_-+{gacnhxGX13B|Vkohy`=2UiXC4n|VlB>@DboURuY@X2GWdP+;i zx>cT6y7~>DUfR;PB(jXvSPcB!8k~1r_Eu)&iVI6zOc5iZj8=ArJIXURAGkKd@me4h zpY(wyFMo8X?}kP&8g*3FqU%KBH9N^VO)_iAIxU$l$gf_f)-q8{c%PkV3>w!m${46K(#-JHSz_EQShbnp2dTKxx zI6hGDEgn67VR}<;eDPXq6E8J)gKt%DCCKmS2aGaP+Tf&Kj$4|*^SqWH7GTOB)Tipk zP=K3d>S%jt7C7HFdr%KGHN85K$(zY;U2Fhd_ofw}n_Fpj4V$yF&DN|4Cg?(wYp>c; zg!`sjzowY5ZP-y8U(P;(XU#t0EiY#k~j`W2K0 zW6zAw>>4<3K|eQy5DxD+fjI<-)mN`&fN0UPjR#| z-4=ScRhKQZs1NtOEf9L)bD_Z7`iAwQX~}hX|1Ws{e}U&ONT)Oo&U}aRCzJ_251u+!nh^f->vZ_~HWYGCrNP>W%M>gn3>NGIZf_dw9C; zu5d-`t&0z+;(=R_$3?Ehi}B;P9#Dd}KW1p#_v}^GqP1tcJ9gviznP&+I`bQ-(7|8& zZZvj!=zCNygl2!k-c3ecPx0-I+!ol_hpeXYNj?}6RQpic#YcG|NNFortL5?wE))%d z9sE%6axrbh{75+ObaXtyiJa|7BI5fmxul;*9FirU%}QKiJbG%EV%+plSnKb9XT5G~ z?K61%5PHUy>y5u!_V_v^bBNWjeidXIFI}Z$k>wC4qjirjgF#pPHTFLFWHsMBgeQQ` zGsQ4?5qidrzWL{CER%@v(FM3IXWFL%Z_$0^v}umaQgH22SmxYx+AmK}9XL=JK6FAc z?ta41R*a5a)!(o9?>rrlZrrrd@2f{oA6JaKNKDo1G`U@1S+wPcI{{RJW^Twxv zeqVYiSmuu0dtIOpTypdnxO5RDP;Vem_ciIF?SY?l~jCaadj9WR+kj!v ztz`TX89(J&oV8TaWh*9QIisjFXF9naUurxhU0KAG%HH0zto1w(GRUk9jTU1cOPb73`{JimVRzYwryJ&6X8V%r?V~--v2>_h=5`g0PLt_U)M2&w(BH}_ii^c%> z@PoXFD0Xg`<)M?r)`Yp}ouhlI^9@fQIr3Zl^2F~SoM^}3e#QjmV%5Q%=WH+>o9^y1 zGX+5{C>mdRKY*c`Qsa8`EuXFz8nMP9Neh~Q-|OvCp80HZJPh31Cx;RO;K_mO^_+pk7gbUQ2Hx_6;>rU8#nPL5+pqtR>NYBWUm_z)e1nf*Mf z&;GIYM$&Jg*{uUMBi%iM&3r|$j0+oO10?IeNzjQfDUi>IC7Xb0xp49P4 zIG5*g>@@9S)iV{SQ~tk`nJyD6)m=1{pO7ur9HV7w# zM4Zf^gUnz%`gl{*>Wq6iU^E*?Ct$W5UzG3BxH}2JnuZ|S z%Xd!ftuMO#+0Ln)#s%QsO`BJ5@(a@{4PPL+Jk~va{o%1C2U8?g7dDWar$#Wck6@&i znIIS$=?`E;prGzSJwU;*%na4}DwVd&-*cB$$}WDqd>jIF9JyL@4feo!=kYF1lDj8G zkf)YEJnRU81FNOzmT`K0a%fp^+|k%TI?4x^76ghdqOt!arzaACk!=f|R}9td%+jq2 zbne+h@%E9Sm^m}mJ2Vs#pei+K5q=I|U~(vp5Gr)`2%;{1*Am5*Sw35*gt{(itEYd1`3Yo}Qo+ z_V*1GGO~~#8O>Khe1;EpTOFou@Bknn?Bg^+Q~lyZXN73*W}HI+^0GC3$>HHdpO3S$ z0^9~LTCEB>r5XrUeaS@Q3E)-2K60kzC>jGqBVy3SWN!?&^uZ!kO2d|Z5=pz{BC^haooH#fOfUE@x|m#``vW~AzUy65QAdNr z%AI#miFnH$LNZ<-kS;nw&%g&hvMHLrZOEbL7@0|tU7%~C%g@^Rs{-A}3t^<-EN^D9 zMt1Jx>!N!2ghoLLhgGzHE{<>$*^}4M(H?q)RrxxDW zu;dX#rGUt|N9M-;EDtOf7{6?Eb3W109l)|O;zt5!+V(sM#Ku>re5SpsT!?q)62TZ+ zZG7YJC6;rwlMXWdRb*|($lAmZw7B?d-9Gkw1&T<)vn-Fx)Q^-ClK+?x@mUJ+TgTMV z;Y*f_>UqZu$?qQ?ajYexcHuFf*jyrlo)w#WJ&(_zG`Q@3cV(6>*Y%4QtdYkN`U#{q zfmFa0QkT2F28dqDHwj^!IIc;pLC)N<@NSeQ@iXwE>oIj)`A+9K7sY&|ba{@elv+Ou zJes`ta6*x5$Cj>alV_V=&q=`WytoBz8qs;AEPEXqUU>HK!|mCji^=S&G|tzWoilI0 zz3~}9?!X(_Z3Nifo=NldHk$_;l{ddbaUyRlri=P$9A!ZU)VzRrD+S8sovuf;oCC?% zB|P4*?OKy9?jJc=9zD)q5uNGou>FcJc6rRF$nXU)ZtdyZabxGTUrbf7i~Ux`P8E0 zi$|md7`Z;0S=vu@nd`C^JkPS-T=u%JO--fw_fUkq@(Mx7%4o0f-$HqD-=YJq4pB$@ z2vl)5JFGKd8#Lb7&L#1D_|*kOpD)%b^E?Ldj_&co{;8>x`}~Q(vH_yI4bQFGH5-OF z|46Pr+TYFggq`}>(F-n{R0ozI|VGt(=u$6wQEi^F@itLLH6N906Oy>dH^HVyiVM;twkPU zHoL6HjM8jHs!ze=M59|uMj!IKc|>#=`e_MWFZOD;sD`3}%F(8m&s9KaLyq8XPJ8~h zg9WX+D7H)myX#G*f)SKt-13y*a{r+ccZfR_L7!ON8MS5F1{`ZzEX(`G3-w%pmsBlN z=aimwU6(|J13Lq*b0m?jL`*PHXs2vG9P?`k8m`U&?9WH-)&BY$}<^p%cE()$e;m0ybLX zvdMI(&{&{dZ2O(Jy) zbCJLavc@1h_Z(GF`9wk~b(fV}ZV-LcN{!5(L5soD_x$s{Cln*}pXVZ7Xy@Cda@94N z;Q?*KGLc_uuw!N^C~^f>3YN?<)>ta42QJa1!Ac1qhENDTO=zu4ytV&SCtdW;Q~kG! zU6lSVKL!7apy|i?J?E)PH3IVTmDI#f|7Sz4R3G{t^B=&(+G$}~i z_Zwn34CjL#9ULLkp>nhSt2(_8AjB!C@1`Xq*N=n3aWc71=XT;m*U%0=#?xcO{-iQ< zl{-(1VbDr4_#m*#{!g?=HLiwn}_d0~M!rJSRN9=Y((+V0Jgus7C`$<8d@B&z$4 z7*Z^g29(WoioRW>ZBKauPi^V$ZnmulGt?V22wdq@PtS(!6vEz~zHa(Gu^ex>06bp` z*s-GP0di)CT`H+jdRD2oz$AEmHNa^q=@tUq5-hF&v@)Bcb}cKK`p9WQAqOwkq>yto z)KMN3JUTjZ9J1r-?CJ=g=?Hh?#TQr+Tvq!#Z)mtk{MYj2X?pN)KgEkW^l6_J&m_Yl z12p3jzD3|GQ9G3N@<%I`R=SHoVV(1|@Pvo9O~G2z)naBcgX#+}unM4?Z|)toJF^0p zNPzz3FJlGao2F-aDuHp8UgFXFv4~hxMeK(@47@Tl7&Cx}uOS|BmWH_xZ`}f%e~A-v z{VYpodH6N)du$+(b-OXMR%Rj{m!C82EXNB!1l+%^q~rlKj&tRT7fJURs++@BE?379 zNhF02ptu-i1wlU$;t(j)X%#?Cr?WgDesNV71U7V2J*Of7KLGtv)@Otx zN&oGK$xLr-dU#~2CjzAr!aMYUD*-+$_ee-IE%`@e4}A~5$6DbwZe0Iqucs|}qBe$Y z({dffO)=wYNv6rikR{BcDYs0bWztvjuCqDNboE!);_!`=-STT^j?~V{8#`Dm82c&G z_-xw4+O$HERv{QcKSf>9f!qDbb4)wozg_MQb@Ajx1b)y(VW!8RI80CQ!0;Ueg`yFp zRIr!%8u63tU{Y(*V@2b9FvfD{#)F3NkR2S08NN)al2W&%# zH9{Fx#}YoB3G4wL4ItYJ6;g6>~yd!_V1nKwb*F1J0VX7 z`LJjznpouXLl`S>_W@!BoI^azJt8hUpEaCpeO<&Cbs_^ifXx=i!_mmJ3D$x>$<2i{TZJaJ{!Uf^m~S9%@wq`Um3S(1v21% zKmD}bu4`$$R4iPU@RdSlVJtI^|JkL{7zaJI`Ss~n?TS$uF9EO^J5y`@EI)$2n> ze|BO=suE2Z2-TsFWMOT1-yl&xK0=hkWmFXJhAVd0S@ge{=00s(EuqG5famQ{L2Z0n z-Jm( zH9)KEg0$ydmixsH#GX8T`ZB-{?`KbwBdlr!UUGCAAwyH~Wv5S{ln{=^MUFpt>hu+e z7i{VwJALZZWkAbJu*lKhaUwQFo`=g$oxYRF$f9wCJGrae;iST$q%I5?VyrWfmU)gfwsjRY3&4UDkS)(YTVJjZ z4nuIaWb|h;4#&w$@7r~VR7Zr9$*^OxWv9A!TZg6i3=SdT=s^Ecq4C4UzW~s+q@HaY zhc6PIw}Ls3tmU@Vi>H%-sZK^G)-K4SWy0++LDTY|?}?z1y7{q~&a_~;MlYBx7cH4O zC4s3IE}BOCPY_G!ZQGLZ!iBEU= z#@vWae%-YSJKCLU{3zLJJ4s2*g)x9U$$M1&1Rh6Qh$IOyS%QgFR98hrFahOug$=hL z$9!G`Y#;CK8=1`ajW%Yzbn^=c*K8C=`nxB_dh?U;pFQKWwf+;CFicI@6xI1MFF<-| zAd~4yrlf<^6*SbTW-`6W)QR%4FO_`TB0ibN+qc{n%TG@E*-|Hb(LXjC0#vKdL1UuM(nE9@mC8)z}Jm2mlW%M1|_3{Xzptbd%NwIVgZ+x$M?&QG4>_w-sjzqSOq zoaZKM#n#9`J?Q&Ct!)ZF`n9l>-|_>eu(tXy{{S&WIesSEmDo2^8s@t)^?Ig@A14bf@(gZO9?=NO zxi=)gAWfcF{k7I6%wBe%UH{<4%S3VU(X;KlH!WEL{)@MSWh1fbP>_RH+|9;cbz*qn zx-mf*d(93b{VV%d#ux3(j_wJS$FB3X7Q=w&yC)QpY3WaY*jc~!^_}$a{5gH||DVO6 zZ$=nCh2HA^S`|Idege^IJBNlDZnjyNo|>BGEO-Zc2ijHSAw>S;MiJV!jsAW;iows( zo^}j7Nc52P@HmPsT14A_3crGHpcmcBT9LMcw|vxesCmQ*x5v68@`}|#6S!i*_Q~kQ zLZrhGI=ez);OZkb=h~(x$(=TmJNa9&eK*)mBW8j?H^9lBs1+O;1~7xGSI7}`b*wM2 zcnO3GNhPi*zF9M)dOi^NwLww&7Z?3pqUzz1Tbdq@DHqJ|_A48TN!XwpgY< zKd*j*YP$$PNhd1dnaccxdKLtg-H}NM?3urFV}VtM!FQnNnV>tPXlQQLN^XX&Eu@l^ zzL{DzNU_KZ#DIkt*+_)dFr37k+BneIk3|e{8gmcW8>QYWj$QhrOVK9~7TGf=1e!O+ zWAs*5YOKpW6j=T3PXaL5&8nRs^1&kh_A23!eZ6VNKd=6=tz^2<<4%_wzACAfqb_Cg zKT#sAOZwk;X;Hc1y==les!?<*hDx3#D#GDVpHZO7bhj5-^-0~-e)?Zk?8m(Mi=qGD~(H`E%0YRpC z=H1x!0e<7_=<8pDI;|8X<9`din@Huft50-hLXO~Ks#Z=?cY4ONiE>H7^{_bvBPkav zDGTTFu8W&~lC?P_iWjO9x>X#{f|yAuD^=Ta&1Zq4te`sB%ULc zxF%5}(fCAzq(|}DOCN*{(+>e6^IieVAx3co+WO6%m+d@tk-&0r{~fp9kN4#JG}_{C zyuz};N__g@O?y{=7-2ocAy;PrUf8-xU~j*f&_7&zH48}0^=V2!4+@d|ExSi9hFOOhB8QL37E!xg11!cX-jV$KicAwpN z-0|HG+~N_=Tu&NM-{jhp2Lu!gUmKSn?Ao#OQ%osxU5Q9Q&X(KJ%u**&;?kz8WA#^^e(%?!uSl#MpL9*V zEdN^a6>$<#eudtky8gi6KT4J9&9g>cfHWS$c-GEW+cA^U$W zliYRD%rA|aU%y88!8}I_FSK0r9*a#jxkpn`-41E0Q_DQ!wV`~NTcj>N+SNC+dFy4h z-3nl(+SM1%4{4;Cz*$FWARAf%t}`ZxjR!>`*2#f_$u;;E!WaT2g~L36kdb!#4z0Un zNkp-tiSa|6&-Tx(EzV>F03LHnDF7IwZvhRU`lRU_c6SvzKlQ23Lf7sarX`=rBAS87 z{DyjP+S*&i%|QH3sl<4#?6t3MWv^|vj=~D&74%7$S7`{EUdJYVw4c+!TY^au_{w0` z3U;J7g;YtK_h2A+aruzsThw#;rV!6*nji}8X9NBJ`q@K>xd>LEGMR(-+_>(zhNu*O z)jUiuxaiQ4xpTBZcQIob9qG-MU-GMZN1ucNB6e;7l-Fx`ymQc<{ANpH1B&XimUk&C zXr;{ST>pR4v+k%bwjVx=KI`(55sUKdX4si=ed-*gRICETgpMyv`*rfa)C;D!8|Rq)_!P-=P#uEqW$z6 zO3eao${A&k)0U|uZr?#L$t~KLB5kHu2H*BZmA!kUr?OGe=NE%qh-dXCigcC_^*ga_ zx`Q|RUwz%+JJOJ;_QY6(G}~>kHH6q$ZzP(@#3HY4=!wMOrDz6mSVAg7i0>;U6X_ly zkSz7_(QGj@jnUDRrMY3Q#7Ld~Dlw99<6fGT8cnyF;_kx4TWwU{ zu4I7yqWjdQ3{xTUcBm_1Yb-w7)0;ZacIDhpc!HPDeZKGsP~GP^qkAF4q+k^)G1gpF zUeMc;sO8pi_2U1^m$C2#B#Z1Ai*I55JuE5}Q?hC_Zs7G0#z=*a3TXuxIP*^kW`BVG zjz*L59C@__?wqr==7l{TF%8v{19?*o6go{+(^VE}ANr8vpgW_6O7^y{7(P|dJA;Pm zQ&{8!$uu+ycmM3K(M^Qg>}HrCQPN$PEwMwree7Y-6lltWmk#$@8Cfm0_xC&sZ-(jU zKMHEFw*Cl>Txzl^f+`}`o?hWIu>Rav($eti&fo#06apAD+l>1;A;4Q$FoH`uRjD&x z@sFF~YH!BGbtL8clFLfO_uvNr?BhBxhcWBtXBOQ7SnOr39Y$dE@?L`z6bQx#0z6_x zJ)Ixrkv~!lX8)uX2@yXt_bc9xL`@YszTxifU*kC0-HVt92@Z;M*Ll_K2~=$9IWE@I z&CQr^*D|)F<1JkxIL~A5U2i{BI9lAV@{tW(R=#@5i4H39RB@?{kbH2lpXaf<>nN3)*2U)y-g%}+xt_VQmD^*a6md&#q;#9vH zMfzwc;5UPEq`#gI`6N!A&Z;V=QE7|-36XFt?k9LCnU*T)cF@VvCoau4W`E{#-)UwI z!@xWm^dr9M%^^6eV;8wC)bbhLl|MCim&~bdPT3_(fgZy?R-OnTK`-}hiC_tUv+U80 zAYg()R??7IpPCxT^chpY3CKhUlNh`059qb6=_O_;Xhk#1!Kg^EGogf%;icq;WB+_&b!*sei_HCoSS@*eMqvgv@C%MPznk|&hJmJx%LDB^mtDZeP1boXcKatBu_XGvsc(o4B2V`^tW;6wKu85n(^ zlfcUm7DWD?88ZlcW_fygEHs82jb_qGBh^w_!5W4=w`CC&EOgBf6^mn7w2u3t8N$gQ*u%eflo%GzN{}l6i-M)GcssLK&XcXvMakCmK9~6 z#-VtfGvZqkoC*7msK6?@*fo4oKqlB&6S%yHS#CJq9S(24@_lx`r^DwDCZdUttd!7LBR+(K=AfU1g%FIU)>8B00&UX)d^?Ob;SR86~iir$dkVEi#Z{-69DS zH6>n*1rh=dOeeU1O>_-}R3ny&@ey`F1cZYohcql%T?r*<`<&{U075(-t*RYGPvibi zb{z3Evm4w99ZlQdDTTI6$KB0uyPS|LY2LCL`y2Z&w0YS!Se`Sl*zWUfzry5r9JFOV zIGPQ>;}9k~f&e=&4f+6KWAl{`>(f~0%FQ~9z!%)KG%o`g-8ValhKNl)K-SjNKj?5& zUw6FqY(LaAk9B&0bqYpG5joaaf2{=wFpGJK=fYQS&{(4 zu?3as<2>G&$+6!<5m3b@fJrb5Ye{f#~9@j)sU{)z{=;l&szKGx{BDGUz6o zX{rw{;693zeN!?L?Vx}`uJ6zLDEjmbSBG&x7Fg@r^#;qW@vuSgu!|3(0NZ$1<4KAT z4}HOt>up(GcbatMn^Z$Fw2YvuMH)`3<_=h`oeNKABQF?lkdiGWL7=R)C` z9j~Q8)Fv*1*%j-9zH{UCEab^hOgDakhA_jdm`{}yy|1B3L3dss@s-vp%_G@2g+y5r z*@e`)a8bMtZ(2ui-CR1CkpI555{|4bpx}=*p7;n|s@Ls+UZBnHy4A^U|9fVPOtT4d z##Iw-r#&ksW7$@7Lhe*NR!isOsSogBDdyXCdFZ0ZZC_lr`pKSdLDzVm{iic`AYd~p zFY&C6kdP|LL1o#Z18W25@1vq5FTs24(;t|axhIB22!)#H{R_ zT)lUN!ATOI8c~=g#1rV-%m_Ilu~}$aDnMc-HBZ8N3d`K{$UTdB&eK9y0)L5zGn4ON z1wjjl0u1bea>tv(i>G4aEV6mczxMEw8J;)fQc6I`X2}H94E#&MIrGlj0PC6}3&5@e zDSRxdW{rDXjDURp+ms^vNtXDH{r}@VG~kK>Trv<6x5lm{Pu6X%do4LLP(^ z<5b;fJElrB_nQi?+;l({1pF`PinE|}`rvw15dFS+YtY>zptooS!ReVFQk>?tEYTca6OaE1-j}n>*sj%r3YnJ)O1m3{PnKJ zH(D6>`9(q5c<{9-*6l%b@Hzn*D#38$_v;$J3Lgaz#ggKa&W7RT^ZD~A!7xRz^+s8= zkj`W*I*Vz^3i#lPH_ojeLI^k_Kt=d~Z9niv**4s7+f8oyB7wI|Wo%P}&ip|^o1!YI z+rsuuZsWD}6~1xk56a!gyQ|giH2j8LT@M-EW9OE@xT`bQOB34Wu=*E>r~dpPQGeek zPTP+sEO}GAw$=rYy>ZMQ<_hZqDz9yl*>KV^dPi|Aiczl@vHCx* zHj|puX564=o%3w9)+6GZT8z~QA`K95n8)|6r0m(^1T3WcCS~|wQ-c9ENR2E^J}V#A zImC-%q_(0g!kq2|;r3`Lr)e@~JS)AxyTLJcuq}-(@>Fk{+@G^JpD3=pkBrIz0tLg* znuCee<+X??^1SizN_R+3V9A*7>X4aHnol-$5>JyQbMh48I5u7EduqrB;DhpH9~n!< z1|4hpLzr3#8fusg%hfx?@`_r-Cjf6exCXHZQ+i?n#5vjS%_>;+9_YZEK131cIUikQ z*5)#L{{w!)D!?KMKeSvFeVm8F-YJ>Pc&h^rLTr!$Tr{K0oj-Gvm&M6jlZhLTG#>SJSHcLfJRa%u!!fv!UjBIFIk7h- zbG*%IqO|(1k+C=?|5+D)tb!7(C<3q71{A=8WhkH|B0d0wA(ociC%1w$G_K1MAGl*h zho2V(QDQ@P?k01I6TSQiA`$8g!=>{&fy~`DIxl!aKo4Y^5js}{w6|B&qH-sbrq2q4 zzYHpJK80~SD+7y!fF)9uJy-9NH69R7SlWAMcva(8y^z2Ncunpa9{?o&g@fLt_KmV! zxm#_7A7eodiV%Y&#>te4SRcx=tX~rM|GCfija`10%_1L*%v6phYKlRZ7m)R+yX(=W zD;LbR9!Dq8rt20}lfUG+j@;zoJh?RGkY!jQcPA8t$a+&$S3Y*3MKK+}`)DyMi5h3~ zoSf*GU``xYFKGf}_@z!yo7Rdd&)?yko=GO@Zq5v>R20*Wre-H(q=7jTo3=(2cW$)=4! zK9)}Yx|Hf=KRa<%|)@s3m6N$hNHQAm-#vDE|lHT1xbjBCX!gr zxUCVMTWSU|17zLSqKy026$Yvv&lXa1`-3dre6J_{*XBuctijX43moD7ENue1j-Hz( zMYh**oMtsPP*&gvimh8BIY~>RZ|9$y2x%DhKH4ovvEP)1JL5x z@t{J^S@y+!f+6gCvDNDHwcB3U!*A(KvurG*D6w9$w?Ya!gIFZPN0%YY+BzqqQc$|1 z@n3gHmXSarr`s$>%b%0w=a$dwfRgi@mp-fgS$2TsyHd)TtCeVtm--w9-A1qiv;T!| za3j9imc~uynQ9tl0?&9niy$|Xwn$420vacZzRm({@6O6fPz?fVyu^u`Ph=l@5dQLk z`&0SlE6`gt9kb!hhxe=vTc#?VxrF?Pg_W@Ke_-W~C*Mt1WPJ8N(F5p9OodtHT2zjk zI_o_&ua(U=@A-SJRcS~6vFUkaU41&8PkZffQDxi#6(qcDYO-79MActRI7!wxxW?Zt z9zLyiZP;`JZ(clFQNr8TFFtQ-Amk4T+!TZt<#aJ%TJWu|9w^I&p88a`s`{MNK!+`< zOSTE%zwShF@w?C4r4R~QmdYQU8E-tXWWec~=rlXFJBaZ1#HLNIE(NGg@S34mCEF;~ ze1D6Zv8MAvs#zvOr?LSd9?1Z2`}@ClOz!0$8!V?c254c-2fq1D)`0Ukk>wEwv*6}( zOMx@j7`#^>!yq>krZD>)3ZMovN~n7`#bwK->SE198QInu%H}+r)|$B`%@Qq2x>cba zNFn?&i02;fS9YD-}~C|}roL##7fk!2PDu>ko3YWOuiA^15Ku>)_t>W=qj92tS4u_mvu zy2>XKhz$Mmf;Jn!@-qg#!a1APwSFrbt7Fo>zm zzKm}}&oDX@A^6V`zlq?6{)7yfG|JcFIA1hsBS^+$GTOEKGaM&ZWuE)Yu7~`C7c2t! zCyf3?;d$kK?`wQe;8>OuV9Wc;(e0nS62sdCDj)aFegHj=Rx!h_KdDwMR+}$`^C-~8 z;@p*X`McA+;@RE%K6NW(N1_+8hJEsKA*8In*c5;93ORe_7oxFiDsF`@J4wziyxKYP zSWNld9iLXftAGMvaq#f64i$OlNbRWa3n`dwsw%AimVMoB_NfPD%hp?vRnx4{@+6_V zgXXR@lX2*WUOCMjzudWW%T^ykzAd|NmM%U#42fN!k1QoXd*^MSDOtPFGB4o{2s0|d>HNBfE6A>ZWw4Ck;-z*q zgQum$@B|7oJ+8Lht}tsJ%$1F}d#_!Uw%L0+f3wz%ej&*W%FrxEBVWit^J~q#cPTkf zJ>8s1hC;mX9YoCkn{OYQ{|q(e|IMeTtzcsC3Vhr3Ckn-C%L767ve5Lmx$@1nc;1c3 zr1_R3h-~n=n2amnauqio02?jnAJZhk>abxlk+_n#V-_zN{Ua8N=i=yfTcN`WCgD$S zPWMSTV|FNxqV!-TW@bQ5_nffxP)L`qex1fZ*r7HJnN0(}NA_-*V$~@wd;*D4&ZT+N zE`p4mgO?xJ7O?hDOr6U8cy?t2?ZOuP=C zCq9rBbbQCN7c4KR-_AEKT9(jEacMmetXco;>4bYo#~^~DA+=(`uQ!k(cixwvSoDA|rodq?5(w;zbe{0K&Y z^Bs;~vc-pSK9AVd9dU7O(%8QuGSe}$LxHRE;)b!w?S9nk*U4ZyCw3gZz;qEiX;YIw zIc-a*9dl~VWlj&{%B`Z~dC#EjY>O^$ezf~b`JVS42?*OxWa7)GR_K8IH=K9D#zK#G zX=R;UD)it>)>Z>@PkzI+02OW7Qh%VdCLo=OOTpnyGFqD{=;o0vv}q+gr(G2k4~2w6 zZI9^0r7b5&7`}O7ui&ho7=EF?OG5tmCK1(rYkauUWj}>x1_Wzg!N&T9^y+#BXf8W? z8hw>&T%D$;3FK;&Wq2D`aNWl~Bw!~+pDT!-@}GG&00<#0pkW?yk_HM3OYfXM^Piw- zvZ)Dzh7recqKxjspoj=j`vcZLzOwNHkQ5{`3o7uLKTvy*mc!u;50g zN_EaNpxh<-rcC)Jh_<0T1svj7kqs&c$p*Qf6XeJZzss3mBZ1{GGUY~Zqel)p&Bz&g z0qtTs$o;+D!+3@k*xq7;j}`bmJ{=tJBgwA`5+pFoJF?6*ep5SG=?)+ma?+!@GN#3 z|Bb|$D4`1Q;M1iujSIlIofS=0=s)v6NED^H8GII8vpxKi|ytDaZ$1RjUm8FEr<=R?kM zj*7eGEOUM;k;QM7wEas1(m*9WIT0V|pV=a+l5%uwsYuTYg_$kFiD+=wtrCivm68!X zxFQtRl-+lGXNOiaDf}6xftE47O}lDdrWPIAMNs=m6?1RK%1uS}rK^D(OvrN5=0!_o z`_Ak3*~xwmEGaDcBWQ>Kw>H3)c8(|GiSAV@29;&)UHQK3qVeqmoLb52j^cR-&)^C8 zCE>3dnscvJTj^ABk@C&<{F^McAW%MP`q*-WUEsFb3BrwB#_-=Srk4@Q=Ay=+{L zYGK{6)yjH}6ID^280hR>x>4w1GjhTgv!WVlz=#uL4$nJ@?m}&NIthnu`^?~Pqedt` zy&d=hj$?~Ac#RX#SWg!Ug*18cfMZt3^^g!G*V)k??D%!*7d;{be1_^)PzUiiTtRsHYP0pEBZlAmF;bk`3*L~S3+RG<9H{BG< zq(h_wvVtK=iEjyuVt7kjku=o+V3CN9n;d5zH_m+BZ9nV-gd}Gx=@AMV$4!Io|B(>?xMVI$)V? z*HpuOlba#)&~pCqf+-{O*;olHKr;H_)I zYk<3+kP~%i!I@78(t@|J1zrPEIH0K#_xPK@5~Rrdm$LnEAuLm~ce4}d7}G%|E9(^% z=U$C3UPG*N&PMcoU6c5?ytVO7UXmoVpT(?Z=xXDC8b5&uM98Aj_P4%eUb`Bc*S<1j z;7yx9$Vw{d1{(nk)fD+h-~QM;IPvwH7Q)}s>-tf)#h{w#WCT8SuEsr@A#xOw#!njm zqw2cG%N*LKNRo2q{hR>X&e?og*Hn>v$764Ql$V04!Q#fpC5mmS@o|jL)#mz3-cM*@ zCEdT!64=6mtd(3lvfF$qE;^$Hd3)QMYl6Os?`C;JjdD`|fyR%jM;%d;MCY!rJ=+@> zIJDAG<=BxW;|UIet3Di)m0)Ul^>m0sAW|4aK+!c*{iCTi9Msx0nyfvJ<{Y4G+u-z! zckTbNC7$mJ#|RvKu5Cz$JE!X^ zpKE)o{_I)*g^x!S@NM06D)fmDI0pC8h2VUY`ltYDckJsf#QDp%tku~$9~I^(K!vym zkmu)V^N4;|=lEl=63n%Etb6^9qN!rr93PBky9S3wqA*Na;OHB{Tq7j*30|)`$YTWZ zK4$oj#N(XUpq<|kP8}*PhGE#U&~tAXyT8BFl^ZINYz&%b(=7jEtQsIVc3ZqxCO4gb zE!W>4FnSs_=YAwO7LV??tmVr!-4D{(WI5-%R!pM z{kU7PH%L92c|EvLf^aE4bv7}4eLw)w$MJSYzPDVRh{HzPZhWrs0=mJr&Wt)dZ^iSy zm1;c>TginDVb+8Z7$I2J$i(2xcYFa`q%xR(Q#fXt)Ei~;UjBog>YPWG&3J?}Z@p(6 zbbaH6#tXL1b8RSST;j|Qo3J4kwvw^!nxUdRPa*kH4M7LnWj136=X_3j7m{R}s< z=|Sz@v_wu)=uO0xK>++zfCty30l!9z!r?RjVDNmvy`dF8^IL}D+;{GeqbnJQi8Eb9 zL#lY3ZeBruOB?OfGvq`7`fQgJy+EL*y?`LGl%4v_6IMxi;Qcy){^17$9T#kQUl_q& zbnT-Gz-4~KK@zkh6CWgA82O=V;Q%y#$N~E8`@X6{@cs8IxlZN24+l{9roXXAA*noc z4G$fN^x+>|GjQe}NC|Ixzy}eb@dNsbm3dI7nC^2x?8VOnA;l!Upzc|rM4wULch?8E zmL(u7T?O+43Y@tSl(WG$b<0~$E;-0Io_O0$f^g#k{G|zB8Do~bJ~ZG09+Cz_I2;@HQtRVLd zY+Xqqefi)0T`1=X?5NEKjyn-YL-D#WLgAag&6~PqIgAa0M^SKGvk-Pbcy}(lro+7*| zRiVyxbe+o~oKP5E205n^PVvw~a+mVZLw0zsmY)1FL4N6FyJzxEwH;MQacM3r1TSfZ z7w++kZL6jk5u)5@hgYxHtL>+4{Fw*d zQ*)jLW%kFYh&0BeURCgNWd(jN519&hC-17W)f$9&KldBVviR4$Um-_=fPTxKJlJ15 zaLb}aw;&mF_*bH;h`(fc9{q;bRPHzE{RjH12XC2~xrJ7WGw)$uf%S}!Qs8`ZHn(yx z-LzTr1HVg^o0ch^dx!y)BmStWt3y?)w2a8ARa?<2YhEIC-iMlME+z1$jqq}gxA|OQ zU=J%uGCT=g!60ZNi|z|8D)5LEHCT<`ElUE10sJveQMixMOdN$*xZQxa_4XhvNN}?~ z(Zd7jgy4Pr`5bAbyDByN9sFe!V+0~2hY0qR1FTp`~SMQ7PbqRv&G-P1rY52=#Jlg z^BVx)91CIiVj+6<&=5Gtwqf5@9RpuN5FY#Hx4sGL;eJ|oJNwVfEBLu)-7WLlYFqu> zSI$;#d#7iR_d8QJ}IbN5r$U8G7_smYoe zgu#hE7HftRiuRf2Oz!&Y z43_*Fz6xKPOC4ccC`1GOqC2L~ zr)`uJJu~W%;6(%Wns6{v!@jnPdF!-R)uLdz6`9$NTjniMfJ_5T$Ueon= zy-N?OoTx-Uq2+IhFomL5lp}`UK6=9r&*p2DzItd(M$$-wej1=%K!|b90|n< zM>3cgp%zLk3!Nmv7VDYxcnk|)iDDInWB~2wQ4Hn=(=lBX@7S9&& zC*c>aw!;KVRZl>+Qob0M>vGj}hFmus$24l^p|5`%-pv{a8v9wA@r4@~aM*_faP5y9 z??92~mo0mC2mCK!(Im4vbD9%HjBb;7LD9#6?QZ;^OD@3>y2qW}cfHxswc^_2HC}rp?p|{BU2lHVlDoZV(Dir% z{U!B_aXDg@TJ53`Z%p1RED|Ah{(h?Mx^j zjrMOIiVP%p)n_RkOGXZNmzPaQI=f2r&rF(vAtEFif;lZ?wYB*Z zy}4j~a=XNpIcZr*M2`%iz+x$5=aXYMrsNH)L&@&x)Nr3=^$w?}dXk~l8|2jS;?AXh zp=ZOIO0K`p=j-pA%%8YmWP@Lr8S3chtxMo~9WEd<{VS%MX3;~7IW^-FZHg(dd1r_H9S1N!19d$?DPDk%oDMc&wopuT{k?mJ!AP zS3fPY{CltDl;lN^aQwT_H?cFa;@)G1Y_Pm>?A{e4mNl~Co)bu71yL3SRzmOi2U9x9 z`B;oNK%co==D2%4Er751C)aS??F=wULTS4RrO{%aR>;p?vgTVEifw+Fc^y);c$XAg zu{D_4h?Gk9LGm-@2+6Fo%2KveCVMb;;g6 zOF4V*DD)y6648l`Q|^s@eFI!eq)wRW_GqvPsvi;P0?plF z1>Lf9KWgTJUN_!1zD7l(lXpsbltl>3fe?pITUZ&_F(A;kstCRmnW{?8j`iC&b0D+m zpI8wq?A?vu4*O7sf8bvI!h=3C{>W?!ZbkpfbW#sa&>JpLqHbR=1)^DdmhqHqs>}m9 z@gs{Evy&)|R2BhTel4f+2qDwY(R2JS20aB(U|{$#z~Lk4?~q?+8^4Fz7$QGu+}OAQ z3!mr?0Zz~!n}bgj47u~wPe zu0+eGr{!kKJH0Zm$U>iYJnwz>ZUX6CAtSxO2g@1S-M!gHPN0)R$ghb!nHPstjWq(i z!XZ&g`=)_KfuO`=B#4UF+B)F$b~g?MOp)~Bz6c%JDfiM{SP*=QDGXy?erK`FKuz3A}_#ogvy+z*B_fkt46irI{9IbV!rT#p_&rjw|B2ojDUoG9#Evl5NcFq zO*f@~`}e@hwW}tO>GFC3CehERJ=|GfTZODv>p?LFF!|M;aXF|4MRmvCy*pINP=hc0 zZqLWJuZmzTpeO$3<-ouHO~NoV3BKm#n(*I5JoU+U{^8QMqFHK1`0{_a+MImA2P0m7 z<+)4Vz_U21cb-7>GXhbuovZlGR(@?R8F;=3Jc4pnhoUo8?K>30odxfA%@OYO9cVg)@**G zHC0VYT3A&D=dP=oA~W@onJ#V9+`>|$ly~(FS1WCEgYD?AUt4a}jD4ez{1JsqC)}9) z!tx_GVo%GK4B;GQOAMl`DAKvDV=j92I=<1_oMSa#g{KAduwbdtLx04C&$ZUzLx2BT zw7!~n=2OHU#M0U6qVd>5j4z-l*ZypBs_D6U=aN$_y>WJxO7ru}o;d)BLE?{MUuSLr zJiq=K{>Tbw?tSFdX!3w(1k`dDEAdk*`3l$M-*;@OY zmHh#UMTj*7!C(<>H|9l7^Gx|{F?BEJ3^iB6i>Jf<6qWhG^_L^i(TsB6<%m*OGq8T< zp>}-$`sBPI`-ac5VrnkrElO&9F2er%8`{Y#^I*&|rG@c!7k%uUnm0e*9-I&3yx@C2 zXnwo#FOzXW2w5URfqkv;yFL%d``VHCct8WZayJ3W6pX7@wIcDq|H8sbhbLwW=p|x} z1sCMY7U%5s&!{>=2#{c?Iu;rjOMeqoMGoVgSkpC$(|-RUEHVEt5eTIqA zp0SGwXU3Q-n2%XLR$tafc9A`s{en}M(~a|*tNHUF_cf2n%kxI?w(?E<-uzF3hJt58 zwQ!Jdg-9zJEjlE6D29vaVvo4Gc(8bp_@;y<$xHf5c1X$6veFgOYcjWNxa_68uKYo% z?-dY*P0>KHOG#A@Rz+1)Rr^#Q)txj6%{FaN$Jd?EWA&BvbM=o6l??lhJYz@WDU-s~ z%XHRkH8(TQF<-RcENv~9t#0dV8{Ia~uD3V0Uv-ciQyfQ~JZF372c?0096100961WfI6YUk^O>01pG`00000000000000000000{o?-g2o3|c z0000800IC200000c-nQ7HIx-W5Jg{if85<+-Q9g=aCg`Bjc^EYO*h6pKe#&?PP7@W z;U?(kRc{Z@?z!ic%+yp>_s1vXfq!ZWKpSc)7U)GtGFRYh4?Z<88^F^^=D>7I!7utqiUMfC^-)^0$G$wRX7Xs6z$gb})Vl$&t~_Z70>t_jbCJxlPmfNgsXH_P$wqrVgTR zB+%K2;d{eW)V`mjdmu(FLke@l=_m5p6tygRUN7S_w7Hu^i8F8CV?0Tt+WkhcDbgFMv`>hy=U^CX#aNpvJw%!@ zi++ss<>uJt&fo)CLmKU_8&tm3Cp%6kS zkex*~0<2$V@4zCgAW4cd2<>|CoaZAR`1(xmMW)nMEzxiK1;*1(lXHl)&C;D3IQ2ty z1fjOm@JaBGoZzwEaIu|cQ{~*0UWW>*)Xn1D#hkZ>@a_pV?l~rq@ZL`~QlIEYD01i3 zY|rOcO51kDJoUd+3$9P={|l+-?2)v`3jeCdxdIaUfw^aU>*9Wg1I-)6iruaUNyiqR z#SPLc)NpU+8^-YYSn6m|iMyJi#wdP=loF3@62C(?l8Wk%Q>l~Tb)eGr7z^w@;tc#h z_#N_x&7c4Pc-muNWME+4{_hJz6o=p6NB?JY@Bu|o0HYWHvYrP8c-muNVtm20hk=!W zfvF2fGcfc(XvPN&hKx)MK)}HO0Sycc?*$m%yk&rbfHc<>1_uU(2MWvz|1B7zn71?X zC@?Ve$1wwSA7WYuRHDGZ2mm{W5h4Hpc-m~w1H6?n6aetu?Pc3_b}qAR+x0`XZQHhO z+qP|lN^&ui)`va^O3(JbInyd$##pbd_Y#Ce4Hre${ zOtHJ{y(_(|BG1YX@}v9;zb?j!Nn)y)A!doWVu4r;VId;Kh6IoVB={f$T$Isd3>izt zmx*O&Iaw}{OXPOBTOO0=k)gma7#<^GEKG<=5zviZOo_QL9~Q*ISPV;JIjoKKu_<=N zzBmv^;AEVSi|_y*!e{ux9m(zXuJvyAZujo>KJ(S}we&ymfAl*k@}^j&!5HfSR{NJ@ z)i=k*Z;p4?QNcP6@WcEPzb3~1;g~NL0fz_>3*tj!fKVKxtYfjek4gGDXK;CNS#VZxrt{Fb=iG5_IX4~cD2Ma_-A{MZopndu zUbof_)E+fd4N-$tf7M4dQPEY1;`D-^(H*);n`k3#p!KwtmeVp?LW^l3Eui@{p2pB9 z8cD-xFb$-R)Sg;XU8+u1sWMfhl2n}1P-+TKU&em-Ag>Y!;%&{YGYyRQzw_p(J^Qp-mzHQ8Lb-b9iXLjJ7uFx zHi=@(KMXoGgFPKAD9qbf)jsFLn$}$h6WW0P+rq-sUpv#ri1u0@mOS6Wd_CCtn@`SW z>;rCXk!p>+agJAWK>$hSO%+X(s=EW6W&137(y2ZW8*v0UxaEhW0k#eD>IJV}gk~57 zfk|xPux_E)@lm{CXN&gc8@$J>dvBs2u(g?x(GEC7_UQgt>!{Xtbyh?3;0L zKmk`fO0Wvz0Qdx43j=luH_~bcRcBySXwRLojs|B)ogSp&>=eV6q$lVhc(IJ2-6dO? z+zukZk!0(?@vS zI0jBTK4VD=>#fbqP9gM3H31=MQvFTRo^IA9Elh+cOX5qTSm_vsk#?)9L?UwDo{y8# z1rJB1izAXo&V}&%&6|dp5M|-IE;CRen-L|IejER5n-7St8ey#34&G3S!SW{Y&GME? z@+@zwq`=ZtNs;9pm6TZCRY@Pqdn)N?d0!<1ENvxw{9`F3rX@7c_y^w>2h|B_+;dou(rX{))VB(cFWJFD=KjgRO)K2`utxTKphnv?us zztY2G^iO&%PDV=}PaHm;Ns30*^Jjw;<KY7k)4Mn>Gr$< zLw=^LZTp`KPz3XHVXAmLa9s&Fs3DeVgxn0Vq|aX05Qv`azfwVmZHYx4waHx2kxA>2 zpLAzqA_?R@B{!+Zk}_-(P7-OB5H3n0Ig2DqND_z==xRLc00)^8QglX%B0dPFyD#xm-$^7EZ&+nn<576^Roih%epa;*;gBNX^lI6WJ^85{Y{ti9=&^hDa6MFCkJ@}3amG)(u zE2%2{`}4O$f130$m};%bm8ElktA{hcFYDSLV@v@@c-ms{-obDJP@^;)I1q->H`W@L z#c7!|5&Z?kIL{Q24q~I0F?$O}AD^0igQAWDoeD&VP=^MDs`U>V#TYs7;yp{tDgNPK z=>$vFNC1m#NVzhl8limcm<3<}VtiBUMqe+l`!Uyu@gH+vL@Iy`-i^Ol3dJ!fw!Bu` zxe=H1DL%6FUD2n`3!Oa}G>FA%JP5e}p~5SWc-mvY4J06tX$1oVlPD1H`2P(=GxP(Y z34;mKI-uA##yt!S|Lwr?+y8%M+Rk|N|F8cRAU*(@n-E$6c-mrMVBlmZVqj)qWZ?v| z7XdMZ&B!1E3>*yGAZ#FM$FL8|W?_(H_yc9LGB`0xLD_6b;=D{Lj4@C)AArAF<|#V79$#y1JKT(Izx`HfZRRv8GllNcKeM!GGf`@V5@q@X-jm~l z_9SuDPreu>Gy`)K=$YFjuuD$3Ae__snZUAfl*psb3DOtNKM1Ufld0}l!CpZKIt#byR=^})DQoAKtZ0mt1|)#qME;j`l=!s z2HIPct@G^|n)O37#fNA1_Vd%bYo9-iTv2r?Ltp+??PH?27yRSH8@|Hz#2RL4Ugca( z{!B#7iq93;@x9bfhFbH4iP*G?^hOYHyP}iPw*Och2 zfpFgG!RIMhz08{SP1@#ObzZyXpuXSpEkv)K?0Rk>!_arAYt3raZ&x~!apE-F#(jRt zORuA93&&JFa(=Zoec`Cn>lZzau_^u9OEf1_U#yl*dsZeQHX6V-_H&gj9N{wu z`N1J}agmo?;tdaZWFT+(W{|;#@PUtf;vHWMHOz1$j5Nwe-i``Mi2u4 z0KhIozHQsK(T?0iOk6@zN?Jx%PF_J#Nm)fzO^18;Hf4Sq%zm6mv-tV{`}Q<~F-%};%_5k> z%$gUlv=$C@VX?KNAH-#L>uX}h-8G!%_;lB0nor4PruIE$xH@}BQZcci2d*^rnlrJa zZq$#8^ztZK%g@CH3F^)+m1$1;#Psw6&-Gylqb*aKBv-c`(F%(f4(jh@3>&nJ{LI9Uo}I2l!khZN@)$9 z4gEFzjtS};j2dMyx5gRFr-_nO=AcOLugT>?dMoKh&;xo%(6i4cl{Iyt2Ync<8!j6` zqc94kXm3lM5t@(U5#Qk@}W5Mlgvgo+^SxJLvxhQA7~^s)Dt(b|-x& zfho*jZuLCqPlox`6qeQk^{Sq!k+n2sQRG7JRU^y+NeL@hPsUXOQ)?Z<2*xmhDa>Fo bnfbLfgSm6Day;iB;wah|00962|Nj6Fv8wea literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Bold.woff2 b/katex/fonts/KaTeX_Main-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ab2ad21da6fbe6c171bb869240954d0ead8f68fd GIT binary patch literal 25324 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 PaXk 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-BoldItalic.woff b/katex/fonts/KaTeX_Main-BoldItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..67807b0bd4f867853271f5917fb3adf377f93f53 GIT binary patch literal 19412 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Italic.ttf b/katex/fonts/KaTeX_Main-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0e9b0f354ad460202bba554359f5adcc8da666b7 GIT binary patch literal 33580 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Italic.woff b/katex/fonts/KaTeX_Main-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..6f43b594b6c1d863a0e3f93b001f8dd503316464 GIT binary patch literal 19676 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Italic.woff2 b/katex/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b50920e138807f385d0b0359f4f0f09891f18406 GIT binary patch literal 16988 zcmV(>K-j-`Pew8T0RR91076^<4gdfE0E4su073x(0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Regular.ttf b/katex/fonts/KaTeX_Main-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dd45e1ed2e18b32c516d9b481ebed3cb8bffa711 GIT binary patch literal 53580 zcmd442bd&Rc`n@NRIci-?&_|t>YUT0p3ptrljF|J##wFDMrl{lYJ<`$AR#0nAqkX0 zB*_AcWPEL|Ot6Fyw%{5tV8CQ!urb%h27>@|eYu1m8*T6Zo>M&=KoUHD{`)-t&g@Kg zRdv<(edo*JjF0$yKGS!HPw*Yux?^x;=`S{p`+QG+5JwMPdez~Rm4EvFoX_`^?ehsc zFTL@G9K9;u_W3?l!})!epFDciCG}Ic`g|WchMV}09=`r0j)#1{udKsw_2`v1U;ang zqqx`bO~kGc*cp6`!wRHLPmGDvmsI z*~kcup8C-U`BPl8>Lb3tqM!E#eQBTiv=h=P9qEfSTa6JXYEwln7OE8*aqz}_J=$!o z7UQvUjZiC0No_WsO9mo67A?{@M+#7xRgd8%o*f;Adap z7`erk{R?~jMllgDR&oQ=t)6u71r7nWvC}hx2H1A^4g$7)yG9gFg?0n5F_>%`Rl2Vk zS@6aqNKsMjF33eiW)uPv;nDW_Z*UBE0+PjwgdglPjrN%N)7~CY^oQv-@=?5!bvbYW zc`~TW7hP;eZ@5m@gX{wD@HrQlp^w#qxue_+?)KiMBp9)GK>h2_pSM9N-iiqZLd zfhqyNBy8S71ljPe(3JowQ+`SJr4k5AxI&T%er^Wa``V{JLq0-j#9Xz|4Rs5=j&G^x88+PKDM3+Xqqt5z`Sj zn{mbT9x>RH=o#8Lp45f9d{HGU5Gmc8nWti;Sa0+SGNqH6K>DW}&pJ7wIwBGhC6p3- zXK&xk0oPFLbrP8D8@Hs0lXaaeq3aCtpMnui9U5IZ5!DCl;feZOSc

    viU|OFj=e4 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

    Yqh7OdB% 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�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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Regular.woff2 b/katex/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..eb24a7ba282b03d830fa6c63ee897d92a5188736 GIT binary patch literal 26272 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�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 bkH82T%!~T~dOL3iZSfI!+IWoKhyte*`46Vs literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-BoldItalic.ttf b/katex/fonts/KaTeX_Math-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..728ce7a1e2cb689df32c3a6c26e1bd072dcf2acb GIT binary patch literal 31196 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 T)YS6}E-Q5R&CfXgJ?`xQe`ny2 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-BoldItalic.woff b/katex/fonts/KaTeX_Math-BoldItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..0ae390d74c9f665cf8b1e5ea5483395da7513444 GIT binary patch literal 18668 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�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 J00IC101u*7EU^Fp literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-BoldItalic.woff2 b/katex/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..29657023adc09956249f6295746c8ce4469b50d3 GIT binary patch literal 16400 zcmV+rK<~eIPew8T0RR9106-7`4gdfE0D43K06(+<0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-Italic.ttf b/katex/fonts/KaTeX_Math-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..70d559b4e937ca1b805eb39f544cbebe3c58ca6f GIT binary patch literal 31308 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 G#ECDig^RoZ literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-Italic.woff b/katex/fonts/KaTeX_Math-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..eb5159d4c1ca83fb92b3190223698427df0e010c GIT binary patch literal 18748 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Bold.woff b/katex/fonts/KaTeX_SansSerif-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..8d47c02d9408d34b2a9d566c0fe0d42bf82fb735 GIT binary patch literal 14408 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Bold.woff2 b/katex/fonts/KaTeX_SansSerif-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..cfaa3bda59246b49e94298478d6de3b3208066c8 GIT binary patch literal 12216 zcmV;pFGtXKPew8T0RR91057-z4gdfE0AMHp054wv0RR9100000000000000000000 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 G>;nKVNojrn literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Italic.ttf b/katex/fonts/KaTeX_SansSerif-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d5850df98ec19de2eee9ff922ef59586efe471d0 GIT binary patch literal 22364 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Italic.woff b/katex/fonts/KaTeX_SansSerif-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..7e02df963621a5e26d53d510f0b4992eebde1c60 GIT binary patch literal 14112 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 ZM6wWJ659DkbG}7@mjJD1@jO-Eqc8pH1xbNXy>V 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Regular.woff b/katex/fonts/KaTeX_SansSerif-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..31b84829b42edae20d0148eeec0d922dad2108c4 GIT binary patch literal 12316 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 DqysK0 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Regular.woff2 b/katex/fonts/KaTeX_SansSerif-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a90eea85f6f7bded69ff5d40114447a6d8b48cfe GIT binary patch literal 10344 zcmV-uD3{lFPew8T0RR9104Qhx4gdfE08C&204NXu0RR9100000000000000000000 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 GG{*pT{>~Tx literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Script-Regular.ttf b/katex/fonts/KaTeX_Script-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fd679bf374af72f2a183b97b40c9c7e9e51fbe5e GIT binary patch literal 16648 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Script-Regular.woff b/katex/fonts/KaTeX_Script-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..0e7da821eee0dd05a0a6f0b16c2c1345dc573a84 GIT binary patch literal 10588 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size1-Regular.ttf b/katex/fonts/KaTeX_Size1-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..871fd7d19d8658f64d8696ed9cdfc82c821ed76d GIT binary patch literal 12228 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size1-Regular.woff2 b/katex/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c5a8462fbfe2c39a7c1857b9e296e62500a8a8a5 GIT binary patch literal 5468 zcmV-i6{G5RPew8T0RR9102N#S4gdfE059|a02KrP0RR9100000000000000000000 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 a^|k5z`r34UeQg~YeP3G~_EX$#+W!Ytlnjvo literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size2-Regular.woff b/katex/fonts/KaTeX_Size2-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..d241d9be2d317f7b39b401d96c8b18836acea0fa GIT binary patch literal 6188 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size2-Regular.woff2 b/katex/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e1bccfe2403a4ed770c1697ae7c15b9e1cd9bc4e GIT binary patch literal 5208 zcmV-e6sPNVPew8T0RR9102EjN4gdfE04)>%02BcL0RR9100000000000000000000 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 CPy?p` literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size3-Regular.woff b/katex/fonts/KaTeX_Size3-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..e6e9b658dcf1cd031ac82b6b8f312444c55d4fc0 GIT binary patch literal 4420 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size4-Regular.ttf b/katex/fonts/KaTeX_Size4-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..74f08921f00f71f413ca42c9d1c90202e672ef38 GIT binary patch literal 10364 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size4-Regular.woff b/katex/fonts/KaTeX_Size4-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..e1ec5457664f438ce5a1cc6dd8409bf60ca7804b GIT binary patch literal 5980 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Typewriter-Regular.ttf b/katex/fonts/KaTeX_Typewriter-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c83252c5714c71a3e0ec62195884167339a0129b GIT binary patch literal 27556 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 MzaRX}iWL5T03x1QQ2+n{ literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Typewriter-Regular.woff b/katex/fonts/KaTeX_Typewriter-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..2432419f28936aff53ddfa2a732d027e6a6648fd GIT binary patch literal 16028 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 G0ssIW.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} diff --git a/search-index.json b/search-index.json new file mode 100644 index 0000000000..943de12399 --- /dev/null +++ b/search-index.json @@ -0,0 +1 @@ +[{"documents":[{"i":1,"t":"EMISSION","u":"/ecalc/docs/about/references/keywords/EMISSION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":9,"t":"EMISSION_NAME","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","b":["Docs","Reference Documentation","YAML keywords"]},{"i":17,"t":"EMISSION_RATE","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":25,"t":"EMISSIONS","u":"/ecalc/docs/about/references/keywords/EMISSIONS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":33,"t":"EMITTER_MODEL","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":41,"t":"END","u":"/ecalc/docs/about/references/keywords/END","b":["Docs","Reference Documentation","YAML keywords"]},{"i":49,"t":"API Reference","u":"/ecalc/docs/about/getting_started/","b":["Docs","Getting started"]},{"i":56,"t":"Introduction to eCalc™","u":"/ecalc/docs/about/","b":["Docs"]},{"i":64,"t":"eCalc CLI","u":"/ecalc/docs/about/getting_started/cli/","b":["Docs","Getting started","CLI"]},{"i":68,"t":"FAQ / Troubleshooting","u":"/ecalc/docs/about/getting_started/cli/faq","b":["Docs","Getting started","CLI"]},{"i":82,"t":"Python Library","u":"/ecalc/docs/about/getting_started/library/","b":["Docs","Getting started"]},{"i":84,"t":"YAML","u":"/ecalc/docs/about/getting_started/yaml/","b":["Docs","Getting started"]},{"i":86,"t":"Migrating eCalc versions","u":"/ecalc/docs/about/migration_guides/","b":["Docs","Migrating eCalc versions"]},{"i":87,"t":"v7 to v8","u":"/ecalc/docs/about/migration_guides/v7_to_v8","b":["Docs","Migrating eCalc versions"]},{"i":96,"t":"v8 to v8.1","u":"/ecalc/docs/about/migration_guides/v8_to_v81","b":["Docs","Migrating eCalc versions"]},{"i":109,"t":"v8.1 to v8.2","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","b":["Docs","Migrating eCalc versions"]},{"i":128,"t":"v8.2 to v8.3","u":"/ecalc/docs/about/migration_guides/v8-2_to_v8-3","b":["Docs","Migrating eCalc versions"]},{"i":130,"t":"v8.3 to v8.4","u":"/ecalc/docs/about/migration_guides/v8-3_to_v8-4","b":["Docs","Migrating eCalc versions"]},{"i":132,"t":"v8.5 to v8.6","u":"/ecalc/docs/about/migration_guides/v8-5_to_v8-6","b":["Docs","Migrating eCalc versions"]},{"i":135,"t":"v8.6 to v8.7","u":"/ecalc/docs/about/migration_guides/v8-6_to_v8-7","b":["Docs","Migrating eCalc versions"]},{"i":137,"t":"v8.7 to v8.8","u":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","b":["Docs","Migrating eCalc versions"]},{"i":142,"t":"Output data","u":"/ecalc/docs/about/miscellaneous/","b":["Docs"]},{"i":148,"t":"Modelling","u":"/ecalc/docs/about/modelling/","b":["Docs","Modelling guide"]},{"i":150,"t":"EXTRAPOLATION","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":160,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":166,"t":"FACTOR","u":"/ecalc/docs/about/references/keywords/FACTOR","b":["Docs","Reference Documentation","YAML keywords"]},{"i":181,"t":"FILE","u":"/ecalc/docs/about/references/keywords/FILE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":189,"t":"FLUID_MODEL","u":"/ecalc/docs/about/references/keywords/FLUID_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":196,"t":"FUEL","u":"/ecalc/docs/about/references/keywords/FUEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":204,"t":"FLUID_DENSITY","u":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","b":["Docs","Reference Documentation","YAML keywords"]},{"i":212,"t":"FUEL_TYPES","u":"/ecalc/docs/about/references/keywords/FUEL_TYPES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":216,"t":"FUELCONSUMERS","u":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":224,"t":"FUELRATE","u":"/ecalc/docs/about/references/keywords/FUELRATE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":232,"t":"HCEXPORT","u":"/ecalc/docs/about/references/keywords/HCEXPORT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":245,"t":"HEAD_MARGIN","u":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","b":["Docs","Reference Documentation","YAML keywords"]},{"i":253,"t":"GENERATORSETS","u":"/ecalc/docs/about/references/keywords/GENERATORSETS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":257,"t":"HEAD","u":"/ecalc/docs/about/references/keywords/HEAD","b":["Docs","Reference Documentation","YAML keywords"]},{"i":268,"t":"INLET_TEMPERATURE","u":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":276,"t":"INSTALLATIONS","u":"/ecalc/docs/about/references/keywords/INSTALLATIONS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":280,"t":"INTERPOLATION_TYPE","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":290,"t":"INTERSTAGE_CONTROL_PRESSURE","u":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":298,"t":"INFLUENCE_TIME_VECTOR","u":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","b":["Docs","Reference Documentation","YAML keywords"]},{"i":306,"t":"LOAD","u":"/ecalc/docs/about/references/keywords/LOAD","b":["Docs","Reference Documentation","YAML keywords"]},{"i":314,"t":"!include","u":"/ecalc/docs/about/references/keywords/include","b":["Docs","Reference Documentation","YAML keywords"]},{"i":325,"t":"UPSTREAM_PRESSURE_CONTROL","u":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":333,"t":"VARIABLES","u":"/ecalc/docs/about/references/keywords/VARIABLES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":337,"t":"eCalc","u":"/ecalc/docs/changelog/latest","b":["Changelog"]},{"i":341,"t":"VENTING_EMITTERS","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":355,"t":"---","u":"/ecalc/docs/changelog/separator","b":["Changelog"]},{"i":356,"t":"eCalc v7.0","u":"/ecalc/docs/changelog/v7-0-release","b":["Changelog"]},{"i":363,"t":"Changelog","u":"/ecalc/docs/changelog/","b":["Changelog"]},{"i":474,"t":"eCalc v7.1","u":"/ecalc/docs/changelog/v7-1-release","b":["Changelog"]},{"i":479,"t":"eCalc v7.2","u":"/ecalc/docs/changelog/v7-2-release","b":["Changelog"]},{"i":484,"t":"eCalc v7.3","u":"/ecalc/docs/changelog/v7-3-release","b":["Changelog"]},{"i":489,"t":"eCalc v7.5","u":"/ecalc/docs/changelog/v7-5-release","b":["Changelog"]},{"i":496,"t":"eCalc v7.4","u":"/ecalc/docs/changelog/v7-4-release","b":["Changelog"]},{"i":501,"t":"eCalc v7.6","u":"/ecalc/docs/changelog/v7-6-release","b":["Changelog"]},{"i":504,"t":"eCalc v8.0","u":"/ecalc/docs/changelog/v8.0-release","b":["Changelog"]},{"i":516,"t":"eCalc v8.1","u":"/ecalc/docs/changelog/v8.1-release","b":["Changelog"]},{"i":526,"t":"eCalc v8.2","u":"/ecalc/docs/changelog/v8.2-release","b":["Changelog"]},{"i":532,"t":"eCalc v8.3","u":"/ecalc/docs/changelog/v8.3-release","b":["Changelog"]},{"i":542,"t":"Advanced model example","u":"/ecalc/docs/about/modelling/examples/advanced","b":["Docs","Modelling guide","Examples"]},{"i":568,"t":"Examples","u":"/ecalc/docs/about/modelling/examples/","b":["Docs","Modelling guide","Examples"]},{"i":570,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":576,"t":"ENERGYFUNCTION","u":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":584,"t":"EXPRESSION","u":"/ecalc/docs/about/references/keywords/EXPRESSION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":592,"t":"eCalc","u":"/ecalc/docs/changelog/v8.4-release","b":["Changelog"]},{"i":598,"t":"eCalc","u":"/ecalc/docs/changelog/v8.5-release","b":["Changelog"]},{"i":605,"t":"eCalc","u":"/ecalc/docs/changelog/v8.6-release","b":["Changelog"]},{"i":612,"t":"eCalc","u":"/ecalc/docs/changelog/v8.7-release","b":["Changelog"]},{"i":619,"t":"eCalc","u":"/ecalc/docs/changelog/v8.8-release","b":["Changelog"]},{"i":624,"t":"Get started","u":"/ecalc/docs/contribute/documentation-guide/documentation","b":["Contribute","Documentation"]},{"i":634,"t":"Markdown","u":"/ecalc/docs/contribute/documentation-guide/markdown","b":["Contribute","Documentation"]},{"i":640,"t":"Get started","u":"/ecalc/docs/contribute/get-started","b":["Contribute"]},{"i":662,"t":"Conventional Commits","u":"/ecalc/docs/contribute/guides/conventional-commits","b":["Contribute","Guides"]},{"i":664,"t":"Git","u":"/ecalc/docs/contribute/guides/git","b":["Contribute","Guides"]},{"i":695,"t":"Drogon model example","u":"/ecalc/docs/about/modelling/examples/drogon","b":["Docs","Modelling guide","Examples"]},{"i":718,"t":"Simple model example","u":"/ecalc/docs/about/modelling/examples/simple","b":["Docs","Modelling guide","Examples"]},{"i":742,"t":"Set up an eCalc Model","u":"/ecalc/docs/about/modelling/setup/","b":["Docs","Modelling guide","Setup an eCalc™ Model"]},{"i":744,"t":"Facility inputs","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs"]},{"i":750,"t":"Generator modelling","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs"]},{"i":760,"t":"Pump modelling","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs","Pump modelling"]},{"i":763,"t":"Pump chart","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs","Pump modelling"]},{"i":780,"t":"Sampled compressor model","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs"]},{"i":793,"t":"Tabular models","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs"]},{"i":799,"t":"File format","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","b":["Docs","Modelling guide","Setup an eCalc™ Model","File format and syntax"]},{"i":808,"t":"Expressions","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","b":["Docs","Modelling guide","Setup an eCalc™ Model","File format and syntax"]},{"i":817,"t":"Fuel types","u":"/ecalc/docs/about/modelling/setup/fuel_types","b":["Docs","Modelling guide","Setup an eCalc™ Model"]},{"i":823,"t":"Installations","u":"/ecalc/docs/about/modelling/setup/installations/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":838,"t":"Compressor models in calculations","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":840,"t":"COMPRESSOR Energy Usage Model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":846,"t":"COMPRESSOR_SYSTEM energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":852,"t":"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":856,"t":"DIRECT ENERGY USAGE MODEL","u":"/ecalc/docs/about/modelling/setup/installations/direct_consumers","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":858,"t":"Generator sets in calculations","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":877,"t":"Pump models in calculations","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":895,"t":"Tabular models","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":903,"t":"Models","u":"/ecalc/docs/about/modelling/setup/models/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models"]},{"i":909,"t":"Compressor modelling","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling"]},{"i":911,"t":"Compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling"]},{"i":943,"t":"Compressor train types","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":945,"t":"Simplified variable speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":962,"t":"Single speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":966,"t":"Variable speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":968,"t":"Variable speed compressor train model with multiple streams and pressures","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":980,"t":"Fixed speed pressure control","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling"]},{"i":989,"t":"Fluid model","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models"]},{"i":1003,"t":"Turbine modelling","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models"]},{"i":1015,"t":"Time series","u":"/ecalc/docs/about/modelling/setup/time_series","b":["Docs","Modelling guide","Setup an eCalc™ Model"]},{"i":1025,"t":"Variables","u":"/ecalc/docs/about/modelling/setup/variables","b":["Docs","Modelling guide","Setup an eCalc™ Model"]},{"i":1037,"t":"Theory","u":"/ecalc/docs/about/modelling/theory/","b":["Docs","Modelling guide","Theory"]},{"i":1039,"t":"Pump modelling","u":"/ecalc/docs/about/modelling/theory/pump_modelling","b":["Docs","Modelling guide","Theory"]},{"i":1041,"t":"Compressor modelling","u":"/ecalc/docs/about/modelling/theory/compressor_modelling","b":["Docs","Modelling guide","Theory"]},{"i":1043,"t":"eCalc™ Workflow","u":"/ecalc/docs/about/modelling/workflow/","b":["Docs","Modelling guide","eCalc™ Workflow"]},{"i":1045,"t":"Generic Workflow","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","b":["Docs","Modelling guide","eCalc™ Workflow"]},{"i":1060,"t":"Reference documentation","u":"/ecalc/docs/about/references/","b":["Docs","Reference Documentation"]},{"i":1061,"t":"API reference","u":"/ecalc/docs/about/references/api/","b":["Docs","Reference Documentation"]},{"i":1063,"t":"ecalc","u":"/ecalc/docs/about/references/cli_reference","b":["Docs","Reference Documentation"]},{"i":1075,"t":"Keywords","u":"/ecalc/docs/about/references/keywords/","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1079,"t":"ADJUSTMENT","u":"/ecalc/docs/about/references/keywords/ADJUSTMENT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1087,"t":"CATEGORY","u":"/ecalc/docs/about/references/keywords/CATEGORY","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1095,"t":"COMPRESSOR_MODEL","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1103,"t":"COMPRESSOR_TRAIN_MODEL","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1111,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1121,"t":"CONDITION","u":"/ecalc/docs/about/references/keywords/CONDITION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1129,"t":"CONDITIONS","u":"/ecalc/docs/about/references/keywords/CONDITIONS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1135,"t":"CONSTANT","u":"/ecalc/docs/about/references/keywords/CONSTANT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1143,"t":"CONSUMERS","u":"/ecalc/docs/about/references/keywords/CONSUMERS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1151,"t":"CONSUMPTION_RATE_TYPE","u":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1159,"t":"CONTROL_MARGIN","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1173,"t":"CONTROL_MARGIN_UNIT","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1181,"t":"CROSSOVER","u":"/ecalc/docs/about/references/keywords/CROSSOVER","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1187,"t":"CURVE","u":"/ecalc/docs/about/references/keywords/CURVE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1194,"t":"CURVES","u":"/ecalc/docs/about/references/keywords/CURVES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1201,"t":"DIRECT_EMITTERS","u":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1209,"t":"DISCHARGE_PRESSURE","u":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1217,"t":"DOWNSTREAM_PRESSURE_CONTROL","u":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1225,"t":"EFFICIENCY","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1235,"t":"ELECTRICITY2FUEL","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1246,"t":"LOWER_HEATING_VALUE","u":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1253,"t":"MAXIMUM_DISCHARGE_PRESSURE","u":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1261,"t":"MAXIMUM_PRESSURE_RATIO_PER_STAGE","u":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1271,"t":"MODELS","u":"/ecalc/docs/about/references/keywords/MODELS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1279,"t":"NAME","u":"/ecalc/docs/about/references/keywords/NAME","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1287,"t":"OPERATIONAL_SETTINGS","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1310,"t":"POWER_ADJUSTMENT_CONSTANT","u":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1318,"t":"POWERLOSSFACTOR","u":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1326,"t":"PRESSURE_CONTROL","u":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1333,"t":"PUMPS","u":"/ecalc/docs/about/references/keywords/PUMPS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1343,"t":"RATE","u":"/ecalc/docs/about/references/keywords/RATE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1356,"t":"RATE_FRACTIONS","u":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1363,"t":"RATE_PER_STREAM","u":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1371,"t":"REGULARITY","u":"/ecalc/docs/about/references/keywords/REGULARITY","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1388,"t":"STAGES","u":"/ecalc/docs/about/references/keywords/STAGES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1400,"t":"START","u":"/ecalc/docs/about/references/keywords/START","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1408,"t":"STREAM","u":"/ecalc/docs/about/references/keywords/STREAM","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1416,"t":"STREAMS","u":"/ecalc/docs/about/references/keywords/STREAMS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1424,"t":"SUCTION_PRESSURE","u":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1432,"t":"TIME_SERIES","u":"/ecalc/docs/about/references/keywords/TIME_SERIES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1442,"t":"TOTAL_SYSTEM_RATE","u":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1450,"t":"TURBINE_EFFICIENCIES","u":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1457,"t":"TURBINE_LOAD","u":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1464,"t":"TURBINE_MODEL","u":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1471,"t":"TYPE","u":"/ecalc/docs/about/references/keywords/TYPE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1485,"t":"UNITS","u":"/ecalc/docs/about/references/keywords/UNITS","b":["Docs","Reference Documentation","YAML keywords"]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[0,4.95]],["t/9",[1,5.553]],["t/17",[2,5.553]],["t/25",[0,4.95]],["t/33",[3,5.553]],["t/41",[4,5.553]],["t/49",[5,3.8,6,3.495]],["t/56",[7,4.262,8,1.77]],["t/64",[8,1.77,9,4.262]],["t/68",[10,3.458,11,3.458,12,3.458]],["t/82",[13,4.262,14,4.262]],["t/84",[15,5.553]],["t/86",[8,1.437,16,3.458,17,3.458]],["t/87",[18,4.262,19,3.8]],["t/96",[19,3.8,20,3.495]],["t/109",[20,3.495,21,3.495]],["t/128",[21,3.495,22,3.495]],["t/130",[22,3.495,23,4.262]],["t/132",[24,4.262,25,3.8]],["t/135",[25,3.8,26,3.8]],["t/137",[26,3.8,27,4.262]],["t/142",[28,4.262,29,4.262]],["t/148",[30,2.257]],["t/150",[31,5.553]],["t/160",[32,5.553]],["t/166",[33,5.553]],["t/181",[34,4.95]],["t/189",[35,5.553]],["t/196",[36,4.95]],["t/204",[37,5.553]],["t/212",[38,5.553]],["t/216",[39,5.553]],["t/224",[40,5.553]],["t/232",[41,5.553]],["t/245",[42,5.553]],["t/253",[43,5.553]],["t/257",[44,5.553]],["t/268",[45,5.553]],["t/276",[46,4.95]],["t/280",[47,5.553]],["t/290",[48,5.553]],["t/298",[49,5.553]],["t/306",[50,5.553]],["t/314",[51,5.553]],["t/325",[52,5.553]],["t/333",[53,4.02]],["t/337",[8,2.307]],["t/341",[54,5.553]],["t/355",[]],["t/356",[8,1.77,55,4.262]],["t/363",[56,5.553]],["t/474",[8,1.77,57,4.262]],["t/479",[8,1.77,58,4.262]],["t/484",[8,1.77,59,4.262]],["t/489",[8,1.77,60,4.262]],["t/496",[8,1.77,61,4.262]],["t/501",[8,1.77,62,4.262]],["t/504",[8,1.77,63,4.262]],["t/516",[8,1.77,20,3.495]],["t/526",[8,1.77,21,3.495]],["t/532",[8,1.77,22,3.495]],["t/542",[30,1.406,64,3.458,65,2.651]],["t/568",[65,4.257]],["t/570",[66,5.553]],["t/576",[67,5.553]],["t/584",[68,4.95]],["t/592",[8,2.307]],["t/598",[8,2.307]],["t/605",[8,2.307]],["t/612",[8,2.307]],["t/619",[8,2.307]],["t/624",[69,4.553]],["t/634",[70,5.553]],["t/640",[69,4.553]],["t/662",[71,4.262,72,4.262]],["t/664",[73,5.553]],["t/695",[30,1.406,65,2.651,74,3.458]],["t/718",[30,1.406,65,2.651,75,3.458]],["t/742",[8,1.209,30,1.183,76,2.594,77,2.91]],["t/744",[78,4.262,79,4.262]],["t/750",[30,1.733,80,3.495]],["t/760",[30,1.733,81,3.086]],["t/763",[81,3.086,82,3.8]],["t/780",[30,1.406,83,3.458,84,1.9]],["t/793",[30,1.733,85,3.8]],["t/799",[34,3.8,86,4.262]],["t/808",[68,4.95]],["t/817",[36,3.8,87,3.495]],["t/823",[46,4.95]],["t/838",[30,1.406,84,1.9,88,2.836]],["t/840",[30,1.183,84,1.599,89,2.231,90,2.231]],["t/846",[30,1.183,89,2.231,90,2.231,91,2.91]],["t/852",[30,1.183,89,2.231,90,2.231,92,2.91]],["t/856",[30,1.183,89,2.231,90,2.231,93,2.91]],["t/858",[76,3.083,80,2.836,88,2.836]],["t/877",[30,1.406,81,2.504,88,2.836]],["t/895",[30,1.733,85,3.8]],["t/903",[30,2.257]],["t/909",[30,1.733,84,2.342]],["t/911",[82,3.8,84,2.342]],["t/943",[84,1.9,87,2.836,94,2.504]],["t/945",[53,1.818,84,1.38,94,1.818,95,2.511,96,1.818]],["t/962",[84,1.599,94,2.106,96,2.106,97,2.91]],["t/966",[53,2.106,84,1.599,94,2.106,96,2.106]],["t/968",[30,0.724,53,1.289,84,0.978,94,1.289,96,1.289,98,1.78,99,1.46,100,1.587]],["t/980",[96,2.106,100,2.594,101,2.91,102,2.91]],["t/989",[30,1.733,103,4.262]],["t/1003",[30,1.733,104,4.262]],["t/1015",[105,4.262,106,4.262]],["t/1025",[53,4.02]],["t/1037",[107,5.553]],["t/1039",[30,1.733,81,3.086]],["t/1041",[30,1.733,84,2.342]],["t/1043",[8,1.77,108,3.8]],["t/1045",[80,3.495,108,3.8]],["t/1060",[6,3.495,109,4.262]],["t/1061",[5,3.8,6,3.495]],["t/1063",[8,2.307]],["t/1075",[110,5.553]],["t/1079",[111,5.553]],["t/1087",[112,5.553]],["t/1095",[113,5.553]],["t/1103",[114,5.553]],["t/1111",[84,3.051]],["t/1121",[115,4.95]],["t/1129",[115,4.95]],["t/1135",[116,5.553]],["t/1143",[117,5.553]],["t/1151",[118,5.553]],["t/1159",[119,5.553]],["t/1173",[120,5.553]],["t/1181",[121,5.553]],["t/1187",[122,4.95]],["t/1194",[122,4.95]],["t/1201",[123,5.553]],["t/1209",[124,5.553]],["t/1217",[125,5.553]],["t/1225",[126,5.553]],["t/1235",[127,5.553]],["t/1246",[128,5.553]],["t/1253",[129,5.553]],["t/1261",[130,5.553]],["t/1271",[30,2.257]],["t/1279",[131,5.553]],["t/1287",[132,5.553]],["t/1310",[133,5.553]],["t/1318",[134,5.553]],["t/1326",[135,5.553]],["t/1333",[81,4.02]],["t/1343",[136,5.553]],["t/1356",[137,5.553]],["t/1363",[138,5.553]],["t/1371",[139,5.553]],["t/1388",[140,5.553]],["t/1400",[69,4.553]],["t/1408",[99,4.553]],["t/1416",[99,4.553]],["t/1424",[141,5.553]],["t/1432",[142,5.553]],["t/1442",[143,5.553]],["t/1450",[144,5.553]],["t/1457",[145,5.553]],["t/1464",[146,5.553]],["t/1471",[87,4.553]],["t/1485",[147,5.553]]],"invertedIndex":[["",{"_index":11,"t":{"68":{"position":[[4,1]]}}}],["adjust",{"_index":111,"t":{"1079":{"position":[[0,10]]}}}],["advanc",{"_index":64,"t":{"542":{"position":[[0,8]]}}}],["api",{"_index":5,"t":{"49":{"position":[[0,3]]},"1061":{"position":[[0,3]]}}}],["calcul",{"_index":88,"t":{"838":{"position":[[21,12]]},"858":{"position":[[18,12]]},"877":{"position":[[15,12]]}}}],["categori",{"_index":112,"t":{"1087":{"position":[[0,8]]}}}],["changelog",{"_index":56,"t":{"363":{"position":[[0,9]]}}}],["chart",{"_index":82,"t":{"763":{"position":[[5,5]]},"911":{"position":[[11,5]]}}}],["cli",{"_index":9,"t":{"64":{"position":[[6,3]]}}}],["commit",{"_index":72,"t":{"662":{"position":[[13,7]]}}}],["compressor",{"_index":84,"t":{"780":{"position":[[8,10]]},"838":{"position":[[0,10]]},"840":{"position":[[0,10]]},"909":{"position":[[0,10]]},"911":{"position":[[0,10]]},"943":{"position":[[0,10]]},"945":{"position":[[26,10]]},"962":{"position":[[13,10]]},"966":{"position":[[15,10]]},"968":{"position":[[15,10]]},"1041":{"position":[[0,10]]},"1111":{"position":[[0,11]]}}}],["compressor_model",{"_index":113,"t":{"1095":{"position":[[0,16]]}}}],["compressor_system",{"_index":91,"t":{"846":{"position":[[0,17]]}}}],["compressor_train_model",{"_index":114,"t":{"1103":{"position":[[0,22]]}}}],["condit",{"_index":115,"t":{"1121":{"position":[[0,9]]},"1129":{"position":[[0,10]]}}}],["constant",{"_index":116,"t":{"1135":{"position":[[0,8]]}}}],["consum",{"_index":117,"t":{"1143":{"position":[[0,9]]}}}],["consumption_rate_typ",{"_index":118,"t":{"1151":{"position":[[0,21]]}}}],["control",{"_index":102,"t":{"980":{"position":[[21,7]]}}}],["control_margin",{"_index":119,"t":{"1159":{"position":[[0,14]]}}}],["control_margin_unit",{"_index":120,"t":{"1173":{"position":[[0,19]]}}}],["convent",{"_index":71,"t":{"662":{"position":[[0,12]]}}}],["crossov",{"_index":121,"t":{"1181":{"position":[[0,9]]}}}],["curv",{"_index":122,"t":{"1187":{"position":[[0,5]]},"1194":{"position":[[0,6]]}}}],["data",{"_index":29,"t":{"142":{"position":[[7,4]]}}}],["direct",{"_index":93,"t":{"856":{"position":[[0,6]]}}}],["direct_emitt",{"_index":123,"t":{"1201":{"position":[[0,15]]}}}],["discharge_pressur",{"_index":124,"t":{"1209":{"position":[[0,18]]}}}],["document",{"_index":109,"t":{"1060":{"position":[[10,13]]}}}],["downstream_pressure_control",{"_index":125,"t":{"1217":{"position":[[0,27]]}}}],["drogon",{"_index":74,"t":{"695":{"position":[[0,6]]}}}],["ecalc",{"_index":8,"t":{"56":{"position":[[16,6]]},"64":{"position":[[0,5]]},"86":{"position":[[10,5]]},"337":{"position":[[0,5]]},"356":{"position":[[0,5]]},"474":{"position":[[0,5]]},"479":{"position":[[0,5]]},"484":{"position":[[0,5]]},"489":{"position":[[0,5]]},"496":{"position":[[0,5]]},"501":{"position":[[0,5]]},"504":{"position":[[0,5]]},"516":{"position":[[0,5]]},"526":{"position":[[0,5]]},"532":{"position":[[0,5]]},"592":{"position":[[0,5]]},"598":{"position":[[0,5]]},"605":{"position":[[0,5]]},"612":{"position":[[0,5]]},"619":{"position":[[0,5]]},"742":{"position":[[10,5]]},"1043":{"position":[[0,6]]},"1063":{"position":[[0,5]]}}}],["effici",{"_index":126,"t":{"1225":{"position":[[0,10]]}}}],["electricity2fuel",{"_index":127,"t":{"1235":{"position":[[0,16]]}}}],["emiss",{"_index":0,"t":{"1":{"position":[[0,8]]},"25":{"position":[[0,9]]}}}],["emission_nam",{"_index":1,"t":{"9":{"position":[[0,13]]}}}],["emission_r",{"_index":2,"t":{"17":{"position":[[0,13]]}}}],["emitter_model",{"_index":3,"t":{"33":{"position":[[0,13]]}}}],["end",{"_index":4,"t":{"41":{"position":[[0,3]]}}}],["energi",{"_index":89,"t":{"840":{"position":[[11,6]]},"846":{"position":[[18,6]]},"852":{"position":[[63,6]]},"856":{"position":[[7,6]]}}}],["energy_usage_model",{"_index":66,"t":{"570":{"position":[[0,18]]}}}],["energyfunct",{"_index":67,"t":{"576":{"position":[[0,14]]}}}],["exampl",{"_index":65,"t":{"542":{"position":[[15,7]]},"568":{"position":[[0,8]]},"695":{"position":[[13,7]]},"718":{"position":[[13,7]]}}}],["express",{"_index":68,"t":{"584":{"position":[[0,10]]},"808":{"position":[[0,11]]}}}],["extrapol",{"_index":31,"t":{"150":{"position":[[0,13]]}}}],["facil",{"_index":78,"t":{"744":{"position":[[0,8]]}}}],["facility_input",{"_index":32,"t":{"160":{"position":[[0,15]]}}}],["factor",{"_index":33,"t":{"166":{"position":[[0,6]]}}}],["faq",{"_index":10,"t":{"68":{"position":[[0,3]]}}}],["file",{"_index":34,"t":{"181":{"position":[[0,4]]},"799":{"position":[[0,4]]}}}],["fix",{"_index":101,"t":{"980":{"position":[[0,5]]}}}],["fluid",{"_index":103,"t":{"989":{"position":[[0,5]]}}}],["fluid_dens",{"_index":37,"t":{"204":{"position":[[0,13]]}}}],["fluid_model",{"_index":35,"t":{"189":{"position":[[0,11]]}}}],["format",{"_index":86,"t":{"799":{"position":[[5,6]]}}}],["fuel",{"_index":36,"t":{"196":{"position":[[0,4]]},"817":{"position":[[0,4]]}}}],["fuel_typ",{"_index":38,"t":{"212":{"position":[[0,10]]}}}],["fuelconsum",{"_index":39,"t":{"216":{"position":[[0,13]]}}}],["fuelrat",{"_index":40,"t":{"224":{"position":[[0,8]]}}}],["gener",{"_index":80,"t":{"750":{"position":[[0,9]]},"858":{"position":[[0,9]]},"1045":{"position":[[0,7]]}}}],["generatorset",{"_index":43,"t":{"253":{"position":[[0,13]]}}}],["git",{"_index":73,"t":{"664":{"position":[[0,3]]}}}],["hcexport",{"_index":41,"t":{"232":{"position":[[0,8]]}}}],["head",{"_index":44,"t":{"257":{"position":[[0,4]]}}}],["head_margin",{"_index":42,"t":{"245":{"position":[[0,11]]}}}],["includ",{"_index":51,"t":{"314":{"position":[[0,8]]}}}],["influence_time_vector",{"_index":49,"t":{"298":{"position":[[0,21]]}}}],["inlet_temperatur",{"_index":45,"t":{"268":{"position":[[0,17]]}}}],["input",{"_index":79,"t":{"744":{"position":[[9,6]]}}}],["instal",{"_index":46,"t":{"276":{"position":[[0,13]]},"823":{"position":[[0,13]]}}}],["interpolation_typ",{"_index":47,"t":{"280":{"position":[[0,18]]}}}],["interstage_control_pressur",{"_index":48,"t":{"290":{"position":[[0,27]]}}}],["introduct",{"_index":7,"t":{"56":{"position":[[0,12]]}}}],["keyword",{"_index":110,"t":{"1075":{"position":[[0,8]]}}}],["librari",{"_index":14,"t":{"82":{"position":[[7,7]]}}}],["load",{"_index":50,"t":{"306":{"position":[[0,4]]}}}],["lower_heating_valu",{"_index":128,"t":{"1246":{"position":[[0,19]]}}}],["markdown",{"_index":70,"t":{"634":{"position":[[0,8]]}}}],["maximum_discharge_pressur",{"_index":129,"t":{"1253":{"position":[[0,26]]}}}],["maximum_pressure_ratio_per_stag",{"_index":130,"t":{"1261":{"position":[[0,32]]}}}],["migrat",{"_index":16,"t":{"86":{"position":[[0,9]]}}}],["model",{"_index":30,"t":{"148":{"position":[[0,9]]},"542":{"position":[[9,5]]},"695":{"position":[[7,5]]},"718":{"position":[[7,5]]},"742":{"position":[[16,5]]},"750":{"position":[[10,9]]},"760":{"position":[[5,9]]},"780":{"position":[[19,5]]},"793":{"position":[[8,6]]},"838":{"position":[[11,6]]},"840":{"position":[[24,5]]},"846":{"position":[[31,5]]},"852":{"position":[[76,5]]},"856":{"position":[[20,5]]},"877":{"position":[[5,6]]},"895":{"position":[[8,6]]},"903":{"position":[[0,6]]},"909":{"position":[[11,9]]},"968":{"position":[[32,5]]},"989":{"position":[[6,5]]},"1003":{"position":[[8,9]]},"1039":{"position":[[5,9]]},"1041":{"position":[[11,9]]},"1271":{"position":[[0,6]]}}}],["multipl",{"_index":98,"t":{"968":{"position":[[43,8]]}}}],["name",{"_index":131,"t":{"1279":{"position":[[0,4]]}}}],["operational_set",{"_index":132,"t":{"1287":{"position":[[0,20]]}}}],["output",{"_index":28,"t":{"142":{"position":[[0,6]]}}}],["power_adjustment_const",{"_index":133,"t":{"1310":{"position":[[0,25]]}}}],["powerlossfactor",{"_index":134,"t":{"1318":{"position":[[0,15]]}}}],["pressur",{"_index":100,"t":{"968":{"position":[[64,9]]},"980":{"position":[[12,8]]}}}],["pressure_control",{"_index":135,"t":{"1326":{"position":[[0,16]]}}}],["pump",{"_index":81,"t":{"760":{"position":[[0,4]]},"763":{"position":[[0,4]]},"877":{"position":[[0,4]]},"1039":{"position":[[0,4]]},"1333":{"position":[[0,5]]}}}],["python",{"_index":13,"t":{"82":{"position":[[0,6]]}}}],["rate",{"_index":136,"t":{"1343":{"position":[[0,4]]}}}],["rate_fract",{"_index":137,"t":{"1356":{"position":[[0,14]]}}}],["rate_per_stream",{"_index":138,"t":{"1363":{"position":[[0,15]]}}}],["refer",{"_index":6,"t":{"49":{"position":[[4,9]]},"1060":{"position":[[0,9]]},"1061":{"position":[[4,9]]}}}],["regular",{"_index":139,"t":{"1371":{"position":[[0,10]]}}}],["sampl",{"_index":83,"t":{"780":{"position":[[0,7]]}}}],["seri",{"_index":106,"t":{"1015":{"position":[[5,6]]}}}],["set",{"_index":76,"t":{"742":{"position":[[0,3]]},"858":{"position":[[10,4]]}}}],["simpl",{"_index":75,"t":{"718":{"position":[[0,6]]}}}],["simplifi",{"_index":95,"t":{"945":{"position":[[0,10]]}}}],["singl",{"_index":97,"t":{"962":{"position":[[0,6]]}}}],["speed",{"_index":96,"t":{"945":{"position":[[20,5]]},"962":{"position":[[7,5]]},"966":{"position":[[9,5]]},"968":{"position":[[9,5]]},"980":{"position":[[6,5]]}}}],["stage",{"_index":140,"t":{"1388":{"position":[[0,6]]}}}],["start",{"_index":69,"t":{"624":{"position":[[4,7]]},"640":{"position":[[4,7]]},"1400":{"position":[[0,5]]}}}],["stream",{"_index":99,"t":{"968":{"position":[[52,7]]},"1408":{"position":[[0,6]]},"1416":{"position":[[0,7]]}}}],["suction_pressur",{"_index":141,"t":{"1424":{"position":[[0,16]]}}}],["tabular",{"_index":85,"t":{"793":{"position":[[0,7]]},"895":{"position":[[0,7]]}}}],["theori",{"_index":107,"t":{"1037":{"position":[[0,6]]}}}],["time",{"_index":105,"t":{"1015":{"position":[[0,4]]}}}],["time_seri",{"_index":142,"t":{"1432":{"position":[[0,11]]}}}],["total_system_r",{"_index":143,"t":{"1442":{"position":[[0,17]]}}}],["train",{"_index":94,"t":{"943":{"position":[[11,5]]},"945":{"position":[[37,5]]},"962":{"position":[[24,5]]},"966":{"position":[[26,5]]},"968":{"position":[[26,5]]}}}],["troubleshoot",{"_index":12,"t":{"68":{"position":[[6,15]]}}}],["turbin",{"_index":104,"t":{"1003":{"position":[[0,7]]}}}],["turbine_effici",{"_index":144,"t":{"1450":{"position":[[0,20]]}}}],["turbine_load",{"_index":145,"t":{"1457":{"position":[[0,12]]}}}],["turbine_model",{"_index":146,"t":{"1464":{"position":[[0,13]]}}}],["type",{"_index":87,"t":{"817":{"position":[[5,5]]},"943":{"position":[[17,5]]},"1471":{"position":[[0,4]]}}}],["unit",{"_index":147,"t":{"1485":{"position":[[0,5]]}}}],["up",{"_index":77,"t":{"742":{"position":[[4,2]]}}}],["upstream_pressure_control",{"_index":52,"t":{"325":{"position":[[0,25]]}}}],["usag",{"_index":90,"t":{"840":{"position":[[18,5]]},"846":{"position":[[25,5]]},"852":{"position":[[70,5]]},"856":{"position":[[14,5]]}}}],["v7",{"_index":18,"t":{"87":{"position":[[0,2]]}}}],["v7.0",{"_index":55,"t":{"356":{"position":[[6,4]]}}}],["v7.1",{"_index":57,"t":{"474":{"position":[[6,4]]}}}],["v7.2",{"_index":58,"t":{"479":{"position":[[6,4]]}}}],["v7.3",{"_index":59,"t":{"484":{"position":[[6,4]]}}}],["v7.4",{"_index":61,"t":{"496":{"position":[[6,4]]}}}],["v7.5",{"_index":60,"t":{"489":{"position":[[6,4]]}}}],["v7.6",{"_index":62,"t":{"501":{"position":[[6,4]]}}}],["v8",{"_index":19,"t":{"87":{"position":[[6,2]]},"96":{"position":[[0,2]]}}}],["v8.0",{"_index":63,"t":{"504":{"position":[[6,4]]}}}],["v8.1",{"_index":20,"t":{"96":{"position":[[6,4]]},"109":{"position":[[0,4]]},"516":{"position":[[6,4]]}}}],["v8.2",{"_index":21,"t":{"109":{"position":[[8,4]]},"128":{"position":[[0,4]]},"526":{"position":[[6,4]]}}}],["v8.3",{"_index":22,"t":{"128":{"position":[[8,4]]},"130":{"position":[[0,4]]},"532":{"position":[[6,4]]}}}],["v8.4",{"_index":23,"t":{"130":{"position":[[8,4]]}}}],["v8.5",{"_index":24,"t":{"132":{"position":[[0,4]]}}}],["v8.6",{"_index":25,"t":{"132":{"position":[[8,4]]},"135":{"position":[[0,4]]}}}],["v8.7",{"_index":26,"t":{"135":{"position":[[8,4]]},"137":{"position":[[0,4]]}}}],["v8.8",{"_index":27,"t":{"137":{"position":[[8,4]]}}}],["variabl",{"_index":53,"t":{"333":{"position":[[0,9]]},"945":{"position":[[11,8]]},"966":{"position":[[0,8]]},"968":{"position":[[0,8]]},"1025":{"position":[[0,9]]}}}],["variable_speed_compressor_train_multiple_streams_and_pressur",{"_index":92,"t":{"852":{"position":[[0,62]]}}}],["venting_emitt",{"_index":54,"t":{"341":{"position":[[0,16]]}}}],["version",{"_index":17,"t":{"86":{"position":[[16,8]]}}}],["workflow",{"_index":108,"t":{"1043":{"position":[[7,8]]},"1045":{"position":[[8,8]]}}}],["yaml",{"_index":15,"t":{"84":{"position":[[0,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":3,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMISSION","h":"#description","p":1},{"i":5,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMISSION","h":"#format","p":1},{"i":7,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMISSION","h":"#example","p":1},{"i":11,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","h":"#description","p":9},{"i":13,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","h":"#format","p":9},{"i":15,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","h":"#example","p":9},{"i":19,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","h":"#description","p":17},{"i":21,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","h":"#format","p":17},{"i":23,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","h":"#example","p":17},{"i":27,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMISSIONS","h":"#description","p":25},{"i":29,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMISSIONS","h":"#format","p":25},{"i":31,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMISSIONS","h":"#example","p":25},{"i":35,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","h":"#description","p":33},{"i":37,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","h":"#format","p":33},{"i":39,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","h":"#example","p":33},{"i":43,"t":"Description","u":"/ecalc/docs/about/references/keywords/END","h":"#description","p":41},{"i":45,"t":"Format","u":"/ecalc/docs/about/references/keywords/END","h":"#format","p":41},{"i":47,"t":"Example","u":"/ecalc/docs/about/references/keywords/END","h":"#example","p":41},{"i":51,"t":"What method should I choose?","u":"/ecalc/docs/about/getting_started/","h":"#what-method-should-i-choose","p":49},{"i":52,"t":"eCalc CLI","u":"/ecalc/docs/about/getting_started/","h":"#ecalc-cli","p":49},{"i":54,"t":"Python Library","u":"/ecalc/docs/about/getting_started/","h":"#python-library","p":49},{"i":58,"t":"What is eCalc™?","u":"/ecalc/docs/about/","h":"#what-is-ecalc","p":56},{"i":60,"t":"Why should I use eCalc™?","u":"/ecalc/docs/about/","h":"#why-should-i-use-ecalc","p":56},{"i":62,"t":"How to use eCalc™?","u":"/ecalc/docs/about/","h":"#how-to-use-ecalc","p":56},{"i":66,"t":"Example Usage","u":"/ecalc/docs/about/getting_started/cli/","h":"#example-usage","p":64},{"i":70,"t":"Indentation errors","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#indentation-errors","p":68},{"i":72,"t":"Error messages due to YAML read problems","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-yaml-read-problems","p":68},{"i":74,"t":"Error messages due to invalid eCalc configuration","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-invalid-ecalc-configuration","p":68},{"i":76,"t":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution","p":68},{"i":78,"t":"Special characters in Unicode","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#special-characters-in-unicode","p":68},{"i":80,"t":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution-1","p":68},{"i":89,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#yaml-migration","p":87},{"i":90,"t":"Migration overview","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#migration-overview","p":87},{"i":92,"t":"Main differences","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#main-differences","p":87},{"i":94,"t":"CLI migration","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#cli-migration","p":87},{"i":98,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#yaml-migration","p":96},{"i":99,"t":"Migration overview","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#migration-overview","p":96},{"i":101,"t":"1. Changes to TIME_SERIES","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#1-changes-to-time_series","p":96},{"i":103,"t":"2. Not possible to have different interpolation types for vectors within one file","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#2-not-possible-to-have-different-interpolation-types-for-vectors-within-one-file","p":96},{"i":105,"t":"3. Empty data in time series columns no longer allowed","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#3-empty-data-in-time-series-columns-no-longer-allowed","p":96},{"i":107,"t":"4. New LTP Category: STEAM-TURBINE-GENERATOR","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#4--new-ltp-category-steam-turbine-generator","p":96},{"i":111,"t":"Modelling","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#modelling","p":109},{"i":112,"t":"YAML","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#yaml","p":109},{"i":114,"t":"Result","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#result","p":109},{"i":115,"t":"Operational settings used is now 1-based","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#operational-settings-used-is-now-1-based","p":109},{"i":117,"t":"Resampling of rates changed from forward filling to average rates","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#resampling-of-rates-changed-from-forward-filling-to-average-rates","p":109},{"i":119,"t":"LTP .tsv file","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#ltp-tsv-file","p":109},{"i":121,"t":"STP .tsv file","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#stp-tsv-file","p":109},{"i":123,"t":"Emissions, structure and order","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#emissions-structure-and-order","p":109},{"i":125,"t":"Behaviour","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#behaviour","p":109},{"i":126,"t":"Conditions","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#conditions","p":109},{"i":133,"t":"Economics","u":"/ecalc/docs/about/migration_guides/v8-5_to_v8-6","h":"#economics","p":132},{"i":139,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","h":"#yaml-migration","p":137},{"i":140,"t":"1. Changes to VENTING_EMITTERS","u":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","h":"#1-changes-to-venting_emitters","p":137},{"i":144,"t":"Decimals and significant digits in eCalc","u":"/ecalc/docs/about/miscellaneous/","h":"#decimals-and-significant-digits-in-ecalc","p":142},{"i":146,"t":"Quality control","u":"/ecalc/docs/about/miscellaneous/","h":"#quality-control","p":142},{"i":152,"t":"Description","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","h":"#description","p":150},{"i":154,"t":"Format","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","h":"#format","p":150},{"i":156,"t":"Requirements","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","h":"#requirements","p":150},{"i":158,"t":"Example","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","h":"#example","p":150},{"i":162,"t":"Description","u":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","h":"#description","p":160},{"i":164,"t":"Supported types","u":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","h":"#supported-types","p":160},{"i":168,"t":"Description","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#description","p":166},{"i":170,"t":"Use in ADJUSTMENT","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#use-in-adjustment","p":166},{"i":172,"t":"Use in EMISSIONS","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#use-in-emissions","p":166},{"i":174,"t":"Format","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#format","p":166},{"i":176,"t":"Example","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#example","p":166},{"i":177,"t":"Use in ADJUSTMENT","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#use-in-adjustment-1","p":166},{"i":179,"t":"Use in EMISSIONS","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#use-in-emissions-1","p":166},{"i":183,"t":"Description","u":"/ecalc/docs/about/references/keywords/FILE","h":"#description","p":181},{"i":185,"t":"Format","u":"/ecalc/docs/about/references/keywords/FILE","h":"#format","p":181},{"i":187,"t":"Example","u":"/ecalc/docs/about/references/keywords/FILE","h":"#example","p":181},{"i":190,"t":"Description","u":"/ecalc/docs/about/references/keywords/FLUID_MODEL","h":"#description","p":189},{"i":192,"t":"Format","u":"/ecalc/docs/about/references/keywords/FLUID_MODEL","h":"#format","p":189},{"i":194,"t":"Example","u":"/ecalc/docs/about/references/keywords/FLUID_MODEL","h":"#example","p":189},{"i":198,"t":"Description","u":"/ecalc/docs/about/references/keywords/FUEL","h":"#description","p":196},{"i":200,"t":"Format","u":"/ecalc/docs/about/references/keywords/FUEL","h":"#format","p":196},{"i":202,"t":"Example","u":"/ecalc/docs/about/references/keywords/FUEL","h":"#example","p":196},{"i":206,"t":"Description","u":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","h":"#description","p":204},{"i":208,"t":"Format","u":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","h":"#format","p":204},{"i":210,"t":"Example","u":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","h":"#example","p":204},{"i":214,"t":"Description","u":"/ecalc/docs/about/references/keywords/FUEL_TYPES","h":"#description","p":212},{"i":218,"t":"Description","u":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","h":"#description","p":216},{"i":220,"t":"Format","u":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","h":"#format","p":216},{"i":222,"t":"Example","u":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","h":"#example","p":216},{"i":226,"t":"Description","u":"/ecalc/docs/about/references/keywords/FUELRATE","h":"#description","p":224},{"i":228,"t":"Format","u":"/ecalc/docs/about/references/keywords/FUELRATE","h":"#format","p":224},{"i":230,"t":"Example","u":"/ecalc/docs/about/references/keywords/FUELRATE","h":"#example","p":224},{"i":234,"t":"Description","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#description","p":232},{"i":236,"t":"Format","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#format","p":232},{"i":238,"t":"Example","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#example","p":232},{"i":239,"t":"Basic usage","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#basic-usage","p":232},{"i":241,"t":"With time dependency","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#with-time-dependency","p":232},{"i":243,"t":"Full example","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#full-example","p":232},{"i":247,"t":"Description","u":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","h":"#description","p":245},{"i":249,"t":"Format","u":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","h":"#format","p":245},{"i":251,"t":"Example","u":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","h":"#example","p":245},{"i":255,"t":"Description","u":"/ecalc/docs/about/references/keywords/GENERATORSETS","h":"#description","p":253},{"i":258,"t":"Description","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#description","p":257},{"i":260,"t":"Format","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#format","p":257},{"i":261,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#compressors","p":257},{"i":263,"t":"PUMPS","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#pumps","p":257},{"i":265,"t":"Example","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#example","p":257},{"i":266,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#compressors-1","p":257},{"i":270,"t":"Description","u":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","h":"#description","p":268},{"i":272,"t":"Format","u":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","h":"#format","p":268},{"i":274,"t":"Example","u":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","h":"#example","p":268},{"i":278,"t":"Description","u":"/ecalc/docs/about/references/keywords/INSTALLATIONS","h":"#description","p":276},{"i":282,"t":"Description","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","h":"#description","p":280},{"i":284,"t":"Format","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","h":"#format","p":280},{"i":286,"t":"Requirements","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","h":"#requirements","p":280},{"i":288,"t":"Example","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","h":"#example","p":280},{"i":292,"t":"Description","u":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","h":"#description","p":290},{"i":294,"t":"Use in MODELS","u":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","h":"#use-in-models","p":290},{"i":296,"t":"Use in ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","h":"#use-in-energy_usage_model","p":290},{"i":300,"t":"Description","u":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","h":"#description","p":298},{"i":302,"t":"Format","u":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","h":"#format","p":298},{"i":304,"t":"Example","u":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","h":"#example","p":298},{"i":308,"t":"Description","u":"/ecalc/docs/about/references/keywords/LOAD","h":"#description","p":306},{"i":310,"t":"Format","u":"/ecalc/docs/about/references/keywords/LOAD","h":"#format","p":306},{"i":312,"t":"Example","u":"/ecalc/docs/about/references/keywords/LOAD","h":"#example","p":306},{"i":315,"t":"Description","u":"/ecalc/docs/about/references/keywords/include","h":"#description","p":314},{"i":317,"t":"Format","u":"/ecalc/docs/about/references/keywords/include","h":"#format","p":314},{"i":319,"t":"Example 1 - include map/object into list item","u":"/ecalc/docs/about/references/keywords/include","h":"#example-1---include-mapobject-into-list-item","p":314},{"i":321,"t":"Example 2 - include map/object into object value","u":"/ecalc/docs/about/references/keywords/include","h":"#example-2---include-mapobject-into-object-value","p":314},{"i":323,"t":"Example 3 - include list into object value","u":"/ecalc/docs/about/references/keywords/include","h":"#example-3---include-list-into-object-value","p":314},{"i":327,"t":"Description","u":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","h":"#description","p":325},{"i":329,"t":"Format","u":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","h":"#format","p":325},{"i":331,"t":"Example","u":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","h":"#example","p":325},{"i":335,"t":"Description","u":"/ecalc/docs/about/references/keywords/VARIABLES","h":"#description","p":333},{"i":338,"t":"New Features","u":"/ecalc/docs/changelog/latest","h":"#new-features","p":337},{"i":339,"t":"Fixes","u":"/ecalc/docs/changelog/latest","h":"#fixes","p":337},{"i":340,"t":"Breaking changes","u":"/ecalc/docs/changelog/latest","h":"#breaking-changes","p":337},{"i":343,"t":"eCalc version 8.7 and before: Description","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","h":"#ecalc-version-87-and-before-description","p":341},{"i":345,"t":"Format","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","h":"#format","p":341},{"i":347,"t":"Example","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","h":"#example","p":341},{"i":349,"t":"eCalc from version 8.8: Description","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","h":"#ecalc-from-version-88-description","p":341},{"i":351,"t":"Format","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","h":"#format-1","p":341},{"i":353,"t":"Example","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","h":"#example-1","p":341},{"i":357,"t":"Features","u":"/ecalc/docs/changelog/v7-0-release","h":"#features","p":356},{"i":359,"t":"Fixes","u":"/ecalc/docs/changelog/v7-0-release","h":"#fixes","p":356},{"i":361,"t":"CLI","u":"/ecalc/docs/changelog/v7-0-release","h":"#cli","p":356},{"i":364,"t":"8.9.0 (2024-01-11)","u":"/ecalc/docs/changelog/","h":"#890-2024-01-11","p":363},{"i":365,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes","p":363},{"i":367,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation","p":363},{"i":369,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores","p":363},{"i":371,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring","p":363},{"i":373,"t":"8.8.0 (2023-12-27)","u":"/ecalc/docs/changelog/","h":"#880-2023-12-27","p":363},{"i":374,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes","p":363},{"i":376,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features","p":363},{"i":378,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-1","p":363},{"i":380,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-1","p":363},{"i":382,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-1","p":363},{"i":384,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-1","p":363},{"i":386,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests","p":363},{"i":388,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration","p":363},{"i":390,"t":"8.7.0 (2023-12-05)","u":"/ecalc/docs/changelog/","h":"#870-2023-12-05","p":363},{"i":391,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-2","p":363},{"i":393,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-2","p":363},{"i":395,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-2","p":363},{"i":397,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-2","p":363},{"i":399,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-1","p":363},{"i":401,"t":"8.7.0","u":"/ecalc/docs/changelog/","h":"#870","p":363},{"i":402,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-1","p":363},{"i":404,"t":"8.6.0 (2023-11-21)","u":"/ecalc/docs/changelog/","h":"#860-2023-11-21","p":363},{"i":405,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-2","p":363},{"i":407,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-1","p":363},{"i":409,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-3","p":363},{"i":411,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-3","p":363},{"i":413,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-3","p":363},{"i":415,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-3","p":363},{"i":417,"t":"8.5.0 (2023-10-30)","u":"/ecalc/docs/changelog/","h":"#850-2023-10-30","p":363},{"i":418,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-2","p":363},{"i":420,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-4","p":363},{"i":422,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-4","p":363},{"i":424,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-4","p":363},{"i":426,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-4","p":363},{"i":428,"t":"8.4.0 (2023-09-25)","u":"/ecalc/docs/changelog/","h":"#840-2023-09-25","p":363},{"i":429,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-3","p":363},{"i":431,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-5","p":363},{"i":433,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-5","p":363},{"i":435,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-5","p":363},{"i":437,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-5","p":363},{"i":439,"t":"8.3.0 (2023-08-11)","u":"/ecalc/docs/changelog/","h":"#830-2023-08-11","p":363},{"i":440,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-3","p":363},{"i":442,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-4","p":363},{"i":444,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-6","p":363},{"i":446,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-6","p":363},{"i":448,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-6","p":363},{"i":450,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-6","p":363},{"i":452,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests-1","p":363},{"i":454,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-2","p":363},{"i":456,"t":"8.2.2 (2023-05-28)","u":"/ecalc/docs/changelog/","h":"#822-2023-05-28","p":363},{"i":457,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-7","p":363},{"i":459,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-3","p":363},{"i":461,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests-2","p":363},{"i":463,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-7","p":363},{"i":465,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-7","p":363},{"i":467,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-7","p":363},{"i":469,"t":"8.2.1 (2023-05-09)","u":"/ecalc/docs/changelog/","h":"#821-2023-05-09","p":363},{"i":470,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-8","p":363},{"i":472,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-4","p":363},{"i":475,"t":"Features","u":"/ecalc/docs/changelog/v7-1-release","h":"#features","p":474},{"i":477,"t":"CLI","u":"/ecalc/docs/changelog/v7-1-release","h":"#cli","p":474},{"i":480,"t":"Features","u":"/ecalc/docs/changelog/v7-2-release","h":"#features","p":479},{"i":482,"t":"Fixes","u":"/ecalc/docs/changelog/v7-2-release","h":"#fixes","p":479},{"i":485,"t":"Features","u":"/ecalc/docs/changelog/v7-3-release","h":"#features","p":484},{"i":487,"t":"Fixes","u":"/ecalc/docs/changelog/v7-3-release","h":"#fixes","p":484},{"i":490,"t":"Features","u":"/ecalc/docs/changelog/v7-5-release","h":"#features","p":489},{"i":492,"t":"Fixes","u":"/ecalc/docs/changelog/v7-5-release","h":"#fixes","p":489},{"i":494,"t":"CLI","u":"/ecalc/docs/changelog/v7-5-release","h":"#cli","p":489},{"i":497,"t":"Features","u":"/ecalc/docs/changelog/v7-4-release","h":"#features","p":496},{"i":499,"t":"Fixes","u":"/ecalc/docs/changelog/v7-4-release","h":"#fixes","p":496},{"i":502,"t":"Breaking changes","u":"/ecalc/docs/changelog/v7-6-release","h":"#breaking-changes","p":501},{"i":506,"t":"New features","u":"/ecalc/docs/changelog/v8.0-release","h":"#new-features","p":504},{"i":508,"t":"Experimental features","u":"/ecalc/docs/changelog/v8.0-release","h":"#experimental-features","p":504},{"i":510,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.0-release","h":"#breaking-changes","p":504},{"i":512,"t":"YAML","u":"/ecalc/docs/changelog/v8.0-release","h":"#yaml","p":504},{"i":514,"t":"CLI","u":"/ecalc/docs/changelog/v8.0-release","h":"#cli","p":504},{"i":518,"t":"New features","u":"/ecalc/docs/changelog/v8.1-release","h":"#new-features","p":516},{"i":520,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.1-release","h":"#breaking-changes","p":516},{"i":522,"t":"Input: YAML / Resource files","u":"/ecalc/docs/changelog/v8.1-release","h":"#input-yaml--resource-files","p":516},{"i":524,"t":"Output: LTP","u":"/ecalc/docs/changelog/v8.1-release","h":"#output-ltp","p":516},{"i":528,"t":"New features","u":"/ecalc/docs/changelog/v8.2-release","h":"#new-features","p":526},{"i":530,"t":"Fixes","u":"/ecalc/docs/changelog/v8.2-release","h":"#fixes","p":526},{"i":534,"t":"New Features","u":"/ecalc/docs/changelog/v8.3-release","h":"#new-features","p":532},{"i":536,"t":"Fixes","u":"/ecalc/docs/changelog/v8.3-release","h":"#fixes","p":532},{"i":538,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.3-release","h":"#breaking-changes","p":532},{"i":540,"t":"Input: YAML / Resource files","u":"/ecalc/docs/changelog/v8.3-release","h":"#input-yaml--resource-files","p":532},{"i":544,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#yaml-model-overview","p":542},{"i":546,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#time_series","p":542},{"i":548,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#facility_inputs","p":542},{"i":550,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#fuel_types","p":542},{"i":552,"t":"MODELS","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#models","p":542},{"i":554,"t":"VARIABLES","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#variables","p":542},{"i":556,"t":"INSTALLATIONS","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#installations","p":542},{"i":558,"t":"Installation A","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#installation-a","p":542},{"i":560,"t":"Installation B","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#installation-b","p":542},{"i":562,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#energy_usage_model","p":542},{"i":564,"t":"Full eCalc YAML model","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#full-ecalc-yaml-model","p":542},{"i":566,"t":"Input files","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#input-files","p":542},{"i":572,"t":"Description","u":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","h":"#description","p":570},{"i":574,"t":"Temporal energy usage model","u":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","h":"#temporal-energy-usage-model","p":570},{"i":578,"t":"Description","u":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","h":"#description","p":576},{"i":580,"t":"Format","u":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","h":"#format","p":576},{"i":582,"t":"Example","u":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","h":"#example","p":576},{"i":586,"t":"Description","u":"/ecalc/docs/about/references/keywords/EXPRESSION","h":"#description","p":584},{"i":588,"t":"Format","u":"/ecalc/docs/about/references/keywords/EXPRESSION","h":"#format","p":584},{"i":590,"t":"Example","u":"/ecalc/docs/about/references/keywords/EXPRESSION","h":"#example","p":584},{"i":593,"t":"New Features","u":"/ecalc/docs/changelog/v8.4-release","h":"#new-features","p":592},{"i":595,"t":"Fixes","u":"/ecalc/docs/changelog/v8.4-release","h":"#fixes","p":592},{"i":597,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.4-release","h":"#breaking-changes","p":592},{"i":599,"t":"New Features","u":"/ecalc/docs/changelog/v8.5-release","h":"#new-features","p":598},{"i":601,"t":"Fixes","u":"/ecalc/docs/changelog/v8.5-release","h":"#fixes","p":598},{"i":603,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.5-release","h":"#breaking-changes","p":598},{"i":606,"t":"New Features","u":"/ecalc/docs/changelog/v8.6-release","h":"#new-features","p":605},{"i":608,"t":"Fixes","u":"/ecalc/docs/changelog/v8.6-release","h":"#fixes","p":605},{"i":610,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.6-release","h":"#breaking-changes","p":605},{"i":613,"t":"New Features","u":"/ecalc/docs/changelog/v8.7-release","h":"#new-features","p":612},{"i":615,"t":"Fixes","u":"/ecalc/docs/changelog/v8.7-release","h":"#fixes","p":612},{"i":617,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.7-release","h":"#breaking-changes","p":612},{"i":620,"t":"New Features","u":"/ecalc/docs/changelog/v8.8-release","h":"#new-features","p":619},{"i":622,"t":"Fixes","u":"/ecalc/docs/changelog/v8.8-release","h":"#fixes","p":619},{"i":623,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.8-release","h":"#breaking-changes","p":619},{"i":626,"t":"Prerequisites","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#prerequisites","p":624},{"i":628,"t":"Contributing","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#contributing","p":624},{"i":630,"t":"How it works","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#how-it-works","p":624},{"i":632,"t":"Special features","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#special-features","p":624},{"i":636,"t":"Standard Markdown","u":"/ecalc/docs/contribute/documentation-guide/markdown","h":"#standard-markdown","p":634},{"i":638,"t":"Markdown summary","u":"/ecalc/docs/contribute/documentation-guide/markdown","h":"","p":634},{"i":642,"t":"Prerequisites","u":"/ecalc/docs/contribute/get-started","h":"#prerequisites","p":640},{"i":644,"t":"How to contribute","u":"/ecalc/docs/contribute/get-started","h":"#how-to-contribute","p":640},{"i":646,"t":"Initiate change","u":"/ecalc/docs/contribute/get-started","h":"#initiate-change","p":640},{"i":648,"t":"Make a Pull Request","u":"/ecalc/docs/contribute/get-started","h":"#make-a-pull-request","p":640},{"i":650,"t":"Get code review","u":"/ecalc/docs/contribute/get-started","h":"#get-code-review","p":640},{"i":652,"t":"Guidelines","u":"/ecalc/docs/contribute/get-started","h":"#guidelines","p":640},{"i":654,"t":"Pull Requests","u":"/ecalc/docs/contribute/get-started","h":"#pull-requests","p":640},{"i":656,"t":"Git commit format","u":"/ecalc/docs/contribute/get-started","h":"#git-commit-format","p":640},{"i":658,"t":"Readability","u":"/ecalc/docs/contribute/get-started","h":"#readability","p":640},{"i":660,"t":"Code style","u":"/ecalc/docs/contribute/get-started","h":"#code-style","p":640},{"i":666,"t":"Setting up Git","u":"/ecalc/docs/contribute/guides/git","h":"#setting-up-git","p":664},{"i":668,"t":"Using Git","u":"/ecalc/docs/contribute/guides/git","h":"#using-git","p":664},{"i":670,"t":"Cloning a git repository","u":"/ecalc/docs/contribute/guides/git","h":"#cloning-a-git-repository","p":664},{"i":672,"t":"Tell Git who you are","u":"/ecalc/docs/contribute/guides/git","h":"#tell-git-who-you-are","p":664},{"i":674,"t":"Create your own branch","u":"/ecalc/docs/contribute/guides/git","h":"#create-your-own-branch","p":664},{"i":676,"t":"Switch between existing branches","u":"/ecalc/docs/contribute/guides/git","h":"#switch-between-existing-branches","p":664},{"i":678,"t":"Fetch changes from GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#fetch-changes-from-github","p":664},{"i":680,"t":"Send your changes to GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#send-your-changes-to-github","p":664},{"i":682,"t":"Check status of changes","u":"/ecalc/docs/contribute/guides/git","h":"#check-status-of-changes","p":664},{"i":684,"t":"Add files","u":"/ecalc/docs/contribute/guides/git","h":"#add-files","p":664},{"i":686,"t":"Commit changes","u":"/ecalc/docs/contribute/guides/git","h":"#commit-changes","p":664},{"i":688,"t":"Send changes to GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#send-changes-to-github","p":664},{"i":690,"t":"Workflow examples","u":"/ecalc/docs/contribute/guides/git","h":"#workflow-examples","p":664},{"i":691,"t":"Pull Requests","u":"/ecalc/docs/contribute/guides/git","h":"#pull-requests","p":664},{"i":693,"t":"Fork the repository","u":"/ecalc/docs/contribute/guides/git","h":"#fork-the-repository","p":664},{"i":697,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#yaml-model-overview","p":695},{"i":699,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#time_series","p":695},{"i":701,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#facility_inputs","p":695},{"i":703,"t":"MODELS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#models","p":695},{"i":705,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#fuel_types","p":695},{"i":707,"t":"INSTALLATIONS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#installations","p":695},{"i":709,"t":"GENERATORSETS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#generatorsets","p":695},{"i":711,"t":"Full Model","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#full-model","p":695},{"i":713,"t":"Input Data","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#input-data","p":695},{"i":714,"t":"Facility resources","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#facility-resources","p":695},{"i":716,"t":"Timeseries resources","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#timeseries-resources","p":695},{"i":720,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/simple","h":"#yaml-model-overview","p":718},{"i":722,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#time_series","p":718},{"i":724,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#facility_inputs","p":718},{"i":726,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#fuel_types","p":718},{"i":728,"t":"VARIABLES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#variables","p":718},{"i":730,"t":"INSTALLATION","u":"/ecalc/docs/about/modelling/examples/simple","h":"#installation","p":718},{"i":732,"t":"GENERATORSETS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#generatorsets","p":718},{"i":734,"t":"FUELCONSUMERS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#fuelconsumers","p":718},{"i":736,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/modelling/examples/simple","h":"#energy_usage_model","p":718},{"i":738,"t":"Full eCalc YAML model","u":"/ecalc/docs/about/modelling/examples/simple","h":"#full-ecalc-yaml-model","p":718},{"i":740,"t":"Input files","u":"/ecalc/docs/about/modelling/examples/simple","h":"#input-files","p":718},{"i":746,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","h":"#format","p":744},{"i":748,"t":"Supported types","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","h":"#supported-types","p":744},{"i":752,"t":"ELECTRICITY2FUEL","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#electricity2fuel","p":750},{"i":754,"t":"Facility input format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#facility-input-format","p":750},{"i":756,"t":"Example table","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#table-example","p":750},{"i":758,"t":"Header and unit requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#header-and-unit-requirements","p":750},{"i":761,"t":"Attention","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","h":"","p":760},{"i":765,"t":"PUMP_CHART_SINGLE_SPEED","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#pump_chart_single_speed","p":763},{"i":767,"t":"Header Requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#header-requirements","p":763},{"i":769,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#format","p":763},{"i":771,"t":"PUMP_CHART_VARIABLE_SPEED","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#pump_chart_variable_speed","p":763},{"i":772,"t":"Description","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#description","p":763},{"i":774,"t":"Header Requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#header-requirements-1","p":763},{"i":776,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#format-1","p":763},{"i":778,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#examples","p":763},{"i":782,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#format","p":780},{"i":784,"t":"Header requirements for the sampled compressor csv file","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#header-requirements-for-the-sampled-compressor-csv-file","p":780},{"i":786,"t":"Units","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#units","p":780},{"i":788,"t":"Example tables","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#example-tables","p":780},{"i":789,"t":"1D example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#1d-example","p":780},{"i":791,"t":"3D example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#3d-example","p":780},{"i":795,"t":"Header and unit requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","h":"#header-and-unit-requirements","p":793},{"i":797,"t":"Example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","h":"#example","p":793},{"i":801,"t":"Setup file syntax","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#setup-file-syntax","p":799},{"i":803,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#examples","p":799},{"i":804,"t":"YAML format example","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#yaml-format-example","p":799},{"i":806,"t":"Full examples","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#full-examples","p":799},{"i":810,"t":"Available operators","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#available-operators","p":808},{"i":812,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#examples","p":808},{"i":813,"t":"Combining data from different reservoir inputs","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#combining-data-from-different-reservoir-inputs","p":808},{"i":815,"t":"Model of additional rate","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#model-of-additional-rate","p":808},{"i":819,"t":"Format","u":"/ecalc/docs/about/modelling/setup/fuel_types","h":"#format","p":817},{"i":821,"t":"Example","u":"/ecalc/docs/about/modelling/setup/fuel_types","h":"#example","p":817},{"i":825,"t":"Referring to time series","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#referring-to-time-series","p":823},{"i":827,"t":"Time intervals for variables/expressions and models","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#time-intervals-for-variablesexpressions-and-models","p":823},{"i":829,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#format","p":823},{"i":831,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#example","p":823},{"i":832,"t":"General structure","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#general-structure","p":823},{"i":834,"t":"Referring to time series","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#referring-to-time-series-1","p":823},{"i":836,"t":"Time intervals","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#time-intervals","p":823},{"i":842,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","h":"#format","p":840},{"i":844,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","h":"#example","p":840},{"i":848,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","h":"#format","p":846},{"i":850,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","h":"#example","p":846},{"i":854,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#format","p":852},{"i":860,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#format","p":858},{"i":862,"t":"Electricity2fuel function","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#electricity2fuel-function","p":858},{"i":863,"t":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description","p":858},{"i":865,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#format-1","p":858},{"i":867,"t":"Power from shore","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#power-from-shore","p":858},{"i":868,"t":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description-1","p":858},{"i":870,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#example","p":858},{"i":872,"t":"Heaters and boilers","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#heaters-and-boilers","p":858},{"i":873,"t":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description-2","p":858},{"i":875,"t":"Example: Boiler as generator set","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#example-boiler-as-generator-set","p":858},{"i":879,"t":"PUMP energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#pump-energy-usage-model","p":877},{"i":881,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#format","p":877},{"i":883,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#example","p":877},{"i":885,"t":"Units","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#units","p":877},{"i":887,"t":"PUMP_SYSTEM energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#pump_system-energy-usage-model","p":877},{"i":889,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#format-1","p":877},{"i":891,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#example-1","p":877},{"i":893,"t":"Units","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#units-1","p":877},{"i":897,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#format","p":895},{"i":899,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#example","p":895},{"i":901,"t":"COMPRESSOR_TABULAR input type","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#compressor_tabular-input-type","p":895},{"i":905,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/","h":"#format","p":903},{"i":907,"t":"Supported types","u":"/ecalc/docs/about/modelling/setup/models/","h":"#supported-types","p":903},{"i":913,"t":"User defined single speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#user-defined-single-speed-compressor-chart","p":911},{"i":915,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format","p":911},{"i":917,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example","p":911},{"i":919,"t":"User defined variable speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#user-defined-variable-speed-compressor-chart","p":911},{"i":921,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-2","p":911},{"i":923,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-2","p":911},{"i":925,"t":"Generic compressor chart with predefined design point","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#generic-compressor-chart-with-predefined-design-point","p":911},{"i":927,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-4","p":911},{"i":929,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-4","p":911},{"i":931,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-5","p":911},{"i":933,"t":"Generic compressor chart with design point calculated from input data","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#generic-compressor-chart-with-design-point-calculated-from-input-data","p":911},{"i":935,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-5","p":911},{"i":937,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-6","p":911},{"i":939,"t":"Surge control margin for variable speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#surge-control-margin-for-variable-speed-compressor-chart","p":911},{"i":941,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-6","p":911},{"i":947,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#format","p":945},{"i":949,"t":"Simplified compressor train model with known compressor stages","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#simplified-compressor-train-model-with-known-compressor-stages","p":945},{"i":951,"t":"Simplified compressor train model with unknown number of compressor stages","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#simplified-compressor-train-model-with-unknown-number-of-compressor-stages","p":945},{"i":953,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#examples","p":945},{"i":954,"t":"A (single) compressor with a user-defined variable speed compressor chart and fluid composition","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-single-compressor-with-a-user-defined-variable-speed-compressor-chart-and-fluid-composition","p":945},{"i":956,"t":"A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-single-turbine-driven-compressor-with-a-generic-compressor-chart-with-design-point-and-predefined-composition","p":945},{"i":958,"t":"A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-compressor-train-with-two-stages-where-the-first-stage-has-unknown-spec-while-the-second-has-a-predefined-chart","p":945},{"i":960,"t":"A compressor train where the number of stages are unknown","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-compressor-train-where-the-number-of-stages-are-unknown","p":945},{"i":964,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","h":"#format","p":962},{"i":970,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#format","p":968},{"i":972,"t":"Keyword usage","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#keyword-usage","p":968},{"i":974,"t":"INTERSTAGE_PRESSURE_CONTROL","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#interstage_pressure_control","p":968},{"i":976,"t":"Fixed pressure control","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#fixed-pressure-control","p":968},{"i":978,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#example","p":968},{"i":981,"t":"Theory","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#theory","p":980},{"i":983,"t":"Control modelling in eCalc™","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#control-modelling-in-ecalc","p":980},{"i":985,"t":"Pressure control methods - choking options","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#pressure-control-methods---choking-options","p":980},{"i":987,"t":"Pressure control methods - recirculation options","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#pressure-control-methods---recirculation-options","p":980},{"i":991,"t":"Fluid model using predefined composition","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#fluid-model-using-predefined-composition","p":989},{"i":993,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#format","p":989},{"i":995,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#examples","p":989},{"i":997,"t":"Fluid model with user-specified composition","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#fluid-model-with-user-specified-composition","p":989},{"i":999,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#format-1","p":989},{"i":1001,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#example","p":989},{"i":1005,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#format","p":1003},{"i":1007,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#example","p":1003},{"i":1009,"t":"Combining a compressor train and a turbine into one model","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#combining-a-compressor-train-and-a-turbine-into-one-model","p":1003},{"i":1011,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#format-1","p":1003},{"i":1013,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#examples","p":1003},{"i":1017,"t":"Supported types","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#supported-types","p":1015},{"i":1019,"t":"Format","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#format","p":1015},{"i":1021,"t":"Requirements","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#requirements","p":1015},{"i":1023,"t":"Example","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#example","p":1015},{"i":1027,"t":"Defining variables","u":"/ecalc/docs/about/modelling/setup/variables","h":"#defining-variables","p":1025},{"i":1029,"t":"Format","u":"/ecalc/docs/about/modelling/setup/variables","h":"#format","p":1025},{"i":1031,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/variables","h":"#examples","p":1025},{"i":1033,"t":"Using variables","u":"/ecalc/docs/about/modelling/setup/variables","h":"#using-variables","p":1025},{"i":1035,"t":"Example","u":"/ecalc/docs/about/modelling/setup/variables","h":"#example","p":1025},{"i":1046,"t":"Simplified Process Flow Diagram","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#simplified-process-flow-diagram","p":1045},{"i":1048,"t":"Workflow","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#workflow","p":1045},{"i":1049,"t":"Workflow Explanation","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#workflow-explanation","p":1045},{"i":1050,"t":"Required Subsurface Profiles","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#required-subsurface-profiles","p":1045},{"i":1052,"t":"Facility Information","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#facility-information","p":1045},{"i":1054,"t":"Consumer Information","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#consumer-information","p":1045},{"i":1056,"t":"Validation","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#validation","p":1045},{"i":1058,"t":"Calibration","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#calibration","p":1045},{"i":1065,"t":"ecalc run","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-run","p":1063},{"i":1067,"t":"ecalc selftest","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-selftest","p":1063},{"i":1069,"t":"ecalc show","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-show","p":1063},{"i":1071,"t":"ecalc show results","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-show-results","p":1063},{"i":1073,"t":"ecalc show yaml","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-show-yaml","p":1063},{"i":1077,"t":"Top level keywords","u":"/ecalc/docs/about/references/keywords/","h":"#top-level-keywords","p":1075},{"i":1081,"t":"Description","u":"/ecalc/docs/about/references/keywords/ADJUSTMENT","h":"#description","p":1079},{"i":1083,"t":"Format","u":"/ecalc/docs/about/references/keywords/ADJUSTMENT","h":"#format","p":1079},{"i":1085,"t":"Example","u":"/ecalc/docs/about/references/keywords/ADJUSTMENT","h":"#example","p":1079},{"i":1089,"t":"Description","u":"/ecalc/docs/about/references/keywords/CATEGORY","h":"#description","p":1087},{"i":1091,"t":"Format","u":"/ecalc/docs/about/references/keywords/CATEGORY","h":"#format","p":1087},{"i":1093,"t":"Example","u":"/ecalc/docs/about/references/keywords/CATEGORY","h":"#example","p":1087},{"i":1097,"t":"Description","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","h":"#description","p":1095},{"i":1099,"t":"Format","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","h":"#format","p":1095},{"i":1101,"t":"Example","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","h":"#example","p":1095},{"i":1105,"t":"Description","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","h":"#description","p":1103},{"i":1107,"t":"Format","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","h":"#format","p":1103},{"i":1109,"t":"Example","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","h":"#example","p":1103},{"i":1113,"t":"Description","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","h":"#description","p":1111},{"i":1115,"t":"Format","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","h":"#format","p":1111},{"i":1117,"t":"Example 1","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","h":"#example-1","p":1111},{"i":1119,"t":"Example 2 (Detailed)","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","h":"#example-2-detailed","p":1111},{"i":1123,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONDITION","h":"#description","p":1121},{"i":1125,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONDITION","h":"#format","p":1121},{"i":1127,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONDITION","h":"#example","p":1121},{"i":1131,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONDITIONS","h":"#description","p":1129},{"i":1133,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONDITIONS","h":"#format","p":1129},{"i":1137,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONSTANT","h":"#description","p":1135},{"i":1139,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONSTANT","h":"#format","p":1135},{"i":1141,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONSTANT","h":"#example","p":1135},{"i":1145,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONSUMERS","h":"#description","p":1143},{"i":1147,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONSUMERS","h":"#format","p":1143},{"i":1149,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONSUMERS","h":"#example","p":1143},{"i":1153,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","h":"#description","p":1151},{"i":1155,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","h":"#format","p":1151},{"i":1157,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","h":"#example","p":1151},{"i":1161,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#description","p":1159},{"i":1163,"t":"Use in Variable speed compressor train model","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#use-in-variable-speed-compressor-train-model","p":1159},{"i":1164,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#format","p":1159},{"i":1166,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#example","p":1159},{"i":1168,"t":"Use in Variable speed compressor train model with multiple streams and pressures","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#use-in-variable-speed-compressor-train-model-with-multiple-streams-and-pressures","p":1159},{"i":1169,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#format-1","p":1159},{"i":1171,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#example-1","p":1159},{"i":1175,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","h":"#description","p":1173},{"i":1177,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","h":"#format","p":1173},{"i":1179,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","h":"#example","p":1173},{"i":1183,"t":"Description","u":"/ecalc/docs/about/references/keywords/CROSSOVER","h":"#description","p":1181},{"i":1185,"t":"Example","u":"/ecalc/docs/about/references/keywords/CROSSOVER","h":"#example","p":1181},{"i":1188,"t":"Description","u":"/ecalc/docs/about/references/keywords/CURVE","h":"#description","p":1187},{"i":1190,"t":"Format","u":"/ecalc/docs/about/references/keywords/CURVE","h":"#format","p":1187},{"i":1192,"t":"Example","u":"/ecalc/docs/about/references/keywords/CURVE","h":"#example","p":1187},{"i":1195,"t":"Description","u":"/ecalc/docs/about/references/keywords/CURVES","h":"#description","p":1194},{"i":1197,"t":"Format","u":"/ecalc/docs/about/references/keywords/CURVES","h":"#format","p":1194},{"i":1199,"t":"Example","u":"/ecalc/docs/about/references/keywords/CURVES","h":"#example","p":1194},{"i":1203,"t":"Description","u":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","h":"#description","p":1201},{"i":1205,"t":"Format","u":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","h":"#format","p":1201},{"i":1207,"t":"Example","u":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","h":"#example","p":1201},{"i":1211,"t":"Description","u":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","h":"#description","p":1209},{"i":1213,"t":"Format","u":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","h":"#format","p":1209},{"i":1215,"t":"Example","u":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","h":"#example","p":1209},{"i":1219,"t":"Description","u":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","h":"#description","p":1217},{"i":1221,"t":"Format","u":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","h":"#format","p":1217},{"i":1223,"t":"Example","u":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","h":"#example","p":1217},{"i":1226,"t":"Description","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#description","p":1225},{"i":1228,"t":"Format","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#format","p":1225},{"i":1229,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#compressors","p":1225},{"i":1231,"t":"PUMPS","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#pumps","p":1225},{"i":1233,"t":"Example","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#example","p":1225},{"i":1237,"t":"Description","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#description","p":1235},{"i":1239,"t":"Format","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#format","p":1235},{"i":1241,"t":"Example","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#example","p":1235},{"i":1242,"t":"Example 1","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#example-1","p":1235},{"i":1244,"t":"Example 2","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#example-2","p":1235},{"i":1247,"t":"Description","u":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","h":"#description","p":1246},{"i":1249,"t":"Format","u":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","h":"#format","p":1246},{"i":1251,"t":"Example","u":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","h":"#example","p":1246},{"i":1255,"t":"Description","u":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","h":"#description","p":1253},{"i":1257,"t":"Functionality","u":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","h":"#functionality","p":1253},{"i":1259,"t":"Format","u":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","h":"#format","p":1253},{"i":1263,"t":"Description","u":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","h":"#description","p":1261},{"i":1265,"t":"Functionality","u":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","h":"#functionality","p":1261},{"i":1267,"t":"Format","u":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","h":"#format","p":1261},{"i":1269,"t":"Example","u":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","h":"#example","p":1261},{"i":1273,"t":"Description","u":"/ecalc/docs/about/references/keywords/MODELS","h":"#description","p":1271},{"i":1275,"t":"Format","u":"/ecalc/docs/about/references/keywords/MODELS","h":"#format","p":1271},{"i":1277,"t":"Supported Model types","u":"/ecalc/docs/about/references/keywords/MODELS","h":"#supported-model-types","p":1271},{"i":1281,"t":"Description","u":"/ecalc/docs/about/references/keywords/NAME","h":"#description","p":1279},{"i":1283,"t":"Format","u":"/ecalc/docs/about/references/keywords/NAME","h":"#format","p":1279},{"i":1285,"t":"Example","u":"/ecalc/docs/about/references/keywords/NAME","h":"#example","p":1279},{"i":1289,"t":"Description","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#description","p":1287},{"i":1291,"t":"RATES","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#rates","p":1287},{"i":1293,"t":"RATE_FRACTIONS","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#rate_fractions","p":1287},{"i":1295,"t":"SUCTION_PRESSURES","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#suction_pressures","p":1287},{"i":1297,"t":"DISCHARGE_PRESSURES","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#discharge_pressures","p":1287},{"i":1299,"t":"FLUID_DENSITIES","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#fluid_densities","p":1287},{"i":1301,"t":"CROSSOVER","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#crossover","p":1287},{"i":1303,"t":"Example 1:","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#example-1","p":1287},{"i":1305,"t":"Example 2:","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#example-2","p":1287},{"i":1307,"t":"Format","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#format","p":1287},{"i":1308,"t":"Example","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#example","p":1287},{"i":1312,"t":"Description","u":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","h":"#description","p":1310},{"i":1314,"t":"Format","u":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","h":"#format","p":1310},{"i":1316,"t":"Example","u":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","h":"#example","p":1310},{"i":1320,"t":"Description","u":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","h":"#description","p":1318},{"i":1322,"t":"Format","u":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","h":"#format","p":1318},{"i":1324,"t":"Example","u":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","h":"#example","p":1318},{"i":1327,"t":"Description","u":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","h":"#description","p":1326},{"i":1329,"t":"Format","u":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","h":"#format","p":1326},{"i":1331,"t":"Example","u":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","h":"#example","p":1326},{"i":1335,"t":"Description","u":"/ecalc/docs/about/references/keywords/PUMPS","h":"#description","p":1333},{"i":1337,"t":"Format","u":"/ecalc/docs/about/references/keywords/PUMPS","h":"#format","p":1333},{"i":1339,"t":"Example 1","u":"/ecalc/docs/about/references/keywords/PUMPS","h":"#example-1","p":1333},{"i":1341,"t":"Example 2 (Detailed)","u":"/ecalc/docs/about/references/keywords/PUMPS","h":"#example-2-detailed","p":1333},{"i":1345,"t":"Description","u":"/ecalc/docs/about/references/keywords/RATE","h":"#description","p":1343},{"i":1347,"t":"Format","u":"/ecalc/docs/about/references/keywords/RATE","h":"#format","p":1343},{"i":1349,"t":"Example","u":"/ecalc/docs/about/references/keywords/RATE","h":"#example","p":1343},{"i":1351,"t":"Use in EMISSION for VENTING_EMITTERS (from eCalc v8.8)","u":"/ecalc/docs/about/references/keywords/RATE","h":"#use-in-emission-for-venting_emitters-from-ecalc-v88","p":1343},{"i":1352,"t":"Format","u":"/ecalc/docs/about/references/keywords/RATE","h":"#format-1","p":1343},{"i":1354,"t":"Example","u":"/ecalc/docs/about/references/keywords/RATE","h":"#example-1","p":1343},{"i":1357,"t":"Description","u":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","h":"#description","p":1356},{"i":1359,"t":"Format","u":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","h":"#format","p":1356},{"i":1361,"t":"Example","u":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","h":"#example","p":1356},{"i":1365,"t":"Description","u":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","h":"#description","p":1363},{"i":1367,"t":"Format","u":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","h":"#format","p":1363},{"i":1369,"t":"Example","u":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","h":"#example","p":1363},{"i":1373,"t":"Description","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#description","p":1371},{"i":1375,"t":"Use in a DIRECT ENERGY USAGE MODEL","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#use-in-a-direct-energy-usage-model","p":1371},{"i":1377,"t":"Reporting","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#reporting","p":1371},{"i":1379,"t":"Format","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#format","p":1371},{"i":1381,"t":"Example","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#example","p":1371},{"i":1382,"t":"Constant regularity","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#constant-regularity","p":1371},{"i":1384,"t":"Regularity from time series data","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#regularity-from-time-series-data","p":1371},{"i":1386,"t":"Special: Combining calendar and stream day rates","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#special-combining-calendar-and-stream-day-rates","p":1371},{"i":1390,"t":"Description","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#description","p":1388},{"i":1392,"t":"Format","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#format","p":1388},{"i":1394,"t":"Use in VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#use-in-variable_speed_compressor_train_multiple_streams_and_pressures","p":1388},{"i":1396,"t":"Format","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#format-1","p":1388},{"i":1398,"t":"Example","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#example","p":1388},{"i":1402,"t":"Description","u":"/ecalc/docs/about/references/keywords/START","h":"#description","p":1400},{"i":1404,"t":"Format","u":"/ecalc/docs/about/references/keywords/START","h":"#format","p":1400},{"i":1406,"t":"Example","u":"/ecalc/docs/about/references/keywords/START","h":"#example","p":1400},{"i":1410,"t":"Description","u":"/ecalc/docs/about/references/keywords/STREAM","h":"#description","p":1408},{"i":1412,"t":"Format","u":"/ecalc/docs/about/references/keywords/STREAM","h":"#format","p":1408},{"i":1414,"t":"Example","u":"/ecalc/docs/about/references/keywords/STREAM","h":"#example","p":1408},{"i":1418,"t":"Description","u":"/ecalc/docs/about/references/keywords/STREAMS","h":"#description","p":1416},{"i":1420,"t":"Format","u":"/ecalc/docs/about/references/keywords/STREAMS","h":"#format","p":1416},{"i":1422,"t":"Example","u":"/ecalc/docs/about/references/keywords/STREAMS","h":"#example","p":1416},{"i":1426,"t":"Description","u":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","h":"#description","p":1424},{"i":1428,"t":"Format","u":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","h":"#format","p":1424},{"i":1430,"t":"Example","u":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","h":"#example","p":1424},{"i":1434,"t":"Description","u":"/ecalc/docs/about/references/keywords/TIME_SERIES","h":"#description","p":1432},{"i":1436,"t":"Required attributes","u":"/ecalc/docs/about/references/keywords/TIME_SERIES","h":"#required-attributes","p":1432},{"i":1438,"t":"Attributes dependent on time series type","u":"/ecalc/docs/about/references/keywords/TIME_SERIES","h":"#attributes-dependent-on-time-series-type","p":1432},{"i":1440,"t":"Example","u":"/ecalc/docs/about/references/keywords/TIME_SERIES","h":"#example","p":1432},{"i":1444,"t":"Description","u":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","h":"#description","p":1442},{"i":1446,"t":"Format","u":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","h":"#format","p":1442},{"i":1448,"t":"Example","u":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","h":"#example","p":1442},{"i":1451,"t":"Description","u":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","h":"#description","p":1450},{"i":1453,"t":"Format","u":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","h":"#format","p":1450},{"i":1455,"t":"Example","u":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","h":"#example","p":1450},{"i":1458,"t":"Description","u":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","h":"#description","p":1457},{"i":1460,"t":"Format","u":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","h":"#format","p":1457},{"i":1462,"t":"Example","u":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","h":"#example","p":1457},{"i":1465,"t":"Description","u":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","h":"#description","p":1464},{"i":1467,"t":"Format","u":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","h":"#format","p":1464},{"i":1469,"t":"Example","u":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","h":"#example","p":1464},{"i":1473,"t":"Description","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#description","p":1471},{"i":1475,"t":"Use in FACILITY_INPUTS","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#use-in-facility_inputs","p":1471},{"i":1477,"t":"Use in TIME_SERIES","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#use-in-time_series","p":1471},{"i":1479,"t":"Use in ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#use-in-energy_usage_model","p":1471},{"i":1481,"t":"Use in MODELS","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#use-in-models","p":1471},{"i":1483,"t":"Format","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#format","p":1471},{"i":1486,"t":"Description","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#description","p":1485},{"i":1488,"t":"Format","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#format","p":1485},{"i":1489,"t":"Pumps","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#pumps","p":1485},{"i":1491,"t":"Compressors","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#compressors","p":1485},{"i":1493,"t":"Example","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#example","p":1485},{"i":1494,"t":"Pumps","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#pumps-1","p":1485},{"i":1496,"t":"Compressors","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#compressors-1","p":1485}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/3",[0,2.437]],["t/5",[1,2.156]],["t/7",[2,2.057]],["t/11",[0,2.437]],["t/13",[1,2.156]],["t/15",[2,2.057]],["t/19",[0,2.437]],["t/21",[1,2.156]],["t/23",[2,2.057]],["t/27",[0,2.437]],["t/29",[1,2.156]],["t/31",[2,2.057]],["t/35",[0,2.437]],["t/37",[1,2.156]],["t/39",[2,2.057]],["t/43",[0,2.437]],["t/45",[1,2.156]],["t/47",[2,2.057]],["t/51",[3,4.928,4,5.733]],["t/52",[5,3.399,6,4.34]],["t/54",[7,5.733,8,5.733]],["t/58",[5,4.354]],["t/60",[5,3.399,9,3.203]],["t/62",[5,3.399,9,3.203]],["t/66",[2,1.606,10,4.204]],["t/70",[11,5.733,12,4.928]],["t/72",[12,2.625,13,2.796,14,2.796,15,1.872,16,3.054,17,3.054]],["t/74",[5,1.811,12,2.625,13,2.796,14,2.796,18,3.054,19,3.054]],["t/76",[20,5.248,21,5.248]],["t/78",[22,4.042,23,4.702,24,4.702]],["t/80",[20,5.248,21,5.248]],["t/89",[15,3.514,25,4.34]],["t/90",[25,4.34,26,4.499]],["t/92",[27,5.733,28,4.928]],["t/94",[6,4.34,25,4.34]],["t/98",[15,3.514,25,4.34]],["t/99",[25,4.34,26,4.499]],["t/101",[29,3.35,30,2.558,31,3.69]],["t/103",[28,1.944,32,1.712,33,2.262,34,2.262,35,1.612,36,2.262,37,2.262,38,2.07,39,1.532]],["t/105",[40,2.266,41,2.476,42,1.943,43,1.764,44,1.943,45,2.476,46,2.476,47,2.476]],["t/107",[48,2.735,49,1.812,50,2.351,51,2.735,52,2.735,53,2.351,54,2.07]],["t/111",[55,3.849]],["t/112",[15,4.501]],["t/114",[56,6.722]],["t/115",[9,1.707,29,2.176,57,2.796,58,2.625,59,3.054,60,3.054]],["t/117",[30,1.488,61,2.735,62,3.71,63,2.735,64,2.735,65,2.735]],["t/119",[39,3.186,50,4.042,66,4.304]],["t/121",[39,3.186,66,4.304,67,4.702]],["t/123",[68,3.846,69,4.304,70,4.702]],["t/125",[71,7.343]],["t/126",[72,7.343]],["t/133",[73,7.343]],["t/139",[15,3.514,25,4.34]],["t/140",[29,3.35,30,2.558,74,4.304]],["t/144",[5,2.363,75,3.986,76,3.986,77,3.986]],["t/146",[78,5.733,79,4.34]],["t/152",[0,2.437]],["t/154",[1,2.156]],["t/156",[80,4.975]],["t/158",[2,2.057]],["t/162",[0,2.437]],["t/164",[35,4.085,81,4.499]],["t/168",[0,2.437]],["t/170",[9,3.203,82,5.248]],["t/172",[9,3.203,68,4.689]],["t/174",[1,2.156]],["t/176",[2,2.057]],["t/177",[9,3.203,82,5.248]],["t/179",[9,3.203,68,4.689]],["t/183",[0,2.437]],["t/185",[1,2.156]],["t/187",[2,2.057]],["t/190",[0,2.437]],["t/192",[1,2.156]],["t/194",[2,2.057]],["t/198",[0,2.437]],["t/200",[1,2.156]],["t/202",[2,2.057]],["t/206",[0,2.437]],["t/208",[1,2.156]],["t/210",[2,2.057]],["t/214",[0,2.437]],["t/218",[0,2.437]],["t/220",[1,2.156]],["t/222",[2,2.057]],["t/226",[0,2.437]],["t/228",[1,2.156]],["t/230",[2,2.057]],["t/234",[0,2.437]],["t/236",[1,2.156]],["t/238",[2,2.057]],["t/239",[10,4.204,83,5.733]],["t/241",[43,4.085,84,5.248]],["t/243",[2,1.606,85,4.499]],["t/247",[0,2.437]],["t/249",[1,2.156]],["t/251",[2,2.057]],["t/255",[0,2.437]],["t/258",[0,2.437]],["t/260",[1,2.156]],["t/261",[86,4.161]],["t/263",[87,5.762]],["t/265",[2,2.057]],["t/266",[86,4.161]],["t/270",[0,2.437]],["t/272",[1,2.156]],["t/274",[2,2.057]],["t/278",[0,2.437]],["t/282",[0,2.437]],["t/284",[1,2.156]],["t/286",[80,4.975]],["t/288",[2,2.057]],["t/292",[0,2.437]],["t/294",[9,3.203,55,3.005]],["t/296",[9,3.203,88,4.689]],["t/300",[0,2.437]],["t/302",[1,2.156]],["t/304",[2,2.057]],["t/308",[0,2.437]],["t/310",[1,2.156]],["t/312",[2,2.057]],["t/315",[0,2.437]],["t/317",[1,2.156]],["t/319",[2,0.856,29,2.176,89,2.625,90,2.796,91,2.796,92,3.054]],["t/321",[2,0.856,32,2.312,89,2.625,90,2.796,93,2.796,94,2.796]],["t/323",[2,0.856,40,2.796,89,2.625,91,2.796,93,2.796,94,2.796]],["t/327",[0,2.437]],["t/329",[1,2.156]],["t/331",[2,2.057]],["t/335",[0,2.437]],["t/338",[49,3.798,95,3.119]],["t/339",[96,4.048]],["t/340",[30,3.119,97,3.578]],["t/343",[0,1.148,5,2.05,98,3.166,99,3.458,100,3.458]],["t/345",[1,2.156]],["t/347",[2,2.057]],["t/349",[0,1.323,5,2.363,98,3.648,101,3.986]],["t/351",[1,2.156]],["t/353",[2,2.057]],["t/357",[95,3.995]],["t/359",[96,4.048]],["t/361",[6,5.559]],["t/364",[102,3.986,103,3.986,104,3.986,105,3.426]],["t/365",[96,3.16,106,4.085]],["t/367",[107,5.232]],["t/369",[108,3.979,109,3.979]],["t/371",[110,3.884,111,4.085]],["t/373",[112,3.986,113,2.84,114,3.648,115,3.986]],["t/374",[30,2.558,97,2.934,116,3.56]],["t/376",[95,3.995]],["t/378",[96,3.16,106,4.085]],["t/380",[107,5.232]],["t/382",[108,3.979,109,3.979]],["t/384",[110,3.884,111,4.085]],["t/386",[117,6.312]],["t/388",[118,4.499,119,4.499]],["t/390",[113,2.84,114,3.648,120,3.648,121,3.426]],["t/391",[96,3.16,106,4.085]],["t/393",[107,5.232]],["t/395",[108,3.979,109,3.979]],["t/397",[110,3.884,111,4.085]],["t/399",[118,4.499,119,4.499]],["t/401",[120,6.722]],["t/402",[30,2.558,97,2.934,116,3.56]],["t/404",[105,3.426,113,2.84,122,3.986,123,3.986]],["t/405",[30,2.558,97,2.934,116,3.56]],["t/407",[95,3.995]],["t/409",[96,3.16,106,4.085]],["t/411",[107,5.232]],["t/413",[108,3.979,109,3.979]],["t/415",[110,3.884,111,4.085]],["t/417",[113,2.84,124,3.986,125,3.986,126,3.986]],["t/418",[95,3.995]],["t/420",[96,3.16,106,4.085]],["t/422",[107,5.232]],["t/424",[108,3.979,109,3.979]],["t/426",[110,3.884,111,4.085]],["t/428",[113,2.84,127,3.986,128,3.648,129,3.986]],["t/429",[95,3.995]],["t/431",[96,3.16,106,4.085]],["t/433",[107,5.232]],["t/435",[108,3.979,109,3.979]],["t/437",[110,3.884,111,4.085]],["t/439",[105,3.426,113,2.84,130,3.986,131,3.986]],["t/440",[30,2.558,97,2.934,116,3.56]],["t/442",[95,3.995]],["t/444",[96,3.16,106,4.085]],["t/446",[107,5.232]],["t/448",[108,3.979,109,3.979]],["t/450",[110,3.884,111,4.085]],["t/452",[117,6.312]],["t/454",[118,4.499,119,4.499]],["t/456",[113,2.84,121,3.426,132,3.986,133,3.986]],["t/457",[96,3.16,106,4.085]],["t/459",[118,4.499,119,4.499]],["t/461",[117,6.312]],["t/463",[110,3.884,111,4.085]],["t/465",[107,5.232]],["t/467",[108,3.979,109,3.979]],["t/469",[113,2.84,121,3.426,128,3.648,134,3.986]],["t/470",[108,3.979,109,3.979]],["t/472",[118,4.499,119,4.499]],["t/475",[95,3.995]],["t/477",[6,5.559]],["t/480",[95,3.995]],["t/482",[96,4.048]],["t/485",[95,3.995]],["t/487",[96,4.048]],["t/490",[95,3.995]],["t/492",[96,4.048]],["t/494",[6,5.559]],["t/497",[95,3.995]],["t/499",[96,4.048]],["t/502",[30,3.119,97,3.578]],["t/506",[49,3.798,95,3.119]],["t/508",[95,3.119,135,5.733]],["t/510",[30,3.119,97,3.578]],["t/512",[15,4.501]],["t/514",[6,5.559]],["t/518",[49,3.798,95,3.119]],["t/520",[30,3.119,97,3.578]],["t/522",[15,2.12,39,2.343,116,2.618,136,2.4,137,2.829]],["t/524",[50,4.928,138,5.733]],["t/528",[49,3.798,95,3.119]],["t/530",[96,4.048]],["t/534",[49,3.798,95,3.119]],["t/536",[96,4.048]],["t/538",[30,3.119,97,3.578]],["t/540",[15,2.12,39,2.343,116,2.618,136,2.4,137,2.829]],["t/544",[15,2.882,26,3.69,55,2.464]],["t/546",[31,5.762]],["t/548",[139,6.006]],["t/550",[140,6.312]],["t/552",[55,3.849]],["t/554",[141,5.097]],["t/556",[142,5.762]],["t/558",[142,5.762]],["t/560",[142,4.499,143,5.733]],["t/562",[88,6.006]],["t/564",[5,2.363,15,2.443,55,2.089,85,3.127]],["t/566",[39,3.884,136,3.979]],["t/572",[0,2.437]],["t/574",[10,2.922,55,2.089,144,3.986,145,3.26]],["t/578",[0,2.437]],["t/580",[1,2.156]],["t/582",[2,2.057]],["t/586",[0,2.437]],["t/588",[1,2.156]],["t/590",[2,2.057]],["t/593",[49,3.798,95,3.119]],["t/595",[96,4.048]],["t/597",[30,3.119,97,3.578]],["t/599",[49,3.798,95,3.119]],["t/601",[96,4.048]],["t/603",[30,3.119,97,3.578]],["t/606",[49,3.798,95,3.119]],["t/608",[96,4.048]],["t/610",[30,3.119,97,3.578]],["t/613",[49,3.798,95,3.119]],["t/615",[96,4.048]],["t/617",[30,3.119,97,3.578]],["t/620",[49,3.798,95,3.119]],["t/622",[96,4.048]],["t/623",[30,3.119,97,3.578]],["t/626",[146,6.722]],["t/628",[147,6.722]],["t/630",[148,7.343]],["t/632",[22,4.928,95,3.119]],["t/636",[149,5.733,150,5.248]],["t/638",[150,5.248,151,5.733]],["t/642",[146,6.722]],["t/644",[147,6.722]],["t/646",[30,3.119,152,5.733]],["t/648",[153,4.702,154,4.042,155,4.042]],["t/650",[110,3.884,156,5.733]],["t/652",[157,7.343]],["t/654",[154,4.928,155,4.928]],["t/656",[1,1.38,158,3.69,159,4.304]],["t/658",[160,7.343]],["t/660",[110,3.884,161,5.733]],["t/666",[58,4.042,158,3.69,162,4.702]],["t/668",[9,3.203,158,4.499]],["t/670",[158,3.69,163,4.702,164,4.304]],["t/672",[158,4.499,165,5.733]],["t/674",[166,5.733,167,5.248]],["t/676",[167,3.648,168,3.986,169,3.986,170,3.986]],["t/678",[30,2.558,171,4.702,172,4.042]],["t/680",[30,2.558,172,4.042,173,4.304]],["t/682",[30,2.558,174,4.702,175,4.702]],["t/684",[39,3.884,176,5.733]],["t/686",[30,3.119,159,5.248]],["t/688",[30,2.558,172,4.042,173,4.304]],["t/690",[2,1.606,177,4.928]],["t/691",[154,4.928,155,4.928]],["t/693",[164,5.248,178,5.733]],["t/697",[15,2.882,26,3.69,55,2.464]],["t/699",[31,5.762]],["t/701",[139,6.006]],["t/703",[55,3.849]],["t/705",[140,6.312]],["t/707",[142,5.762]],["t/709",[179,6.722]],["t/711",[55,3.005,85,4.499]],["t/713",[42,4.499,136,3.979]],["t/714",[137,4.689,180,4.928]],["t/716",[137,4.689,181,5.733]],["t/720",[15,2.882,26,3.69,55,2.464]],["t/722",[31,5.762]],["t/724",[139,6.006]],["t/726",[140,6.312]],["t/728",[141,5.097]],["t/730",[142,5.762]],["t/732",[179,6.722]],["t/734",[182,7.343]],["t/736",[88,6.006]],["t/738",[5,2.363,15,2.443,55,2.089,85,3.127]],["t/740",[39,3.884,136,3.979]],["t/746",[1,2.156]],["t/748",[35,4.085,81,4.499]],["t/752",[183,6.722]],["t/754",[1,1.38,136,3.264,180,4.042]],["t/756",[2,1.606,184,5.248]],["t/758",[80,3.186,185,3.69,186,3.69]],["t/761",[187,7.343]],["t/765",[188,7.343]],["t/767",[80,3.884,185,4.499]],["t/769",[1,2.156]],["t/771",[189,7.343]],["t/772",[0,2.437]],["t/774",[80,3.884,185,4.499]],["t/776",[1,2.156]],["t/778",[2,2.057]],["t/782",[1,2.156]],["t/784",[39,2.069,80,2.069,86,1.731,185,2.397,190,3.054,191,3.054]],["t/786",[186,5.762]],["t/788",[2,1.606,184,5.248]],["t/789",[2,1.606,192,5.733]],["t/791",[2,1.606,193,5.733]],["t/795",[80,3.186,185,3.69,186,3.69]],["t/797",[2,2.057]],["t/801",[39,3.186,194,4.702,195,4.702]],["t/803",[2,2.057]],["t/804",[1,1.38,2,1.317,15,2.882]],["t/806",[2,1.606,85,4.499]],["t/810",[57,5.248,196,5.733]],["t/812",[2,2.057]],["t/813",[28,2.973,42,2.714,136,2.4,197,2.973,198,3.458]],["t/815",[55,2.464,62,3.846,199,4.702]],["t/819",[1,2.156]],["t/821",[2,2.057]],["t/825",[43,3.35,44,3.69,200,4.304]],["t/827",[43,2.84,55,2.089,201,3.648,202,3.986]],["t/829",[1,2.156]],["t/831",[2,2.057]],["t/832",[54,4.34,69,5.248]],["t/834",[43,3.35,44,3.69,200,4.304]],["t/836",[43,4.085,201,5.248]],["t/842",[1,2.156]],["t/844",[2,2.057]],["t/848",[1,2.156]],["t/850",[2,2.057]],["t/854",[1,2.156]],["t/860",[1,2.156]],["t/862",[183,5.248,203,4.928]],["t/863",[0,2.437]],["t/865",[1,2.156]],["t/867",[204,5.733,205,5.733]],["t/868",[0,2.437]],["t/870",[2,2.057]],["t/872",[206,5.733,207,5.248]],["t/873",[0,2.437]],["t/875",[2,1.116,54,3.017,58,3.426,207,3.648]],["t/879",[10,2.922,55,2.089,87,3.127,145,3.26]],["t/881",[1,2.156]],["t/883",[2,2.057]],["t/885",[186,5.762]],["t/887",[10,2.922,55,2.089,145,3.26,208,3.986]],["t/889",[1,2.156]],["t/891",[2,2.057]],["t/893",[186,5.762]],["t/897",[1,2.156]],["t/899",[2,2.057]],["t/901",[35,3.35,136,3.264,209,4.702]],["t/905",[1,2.156]],["t/907",[35,4.085,81,4.499]],["t/913",[86,1.731,210,2.498,211,2.498,212,2.625,213,2.312,214,2.176]],["t/915",[1,2.156]],["t/917",[2,2.057]],["t/919",[86,1.731,141,2.12,210,2.498,211,2.498,213,2.312,214,2.176]],["t/921",[1,2.156]],["t/923",[2,2.057]],["t/925",[54,2.312,86,1.731,214,2.176,215,2.498,216,2.625,217,2.625]],["t/927",[1,2.156]],["t/929",[2,2.057]],["t/931",[2,2.057]],["t/933",[42,1.943,54,1.874,86,1.403,136,1.719,214,1.764,216,2.128,217,2.128,218,2.476]],["t/935",[1,2.156]],["t/937",[2,2.057]],["t/939",[79,2.07,86,1.55,141,1.898,213,2.07,214,1.949,219,2.735,220,2.735]],["t/941",[1,2.156]],["t/947",[1,2.156]],["t/949",[55,1.433,86,2.57,221,2.351,222,2.005,223,2.735,224,2.237]],["t/951",[55,1.298,86,2.365,221,2.128,222,1.816,224,2.025,225,2.128,226,2.266]],["t/953",[2,2.057]],["t/954",[86,2.039,141,1.445,210,1.703,211,1.703,212,1.789,213,1.576,214,1.483,227,1.789,228,1.703]],["t/956",[53,1.657,54,1.46,86,1.908,212,1.657,214,1.374,215,1.577,216,1.657,217,1.657,228,1.577,229,1.928]],["t/958",[86,1.093,214,1.374,215,1.577,222,1.414,224,2.754,225,1.657,230,1.928,231,1.928,232,1.928,233,1.928]],["t/960",[86,1.96,222,2.536,224,2.829,225,2.973,226,3.166]],["t/964",[1,2.156]],["t/970",[1,2.156]],["t/972",[10,4.204,234,5.248]],["t/974",[235,7.343]],["t/976",[79,3.56,96,2.592,236,3.846]],["t/978",[2,2.057]],["t/981",[237,7.343]],["t/983",[5,2.788,55,2.464,79,3.56]],["t/985",[3,2.973,79,2.618,236,2.829,238,3.458,239,3.166]],["t/987",[3,2.973,79,2.618,236,2.829,239,3.166,240,3.458]],["t/991",[9,1.932,55,1.812,215,2.829,227,2.973,228,2.829]],["t/993",[1,2.156]],["t/995",[2,2.057]],["t/997",[55,1.812,210,2.829,227,2.973,228,2.829,241,3.458]],["t/999",[1,2.156]],["t/1001",[2,2.057]],["t/1005",[1,2.156]],["t/1007",[2,2.057]],["t/1009",[38,2.796,53,2.625,55,1.601,86,1.731,197,2.625,222,2.24]],["t/1011",[1,2.156]],["t/1013",[2,2.057]],["t/1017",[35,4.085,81,4.499]],["t/1019",[1,2.156]],["t/1021",[80,4.975]],["t/1023",[2,2.057]],["t/1027",[141,3.979,211,4.689]],["t/1029",[1,2.156]],["t/1031",[2,2.057]],["t/1033",[9,3.203,141,3.979]],["t/1035",[2,2.057]],["t/1046",[221,3.426,242,3.986,243,3.986,244,3.986]],["t/1048",[177,6.312]],["t/1049",[177,4.928,245,5.733]],["t/1050",[80,3.186,246,4.702,247,4.702]],["t/1052",[180,4.928,248,5.248]],["t/1054",[248,5.248,249,5.733]],["t/1056",[250,7.343]],["t/1058",[251,7.343]],["t/1065",[5,3.399,252,5.733]],["t/1067",[5,3.399,253,5.733]],["t/1069",[5,3.399,254,4.928]],["t/1071",[5,2.788,56,4.304,254,4.042]],["t/1073",[5,2.788,15,2.882,254,4.042]],["t/1077",[234,4.304,255,4.702,256,4.702]],["t/1081",[0,2.437]],["t/1083",[1,2.156]],["t/1085",[2,2.057]],["t/1089",[0,2.437]],["t/1091",[1,2.156]],["t/1093",[2,2.057]],["t/1097",[0,2.437]],["t/1099",[1,2.156]],["t/1101",[2,2.057]],["t/1105",[0,2.437]],["t/1107",[1,2.156]],["t/1109",[2,2.057]],["t/1113",[0,2.437]],["t/1115",[1,2.156]],["t/1117",[2,1.606,29,4.085]],["t/1119",[2,1.317,32,3.56,257,4.304]],["t/1123",[0,2.437]],["t/1125",[1,2.156]],["t/1127",[2,2.057]],["t/1131",[0,2.437]],["t/1133",[1,2.156]],["t/1137",[0,2.437]],["t/1139",[1,2.156]],["t/1141",[2,2.057]],["t/1145",[0,2.437]],["t/1147",[1,2.156]],["t/1149",[2,2.057]],["t/1153",[0,2.437]],["t/1155",[1,2.156]],["t/1157",[2,2.057]],["t/1161",[0,2.437]],["t/1163",[9,1.707,55,1.601,86,1.731,141,2.12,213,2.312,222,2.24]],["t/1164",[1,2.156]],["t/1166",[2,2.057]],["t/1168",[9,1.264,55,1.185,86,1.282,141,1.57,213,1.712,222,1.658,236,1.85,258,2.262,259,2.07]],["t/1169",[1,2.156]],["t/1171",[2,2.057]],["t/1175",[0,2.437]],["t/1177",[1,2.156]],["t/1179",[2,2.057]],["t/1183",[0,2.437]],["t/1185",[2,2.057]],["t/1188",[0,2.437]],["t/1190",[1,2.156]],["t/1192",[2,2.057]],["t/1195",[0,2.437]],["t/1197",[1,2.156]],["t/1199",[2,2.057]],["t/1203",[0,2.437]],["t/1205",[1,2.156]],["t/1207",[2,2.057]],["t/1211",[0,2.437]],["t/1213",[1,2.156]],["t/1215",[2,2.057]],["t/1219",[0,2.437]],["t/1221",[1,2.156]],["t/1223",[2,2.057]],["t/1226",[0,2.437]],["t/1228",[1,2.156]],["t/1229",[86,4.161]],["t/1231",[87,5.762]],["t/1233",[2,2.057]],["t/1237",[0,2.437]],["t/1239",[1,2.156]],["t/1241",[2,2.057]],["t/1242",[2,1.606,29,4.085]],["t/1244",[2,1.606,32,4.34]],["t/1247",[0,2.437]],["t/1249",[1,2.156]],["t/1251",[2,2.057]],["t/1255",[0,2.437]],["t/1257",[203,6.312]],["t/1259",[1,2.156]],["t/1263",[0,2.437]],["t/1265",[203,6.312]],["t/1267",[1,2.156]],["t/1269",[2,2.057]],["t/1273",[0,2.437]],["t/1275",[1,2.156]],["t/1277",[35,3.35,55,2.464,81,3.69]],["t/1281",[0,2.437]],["t/1283",[1,2.156]],["t/1285",[2,2.057]],["t/1289",[0,2.437]],["t/1291",[62,6.006]],["t/1293",[260,7.343]],["t/1295",[261,7.343]],["t/1297",[262,7.343]],["t/1299",[263,7.343]],["t/1301",[264,7.343]],["t/1303",[2,1.606,29,4.085]],["t/1305",[2,1.606,32,4.34]],["t/1307",[1,2.156]],["t/1308",[2,2.057]],["t/1312",[0,2.437]],["t/1314",[1,2.156]],["t/1316",[2,2.057]],["t/1320",[0,2.437]],["t/1322",[1,2.156]],["t/1324",[2,2.057]],["t/1327",[0,2.437]],["t/1329",[1,2.156]],["t/1331",[2,2.057]],["t/1335",[0,2.437]],["t/1337",[1,2.156]],["t/1339",[2,1.606,29,4.085]],["t/1341",[2,1.317,32,3.56,257,4.304]],["t/1345",[0,2.437]],["t/1347",[1,2.156]],["t/1349",[2,2.057]],["t/1351",[5,2.05,9,1.932,68,2.829,74,3.166,265,3.458]],["t/1352",[1,2.156]],["t/1354",[2,2.057]],["t/1357",[0,2.437]],["t/1359",[1,2.156]],["t/1361",[2,2.057]],["t/1365",[0,2.437]],["t/1367",[1,2.156]],["t/1369",[2,2.057]],["t/1373",[0,2.437]],["t/1375",[9,1.932,10,2.536,55,1.812,145,2.829,266,3.458]],["t/1377",[267,7.343]],["t/1379",[1,2.156]],["t/1381",[2,2.057]],["t/1382",[268,5.733,269,5.248]],["t/1384",[42,3.127,43,2.84,44,3.127,269,3.648]],["t/1386",[22,2.625,62,2.498,197,2.625,259,2.796,270,3.054,271,3.054]],["t/1390",[0,2.437]],["t/1392",[1,2.156]],["t/1394",[9,3.203,272,5.733]],["t/1396",[1,2.156]],["t/1398",[2,2.057]],["t/1402",[0,2.437]],["t/1404",[1,2.156]],["t/1406",[2,2.057]],["t/1410",[0,2.437]],["t/1412",[1,2.156]],["t/1414",[2,2.057]],["t/1418",[0,2.437]],["t/1420",[1,2.156]],["t/1422",[2,2.057]],["t/1426",[0,2.437]],["t/1428",[1,2.156]],["t/1430",[2,2.057]],["t/1434",[0,2.437]],["t/1436",[80,3.884,273,5.248]],["t/1438",[35,2.464,43,2.464,44,2.714,84,3.166,273,3.166]],["t/1440",[2,2.057]],["t/1444",[0,2.437]],["t/1446",[1,2.156]],["t/1448",[2,2.057]],["t/1451",[0,2.437]],["t/1453",[1,2.156]],["t/1455",[2,2.057]],["t/1458",[0,2.437]],["t/1460",[1,2.156]],["t/1462",[2,2.057]],["t/1465",[0,2.437]],["t/1467",[1,2.156]],["t/1469",[2,2.057]],["t/1473",[0,2.437]],["t/1475",[9,3.203,139,4.689]],["t/1477",[9,3.203,31,4.499]],["t/1479",[9,3.203,88,4.689]],["t/1481",[9,3.203,55,3.005]],["t/1483",[1,2.156]],["t/1486",[0,2.437]],["t/1488",[1,2.156]],["t/1489",[87,5.762]],["t/1491",[86,4.161]],["t/1493",[2,2.057]],["t/1494",[87,5.762]],["t/1496",[86,4.161]]],"invertedIndex":[["",{"_index":116,"t":{"374":{"position":[[0,1]]},"402":{"position":[[0,1]]},"405":{"position":[[0,1]]},"440":{"position":[[0,1]]},"522":{"position":[[12,1]]},"540":{"position":[[12,1]]}}}],["01",{"_index":104,"t":{"364":{"position":[[12,2]]}}}],["05",{"_index":121,"t":{"390":{"position":[[15,3]]},"456":{"position":[[12,2]]},"469":{"position":[[12,2]]}}}],["08",{"_index":131,"t":{"439":{"position":[[12,2]]}}}],["09",{"_index":128,"t":{"428":{"position":[[12,2]]},"469":{"position":[[15,3]]}}}],["1",{"_index":29,"t":{"101":{"position":[[0,2]]},"115":{"position":[[33,1]]},"140":{"position":[[0,2]]},"319":{"position":[[8,1]]},"1117":{"position":[[8,1]]},"1242":{"position":[[8,1]]},"1303":{"position":[[8,2]]},"1339":{"position":[[8,1]]}}}],["10",{"_index":125,"t":{"417":{"position":[[12,2]]}}}],["11",{"_index":105,"t":{"364":{"position":[[15,3]]},"404":{"position":[[12,2]]},"439":{"position":[[15,3]]}}}],["12",{"_index":114,"t":{"373":{"position":[[12,2]]},"390":{"position":[[12,2]]}}}],["1d",{"_index":192,"t":{"789":{"position":[[0,2]]}}}],["2",{"_index":32,"t":{"103":{"position":[[0,2]]},"321":{"position":[[8,1]]},"1119":{"position":[[8,1]]},"1244":{"position":[[8,1]]},"1305":{"position":[[8,2]]},"1341":{"position":[[8,1]]}}}],["2023",{"_index":113,"t":{"373":{"position":[[6,5]]},"390":{"position":[[6,5]]},"404":{"position":[[6,5]]},"417":{"position":[[6,5]]},"428":{"position":[[6,5]]},"439":{"position":[[6,5]]},"456":{"position":[[6,5]]},"469":{"position":[[6,5]]}}}],["2024",{"_index":103,"t":{"364":{"position":[[6,5]]}}}],["21",{"_index":123,"t":{"404":{"position":[[15,3]]}}}],["25",{"_index":129,"t":{"428":{"position":[[15,3]]}}}],["27",{"_index":115,"t":{"373":{"position":[[15,3]]}}}],["28",{"_index":133,"t":{"456":{"position":[[15,3]]}}}],["3",{"_index":40,"t":{"105":{"position":[[0,2]]},"323":{"position":[[8,1]]}}}],["30",{"_index":126,"t":{"417":{"position":[[15,3]]}}}],["3d",{"_index":193,"t":{"791":{"position":[[0,2]]}}}],["4",{"_index":48,"t":{"107":{"position":[[0,2]]}}}],["8.2.1",{"_index":134,"t":{"469":{"position":[[0,5]]}}}],["8.2.2",{"_index":132,"t":{"456":{"position":[[0,5]]}}}],["8.3.0",{"_index":130,"t":{"439":{"position":[[0,5]]}}}],["8.4.0",{"_index":127,"t":{"428":{"position":[[0,5]]}}}],["8.5.0",{"_index":124,"t":{"417":{"position":[[0,5]]}}}],["8.6.0",{"_index":122,"t":{"404":{"position":[[0,5]]}}}],["8.7",{"_index":99,"t":{"343":{"position":[[14,3]]}}}],["8.7.0",{"_index":120,"t":{"390":{"position":[[0,5]]},"401":{"position":[[0,5]]}}}],["8.8",{"_index":101,"t":{"349":{"position":[[19,4]]}}}],["8.8.0",{"_index":112,"t":{"373":{"position":[[0,5]]}}}],["8.9.0",{"_index":102,"t":{"364":{"position":[[0,5]]}}}],["add",{"_index":176,"t":{"684":{"position":[[0,3]]}}}],["addit",{"_index":199,"t":{"815":{"position":[[9,10]]}}}],["adjust",{"_index":82,"t":{"170":{"position":[[7,10]]},"177":{"position":[[7,10]]}}}],["allow",{"_index":47,"t":{"105":{"position":[[47,7]]}}}],["attent",{"_index":187,"t":{"761":{"position":[[0,9]]}}}],["attribut",{"_index":273,"t":{"1436":{"position":[[9,10]]},"1438":{"position":[[0,10]]}}}],["avail",{"_index":196,"t":{"810":{"position":[[0,9]]}}}],["averag",{"_index":65,"t":{"117":{"position":[[52,7]]}}}],["b",{"_index":143,"t":{"560":{"position":[[13,1]]}}}],["base",{"_index":60,"t":{"115":{"position":[[35,5]]}}}],["basic",{"_index":83,"t":{"239":{"position":[[0,5]]}}}],["befor",{"_index":100,"t":{"343":{"position":[[22,7]]}}}],["behaviour",{"_index":71,"t":{"125":{"position":[[0,9]]}}}],["between",{"_index":169,"t":{"676":{"position":[[7,7]]}}}],["boiler",{"_index":207,"t":{"872":{"position":[[12,7]]},"875":{"position":[[9,6]]}}}],["branch",{"_index":167,"t":{"674":{"position":[[16,6]]},"676":{"position":[[24,8]]}}}],["break",{"_index":97,"t":{"340":{"position":[[0,8]]},"374":{"position":[[2,8]]},"402":{"position":[[2,8]]},"405":{"position":[[2,8]]},"440":{"position":[[2,8]]},"502":{"position":[[0,8]]},"510":{"position":[[0,8]]},"520":{"position":[[0,8]]},"538":{"position":[[0,8]]},"597":{"position":[[0,8]]},"603":{"position":[[0,8]]},"610":{"position":[[0,8]]},"617":{"position":[[0,8]]},"623":{"position":[[0,8]]}}}],["bug",{"_index":106,"t":{"365":{"position":[[0,3]]},"378":{"position":[[0,3]]},"391":{"position":[[0,3]]},"409":{"position":[[0,3]]},"420":{"position":[[0,3]]},"431":{"position":[[0,3]]},"444":{"position":[[0,3]]},"457":{"position":[[0,3]]}}}],["calcul",{"_index":218,"t":{"933":{"position":[[43,10]]}}}],["calendar",{"_index":270,"t":{"1386":{"position":[[19,8]]}}}],["calibr",{"_index":251,"t":{"1058":{"position":[[0,11]]}}}],["categori",{"_index":51,"t":{"107":{"position":[[12,9]]}}}],["chang",{"_index":30,"t":{"101":{"position":[[3,7]]},"117":{"position":[[20,7]]},"140":{"position":[[3,7]]},"340":{"position":[[9,7]]},"374":{"position":[[11,7]]},"402":{"position":[[11,7]]},"405":{"position":[[11,7]]},"440":{"position":[[11,7]]},"502":{"position":[[9,7]]},"510":{"position":[[9,7]]},"520":{"position":[[9,7]]},"538":{"position":[[9,7]]},"597":{"position":[[9,7]]},"603":{"position":[[9,7]]},"610":{"position":[[9,7]]},"617":{"position":[[9,7]]},"623":{"position":[[9,7]]},"646":{"position":[[9,6]]},"678":{"position":[[6,7]]},"680":{"position":[[10,7]]},"682":{"position":[[16,7]]},"686":{"position":[[7,7]]},"688":{"position":[[5,7]]}}}],["charact",{"_index":23,"t":{"78":{"position":[[8,10]]}}}],["chart",{"_index":214,"t":{"913":{"position":[[37,5]]},"919":{"position":[[39,5]]},"925":{"position":[[19,5]]},"933":{"position":[[19,5]]},"939":{"position":[[51,5]]},"954":{"position":[[68,5]]},"956":{"position":[[63,5]]},"958":{"position":[[108,5]]}}}],["check",{"_index":174,"t":{"682":{"position":[[0,5]]}}}],["choke",{"_index":238,"t":{"985":{"position":[[27,7]]}}}],["choos",{"_index":4,"t":{"51":{"position":[[21,7]]}}}],["chore",{"_index":109,"t":{"369":{"position":[[14,6]]},"382":{"position":[[14,6]]},"395":{"position":[[14,6]]},"413":{"position":[[14,6]]},"424":{"position":[[14,6]]},"435":{"position":[[14,6]]},"448":{"position":[[14,6]]},"467":{"position":[[14,6]]},"470":{"position":[[14,6]]}}}],["cli",{"_index":6,"t":{"52":{"position":[[6,3]]},"94":{"position":[[0,3]]},"361":{"position":[[0,3]]},"477":{"position":[[0,3]]},"494":{"position":[[0,3]]},"514":{"position":[[0,3]]}}}],["clone",{"_index":163,"t":{"670":{"position":[[0,7]]}}}],["code",{"_index":110,"t":{"371":{"position":[[0,4]]},"384":{"position":[[0,4]]},"397":{"position":[[0,4]]},"415":{"position":[[0,4]]},"426":{"position":[[0,4]]},"437":{"position":[[0,4]]},"450":{"position":[[0,4]]},"463":{"position":[[0,4]]},"650":{"position":[[4,4]]},"660":{"position":[[0,4]]}}}],["column",{"_index":45,"t":{"105":{"position":[[29,7]]}}}],["combin",{"_index":197,"t":{"813":{"position":[[0,9]]},"1009":{"position":[[0,9]]},"1386":{"position":[[9,9]]}}}],["commit",{"_index":159,"t":{"656":{"position":[[4,6]]},"686":{"position":[[0,6]]}}}],["composit",{"_index":228,"t":{"954":{"position":[[84,11]]},"956":{"position":[[102,11]]},"991":{"position":[[29,11]]},"997":{"position":[[32,11]]}}}],["compressor",{"_index":86,"t":{"261":{"position":[[0,11]]},"266":{"position":[[0,11]]},"784":{"position":[[36,10]]},"913":{"position":[[26,10]]},"919":{"position":[[28,10]]},"925":{"position":[[8,10]]},"933":{"position":[[8,10]]},"939":{"position":[[40,10]]},"949":{"position":[[11,10],[45,10]]},"951":{"position":[[11,10],[57,10]]},"954":{"position":[[11,10],[57,10]]},"956":{"position":[[26,10],[52,10]]},"958":{"position":[[2,10]]},"960":{"position":[[2,10]]},"1009":{"position":[[12,10]]},"1163":{"position":[[22,10]]},"1168":{"position":[[22,10]]},"1229":{"position":[[0,11]]},"1491":{"position":[[0,11]]},"1496":{"position":[[0,11]]}}}],["compressor_tabular",{"_index":209,"t":{"901":{"position":[[0,18]]}}}],["condit",{"_index":72,"t":{"126":{"position":[[0,10]]}}}],["configur",{"_index":19,"t":{"74":{"position":[[36,13]]}}}],["constant",{"_index":268,"t":{"1382":{"position":[[0,8]]}}}],["consum",{"_index":249,"t":{"1054":{"position":[[0,8]]}}}],["continu",{"_index":118,"t":{"388":{"position":[[0,10]]},"399":{"position":[[0,10]]},"454":{"position":[[0,10]]},"459":{"position":[[0,10]]},"472":{"position":[[0,10]]}}}],["contribut",{"_index":147,"t":{"628":{"position":[[0,12]]},"644":{"position":[[7,10]]}}}],["control",{"_index":79,"t":{"146":{"position":[[8,7]]},"939":{"position":[[6,7]]},"976":{"position":[[15,7]]},"983":{"position":[[0,7]]},"985":{"position":[[9,7]]},"987":{"position":[[9,7]]}}}],["creat",{"_index":166,"t":{"674":{"position":[[0,6]]}}}],["crossov",{"_index":264,"t":{"1301":{"position":[[0,9]]}}}],["csv",{"_index":191,"t":{"784":{"position":[[47,3]]}}}],["data",{"_index":42,"t":{"105":{"position":[[9,4]]},"713":{"position":[[6,4]]},"813":{"position":[[10,4]]},"933":{"position":[[65,4]]},"1384":{"position":[[28,4]]}}}],["day",{"_index":271,"t":{"1386":{"position":[[39,3]]}}}],["decim",{"_index":75,"t":{"144":{"position":[[0,8]]}}}],["defin",{"_index":211,"t":{"913":{"position":[[5,7]]},"919":{"position":[[5,7]]},"954":{"position":[[34,7]]},"1027":{"position":[[0,8]]}}}],["depend",{"_index":84,"t":{"241":{"position":[[10,10]]},"1438":{"position":[[11,9]]}}}],["descript",{"_index":0,"t":{"3":{"position":[[0,11]]},"11":{"position":[[0,11]]},"19":{"position":[[0,11]]},"27":{"position":[[0,11]]},"35":{"position":[[0,11]]},"43":{"position":[[0,11]]},"152":{"position":[[0,11]]},"162":{"position":[[0,11]]},"168":{"position":[[0,11]]},"183":{"position":[[0,11]]},"190":{"position":[[0,11]]},"198":{"position":[[0,11]]},"206":{"position":[[0,11]]},"214":{"position":[[0,11]]},"218":{"position":[[0,11]]},"226":{"position":[[0,11]]},"234":{"position":[[0,11]]},"247":{"position":[[0,11]]},"255":{"position":[[0,11]]},"258":{"position":[[0,11]]},"270":{"position":[[0,11]]},"278":{"position":[[0,11]]},"282":{"position":[[0,11]]},"292":{"position":[[0,11]]},"300":{"position":[[0,11]]},"308":{"position":[[0,11]]},"315":{"position":[[0,11]]},"327":{"position":[[0,11]]},"335":{"position":[[0,11]]},"343":{"position":[[30,11]]},"349":{"position":[[24,11]]},"572":{"position":[[0,11]]},"578":{"position":[[0,11]]},"586":{"position":[[0,11]]},"772":{"position":[[0,11]]},"863":{"position":[[0,11]]},"868":{"position":[[0,11]]},"873":{"position":[[0,11]]},"1081":{"position":[[0,11]]},"1089":{"position":[[0,11]]},"1097":{"position":[[0,11]]},"1105":{"position":[[0,11]]},"1113":{"position":[[0,11]]},"1123":{"position":[[0,11]]},"1131":{"position":[[0,11]]},"1137":{"position":[[0,11]]},"1145":{"position":[[0,11]]},"1153":{"position":[[0,11]]},"1161":{"position":[[0,11]]},"1175":{"position":[[0,11]]},"1183":{"position":[[0,11]]},"1188":{"position":[[0,11]]},"1195":{"position":[[0,11]]},"1203":{"position":[[0,11]]},"1211":{"position":[[0,11]]},"1219":{"position":[[0,11]]},"1226":{"position":[[0,11]]},"1237":{"position":[[0,11]]},"1247":{"position":[[0,11]]},"1255":{"position":[[0,11]]},"1263":{"position":[[0,11]]},"1273":{"position":[[0,11]]},"1281":{"position":[[0,11]]},"1289":{"position":[[0,11]]},"1312":{"position":[[0,11]]},"1320":{"position":[[0,11]]},"1327":{"position":[[0,11]]},"1335":{"position":[[0,11]]},"1345":{"position":[[0,11]]},"1357":{"position":[[0,11]]},"1365":{"position":[[0,11]]},"1373":{"position":[[0,11]]},"1390":{"position":[[0,11]]},"1402":{"position":[[0,11]]},"1410":{"position":[[0,11]]},"1418":{"position":[[0,11]]},"1426":{"position":[[0,11]]},"1434":{"position":[[0,11]]},"1444":{"position":[[0,11]]},"1451":{"position":[[0,11]]},"1458":{"position":[[0,11]]},"1465":{"position":[[0,11]]},"1473":{"position":[[0,11]]},"1486":{"position":[[0,11]]}}}],["design",{"_index":216,"t":{"925":{"position":[[41,6]]},"933":{"position":[[30,6]]},"956":{"position":[[74,6]]}}}],["detail",{"_index":257,"t":{"1119":{"position":[[10,10]]},"1341":{"position":[[10,10]]}}}],["diagram",{"_index":244,"t":{"1046":{"position":[[24,7]]}}}],["differ",{"_index":28,"t":{"92":{"position":[[5,11]]},"103":{"position":[[24,9]]},"813":{"position":[[20,9]]}}}],["digit",{"_index":77,"t":{"144":{"position":[[25,6]]}}}],["direct",{"_index":266,"t":{"1375":{"position":[[9,6]]}}}],["discharge_pressur",{"_index":262,"t":{"1297":{"position":[[0,19]]}}}],["document",{"_index":107,"t":{"367":{"position":[[0,13]]},"380":{"position":[[0,13]]},"393":{"position":[[0,13]]},"411":{"position":[[0,13]]},"422":{"position":[[0,13]]},"433":{"position":[[0,13]]},"446":{"position":[[0,13]]},"465":{"position":[[0,13]]}}}],["driven",{"_index":229,"t":{"956":{"position":[[19,6]]}}}],["due",{"_index":14,"t":{"72":{"position":[[15,3]]},"74":{"position":[[15,3]]}}}],["ecalc",{"_index":5,"t":{"52":{"position":[[0,5]]},"58":{"position":[[8,7]]},"60":{"position":[[17,7]]},"62":{"position":[[11,7]]},"74":{"position":[[30,5]]},"144":{"position":[[35,5]]},"343":{"position":[[0,5]]},"349":{"position":[[0,5]]},"564":{"position":[[5,5]]},"738":{"position":[[5,5]]},"983":{"position":[[21,6]]},"1065":{"position":[[0,5]]},"1067":{"position":[[0,5]]},"1069":{"position":[[0,5]]},"1071":{"position":[[0,5]]},"1073":{"position":[[0,5]]},"1351":{"position":[[43,5]]}}}],["econom",{"_index":73,"t":{"133":{"position":[[0,9]]}}}],["electricity2fuel",{"_index":183,"t":{"752":{"position":[[0,16]]},"862":{"position":[[0,16]]}}}],["emiss",{"_index":68,"t":{"123":{"position":[[0,10]]},"172":{"position":[[7,9]]},"179":{"position":[[7,9]]},"1351":{"position":[[7,8]]}}}],["empti",{"_index":41,"t":{"105":{"position":[[3,5]]}}}],["energi",{"_index":145,"t":{"574":{"position":[[9,6]]},"879":{"position":[[5,6]]},"887":{"position":[[12,6]]},"1375":{"position":[[16,6]]}}}],["energy_usage_model",{"_index":88,"t":{"296":{"position":[[7,18]]},"562":{"position":[[0,18]]},"736":{"position":[[0,18]]},"1479":{"position":[[7,18]]}}}],["error",{"_index":12,"t":{"70":{"position":[[12,6]]},"72":{"position":[[0,5]]},"74":{"position":[[0,5]]}}}],["exampl",{"_index":2,"t":{"7":{"position":[[0,7]]},"15":{"position":[[0,7]]},"23":{"position":[[0,7]]},"31":{"position":[[0,7]]},"39":{"position":[[0,7]]},"47":{"position":[[0,7]]},"66":{"position":[[0,7]]},"158":{"position":[[0,7]]},"176":{"position":[[0,7]]},"187":{"position":[[0,7]]},"194":{"position":[[0,7]]},"202":{"position":[[0,7]]},"210":{"position":[[0,7]]},"222":{"position":[[0,7]]},"230":{"position":[[0,7]]},"238":{"position":[[0,7]]},"243":{"position":[[5,7]]},"251":{"position":[[0,7]]},"265":{"position":[[0,7]]},"274":{"position":[[0,7]]},"288":{"position":[[0,7]]},"304":{"position":[[0,7]]},"312":{"position":[[0,7]]},"319":{"position":[[0,7]]},"321":{"position":[[0,7]]},"323":{"position":[[0,7]]},"331":{"position":[[0,7]]},"347":{"position":[[0,7]]},"353":{"position":[[0,7]]},"582":{"position":[[0,7]]},"590":{"position":[[0,7]]},"690":{"position":[[9,8]]},"756":{"position":[[0,7]]},"778":{"position":[[0,8]]},"788":{"position":[[0,7]]},"789":{"position":[[3,7]]},"791":{"position":[[3,7]]},"797":{"position":[[0,7]]},"803":{"position":[[0,8]]},"804":{"position":[[12,7]]},"806":{"position":[[5,8]]},"812":{"position":[[0,8]]},"821":{"position":[[0,7]]},"831":{"position":[[0,7]]},"844":{"position":[[0,7]]},"850":{"position":[[0,7]]},"870":{"position":[[0,7]]},"875":{"position":[[0,8]]},"883":{"position":[[0,7]]},"891":{"position":[[0,7]]},"899":{"position":[[0,7]]},"917":{"position":[[0,7]]},"923":{"position":[[0,7]]},"929":{"position":[[0,7]]},"931":{"position":[[0,7]]},"937":{"position":[[0,7]]},"953":{"position":[[0,8]]},"978":{"position":[[0,7]]},"995":{"position":[[0,8]]},"1001":{"position":[[0,7]]},"1007":{"position":[[0,7]]},"1013":{"position":[[0,8]]},"1023":{"position":[[0,7]]},"1031":{"position":[[0,8]]},"1035":{"position":[[0,7]]},"1085":{"position":[[0,7]]},"1093":{"position":[[0,7]]},"1101":{"position":[[0,7]]},"1109":{"position":[[0,7]]},"1117":{"position":[[0,7]]},"1119":{"position":[[0,7]]},"1127":{"position":[[0,7]]},"1141":{"position":[[0,7]]},"1149":{"position":[[0,7]]},"1157":{"position":[[0,7]]},"1166":{"position":[[0,7]]},"1171":{"position":[[0,7]]},"1179":{"position":[[0,7]]},"1185":{"position":[[0,7]]},"1192":{"position":[[0,7]]},"1199":{"position":[[0,7]]},"1207":{"position":[[0,7]]},"1215":{"position":[[0,7]]},"1223":{"position":[[0,7]]},"1233":{"position":[[0,7]]},"1241":{"position":[[0,7]]},"1242":{"position":[[0,7]]},"1244":{"position":[[0,7]]},"1251":{"position":[[0,7]]},"1269":{"position":[[0,7]]},"1285":{"position":[[0,7]]},"1303":{"position":[[0,7]]},"1305":{"position":[[0,7]]},"1308":{"position":[[0,7]]},"1316":{"position":[[0,7]]},"1324":{"position":[[0,7]]},"1331":{"position":[[0,7]]},"1339":{"position":[[0,7]]},"1341":{"position":[[0,7]]},"1349":{"position":[[0,7]]},"1354":{"position":[[0,7]]},"1361":{"position":[[0,7]]},"1369":{"position":[[0,7]]},"1381":{"position":[[0,7]]},"1398":{"position":[[0,7]]},"1406":{"position":[[0,7]]},"1414":{"position":[[0,7]]},"1422":{"position":[[0,7]]},"1430":{"position":[[0,7]]},"1440":{"position":[[0,7]]},"1448":{"position":[[0,7]]},"1455":{"position":[[0,7]]},"1462":{"position":[[0,7]]},"1469":{"position":[[0,7]]},"1493":{"position":[[0,7]]}}}],["exist",{"_index":170,"t":{"676":{"position":[[15,8]]}}}],["experiment",{"_index":135,"t":{"508":{"position":[[0,12]]}}}],["explan",{"_index":245,"t":{"1049":{"position":[[9,11]]}}}],["facil",{"_index":180,"t":{"714":{"position":[[0,8]]},"754":{"position":[[0,8]]},"1052":{"position":[[0,8]]}}}],["facility_input",{"_index":139,"t":{"548":{"position":[[0,15]]},"701":{"position":[[0,15]]},"724":{"position":[[0,15]]},"1475":{"position":[[7,15]]}}}],["featur",{"_index":95,"t":{"338":{"position":[[4,8]]},"357":{"position":[[0,8]]},"376":{"position":[[0,8]]},"407":{"position":[[0,8]]},"418":{"position":[[0,8]]},"429":{"position":[[0,8]]},"442":{"position":[[0,8]]},"475":{"position":[[0,8]]},"480":{"position":[[0,8]]},"485":{"position":[[0,8]]},"490":{"position":[[0,8]]},"497":{"position":[[0,8]]},"506":{"position":[[4,8]]},"508":{"position":[[13,8]]},"518":{"position":[[4,8]]},"528":{"position":[[4,8]]},"534":{"position":[[4,8]]},"593":{"position":[[4,8]]},"599":{"position":[[4,8]]},"606":{"position":[[4,8]]},"613":{"position":[[4,8]]},"620":{"position":[[4,8]]},"632":{"position":[[8,8]]}}}],["fetch",{"_index":171,"t":{"678":{"position":[[0,5]]}}}],["file",{"_index":39,"t":{"103":{"position":[[77,4]]},"119":{"position":[[9,4]]},"121":{"position":[[9,4]]},"522":{"position":[[23,5]]},"540":{"position":[[23,5]]},"566":{"position":[[6,5]]},"684":{"position":[[4,5]]},"740":{"position":[[6,5]]},"784":{"position":[[51,4]]},"801":{"position":[[6,4]]}}}],["fill",{"_index":64,"t":{"117":{"position":[[41,7]]}}}],["first",{"_index":231,"t":{"958":{"position":[[45,5]]}}}],["fix",{"_index":96,"t":{"339":{"position":[[0,5]]},"359":{"position":[[0,5]]},"365":{"position":[[4,5]]},"378":{"position":[[4,5]]},"391":{"position":[[4,5]]},"409":{"position":[[4,5]]},"420":{"position":[[4,5]]},"431":{"position":[[4,5]]},"444":{"position":[[4,5]]},"457":{"position":[[4,5]]},"482":{"position":[[0,5]]},"487":{"position":[[0,5]]},"492":{"position":[[0,5]]},"499":{"position":[[0,5]]},"530":{"position":[[0,5]]},"536":{"position":[[0,5]]},"595":{"position":[[0,5]]},"601":{"position":[[0,5]]},"608":{"position":[[0,5]]},"615":{"position":[[0,5]]},"622":{"position":[[0,5]]},"976":{"position":[[0,5]]}}}],["flow",{"_index":243,"t":{"1046":{"position":[[19,4]]}}}],["fluid",{"_index":227,"t":{"954":{"position":[[78,5]]},"991":{"position":[[0,5]]},"997":{"position":[[0,5]]}}}],["fluid_dens",{"_index":263,"t":{"1299":{"position":[[0,15]]}}}],["fork",{"_index":178,"t":{"693":{"position":[[0,4]]}}}],["format",{"_index":1,"t":{"5":{"position":[[0,6]]},"13":{"position":[[0,6]]},"21":{"position":[[0,6]]},"29":{"position":[[0,6]]},"37":{"position":[[0,6]]},"45":{"position":[[0,6]]},"154":{"position":[[0,6]]},"174":{"position":[[0,6]]},"185":{"position":[[0,6]]},"192":{"position":[[0,6]]},"200":{"position":[[0,6]]},"208":{"position":[[0,6]]},"220":{"position":[[0,6]]},"228":{"position":[[0,6]]},"236":{"position":[[0,6]]},"249":{"position":[[0,6]]},"260":{"position":[[0,6]]},"272":{"position":[[0,6]]},"284":{"position":[[0,6]]},"302":{"position":[[0,6]]},"310":{"position":[[0,6]]},"317":{"position":[[0,6]]},"329":{"position":[[0,6]]},"345":{"position":[[0,6]]},"351":{"position":[[0,6]]},"580":{"position":[[0,6]]},"588":{"position":[[0,6]]},"656":{"position":[[11,6]]},"746":{"position":[[0,6]]},"754":{"position":[[15,6]]},"769":{"position":[[0,6]]},"776":{"position":[[0,6]]},"782":{"position":[[0,6]]},"804":{"position":[[5,6]]},"819":{"position":[[0,6]]},"829":{"position":[[0,6]]},"842":{"position":[[0,6]]},"848":{"position":[[0,6]]},"854":{"position":[[0,6]]},"860":{"position":[[0,6]]},"865":{"position":[[0,6]]},"881":{"position":[[0,6]]},"889":{"position":[[0,6]]},"897":{"position":[[0,6]]},"905":{"position":[[0,6]]},"915":{"position":[[0,6]]},"921":{"position":[[0,6]]},"927":{"position":[[0,6]]},"935":{"position":[[0,6]]},"941":{"position":[[0,6]]},"947":{"position":[[0,6]]},"964":{"position":[[0,6]]},"970":{"position":[[0,6]]},"993":{"position":[[0,6]]},"999":{"position":[[0,6]]},"1005":{"position":[[0,6]]},"1011":{"position":[[0,6]]},"1019":{"position":[[0,6]]},"1029":{"position":[[0,6]]},"1083":{"position":[[0,6]]},"1091":{"position":[[0,6]]},"1099":{"position":[[0,6]]},"1107":{"position":[[0,6]]},"1115":{"position":[[0,6]]},"1125":{"position":[[0,6]]},"1133":{"position":[[0,6]]},"1139":{"position":[[0,6]]},"1147":{"position":[[0,6]]},"1155":{"position":[[0,6]]},"1164":{"position":[[0,6]]},"1169":{"position":[[0,6]]},"1177":{"position":[[0,6]]},"1190":{"position":[[0,6]]},"1197":{"position":[[0,6]]},"1205":{"position":[[0,6]]},"1213":{"position":[[0,6]]},"1221":{"position":[[0,6]]},"1228":{"position":[[0,6]]},"1239":{"position":[[0,6]]},"1249":{"position":[[0,6]]},"1259":{"position":[[0,6]]},"1267":{"position":[[0,6]]},"1275":{"position":[[0,6]]},"1283":{"position":[[0,6]]},"1307":{"position":[[0,6]]},"1314":{"position":[[0,6]]},"1322":{"position":[[0,6]]},"1329":{"position":[[0,6]]},"1337":{"position":[[0,6]]},"1347":{"position":[[0,6]]},"1352":{"position":[[0,6]]},"1359":{"position":[[0,6]]},"1367":{"position":[[0,6]]},"1379":{"position":[[0,6]]},"1392":{"position":[[0,6]]},"1396":{"position":[[0,6]]},"1404":{"position":[[0,6]]},"1412":{"position":[[0,6]]},"1420":{"position":[[0,6]]},"1428":{"position":[[0,6]]},"1446":{"position":[[0,6]]},"1453":{"position":[[0,6]]},"1460":{"position":[[0,6]]},"1467":{"position":[[0,6]]},"1483":{"position":[[0,6]]},"1488":{"position":[[0,6]]}}}],["forward",{"_index":63,"t":{"117":{"position":[[33,7]]}}}],["fuel_typ",{"_index":140,"t":{"550":{"position":[[0,10]]},"705":{"position":[[0,10]]},"726":{"position":[[0,10]]}}}],["fuelconsum",{"_index":182,"t":{"734":{"position":[[0,13]]}}}],["full",{"_index":85,"t":{"243":{"position":[[0,4]]},"564":{"position":[[0,4]]},"711":{"position":[[0,4]]},"738":{"position":[[0,4]]},"806":{"position":[[0,4]]}}}],["function",{"_index":203,"t":{"862":{"position":[[17,8]]},"1257":{"position":[[0,13]]},"1265":{"position":[[0,13]]}}}],["gener",{"_index":54,"t":{"107":{"position":[[36,9]]},"832":{"position":[[0,7]]},"875":{"position":[[19,9]]},"925":{"position":[[0,7]]},"933":{"position":[[0,7]]},"956":{"position":[[44,7]]}}}],["generatorset",{"_index":179,"t":{"709":{"position":[[0,13]]},"732":{"position":[[0,13]]}}}],["git",{"_index":158,"t":{"656":{"position":[[0,3]]},"666":{"position":[[11,3]]},"668":{"position":[[6,3]]},"670":{"position":[[10,3]]},"672":{"position":[[5,3]]}}}],["github",{"_index":172,"t":{"678":{"position":[[19,6]]},"680":{"position":[[21,6]]},"688":{"position":[[16,6]]}}}],["guidelin",{"_index":157,"t":{"652":{"position":[[0,10]]}}}],["header",{"_index":185,"t":{"758":{"position":[[0,6]]},"767":{"position":[[0,6]]},"774":{"position":[[0,6]]},"784":{"position":[[0,6]]},"795":{"position":[[0,6]]}}}],["heater",{"_index":206,"t":{"872":{"position":[[0,7]]}}}],["includ",{"_index":89,"t":{"319":{"position":[[12,7]]},"321":{"position":[[12,7]]},"323":{"position":[[12,7]]}}}],["indent",{"_index":11,"t":{"70":{"position":[[0,11]]}}}],["inform",{"_index":248,"t":{"1052":{"position":[[9,11]]},"1054":{"position":[[9,11]]}}}],["initi",{"_index":152,"t":{"646":{"position":[[0,8]]}}}],["input",{"_index":136,"t":{"522":{"position":[[0,6]]},"540":{"position":[[0,6]]},"566":{"position":[[0,5]]},"713":{"position":[[0,5]]},"740":{"position":[[0,5]]},"754":{"position":[[9,5]]},"813":{"position":[[40,6]]},"901":{"position":[[19,5]]},"933":{"position":[[59,5]]}}}],["instal",{"_index":142,"t":{"556":{"position":[[0,13]]},"558":{"position":[[0,12]]},"560":{"position":[[0,12]]},"707":{"position":[[0,13]]},"730":{"position":[[0,12]]}}}],["integr",{"_index":119,"t":{"388":{"position":[[11,11]]},"399":{"position":[[11,11]]},"454":{"position":[[11,11]]},"459":{"position":[[11,11]]},"472":{"position":[[11,11]]}}}],["interpol",{"_index":34,"t":{"103":{"position":[[34,13]]}}}],["interstage_pressure_control",{"_index":235,"t":{"974":{"position":[[0,27]]}}}],["interv",{"_index":201,"t":{"827":{"position":[[5,9]]},"836":{"position":[[5,9]]}}}],["invalid",{"_index":18,"t":{"74":{"position":[[22,7]]}}}],["item",{"_index":92,"t":{"319":{"position":[[41,4]]}}}],["keyword",{"_index":234,"t":{"972":{"position":[[0,7]]},"1077":{"position":[[10,8]]}}}],["known",{"_index":223,"t":{"949":{"position":[[39,5]]}}}],["level",{"_index":256,"t":{"1077":{"position":[[4,5]]}}}],["librari",{"_index":8,"t":{"54":{"position":[[7,7]]}}}],["list",{"_index":91,"t":{"319":{"position":[[36,4]]},"323":{"position":[[20,4]]}}}],["longer",{"_index":46,"t":{"105":{"position":[[40,6]]}}}],["ltp",{"_index":50,"t":{"107":{"position":[[8,3]]},"119":{"position":[[0,3]]},"524":{"position":[[8,3]]}}}],["main",{"_index":27,"t":{"92":{"position":[[0,4]]}}}],["make",{"_index":153,"t":{"648":{"position":[[0,4]]}}}],["map/object",{"_index":90,"t":{"319":{"position":[[20,10]]},"321":{"position":[[20,10]]}}}],["margin",{"_index":220,"t":{"939":{"position":[[14,6]]}}}],["markdown",{"_index":150,"t":{"636":{"position":[[9,8]]},"638":{"position":[[0,8]]}}}],["messag",{"_index":13,"t":{"72":{"position":[[6,8]]},"74":{"position":[[6,8]]}}}],["method",{"_index":3,"t":{"51":{"position":[[5,6]]},"985":{"position":[[17,7]]},"987":{"position":[[17,7]]}}}],["migrat",{"_index":25,"t":{"89":{"position":[[5,9]]},"90":{"position":[[0,9]]},"94":{"position":[[4,9]]},"98":{"position":[[5,9]]},"99":{"position":[[0,9]]},"139":{"position":[[5,9]]}}}],["miscellan",{"_index":108,"t":{"369":{"position":[[0,13]]},"382":{"position":[[0,13]]},"395":{"position":[[0,13]]},"413":{"position":[[0,13]]},"424":{"position":[[0,13]]},"435":{"position":[[0,13]]},"448":{"position":[[0,13]]},"467":{"position":[[0,13]]},"470":{"position":[[0,13]]}}}],["model",{"_index":55,"t":{"111":{"position":[[0,9]]},"294":{"position":[[7,6]]},"544":{"position":[[5,5]]},"552":{"position":[[0,6]]},"564":{"position":[[16,5]]},"574":{"position":[[22,5]]},"697":{"position":[[5,5]]},"703":{"position":[[0,6]]},"711":{"position":[[5,5]]},"720":{"position":[[5,5]]},"738":{"position":[[16,5]]},"815":{"position":[[0,5]]},"827":{"position":[[45,6]]},"879":{"position":[[18,5]]},"887":{"position":[[25,5]]},"949":{"position":[[28,5]]},"951":{"position":[[28,5]]},"983":{"position":[[8,9]]},"991":{"position":[[6,5]]},"997":{"position":[[6,5]]},"1009":{"position":[[52,5]]},"1163":{"position":[[39,5]]},"1168":{"position":[[39,5]]},"1277":{"position":[[10,5]]},"1375":{"position":[[29,5]]},"1481":{"position":[[7,6]]}}}],["multipl",{"_index":258,"t":{"1168":{"position":[[50,8]]}}}],["new",{"_index":49,"t":{"107":{"position":[[4,3]]},"338":{"position":[[0,3]]},"506":{"position":[[0,3]]},"518":{"position":[[0,3]]},"528":{"position":[[0,3]]},"534":{"position":[[0,3]]},"593":{"position":[[0,3]]},"599":{"position":[[0,3]]},"606":{"position":[[0,3]]},"613":{"position":[[0,3]]},"620":{"position":[[0,3]]}}}],["now",{"_index":59,"t":{"115":{"position":[[29,3]]}}}],["number",{"_index":226,"t":{"951":{"position":[[47,6]]},"960":{"position":[[29,6]]}}}],["object",{"_index":93,"t":{"321":{"position":[[36,6]]},"323":{"position":[[30,6]]}}}],["on",{"_index":38,"t":{"103":{"position":[[73,3]]},"1009":{"position":[[48,3]]}}}],["oper",{"_index":57,"t":{"115":{"position":[[0,11]]},"810":{"position":[[10,9]]}}}],["option",{"_index":239,"t":{"985":{"position":[[35,7]]},"987":{"position":[[41,7]]}}}],["order",{"_index":70,"t":{"123":{"position":[[25,5]]}}}],["output",{"_index":138,"t":{"524":{"position":[[0,7]]}}}],["overview",{"_index":26,"t":{"90":{"position":[[10,8]]},"99":{"position":[[10,8]]},"544":{"position":[[11,8]]},"697":{"position":[[11,8]]},"720":{"position":[[11,8]]}}}],["point",{"_index":217,"t":{"925":{"position":[[48,5]]},"933":{"position":[[37,5]]},"956":{"position":[[81,5]]}}}],["possibl",{"_index":33,"t":{"103":{"position":[[7,8]]}}}],["power",{"_index":204,"t":{"867":{"position":[[0,5]]}}}],["predefin",{"_index":215,"t":{"925":{"position":[[30,10]]},"956":{"position":[[91,10]]},"958":{"position":[[97,10]]},"991":{"position":[[18,10]]}}}],["prerequisit",{"_index":146,"t":{"626":{"position":[[0,13]]},"642":{"position":[[0,13]]}}}],["pressur",{"_index":236,"t":{"976":{"position":[[6,8]]},"985":{"position":[[0,8]]},"987":{"position":[[0,8]]},"1168":{"position":[[71,9]]}}}],["problem",{"_index":17,"t":{"72":{"position":[[32,8]]}}}],["process",{"_index":242,"t":{"1046":{"position":[[11,7]]}}}],["profil",{"_index":247,"t":{"1050":{"position":[[20,8]]}}}],["propos",{"_index":20,"t":{"76":{"position":[[0,8]]},"80":{"position":[[0,8]]}}}],["pull",{"_index":154,"t":{"648":{"position":[[7,4]]},"654":{"position":[[0,4]]},"691":{"position":[[0,4]]}}}],["pump",{"_index":87,"t":{"263":{"position":[[0,5]]},"879":{"position":[[0,4]]},"1231":{"position":[[0,5]]},"1489":{"position":[[0,5]]},"1494":{"position":[[0,5]]}}}],["pump_chart_single_spe",{"_index":188,"t":{"765":{"position":[[0,23]]}}}],["pump_chart_variable_spe",{"_index":189,"t":{"771":{"position":[[0,25]]}}}],["pump_system",{"_index":208,"t":{"887":{"position":[[0,11]]}}}],["python",{"_index":7,"t":{"54":{"position":[[0,6]]}}}],["qualiti",{"_index":78,"t":{"146":{"position":[[0,7]]}}}],["rate",{"_index":62,"t":{"117":{"position":[[14,5],[60,5]]},"815":{"position":[[20,4]]},"1291":{"position":[[0,5]]},"1386":{"position":[[43,5]]}}}],["rate_fract",{"_index":260,"t":{"1293":{"position":[[0,14]]}}}],["read",{"_index":16,"t":{"72":{"position":[[27,4]]}}}],["readabl",{"_index":160,"t":{"658":{"position":[[0,11]]}}}],["recircul",{"_index":240,"t":{"987":{"position":[[27,13]]}}}],["refactor",{"_index":111,"t":{"371":{"position":[[5,11]]},"384":{"position":[[5,11]]},"397":{"position":[[5,11]]},"415":{"position":[[5,11]]},"426":{"position":[[5,11]]},"437":{"position":[[5,11]]},"450":{"position":[[5,11]]},"463":{"position":[[5,11]]}}}],["refer",{"_index":200,"t":{"825":{"position":[[0,9]]},"834":{"position":[[0,9]]}}}],["regular",{"_index":269,"t":{"1382":{"position":[[9,10]]},"1384":{"position":[[0,10]]}}}],["report",{"_index":267,"t":{"1377":{"position":[[0,9]]}}}],["repositori",{"_index":164,"t":{"670":{"position":[[14,10]]},"693":{"position":[[9,10]]}}}],["request",{"_index":155,"t":{"648":{"position":[[12,7]]},"654":{"position":[[5,8]]},"691":{"position":[[5,8]]}}}],["requir",{"_index":80,"t":{"156":{"position":[[0,12]]},"286":{"position":[[0,12]]},"758":{"position":[[16,12]]},"767":{"position":[[7,12]]},"774":{"position":[[7,12]]},"784":{"position":[[7,12]]},"795":{"position":[[16,12]]},"1021":{"position":[[0,12]]},"1050":{"position":[[0,8]]},"1436":{"position":[[0,8]]}}}],["resampl",{"_index":61,"t":{"117":{"position":[[0,10]]}}}],["reservoir",{"_index":198,"t":{"813":{"position":[[30,9]]}}}],["resourc",{"_index":137,"t":{"522":{"position":[[14,8]]},"540":{"position":[[14,8]]},"714":{"position":[[9,9]]},"716":{"position":[[11,9]]}}}],["result",{"_index":56,"t":{"114":{"position":[[0,6]]},"1071":{"position":[[11,7]]}}}],["review",{"_index":156,"t":{"650":{"position":[[9,6]]}}}],["run",{"_index":252,"t":{"1065":{"position":[[6,3]]}}}],["sampl",{"_index":190,"t":{"784":{"position":[[28,7]]}}}],["second",{"_index":233,"t":{"958":{"position":[[84,6]]}}}],["selftest",{"_index":253,"t":{"1067":{"position":[[6,8]]}}}],["send",{"_index":173,"t":{"680":{"position":[[0,4]]},"688":{"position":[[0,4]]}}}],["seri",{"_index":44,"t":{"105":{"position":[[22,6]]},"825":{"position":[[18,6]]},"834":{"position":[[18,6]]},"1384":{"position":[[21,6]]},"1438":{"position":[[29,6]]}}}],["set",{"_index":58,"t":{"115":{"position":[[12,8]]},"666":{"position":[[0,7]]},"875":{"position":[[29,3]]}}}],["setup",{"_index":194,"t":{"801":{"position":[[0,5]]}}}],["shore",{"_index":205,"t":{"867":{"position":[[11,5]]}}}],["show",{"_index":254,"t":{"1069":{"position":[[6,4]]},"1071":{"position":[[6,4]]},"1073":{"position":[[6,4]]}}}],["signific",{"_index":76,"t":{"144":{"position":[[13,11]]}}}],["simplifi",{"_index":221,"t":{"949":{"position":[[0,10]]},"951":{"position":[[0,10]]},"1046":{"position":[[0,10]]}}}],["singl",{"_index":212,"t":{"913":{"position":[[13,6]]},"954":{"position":[[2,8]]},"956":{"position":[[2,8]]}}}],["solut",{"_index":21,"t":{"76":{"position":[[9,8]]},"80":{"position":[[9,8]]}}}],["spec",{"_index":232,"t":{"958":{"position":[[69,4]]}}}],["special",{"_index":22,"t":{"78":{"position":[[0,7]]},"632":{"position":[[0,7]]},"1386":{"position":[[0,8]]}}}],["specifi",{"_index":241,"t":{"997":{"position":[[22,9]]}}}],["speed",{"_index":213,"t":{"913":{"position":[[20,5]]},"919":{"position":[[22,5]]},"939":{"position":[[34,5]]},"954":{"position":[[51,5]]},"1163":{"position":[[16,5]]},"1168":{"position":[[16,5]]}}}],["stage",{"_index":224,"t":{"949":{"position":[[56,6]]},"951":{"position":[[68,6]]},"958":{"position":[[28,6],[51,5]]},"960":{"position":[[39,6]]}}}],["standard",{"_index":149,"t":{"636":{"position":[[0,8]]}}}],["statu",{"_index":175,"t":{"682":{"position":[[6,6]]}}}],["steam",{"_index":52,"t":{"107":{"position":[[22,5]]}}}],["stp",{"_index":67,"t":{"121":{"position":[[0,3]]}}}],["stream",{"_index":259,"t":{"1168":{"position":[[59,7]]},"1386":{"position":[[32,6]]}}}],["structur",{"_index":69,"t":{"123":{"position":[[11,9]]},"832":{"position":[[8,9]]}}}],["style",{"_index":161,"t":{"660":{"position":[[5,5]]}}}],["subsurfac",{"_index":246,"t":{"1050":{"position":[[9,10]]}}}],["suction_pressur",{"_index":261,"t":{"1295":{"position":[[0,17]]}}}],["summari",{"_index":151,"t":{"638":{"position":[[9,7]]}}}],["support",{"_index":81,"t":{"164":{"position":[[0,9]]},"748":{"position":[[0,9]]},"907":{"position":[[0,9]]},"1017":{"position":[[0,9]]},"1277":{"position":[[0,9]]}}}],["surg",{"_index":219,"t":{"939":{"position":[[0,5]]}}}],["switch",{"_index":168,"t":{"676":{"position":[[0,6]]}}}],["syntax",{"_index":195,"t":{"801":{"position":[[11,6]]}}}],["tabl",{"_index":184,"t":{"756":{"position":[[8,5]]},"788":{"position":[[8,6]]}}}],["tell",{"_index":165,"t":{"672":{"position":[[0,4]]}}}],["tempor",{"_index":144,"t":{"574":{"position":[[0,8]]}}}],["test",{"_index":117,"t":{"386":{"position":[[0,5]]},"452":{"position":[[0,5]]},"461":{"position":[[0,5]]}}}],["theori",{"_index":237,"t":{"981":{"position":[[0,6]]}}}],["time",{"_index":43,"t":{"105":{"position":[[17,4]]},"241":{"position":[[5,4]]},"825":{"position":[[13,4]]},"827":{"position":[[0,4]]},"834":{"position":[[13,4]]},"836":{"position":[[0,4]]},"1384":{"position":[[16,4]]},"1438":{"position":[[24,4]]}}}],["time_seri",{"_index":31,"t":{"101":{"position":[[14,11]]},"546":{"position":[[0,11]]},"699":{"position":[[0,11]]},"722":{"position":[[0,11]]},"1477":{"position":[[7,11]]}}}],["timeseri",{"_index":181,"t":{"716":{"position":[[0,10]]}}}],["top",{"_index":255,"t":{"1077":{"position":[[0,3]]}}}],["train",{"_index":222,"t":{"949":{"position":[[22,5]]},"951":{"position":[[22,5]]},"958":{"position":[[13,5]]},"960":{"position":[[13,5]]},"1009":{"position":[[23,5]]},"1163":{"position":[[33,5]]},"1168":{"position":[[33,5]]}}}],["tsv",{"_index":66,"t":{"119":{"position":[[4,4]]},"121":{"position":[[4,4]]}}}],["turbin",{"_index":53,"t":{"107":{"position":[[28,7]]},"956":{"position":[[11,7]]},"1009":{"position":[[35,7]]}}}],["two",{"_index":230,"t":{"958":{"position":[[24,3]]}}}],["type",{"_index":35,"t":{"103":{"position":[[48,5]]},"164":{"position":[[10,5]]},"748":{"position":[[10,5]]},"901":{"position":[[25,4]]},"907":{"position":[[10,5]]},"1017":{"position":[[10,5]]},"1277":{"position":[[16,5]]},"1438":{"position":[[36,4]]}}}],["unicod",{"_index":24,"t":{"78":{"position":[[22,7]]}}}],["unit",{"_index":186,"t":{"758":{"position":[[11,4]]},"786":{"position":[[0,5]]},"795":{"position":[[11,4]]},"885":{"position":[[0,5]]},"893":{"position":[[0,5]]}}}],["unknown",{"_index":225,"t":{"951":{"position":[[39,7]]},"958":{"position":[[61,7]]},"960":{"position":[[50,7]]}}}],["up",{"_index":162,"t":{"666":{"position":[[8,2]]}}}],["us",{"_index":9,"t":{"60":{"position":[[13,3]]},"62":{"position":[[7,3]]},"115":{"position":[[21,4]]},"170":{"position":[[0,3]]},"172":{"position":[[0,3]]},"177":{"position":[[0,3]]},"179":{"position":[[0,3]]},"294":{"position":[[0,3]]},"296":{"position":[[0,3]]},"668":{"position":[[0,5]]},"991":{"position":[[12,5]]},"1033":{"position":[[0,5]]},"1163":{"position":[[0,3]]},"1168":{"position":[[0,3]]},"1351":{"position":[[0,3]]},"1375":{"position":[[0,3]]},"1394":{"position":[[0,3]]},"1475":{"position":[[0,3]]},"1477":{"position":[[0,3]]},"1479":{"position":[[0,3]]},"1481":{"position":[[0,3]]}}}],["usag",{"_index":10,"t":{"66":{"position":[[8,5]]},"239":{"position":[[6,5]]},"574":{"position":[[16,5]]},"879":{"position":[[12,5]]},"887":{"position":[[19,5]]},"972":{"position":[[8,5]]},"1375":{"position":[[23,5]]}}}],["user",{"_index":210,"t":{"913":{"position":[[0,4]]},"919":{"position":[[0,4]]},"954":{"position":[[29,4]]},"997":{"position":[[17,4]]}}}],["v8.8",{"_index":265,"t":{"1351":{"position":[[49,5]]}}}],["valid",{"_index":250,"t":{"1056":{"position":[[0,10]]}}}],["valu",{"_index":94,"t":{"321":{"position":[[43,5]]},"323":{"position":[[37,5]]}}}],["variabl",{"_index":141,"t":{"554":{"position":[[0,9]]},"728":{"position":[[0,9]]},"919":{"position":[[13,8]]},"939":{"position":[[25,8]]},"954":{"position":[[42,8]]},"1027":{"position":[[9,9]]},"1033":{"position":[[6,9]]},"1163":{"position":[[7,8]]},"1168":{"position":[[7,8]]}}}],["variable_speed_compressor_train_multiple_streams_and_pressur",{"_index":272,"t":{"1394":{"position":[[7,62]]}}}],["variables/express",{"_index":202,"t":{"827":{"position":[[19,21]]}}}],["vector",{"_index":36,"t":{"103":{"position":[[58,7]]}}}],["venting_emitt",{"_index":74,"t":{"140":{"position":[[14,16]]},"1351":{"position":[[20,16]]}}}],["version",{"_index":98,"t":{"343":{"position":[[6,7]]},"349":{"position":[[11,7]]}}}],["within",{"_index":37,"t":{"103":{"position":[[66,6]]}}}],["work",{"_index":148,"t":{"630":{"position":[[7,5]]}}}],["workflow",{"_index":177,"t":{"690":{"position":[[0,8]]},"1048":{"position":[[0,8]]},"1049":{"position":[[0,8]]}}}],["yaml",{"_index":15,"t":{"72":{"position":[[22,4]]},"89":{"position":[[0,4]]},"98":{"position":[[0,4]]},"112":{"position":[[0,4]]},"139":{"position":[[0,4]]},"512":{"position":[[0,4]]},"522":{"position":[[7,4]]},"540":{"position":[[7,4]]},"544":{"position":[[0,4]]},"564":{"position":[[11,4]]},"697":{"position":[[0,4]]},"720":{"position":[[0,4]]},"738":{"position":[[11,4]]},"804":{"position":[[0,4]]},"1073":{"position":[[11,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":2,"t":"New keyword from eCalc v8.8! INSTALLATIONS / VENTING_EMITTERS Required Child of Children/Options No VENTING_EMITTERS NAME RATE important From eCalc version 8.8: The new keyword EMISSION is a part of an updated definition of VENTING_EMITTERS. eCalc version 8.7 and earlier: EMISSION-keyword cannot be used.","s":"EMISSION","u":"/ecalc/docs/about/references/keywords/EMISSION","h":"","p":1},{"i":4,"t":"The emission specifies the data to calculate the direct emissions on an installation. This data is used to set up a function that may be evaluated for a set of time series and return an emission result. The attributes NAME and RATE are required.","s":"Description","u":"/ecalc/docs/about/references/keywords/EMISSION","h":"#description","p":1},{"i":6,"t":"EMISSION: - NAME: RATE: VALUE: UNIT: TYPE: ","s":"Format","u":"/ecalc/docs/about/references/keywords/EMISSION","h":"#format","p":1},{"i":8,"t":"EMISSION: - NAME: CH4 RATE: VALUE: 4 UNIT: kg/d TYPE: STREAM_DAY","s":"Example","u":"/ecalc/docs/about/references/keywords/EMISSION","h":"#example","p":1},{"i":10,"t":"Deprecated from eCalc v8.8 (is included in EMISSION). [...] / EMISSION_NAME Required Child of Children/Options Yes VENTING_EMITTERS None important eCalc version 8.8: EMISSION_NAME is deprecated, instead NAME is given in EMISSION. eCalc version 8.7: VENTING_EMITTERS keyword is replacing the DIRECT_EMITTERS keyword. eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before.","s":"EMISSION_NAME","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","h":"","p":9},{"i":12,"t":"Name of an entity.","s":"Description","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","h":"#description","p":9},{"i":14,"t":"EMISSION_NAME: ","s":"Format","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","h":"#format","p":9},{"i":16,"t":"Usage in VENTING_EMITTERS: VENTING_EMITTERS: - EMISSION_NAME: CH4","s":"Example","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","h":"#example","p":9},{"i":18,"t":"Deprecated from eCalc v8.8 (is included in EMISSION). INSTALLATIONS / [...] / EMITTER_MODEL / EMISSION_RATE Required Child of Children/Options Yes EMITTER_MODEL None","s":"EMISSION_RATE","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","h":"","p":17},{"i":20,"t":"Used to define the emission rate for some EMITTER_MODEL types using an Expressions","s":"Description","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","h":"#description","p":17},{"i":22,"t":"EMISSION_RATE: ","s":"Format","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","h":"#format","p":17},{"i":24,"t":"EMISSION_RATE: 10.0 # [kg/day]","s":"Example","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","h":"#example","p":17},{"i":26,"t":"FUEL_TYPES / EMISSIONS Required Child of Children/Options No FUEL_TYPES FACTOR NAME","s":"EMISSIONS","u":"/ecalc/docs/about/references/keywords/EMISSIONS","h":"","p":25},{"i":28,"t":"In EMISSIONS one or more emissions related to the use of fuel is specified as a list. Each emission entry is required to have a NAME and a FACTOR.","s":"Description","u":"/ecalc/docs/about/references/keywords/EMISSIONS","h":"#description","p":25},{"i":30,"t":"EMISSIONS: - NAME: FACTOR: ","s":"Format","u":"/ecalc/docs/about/references/keywords/EMISSIONS","h":"#format","p":25},{"i":32,"t":"For example, if you want to add CO2 emissions associated to the usage of a FUEL_TYPES you write the following: EMISSIONS: - NAME: CO2 FACTOR: 2.5 # [kg/Sm3]","s":"Example","u":"/ecalc/docs/about/references/keywords/EMISSIONS","h":"#example","p":25},{"i":34,"t":"Deprecated from eCalc v8.8 (replaced by EMISSION). INSTALLATIONS / [...] / EMITTER_MODEL Required Child of Children/Options No VENTING_EMITTERS EMISSION_RATE important eCalc version 8.8: EMITTER_MODEL is deprecated, and replaced by new EMISSION keyword. eCalc version 8.7: VENTING_EMITTERS keyword is replacing the DIRECT_EMITTERS keyword. eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before.","s":"EMITTER_MODEL","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","h":"","p":33},{"i":36,"t":"The emitter model specifies the data to calculate the direct emissions on an installation. This data is used to set up a function that may be evaluated for a set of time series and return an emission result. The EMISSION_RATE describes the rate [kg/day] of emissions, and is required.","s":"Description","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","h":"#description","p":33},{"i":38,"t":"EMITTER_MODEL: - EMISSION_RATE: ","s":"Format","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","h":"#format","p":33},{"i":40,"t":"EMITTER_MODEL: - EMISSION_RATE: 4 # [kg/day]","s":"Example","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","h":"#example","p":33},{"i":42,"t":"END Required Child of Children/Options No None None","s":"END","u":"/ecalc/docs/about/references/keywords/END","h":"","p":41},{"i":44,"t":"Global end date for eCalc to stop energy and emission calculations. It is recommended that you have control of which date you want data to be calculated and exported for. If you specify the end date as 2080-01-01, the last period to be calculated is 2079 is included in the output. The hours, minutes and seconds of the day are implicitly set to \"00:00:00\", so the counting ends at midnight on January 1st 2080 (2079-12-31 23:59:59). You can provide a date that is after the global time vector, but it is recommended to set it to the end of your timeseries data. Normally the timeseries do not provide this information directly. The last timestep provided in a timeseries is e.g. 2079-01-01, which would often mean that the data changed at that point, and will e.g. be valid 1 year from then (if we work with YEARLY output frequency). To make sure that eCalc stops at the correct place, you should therefore specify the exclusive date of the data. The START keyword have similar behaviour. If END is not specified, eCalc will make an educated (but possibly incorrect) guess on when the output data should end.","s":"Description","u":"/ecalc/docs/about/references/keywords/END","h":"#description","p":41},{"i":46,"t":"END: ","s":"Format","u":"/ecalc/docs/about/references/keywords/END","h":"#format","p":41},{"i":48,"t":"Given an input dataset from 01-01-2000 - 01-01-2040, ignoring the last 20 years of data can be achieved as follows: END: 2020-01-01","s":"Example","u":"/ecalc/docs/about/references/keywords/END","h":"#example","p":41},{"i":50,"t":"info Currently the only officially supported method is the eCalc CLI using eCalc YAML models. There are three options to run eCalc models: eCalc CLI eCalc Python library","s":"API Reference","u":"/ecalc/docs/about/getting_started/","h":"","p":49},{"i":53,"t":"Choose the eCalc CLI option if you: Don't know much about programming Have simple requirements Can define the eCalc models statically","s":"eCalc CLI","u":"/ecalc/docs/about/getting_started/","h":"#ecalc-cli","p":49},{"i":55,"t":"Choose the Python Library option if you: Are a developer or advanced user, and want to build eCalc models and get results programmatically Use Python, and you need to use (parts of) eCalc as a dependency Need access to \"inner core functionality\" of eCalc note Python Library is not yet officially available and not recommended to use due to upcoming breaking changes very soon","s":"Python Library","u":"/ecalc/docs/about/getting_started/","h":"#python-library","p":49},{"i":57,"t":"The eCalc™ technology is being developed by Equinor within the Technology, Digital and Innovation (TDI) business area.","s":"Introduction to eCalc™","u":"/ecalc/docs/about/","h":"","p":56},{"i":59,"t":"eCalc™ is a software tool for calculation of energy demand and greenhouse gas emissions from oil and gas production and processing. It enables the cross-disciplinary collaboration required to achieve high-quality and transparent energy and GHG emission prognosis and decision support. eCalc™ performs energy and emission calculations by integrating data, knowledge and future plans from different disciplines. This could be production and injection profiles from the reservoir engineer, characteristics of energy consuming equipment units such as gas turbines, compressors and pumps from the facility engineer, and emission factors for different fuels from the sustainability engineer. The main idea is using physical or data-driven models to relate production rates and pressures to the required processing energy and resulting emissions. Integrated bookkeeping for all emission sources is offered. eCalc™ uses a bottom-up approach to give high-quality installation and portfolio level forecasts at the same time as detailed insights about the energy drivers and processing capacities for the individual installation.","s":"What is eCalc™?","u":"/ecalc/docs/about/","h":"#what-is-ecalc","p":56},{"i":61,"t":"By using eCalc™ you will be able to forecast your energy consumption and emissions with consistency and transparency. You will also be enabled to study the effect on energy demand and emissions of your investment opportunities as well as studying emission reduction measures.","s":"Why should I use eCalc™?","u":"/ecalc/docs/about/","h":"#why-should-i-use-ecalc","p":56},{"i":63,"t":"To use eCalc™ you need to create a model setup of your asset. This is described in the Modelling section. Once the model is ready, you can run the eCalc™ calculator. Different user interfaces for the calculator are offered. These are described in detail in the Getting started section.","s":"How to use eCalc™?","u":"/ecalc/docs/about/","h":"#how-to-use-ecalc","p":56},{"i":65,"t":"info It is currently recommended to use the CLI instead of the Python library directly due to upcoming breaking changes in the Python library The current recommended way to use eCalc is through the CLI (Command Line Interpreter). This is a part of the eCalc Python library, and should be accessible from the command line as ecalc. See all commands and options in the CLI reference","s":"eCalc CLI","u":"/ecalc/docs/about/getting_started/cli/","h":"","p":64},{"i":67,"t":"Use show command to inspect results​ First run ecalc (here shown with default output folder) $ ecalc run /somelocation/myfield.yaml --output-folder output Enter the output folder $ cd output Show results for a single component $ ecalc show results --name waterinj --output-format json or as csv $ ecalc show results --name waterinj --output-format csv or write the full csv result to a file (this will give the same output as ecalc run with the csv option) $ ecalc show results --output-format csv --file results.csv Output Monthly CSV data​ $ ecalc run -f MONTH /somelocation/myfield.yml Specify different output folder​ $ ecalc run -o /somedirectory/foo/bar/ /somelocation/myfield.yml Specify a different naming prefix to outputs​ $ ecalc run -n myfield_myproject /somelocation/myfield.yml Show stack trace for debugging​ $ ecalc run --log DEBUG /somelocation/myfield.yml","s":"Example Usage","u":"/ecalc/docs/about/getting_started/cli/","h":"#example-usage","p":64},{"i":69,"t":"While running eCalc as a Unix command-line tool, you may come across seemingly incomprehensible error messages. This page tries to explain some common error messages and proposes how to fix them.","s":"FAQ / Troubleshooting","u":"/ecalc/docs/about/getting_started/cli/faq","h":"","p":68},{"i":71,"t":"In YAML, the indentation is very important and specifies the level in the hierarchy for the input. If you have the wrong indentation somewhere, you may get both YAML read errors and/or eCalc setup errors.","s":"Indentation errors","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#indentation-errors","p":68},{"i":73,"t":"The following error messages are common when you have formatting issues in your YAML file: mapping values are not allowed here while scanning a simple key in \"\", line , column could not find expected ':', line , column while parsing a block mapping in , line , column expected , but found ''","s":"Error messages due to YAML read problems","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-yaml-read-problems","p":68},{"i":75,"t":"The configuration expects a sub-hierarchy of data. After reading YAML, this data sub-hierarchy would be of object type dictionary (dict) and in some cases contain lists or other objects. If invalid data is input, the error message would indicate that the type is wrong because it is not a 'dict'/'list' or other type None should be instance of 'dict' None should be instance of 'list'","s":"Error messages due to invalid eCalc configuration","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-invalid-ecalc-configuration","p":68},{"i":77,"t":"Check your YAML setup file for correct indentation and correct format of values for each eCalc key.","s":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution","p":68},{"i":79,"t":"eCalc uses ruamel.yaml to read the YAML setup files. Some (text) files have an encoding not supported and will thus result in an error message. One example of this is an unrecognized \"BOM\" character in \"UTF-8 Unicode\". Error message while scanning a simple key in \"\", line , column 1 could not find expected ':', line , column 1","s":"Special characters in Unicode","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#special-characters-in-unicode","p":68},{"i":81,"t":"Check the encoding of your setupfile (and inputfiles): $ file .yml If the output of this is not \"ASCII text\", convert your file to \"US-ASCII\" using iconv. Example when .yml is of type \"UTF-8\" $ iconv -f UTF-8 -t US-ASCII//TRANSLIT -o .yml .yml Now try to run again using the new file .yml.","s":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution-1","p":68},{"i":83,"t":"warning It is currently not recommended to use the Python library due to upcoming breaking changes. If you choose to use the Python library programmatically when creating eCalc models, there is a greater flexibility in dynamically changing the eCalc models. See all commands and options in the API reference","s":"Python Library","u":"/ecalc/docs/about/getting_started/library/","h":"","p":82},{"i":85,"t":"We have chosen the way to model eCalc models is in the YAML format. For a simple introduction to YAML, please see here The eCalc YAML model can either be run directly with the eCalc CLI or loaded using the Python library For getting started setting up your first eCalc YAML model, please see Setup an eCalc Model, look at some example YAMLs here and refer to the vocabulary that we use here.","s":"YAML","u":"/ecalc/docs/about/getting_started/yaml/","h":"","p":84},{"i":88,"t":"In this migration guide you will find: YAML changes CLI changes","s":"v7 to v8","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"","p":87},{"i":91,"t":"This doc guides you through migrating an existing eCalc™ model from version v7 to v8. We try to make this as easy as possible, and provide a step-by-step migration guide.","s":"Migration overview","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#migration-overview","p":87},{"i":93,"t":"All component names must be unique to avoid ambiguity in reporting UNITS are required when setting up compressor and pump charts Restrict allowed characters in component names and emission names NAME no longer used for LTP reporting, use CATEGORY instead Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS) 1. All component names must be unique​ All component names must be unique in order to avoid ambiguity in reporting. Components include asset/ecalc-model, installation, generator sets, electricity consumers, fuel consumers and direct emitters. main.yaml INSTALLATIONS: - NAME: Installation ... GENERATORSETS: - NAME: Genset ... CONSUMERS: - NAME: Consumer ... - NAME: Consumer ... - NAME: Genset ... FUELCONSUMERS: - NAME: FuelConsumer ... - NAME: FuelConsumer ... DIRECT_EMITTER: - NAME: DirectEmitter ... - NAME: DirectEmitter ... - NAME: Installation ... This model is no longer valid, and the duplicated installation names are highlighted. To make this model valid these names needs to be changed. For example: main.yaml INSTALLATIONS: - NAME: Installation_A ... GENERATORSETS: - NAME: Genset_A ... CONSUMERS: - NAME: Consumer_A ... - NAME: Consumer_B ... - NAME: Genset_B ... FUELCONSUMERS: - NAME: FuelConsumer_A ... - NAME: FuelConsumer_B ... DIRECT_EMITTER: - NAME: DirectEmitter_A ... - NAME: DirectEmitter_B ... - NAME: Installation_B ... This will make it possible to attribute results to each consumer by name, and removes any an ambiguity when interpreting eCalc™ results. See INSTALLATION, GENERATORSET, CONSUMERS, FUELCONSUMERS, VENTING_EMITTER for more details about the relevant keywords. Are you using power from shore? We have implemented temporal categories for consumers to support the power from shore implementation in use. Instead of duplicating the generator set and setting the POWER-FROM-SHORE category, it is now possible to change the category at a certain date. This is the same syntax as other temporal models. CATEGORY: 2020-01-01: TURBINE-GENERATOR 2030-01-01: POWER-FROM-SHORE See Power from shore for more information. 2. UNITS for pump and compressor charts​ Compressor and pump charts has previously had implicit units, without requiring the operator to specify what units are actually being used. This increases the risk of wrong specification, and makes it more difficult to hand over models. To amend this issue, and to open up for more flexibility in regard to units, it is now mandatory to specify. To keep the old defaults you can do the following: main.yaml FACILITY_INPUTS: - NAME: single_speed_pump_chart FILE: TYPE: PUMP_CHART_SINGLE_SPEED UNITS: RATE: AM3_PER_HOUR HEAD: M EFFICIENCY: PERCENTAGE - NAME: variable_speed_pump_chart FILE: TYPE: PUMP_CHART_VARIABLE_SPEED UNITS: RATE: AM3_PER_HOUR HEAD: M EFFICIENCY: PERCENTAGE MODELS: - NAME: single_speed_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: SINGLE_SPEED UNITS: HEAD: M RATE: AM3_PER_HOUR EFFICIENCY: FRACTION CURVES: ... - NAME: variable_speed_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: VARIABLE_SPEED UNITS: HEAD: M RATE: AM3_PER_HOUR EFFICIENCY: FRACTION CURVES: ... ... See COMPRESSOR CHART and PUMP CHART for more details about the relevant keywords. 3. Restrict allowed characters in component names and emission names​ Component names can now only consist of letters (a-z, upper and lower case), numbers (0-9), underscore (_), hyphen (-) and space ( ). Emission names can now only consist of letters (a-z, upper and lower case), numbers (0-9) and underscore (_). 4. NAME no longer used for LTP reporting, use CATEGORY instead​ We have categories for FLARE and COLD-VENTING-FUGITIVE, and have introduced categories for LOADING and STORAGE. These should now be used instead of NAME. main.yaml INSTALLATIONS: - NAME: Installation_A ... GENERATORSETS: - NAME: Genset_A ... CONSUMERS: - NAME: Consumer_A ... FUELCONSUMERS: - NAME: loading # Name will no longer be used in LTP reporting CATEGORY: LOADING # Category must be used to include it in LTP reporting FUEL: Fuel_A ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: Oil_rate_per_timestep ... - NAME: storage # Name will no longer be used in LTP reporting CATEGORY: STORAGE # Category must be used to include it in LTP reporting FUEL: Fuel_B ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: Oil_rate_per_timestep ... - NAME: flare # Name will no longer be used in LTP reporting CATEGORY: FLARE # Category must be used to include it in LTP reporting FUEL: Fuel_C ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: Oil_rate_per_timestep ... - NAME: cold_venting_fugitives_nmvoc # Name will no longer be used in LTP reporting CATEGORY: COLD-VENTING-FUGITIVE # Category must be used to include it in LTP reporting FUEL: Fuel_D # The fuel specification determines what emissions will be used in LTP ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: Oil_rate_per_timestep ... ... 5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)​ Only a limited pre-defined set of categories is valid input to the CATEGORY-keyword, it is no longer possible to use custom names. The input is case-sensitive and must match exactly with the pre-defined names. See CLI Docs for full documentation.","s":"Main differences","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#main-differences","p":87},{"i":95,"t":"This version includes some changes to how the CLI is invoked and changes to default behavior. Invoking eCalc™ directly is no longer supported, use ecalc run instead. Log level should be specified as the first argument + log to file Model yaml-file needs to come last Extrapolation (correction) is now always used and cannot be disabled Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export Simple results are now default for json 1. Invoking eCalc™ directly is no longer supported, use ecalc run instead.​ To make it possible to add ecalc show we added the ecalc run command. In v8 it is required to specify run when calculating a model. If you previously ran eCalc™ with this command $ ecalc ./my-model.yaml you should now use $ ecalc run ./my-model.yaml 2. Log level should be specified as the first argument + log to file​ Previously you could specify the --log argument after run, this is no longer possible. This is the new way of specifying log level. $ ecalc --log DEBUG run ./my-model.yaml In addition we are introducing --log-folder where you can direct and store the log in a given path to easily look at the log of running later than scrolling in the terminal window. Due to the excessive amount of logs that eCalc produces when running at low log levels, we have set the log to only log at WARNING and above (WARNING + ERROR messages). The user must make sure that the path/folder exists before running and that you have correct permissions, as eCalc will NOT do that for you. $ ecalc --log DEBUG --log-folder . run ./my-model.yaml As you see above, the argument MUST be added BEFORE the run argument. 3. Model yaml-file needs to come last​ When running eCalc™ you will now need to set the model file argument last. ecalc [OPTIONS] COMMAND [ARGS] [MODEL YAML-file] See the CLI Docs or run ecalc --help for the full documentation. 4. Extrapolation correction is no longer optional​ We have removed the extrapolation correction argument. eCalc™ will now always \"extrapolate\" values. The main reason for making this change was that the feature was in general always used, in addition to being a confusing term. Let us know if you have a use-case where this was needed. 5. Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export​ To prepare for Open Source and to make the LTP export more agnostic (even though the column names are heavily affected by Centuries), we simplify the argument to get LTP results. See CLI Docs for full documentation. 6. Simple results are now default for json​ Detailed output (or any json) should mainly be used for QA and advanced users, and is no longer shown by default. To keep old behavior, the user now needs to use the --detailed-output option when running the CLI. See CLI reference docs for more details.","s":"CLI migration","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#cli-migration","p":87},{"i":97,"t":"In this migration guide you will find: YAML changes","s":"v8 to v8.1","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"","p":96},{"i":100,"t":"This doc guides you through migrating an existing eCalc™ model from version v8 to v8.1. We try to make this as easy as possible, and provide a step-by-step migration guide.","s":"Migration overview","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#migration-overview","p":96},{"i":102,"t":"RATE_INTERPOLATION_TYPE is renamed to INTERPOLATION_TYPE New time series type: DEFAULT with default RIGHT interpolation RESERVOIR type is removed Previously, it looked like this: TIME_SERIES: - NAME:

    Title

    Heading 2 ## Title

    Title

    Heading 3 ### Title

    Title

    Heading 4 #### Title

    Title

    Heading 5 ##### Title
    Title
    Heading 6 ###### Title
    Title
    Paragraph Just start typing

    Just start typing

    Bold **Text** Text Italic *Text* Text Strike ~~Text~~ Text Quoted (indent) > Text

    Text

    Code (inline) Statement Statement Code (fenced) Statement 1 Statement 2 Statement 3
    Statement 1Statement 2Statement 3
    List (unordered) * List item 1 * List item 2 * List item 3
    • List item 1
    • List item 2
    • List item 3
    List (ordered) 1. List item 1 2. List item 2 3. List item 3
    • List item 1
    • List item 2
    • List item 3
    Images ![Alternate text for image](path/to/image) \"Alternative Hyperlinks [Link text](https://www.google.com/)
    Link text note You may want to escape special html characters using \\, and replace the great than symbol with <, otherwise Docusaurus will confuse it with html code.","s":"Markdown summary","u":"/ecalc/docs/contribute/documentation-guide/markdown","h":"","p":634},{"i":641,"t":"Welcome! We are glad that you want to contribute to our project! 💖 This project accepts contributions via GitHub Pull Requests. This document outlines the process to help get your contribution accepted. There are many ways to contribute: Suggest features Suggest changes Report bugs You can start by looking through the GitHub Issues filtered by labels. info We follow some contributor guidelines that you will find in our contributor guidelines. Don't worry if your contribution does not follow all the guidelines. We will guide you in the code review process. The threshold for contributing is low, and we appreciate any contribution great or small. 🙏","s":"Get started","u":"/ecalc/docs/contribute/get-started","h":"","p":640},{"i":643,"t":"See Documentation guide for how to get started with contributions to this documentation.","s":"Prerequisites","u":"/ecalc/docs/contribute/get-started","h":"#prerequisites","p":640},{"i":645,"t":"Contribution is done in 3 simple steps:","s":"How to contribute","u":"/ecalc/docs/contribute/get-started","h":"#how-to-contribute","p":640},{"i":647,"t":"For major changes, please open an issue first to discuss what you would like to change. For smaller changes, it is sufficient to explain the change without referring to an issue.","s":"Initiate change","u":"/ecalc/docs/contribute/get-started","h":"#initiate-change","p":640},{"i":649,"t":"To contribute to the project, you will have to make the change and create a Pull Request on GitHub. How you do this depends on your role. Equinor internal contributors, you may open a Pull Request directly, Independent contributors, you will Fork the repository.","s":"Make a Pull Request","u":"/ecalc/docs/contribute/get-started","h":"#make-a-pull-request","p":640},{"i":651,"t":"Once a Pull Request has been made, we will give you feedback and maybe suggest changes. The core team looks at pull requests on a regular basis, we review the code and guide you if needed. Here you will find more information about the GitHub Code Review Process","s":"Get code review","u":"/ecalc/docs/contribute/get-started","h":"#get-code-review","p":640},{"i":653,"t":"For major changes, please open an issue first to discuss what you would like to change Work on your own fork of the main repo Use a separate branch for each issue you’re working on Use conventional commit. See our Git commit format for details, and our Git guide for our full guide Please include unit tests with all your code changes We follow Trunk Based Development style of working with short-lived feature branches.","s":"Guidelines","u":"/ecalc/docs/contribute/get-started","h":"#guidelines","p":640},{"i":655,"t":"Please try to make your Pull Requests easy to review for us. Make small pull requests. The smaller, the faster to review and the more likely it will be merged soon. Don't make changes unrelated to the goals of your PR. While you're writing up the pull request, you can add closes # in the message body where issue number is the issue you're fixing. Therefore, an example would be closes #42 would close issue #42.","s":"Pull Requests","u":"/ecalc/docs/contribute/get-started","h":"#pull-requests","p":640},{"i":657,"t":"Git commits are required to follow conventional commits. Please see our Conventional Commit Guide for examples.","s":"Git commit format","u":"/ecalc/docs/contribute/get-started","h":"#git-commit-format","p":640},{"i":659,"t":"We use the pre-commit hooks in order to ensure uniform formatting and to exclude potential code issues. We strive for readable code. A few good tips are: Self-documenting code with self-explaining variable names Composition over inheritance Functional code over Object-Oriented Code Rugged code to write more robust code Domain Driven Design to to match the code with the domain we are working on","s":"Readability","u":"/ecalc/docs/contribute/get-started","h":"#readability","p":640},{"i":661,"t":"Except for the pre-commits hooks mentioned above, we also strive to follow the following code style: Use capital letters for constants i.e. SECONDS_PER_HOUR Try to split methods/modules/classes into smaller bits of code Remove, do not comment out, unused code Use types and type hinting We comment the code when it is not self-explanatory Be consistent with existing code style - try to make it look like the code is written by one developer For Python, we follow PEP 8 – Style Guide for Python Code and PEP 20 - The Zen of Python: Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those! Please reach out to us if you have any questions. 👋 Thank you for your contribution! 🎉","s":"Code style","u":"/ecalc/docs/contribute/get-started","h":"#code-style","p":640},{"i":663,"t":"Git commits are required to follow conventional commits. The message should be structured like this: [optional scope]: [optional body] [optional footer(s)] The type can be one of these types: feat, fix, build, ci, docs, style, refactor, test, and chore. The description should be lower-case for the first letter. For description of optional parts, please refer to the conventional Commits Docs. Here are some simple example conventional commits: feat: implement new awesome feature docs: add developer guidelines A more advanced example: fix: prevent racing of requests Introduce a request id and a reference to latest request. Dismiss incoming responses other than from latest request. Remove timeouts which were used to mitigate the racing issue but are obsolete now. Reviewed-by: Z Refs: #123","s":"Conventional Commits","u":"/ecalc/docs/contribute/guides/conventional-commits","h":"","p":662},{"i":665,"t":"Git is the version control system (VCS) that is responsible for tracking all changes done to the code base. Git is a distributed version control system that tracks changes in any set of computer files, and allows for collaborative development of source code and documentation. We use Git as a service through GitHub. See GitHub Docs for more information about GitHub and how to get started. info If you do not want to work with files locally, GitHub lets you complete many Git-related actions directly in the browser, including: Creating a repository Forking a repository Managing files","s":"Git","u":"/ecalc/docs/contribute/guides/git","h":"","p":664},{"i":667,"t":"Go to git-scm.com to download the appropriate git client unless it is already installed on your system. To verify that git is installed, you can run: git --version See GitHub Docs - Set up Git for detailed instructions.","s":"Setting up Git","u":"/ecalc/docs/contribute/guides/git","h":"#setting-up-git","p":664},{"i":669,"t":"Git is a powerful tool that can be used in many ways. We recommend the following resources: Introduction to git - GitHub - About git How to get out of git trouble Oh shit, Git!?! Below we will describe the most commonly used commands and scenarios when working with git. info In the following sections we use the syntax <some text> where you should fill in your own values, such as: <change type>: conventional commits change types such as feat, fix, docs, test, chore, refactor, etc. <issue number>: the GitHub Issue Number that you are solving. This may be omitted if you are fixing something tiny. <description>: a short summary of the code changes, e.g., fix: array parsing issue when multiple spaces were contained in string.","s":"Using Git","u":"/ecalc/docs/contribute/guides/git","h":"#using-git","p":664},{"i":671,"t":"Navigate to the location where you want to store the code, and clone the repository: git clone git@github.com:equinor/ecalc.git This will create a local copy of a project that already exists remotely. The copy will be stored in a sub-folder, with the same name as the repository, ecalc/.","s":"Cloning a git repository","u":"/ecalc/docs/contribute/guides/git","h":"#cloning-a-git-repository","p":664},{"i":673,"t":"git config --global user.name \"My name\" git config --global user.email example@email.com This is what will show in the git log when you make changes.","s":"Tell Git who you are","u":"/ecalc/docs/contribute/guides/git","h":"#tell-git-who-you-are","p":664},{"i":675,"t":"In order to create a new local branch and switch to it: git checkout -b /- for new versions of git you may also use the more intuitive. git switch -c /-","s":"Create your own branch","u":"/ecalc/docs/contribute/guides/git","h":"#create-your-own-branch","p":664},{"i":677,"t":"git checkout ","s":"Switch between existing branches","u":"/ecalc/docs/contribute/guides/git","h":"#switch-between-existing-branches","p":664},{"i":679,"t":"git pull This will update the local branch you are currently in, with changes done in GitHub. git push --set-upstream origin /-","s":"Fetch changes from GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#fetch-changes-from-github","p":664},{"i":681,"t":"git push This will update the remove repository on GitHub. If it is the first time for a new branch you will also have to tell git that you are creating a new remote branch by using the command:","s":"Send your changes to GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#send-your-changes-to-github","p":664},{"i":683,"t":"List the files you have changed and those you still need to add or commit: git status","s":"Check status of changes","u":"/ecalc/docs/contribute/guides/git","h":"#check-status-of-changes","p":664},{"i":685,"t":"Add new or changed files git add or adding everything in and below your working directory git add .","s":"Add files","u":"/ecalc/docs/contribute/guides/git","h":"#add-files","p":664},{"i":687,"t":"Commit any files you've added with git add, and also commit any files you've changed since then: git commit -m \": : /- Add the changed files git add Commit your changes using the conventional commits formatting for the commit messages. git commit -m \": \" If your changes are in conflict with changes done by other, then you need to rebase and solve the change conflicts. This also ensures your code is running on the latest available code. git fetch git rebase origin/main Push changes to GitHub git push --set-upstream origin /- You can now Create a Pull Request","s":"Pull Requests","u":"/ecalc/docs/contribute/guides/git","h":"#pull-requests","p":664},{"i":694,"t":"For external developers, you will contribute to the project through forking. Here's a quick guide: Create your own fork of the repository Clone the project to your machine git clone git@github.com:equinor/ecalc.git To keep track of the original repository add another remote named upstream git remote add upstream git@github.com:equinor/template-fastapi-react.git Create a branch locally with a succinct but descriptive name and prefixed with change type. git checkout -b /- Make the changes in the created branch. Add and run tests for your changes if needed (we only take pull requests with passing tests). Add the changed files git add Commit your changes using the conventional commits formatting for the commit messages. git commit -m \": \" Before you send the pull request, be sure to rebase onto the upstream source. This ensures your code is running on the latest available code. git fetch upstream git rebase upstream/main Push to your fork. git push origin feature/my-new-feature Submit a Pull Request from a fork. Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us. That's it... thank you for your contribution! After your pull request is merged, you can safely delete your branch.","s":"Fork the repository","u":"/ecalc/docs/contribute/guides/git","h":"#fork-the-repository","p":664},{"i":696,"t":"The Drogon example is based on a synthetic data set. On the installation, the following consumers are identified: The results of a performed characterization of the equipment are listed below: Consumer Type Description Generator set A Generator set Variable fuel consumer with electricity to fuel function Base production load Power consumer Constant load - 9 MW Gas compression train Power consumer Variable consumption depending on produced gas rate Gas re-compressors Power consumer Constant load - 2 MW Sea water injection pump Power consumer Variable consumption depending on water injection rate Booster pump Power consumer Constant load - 2 MW","s":"Drogon model example","u":"/ecalc/docs/about/modelling/examples/drogon","h":"","p":695},{"i":698,"t":"The YAML model consists of the following components: Time series input Facility inputs Model inputs Fuel type input Installation topography The skeleton of the YAML file looks like the following: TIME_SERIES: FACILITY_INPUTS: MODELS: FUEL_TYPES: INSTALLATIONS: ","s":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#yaml-model-overview","p":695},{"i":700,"t":"The reservoir variables. In this case the file is called: drogon_mean.csv. TIME_SERIES: - NAME: SIM1 TYPE: DEFAULT FILE: drogon_mean.csv","s":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#time_series","p":695},{"i":702,"t":"In this case, the compressors are not specified in this section as GENERIC COMPRESSOR CHARTS. Thus, the pump chart and generator set will be the only facility components specified within this section. The pump will be single speed, meaning that the pump type will be PUMP_CHART_SINGLE_SPEED. The generator set will be a tabulated, where power consumption will be linked to fuel gas utilised. FACILITY_INPUTS: - NAME: genset_a_power_fuel TYPE: ELECTRICITY2FUEL FILE: genset.csv - NAME: wi_200 FILE: wi_200bar_ssp.csv TYPE: PUMP_CHART_SINGLE_SPEED UNITS: HEAD: M RATE: AM3_PER_HOUR EFFICIENCY: PERCENTAGE","s":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#facility_inputs","p":695},{"i":704,"t":"The model section will contain the fluid model, the compressor chart and the subsequent compressor model. Peng-Robinson (PR) will be the selected equation of state in this example. This example will use a generic compressor chart. In this case, a generic compressor chart from input will utilised. Here, the a \"typical\" chart will be shifted to match the input head and rate data. See GENERIC COMPRESSOR CHARTS for more details. When a generic chart is used, a polytropic efficiency needs to be specified. This value will be constant throughout the use, in this case a value of 0.8 is used. A SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN model is used in this example, as this is necessary when a generic chart is used. Instead of manually specifying the number of compression stages, a MAXIMUM_PRESSURE_RATIO_PER_STAGE of 3.5 is defined. This will automatically distribute the pressure increase amongst the compression train so that no pressure ratio per compression stage will be above 3.5. MODELS: - NAME: drogon_fluid TYPE: FLUID FLUID_MODEL_TYPE: COMPOSITION EOS_MODEL: PR COMPOSITION: water: 0.0 nitrogen: 0.510676386339746 CO2: 2.44965511776504 methane: 75.6328106126248 ethane: 10.9074631209139 propane: 8.11875087121037 i_butane: 0.849146377471569 n_butane: 1.34903656604691 i_pentane: 0.104982143381498 n_pentane: 0.071218218251483 n_hexane: 0.0063 - NAME: generic_from_input_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: GENERIC_FROM_INPUT POLYTROPIC_EFFICIENCY: 0.8 UNITS: EFFICIENCY: FRACTION - NAME: simplified_compressor_train_model TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN FLUID_MODEL: drogon_fluid COMPRESSOR_TRAIN: MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5 COMPRESSOR_CHART: generic_from_input_compressor_chart INLET_TEMPERATURE: 19.3","s":"MODELS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#models","p":695},{"i":706,"t":"The fuel gas has a CO2 factor of 2.416. FUEL_TYPES: - NAME: fuel_gas CATEGORY: FUEL-GAS EMISSIONS: - NAME: CO2 FACTOR: 2.416 #CO2/Sm3 fuel gas burned","s":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#fuel_types","p":695},{"i":708,"t":"In the INSTALLATIONS section, the previously defined models and facility inputs are further defined. Here the hydrocarbon export can be specified. This is used in order to get a hydrocarbon-to-emission value. In this case, it is assumed that this facility exports oil (OIL_PROD) and gas (GAS_PROD). INSTALLATIONS: - NAME: drogon_installation CATEGORY: FIXED HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000 FUEL: fuel_gas","s":"INSTALLATIONS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#installations","p":695},{"i":710,"t":"There is one generator set used in this example - Generator set A. This is a tabular relationship between power generated/consumed and fuel gas burnt. Under this category, all consumers that utilise electricity are defined. In this case scenario, all pumps and compressors are electrically driven; thus, all consumers will be specified under this category. GENERATORSETS: - NAME: main_power ELECTRICITY2FUEL: genset_a_power_fuel CATEGORY: TURBINE-GENERATOR CONSUMERS: PUMPS​ The previously defined variable speed pump (in FACILITY_INPUTS) is put into further defined with suction and discharge pressures, rates and operational settings. Here, a system of pumps is used. This means that instead of a single pump being used to deliver the respective injection rate, a system of pumps is defined. In this case, a system of two pumps will be used. If the first pump is unable to deliver the requested head or rate, a second pump will be additionally used and the rate will be split across the pump system. As only one pump has been defined, the same pump model will be used for each train. As each pump is identical, the rate will be equally split across the train when needed (this is to ensure the highest pump efficiency - see PUMP MODELLING for more details.) A fluid density of 1025 kg/m3 is used, with a suction and discharge pressure of 12 and 200 bar respectively. - NAME: water injection CATEGORY: PUMP ENERGY_USAGE_MODEL: TYPE: PUMP_SYSTEM PUMPS: - NAME: pump_a_lp CHART: wi_200 - NAME: pump_b_lp CHART: wi_200 TOTAL_SYSTEM_RATE: SIM1;WATER_INJ FLUID_DENSITY: 1025 OPERATIONAL_SETTINGS: - RATE_FRACTIONS: - 1 - 0 SUCTION_PRESSURE: 12 DISCHARGE_PRESSURE: 200 - RATE_FRACTIONS: - 0.5 - 0.5 SUCTION_PRESSURE: 12 DISCHARGE_PRESSURE: 200 COMPRESSORS​ For the compression model, a compressor system is not used. This is due to the use of generic compressor charts. As the generic charts are shifted from input data there is no need for an additional compression train. No matter what rate/head values are inputted here, the generic chart is shifted so that all operational points will be within the operational envelope of the compressor. Here, 13 bar and 421 bar is specified for the suction and discharge pressure respectively. - NAME: gas export compressor train CATEGORY: COMPRESSOR ENERGY_USAGE_MODEL: TYPE: COMPRESSOR_SYSTEM COMPRESSORS: - NAME: train1_2 COMPRESSOR_MODEL: simplified_compressor_train_model TOTAL_SYSTEM_RATE: SIM1;GAS_PROD OPERATIONAL_SETTINGS: - RATE_FRACTIONS: - 1 SUCTION_PRESSURE: 13 DISCHARGE_PRESSURE: 421 BASE-LOAD​ Three different constant-loads are specified in this section. These being the booster pump, the re-compressors and then the general facility base-load. - NAME: boosterpump CATEGORY: BASE-LOAD ENERGY_USAGE_MODEL: TYPE: DIRECT LOAD: 2 - NAME: baseload CATEGORY: BASE-LOAD ENERGY_USAGE_MODEL: TYPE: DIRECT LOAD: 9 - NAME: re-compressors CATEGORY: BASE-LOAD ENERGY_USAGE_MODEL: TYPE: DIRECT LOAD: 2","s":"GENERATORSETS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#generatorsets","p":695},{"i":712,"t":"TIME_SERIES: - NAME: SIM1 FILE: drogon_mean.csv TYPE: DEFAULT FACILITY_INPUTS: - NAME: genset_a_power_fuel FILE: genset.csv TYPE: ELECTRICITY2FUEL - NAME: wi_200 FILE: wi_200bar_ssp.csv TYPE: PUMP_CHART_SINGLE_SPEED UNITS: HEAD: M RATE: AM3_PER_HOUR EFFICIENCY: PERCENTAGE MODELS: - NAME: drogon_fluid TYPE: FLUID FLUID_MODEL_TYPE: COMPOSITION EOS_MODEL: PR COMPOSITION: water: 0.0 nitrogen: 0.510676386339746 CO2: 2.44965511776504 methane: 75.6328106126248 ethane: 10.9074631209139 propane: 8.11875087121037 i_butane: 0.849146377471569 n_butane: 1.34903656604691 i_pentane: 0.104982143381498 n_pentane: 0.071218218251483 n_hexane: 0.0063 - NAME: generic_from_input_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: GENERIC_FROM_INPUT POLYTROPIC_EFFICIENCY: 0.8 UNITS: EFFICIENCY: FRACTION - NAME: simplified_compressor_train_model TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN FLUID_MODEL: drogon_fluid COMPRESSOR_TRAIN: MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5 COMPRESSOR_CHART: generic_from_input_compressor_chart INLET_TEMPERATURE: 19.3 FUEL_TYPES: - NAME: fuel_gas CATEGORY: FUEL-GAS EMISSIONS: - NAME: co2_fuel_gas FACTOR: 2.416 INSTALLATIONS: - NAME: drogon_installation CATEGORY: FIXED HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000 FUEL: fuel_gas GENERATORSETS: - NAME: main_power ELECTRICITY2FUEL: genset_a_power_fuel CATEGORY: TURBINE-GENERATOR CONSUMERS: - NAME: wi_lp CATEGORY: PUMP ENERGY_USAGE_MODEL: TYPE: PUMP_SYSTEM PUMPS: - NAME: pump_a_lp CHART: wi_200 - NAME: pump_b_lp CHART: wi_200 TOTAL_SYSTEM_RATE: SIM1;WATER_INJ FLUID_DENSITY: 1025 OPERATIONAL_SETTINGS: - RATE_FRACTIONS: - 1 - 0 SUCTION_PRESSURE: 12 DISCHARGE_PRESSURE: 200 - RATE_FRACTIONS: - 0.5 - 0.5 SUCTION_PRESSURE: 12 DISCHARGE_PRESSURE: 200 - NAME: gas export compressor train CATEGORY: COMPRESSOR ENERGY_USAGE_MODEL: TYPE: COMPRESSOR_SYSTEM COMPRESSORS: - NAME: train1_2 COMPRESSOR_MODEL: simplified_compressor_train_model TOTAL_SYSTEM_RATE: SIM1;GAS_PROD OPERATIONAL_SETTINGS: - RATE_FRACTIONS: - 1 SUCTION_PRESSURE: 13 DISCHARGE_PRESSURE: 421 - NAME: boosterpump CATEGORY: BASE-LOAD ENERGY_USAGE_MODEL: TYPE: DIRECT LOAD: 2 - NAME: baseload CATEGORY: BASE-LOAD ENERGY_USAGE_MODEL: TYPE: DIRECT LOAD: 9 - NAME: re-compressors CATEGORY: BASE-LOAD ENERGY_USAGE_MODEL: TYPE: DIRECT LOAD: 2","s":"Full Model","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#full-model","p":695},{"i":715,"t":"genset.csv POWER, FUEL # [MW], [Sm3/d] 0,0 2.38,37766.13 4.76,50769.26 5.9,59258.52 7.14,63772.39 9.52,76775.52 10.71,83277.09 11.9,89808.09 14.28,102781.8 16.66,115784.9 17.8,119883.6 19.04,128788 21.42,141791.2 21.4201,166554.2 28.56,205563.6 33.32,231569.8 38.08,257576.1 42.84,283582.3 wi_200bar_ssp.csv RATE,HEAD,EFFICIENCY,SPEED 830,1490,81,3741 800,1550,81.7,3741 600,1825,78,3741 500,1915,72.5,3741 415,1955,66,3741","s":"Facility resources","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#facility-resources","p":695},{"i":717,"t":"drogon_mean.csv DATE,GAS_PROD,OIL_PROD,WATER_INJ 01.01.2020,329327.76,2301.9189,3796.9621 01.01.2021,533620.39,3699.8435,8533.0322 01.01.2022,416004.76,2837.5915,9434.1385 01.01.2023,340118.19,2280.7372,10019.154 01.01.2024,290127.01,1905.7952,10428.387 01.01.2025,253292.19,1635.7671,10725.254 01.01.2026,223584.53,1426.9726,10954.338 01.01.2027,198453.07,1249.781,11153.675 01.01.2028,177306.77,1099.8572,11318.01 01.01.2029,159723.78,977.37529,11450.614 01.01.2030,145056.33,875.30836,11561.335 01.01.2031,132577.75,788.45521,11654.645 01.01.2032,122166.68,715.64707,11734.129 01.01.2033,113070.74,653.71407,11802.565 01.01.2034,105114.67,600.04874,11860.717 01.01.2035,98147.958,553.56297,11910.283","s":"Timeseries resources","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#timeseries-resources","p":695},{"i":719,"t":"The following is an example with one installation called Installation A that exports oil (OIL_PROD) and gas (GAS_PROD). The installation emits CO2. On this installation, the following components are identified: The results of a performed characterization of the equipment are listed below: Consumer Type Description Generator set A Generator set Variable fuel consumer with electricity to fuel function Base production load Power consumer Constant load 11.8 MW Gas injection compressor Power consumer Variable consumption depending on gas injection rate and lift gas rate Produced water reinjection pump Power consumer Variable consumption depending on water production rate and water injection rate. The pump suction pressure is 10 bar and discharge pressure is 200 bar. Sea water injection pump Power consumer Variable consumption depending on a complex combination on water injection rate and water production rate Flare Direct fuel consumer Before 1.1.2005: Constant fuel rate 10000 Sm3/day, From 1.1.2005: Constant fuel rate 7000 Sm3/day Gas export compressor Direct fuel consumer Variable fuel consumer depending on gas sales rate","s":"Simple model example","u":"/ecalc/docs/about/modelling/examples/simple","h":"","p":718},{"i":721,"t":"The YAML model consist of these main components: Time series inputs - TIME_SERIES Facility characterization input - FACILITY_INPUTS Fuel input - FUEL_TYPES Model variables - VARIABLES Installation topology - INSTALLATIONS The YAML setup file looks like this: model.yaml TIME_SERIES: FACILITY_INPUTS: FUEL_TYPES: VARIABLES: INSTALLATIONS: We will now replace the placeholders for each of the main keywords above.","s":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/simple","h":"#yaml-model-overview","p":718},{"i":723,"t":"The reservoir variables, in this case, are found in a CSV (Comma separated file) production_data.csv. We give the time-series data a name that can be referenced as variables elsewhere in the form :. See TIME_SERIES for further details. model.yaml TIME_SERIES: - NAME: SIM FILE: production_data.csv TYPE: DEFAULT","s":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#time_series","p":718},{"i":725,"t":"We specify CSV input data for processing equipment using FACILITY_INPUTS. This is used for generatorsets, tabulated/sampled models and pump charts. See FACILITY_INPUTS for further details. Here we define a tabulated genset, a sampled compressor, a sampled compressor driven by a turbine, a sampled pump, and a single speed pump chart. These will be used in the final model for illustration. Note that more complicated energy models are defined under the MODELS-keyword. See the input data further down to understand the input formats. model.yaml FACILITY_INPUTS: - NAME: genset FILE: genset.csv TYPE: ELECTRICITY2FUEL - NAME: compressor_sampled FILE: compressor_sampled.csv TYPE: COMPRESSOR_TABULAR - NAME: compressor_with_turbine_sampled FILE: compressor_sampled_with_turbine.csv TYPE: COMPRESSOR_TABULAR - NAME: pump_sampled FILE: pump_sampled.csv TYPE: TABULAR - NAME: pump_chart FILE: pump_chart.csv TYPE: PUMP_CHART_SINGLE_SPEED UNITS: HEAD: M RATE: AM3_PER_HOUR EFFICIENCY: PERCENTAGE","s":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#facility_inputs","p":718},{"i":727,"t":"In this example there is only one FUEL_TYPES - fuel_gas. The emissions we model with the fuel is CO2. The CO2 factor is 2.19 kg CO2 per Sm3 fuel gas burned. model.yaml FUEL_TYPES: - NAME: fuel_gas EMISSIONS: - NAME: CO2 FACTOR: 2.19 #CO2/Sm3 fuel gas burned","s":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#fuel_types","p":718},{"i":729,"t":"To run the model it is recommended to specify VARIABLES, instead of hard coding values in difference places. This makes it easier to develop, maintain and understand the model by allowing descriptive variable names and avoid duplications. For our model, we specify the following variables: model.yaml VARIABLES: hydrocarbon_export_sm3_per_day: VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent sea_water_injection_rate_m3_per_day: VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500) gas_export_rate_sm3_per_day: VALUE: SIM;GAS_PROD gas_injection_rate_sm3_per_day: VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT produced_water_reinjection_condition: VALUE: SIM;WATER_PROD > 1500 produced_water_reinjection_total_system_rate_m3_per_day: VALUE: SIM;WATER_PROD flare_fuel_rate_sm3_day: 1995-10-01: VALUE: 10000 2005-01-01: VALUE: 7000 We reference the TIME_SERIES SIM using the column names from the CSV file. Here we use for example SIM:OIL_PROD (Field Oil Production Rate) SIM:GAS_PROD (Field Gas Sales Rate). tip It is possible to specify if-else conditions by multiplying with boolean values. This has been done in the $var.salt_water_injection_rate_m3_per_day variable example above.","s":"VARIABLES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#variables","p":718},{"i":731,"t":"An installation is composed of hydrocarbon export, a default fuel for that installation and consumers in the form of generatorsets (with electric sub-consumers), and direct fuel consumers. We specify: NAME: the installation name HCEXPORT: Hydrocarbon export in Sm3/day by referring to the variable specified under VARIABLES above. FUEl: Default fuel specified in FUEL_TYPES above. INSTALLATIONS: - NAME: Installation A HCEXPORT: $var.hydrocarbon_export_sm3_per_day FUEL: fuel_gas GENERATORSETS: FUELCONSUMERS: ","s":"INSTALLATION","u":"/ecalc/docs/about/modelling/examples/simple","h":"#installation","p":718},{"i":733,"t":"There is one generator set, Generator set A. This has a power to fuel function defined in FACILITY_INPUTS with the name genset. Further, the consumers getting power from the generator set are Base production load, Gas injection compressor, Produced water re-injection pump and Sea-water injection pump. The setup for Generator set A thus becomes: GENERATORSETS: - NAME: Generator set A ELECTRICITY2FUEL: genset CATEGORY: TURBINE-GENERATOR CONSUMERS: - NAME: Base production load CATEGORY: BASE-LOAD ENERGY_USAGE_MODEL: - NAME: Gas injection compressor CATEGORY: COMPRESSOR ENERGY_USAGE_MODEL: - NAME: Produced water reinjection pump CATEGORY: PUMP ENERGY_USAGE_MODEL: - NAME: Sea water injection pump CATEGORY: PUMP ENERGY_USAGE_MODEL: ","s":"GENERATORSETS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#generatorsets","p":718},{"i":735,"t":"The direct fuel consumers are Flare and Gas export compressor. model.yaml FUELCONSUMERS: - NAME: Flare CATEGORY: FLARE ENERGY_USAGE_MODEL: - NAME: Gas export compressor CATEGORY: COMPRESSOR ENERGY_USAGE_MODEL: ","s":"FUELCONSUMERS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#fuelconsumers","p":718},{"i":737,"t":"We will now fill in the final placeholders with detailed ENERGY_USAGE_MODELs. Base production load has a constant load of 11.8 MW: - NAME: Base production load CATEGORY: BASE-LOAD ENERGY_USAGE_MODEL: TYPE: DIRECT LOAD: 11.8 # MW Gas injection compressor is represented by a tabulated (sampled) energy usage model defining the relationship between the gas injection rate [Sm3/day] and the corresponding power requirement. The gas rate is already defined in the variable gas_injection_rate_sm3_per_day as SIM;GAS_INJ {+} SIM;GAS_LIFT: - NAME: Gas injection compressor CATEGORY: COMPRESSOR ENERGY_USAGE_MODEL: TYPE: COMPRESSOR ENERGYFUNCTION: compressor_sampled RATE: $var.gas_injection_rate_sm3_per_day SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc Produced water reinjection pump is variable and its energy function is dependent on the field's water production rate (WATER_PROD) that is set in the variable produced_water_reinjection_condition as SIM;WATER_PROD. The pump only runs when the variables produced_water_reinjection_condition evaluates to true as SIM;WATER_PROD > 1500. This is when the water production is above 1500 Sm3/day. Fluid density, suction pressure and discharge pressure is also defined: - NAME: Produced water reinjection pump CATEGORY: PUMP ENERGY_USAGE_MODEL: TYPE: PUMP CONDITION: $var.produced_water_reinjection_condition ENERGYFUNCTION: pump_chart RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day FLUID_DENSITY: 1010 SUCTION_PRESSURE: 10 # [bara] DISCHARGE_PRESSURE: 200 # [bara] Sea water injection pump has an energy function that is dependent on the seawater injection rate. This rate is not modeled explicitly in the reservoir input source, but it may be computed from the injection (WATER_INJ) and production (WATER_PROD) rate by the following rules: In general, the seawater injection rate (SEAWATER_INJ), is the difference between injected and produced water: SEAWATER_INJ = WATER_INJ - WATER_PROD. When the produced water rate is below 1500 SM3/day, this goes directly to sea, such that SEAWATER_INJ = WATER_INJ when WATER_PROD < 1500. When the produced water rate is between 17000 and 18500 SM3/day, everything above 17000 SM3/day goes directly to the sea, thus SEAWATER_INJ = WATER_INJ - 17000 when 17000 < WATER_PROD < 18500. This is specified as the variable sea_water_injection_rate_m3_per_day above and is defined as: The model is specified: - NAME: Sea water injection pump CATEGORY: PUMP ENERGY_USAGE_MODEL: TYPE: TABULATED ENERGYFUNCTION: pump_sampled VARIABLES: - NAME: RATE EXPRESSION: $var.sea_water_injection_rate_m3_per_day The flare is changing on the 1st of January 2005. Therefore, we need to use a different constant fuel consumption value before and after this date. This is done using the variable flare_fuel_rate_sm3_day above. The model is specified: - NAME: Flare CATEGORY: FLARE ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: $var.flare_fuel_rate_sm3_day Gasexport is a variable fuel consumer whose energy function depends on the field gas sales rate (GAS_PROD) defined in the variable gas_export_rate_sm3_per_day as SIM;GAS_PROD. Even though it is not used in the eCalc model, suction and discharge pressure needs to be specified in order for the model to run. The model is specified: - NAME: Gas export compressor CATEGORY: COMPRESSOR ENERGY_USAGE_MODEL: TYPE: GAS-DRIVEN-COMPRESSOR ENERGYFUNCTION: compressor_with_turbine_sampled RATE: $var.gas_export_rate_sm3_per_day SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc","s":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/modelling/examples/simple","h":"#energy_usage_model","p":718},{"i":739,"t":"model.yaml TIME_SERIES: - NAME: SIM FILE: production_data.csv TYPE: DEFAULT FACILITY_INPUTS: - NAME: genset FILE: genset.csv TYPE: ELECTRICITY2FUEL - NAME: compressor_sampled FILE: compressor_sampled.csv TYPE: COMPRESSOR_TABULAR - NAME: compressor_with_turbine_sampled FILE: compressor_sampled_with_turbine.csv TYPE: COMPRESSOR_TABULAR - NAME: pump_sampled FILE: pump_sampled.csv TYPE: TABULAR - NAME: pump_chart FILE: pump_chart.csv TYPE: PUMP_CHART_SINGLE_SPEED UNITS: HEAD: M RATE: AM3_PER_HOUR EFFICIENCY: PERCENTAGE FUEL_TYPES: - NAME: fuel_gas EMISSIONS: - NAME: CO2 FACTOR: 2.19 # CO2/Sm3 fuel gas burned VARIABLES: hydrocarbon_export_sm3_per_day: VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent sea_water_injection_rate_m3_per_day: VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500) gas_export_rate_sm3_per_day: VALUE: SIM;GAS_PROD gas_injection_rate_sm3_per_day: VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT produced_water_reinjection_condition: VALUE: SIM;WATER_PROD > 1500 produced_water_reinjection_total_system_rate_m3_per_day: VALUE: SIM;WATER_PROD flare_fuel_rate_sm3_day: 1995-10-01: VALUE: 10000 2005-01-01: VALUE: 7000 INSTALLATIONS: - NAME: Installation A HCEXPORT: $var.hydrocarbon_export_sm3_per_day FUEL: fuel_gas GENERATORSETS: - NAME: Generator set A ELECTRICITY2FUEL: genset CATEGORY: TURBINE-GENERATOR CONSUMERS: - NAME: Base production load CATEGORY: BASE-LOAD ENERGY_USAGE_MODEL: TYPE: DIRECT LOAD: 11.8 # MW - NAME: Gas injection compressor CATEGORY: COMPRESSOR ENERGY_USAGE_MODEL: TYPE: COMPRESSOR ENERGYFUNCTION: compressor_sampled RATE: $var.gas_injection_rate_sm3_per_day SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc - NAME: Produced water reinjection pump CATEGORY: PUMP ENERGY_USAGE_MODEL: TYPE: PUMP CONDITION: $var.produced_water_reinjection_condition ENERGYFUNCTION: pump_chart RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day FLUID_DENSITY: 1010 SUCTION_PRESSURE: 10 # bara DISCHARGE_PRESSURE: 200 # bara - NAME: Sea water injection pump CATEGORY: PUMP ENERGY_USAGE_MODEL: TYPE: TABULATED ENERGYFUNCTION: pump_sampled VARIABLES: - NAME: RATE EXPRESSION: $var.salt_water_injection_rate_m3_per_day FUELCONSUMERS: - NAME: Flare CATEGORY: FLARE ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: $var.flare_fuel_rate_sm3_day - NAME: Gas export compressor CATEGORY: COMPRESSOR ENERGY_USAGE_MODEL: TYPE: GAS-DRIVEN-COMPRESSOR ENERGYFUNCTION: compressor_with_turbine_sampled RATE: $var.gas_export_rate_sm3_per_day SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc","s":"Full eCalc YAML model","u":"/ecalc/docs/about/modelling/examples/simple","h":"#full-ecalc-yaml-model","p":718},{"i":741,"t":"compressor_sampled.csv RATE,POWER #[Sm3/day],[MW] 0,0 1,4.1 100000000,4.1 200000000,4.1 210000000,4.1 220000000,4.4 230000000,4.8 240000000,5.1 250000000,5.4 260000000,5.8 270000000,6.1 280000000,6.4 290000000,6.8 300000000,7.1 500000000,14.2 compressor_sampled_with_turbine.csv RATE,FUEL #[Sm3/day],[Sm3/day] 0,0 0.1,50000 3000000,50000 3500000,130000 7000000,170000 genset.csv POWER,FUEL #[MW],[Sm3/day] 0, 0 0.1, 65000 10.0, 75000 20.0, 126000 40.0, 250000 100.0, 750000 pump_chart.csv SPEED,RATE,HEAD,EFFICIENCY 3250,250,2640,59 3250,360,2490,68 3250,500,2342,77 3250,600,2210,80 3250,667,2068,78 3250,735,1870,74 pump_sampled.csv RATE,POWER #[Sm3/day],[MW] 0,0 1,3 8500,4 9000,4 17000,6 17500,9 36000,13 production_data.csv Dates, OIL_PROD, GAS_PROD, WATER_PROD, WATER_INJ, GAS_INJ, GAS_LIFT #, Sm3/d, Sm3/d, m3/d, m3/d, Sm3/d, Sm3/d 2020-01-01 00:00:00, 9000, 3500000, 18000, 34000, 2200000, 130000 2021-01-01 00:00:00, 8000, 3600000, 19000, 33000, 2200000, 170000 2022-01-01 00:00:00, 7000, 3700000, 15000, 30000, 2200000, 210000 2023-01-01 00:00:00, 6000, 3800000, 16000, 33000, 2300000, 240000 2024-01-01 00:00:00, 6000, 3900000, 14000, 35000, 2300000, 280000 2024-12-01 00:00:00, 6000, 4000000, 15000, 36000, 2400000, 310000 2026-01-01 00:00:00, 7000, 4100000, 18000, 36000, 2400000, 350000 2027-01-01 00:00:00, 6000, 4500000, 15000, 38000, 2400000, 390000 2028-01-01 00:00:00, 6000, 3500000, 12000, 33000, 2400000, 430000 2029-01-01 00:00:00, 5000, 2500000, 14000, 36000, 2400000, 460000 2030-01-01 00:00:00, 6000, 2000000, 16000, 35000, 2400000, 500000 2031-01-01 00:00:00, 4000, 3000000, 14000, 33000, 2400000, 530000","s":"Input files","u":"/ecalc/docs/about/modelling/examples/simple","h":"#input-files","p":718},{"i":743,"t":"This section describes how to create your own eCalc™ model file. There are six separate sections which make up each model, these being: Input Function TIME_SERIES Input of time dependent variables. For example, production profiles for an installation FACILITY_INPUTS Input of generator sets, and facility equipment that consumers either power or fuel (with the exception of compressors that are modelled with compressor charts) MODELS Input of compressor models that use compressor charts. Gas turbines that are directly coupled to a compressor are also included here FUEL_TYPES Input of the various fuel types used in the specified installation(s) VARIABLES Input of variables that can reference to in expressions within the YAML set-up file INSTALLATIONS This is essentially the only \"output\" section in the YAML setup file. All the inputs are specified and related to specific platforms/rigs, and whether or not they consume either power or fuel All of the above are mandatory inputs for eCalc™ to run, with the exception of models (which is an optional, but still important input) and variables.","s":"Set up an eCalc Model","u":"/ecalc/docs/about/modelling/setup/","h":"","p":742},{"i":745,"t":"note The FACILITY_INPUTS keyword is mandatory within the eCalc™ YAML file. This part of the setup defines input files that characterize various facility elements. Each facility element is specified in a list. These are later used as input in the INSTALLATIONS part of the setup by referencing their NAME. All facility inputs are in essence a CSV (Comma separated file) file that specifies input data to a model that calculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple supported types. There are four categories of data that can be used here: Files describing the performance of a generator set Files describing the performance of pumps (pump charts) Files describing the performance of only tabular compressors (sampled compressor data) Other energy consuming equipment modeled variable w.r.t. reservoir management (tabulated relationship between variables and consumption) eCalc™ supports making simple adjustments to a table by using the ADJUSTMENT keyword as well as modification of the HEAD_MARGIN which can be used while calibrating pump charts.","s":"Facility inputs","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","h":"","p":744},{"i":747,"t":"Each facility input has the skeleton as seen below. However, some inputs require further information. For example, pump models FACILITY_INPUTS: - NAME: FILE: TYPE: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","h":"#format","p":744},{"i":749,"t":"The facility input type is defined using the TYPE keyword and defines the type of model applied to the data in this file. The input files are in CSV (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file. The supported types are: ELECTRICITY2FUEL TABULAR COMPRESSOR_TABULAR PUMP_CHART_SINGLE_SPEED PUMP_CHART_VARIABLE_SPEED","s":"Supported types","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","h":"#supported-types","p":744},{"i":751,"t":"In eCalc™, the term generator refers to equipment producing electrical power from fuel. Hence, the turbine part (fuel combustion to produce mechanical energy) is included in the term. An installation usually have one or more generators to fill the electrical power demand. In eCalc™, the separate generators are combined into a common generator set (genset). note In the future, eCalc™ will most likely offer modelling of single generators that could be combined in systems.","s":"Generator modelling","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"","p":750},{"i":753,"t":"Electricity to fuel is a table specifying the relationship between electrical load and fuel consumption for an entire generator set. This means that if you have several generators, this table needs to include a \"jump\" every time a new generator is started. An example of this is shown below. Under FACILITY_INPUTS, this electricity to fuel table is specified using the keyword ELECTRICITY2FUEL","s":"ELECTRICITY2FUEL","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#electricity2fuel","p":750},{"i":755,"t":"FACILITY_INPUTS: - NAME: FILE: TYPE: ELECTRICITY2FUEL","s":"Facility input format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#facility-input-format","p":750},{"i":757,"t":"The table for this curve would look like: POWER, FUEL #[MW], [Sm3/day] 0.00, 0.0 0.10, 84000.0 5.00, 84000.0 42.0, 220000.0 42.01, 280000.0 45.0, 300000.0 50.0, 330000.0 60.0, 350000.0","s":"Example table","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#table-example","p":750},{"i":759,"t":"Header Unit Mandatory Power MW Yes Fuel Sm3/day Yes","s":"Header and unit requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#header-and-unit-requirements","p":750},{"i":762,"t":"Pumps can both be single speed and variable speed. Often, the pumping capacity on an installation is filled with a system of several pumps in parallel. Attention The pump models in eCalc™ are intended for water, i.e., there is no friction dependency. Thus, for usage in other types of pumps (e.g., where the fluid viscosity changes with the fluid mixture), the results might not be as intended. Core theory behind the modelling of pumps in eCalc™ can be found here.","s":"Attention","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","h":"","p":760},{"i":764,"t":"Energy usage for pumps is not based on pre-sampled data between rates, pressures and energy usage, but on equations and the pump chart defining the pumps. There are two types of pump models supported: Variable speed pumps Single speed pumps The pump chart defines the pump's operational area. When rates below minimum flow (a point with the lowest rate for a single speed pump and a line defined by the lowest rate vs. head for each speed for variable speed) are requested, the rate is projected up and evaluated at minimum flow to mimic the ASV (anti-surge valve). For heads below minimum head/minimum speed, i.e., when the requested pressure difference between the outlet and the inlet is smaller than the minimum pressure difference, the head will be lifted up to minimum head to mimic that the pump will then be run on its minimum speed and the pressure will be choked back downstream of the pump. For single speed pumps, the minimum speed/minimum head curve is the same as the head vs. rate curve. Tip When calibrating pump charts to historical data, the head values for maximum speed could be put in the cloud of data to be unbiased. However, eCalc will treat all head values above the maximum defined in the chart as infeasible (outside pump capacity). To mitigate this when running through historical data for power calibration, the keyword HEAD_MARGIN may be used to move points outside capacity (but inside the margin) to the capacity limit.","s":"Pump chart","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"","p":763},{"i":766,"t":"Pump chart data for single speed pump. The required fields are RATE and HEAD. Optionally (and most likely) EFFICIENCY and UNITS should be supplied as well. (if not given, efficiency is set to 100%).","s":"PUMP_CHART_SINGLE_SPEED","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#pump_chart_single_speed","p":763},{"i":768,"t":"Required​ RATE HEAD Optional​ EFFICIENCY, if not set the efficiency is assumed to be 100%. SPEED, if set all values must be equal. Note that speed is not used in any way for single speed pumps and is only included here to allow the speed column to be present in the input file without the run failing. There is still a check that all speeds are equal if speed is present to avoid usage of the wrong pump model, i.e. avoid using the single speed model for variable speed pump chart data.","s":"Header Requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#header-requirements","p":763},{"i":770,"t":"FACILITY_INPUTS: - NAME: FILE: TYPE: PUMP_CHART_SINGLE_SPEED UNITS: RATE: HEAD: EFFICIENCY: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#format","p":763},{"i":773,"t":"Pump chart data for variable speed (VSD) pump. The required fields are SPEED, RATE and HEAD. Optionally (and most likely) EFFICIENCY and UNITS should be supplied as well. (if not given, efficiency is set to 100%).","s":"Description","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#description","p":763},{"i":775,"t":"RATE, HEAD and SPEED required. EFFICIENCY, UNITS optional.","s":"Header Requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#header-requirements-1","p":763},{"i":777,"t":"FACILITY_INPUTS: - NAME: FILE: TYPE: PUMP_CHART_VARIABLE_SPEED UNITS: RATE: HEAD: EFFICIENCY: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#format-1","p":763},{"i":779,"t":"FACILITY_INPUTS: - NAME: a_single_speed_pump FILE: inputs/single_speed_pumpchart.csv TYPE: PUMP_CHART_SINGLE_SPEED UNITS: RATE: AM3_PER_HOUR HEAD: M EFFICIENCY: PERCENTAGE - NAME: a_variable_speed_pump FILE: inputs/variable_speed_pumpchart.csv TYPE: PUMP_CHART_VARIABLE_SPEED UNITS: RATE: AM3_PER_HOUR HEAD: M EFFICIENCY: PERCENTAGE - NAME: a_single_speed_pump_with_head_margin_applied FILE: inputs/single_speed_pumpchart.csv TYPE: PUMP_CHART_SINGLE_SPEED UNITS: RATE: AM3_PER_HOUR HEAD: M EFFICIENCY: PERCENTAGE HEAD_MARGIN: 10","s":"Examples","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#examples","p":763},{"i":781,"t":"The compressor model is set up in an external tool, and this model is sampled by running a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a .csv file and inputted into eCalc™. Each line in the .csv defines a point (rate, suction pressure, discharge pressure) and the total energy usage. For electrically driven compressor trains. The total energy usage should be given in megawatts (MW). For turbine driven compressor trains. It is recommended to give the total energy usage in megawatts (MW) and couple the compressor model to a turbine model. However, it is possible (for backward compatibility) to give the total energy usage as fuel usage in standard cubic meters per day (Sm3/day) and use the model directly. In this case, you can also provide a POWER (MW) column to calculate power for the shaft based on fuel usage. The latter (turbine driven compressor train) will at some point become deprecated as it is replaced by COMPRESSOR_WITH_TURBINE mentioned above.* Inside the convex hull defined by the input variables, there is a barycentric interpolation based on a Delaunay triangulation. Outside the defined area, there may be extrapolations where this is reasonable, i.e., for rates lower than the defined rates, the table is extrapolated up to minimum flow (to mimic ASV (anti-surge valve)/recirculation valve) the suction pressure is extrapolated down to the defined area the discharge pressure is extrapolated up to defined area to mimic choking when the required head is lower than the compressor operational area.","s":"Sampled compressor model","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"","p":780},{"i":783,"t":"The sampled compressor model is defined under the main keyword FACILITY_INPUTS in the format NAME: FILE: .csv TYPE: COMPRESSOR_TABULAR","s":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#format","p":780},{"i":785,"t":"POWER (and/or FUEL) A minimum of one (but more are allowed) of the following: RATE SUCTION_PRESSURE DISCHARGE_PRESSURE In cases where the model is directly used as a turbine/fuel driven compressor without coupling it to an eCalc turbine model, POWER may be replaced by FUEL. Shaft power reporting In the case FUEL is provided, it is also possible to specify POWER in the csv-file in order to calculate shaft power usage for fuel driven compressors If only POWER is provided, we assume that the compressor is electrical-driven If FUEL is provided, we assume that the compressor is turbine-driven (also when both FUEL and POWER is given)","s":"Header requirements for the sampled compressor csv file","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#header-requirements-for-the-sampled-compressor-csv-file","p":780},{"i":787,"t":"Quantity Units POWER MW RATE Sm3/day SUCTION_PRESSURE bar DISCHARGE_PRESSURE bar FUEL Sm3/day","s":"Units","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#units","p":780},{"i":790,"t":"RATE POWER 0 0 100000 10 1000000 10 2600000 15 4400000 20","s":"1D example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#1d-example","p":780},{"i":792,"t":"RATE SUCTION_PRESSURE DISCHARGE_PRESSURE POWER 1.00E+06 10 12.72 0.3664 1.00E+06 10 26.21 2.293 1.00E+06 26 31.36 0.2739 1.00E+06 26 70.77 6.28 1.00E+06 34 41.21 0.368 1.00E+06 34 94.24 8.435 1.00E+06 78 94.12 0.7401 1.00E+06 78 231.6 22.46 6.00E+06 26 36.93 4.197 6.00E+06 26 57.43 7.32 6.00E+06 38 46.96 2.156 6.00E+06 38 106.2 9.557 6.00E+06 54 67.26 1.95 6.00E+06 54 155.6 14.35 6.00E+06 78 94.17 1.399 6.00E+06 78 231.6 22.46 1.10E+07 42 66.92 9.712 1.10E+07 42 81.63 11.89 1.10E+07 62 75.64 3.678 1.10E+07 62 180.8 16.94 1.10E+07 78 97.79 3.452 1.10E+07 78 231.6 22.46","s":"3D example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#3d-example","p":780},{"i":794,"t":"Additional equipment that are considered to be energy consumers can be specified using the keyword TABULAR. This is given that a form of reservoir rates (oil/gas production) can be linked to either fuel or power consumption. This is considered to be a consumer energy function for pure barycentric interpolation, no extrapolation outside convex area. One column defines the function value, the rest of the columns defines the variables for a 1D (if one variable column) or multidimensional interpolation.","s":"Tabular models","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","h":"","p":793},{"i":796,"t":"Header Unit Comment Power MW For power driven consumers Fuel Sm3/day For fuel (turbine) driven consumers Variable headers can be chosen freely as long as these correspond to the defined variables for the function.","s":"Header and unit requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","h":"#header-and-unit-requirements","p":793},{"i":798,"t":"1D tabular energy function​ Contents of the file energyfunc_1d_rate_fuel.csv: RATE, FUEL 0, 0 1, 137750 1000000, 137750 2000000, 145579 3000000, 153335 4000000, 161022 5000000, 168644 The entry in FACILITY_INPUTS: FACILITY_INPUTS: - NAME: gasinjectiondata FILE: energyfunc_1d_rate_fuel.csv TYPE: TABULAR The entry in INSTALLATIONS under a fuel consumer: INSTALLATIONS: .... - NAME: gasinjection CATEGORY: COMPRESSOR ENERGY_USAGE_MODEL: TYPE: TABULATED ENERGYFUNCTION: gasinjectiondata VARIABLES: - NAME: RATE EXPRESSION: SIM1;GAS_INJ # [Sm3/day] Note Note that the name RATE in the input file (under FACILITY_INPUT) and the variable name RATE under VARIABLES must be equal! 3D tabular energy function​ Contents of file energyfunc_3d_rate_ps_pd_power.csv: RATE, SUCTION_PRESSURE, DISCHARGE_PRESSURE, POWER # [Sm3/d], [bar], [bar], [MW] 1.00E+06, 10, 12.72, 0.3664 1.00E+06, 10, 26.21, 2.293 1.00E+06, 26, 31.36, 0.2739 1.00E+06, 26, 70.77, 6.28 1.00E+06, 34, 41.21, 0.368 1.00E+06, 34, 94.24, 8.435 1.00E+06, 78, 94.12, 0.7401 1.00E+06, 78, 231.6, 22.46 6.00E+06, 26, 36.93, 4.197 6.00E+06, 26, 57.43, 7.32 6.00E+06, 38, 46.96, 2.156 6.00E+06, 38, 106.2, 9.557 6.00E+06, 54, 67.26, 1.95 6.00E+06, 54, 155.6, 14.35 6.00E+06, 78, 94.17, 1.399 6.00E+06, 78, 231.6, 22.46 1.10E+07, 42, 66.92, 9.712 1.10E+07, 42, 81.63, 11.89 1.10E+07, 62, 75.64, 3.678 1.10E+07, 62, 180.8, 16.94 1.10E+07, 78, 97.79, 3.452 1.10E+07, 78, 231.6, 22.46 The entry in FACILITY_INPUTS: FACILITY_INPUTS: - NAME: booster FILE: energyfunc_3d_rate_ps_pd_power.csv TYPE: TABULAR The entry in INSTALLATIONS under a fuel consumer (for 3-d tabular): INSTALLATIONS: ... - NAME: gasexport CATEGORY: COMPRESSOR ENERGY_USAGE_MODEL: TYPE: TABULATED ENERGYFUNCTION: booster VARIABLES: - NAME: RATE EXPRESSION: SIM1;GAS_SALES # [Sm3/day] - NAME: SUCTION_PRESSURE EXPRESSION: SIM1;SUCTION_PRESSURE {+} 3 # [bara] - NAME: DISCHARGE_PRESSURE EXPRESSION: 100 # [bara]","s":"Example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","h":"#example","p":793},{"i":800,"t":"The setup file is written in YAML format and needs to follow a strict pattern which consists of several levels specified by indentation. The indentation is very important. It is recommended to use an indentation of 2 spaces per level. At each level, there might be both required and optional keywords.","s":"File format","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"","p":799},{"i":802,"t":"The overall system in eCalc is that the user defines inputs from subsurface and facility and then establishes a model between these. On the top level, the required keywords are FACILITY_INPUTS which defines the input from facility characterization, TIME_SERIES which defines time-dependant input parameters (e.g. reservoir profiles), FUEL_TYPES which defines the various fuel types used in the system, and INSTALLATIONS which is the top node defining the system of energy consumers. MODELS is optional and may be used for multi-level energy usage models. Documentation about how to set up each of these fields are found here, respectively: TIME_SERIES: List of input sources, CSV-files, containing all time series data including the reservoir variables. FACILITY_INPUTS: List of input files from facility characterization. Typically, this can be characteristics for an element in a consumer system or characteristics for a generator set. FUEL_TYPES: Defining the fuel types being used in the model and the corresponding emissions. MODELS: Used for multi-level models, one model may refer to other models from either MODELS or FACILITY_INPUTS VARIABLES: Used for defining variables to be used in expressions throughout the YAML file INSTALLATIONS: Defining the system of energy consumers on each installation (e.g. platform or mobile unit). An eCalc model may contain one or several installations. Each installation has a set of specifications (e.g. fuel type, hydrocarbon export, ...) and specifications of the system of consumers. Emissions are emitted when fuel is burned. Thus, the first sublevel of consumers for an installation, are the fuel burners. As the figure below shows, there are three main types of fuel burners: Electricity generation (generator sets), Turbine-driven processes, Flare/vent/other non reservoir dependent burners/emitters. In eCalc under each installation, there is one keyword (GENERATORSETS) specifying the generator sets and one keyword (FUELCONSUMERS) specifying processes that require fuel directly (turbine-driven processes and flare/vent). The processes with electrical motor drives and other electrical loads are modeled at the sublevel under GENERATORSETS. Comments Comments are supported anywhere in the yml and csv files by using '#' to indicate the start of a comment. All data after a '#' on the same line is ignored. If '#' is used at the beginning of the file, the first line without a preceding '#' is used as the header.","s":"Setup file syntax","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#setup-file-syntax","p":799},{"i":805,"t":"TIME_SERIES: - FILE: TYPE: NAME: FACILITY INPUTS: - FILE: TYPE: NAME: FUEL_TYPES: - NAME: FACTOR: MODELS: - NAME: - TYPE: VARIABLES: VALUE: INSTALLATIONS: - NAME: HCEXPORT: FUEL: GENERATORSETS: - NAME: ELECTRICITY2FUEL: CATEGORY: CONSUMERS: - NAME: CATEGORY: ENERGY_USAGE_MODEL:","s":"YAML format example","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#yaml-format-example","p":799},{"i":807,"t":"Examples are an excellent way to quickly get an overview of the syntax. Check them out here.","s":"Full examples","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#full-examples","p":799},{"i":809,"t":"The variables needed in the energy functions for the variable consumers, may not always be directly found in the reservoir inputs. For example, there may be two group rates that should be added to be consistent with the net rate through a compressor system. Or, it may be that a pressure defined in a network node is not equal to the pressure at the inlet/outlet of a compressor system and some delta pressure must be added. To avoid forcing the users to define new variables in the simulation files/CSV data and also keep the data in the consumer’s energy function consistent, the calculator supports expressions to define variables (and conditions in the CONDITIONS. warning When creating new variables from CSV files make sure to choose the right interpolation type! See INTERPOLATION_TYPE for more information.","s":"Expressions","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"","p":808},{"i":811,"t":"As reservoir simulation vectors (and also CSV headers) may include mathematical operators like +, - in their names, the operators must be surrounded by curly brackets, {}, in the expressions. Logical operators (>, >=, <, <=, ==, !=) evaluates to 0 or 1. The following operators are supported: Operator Description Example {+} Addition 2 {+} 1 {-} Subtraction SIM;GAS {-} 10 {*} Multiplication SIM;GAS {*} 2 {/} Division SIM;GAS {/} 2 {^} Power SIM;GAS {^} 2 ( ) Parentheses ( SIM;GAS {+} 2 ) {/} 2 < Less than SIM;GAS {+} (SIM1;OIL < 150) {*} 1000000 <= Less than or equal SIM;GAS {+} (SIM1;OIL <= 150) {*} 1000000 > Greater than SIM;GAS {+} (SIM1;OIL > 150) {*} 1000000 >= Greater than or equal SIM;GAS {+} (SIM1;OIL >= 150) {*} 1000000 == Equal SIM;GAS {+} (SIM;FLAG == 1) {*} 1000000 != Not equal SIM;GAS {-} (SIM;FLAG != 1) {*} 1000000","s":"Available operators","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#available-operators","p":808},{"i":814,"t":"The rate through a gas injection compressor is the sum of injection rate for the field plus some additional injection rate for a tie-in (whose data is specified in a CSV file with key SIM2): VARIABLES: total_rate_through_compressor: VALUE: SIM1;GAS_INJ {+} SIM2;GAS_INJ","s":"Combining data from different reservoir inputs","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#combining-data-from-different-reservoir-inputs","p":808},{"i":816,"t":"The rate through a compressor is the produced rate plus some additional term. This term Q is a function of pressures P1P_{1}P1​ and P2P_{2}P2​, Q=25000⋅P1⋅(P2−P1)Q = 25000 \\cdot \\sqrt{P_{1} \\cdot \\left( P_{2} - P_{1} \\right)}Q=25000⋅P1​⋅(P2​−P1​)​ The addition is only added when the reservoir gas rate is positive. VARIABLES: rate: VALUE: SIM;GAS_PROD {+} ( SIM;GAS_PROD > 0 ) {*} 25000 {*} ( SIM;P1 {*} ( SIM;P2 {-} SIM;P1 ) ) {^} 0.5","s":"Model of additional rate","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#model-of-additional-rate","p":808},{"i":818,"t":"note The FUEL_TYPES keyword is mandatory within the eCalc™ YAML file. This part of the setup specifies the various fuel types and associated emissions used in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the INSTALLATIONS part of the setup by its name. The use of fuel can lead to one or more emission types, specified in EMISSIONS. You can optionally specify a CATEGORY.","s":"Fuel types","u":"/ecalc/docs/about/modelling/setup/fuel_types","h":"","p":817},{"i":820,"t":"FUEL_TYPES: - NAME: CATEGORY: EMISSIONS: - NAME: CATEGORY: EMISSIONS: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/fuel_types","h":"#format","p":817},{"i":822,"t":"This is a full example where there are 3 fuel type definitions, i.e., there are 3 different fuels defined that can be used in your INSTALLATIONS. FUEL_TYPES: - NAME: fuel_gas # Name of this fuel, use this when referencing this fuel in the FUEL specification in the INSTALLATIONS part EMISSIONS: - NAME: CO2 # Name of the emission type FACTOR: 2.15 # kg/Sm3 - NAME: CH4 FACTOR: 0.00091 # kg/Sm3 - NAME: flare_gas CATEGORY: FUEL_GAS EMISSIONS: - NAME: CO2 FACTOR: 2.73 - NAME: CH4 FACTOR: 0.00024 - NAME: diesel CATEGORY: DIESEL EMISSIONS: - NAME: CO2 FACTOR: 2.7085 # kg/l - input diesel usage in l/d","s":"Example","u":"/ecalc/docs/about/modelling/setup/fuel_types","h":"#example","p":817},{"i":824,"t":"note The INSTALLATIONS keyword is mandatory within the eCalc™ YAML file. In INSTALLATIONS the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation. Essentially installations on which fuel is burned to generate energy for the consumers. The structure of the keywords under INSTALLATIONS is linked to the structure in the general consumer overview for an installation. CATEGORY is optional, and generally reserved for use with LTP.","s":"Installations","u":"/ecalc/docs/about/modelling/setup/installations/","h":"","p":823},{"i":826,"t":"In the installations set up, one may refer to variables from TIME_SERIES in many places by using expressions to build up custom, or changing, configurations. Referring to variables is done on the format: ; where must be defined in TIME_SERIES, defining the time series input source (e.g., CSV file), and is the name of the variable. See TIME SERIES for more examples","s":"Referring to time series","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#referring-to-time-series","p":823},{"i":828,"t":"For various reasons, the data in the INSTALLATIONS section may vary in time. The consumers may need to be modeled differently due to rebuilds or degeneration. It could be that the user wants to make a simple model for some periods and a more detailed model for others (e.g., a rate only model early time periods and a pressure dependent model in the field's late life). For the fields that support multiple time intervals, the syntax is generally to insert a date on the format YYYY-MM-DD followed by the expression/model for the time interval between this date and the next entered date. See Time intervals for an example. Note When time dependency is used, the values before the first time default to 0 (zero) HCEXPORT is zero before the first time given. ELECTRICITY2FUEL will have 0 fuel usage before the first time defined, despite a non-zero power load. FUEL: The fuel rate will be 0 before the first entered date. Consumer energy consumption will be 0 before the first defined time.","s":"Time intervals for variables/expressions and models","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#time-intervals-for-variablesexpressions-and-models","p":823},{"i":830,"t":"INSTALLATIONS: - NAME: GENERATORSETS: FUELCONSUMERS: FUEL: HCEXPORT: REGULARITY: VENTING_EMITTERS: CATEGORY: - NAME: GENERATORSETS: FUELCONSUMERS: FUEL: HCEXPORT: REGULARITY: VENTING_EMITTERS: CATEGORY: - ...","s":"Format","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#format","p":823},{"i":833,"t":"INSTALLATIONS - NAME: Platform_A CATEGORY: FIXED - NAME: Platform_B CATEGORY: MOBILE ","s":"General structure","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#general-structure","p":823},{"i":835,"t":"SIM;OIL_PROD SIM is the key defined in TIME_SERIES. The user can define expressions of variables, see expressions for details. The following is an example of using expressions: SIM1;WATER_PROD:FIELD_A {+} SIM2;WATER_PROD:FIELD_B SIM1 and SIM2 are here different reservoir sources with potential different time steps. This is not a problem and handled by eCalc automatically.","s":"Referring to time series","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#referring-to-time-series-1","p":823},{"i":837,"t":"This example uses the HCEXPORT keyword. Example: same expression for the entire time frame HCEXPORT: SIM;OIL_PROD Example: expression varies through time HCEXPORT: 2001-01-01: SIM1;OIL_PROD 2005-01-01: SIM2:OIL_PROD {+} SIM2;GAS_SALES","s":"Time intervals","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#time-intervals","p":823},{"i":839,"t":"There are different options on how to utilise compressor models in the calculations within the ENERGY_USAGE_MODEL section in INSTALLATIONS. Three different options will be illustrated here: No matter the compressor model type, it can either be placed in two sections, which can be: Under the CONSUMERS section under GENERATORSETS. This is applicable for electrical motor driven compressors where electricity is generated in de-coupled gas turbines and distributed to the individual process units. Under the FUELCONSUMERS section. Here it is necessary for the compressor model to be coupled to a gas turbine model. The coupled turbine is solely driving the compressor system to which it is attached to. Example INSTALLATIONS: - NAME: InstallationA CATEGORY: FIXED FUEL: fuel_gas GENERATORSETS: - NAME: gensetA CATEGORY: TURBINE-GENERATOR ELECTRICITY2FUEL: genset CONSUMERS: - NAME: Gas injection compressor CATEGORY: COMPRESSOR ENERGY_USAGE_MODEL: TYPE: COMPRESSOR_SYSTEM ... FUELCONSUMERS: - NAME: Gas export compressor CATEGORY: GAS-DRIVEN-COMPRESSOR ENERGY_USAGE_MODEL: TYPE: COMPRESSOR_SYSTEM ...","s":"Compressor models in calculations","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/","h":"","p":838},{"i":841,"t":"When COMPRESSOR is specified under ENERGY_USAGE_MODEL the only keyword that is allowed is ENERGYFUNCTION. This model only supports a single compressor, which can either be a tabular compressor model defined in FACILITY_INPUTS or a compressor model defined in MODELS. The attributes RATE, SUCTION_PRESSURE and DISCHARGE_PRESSURE are required to be specified in the energy usage model. Here, the specified rate will be for the entire train, the suction pressure will be at the inlet of the first stage, whilst the discharge pressure will be the outlet pressure of the last stage.","s":"COMPRESSOR Energy Usage Model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","h":"","p":840},{"i":843,"t":"NAME: TYPE: COMPRESSOR ENERGY_USAGE_MODEL: TYPE: COMPRESSOR CONDITION: ENERGYFUNCTION: RATE: SUCTION_PRESSURE: DISCHARGE_PRESSURE: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","h":"#format","p":840},{"i":845,"t":"ENERGY_USAGE_MODEL: TYPE: COMPRESSOR ENERGYFUNCTION: booster_compressor_reference RATE: SIM1;GAS_PROD SUCTION_PRESSURE: SIM1;SUCTION_PRESSURE DISCHARGE_PRESSURE: SIM1;DISCHARGE_PRESSURE","s":"Example","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","h":"#example","p":840},{"i":847,"t":"When COMPRESSOR_SYSTEM is specified under ENERGY_USAGE_MODEL a fully defined compressor model (with charts) can be used. Here, the following are allowed under the COMPRESSOR_SYSTEM keyword: Simplified variable speed compressor train model, Variable speed compressor train model Sampled compressor model The key difference between this model and the COMPRESSOR keyword is that multiple compression trains can be specified.","s":"COMPRESSOR_SYSTEM energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","h":"","p":846},{"i":849,"t":"NAME: TYPE: COMPRESSOR ENERGY_USAGE_MODEL: TYPE: COMPRESSOR_SYSTEM CONDITION: COMPRESSORS: - NAME: COMPRESSOR_MODEL: TOTAL_SYSTEM_RATE: OPERATIONAL_SETTINGS: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","h":"#format","p":846},{"i":851,"t":"ENERGY_USAGE_MODEL: TYPE: COMPRESSOR_SYSTEM COMPRESSORS: - NAME: export_compressor1 COMPRESSOR_MODEL: export_compressor_reference - NAME: export_compressor2 COMPRESSOR_MODEL: export_compressor_reference - NAME: injection_compressor COMPRESSOR_MODEL: injection_compressor_reference TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT OPERATIONAL_SETTINGS: - RATES: - SIM1;GAS_SALES - 0 - SIM1;GAS_INJ SUCTION_PRESSURE: 50 DISCHARGE_PRESSURES: - 150 - 150 - SIM1;INJ_PRESSURE - RATES: - SIM1;GAS_SALES {/} 2 - SIM1;GAS_SALES {/} 2 - SIM1;GAS_INJ SUCTION_PRESSURE: 50 DISCHARGE_PRESSURES: - 150 - 150 - SIM1;INJ_PRESSURE","s":"Example","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","h":"#example","p":846},{"i":853,"t":"This energy usage model allows the compressor train model type Variable speed compressor train model with multiple streams and pressures.","s":"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"","p":852},{"i":855,"t":"NAME: TYPE: COMPRESSOR ENERGY_USAGE_MODEL: TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES CONDITION: COMPRESSOR_TRAIN_MODEL: RATE_PER_STREAM: - - - ... - SUCTION_PRESSURE: DISCHARGE_PRESSURE: INTERSTAGE_CONTROL_PRESSURE: POWER_ADJUSTMENT_CONSTANT: The number of elements in RATE_PER_STREAM must correspond to the number of streams defined for the model referenced in COMPRESSOR_TRAIN_MODEL. INTERSTAGE_CONTROL_PRESSURE is required if the model referenced in COMPRESSOR_TRAIN_MODEL has has an interstage control pressure defined. If there is no interstage control pressure defined in COMPRESSOR_TRAIN_MODEL, INTERSTAGE_CONTROL_PRESSURE should not be defined.","s":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#format","p":852},{"i":857,"t":"This energy model usage type allows for defining energy usage directly with an expression. It needs to be either accompanied by LOAD (for electrical consumers) or FUELRATE (for fuel consumers). The energy usage will be equal to the result of the expression given for LOAD/FUELRATE. When a model is run with REGULARITY, there is an option to specify whether the direct consumer is of stream day or calendar day energy usage rate with CONSUMPTION_RATE_TYPE. Format​ ENERGY_USAGE_MODEL: TYPE: DIRECT LOAD/FUELRATE: CONSUMPTION_RATE_TYPE: CONDITION/S: POWERLOSSFACTOR: Example​ Direct load ENERGY_USAGE_MODEL: TYPE: DIRECT LOAD: 10 Direct fuel rate ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: 100000","s":"DIRECT ENERGY USAGE MODEL","u":"/ecalc/docs/about/modelling/setup/installations/direct_consumers","h":"","p":856},{"i":859,"t":"The GENERATORSETS keyword is optional. However, the only requirement is that each installation must have defined either GENERATORSETS or FUELCONSUMERS. Under GENERATORSETS one or several generator sets (a 'set' of an engine of some sort and a generator) are specified in a list. Each generator set requires three sub-keywords, ELECTRICITY2FUEL and CONSUMERS and CATEGORY. Optionally, FUEL may be used to override the default fuel type specification for the installation. If not specified, it will inherit that of the installation. What happens when fuel is specified? When FUEL is defined for a generator set, there is no merging between the installation fuel definition and the generator set fuel definition, but a complete override of the configuration. Category can be either TURBINE-GENERATOR or POWER-FROM-SHORE.","s":"Generator sets in calculations","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"","p":858},{"i":861,"t":"GENERATORSETS: - NAME: CATEGORY: FUEL: ELECTRICITY2FUEL: CONSUMERS: ...","s":"Format","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#format","p":858},{"i":864,"t":"The behavior of a generator set is described by an ELECTRICITY2FUEL table, which relates the burned fuel rate to delivered power, including the power generation efficiency at different loads. It also defines the operational envelope of the generator set. ELECTRICITY2FUEL may be modeled with a constant function through time or with different power vs. fuel relations for different time intervals.","s":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description","p":858},{"i":866,"t":"ELECTRICITY2FUEL: or ELECTRICITY2FUEL: : : ","s":"Format","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#format-1","p":858},{"i":869,"t":"note Power from shore is currently handled in eCalc™ by defining a dummy ELECTRICITY2FUEL model with zero fuel usage, and applying the POWER-FROM-SHORE category. This is an intermediate solution and will be dealt with differently in the future.","s":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description-1","p":858},{"i":871,"t":"Make an ELECTRICITY2FUEL input file with zero fuel usage. POWER, FUEL # [MW], [SM3/day] 0, 0 50, 0 Specify ELECTRICITY2FUEL under FACILITY_INPUTS. FACILITY_INPUTS: - NAME: genset_pfs TYPE: ELECTRICITY2FUEL FILE: genset_pfs.csv Use the POWER-FROM-SHORE category and the ELECTRICITY2FUEL specified under FACILITY_INPUTS. GENERATORSETS: - NAME: generatorset_with_pfs_event CATEGORY: 2020-01-01: TURBINE-GENERATOR 2030-01-01: POWER-FROM-SHORE ELECTRICITY2FUEL: 2020-01-01: genset_turbine 2030-01-01: genset_pfs CONSUMERS: ... If power from shore is used for the full time range you can skip the dates in both CATEGORY and ELECTRICITY2FUEL GENERATORSETS: - NAME: generatorset_with_pfs_event CATEGORY: POWER-FROM-SHORE ELECTRICITY2FUEL: genset_pfs CONSUMERS: ...","s":"Example","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#example","p":858},{"i":874,"t":"note Heaters and boilers should be modeled in eCalc™ as GENERATORSETS, applying the HEATER and BOILER categories. This is an intermediate solution and may be dealt with differently in the future.","s":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description-2","p":858},{"i":876,"t":"Specify the correlation between energy delivered and fuel consumed under FACILITY_INPUTS: FACILITY_INPUTS: - NAME: boiler_energy_fuel TYPE: ELECTRICITY2FUEL FILE: boiler_energy_fuel.csv Use the BOILER category and the ELECTRICITY2FUEL specified under FACILITY_INPUTS: GENERATORSETS: - NAME: boiler_as_generator CATEGORY: BOILER ELECTRICITY2FUEL: boiler_energy_fuel CONSUMERS: ...","s":"Example: Boiler as generator set","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#example-boiler-as-generator-set","p":858},{"i":878,"t":"Pump charts are defined in the FACILITY_INPUTS section, and is then referred to from an ENERGY_USAGE_MODEL.","s":"Pump models in calculations","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"","p":877},{"i":880,"t":"To configure a single pump, the pump rate, suction- and discharge pressures and fluid density must be given as inputs. In addition, a reference to a pump chart defined in the FACILITY_INPUTS section has to be included.","s":"PUMP energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#pump-energy-usage-model","p":877},{"i":882,"t":"ENERGY_USAGE_MODEL: TYPE: PUMP CONDITION: ENERGYFUNCTION: RATE: SUCTION_PRESSURE: DISCHARGE_PRESSURE: FLUID_DENSITY: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#format","p":877},{"i":884,"t":"ENERGY_USAGE_MODEL: TYPE: PUMP ENERGYFUNCTION: waterinjection_pump_reference RATE: SIM1;WATER_INJ SUCTION_PRESSURE: 3 DISCHARGE_PRESSURE: 200 FLUID_DENSITY: 1000","s":"Example","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#example","p":877},{"i":886,"t":"Quantity Default units RATE Sm3/day SUCTION_PRESSURE bara DISCHARGE_PRESSURE bara FLUID_DENSITY kg/m3","s":"Units","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#units","p":877},{"i":888,"t":"Model a system of pumps that share common manifolds and have cross-overs between them and for which the rate may be split between them based on various operational strategies.","s":"PUMP_SYSTEM energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#pump_system-energy-usage-model","p":877},{"i":890,"t":"ENERGY_USAGE_MODEL: TYPE: PUMP_SYSTEM CONDITION: PUMPS: - NAME: CHART: TOTAL_SYSTEM_RATE: FLUID_DENSITY: OPERATIONAL_SETTINGS: warning If all OPERATIONAL_SETTINGS have been exhausted, and there were still some time steps that were outside the capacity of the operational setting, the last operational setting will be \"chosen\" nevertheless. In this case the energy_usage in the output will be set to NaN which indicates that the operational setting, is in fact, invalid (or converted to 0 when aggregating upwards to e.g. genset)","s":"Format","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#format-1","p":877},{"i":892,"t":"ENERGY_USAGE_MODEL: TYPE: PUMP_SYSTEM PUMPS: - NAME: pump1 CHART: water_injection_pump_reference - NAME: pump2 CHART: water_injection_pump_reference TOTAL_SYSTEM_RATE: SIM1;WATER_INJ FLUID_DENSITY: 1000.0 OPERATIONAL_SETTINGS: - RATE_FRACTIONS: [1, 0] SUCTION_PRESSURE: 3 DISCHARGE_PRESSURE: 200 - RATE_FRACTIONS: [0.5, 0.5] SUCTION_PRESSURE: 3 DISCHARGE_PRESSURE: 200","s":"Example","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#example-1","p":877},{"i":894,"t":"Quantity Default units RATE Sm3/day SUCTION_PRESSURE bara DISCHARGE_PRESSURE bara FLUID_DENSITY kg/m3","s":"Units","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#units-1","p":877},{"i":896,"t":"This type is a pure interpolation model where the user may freely choose all the variables. No extrapolation is done, thus the user must ensure to cover the entire variable space in the input data. For points outside the input data, the output is invalid and no energy usage is given (shown in the output vector extrapolations).","s":"Tabular models","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"","p":895},{"i":898,"t":"ENERGY_USAGE_MODEL: TYPE: TABULATED CONDITION: ENERGYFUNCTION: VARIABLES: - NAME: EXPRESSION: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#format","p":895},{"i":900,"t":"ENERGY_USAGE_MODEL: TYPE: TABULATED ENERGYFUNCTION: tabulated_energy_function_reference VARIABLES: - NAME: RATE EXPRESSION: SIM1;GAS_PROD - NAME: Gas oil ratio EXPRESSION: SIM1;GOR - NAME: GAS_TEMPERATURE EXPRESSION: SIM1;TEMP","s":"Example","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#example","p":895},{"i":902,"t":"Consumer energy function for the compressor (or compressor train) is in a tabulated format, where each line is a point defining the energy consumption for the given variables. See Sampled compressor model for details. As a single compressor/compressor train (no system), it can be set up in the following way: ENERGY_USAGE_MODEL: TYPE: COMPRESSOR ENERGYFUNCTION: RATE: SUCTION_PRESSURE: DISCHARGE_PRESSURE: ","s":"COMPRESSOR_TABULAR input type","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#compressor_tabular-input-type","p":895},{"i":904,"t":"note The MODELS keyword is optional for an eCalc™ model to run. However, it is critical for compressor and turbine modelling. This part of the setup defines input files that characterize various fluid, compressor and turbine models. These are later used as input in the INSTALLATIONS part of the setup by referencing their NAME.","s":"Models","u":"/ecalc/docs/about/modelling/setup/models/","h":"","p":903},{"i":906,"t":"MODELS: - NAME: TYPE: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/models/","h":"#format","p":903},{"i":908,"t":"The supported types are: FLUID COMPRESSOR_CHART SINGLE_SPEED_COMPRESSOR_TRAIN SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN VARIABLE_SPEED_COMPRESSOR_TRAIN VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES TURBINE COMPRESSOR_WITH_TURBINE","s":"Supported types","u":"/ecalc/docs/about/modelling/setup/models/","h":"#supported-types","p":903},{"i":910,"t":"Compressors may be single speed or variable speed, they may be stand-alone or there may be multiple compressors mounted on a common shaft (compressor train), they may be run with an electric motor or be driven by a turbine coupled directly to the shaft, there may be one or many compressors/compressor trains in parallel connected to a common manifold from which the gas is distributed between these in different operational settings. In eCalc™, single compressors and compressor trains are modeled the same way, a single compressor is just a train with just one stage. There are multiple modeling options for compressor trains: Sampled compressor model: The compressor model is setup in an external tool, and this model is sampled by running a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a csv file and input to eCalc™. Note, this is not inputted in the MODELS section, rather in the FACILITY_INPUTS section Single speed compressor train model: The compressor train modeling is done in eCalc™. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage. In addition, since the speed is fixed, defining a pressure control method is required. This pressure control is used to meet the required discharge pressure. Variable speed compressor train model: The compressor train modelling is done in eCalc™. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage. Simplified variable speed compressor train model: Model the same compressor train as the above, but is more lightweight in that instead of iterating to meet the requested discharge pressure, it assumes all stages has equal pressure fractions and solves for each stage independently. As the shaft speed is not used in the calculations, this model supports using generic compressor charts, see the Compressor charts section. Variable speed compressor train model with multiple streams and pressures: This is a more complex model, where it is possible to define fluid streams going in and out at different stages in the compressor train. Also, an additional pressure requirement may be specified between two stages. This model is suitable in cases where for example a part of the fluid stream is taken out after one stage at a specified pressure for export, and the rest is further compressed for injection at a higher pressure. Core theory behind the modelling of compressors in eCalc™ can be found here.","s":"Compressor modelling","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/","h":"","p":909},{"i":912,"t":"The compressor chart is used to set up a model of each compressor. eCalc™ currently support four ways to set up a compressor chart Predefined single speed chart Predefined variable speed chart Generic compressor chart with a specified design point Generic compressor chart which is automatically adjusted to have capacity for the input data","s":"Compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"","p":911},{"i":914,"t":"The single speed chart type allows a single compressor curve for one speed, using the keyword CURVE","s":"User defined single speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#user-defined-single-speed-compressor-chart","p":911},{"i":916,"t":"MODELS: - NAME: TYPE: COMPRESSOR_CHART CHART_TYPE: SINGLE_SPEED UNITS: RATE: HEAD: EFFICIENCY: CURVE: - SPEED: RATE: HEAD: EFFICIENCY: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format","p":911},{"i":918,"t":"MODELS: - NAME: predefined_single_speed_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: SINGLE_SPEED UNITS: RATE: AM3_PER_HOUR HEAD: M EFFICIENCY: FRACTION CURVE: - SPEED: 7500 RATE: [2900, 3503, 4002, 4595.0] HEAD: [8412.9, 7996, 7363, 6127] EFFICIENCY: [0.72, 0.75, 0.74, 0.70] Tip It is also possible to input single speed compressor chart as csv file. Format​ CURVE: FILE: Example​ CURVE: FILE: compressor_chart_single_speed.csv","s":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example","p":911},{"i":920,"t":"The variable speed chart type allows a fully defined compressor chart with data for two or more speeds, using the keyword CURVES. The upper and lower speed curves will be interpreted as the speed capacity limits for the chart. Whilst the lowest rate points on each of the upper and lower speed curves will define the minimum flow line for the compressor. Additionally, there is functionality to define a control line which behaves as an alternate to the minimum flow line. This means that your input will be 'cropped' to only include points to the right of the control line - modelling recirculation (ASV) from the correct control line. See Surge control margin for variable speed compressor chart for more details. note Using a variable speed compressor chart as input essentially does the same as if a process simulation tool was used to create an energy function. It has been verified to be close to identical to Unisim within 2% accuracy (smaller differences in density arise from differences in PVT assumptions and calculations).","s":"User defined variable speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#user-defined-variable-speed-compressor-chart","p":911},{"i":922,"t":"MODELS: - NAME: TYPE: COMPRESSOR_CHART CHART_TYPE: VARIABLE_SPEED UNITS: RATE: HEAD: EFFICIENCY: CURVES: - SPEED: RATE: HEAD: EFFICIENCY: - SPEED: RATE: HEAD: EFFICIENCY: - ... and so forth for all chart curves. Minimum two curves needed.","s":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-2","p":911},{"i":924,"t":"MODELS: - NAME: predefined_variable_speed_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: VARIABLE_SPEED UNITS: RATE: AM3_PER_HOUR HEAD: M EFFICIENCY: FRACTION CURVES: - SPEED: 7500 RATE: [2900, 3503, 4002, 4595.0] HEAD: [8412.9, 7996, 7363, 6127] EFFICIENCY: [0.72, 0.75, 0.74, 0.70] - SPEED: 9886 RATE: [3708, 4502, 4993.6, 5507, 5924] HEAD: [13845, 13182, 12425, 11276, 10054] EFFICIENCY: [ 0.72, 0.75, 0.748, 0.73, 0.70] - SPEED: 10767 RATE: [4052, 4500, 4999, 5492, 6000, 6439,] HEAD: [16447, 16081, 15546, 14640, 13454, 11973,] EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70] Tip It is also possible to input variable speed compressor chart as csv file. Format​ CURVES: FILE: Example​ CURVES: FILE: compressor_chart_variable_speed.csv","s":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-2","p":911},{"i":926,"t":"The generic compressor chart used is an \"average\" chart of compressors used on the NCS and cannot be expected to be equal to the actual chart for a compressor which has been designed and delivered. However, it can be a good first estimation of how a chart may be for a future process not yet in the design phase. This chart will not replace any future compressor curves and it may not be accurate in comparison to the final compressor curve; however, it is a good method to capture the major effects (such as ASV (anti-surge valve) recirculation). With this method it is possible to view how a \"typical\" compressor curve would react a large spread in the data set. If the design point is set within the middle of the data spread, points with rates lower than the minimum flow will have some recirculation; whilst, too high or unrealistic rates will not be solved. This is an essential difference in comparison to the generic chart with its design point calculated from input data (which is covered in Generic compressor chart with design point calculated from input data), which will shift the entire compressor curve to solve for even the highest rate and head points. Unified generic compressor chart: The compressor chart is created by scaling the unified generic compressor chart in the figure above with a design actual rate and head. Note that the rate is here in the units am3/hr which is NOT EQUAL to Sm3/hr. The units am3/hr refers to the volumetric rate at inlet conditions (inlet pressure and temperature), and it will differ from the inputted standard rates due to the difference in density. The design polytropic head is given in either kJ/kg, m or J/kg, UNITS. The generic compressor chart is currently accompanied by a fixed polytropic efficiency (polytropic efficiency variations within the chart may be supported in the future).","s":"Generic compressor chart with predefined design point","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#generic-compressor-chart-with-predefined-design-point","p":911},{"i":928,"t":"MODELS: - NAME: TYPE: COMPRESSOR_CHART CHART_TYPE: GENERIC_FROM_DESIGN_POINT POLYTROPIC_EFFICIENCY: DESIGN_RATE: DESIGN_HEAD: UNITS: RATE: HEAD: EFFICIENCY: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-4","p":911},{"i":930,"t":"MODELS: - NAME: generic_from_design_point_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: GENERIC_FROM_DESIGN_POINT POLYTROPIC_EFFICIENCY: 0.75 DESIGN_RATE: 7000 DESIGN_HEAD: 50 UNITS: RATE: AM3_PER_HOUR HEAD: KJ_PER_KG EFFICIENCY: FRACTION For this method it is important to note that only Simplified variable speed compressor train model is supported.","s":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-4","p":911},{"i":932,"t":"MODELS: - NAME: generic_compression_train_design_point TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN FLUID_MODEL: sample_fluid PRESSURE_CONTROL: UPSTREAM_CHOKE COMPRESSOR_TRAIN: STAGES: - COMPRESSOR_CHART: generic_from_design_point_compressor_chart INLET_TEMPERATURE: 30","s":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-5","p":911},{"i":934,"t":"Caution Beware that using this functionality in a COMPRESSOR_SYSTEM energy usage model can give some unwanted effects. E.g. splitting/halving the rates into two equal compressor trains will in effect change the compressor chart for a compressor set up with GENERIC_FROM_INPUT compared to running the full rate through a single compressor train. Consider using a single design point instead. The generic chart from input is also based on the unified generic compressor chart: However, in this case the design point is not specified when setting up the model, instead it is estimated at run time and is entirely based on the inputted data set. An algorithm is used to set a design point such that all the input data is within the capacity. Even if there is a large spread in the data, all data points will solve. High rate/head data points will just be covered by the curve; whilst low rate points outside the minimum flow point will have recirculation. This method has one major potential downside in comparison to the Generic compressor chart with predefined design point. As all data points will be covered by the compressor curve, if there is an extremely large or unrealistic head or rate value, the other more \"normal\" data points will be impacted and will either result in a large head adjustment (via upstream/downstream choking) or it will have a large recirculation rate. This has the potential to skew the entire data set solely due to one unrealistic data point. Thus, if this generic chart is utilised it is important to make sure that unrealistic data is filtered out.","s":"Generic compressor chart with design point calculated from input data","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#generic-compressor-chart-with-design-point-calculated-from-input-data","p":911},{"i":936,"t":"MODELS: - NAME: TYPE: COMPRESSOR_CHART CHART_TYPE: GENERIC_FROM_INPUT POLYTROPIC_EFFICIENCY: UNITS: EFFICIENCY: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-5","p":911},{"i":938,"t":"MODELS: - NAME: generic_from_input_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: GENERIC_FROM_INPUT POLYTROPIC_EFFICIENCY: 0.75 UNITS: EFFICIENCY: FRACTION","s":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-6","p":911},{"i":940,"t":"For a variable speed compressor chart it is possible to add a surge control margin. This is currently done by giving a fraction or percentage as input. The control margin is used to calculate the increase in minimum flow, i.e. as a percentage or fraction of the rate difference between minimum- and maximum flow, for the given speed. The increase in minimum flow is calculated individually for each speed curve. The corresponding head and efficiency values for the new minimum flow rate is found by interpolation along the speed curves. The same compressor chart can be used for multiple compressor stages, but with different surge control margins. Hence, the surge control margin is defined when setting up the stages in a Variable speed compressor train model or Variable speed compressor train model with multiple streams and pressures.","s":"Surge control margin for variable speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#surge-control-margin-for-variable-speed-compressor-chart","p":911},{"i":942,"t":"MODELS: - NAME: TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN FLUID_MODEL: COMPRESSOR_CHART: CONTROL_MARGIN: CONTROL_MARGIN_UNIT: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-6","p":911},{"i":944,"t":"This section outlines the various compressor train types that are available in eCalc™. These are as follows: Single speed compressor train model Variable speed compressor train model Simplified variable speed compressor train model Variable speed compressor train model with multiple streams and pressures","s":"Compressor train types","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/","h":"","p":943},{"i":946,"t":"The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures are assumed based on an assumption of equal pressure fractions for each stage. Based on this, the compressor work is calculated independently for each compressor as if it was a standalone compressor, neglecting that they are in fact on the same shaft and thus have a common speed. This model supports both user defined compressor charts and generic compressor charts. See compressor charts for more information. In addition, a FLUID MODEL must be specified. The model comes in two versions, one where the compressor stages are known (pre defined), and one where the compressor stages are calculated at run-time based on input data.","s":"Simplified variable speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"","p":945},{"i":948,"t":"MODELS: - NAME: TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN FLUID_MODEL: POWER_ADJUSTMENT_CONSTANT: MAXIMUM_POWER: CALCULATE_MAX_RATE: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#format","p":945},{"i":950,"t":"When the compressor stages are known, each stage is defined with a compressor chart and an inlet temperature: MODELS: - NAME: TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN FLUID_MODEL: COMPRESSOR_TRAIN: STAGES: - INLET_TEMPERATURE: COMPRESSOR_CHART: - INLET_TEMPERATURE: COMPRESSOR_CHART: - ... and so forth for each stage in the train POWER_ADJUSTMENT_CONSTANT: MAXIMUM_POWER: ","s":"Simplified compressor train model with known compressor stages","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#simplified-compressor-train-model-with-known-compressor-stages","p":945},{"i":952,"t":"When the number of compressor stages are not known, one may specify the maximum pressure ratio per stage. When the maximum pressure ratio is set, the number of compressors will be determined at run time (based on input data) such that the number of compressors is large enough to ensure no pressure ratios are above a given maximum pressure ratio per stage, but not larger. This model is intended for (but not limited to) the use of a generic compressor chart. Especially one can test with the generic compressor chart which are adjusted at run time (based on input data), for example to explore future rebuilds/designs where no specifications/data is yet available from vendors et.c. MODELS: - NAME: TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN FLUID_MODEL: COMPRESSOR_TRAIN: MAXIMUM_PRESSURE_RATIO_PER_STAGE: COMPRESSOR_CHART: INLET_TEMPERATURE: POWER_ADJUSTMENT_CONSTANT: ","s":"Simplified compressor train model with unknown number of compressor stages","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#simplified-compressor-train-model-with-unknown-number-of-compressor-stages","p":945},{"i":955,"t":"MODELS: - NAME: predefined_variable_speed_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: VARIABLE_SPEED UNITS: RATE: AM3_PER_HOUR HEAD: M EFFICIENCY: FRACTION CURVES: - SPEED: 7500 RATE: [2900, 3503, 4002, 4595.0] HEAD: [8412.9, 7996, 7363, 6127] EFFICIENCY: [0.72, 0.75, 0.74, 0.70] - SPEED: 10767 RATE: [4052, 4500, 4999, 5492, 6000, 6439,] HEAD: [16447, 16081, 15546, 14640, 13454, 11973,] EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70] - NAME: fluid_model_1 TYPE: FLUID FLUID_MODEL_TYPE: COMPOSITION EOS_MODEL: SRK COMPOSITION: nitrogen: 0.74373 CO2: 2.415619 methane: 85.60145 ethane: 6.707826 propane: 2.611471 i_butane: 0.45077 n_butane: 0.691702 i_pentane: 0.210714 n_pentane: 0.197937 n_hexane: 0.368786 - NAME: simplified_compressor_model TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN FLUID_MODEL: fluid_model_1 COMPRESSOR_TRAIN: STAGES: - INLET_TEMPERATURE: 30 COMPRESSOR_CHART: predefined_variable_speed_compressor_chart","s":"A (single) compressor with a user-defined variable speed compressor chart and fluid composition","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-single-compressor-with-a-user-defined-variable-speed-compressor-chart-and-fluid-composition","p":945},{"i":957,"t":"MODELS: - NAME: generic_from_design_point_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: GENERIC_FROM_DESIGN_POINT POLYTROPIC_EFFICIENCY: 0.75 DESIGN_RATE: 7000 DESIGN_HEAD: 50 UNITS: RATE: AM3_PER_HOUR HEAD: KJ_PER_KG EFFICIENCY: FRACTION - NAME: medium_fluid TYPE: FLUID FLUID_MODEL_TYPE: PREDEFINED EOS_MODEL: SRK GAS_TYPE: MEDIUM - NAME: simplified_compressor_model TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN FLUID_MODEL: medium_fluid COMPRESSOR_TRAIN: STAGES: - INLET_TEMPERATURE: 30 COMPRESSOR_CHART: generic_from_design_point_compressor_chart - NAME: compressor_train_turbine TYPE: TURBINE LOWER_HEATING_VALUE: 38 # MJ/Sm3 TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362] # fractions between 0 and 1 - NAME: simplified_compressor_model_with_turbine TYPE: COMPRESSOR_WITH_TURBINE COMPRESSOR_MODEL: simplified_compressor_model TURBINE_MODEL: compressor_train_turbine","s":"A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-single-turbine-driven-compressor-with-a-generic-compressor-chart-with-design-point-and-predefined-composition","p":945},{"i":959,"t":"MODELS: - NAME: generic_from_input_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: GENERIC_FROM_INPUT - NAME: predefined_variable_speed_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: VARIABLE_SPEED UNITS: RATE: AM3_PER_HOUR HEAD: M EFFICIENCY: FRACTION CURVES: - SPEED: 7500 RATE: [2900, 3503, 4002, 4595.0] HEAD: [8412.9, 7996, 7363, 6127] EFFICIENCY: [0.72, 0.75, 0.74, 0.70] - SPEED: 10767 RATE: [4052, 4500, 4999, 5492, 6000, 6439,] HEAD: [16447, 16081, 15546, 14640, 13454, 11973,] EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70] - NAME: dry_fluid TYPE: FLUID FLUID_MODEL_TYPE: PREDEFINED EOS_MODEL: SRK GAS_TYPE: DRY - NAME: simplified_compressor_train_model TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN FLUID_MODEL: dry_fluid COMPRESSOR_TRAIN: STAGES: - INLET_TEMPERATURE: 30 COMPRESSOR_CHART: generic_from_input_compressor_chart - INLET_TEMPERATURE: 30 COMPRESSOR_CHART: predefined_variable_speed_compressor_chart","s":"A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-compressor-train-with-two-stages-where-the-first-stage-has-unknown-spec-while-the-second-has-a-predefined-chart","p":945},{"i":961,"t":"MODELS: - NAME: generic_from_input_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: GENERIC_FROM_INPUT - NAME: dry_fluid TYPE: FLUID FLUID_MODEL_TYPE: PREDEFINED EOS_MODEL: SRK GAS_TYPE: DRY - NAME: simplified_compressor_train_model TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN FLUID_MODEL: dry_fluid COMPRESSOR_TRAIN: MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5 COMPRESSOR_CHART: generic_from_input_compressor_chart INLET_TEMPERATURE: 30","s":"A compressor train where the number of stages are unknown","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-compressor-train-where-the-number-of-stages-are-unknown","p":945},{"i":963,"t":"The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft. Being single speed compressors on a common shaft means that all compressors will run at the exact same fixed speed, and this shaft speed can not be varied. Since the shaft speed can not vary, the problem is overdefined given the rate, suction pressure and discharge pressure. A method for controlling the pressure also needs to be defined, to be able to calculate the energy usage for given rates, suction pressures and discharge pressures. This means that a single speed compressor model needs the following to be defined: A polytropic compressor chart for every compressor stage in the compressor train. For single speed trains, eCalc only supports user defined single speed compressor charts. A FLUID MODEL. A PRESSURE_CONTROL. The model is defined under the main keyword MODELS in the format","s":"Single speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","h":"","p":962},{"i":965,"t":"MODELS: - NAME: TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN FLUID_MODEL: PRESSURE_CONTROL: MAXIMUM_DISCHARGE_PRESSURE: COMPRESSOR_TRAIN: STAGES: - INLET_TEMPERATURE: COMPRESSOR_CHART: PRESSURE_DROP_AHEAD_OF_STAGE: - INLET_TEMPERATURE: COMPRESSOR_CHART: PRESSURE_DROP_AHEAD_OF_STAGE: - ... and so forth for each stage in the train POWER_ADJUSTMENT_CONSTANT: MAXIMUM_POWER: CALCULATE_MAX_RATE: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","h":"#format","p":962},{"i":967,"t":"In this model all compressors in the train have the same speed, and the model is build on a forward model of the fluid properties/state where speed is a parameter. Then the speed is iterated until the discharge pressure of the outlet is equal to the requested discharge pressure. This model only supports User defined variable speed compressor chart. In addition, a FLUID MODEL must be specified. Control mechanisms The variable speed comporessor train model has the following automatic control mechanisms: Antisurge control: When the flowrate is too low, given the suction and discharge pressures, eCalc will use automatic anti-surge control. The use of the anti-surge valve (ASV) is mimicked by increasing the total flow through the compressor, until the head is at the surge line (minimum flow curve) of the compressor chart. Speed increase below minimum speed: If a rate/head point is below the compressor chart (below minimum speed), the speed is automatically increased to the minimum speed curve. Stonewall speed increase: When the flowrate is too high, given the suction and discharge pressures, eCalc will automatically increase the speed to meet the stonewall (maximum flow line) of the compressor chart. To achieve the requested discharge pressure, the outlet stream is choked. This control mechanism can be turned off, for cases where a downstream choke valve does not exist. Format The model is defined under the main keyword MODELS in the format MODELS: - NAME: TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN FLUID_MODEL: COMPRESSOR_TRAIN: STAGES: - INLET_TEMPERATURE: COMPRESSOR_CHART: CONTROL_MARGIN: PRESSURE_DROP_AHEAD_OF_STAGE: CONTROL_MARGIN_UNIT: - INLET_TEMPERATURE: COMPRESSOR_CHART: CONTROL_MARGIN: PRESSURE_DROP_AHEAD_OF_STAGE: CONTROL_MARGIN_UNIT: - ... and so forth for each stage in the train POWER_ADJUSTMENT_CONSTANT: MAXIMUM_POWER: CALCULATE_MAX_RATE: PRESSURE_CONTROL: ","s":"Variable speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","h":"","p":966},{"i":969,"t":"This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like.","s":"Variable speed compressor train model with multiple streams and pressures","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"","p":968},{"i":971,"t":"The model is defined under the main keyword MODELS in the format: MODELS: - NAME: TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES # All streams defined ahead of stage # Default outlet stream after last stage should not be defined STREAMS: # All inlet streams must have fluid models with the same eos model - NAME: TYPE: INGOING FLUID_MODEL: - NAME: TYPE: INGOING FLUID_MODEL: - ... - NAME: TYPE: OUTGOING # NB: No fluid definition for outgoing streams! STAGES: - INLET_TEMPERATURE: COMPRESSOR_CHART: STREAM: CONTROL_MARGIN: PRESSURE_DROP_AHEAD_OF_STAGE: CONTROL_MARGIN_UNIT: - ... - INLET_TEMPERATURE: COMPRESSOR_CHART: STREAM: - - CONTROL_MARGIN: CONTROL_MARGIN_UNIT: PRESSURE_DROP_AHEAD_OF_STAGE: INTERSTAGE_CONTROL_PRESSURE: UPSTREAM_PRESSURE_CONTROL: DOWNSTREAM_PRESSURE_CONTROL: - ... - INLET_TEMPERATURE: COMPRESSOR_CHART: CONTROL_MARGIN: CONTROL_MARGIN_UNIT: PRESSURE_DROP_AHEAD_OF_STAGE: - ... MAXIMUM_POWER: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#format","p":968},{"i":973,"t":"STREAMS is a list of all in- and out-going streams for the compressor train. The same equation of state (EOS) must be used for each INGOING stream fluid models OUTGOING fluid models cannot be specified. STAGES is a list of all the stages in the compressor train. For each stage, a temperature in Celsius must be defined. It is assumed that the gas is cooled down to this temperature ahead of the compression at this stage. A reference to a compressor chart needs to be specified for each stage. For the first stage, it is required to have at least one stream of INGOING type. In addition, INTERSTAGE_CONTROL_PRESSURE cannot be used on the first stage. Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream will be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the molar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will be subtracted the rate of the outgoing stream. PRESSURE_DROP_AHEAD_OF_STAGE is optional, but if defined it will reduce the inlet pressure of that particular stage by a fixed value. As of now, only a single value is supported - i.e. a time series cannot be used here. CONTROL_MARGIN is a surge control margin, see Surge control margin for variable speed compressor chart. CONTROL_MARGIN_UNIT is the unit of the surge control margin.","s":"Keyword usage","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#keyword-usage","p":968},{"i":975,"t":"note INTERSTAGE_CONTROL_PRESSURE may be specified for one (only one!) of the stages 2, ..., N. It may not be specified for the first stage. See INTERSTAGE_CONTROL_PRESSURE for more usage details This is optional but essentially when this is specified the compression train is split into two parts - before and after the INTERSTAGE_CONTROL_PRESSURE. As all rates and pressures (suction, discharge and interstage) are known, each side of the compression train can be solved independently. Thus, given this, the rotational speed needed to match the suction and interstage pressure can be found. This speed will be for the first section of the compression train. The same is done for the second part of the train, only here the rotational speed is found to match the interstage and discharge pressure, for the given rates. The highest speed between the first and second parts of the train is then taken as the rotational speed of the compression train. This speed will essentially be needed to meet the most demanding pressure interval. The section with the lower rotational speed must then be run with a form of pressure control (see UPSTREAM_PRESSURE_CONTROL/DOWNSTREAM_PRESSURE_CONTROL). In a given simulation, the section of the compression train that requires either upstream or downstream pressure control is not fixed. This means that for different time steps, the part of the train with the highest rotational speed is not set to either the first or second section. Thus, both pressure control methods must be specified but only one of them will be used for each time step. Technically, the INTERSTAGE_PRESSURE_CONTROL may be set independent of where the streams are defined. I.e. it may be defined at a stage where there is an in- or out-going stream defined, or at a stage where there is no defined stream. In reality, the INTERSTAGE_PRESSURE_CONTROL is linked to a stream, for example an outgoing stream for export where the export pressure is defined, and where the rest of the gas continues through the compressor train for example for injection at a higher pressure.","s":"INTERSTAGE_PRESSURE_CONTROL","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#interstage_pressure_control","p":968},{"i":977,"t":"The available pressure controls are DOWNSTREAM_CHOKE UPSTREAM_CHOKE INDIVIDUAL_ASV_PRESSURE INDIVIDUAL_ASV_RATE COMMON_ASV The sub-train where the pressure control is used, is now modeling wise equal to a single speed train as the speed is determined from the other sub-train. The inlet and outlet pressures for a sub-train, may be either the suction pressure and the interstage control pressure or interstage control pressure and the discharge pressure, depending on which sub part governs the speed of the full train. See FIXED PRESSURE CONTROL for more details.","s":"Fixed pressure control","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#fixed-pressure-control","p":968},{"i":979,"t":"MODELS: - NAME: compressor_model TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES STREAMS: - NAME: 1_stage_inlet TYPE: INGOING FLUID_MODEL: fluid_model_1 - NAME: 3_stage_inlet TYPE: INGOING FLUID_MODEL: fluid_model_2 - NAME: 2_stage_outlet TYPE: OUTGOING STAGES: - COMPRESSOR_CHART: 1_stage_chart INLET_TEMPERATURE: 20 STREAM: - 1_stage_inlet - COMPRESSOR_CHART: 2_stage_chart INLET_TEMPERATURE: 30 - COMPRESSOR_CHART: 3_stage_chart INLET_TEMPERATURE: 35 STREAM: - 2_stage_outlet - 3_stage_inlet INTERSTAGE_CONTROL_PRESSURE: UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage - COMPRESSOR_CHART: 4_stage_chart INLET_TEMPERATURE: 15","s":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#example","p":968},{"i":982,"t":"Compressors are typically controlled by changing the rotational speed of the compressor train shaft, which can either increase or decrease the work performed. In the case where this is not possible (single speed compressors), or this is not sufficient to control the compressor, other methods of control need to be used. In eCalc™, there are three main compressor control methods considered (aside from rotational speed control), these are: Upstream choking/throttling Downstream choking/throttling Anti-surge recycling Each of these methods are used depending on the situation and placement of the compressor's operating points. A summary of how these methods work in practice are seen below. In these figures, the red point represents a singular operating point, which is shifted with the given control mechanism. The operating point first starts below the compressor curve and is then adjusted toward the curve (by either changing head or rate). The different pressure control methods will change the operating points in the follow way: Upstream throttling will decrease the inlet pressure, and in turn increase the head and the inlet volumetric flow rate (lower pressure = lower density = lower flow rate). Downstream throttling will increase the head, as the outlet pressure is increased. There is no influence on the inlet rate in this case. However, when the operating points is on the compressor curve, and the head is further increased (by increasing the outlet pressure), the rate of the compressor will thus be reduced. ASV recycling will simply increase the throughout of the compressor without influencing the head. However, when the operating points is on the compressor curve, and the mass rate through is further increased, compressor head will in turn be reduced (along the curve). Upstream Choking Downstream Choking ASV Recycling","s":"Theory","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#theory","p":980},{"i":984,"t":"In eCalc™, upstream and downstream choking is modelled as described in the theory section. ASV recycling on the other hand is done in three separate ways. These three modelling methods are important for a compression train with more than one stage. This is due the fact that when each compressor stage has an individual ASV, the solution is under determined. For a single stage compressor, the results of these methods will be identical. This will further be elaborated upon in the recirculation options section. Some scenarios where additional pressure control is required can be when: The compressor train only operates at one speed (SINGLE_SPEED_COMPRESSOR_TRAIN), and the given rate and suction pressure gives a too high discharge pressure. The compressor train is a VARIABLE_SPEED_COMPRESSOR_TRAIN, but it already operates at the minimum speed, and still the discharge pressure is too high. The compressor train is a VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES required to meet an export pressure, before compressing gas further for injection. Here the rotational speed required to bring the gas from inlet pressure to export pressure may be higher than the speed required to bring the gas from export pressure to discharge pressure. Hence, the rotational speed giving the correct export pressure will give a too high discharge pressure.","s":"Control modelling in eCalc™","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#control-modelling-in-ecalc","p":980},{"i":986,"t":"In a situation where the rotational speed of the shaft can not be varied here are only two degrees of freedom. This means that if you give the suction pressure and the flow rate as input, the discharge pressure is decided by those two inputs. Similarly, if you give the rate and the discharge pressure as input, the suction pressure is decided by those two inputs. Hence, to calculate the energy usage for a given rate, suction pressure and discharge pressure, a method for fixed speed pressure control must be defined. This can be done by a choke valve upstream or downstream of the compressor train, or by recirculating fluid inside the compressor train. Currently, there are two options for choking the pressure in eCalc™: UPSTREAM_CHOKE​ The suction pressure is reduced such that the resulting suction pressure after choking together with the given speed results in the required discharge pressure. As the inlet pressure is reduced, the inlet flow rate will also increase. DOWNSTREAM_CHOKE​ The pressure is choked to the required discharge pressure after the compressor train. So the compressor's head will increase, as the compressor will compress the gas to a higher discharge pressure - which will subsequently be choked to the desired pressure.","s":"Pressure control methods - choking options","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#pressure-control-methods---choking-options","p":980},{"i":988,"t":"As previously mentioned, there are three different methods in eCalc™ for modelling ASV recycling. This is necessary as when there is more than one compressor stage, there will be individual ASVs per stage. Thus, the problem is under determined, and there are multiple possible solutions. Therefore, some modelling choices must be done. There are currently three options available in eCalc™: INDIVIDUAL_ASV_PRESSURE INDIVIDUAL_ASV_RATE COMMON_ASV Note With only one compressor stage or only one recirculation loop (common asv over the entire compressor train), a unique solution to how much volume to recirculate is available. For a single stage compressor, all recirculation options should give the same result. A further explanation of ASV recycling can be seen in the figure below. Here, it can be seen that the head of a compressor is reduced when the rate is increased. This means that recirculation can reduce the discharge pressure for a single speed compressor. Looking at the figure above, for an actual volume rate of 1882 am3/hr, the head is 93 kJ/kg (blue dashed line). If this head leads to a too large discharge pressure, it can be reduced by recirculation using the anti-surge valve. As the actual flow rate through the compressor increases, the head is also reduced, meaning that a higher actual flow rate leads to a lower discharge pressure. For example, by increasing the actual volume rate to 2322 am3/hr (by recirculating 440 am3/hr through the ASV), the head is reduced to about 81.3 kJ/kg (red dashed lines) , in turn leading to a lower discharge pressure. The head can be reduced further down to 42.5 kJ/kg at the maximum flow rate (3201 am3/hr) for the compressor (yellow dashed lines). The difference between the flow rate entering the compressor train and the maximum flow rate for the compressor gives the amount of additional volume that can be recirculated through the compressor - the available capacity. INDIVIDUAL_ASV_PRESSURE​ The pressure ratio (discharge pressure/suction pressure) over each compressor stage is constant. Essentially, with each time step there will be no change in the pressure ratio, but the volume flow will adjust to keep the pressure ratio constant. INDIVIDUAL_ASV_RATE​ The flow rate through each compressor stage is increased with the same fraction of the available capacity in that stage. For example, if you have a 2-stage compressor and the first stage has 500 Am3/h available capacity and the second has 400 Am3/h available capacity. If the first stage increases by 25 % of the available capacity (125 Am3/h), the second stage increase by 25 % too (100 Am3/h) - given that this matches the required output. COMMON_ASV​ The same volume is recirculated through the entire compressor train. Thus, each compression stage will have the same mass throughput.","s":"Pressure control methods - recirculation options","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#pressure-control-methods---recirculation-options","p":980},{"i":990,"t":"To calculate the energy usage related to compression of a natural gas, information about the composition is needed, i.e. which components it consist of and the (mole) fraction of each. Typical components for natural gas are alkanes such as methane, ethane, propane, butane, pentane, hexane in addition to water, nitrogen and carbone dioxide. Alkanes with seven or more carbon atoms may occur, but these are often just part of the liquid (oil) phase and not significant in dry gas compression. As the fluid is going through the compressor in a fluid dynamic process, the enthalpy changes, resulting in a new state with increased pressure and temperature, and decreased volume. To estimate these changes, an equation-of-state (EOS) model is used. The default EOS model in eCalc is SRK (Soave-Redlich-Kwong). The GERG models (GERG 2008) are used to calculate enthalpy, gamma and density, whilst other properties such as molar mass is based on either SRK or PR. Available EOS models SRK (Soave-Redlich-Kwong) PR (Peng-Robinson) GERG_SRK GERG_PR","s":"Fluid model","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"","p":989},{"i":992,"t":"Available predefined fluid compositions (with mole weights) are ULTRA_DRY (17.1 kg/kmol) DRY (18.3 kg/kmol) MEDIUM (19.4 kg/kmol) RICH (21.1 kg/kmol) ULTRA_RICH (24.6 kg/kmol)","s":"Fluid model using predefined composition","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#fluid-model-using-predefined-composition","p":989},{"i":994,"t":"MODELS: - NAME: TYPE: FLUID FLUID_MODEL_TYPE: PREDEFINED EOS_MODEL: GAS_TYPE: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#format","p":989},{"i":996,"t":"Examples with predefined fluid MODELS: - NAME: fluid_model_reference_name TYPE: FLUID FLUID_MODEL_TYPE: PREDEFINED EOS_MODEL: SRK GAS_TYPE: MEDIUM MODELS: - NAME: fluid_model_reference_name TYPE: FLUID FLUID_MODEL_TYPE: PREDEFINED EOS_MODEL: PR GAS_TYPE: ULTRA_DRY Example where EOS is defaulted to SRK and GAS_TYPE defaulted to MEDIUM MODELS: - NAME: fluid_model_reference_name TYPE: FLUID FLUID_MODEL_TYPE: PREDEFINED","s":"Examples","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#examples","p":989},{"i":998,"t":"The composition is specified by setting the mole fraction of each component. Setting the mole fraction for methane is required, all other components are optional and will be set to 0 if not specified. If methane is not part of your composition, simply put 0.0 for it. It is not important that the fractions sum to one as they will be normalized by eCalc. It is the relative amount of each that will be important.","s":"Fluid model with user-specified composition","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#fluid-model-with-user-specified-composition","p":989},{"i":1000,"t":"MODELS: - NAME: TYPE: FLUID FLUID_MODEL_TYPE: COMPOSITION EOS_MODEL: COMPOSITION: water: nitrogen: CO2: methane: ethane: propane: i_butane: n_butane: i_pentane: n_pentane: n_hexane: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#format-1","p":989},{"i":1002,"t":"MODELS: - NAME: TYPE: FLUID FLUID_MODEL_TYPE: COMPOSITION EOS_MODEL: srk COMPOSITION: water: 0.1 nitrogen: 0.74373 CO2: 2.415619 methane: 85.60145 ethane: 6.707826 propane: 2.611471 i_butane: 0.45077 n_butane: 0.691702 i_pentane: 0.210714 n_pentane: 0.197937 n_hexane: 0.368786","s":"Example","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#example","p":989},{"i":1004,"t":"The turbine model requires values for efficiencies vs corresponding loads. Currently also a lower heating value needs to be specified (planned feature is to get this from the fuel type used) The load values are given in MW, while efficiency values are numbers between 0 and 1. The fuel usage for a turbine is equal to FUEL_USAGE=LOAD_IN_MEGAWATT∗SECONDS_PER_DAYLOWER_HEATING_VALUE∗EFFICIENCYFUEL\\_USAGE = \\frac{LOAD\\_IN\\_MEGAWATT * SECONDS\\_PER\\_DAY}{LOWER\\_HEATING\\_VALUE * EFFICIENCY}FUEL_USAGE=LOWER_HEATING_VALUE∗EFFICIENCYLOAD_IN_MEGAWATT∗SECONDS_PER_DAY​ When evaluated for a load (in units MW), the efficiency is evaluated by linearly interpolating the input load vs efficiency data. The input values for load and efficiency are lists which both MUST START WITH 0! The user is thus responsible for the behaviour also for small load values. For load values equal to 0, the fuel usage is also set to 0. Lower heating value is given in units MJ/Sm3","s":"Turbine modelling","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"","p":1003},{"i":1006,"t":"MODELS: - NAME: TYPE: TURBINE LOWER_HEATING_VALUE: TURBINE_LOADS: TURBINE_EFFICIENCIES: POWER_ADJUSTMENT_CONSTANT: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#format","p":1003},{"i":1008,"t":"MODELS: - NAME: compressor_train_turbine TYPE: TURBINE LOWER_HEATING_VALUE: 38 # MJ/Sm3 TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362] POWER_ADJUSTMENT_CONSTANT: 10","s":"Example","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#example","p":1003},{"i":1010,"t":"To model a turbine driven compressor train, a compressor train model needs to be combined with a turbine model. The calculated shaft power required for the compressor train, will then be the input of the turbine model to calculate fuel usage.","s":"Combining a compressor train and a turbine into one model","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#combining-a-compressor-train-and-a-turbine-into-one-model","p":1003},{"i":1012,"t":"MODELS: - NAME: TYPE: COMPRESSOR_WITH_TURBINE COMPRESSOR_MODEL: TURBINE_MODEL: POWER_ADJUSTMENT_CONSTANT: ","s":"Format","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#format-1","p":1003},{"i":1014,"t":"MODELS: - NAME: simplified_compressor_train_model_with_turbine TYPE: COMPRESSOR_WITH_TURBINE COMPRESSOR_MODEL: simplified_compressor_train_model TURBINE_MODEL: compressor_train_turbine POWER_ADJUSTMENT_CONSTANT: 10 Turbine combined with presampled compressor model (COMPRESSOR_TABULAR) MODELS: - NAME: compressor_sampled_tabulated_model_with_turbine TYPE: COMPRESSOR_WITH_TURBINE COMPRESSOR_MODEL: compressor_sampled_tabulated_model TURBINE_MODEL: compressor_train_turbine POWER_ADJUSTMENT_CONSTANT: 10","s":"Examples","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#examples","p":1003},{"i":1016,"t":"note The TIME_SERIES keyword is mandatory within the eCalc™ YAML file. This part of the setup file defines the inputs for time dependent variables, or \"reservoir variables\". For many fields, this may be only one reservoir simulation model. But in some cases, one might have several sources for reservoir and other relevant time series variables. For example, a field may have a reservoir simulation model for some areas and decline curves in other area of the reservoir. There may also be tie-ins which are affecting the energy/emissions on the field installations. Also, there may be time profiles for other variables. Therefore, a set of sources may be specified with a name, path to data and type. The name is later referred to in the system of energy consumers defined under INSTALLATIONS. Reservoir variables and other time varying data not coming from a reservoir simulation model can be specified in a CSV file. The paths to the input files may be either absolute or relative to the setup file.","s":"Time series","u":"/ecalc/docs/about/modelling/setup/time_series","h":"","p":1015},{"i":1018,"t":"The supported time series types are: Type Supported file formats Interpolation type Comment DEFAULT .csv Not possible to specify: RIGHT is used New in v8.1 MISCELLANEOUS .csv Mandatory input: LEFT/RIGHT/LINEAR","s":"Supported types","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#supported-types","p":1015},{"i":1020,"t":"Each line under TIME_SERIES has the format: TIME_SERIES: - NAME:
  • list",{"_index":2137,"t":{"639":{"position":[[779,14],[909,14]]}}}],["1stat",{"_index":2131,"t":{"639":{"position":[[632,23]]}}}],["1_stage_chart",{"_index":2894,"t":{"979":{"position":[[303,13]]},"1167":{"position":[[168,13]]},"1172":{"position":[[308,13]]},"1180":{"position":[[168,13]]},"1399":{"position":[[135,13]]},"1415":{"position":[[134,13]]}}}],["1_stage_inlet",{"_index":2890,"t":{"979":{"position":[[119,13],[349,13]]},"1172":{"position":[[124,13],[354,13]]},"1399":{"position":[[181,13]]},"1415":{"position":[[180,13]]},"1423":{"position":[[119,13]]}}}],["1bde68a",{"_index":1509,"t":{"449":{"position":[[1079,9]]}}}],["1d",{"_index":2633,"t":{"794":{"position":[[442,2]]},"798":{"position":[[0,2]]}}}],["1da1999",{"_index":1605,"t":{"466":{"position":[[92,9]]}}}],["1e",{"_index":699,"t":{"145":{"position":[[675,2],[686,2]]}}}],["1e6",{"_index":695,"t":{"145":{"position":[[588,3],[609,4]]}}}],["1ee5bfd",{"_index":1636,"t":{"468":{"position":[[1150,9],[1353,9]]}}}],["1fe9dd0",{"_index":1091,"t":{"408":{"position":[[22,9]]}}}],["1st",{"_index":106,"t":{"44":{"position":[[402,3]]},"563":{"position":[[3191,3],[3212,3],[3698,3],[3719,3]]},"737":{"position":[[2706,3]]},"979":{"position":[[592,4]]},"1172":{"position":[[699,4]]},"1399":{"position":[[424,4]]},"1403":{"position":[[449,3],[753,3]]}}}],["1}{n",{"_index":3025,"t":{"1042":{"position":[[1721,6]]}}}],["1}κ−1κ∗polytropic_effici",{"_index":3035,"t":{"1042":{"position":[[2066,29]]}}}],["2",{"_index":440,"t":{"93":{"position":[[2133,2]]},"95":{"position":[[783,2]]},"102":{"position":[[942,1],[1057,1]]},"425":{"position":[[487,1]]},"476":{"position":[[1989,1],[2117,2]]},"563":{"position":[[2483,3]]},"565":{"position":[[3584,3]]},"627":{"position":[[363,2]]},"639":{"position":[[128,1],[591,1],[745,1],[861,2],[874,1]]},"696":{"position":[[502,1],[646,1]]},"710":{"position":[[2777,1],[2939,1]]},"712":{"position":[[2117,1],[2279,1]]},"800":{"position":[[215,1]]},"811":{"position":[[335,1],[405,1],[432,1],[456,1],[488,1],[496,1]]},"830":{"position":[[486,2],[551,2],[616,2],[662,2],[726,2],[784,2],[854,2],[894,2]]},"833":{"position":[[157,1]]},"851":{"position":[[503,1],[526,1]]},"855":{"position":[[351,2]]},"920":{"position":[[930,2]]},"971":{"position":[[472,2]]},"973":{"position":[[659,2]]},"975":{"position":[[84,2]]},"988":{"position":[[2374,1]]},"1032":{"position":[[54,1],[138,1]]},"1036":{"position":[[386,1],[448,1]]},"1066":{"position":[[1620,2]]},"1072":{"position":[[653,2]]},"1084":{"position":[[48,3]]},"1086":{"position":[[195,1],[364,1]]},"1170":{"position":[[244,2]]},"1304":{"position":[[228,3]]},"1309":{"position":[[503,1],[526,1]]},"1360":{"position":[[262,3],[311,3]]},"1395":{"position":[[456,2]]},"1421":{"position":[[239,2]]}}}],["2.15",{"_index":2700,"t":{"822":{"position":[[343,4]]}}}],["2.156",{"_index":2609,"t":{"792":{"position":[[306,5]]},"798":{"position":[[1127,5]]}}}],["2.19",{"_index":2415,"t":{"727":{"position":[[120,4],[228,4]]},"739":{"position":[[581,4]]}}}],["2.20",{"_index":1807,"t":{"551":{"position":[[273,4]]},"565":{"position":[[420,4]]}}}],["2.293",{"_index":2588,"t":{"792":{"position":[[90,5]]},"798":{"position":[[884,5]]}}}],["2.352",{"_index":1822,"t":{"553":{"position":[[923,6]]},"565":{"position":[[1212,6]]},"957":{"position":[[660,6]]},"1008":{"position":[[107,6]]},"1252":{"position":[[107,6]]},"1456":{"position":[[107,6]]},"1463":{"position":[[107,6]]},"1470":{"position":[[107,6]]}}}],["2.38,37766.13",{"_index":2368,"t":{"715":{"position":[[43,13]]}}}],["2.415619",{"_index":2851,"t":{"955":{"position":[[562,8]]},"1002":{"position":[[157,8]]}}}],["2.416",{"_index":2342,"t":{"706":{"position":[[33,6],[119,5]]},"712":{"position":[[1131,5]]}}}],["2.44965511776504",{"_index":2322,"t":{"704":{"position":[[1133,16]]},"712":{"position":[[415,16]]}}}],["2.5",{"_index":78,"t":{"32":{"position":[[142,3]]},"180":{"position":[[20,3],[139,3]]}}}],["2.5.9",{"_index":1034,"t":{"383":{"position":[[225,5]]},"621":{"position":[[26,6]]}}}],["2.611471",{"_index":2854,"t":{"955":{"position":[[615,8]]},"1002":{"position":[[210,8]]}}}],["2.7085",{"_index":2705,"t":{"822":{"position":[[558,6]]}}}],["2.73",{"_index":2703,"t":{"822":{"position":[[462,4]]}}}],["20",{"_index":148,"t":{"48":{"position":[[71,2]]},"275":{"position":[[84,2]]},"563":{"position":[[1381,2],[1455,2],[4520,2]]},"565":{"position":[[3012,2],[3086,2],[4824,2]]},"567":{"position":[[379,3],[453,3]]},"661":{"position":[[508,2]]},"790":{"position":[[55,2]]},"979":{"position":[[336,2]]},"1167":{"position":[[147,2]]},"1172":{"position":[[341,2]]},"1180":{"position":[[147,2]]},"1399":{"position":[[168,2]]},"1407":{"position":[[72,2]]},"1415":{"position":[[167,2]]}}}],["20.0",{"_index":2464,"t":{"741":{"position":[[434,5]]}}}],["20.496",{"_index":1830,"t":{"553":{"position":[[983,7]]},"565":{"position":[[1272,7]]},"957":{"position":[[720,7]]},"1008":{"position":[[167,7]]},"1252":{"position":[[167,7]]},"1456":{"position":[[167,7]]},"1463":{"position":[[167,7]]},"1470":{"position":[[167,7]]}}}],["200",{"_index":1788,"t":{"543":{"position":[[944,3]]},"563":{"position":[[2451,5],[2457,4],[2462,4],[2467,4],[2571,3],[2655,3],[2742,3],[3136,3],[4543,3]]},"565":{"position":[[3552,5],[3558,4],[3563,4],[3568,4],[3672,3],[3756,3],[3843,3],[4035,3],[4847,3]]},"710":{"position":[[1347,3],[1660,3],[1735,3]]},"712":{"position":[[1654,3],[1729,3]]},"719":{"position":[[763,3]]},"737":{"position":[[785,3],[1598,3],[3615,3]]},"739":{"position":[[1855,3],[2203,3],[2792,3]]},"884":{"position":[[138,3]]},"892":{"position":[[292,3],[365,3]]},"1216":{"position":[[20,3]]},"1309":{"position":[[1021,3],[1094,3]]},"1362":{"position":[[290,3],[363,3]]}}}],["2000",{"_index":145,"t":{"48":{"position":[[34,4]]},"203":{"position":[[162,4]]},"555":{"position":[[717,4]]},"565":{"position":[[2203,4]]},"567":{"position":[[711,5]]},"1407":{"position":[[34,4]]}}}],["20000",{"_index":1951,"t":{"567":{"position":[[820,6],[869,6],[918,6],[1212,6],[1261,6],[1310,6],[1359,6],[1571,6],[1651,6]]}}}],["200000",{"_index":2000,"t":{"567":{"position":[[1752,7],[1799,7]]}}}],["2000000",{"_index":1985,"t":{"567":{"position":[[1431,7],[1480,7],[1529,7]]},"741":{"position":[[1526,8]]},"798":{"position":[[120,8]]}}}],["200000000,4.1",{"_index":2443,"t":{"741":{"position":[[74,13]]}}}],["2001",{"_index":826,"t":{"242":{"position":[[80,4]]},"837":{"position":[[164,4]]},"1245":{"position":[[18,4]]}}}],["2005",{"_index":828,"t":{"242":{"position":[[106,4]]},"729":{"position":[[968,4]]},"737":{"position":[[2721,5]]},"739":{"position":[[1279,4]]},"837":{"position":[[190,4]]},"1245":{"position":[[74,4]]}}}],["2008",{"_index":2947,"t":{"990":{"position":[[828,5]]}}}],["2010",{"_index":2983,"t":{"1032":{"position":[[105,4]]}}}],["2019",{"_index":3172,"t":{"1342":{"position":[[58,4]]}}}],["202",{"_index":1373,"t":{"436":{"position":[[711,6]]}}}],["2020",{"_index":150,"t":{"48":{"position":[[121,4]]},"93":{"position":[[2031,4]]},"555":{"position":[[674,4],[749,4]]},"563":{"position":[[3203,4],[3710,4]]},"565":{"position":[[2160,4],[2235,4]]},"575":{"position":[[274,4]]},"741":{"position":[[839,4]]},"871":{"position":[[380,4],[457,4]]},"1032":{"position":[[140,4]]},"1120":{"position":[[111,4]]},"1403":{"position":[[263,4],[293,4],[453,5],[697,4],[757,5]]},"1407":{"position":[[124,4]]}}}],["2021",{"_index":2489,"t":{"741":{"position":[[905,4]]}}}],["2022",{"_index":2011,"t":{"575":{"position":[[412,4]]},"741":{"position":[[971,4]]}}}],["2023",{"_index":2496,"t":{"741":{"position":[[1037,4]]}}}],["2024",{"_index":2500,"t":{"741":{"position":[[1103,4],[1169,4]]}}}],["2026",{"_index":2508,"t":{"741":{"position":[[1235,4]]}}}],["2027",{"_index":2511,"t":{"741":{"position":[[1301,4]]}}}],["2028",{"_index":2514,"t":{"741":{"position":[[1367,4]]}}}],["2029",{"_index":2516,"t":{"741":{"position":[[1433,4]]}}}],["203",{"_index":1187,"t":{"423":{"position":[[102,6]]}}}],["2030",{"_index":439,"t":{"93":{"position":[[2061,4]]},"555":{"position":[[698,4],[774,4],[1224,5]]},"563":{"position":[[3227,5],[3734,5]]},"565":{"position":[[2184,4],[2260,4]]},"741":{"position":[[1499,4]]},"871":{"position":[[410,4],[484,4]]}}}],["2031",{"_index":2519,"t":{"741":{"position":[[1565,4]]}}}],["204",{"_index":1261,"t":{"427":{"position":[[155,6]]}}}],["2040",{"_index":146,"t":{"48":{"position":[[47,5]]},"1407":{"position":[[47,5]]}}}],["205",{"_index":1245,"t":{"425":{"position":[[1163,6]]}}}],["2050",{"_index":1946,"t":{"567":{"position":[[690,5]]}}}],["2079",{"_index":95,"t":{"44":{"position":[[250,4],[411,5],[680,4]]}}}],["2080",{"_index":91,"t":{"44":{"position":[[202,4],[406,4]]}}}],["209",{"_index":1204,"t":{"425":{"position":[[306,6]]}}}],["21.1",{"_index":2955,"t":{"992":{"position":[[135,5]]}}}],["21.42,141791.2",{"_index":2379,"t":{"715":{"position":[[198,14]]}}}],["21.4201,166554.2",{"_index":2380,"t":{"715":{"position":[[213,16]]}}}],["2100",{"_index":1944,"t":{"567":{"position":[[669,5]]}}}],["21000",{"_index":1959,"t":{"567":{"position":[[967,6],[1326,6],[1522,6]]}}}],["210000",{"_index":2495,"t":{"741":{"position":[[1030,6]]}}}],["210000000,4.1",{"_index":2444,"t":{"741":{"position":[[88,13]]}}}],["211",{"_index":1237,"t":{"425":{"position":[[987,6]]}}}],["212",{"_index":1239,"t":{"425":{"position":[[1024,6]]}}}],["213",{"_index":1173,"t":{"421":{"position":[[173,6]]}}}],["214",{"_index":1169,"t":{"421":{"position":[[133,6]]}}}],["215",{"_index":1228,"t":{"425":{"position":[[784,6]]}}}],["2150",{"_index":1942,"t":{"567":{"position":[[648,5]]}}}],["216",{"_index":1179,"t":{"421":{"position":[[295,6]]}}}],["219",{"_index":1198,"t":{"425":{"position":[[180,6]]}}}],["21deeb7",{"_index":1205,"t":{"425":{"position":[[313,9]]}}}],["22.46",{"_index":2602,"t":{"792":{"position":[[235,5],[425,5],[569,5]]},"798":{"position":[[1047,5],[1261,5],[1423,5]]}}}],["22.767",{"_index":1831,"t":{"553":{"position":[[991,7]]},"565":{"position":[[1280,7]]},"957":{"position":[[728,7]]},"1008":{"position":[[175,7]]},"1252":{"position":[[175,7]]},"1456":{"position":[[175,7]]},"1463":{"position":[[175,7]]},"1470":{"position":[[175,7]]}}}],["220",{"_index":1207,"t":{"425":{"position":[[374,6]]}}}],["2200",{"_index":1939,"t":{"567":{"position":[[627,5]]}}}],["22000",{"_index":1961,"t":{"567":{"position":[[1016,6],[1277,6],[1375,6],[1604,6]]}}}],["220000.0",{"_index":2537,"t":{"757":{"position":[[115,8]]}}}],["2200000",{"_index":2487,"t":{"741":{"position":[[889,8],[955,8],[1021,8]]}}}],["220000000,4.4",{"_index":2445,"t":{"741":{"position":[[102,13]]}}}],["221",{"_index":1216,"t":{"425":{"position":[[494,6]]}}}],["22100",{"_index":1984,"t":{"567":{"position":[[1408,6],[1457,6]]}}}],["222",{"_index":1224,"t":{"425":{"position":[[614,6]]}}}],["223",{"_index":1213,"t":{"425":{"position":[[437,6]]}}}],["224",{"_index":1258,"t":{"427":{"position":[[85,6]]}}}],["2250",{"_index":1936,"t":{"567":{"position":[[606,5]]}}}],["2279ef4",{"_index":1307,"t":{"432":{"position":[[531,9]]}}}],["229",{"_index":1231,"t":{"425":{"position":[[846,6]]}}}],["22ef8f7",{"_index":1110,"t":{"412":{"position":[[24,9]]}}}],["230",{"_index":1234,"t":{"425":{"position":[[928,6]]}}}],["2300",{"_index":1933,"t":{"567":{"position":[[585,5]]}}}],["23000",{"_index":1966,"t":{"567":{"position":[[1065,6],[1228,6],[1424,6],[1473,6]]}}}],["2300000",{"_index":2498,"t":{"741":{"position":[[1087,8],[1153,8]]}}}],["230000000,4.8",{"_index":2446,"t":{"741":{"position":[[116,13]]}}}],["231.6",{"_index":2601,"t":{"792":{"position":[[229,5],[419,5],[563,5]]},"798":{"position":[[1040,6],[1254,6],[1416,6]]}}}],["232",{"_index":1255,"t":{"427":{"position":[[37,6]]}}}],["2322",{"_index":2922,"t":{"988":{"position":[[1411,4]]}}}],["232f83b",{"_index":1158,"t":{"419":{"position":[[86,9]]}}}],["233",{"_index":1226,"t":{"425":{"position":[[717,6]]}}}],["2350",{"_index":1932,"t":{"567":{"position":[[564,5]]}}}],["236",{"_index":1162,"t":{"419":{"position":[[175,6]]}}}],["237",{"_index":1181,"t":{"421":{"position":[[362,6]]}}}],["238",{"_index":1167,"t":{"421":{"position":[[83,6]]}}}],["239",{"_index":1184,"t":{"423":{"position":[[42,6]]}}}],["23:59:59",{"_index":109,"t":{"44":{"position":[[423,10]]}}}],["24",{"_index":1633,"t":{"468":{"position":[[945,5]]}}}],["24.6",{"_index":2957,"t":{"992":{"position":[[161,5]]}}}],["24000",{"_index":1971,"t":{"567":{"position":[[1114,6],[1179,6]]}}}],["240000",{"_index":2499,"t":{"741":{"position":[[1096,6]]}}}],["2400000",{"_index":2506,"t":{"741":{"position":[[1219,8],[1285,8],[1351,8],[1417,8],[1483,8],[1549,8],[1615,8]]}}}],["240000000,5.1",{"_index":2447,"t":{"741":{"position":[[130,13]]}}}],["2415534",{"_index":1435,"t":{"445":{"position":[[390,9]]}}}],["242",{"_index":1159,"t":{"419":{"position":[[123,6]]}}}],["243",{"_index":1176,"t":{"421":{"position":[[235,6]]}}}],["244",{"_index":1270,"t":{"427":{"position":[[431,6]]}}}],["245",{"_index":1273,"t":{"427":{"position":[[525,6]]}}}],["2455e34",{"_index":1360,"t":{"436":{"position":[[497,9]]}}}],["246",{"_index":1268,"t":{"427":{"position":[[367,6]]}}}],["247",{"_index":1243,"t":{"425":{"position":[[1097,6]]}}}],["248dabb",{"_index":1528,"t":{"451":{"position":[[19,9]]}}}],["24c27bb",{"_index":1305,"t":{"432":{"position":[[479,9]]}}}],["25",{"_index":2930,"t":{"988":{"position":[[2527,2],[2600,2]]}}}],["250",{"_index":1275,"t":{"427":{"position":[[574,6]]},"567":{"position":[[559,4]]},"1342":{"position":[[461,3],[544,3],[632,3],[723,3],[812,3]]}}}],["2500",{"_index":1958,"t":{"567":{"position":[[961,5]]}}}],["25000",{"_index":1973,"t":{"567":{"position":[[1130,6],[1163,6],[1506,6],[1555,6]]},"816":{"position":[[166,5],[382,5]]}}}],["250000",{"_index":2467,"t":{"741":{"position":[[453,6]]}}}],["2500000",{"_index":2517,"t":{"741":{"position":[[1460,8]]}}}],["250000000,5.4",{"_index":2448,"t":{"741":{"position":[[144,13]]}}}],["2507bb9",{"_index":1410,"t":{"438":{"position":[[842,9]]}}}],["250928c",{"_index":1575,"t":{"458":{"position":[[115,9]]}}}],["251",{"_index":1121,"t":{"414":{"position":[[386,6]]}}}],["252",{"_index":1125,"t":{"414":{"position":[[474,6]]}}}],["253",{"_index":1264,"t":{"427":{"position":[[205,6]]}}}],["254",{"_index":1165,"t":{"421":{"position":[[33,6]]}}}],["255",{"_index":1250,"t":{"425":{"position":[[1251,6]]}}}],["256",{"_index":1266,"t":{"427":{"position":[[313,6]]}}}],["257",{"_index":1149,"t":{"416":{"position":[[524,6]]}}}],["258",{"_index":1247,"t":{"425":{"position":[[1217,6]]}}}],["259",{"_index":1241,"t":{"425":{"position":[[1061,6]]}}}],["26",{"_index":2589,"t":{"792":{"position":[[105,2],[130,2],[250,2],[274,2]]},"798":{"position":[[900,3],[928,3],[1063,3],[1090,3]]}}}],["26.21",{"_index":2587,"t":{"792":{"position":[[84,5]]},"798":{"position":[[877,6]]}}}],["260",{"_index":1131,"t":{"416":{"position":[[55,6]]}}}],["26000",{"_index":1968,"t":{"567":{"position":[[1081,6]]}}}],["2600000",{"_index":2582,"t":{"790":{"position":[[36,7]]}}}],["260000000,5.8",{"_index":2449,"t":{"741":{"position":[[158,13]]}}}],["261",{"_index":1107,"t":{"410":{"position":[[240,6]]}}}],["261749f",{"_index":973,"t":{"368":{"position":[[48,9]]}}}],["263",{"_index":1105,"t":{"410":{"position":[[165,6]]}}}],["264",{"_index":1109,"t":{"412":{"position":[[17,6]]}}}],["267",{"_index":1151,"t":{"416":{"position":[[578,6]]}}}],["269",{"_index":1101,"t":{"410":{"position":[[95,6]]}}}],["27",{"_index":1635,"t":{"468":{"position":[[1144,5]]}}}],["270000000,6.1",{"_index":2450,"t":{"741":{"position":[[172,13]]}}}],["271",{"_index":1143,"t":{"416":{"position":[[349,6]]}}}],["272",{"_index":1098,"t":{"408":{"position":[[150,6]]}}}],["272f0d7",{"_index":1593,"t":{"464":{"position":[[93,9]]}}}],["276",{"_index":1119,"t":{"414":{"position":[[305,6]]}}}],["277",{"_index":1116,"t":{"414":{"position":[[150,6]]}}}],["279",{"_index":1093,"t":{"408":{"position":[[75,6]]}}}],["28.56,205563.6",{"_index":2381,"t":{"715":{"position":[[230,14]]}}}],["28000",{"_index":1963,"t":{"567":{"position":[[1032,6]]}}}],["280000",{"_index":2504,"t":{"741":{"position":[[1162,6]]}}}],["280000.0",{"_index":2539,"t":{"757":{"position":[[131,8]]}}}],["280000000,6.4",{"_index":2451,"t":{"741":{"position":[[186,13]]}}}],["282",{"_index":1085,"t":{"406":{"position":[[26,6]]},"416":{"position":[[392,6]]}}}],["284",{"_index":1133,"t":{"416":{"position":[[103,6]]}}}],["285",{"_index":1023,"t":{"383":{"position":[[42,6]]}}}],["288",{"_index":1127,"t":{"414":{"position":[[591,6]]}}}],["28885f2",{"_index":1036,"t":{"383":{"position":[[238,9]]}}}],["289",{"_index":1129,"t":{"414":{"position":[[649,6]]}}}],["2895ae7",{"_index":1587,"t":{"460":{"position":[[145,9]]}}}],["2900",{"_index":862,"t":{"267":{"position":[[192,6]]},"918":{"position":[[187,6]]},"924":{"position":[[192,6]]},"955":{"position":[[192,6]]},"959":{"position":[[290,6]]},"1193":{"position":[[136,6]]},"1200":{"position":[[141,6]]},"1234":{"position":[[192,6]]}}}],["290000000,6.8",{"_index":2452,"t":{"741":{"position":[[200,13]]}}}],["293",{"_index":1072,"t":{"396":{"position":[[9,6]]}}}],["294",{"_index":1082,"t":{"400":{"position":[[29,6]]}}}],["296",{"_index":1058,"t":{"392":{"position":[[78,6]]}}}],["2981f2c",{"_index":1177,"t":{"421":{"position":[[242,9]]}}}],["2
  • list",{"_index":2138,"t":{"639":{"position":[[799,14],[929,14]]}}}],["2stat",{"_index":2132,"t":{"639":{"position":[[656,23]]}}}],["2_stage_chart",{"_index":2895,"t":{"979":{"position":[[383,13]]},"1172":{"position":[[439,13]]},"1399":{"position":[[215,13]]}}}],["2_stage_outlet",{"_index":2893,"t":{"979":{"position":[[245,14],[485,14]]},"1172":{"position":[[250,14],[592,14]]},"1399":{"position":[[317,14]]},"1423":{"position":[[245,14]]}}}],["2a1e8b0",{"_index":1495,"t":{"449":{"position":[[616,9]]}}}],["2bef707",{"_index":1477,"t":{"447":{"position":[[440,9]]}}}],["2cb09e2",{"_index":1024,"t":{"383":{"position":[[49,9],[408,9]]},"387":{"position":[[31,9]]}}}],["2d",{"_index":1437,"t":{"445":{"position":[[430,2]]}}}],["2df3bdf",{"_index":1469,"t":{"447":{"position":[[216,9]]}}}],["2ea517",{"_index":1563,"t":{"455":{"position":[[215,9]]}}}],["2f95c29",{"_index":1374,"t":{"436":{"position":[[718,9]]}}}],["2nd",{"_index":2898,"t":{"979":{"position":[[601,3]]},"1172":{"position":[[708,3]]},"1399":{"position":[[433,3]]}}}],["3",{"_index":475,"t":{"93":{"position":[[3290,2]]},"95":{"position":[[1648,2]]},"178":{"position":[[38,2]]},"425":{"position":[[546,1]]},"563":{"position":[[2417,3],[2421,2],[2424,2],[2427,2],[2549,1],[2633,1],[2720,1],[3114,1]]},"565":{"position":[[3518,3],[3522,2],[3525,2],[3528,2],[3650,1],[3734,1],[3821,1],[4013,1]]},"639":{"position":[[162,1],[603,1],[759,1],[876,2],[889,1]]},"645":{"position":[[24,1]]},"798":{"position":[[1601,1],[1859,1]]},"822":{"position":[[39,1],[80,1]]},"884":{"position":[[116,1]]},"892":{"position":[[270,1],[343,1]]},"1186":{"position":[[369,3],[373,2]]},"1309":{"position":[[628,3],[632,2],[999,1],[1072,1]]},"1362":{"position":[[268,1],[341,1]]}}}],["3,3,0",{"_index":3157,"t":{"1306":{"position":[[124,7]]}}}],["3.0.11",{"_index":1211,"t":{"425":{"position":[[421,6]]}}}],["3.3.2",{"_index":1212,"t":{"425":{"position":[[431,5]]}}}],["3.452",{"_index":2629,"t":{"792":{"position":[[545,5]]},"798":{"position":[[1396,5]]}}}],["3.5",{"_index":2317,"t":{"704":{"position":[[821,3],[986,4],[1679,3]]},"712":{"position":[[961,3]]},"961":{"position":[[360,3]]},"1270":{"position":[[181,3]]}}}],["3.678",{"_index":2625,"t":{"792":{"position":[[497,5]]},"798":{"position":[[1342,5]]}}}],["30",{"_index":1845,"t":{"553":{"position":[[1264,2],[1349,2],[1434,2]]},"565":{"position":[[1553,2],[1638,2],[1723,2]]},"932":{"position":[[271,2]]},"955":{"position":[[879,2]]},"957":{"position":[[497,2]]},"959":{"position":[[794,2],[872,2]]},"961":{"position":[[437,2]]},"979":{"position":[[416,2]]},"1172":{"position":[[472,2]]},"1270":{"position":[[244,2]]},"1399":{"position":[[248,2]]}}}],["300",{"_index":1075,"t":{"398":{"position":[[42,6]]},"567":{"position":[[580,4]]}}}],["3000",{"_index":1904,"t":{"567":{"position":[[80,5],[1010,5]]}}}],["30000",{"_index":1953,"t":{"567":{"position":[[836,6],[885,6],[934,6],[983,6]]},"741":{"position":[[1014,6]]}}}],["300000.0",{"_index":2541,"t":{"757":{"position":[[146,8]]}}}],["3000000",{"_index":1982,"t":{"567":{"position":[[1366,8],[1415,8],[1464,8]]},"741":{"position":[[1592,8]]},"798":{"position":[[136,8]]}}}],["3000000,50000",{"_index":2458,"t":{"741":{"position":[[324,13]]}}}],["300000000,7.1",{"_index":2453,"t":{"741":{"position":[[214,13]]}}}],["302",{"_index":1035,"t":{"383":{"position":[[231,6]]}}}],["303",{"_index":1077,"t":{"398":{"position":[[102,6]]},"403":{"position":[[72,6]]},"406":{"position":[[208,6]]}}}],["304",{"_index":1065,"t":{"392":{"position":[[180,6]]}}}],["305",{"_index":988,"t":{"375":{"position":[[45,6]]},"379":{"position":[[150,6]]}}}],["30553e0",{"_index":1332,"t":{"434":{"position":[[75,9]]}}}],["307",{"_index":1030,"t":{"383":{"position":[[169,6]]}}}],["31",{"_index":108,"t":{"44":{"position":[[420,2]]}}}],["31.36",{"_index":2590,"t":{"792":{"position":[[108,5]]},"798":{"position":[[904,6]]}}}],["310",{"_index":1069,"t":{"394":{"position":[[65,6]]}}}],["310000",{"_index":2507,"t":{"741":{"position":[[1228,6]]}}}],["311",{"_index":1063,"t":{"392":{"position":[[136,6]]}}}],["312",{"_index":989,"t":{"377":{"position":[[42,6]]}}}],["315",{"_index":1040,"t":{"383":{"position":[[305,6]]}}}],["318",{"_index":1047,"t":{"385":{"position":[[35,6]]}}}],["319",{"_index":1004,"t":{"379":{"position":[[263,6]]}}}],["320",{"_index":1055,"t":{"389":{"position":[[26,6]]}}}],["3201",{"_index":2926,"t":{"988":{"position":[[1654,5]]}}}],["321",{"_index":1000,"t":{"379":{"position":[[195,6]]}}}],["322",{"_index":1008,"t":{"381":{"position":[[31,6]]}}}],["323",{"_index":1011,"t":{"381":{"position":[[106,6]]}}}],["324",{"_index":992,"t":{"379":{"position":[[39,6]]}}}],["3250,250,2640,59",{"_index":2471,"t":{"741":{"position":[[516,16]]}}}],["3250,360,2490,68",{"_index":2472,"t":{"741":{"position":[[533,16]]}}}],["3250,500,2342,77",{"_index":2473,"t":{"741":{"position":[[550,16]]}}}],["3250,600,2210,80",{"_index":2474,"t":{"741":{"position":[[567,16]]}}}],["3250,667,2068,78",{"_index":2475,"t":{"741":{"position":[[584,16]]}}}],["3250,735,1870,74",{"_index":2476,"t":{"741":{"position":[[601,16]]}}}],["326",{"_index":1038,"t":{"383":{"position":[[268,6]]}}}],["327",{"_index":1044,"t":{"383":{"position":[[375,6]]}}}],["328",{"_index":1050,"t":{"385":{"position":[[92,6]]}}}],["32885b5",{"_index":1272,"t":{"427":{"position":[[481,9]]}}}],["329c8e9",{"_index":1506,"t":{"449":{"position":[[946,9]]}}}],["32f0289",{"_index":1005,"t":{"379":{"position":[[270,9]]}}}],["33.32,231569.8",{"_index":2382,"t":{"715":{"position":[[245,14]]}}}],["33000",{"_index":2492,"t":{"741":{"position":[[948,6],[1080,6],[1410,6],[1608,6]]}}}],["330000.0",{"_index":2543,"t":{"757":{"position":[[161,8]]}}}],["331",{"_index":1026,"t":{"383":{"position":[[99,6]]}}}],["332",{"_index":997,"t":{"379":{"position":[[88,6]]}}}],["333",{"_index":1042,"t":{"383":{"position":[[342,6]]}}}],["334",{"_index":1013,"t":{"381":{"position":[[152,6]]}}}],["335",{"_index":977,"t":{"368":{"position":[[151,6]]}}}],["338",{"_index":972,"t":{"368":{"position":[[41,6]]}}}],["339",{"_index":975,"t":{"368":{"position":[[101,6]]}}}],["34",{"_index":2594,"t":{"792":{"position":[[153,2],[177,2]]},"798":{"position":[[954,3],[981,3]]}}}],["34000",{"_index":2486,"t":{"741":{"position":[[882,6]]}}}],["343",{"_index":981,"t":{"370":{"position":[[13,6]]}}}],["34cebc4",{"_index":1066,"t":{"392":{"position":[[187,9]]}}}],["35",{"_index":2897,"t":{"979":{"position":[[472,2]]},"1172":{"position":[[579,2]]},"1399":{"position":[[304,2]]}}}],["350",{"_index":1935,"t":{"567":{"position":[[601,4]]}}}],["3500",{"_index":1906,"t":{"567":{"position":[[103,5],[1059,5]]}}}],["35000",{"_index":2503,"t":{"741":{"position":[[1146,6],[1542,6]]}}}],["350000",{"_index":2510,"t":{"741":{"position":[[1294,6]]}}}],["350000.0",{"_index":2545,"t":{"757":{"position":[[176,8]]}}}],["3500000",{"_index":2485,"t":{"741":{"position":[[866,8],[1394,8]]}}}],["3500000,130000",{"_index":2459,"t":{"741":{"position":[[338,14]]}}}],["3503",{"_index":863,"t":{"267":{"position":[[199,5]]},"918":{"position":[[194,5]]},"924":{"position":[[199,5]]},"955":{"position":[[199,5]]},"959":{"position":[[297,5]]},"1193":{"position":[[143,5]]},"1200":{"position":[[148,5]]},"1234":{"position":[[199,5]]}}}],["35a3640",{"_index":1520,"t":{"449":{"position":[[1248,9]]}}}],["35c4f68",{"_index":1180,"t":{"421":{"position":[[302,9]]}}}],["36.93",{"_index":2604,"t":{"792":{"position":[[253,5]]},"798":{"position":[[1067,6]]}}}],["36000",{"_index":2505,"t":{"741":{"position":[[1212,6],[1278,6],[1476,6]]}}}],["36000,13",{"_index":2482,"t":{"741":{"position":[[700,8]]}}}],["3600000",{"_index":2490,"t":{"741":{"position":[[932,8]]}}}],["3634a9e",{"_index":1168,"t":{"421":{"position":[[90,9]]}}}],["3700000",{"_index":2494,"t":{"741":{"position":[[998,8]]}}}],["3708",{"_index":2788,"t":{"924":{"position":[[309,6]]},"1200":{"position":[[258,6]]}}}],["38",{"_index":1631,"t":{"468":{"position":[[647,5]]},"553":{"position":[[890,2]]},"565":{"position":[[1181,2]]},"792":{"position":[[297,2],[321,2]]},"798":{"position":[[1116,3],[1143,3]]},"957":{"position":[[629,2]]},"1008":{"position":[[76,2]]},"1252":{"position":[[76,2]]},"1456":{"position":[[76,2]]},"1463":{"position":[[76,2]]},"1470":{"position":[[76,2]]}}}],["38.08,257576.1",{"_index":2383,"t":{"715":{"position":[[260,14]]}}}],["38000",{"_index":2512,"t":{"741":{"position":[[1344,6]]}}}],["3800000",{"_index":2497,"t":{"741":{"position":[[1064,8]]}}}],["38870a3",{"_index":1460,"t":{"447":{"position":[[31,9]]}}}],["389db6f",{"_index":1638,"t":{"468":{"position":[[1180,9]]}}}],["39",{"_index":1574,"t":{"458":{"position":[[109,5]]}}}],["390000",{"_index":2513,"t":{"741":{"position":[[1360,6]]}}}],["3900000",{"_index":2501,"t":{"741":{"position":[[1130,8]]}}}],["39c5c36",{"_index":1524,"t":{"449":{"position":[[1347,9]]}}}],["39df792",{"_index":1488,"t":{"449":{"position":[[206,9]]}}}],["3
  • .yml",{"_index":373,"t":{"81":{"position":[[313,6]]}}}],["8b97673",{"_index":1185,"t":{"423":{"position":[[49,9]]}}}],["8be87dd",{"_index":1383,"t":{"438":{"position":[[49,9]]}}}],["8c2c786",{"_index":1059,"t":{"392":{"position":[[85,9]]}}}],["8cf9e1b",{"_index":1156,"t":{"419":{"position":[[30,9]]}}}],["8d03822",{"_index":1078,"t":{"398":{"position":[[109,9]]}}}],["8e76c8a",{"_index":1624,"t":{"468":{"position":[[479,9]]}}}],["8f0d716",{"_index":1475,"t":{"447":{"position":[[379,9]]}}}],["9",{"_index":482,"t":{"93":{"position":[[3448,3],[3581,2]]},"696":{"position":[[358,1]]},"710":{"position":[[2855,1]]},"712":{"position":[[2195,1]]}}}],["9.125",{"_index":1825,"t":{"553":{"position":[[944,6]]},"565":{"position":[[1233,6]]},"957":{"position":[[681,6]]},"1008":{"position":[[128,6]]},"1252":{"position":[[128,6]]},"1456":{"position":[[128,6]]},"1463":{"position":[[128,6]]},"1470":{"position":[[128,6]]}}}],["9.52,76775.52",{"_index":2372,"t":{"715":{"position":[[98,13]]}}}],["9.557",{"_index":2611,"t":{"792":{"position":[[330,5]]},"798":{"position":[[1154,5]]}}}],["9.712",{"_index":2621,"t":{"792":{"position":[[449,5]]},"798":{"position":[[1288,5]]}}}],["90",{"_index":1434,"t":{"445":{"position":[[384,5]]}}}],["900",{"_index":1994,"t":{"567":{"position":[[1646,4]]}}}],["9000",{"_index":1980,"t":{"567":{"position":[[1304,5]]},"741":{"position":[[860,5]]}}}],["9000,4",{"_index":2479,"t":{"741":{"position":[[677,6]]}}}],["91",{"_index":1487,"t":{"449":{"position":[[200,5]]}}}],["924526a",{"_index":1387,"t":{"438":{"position":[[148,9]]}}}],["92cb4fa",{"_index":1571,"t":{"458":{"position":[[56,9]]}}}],["93",{"_index":2919,"t":{"988":{"position":[[1052,2]]}}}],["9329ae2",{"_index":1083,"t":{"400":{"position":[[36,9]]}}}],["936b941",{"_index":1601,"t":{"464":{"position":[[291,9]]}}}],["93de4f4",{"_index":1597,"t":{"464":{"position":[[199,9]]}}}],["94",{"_index":1499,"t":{"449":{"position":[[703,5]]}}}],["94.12",{"_index":2599,"t":{"792":{"position":[[204,5]]},"798":{"position":[[1012,6]]}}}],["94.17",{"_index":2617,"t":{"792":{"position":[[395,5]]},"798":{"position":[[1227,6]]}}}],["94.24",{"_index":2597,"t":{"792":{"position":[[180,5]]},"798":{"position":[[985,6]]}}}],["9428979",{"_index":1389,"t":{"438":{"position":[[195,9]]}}}],["9482421",{"_index":1577,"t":{"458":{"position":[[166,9]]}}}],["94be7fa",{"_index":1537,"t":{"451":{"position":[[212,9]]}}}],["95",{"_index":1494,"t":{"449":{"position":[[610,5]]}}}],["9502bcc",{"_index":1401,"t":{"438":{"position":[[521,9]]}}}],["9629f22",{"_index":1148,"t":{"416":{"position":[[479,9]]}}}],["963d9ea",{"_index":1012,"t":{"381":{"position":[[113,9]]}}}],["97",{"_index":1508,"t":{"449":{"position":[[1073,5]]}}}],["97.79",{"_index":2628,"t":{"792":{"position":[[539,5]]},"798":{"position":[[1389,6]]}}}],["98198fc",{"_index":1139,"t":{"416":{"position":[[234,9]]}}}],["9886",{"_index":2787,"t":{"924":{"position":[[298,4]]},"1200":{"position":[[247,4]]}}}],["990f3c2",{"_index":1070,"t":{"394":{"position":[[72,9]]}}}],["9a54f51",{"_index":1619,"t":{"468":{"position":[[312,9]]}}}],["9b7b308",{"_index":1517,"t":{"449":{"position":[[1200,9]]}}}],["9b95ee5",{"_index":1280,"t":{"430":{"position":[[72,9]]}}}],["9c3af00",{"_index":1637,"t":{"468":{"position":[[1165,9]]}}}],["9d66de6",{"_index":1648,"t":{"471":{"position":[[39,9]]}}}],["9de403c",{"_index":1456,"t":{"445":{"position":[[907,9]]}}}],["9f4a4af",{"_index":1481,"t":{"449":{"position":[[18,9]]}}}],["9f580c1",{"_index":1391,"t":{"438":{"position":[[242,9]]}}}],["_",{"_index":484,"t":{"93":{"position":[[3463,4],[3599,4]]}}}],["a01a215",{"_index":1534,"t":{"451":{"position":[[130,9]]}}}],["a16a695",{"_index":1459,"t":{"445":{"position":[[1070,9]]}}}],["a18de1",{"_index":1431,"t":{"445":{"position":[[302,9]]}}}],["a1d2ce6",{"_index":1271,"t":{"427":{"position":[[438,9]]}}}],["a27c392",{"_index":1310,"t":{"432":{"position":[[574,9]]}}}],["a2b5c1a",{"_index":1584,"t":{"460":{"position":[[99,9]]}}}],["a310df2",{"_index":1236,"t":{"425":{"position":[[956,9]]}}}],["a4fff16",{"_index":1096,"t":{"408":{"position":[[118,9]]}}}],["a50148c",{"_index":1145,"t":{"416":{"position":[[399,9]]}}}],["a71abf",{"_index":1343,"t":{"434":{"position":[[427,9]]}}}],["a7b22e2",{"_index":1590,"t":{"464":{"position":[[18,9]]}}}],["a_genset",{"_index":1660,"t":{"476":{"position":[[621,8]]},"481":{"position":[[619,8]]}}}],["a_single_speed_pump",{"_index":2562,"t":{"779":{"position":[[25,19]]}}}],["a_single_speed_pump_with_head_margin_appli",{"_index":2566,"t":{"779":{"position":[[341,44]]}}}],["a_variable_speed_pump",{"_index":2564,"t":{"779":{"position":[[180,21]]}}}],["aa65163",{"_index":1246,"t":{"425":{"position":[[1170,9]]}}}],["ab25e05",{"_index":1395,"t":{"438":{"position":[[333,9]]}}}],["abbb704",{"_index":970,"t":{"366":{"position":[[37,9]]}}}],["abil",{"_index":2069,"t":{"627":{"position":[[470,7]]}}}],["abov",{"_index":529,"t":{"95":{"position":[[1348,5],[1589,6]]},"165":{"position":[[432,5]]},"248":{"position":[[174,5],[410,5]]},"481":{"position":[[1903,6]]},"545":{"position":[[505,6]]},"557":{"position":[[360,6],[410,6]]},"563":{"position":[[1968,6],[2852,6],[2909,6]]},"661":{"position":[[43,6]]},"704":{"position":[[980,5]]},"721":{"position":[[475,6]]},"729":{"position":[[1339,6]]},"731":{"position":[[324,6],[374,6]]},"737":{"position":[[1203,5],[2251,5],[2438,5],[2881,6]]},"743":{"position":[[960,5]]},"764":{"position":[[1182,5]]},"781":{"position":[[1118,7]]},"910":{"position":[[1702,6]]},"926":{"position":[[1298,5]]},"952":{"position":[[310,5]]},"988":{"position":[[991,6]]},"1042":{"position":[[2502,5]]},"1258":{"position":[[380,5]]},"1264":{"position":[[290,5]]}}}],["absolut",{"_index":754,"t":{"165":{"position":[[223,8]]},"184":{"position":[[32,9]]},"468":{"position":[[275,8]]},"749":{"position":[[223,8]]},"1016":{"position":[[962,8]]}}}],["accept",{"_index":661,"t":{"129":{"position":[[16,8]]},"271":{"position":[[252,8]]},"445":{"position":[[238,7]]},"523":{"position":[[16,6]]},"541":{"position":[[16,8]]},"641":{"position":[[81,7],[194,9]]},"1066":{"position":[[1555,9]]},"1072":{"position":[[588,9]]}}}],["access",{"_index":177,"t":{"55":{"position":[[209,6]]},"65":{"position":[[288,10]]},"432":{"position":[[1053,8]]},"627":{"position":[[39,6]]}}}],["accompani",{"_index":2738,"t":{"857":{"position":[[113,11]]},"926":{"position":[[1717,11]]},"1047":{"position":[[284,11]]}}}],["accord",{"_index":1627,"t":{"468":{"position":[[549,9]]},"906":{"position":[[82,9]]},"1276":{"position":[[82,9]]}}}],["account",{"_index":635,"t":{"118":{"position":[[931,7]]},"1082":{"position":[[161,7]]},"1321":{"position":[[30,7],[571,9]]},"1374":{"position":[[725,7]]},"1378":{"position":[[227,7]]}}}],["accur",{"_index":685,"t":{"145":{"position":[[261,8]]},"926":{"position":[[388,8]]}}}],["accuraci",{"_index":677,"t":{"145":{"position":[[84,10],[424,8],[459,8],[511,8]]},"507":{"position":[[13,8]]},"920":{"position":[[933,8]]}}}],["achiev",{"_index":149,"t":{"48":{"position":[[95,8]]},"59":{"position":[[192,7]]},"967":{"position":[[1218,7]]},"1154":{"position":[[784,10]]},"1407":{"position":[[96,8]]}}}],["act",{"_index":2006,"t":{"573":{"position":[[649,3]]}}}],["action",{"_index":1196,"t":{"425":{"position":[[161,7]]},"455":{"position":[[137,6]]},"665":{"position":[[485,7]]}}}],["actions/cach",{"_index":1210,"t":{"425":{"position":[[402,13]]}}}],["actions/checkout",{"_index":1215,"t":{"425":{"position":[[465,16]]}}}],["actions/setup",{"_index":1218,"t":{"425":{"position":[[522,13]]}}}],["activ",{"_index":613,"t":{"116":{"position":[[293,6]]},"127":{"position":[[179,6],[341,8]]},"594":{"position":[[96,6],[135,7]]},"633":{"position":[[55,9]]},"1053":{"position":[[1302,11]]}}}],["actual",{"_index":445,"t":{"93":{"position":[[2293,8]]},"297":{"position":[[132,6]]},"432":{"position":[[301,6]]},"500":{"position":[[86,8]]},"596":{"position":[[0,6],[61,6],[172,6]]},"618":{"position":[[200,6]]},"926":{"position":[[129,6],[1318,6]]},"988":{"position":[[1005,6],[1205,6],[1304,6],[1389,6]]},"1057":{"position":[[607,6]]},"1154":{"position":[[861,6]]},"1374":{"position":[[69,6],[137,6]]}}}],["ad",{"_index":514,"t":{"95":{"position":[[574,5],[1617,5]]},"108":{"position":[[444,5]]},"113":{"position":[[37,6]]},"436":{"position":[[242,6]]},"449":{"position":[[558,5]]},"476":{"position":[[172,5],[943,5]]},"483":{"position":[[730,5]]},"486":{"position":[[78,6]]},"498":{"position":[[0,5],[58,5],[451,5]]},"507":{"position":[[128,5],[270,5]]},"529":{"position":[[367,5]]},"600":{"position":[[0,5]]},"607":{"position":[[0,5]]},"685":{"position":[[47,6]]},"687":{"position":[[24,5]]},"809":{"position":[[188,5],[418,6]]},"816":{"position":[[269,5]]},"855":{"position":[[618,5]]},"948":{"position":[[255,5]]},"950":{"position":[[722,5]]},"952":{"position":[[1130,5]]},"965":{"position":[[1032,5]]},"967":{"position":[[2525,5]]},"1006":{"position":[[313,5]]},"1012":{"position":[[457,5]]},"1042":{"position":[[952,5]]},"1055":{"position":[[291,6]]},"1082":{"position":[[198,5],[352,5]]},"1120":{"position":[[10,6]]},"1184":{"position":[[309,5]]},"1268":{"position":[[474,5]]},"1302":{"position":[[302,5]]},"1313":{"position":[[32,5],[57,5]]},"1321":{"position":[[21,5]]},"1468":{"position":[[313,5]]}}}],["add",{"_index":73,"t":{"32":{"position":[[28,3]]},"95":{"position":[[556,3]]},"120":{"position":[[84,3]]},"149":{"position":[[332,3]]},"169":{"position":[[34,3]]},"358":{"position":[[0,3],[164,3],[244,3],[340,3],[397,3],[506,3]]},"362":{"position":[[54,3],[169,3]]},"377":{"position":[[0,3]]},"383":{"position":[[0,3]]},"389":{"position":[[0,3]]},"406":{"position":[[104,3]]},"414":{"position":[[0,3],[49,3]]},"416":{"position":[[0,3]]},"419":{"position":[[0,3],[40,3]]},"423":{"position":[[0,3]]},"425":{"position":[[0,3],[37,3],[97,3],[146,3],[197,3],[235,3],[271,3],[328,3]]},"430":{"position":[[0,3],[82,3],[140,3],[183,3]]},"432":{"position":[[0,3],[57,3]]},"434":{"position":[[0,3],[54,3],[85,3],[150,3]]},"436":{"position":[[0,3],[83,3],[169,3]]},"449":{"position":[[0,3],[28,3],[62,3],[96,3],[151,3],[216,3],[315,3],[410,3],[450,3]]},"453":{"position":[[0,3]]},"466":{"position":[[0,3]]},"468":{"position":[[0,3],[38,3],[83,3]]},"476":{"position":[[0,3],[317,3],[815,3],[1276,3],[1484,3]]},"478":{"position":[[14,3]]},"481":{"position":[[0,3],[738,3]]},"491":{"position":[[0,3],[87,3],[287,3]]},"493":{"position":[[0,3]]},"495":{"position":[[0,3],[192,3]]},"498":{"position":[[133,3],[209,3],[245,3],[298,3],[384,3]]},"500":{"position":[[435,3]]},"509":{"position":[[0,3]]},"555":{"position":[[1127,4]]},"594":{"position":[[0,3]]},"600":{"position":[[449,3]]},"655":{"position":[[269,3]]},"663":{"position":[[508,3]]},"683":{"position":[[60,3]]},"685":{"position":[[0,3],[29,3],[105,3]]},"687":{"position":[[39,4],[283,3]]},"692":{"position":[[366,3],[392,3]]},"694":{"position":[[256,3],[301,3],[555,3],[649,3],[675,3]]},"940":{"position":[[56,3]]},"1066":{"position":[[547,3]]},"1072":{"position":[[1010,3]]}}}],["addit",{"_index":517,"t":{"95":{"position":[[1028,8],[2118,8]]},"358":{"position":[[309,10]]},"498":{"position":[[137,10]]},"543":{"position":[[146,8]]},"563":{"position":[[128,10]]},"710":{"position":[[1939,10]]},"794":{"position":[[0,10]]},"811":{"position":[[326,8]]},"814":{"position":[[97,10]]},"816":{"position":[[61,10],[252,8]]},"880":{"position":[[122,9]]},"910":{"position":[[1264,9],[2257,10]]},"946":{"position":[[533,9]]},"967":{"position":[[354,9]]},"973":{"position":[[579,9]]},"984":{"position":[[534,10]]},"988":{"position":[[1842,10]]},"990":{"position":[[293,8]]},"1047":{"position":[[259,9]]},"1053":{"position":[[1136,10],[1317,10]]},"1066":{"position":[[906,8],[1078,8]]},"1238":{"position":[[329,10]]},"1395":{"position":[[376,9]]}}}],["addition",{"_index":2351,"t":{"710":{"position":[[933,12]]},"920":{"position":[[355,13]]}}}],["adiabat",{"_index":3007,"t":{"1042":{"position":[[896,11]]}}}],["adjust",{"_index":744,"t":{"161":{"position":[[60,10]]},"171":{"position":[[0,10]]},"178":{"position":[[149,11],[466,11]]},"248":{"position":[[345,6]]},"358":{"position":[[456,6]]},"449":{"position":[[226,10],[328,6],[1457,10]]},"745":{"position":[[965,11],[1001,10]]},"855":{"position":[[607,10]]},"912":{"position":[[296,8]]},"934":{"position":[[1291,10]]},"948":{"position":[[244,10]]},"950":{"position":[[711,10]]},"952":{"position":[[529,8],[1119,10]]},"965":{"position":[[1021,10]]},"967":{"position":[[2514,10]]},"982":{"position":[[888,8]]},"988":{"position":[[2161,6]]},"1006":{"position":[[302,10]]},"1012":{"position":[[446,10]]},"1059":{"position":[[462,11],[493,11]]},"1080":{"position":[[32,10]]},"1082":{"position":[[179,11],[245,10],[314,10]]},"1084":{"position":[[0,11],[12,11],[36,11]]},"1086":{"position":[[173,11],[510,11]]},"1136":{"position":[[18,10],[78,10]]},"1138":{"position":[[37,10]]},"1142":{"position":[[153,11],[460,11]]},"1154":{"position":[[697,9]]},"1268":{"position":[[463,10]]},"1313":{"position":[[21,10]]},"1468":{"position":[[302,10]]}}}],["admonit",{"_index":2077,"t":{"627":{"position":[[708,11]]},"633":{"position":[[139,11]]}}}],["advanc",{"_index":171,"t":{"55":{"position":[[60,8]]},"95":{"position":[[2620,8]]},"543":{"position":[[87,8]]},"553":{"position":[[5,8]]},"569":{"position":[[44,8]]},"663":{"position":[[540,8]]},"969":{"position":[[31,8]]}}}],["advanced_compressor_train",{"_index":3094,"t":{"1110":{"position":[[16,25],[241,25]]}}}],["ae6ade9",{"_index":1122,"t":{"414":{"position":[[393,9]]}}}],["af32274",{"_index":1128,"t":{"414":{"position":[[598,9]]}}}],["af6bee9",{"_index":1191,"t":{"425":{"position":[[27,9]]}}}],["affect",{"_index":543,"t":{"95":{"position":[[2407,8]]},"108":{"position":[[85,7]]},"124":{"position":[[226,6]]},"476":{"position":[[1212,8]]},"1016":{"position":[[507,9]]},"1435":{"position":[[421,9]]}}}],["again",{"_index":375,"t":{"81":{"position":[[335,5]]},"432":{"position":[[846,5]]},"1158":{"position":[[294,5]]}}}],["against",{"_index":1552,"t":{"455":{"position":[[25,7]]},"493":{"position":[[561,7]]},"1059":{"position":[[132,7]]}}}],["aggreg",{"_index":1062,"t":{"392":{"position":[[110,11]]},"616":{"position":[[92,11],[169,10]]},"890":{"position":[[701,11]]}}}],["agnost",{"_index":539,"t":{"95":{"position":[[2356,8]]}}}],["ahead",{"_index":1345,"t":{"436":{"position":[[18,5]]},"971":{"position":[[186,5]]},"973":{"position":[[383,5]]},"1042":{"position":[[2622,6]]},"1395":{"position":[[180,5]]}}}],["ain't",{"_index":3075,"t":{"1076":{"position":[[54,5]]}}}],["algorithm",{"_index":1118,"t":{"414":{"position":[[224,9]]},"483":{"position":[[228,11]]},"607":{"position":[[448,10],[467,9],[573,9]]},"934":{"position":[[645,9]]}}}],["align",{"_index":1525,"t":{"449":{"position":[[1383,7]]},"614":{"position":[[46,9]]}}}],["alkan",{"_index":2935,"t":{"990":{"position":[[224,7],[342,7]]}}}],["alloc",{"_index":3124,"t":{"1184":{"position":[[251,9]]},"1302":{"position":[[244,9]]}}}],["allow",{"_index":330,"t":{"73":{"position":[[114,7]]},"93":{"position":[[138,7],[3302,7]]},"145":{"position":[[901,5]]},"283":{"position":[[108,7],[229,8]]},"358":{"position":[[519,7]]},"441":{"position":[[22,7]]},"445":{"position":[[324,5]]},"449":{"position":[[741,7]]},"458":{"position":[[0,5]]},"476":{"position":[[1088,5]]},"483":{"position":[[117,5]]},"493":{"position":[[607,7]]},"498":{"position":[[972,5],[1666,7]]},"513":{"position":[[138,7]]},"555":{"position":[[179,8]]},"665":{"position":[[206,6]]},"729":{"position":[[179,8]]},"768":{"position":[[222,5]]},"785":{"position":[[51,8]]},"841":{"position":[[79,7]]},"847":{"position":[[145,7]]},"853":{"position":[[24,6]]},"857":{"position":[[29,6]]},"914":{"position":[[28,6]]},"920":{"position":[[30,6]]},"1090":{"position":[[476,7],[1906,7],[2037,7]]},"1474":{"position":[[33,7]]}}}],["alon",{"_index":2054,"t":{"627":{"position":[[146,6]]},"910":{"position":[[69,5]]}}}],["along",{"_index":1741,"t":{"498":{"position":[[648,5]]},"940":{"position":[[513,5]]},"982":{"position":[[1780,6]]}}}],["alreadi",{"_index":2249,"t":{"667":{"position":[[70,7]]},"671":{"position":[[176,7]]},"737":{"position":[[437,7]]},"984":{"position":[[811,7]]}}}],["alt=\"altern",{"_index":2143,"t":{"639":{"position":[[1037,16]]}}}],["altern",{"_index":951,"t":{"358":{"position":[[784,13]]},"639":{"position":[[968,11]]},"920":{"position":[[437,9]]},"1042":{"position":[[3104,11]]},"1055":{"position":[[74,11]]},"1162":{"position":[[118,9]]},"1290":{"position":[[517,14],[772,14]]}}}],["although",{"_index":2207,"t":{"661":{"position":[[797,8],[1024,8],[1117,8]]}}}],["alway",{"_index":511,"t":{"95":{"position":[[301,6],[1998,6],[2102,6]]},"157":{"position":[[42,6]]},"432":{"position":[[943,6]]},"445":{"position":[[891,6]]},"500":{"position":[[793,6]]},"515":{"position":[[207,6]]},"809":{"position":[[81,6]]},"1055":{"position":[[508,6],[715,6]]},"1082":{"position":[[125,6]]},"1474":{"position":[[12,6]]}}}],["am3/h",{"_index":2929,"t":{"988":{"position":[[2421,5],[2469,5],[2563,7],[2614,6]]}}}],["am3/hr",{"_index":2820,"t":{"926":{"position":[[1380,6],[1427,6]]},"988":{"position":[[1032,7],[1416,6],[1445,6],[1660,7]]}}}],["am3_per_hour",{"_index":461,"t":{"93":{"position":[[2696,12],[2842,12],[3001,12],[3158,12]]},"252":{"position":[[67,12]]},"267":{"position":[[122,12]]},"549":{"position":[[591,12]]},"553":{"position":[[487,12],[651,12]]},"565":{"position":[[297,12],[778,12],[942,12]]},"702":{"position":[[567,12]]},"712":{"position":[[237,12]]},"725":{"position":[[955,12]]},"739":{"position":[[485,12]]},"770":{"position":[[142,12]]},"777":{"position":[[144,12]]},"779":{"position":[[128,12],[289,12],[469,12]]},"916":{"position":[[135,12]]},"918":{"position":[[118,12]]},"922":{"position":[[137,12]]},"924":{"position":[[122,12]]},"928":{"position":[[293,12]]},"930":{"position":[[195,12]]},"955":{"position":[[122,12]]},"957":{"position":[[195,12]]},"959":{"position":[[220,12]]},"1234":{"position":[[122,12]]},"1348":{"position":[[94,14]]},"1350":{"position":[[82,14]]},"1490":{"position":[[87,12]]},"1492":{"position":[[91,12]]},"1495":{"position":[[90,12]]},"1497":{"position":[[122,12]]}}}],["ambigu",{"_index":397,"t":{"93":{"position":[[44,9],[472,9],[1521,9]]},"106":{"position":[[171,9],[317,11]]},"511":{"position":[[65,9]]},"513":{"position":[[44,9]]},"521":{"position":[[65,9]]},"523":{"position":[[103,11],[303,9]]},"539":{"position":[[65,9]]},"661":{"position":[[911,10]]}}}],["amend",{"_index":452,"t":{"93":{"position":[[2414,5]]}}}],["amongst",{"_index":2318,"t":{"704":{"position":[[894,7]]}}}],["amount",{"_index":526,"t":{"95":{"position":[[1234,6]]},"988":{"position":[[1832,6]]},"998":{"position":[[374,6]]},"1057":{"position":[[715,6]]}}}],["analys",{"_index":2021,"t":{"594":{"position":[[241,7]]}}}],["analyz",{"_index":658,"t":{"127":{"position":[[480,9]]}}}],["and/or",{"_index":327,"t":{"71":{"position":[[178,6]]},"102":{"position":[[1207,6]]},"785":{"position":[[6,7]]},"969":{"position":[[109,6],[133,6]]},"1274":{"position":[[219,6]]}}}],["annot",{"_index":2109,"t":{"639":{"position":[[41,10]]}}}],["anoth",{"_index":1745,"t":{"498":{"position":[[1336,7]]},"555":{"position":[[1132,7]]},"694":{"position":[[260,7]]},"971":{"position":[[1335,7]]},"1036":{"position":[[314,7]]},"1055":{"position":[[298,7]]},"1170":{"position":[[701,7]]},"1184":{"position":[[73,7]]},"1302":{"position":[[55,7]]},"1321":{"position":[[121,7]]},"1397":{"position":[[786,7]]},"1413":{"position":[[600,7]]}}}],["anti",{"_index":2554,"t":{"764":{"position":[[546,5]]},"781":{"position":[[1438,5]]},"926":{"position":[[513,5]]},"967":{"position":[[624,4],[659,4]]},"982":{"position":[[499,4]]},"988":{"position":[[1180,4]]},"1042":{"position":[[3792,4]]}}}],["antisurg",{"_index":2872,"t":{"967":{"position":[[507,9]]}}}],["anyon",{"_index":3155,"t":{"1304":{"position":[[209,7]]}}}],["anyth",{"_index":2282,"t":{"687":{"position":[[233,8]]},"1090":{"position":[[1109,8]]}}}],["anywher",{"_index":2661,"t":{"802":{"position":[[2228,8]]}}}],["api",{"_index":380,"t":{"83":{"position":[[294,3]]},"455":{"position":[[73,3]]},"1062":{"position":[[10,3]]}}}],["appli",{"_index":753,"t":{"165":{"position":[[88,7]]},"283":{"position":[[140,8]]},"481":{"position":[[481,5]]},"491":{"position":[[334,5]]},"602":{"position":[[168,8]]},"749":{"position":[[88,7]]},"869":{"position":[[122,8]]},"874":{"position":[[71,8]]},"1090":{"position":[[979,8],[1129,5]]}}}],["applic",{"_index":946,"t":{"358":{"position":[[435,10]]},"366":{"position":[[18,11]]},"372":{"position":[[26,11]]},"631":{"position":[[98,11]]},"839":{"position":[[339,10]]}}}],["apply_condit",{"_index":1436,"t":{"445":{"position":[[405,15]]}}}],["appreci",{"_index":2163,"t":{"641":{"position":[[609,10]]}}}],["approach",{"_index":243,"t":{"59":{"position":[[924,8]]}}}],["appropri",{"_index":2248,"t":{"667":{"position":[[34,11]]}}}],["approxim",{"_index":3032,"t":{"1042":{"position":[[1977,12]]}}}],["archiv",{"_index":1375,"t":{"436":{"position":[[735,7]]}}}],["area",{"_index":195,"t":{"57":{"position":[[113,5]]},"248":{"position":[[200,4]]},"279":{"position":[[186,5]]},"425":{"position":[[47,4]]},"500":{"position":[[600,4]]},"600":{"position":[[12,4],[133,4]]},"764":{"position":[[287,5]]},"781":{"position":[[151,4],[1273,5],[1535,4],[1593,4],[1679,5]]},"794":{"position":[[345,5]]},"824":{"position":[[259,5]]},"910":{"position":[[805,4]]},"1016":{"position":[[414,5],[448,4]]},"1435":{"position":[[328,5],[362,4]]}}}],["aren't",{"_index":2204,"t":{"661":{"position":[[755,6]]}}}],["arg",{"_index":532,"t":{"95":{"position":[[1786,6]]},"1064":{"position":[[0,5],[189,9]]},"1070":{"position":[[91,9]]}}}],["arg1",{"_index":1689,"t":{"481":{"position":[[2096,4]]}}}],["argn",{"_index":1690,"t":{"481":{"position":[[2105,5]]}}}],["argument",{"_index":509,"t":{"95":{"position":[[209,8],[336,8],[829,8],[892,8],[1600,8],[1638,9],[1747,8],[1972,9],[2215,8],[2447,8]]},"478":{"position":[[203,9]]},"481":{"position":[[931,9],[1081,8],[2057,8]]},"495":{"position":[[22,8],[212,8],[239,8]]},"515":{"position":[[115,8],[242,8]]},"529":{"position":[[62,8]]},"1066":{"position":[[74,10]]},"1074":{"position":[[114,10]]}}}],["aris",{"_index":2783,"t":{"920":{"position":[[974,5]]}}}],["array",{"_index":1439,"t":{"445":{"position":[[439,6]]},"458":{"position":[[86,5]]},"669":{"position":[[672,5]]}}}],["ascii",{"_index":366,"t":{"81":{"position":[[107,6],[146,6]]}}}],["ascii//translit",{"_index":370,"t":{"81":{"position":[[237,15]]}}}],["asid",{"_index":2903,"t":{"982":{"position":[[391,6]]}}}],["asset",{"_index":265,"t":{"63":{"position":[[55,6]]},"147":{"position":[[699,5]]}}}],["asset/ecalc",{"_index":411,"t":{"93":{"position":[[515,11]]},"438":{"position":[[68,11]]}}}],["asset_result_dto",{"_index":1293,"t":{"432":{"position":[[183,16]]}}}],["associ",{"_index":75,"t":{"32":{"position":[[46,10]]},"215":{"position":[[60,10]]},"818":{"position":[[130,10]]},"1090":{"position":[[2120,10],[2173,10]]}}}],["assum",{"_index":792,"t":{"203":{"position":[[72,7]]},"498":{"position":[[1681,8]]},"708":{"position":[[229,7]]},"768":{"position":[[71,7]]},"785":{"position":[[478,6],[550,6]]},"910":{"position":[[1807,7]]},"946":{"position":[[122,7]]},"973":{"position":[[327,7]]},"1040":{"position":[[17,7]]},"1042":{"position":[[3181,6]]},"1053":{"position":[[455,7]]},"1258":{"position":[[531,9]]},"1374":{"position":[[1387,7]]},"1395":{"position":[[124,7]]}}}],["assumpt",{"_index":2785,"t":{"920":{"position":[[1004,11]]},"946":{"position":[[142,10]]},"1042":{"position":[[3304,11]]},"1053":{"position":[[72,11]]},"1055":{"position":[[807,10],[874,10]]}}}],["asv",{"_index":1712,"t":{"486":{"position":[[95,3],[194,4]]},"764":{"position":[[542,3]]},"781":{"position":[[1434,3]]},"920":{"position":[[600,5]]},"926":{"position":[[509,3]]},"967":{"position":[[676,5]]},"982":{"position":[[1531,3],[1835,3]]},"984":{"position":[[91,3],[320,4]]},"988":{"position":[[83,3],[190,4],[521,3],[737,3],[1464,5]]},"1162":{"position":[[264,5]]}}}],["asv_balanced_margin",{"_index":1714,"t":{"486":{"position":[[383,20]]}}}],["asv_with_balanced_pressure_ratio",{"_index":1716,"t":{"486":{"position":[[442,34]]}}}],["atom",{"_index":2942,"t":{"990":{"position":[[376,5]]}}}],["attach",{"_index":2725,"t":{"839":{"position":[[689,8]]}}}],["attent",{"_index":2546,"t":{"762":{"position":[[152,9]]}}}],["attribut",{"_index":34,"t":{"4":{"position":[[207,10]]},"93":{"position":[[1458,9]]},"219":{"position":[[101,10]]},"344":{"position":[[112,10]]},"350":{"position":[[4,10]]},"432":{"position":[[447,10],[953,9]]},"523":{"position":[[280,11]]},"579":{"position":[[130,10]]},"841":{"position":[[271,10]]},"1146":{"position":[[63,10]]},"1204":{"position":[[111,10]]},"1437":{"position":[[0,10]]}}}],["august",{"_index":2043,"t":{"609":{"position":[[418,6]]}}}],["auto",{"_index":582,"t":{"104":{"position":[[414,4]]}}}],["automat",{"_index":579,"t":{"104":{"position":[[296,13]]},"358":{"position":[[874,13]]},"704":{"position":[[847,13]]},"835":{"position":[[360,14]]},"912":{"position":[[282,13]]},"967":{"position":[[477,9],[614,9],[952,13],[1115,13]]}}}],["avail",{"_index":181,"t":{"55":{"position":[[297,9]]},"118":{"position":[[486,9]]},"358":{"position":[[212,9]]},"486":{"position":[[217,9]]},"529":{"position":[[7,9]]},"535":{"position":[[174,9]]},"569":{"position":[[96,9]]},"573":{"position":[[363,9]]},"692":{"position":[[723,9]]},"694":{"position":[[963,9]]},"944":{"position":[[66,9]]},"952":{"position":[[656,9]]},"977":{"position":[[4,9]]},"988":{"position":[[370,9],[615,10],[1914,9],[2313,9],[2427,9],[2475,9],[2539,9]]},"990":{"position":[[958,9]]},"992":{"position":[[0,9]]},"1042":{"position":[[3721,9]]},"1055":{"position":[[642,10],[698,10]]},"1072":{"position":[[57,10]]},"1076":{"position":[[175,9]]},"1248":{"position":[[204,9]]},"1290":{"position":[[928,9]]}}}],["averag",{"_index":632,"t":{"118":{"position":[[734,7],[908,7]]},"529":{"position":[[261,7]]},"602":{"position":[[209,7]]},"926":{"position":[[40,9]]},"1042":{"position":[[2203,7]]},"1154":{"position":[[520,9],[664,7],[747,7]]},"1378":{"position":[[431,7]]}}}],["avoid",{"_index":396,"t":{"93":{"position":[[38,5],[466,5]]},"432":{"position":[[115,5]]},"445":{"position":[[0,5]]},"493":{"position":[[671,5]]},"513":{"position":[[38,5]]},"555":{"position":[[219,5]]},"729":{"position":[[219,5]]},"768":{"position":[[374,5],[416,5]]},"809":{"position":[[428,5]]},"1184":{"position":[[346,5]]},"1256":{"position":[[164,5]]},"1302":{"position":[[339,5]]}}}],["awar",{"_index":683,"t":{"145":{"position":[[225,5]]}}}],["away",{"_index":3127,"t":{"1184":{"position":[[409,4]]},"1302":{"position":[[402,4]]}}}],["awesom",{"_index":2233,"t":{"663":{"position":[[486,7]]}}}],["b",{"_index":1785,"t":{"543":{"position":[[369,2],[1152,1],[1249,1],[1319,1],[1402,1],[1431,1]]},"551":{"position":[[121,1]]},"557":{"position":[[777,1]]},"561":{"position":[[42,2],[302,1],[339,1],[459,1],[556,1],[653,1],[736,1]]},"563":{"position":[[3537,1],[3590,1],[3677,1],[3930,1],[4049,1],[4343,1]]},"565":{"position":[[4201,1],[4321,1],[4418,1],[4524,1],[4647,1]]},"675":{"position":[[70,1]]},"692":{"position":[[311,1]]},"694":{"position":[[470,1]]}}}],["b02d68d",{"_index":1399,"t":{"438":{"position":[[424,9]]}}}],["b066c74",{"_index":1106,"t":{"410":{"position":[[172,9]]}}}],["b0e3466",{"_index":1099,"t":{"408":{"position":[[157,9]]}}}],["b183db7",{"_index":982,"t":{"370":{"position":[[20,9]]}}}],["b1b4acf",{"_index":1039,"t":{"383":{"position":[[275,9]]}}}],["b1c5b23",{"_index":1339,"t":{"434":{"position":[[294,9]]}}}],["b257567",{"_index":1120,"t":{"414":{"position":[[312,9]]}}}],["b424176",{"_index":1342,"t":{"434":{"position":[[387,9]]}}}],["b44f8c8",{"_index":986,"t":{"372":{"position":[[67,9]]}}}],["b477b15",{"_index":1408,"t":{"438":{"position":[[778,9]]}}}],["b580e3d",{"_index":1274,"t":{"427":{"position":[[532,9]]}}}],["b61a0f",{"_index":1287,"t":{"432":{"position":[[47,9]]}}}],["b78b035",{"_index":1608,"t":{"468":{"position":[[73,9]]}}}],["b904",{"_index":1625,"t":{"468":{"position":[[496,4]]}}}],["ba48dcd",{"_index":1079,"t":{"398":{"position":[[146,9]]}}}],["ba788fd",{"_index":1412,"t":{"438":{"position":[[889,9]]}}}],["ba9235",{"_index":1314,"t":{"432":{"position":[[704,9]]},"436":{"position":[[314,9],[393,9]]}}}],["back",{"_index":2283,"t":{"689":{"position":[[25,4]]},"764":{"position":[[873,4]]},"1053":{"position":[[630,4]]},"1158":{"position":[[289,4]]},"1403":{"position":[[875,4]]}}}],["backfil",{"_index":3201,"t":{"1403":{"position":[[829,9],[883,8]]}}}],["backward",{"_index":892,"t":{"283":{"position":[[1019,9]]},"781":{"position":[[732,8]]}}}],["bad",{"_index":1510,"t":{"449":{"position":[[1116,3]]},"661":{"position":[[1215,3]]}}}],["bad_fuel_ga",{"_index":1805,"t":{"551":{"position":[[56,13],[327,12]]},"557":{"position":[[831,12]]},"561":{"position":[[393,12]]},"565":{"position":[[474,12],[4255,12]]}}}],["badg",{"_index":1629,"t":{"468":{"position":[[588,6]]}}}],["bar",{"_index":909,"t":{"297":{"position":[[183,4],[605,3],[641,4],[670,4]]},"543":{"position":[[914,3],[948,4]]},"627":{"position":[[640,4]]},"710":{"position":[[1351,3],[2148,3],[2160,3]]},"719":{"position":[[733,3],[767,4]]},"787":{"position":[[54,3],[77,3]]},"798":{"position":[[816,6],[823,6]]},"965":{"position":[[318,3],[658,5],[919,5]]},"967":{"position":[[1930,5],[2343,5]]},"971":{"position":[[985,5],[1556,5],[2008,5]]},"1170":{"position":[[922,5]]},"1216":{"position":[[26,5]]},"1260":{"position":[[201,4]]},"1397":{"position":[[436,5],[1007,5]]},"1427":{"position":[[316,4]]}}}],["bara",{"_index":2433,"t":{"737":{"position":[[1571,6],[1604,6]]},"739":{"position":[[2178,4],[2209,4]]},"798":{"position":[[1863,6],[1915,6]]},"886":{"position":[[53,4],[77,4]]},"894":{"position":[[53,4],[77,4]]}}}],["barycentr",{"_index":2575,"t":{"781":{"position":[[1192,11]]},"794":{"position":[[286,11]]}}}],["base",{"_index":584,"t":{"104":{"position":[[459,5]]},"336":{"position":[[135,5]]},"432":{"position":[[1023,4]]},"500":{"position":[[857,5]]},"529":{"position":[[426,5],[445,6]]},"543":{"position":[[564,4],[613,4],[1228,4],[1277,4]]},"553":{"position":[[153,5],[193,5]]},"559":{"position":[[192,4]]},"561":{"position":[[190,4]]},"563":{"position":[[78,4],[3515,4]]},"653":{"position":[[351,5]]},"665":{"position":[[102,5]]},"696":{"position":[[22,5],[306,4]]},"710":{"position":[[2535,4],[2687,4],[2728,4],[2806,4],[2890,4]]},"712":{"position":[[2068,4],[2146,4],[2230,4]]},"719":{"position":[[403,4]]},"733":{"position":[[192,4],[458,4],[489,4]]},"737":{"position":[[78,4],[139,4],[170,4]]},"739":{"position":[[1513,4],[1544,4]]},"764":{"position":[[30,5]]},"781":{"position":[[960,5],[1218,5]]},"888":{"position":[[135,5]]},"934":{"position":[[428,5],[610,5]]},"946":{"position":[[130,5],[197,5],[729,5]]},"952":{"position":[[203,6],[550,6]]},"973":{"position":[[875,5]]},"990":{"position":[[931,5]]},"1053":{"position":[[114,4],[886,4]]},"1059":{"position":[[529,4]]},"1090":{"position":[[558,4]]},"1150":{"position":[[155,4]]},"1395":{"position":[[672,5]]}}}],["base_production_load_mw",{"_index":1854,"t":{"555":{"position":[[528,24],[924,23],[1103,23]]},"565":{"position":[[2014,24]]}}}],["base_profile.csv",{"_index":1798,"t":{"547":{"position":[[314,16]]},"565":{"position":[[56,16]]},"567":{"position":[[727,16]]}}}],["baseload",{"_index":2364,"t":{"710":{"position":[[2787,8]]},"712":{"position":[[2127,8]]},"1053":{"position":[[435,11]]}}}],["bash|zsh|fish|powershell|pwsh",{"_index":3057,"t":{"1064":{"position":[[384,32],[479,32]]}}}],["basi",{"_index":2171,"t":{"651":{"position":[[138,6]]}}}],["basic",{"_index":3067,"t":{"1066":{"position":[[1424,5]]},"1072":{"position":[[472,5]]}}}],["bcc2f81",{"_index":1217,"t":{"425":{"position":[[501,9]]}}}],["bce91cb",{"_index":1441,"t":{"445":{"position":[[457,9]]}}}],["bd9d684",{"_index":1134,"t":{"416":{"position":[[110,9]]}}}],["be",{"_index":188,"t":{"57":{"position":[[25,5]]},"93":{"position":[[2302,5]]},"95":{"position":[[2130,5]]},"108":{"position":[[810,5]]},"127":{"position":[[460,5]]},"147":{"position":[[649,5]]},"486":{"position":[[114,5]]},"537":{"position":[[170,5]]},"710":{"position":[[711,5],[2614,5]]},"743":{"position":[[129,6]]},"802":{"position":[[974,5]]},"963":{"position":[[117,5]]},"1057":{"position":[[156,5]]},"1078":{"position":[[193,5]]},"1154":{"position":[[479,5]]},"1189":{"position":[[271,5]]},"1196":{"position":[[338,5]]},"1374":{"position":[[212,5]]}}}],["be148ba",{"_index":976,"t":{"368":{"position":[[108,9]]}}}],["be435c3",{"_index":1644,"t":{"468":{"position":[[1321,9]]}}}],["be9426a",{"_index":1554,"t":{"455":{"position":[[48,9]]}}}],["beat",{"_index":2208,"t":{"661":{"position":[[819,5]]}}}],["beauti",{"_index":2198,"t":{"661":{"position":[[532,9]]}}}],["becom",{"_index":949,"t":{"358":{"position":[[742,6]]},"559":{"position":[[373,8]]},"561":{"position":[[309,8]]},"563":{"position":[[3400,8],[3907,8]]},"687":{"position":[[292,6]]},"733":{"position":[[338,8]]},"781":{"position":[[1045,6]]}}}],["befor",{"_index":53,"t":{"10":{"position":[[370,7]]},"34":{"position":[[394,7]]},"95":{"position":[[1434,6],[1623,6]]},"178":{"position":[[455,6]]},"248":{"position":[[492,6]]},"295":{"position":[[1090,6]]},"328":{"position":[[195,8]]},"342":{"position":[[512,7]]},"436":{"position":[[51,6]]},"468":{"position":[[925,6],[981,6]]},"493":{"position":[[247,6]]},"563":{"position":[[3303,6],[3810,6]]},"694":{"position":[[837,6]]},"719":{"position":[[945,6]]},"737":{"position":[[2797,6]]},"828":{"position":[[670,6],[729,6],[798,6],[890,6],[959,6]]},"965":{"position":[[629,6],[890,6]]},"967":{"position":[[1901,6],[2314,6]]},"971":{"position":[[956,6],[1527,6],[1979,6]]},"975":{"position":[[299,6]]},"984":{"position":[[1022,6]]},"1072":{"position":[[37,6]]},"1086":{"position":[[499,6]]},"1142":{"position":[[449,6]]},"1170":{"position":[[893,6]]},"1202":{"position":[[322,7]]},"1321":{"position":[[538,7]]},"1397":{"position":[[407,6],[978,6]]},"1403":{"position":[[490,6]]}}}],["beforehand",{"_index":1681,"t":{"481":{"position":[[195,11]]}}}],["begin",{"_index":2663,"t":{"802":{"position":[[2383,9]]},"1403":{"position":[[35,5]]}}}],["behav",{"_index":1884,"t":{"563":{"position":[[1921,7]]},"920":{"position":[[423,7]]},"1162":{"position":[[104,7]]}}}],["behavior",{"_index":508,"t":{"95":{"position":[[84,9],[2683,9]]},"169":{"position":[[255,8]]},"864":{"position":[[4,8]]},"1474":{"position":[[78,9]]}}}],["behaviour",{"_index":135,"t":{"44":{"position":[[979,10]]},"104":{"position":[[356,9]]},"110":{"position":[[29,9]]},"1004":{"position":[[809,9]]},"1042":{"position":[[675,9]]},"1154":{"position":[[366,10]]},"1403":{"position":[[975,10]]}}}],["behind",{"_index":586,"t":{"106":{"position":[[141,6]]},"762":{"position":[[407,6]]},"910":{"position":[[2551,6]]}}}],["belong",{"_index":3084,"t":{"1090":{"position":[[74,6]]}}}],["below",{"_index":565,"t":{"102":{"position":[[928,5],[1072,6]]},"108":{"position":[[610,6]]},"118":{"position":[[1016,5]]},"147":{"position":[[1379,6]]},"169":{"position":[[339,6]]},"283":{"position":[[1338,5]]},"476":{"position":[[216,6],[538,6],[987,6]]},"500":{"position":[[610,6]]},"543":{"position":[[444,6]]},"669":{"position":[[179,5]]},"685":{"position":[[72,5]]},"696":{"position":[[186,6]]},"719":{"position":[[283,6]]},"737":{"position":[[2069,5]]},"747":{"position":[[45,6]]},"753":{"position":[[285,6]]},"764":{"position":[[304,5],[576,5]]},"802":{"position":[[1670,5]]},"967":{"position":[[844,5],[889,5],[916,6]]},"969":{"position":[[176,5]]},"982":{"position":[[687,6],[849,5]]},"988":{"position":[[777,6]]},"1042":{"position":[[3999,5]]},"1047":{"position":[[10,5],[194,5]]},"1090":{"position":[[325,6],[1043,6]]},"1128":{"position":[[26,5]]},"1154":{"position":[[766,5]]},"1258":{"position":[[507,5]]},"1282":{"position":[[87,6]]},"1374":{"position":[[970,6]]}}}],["better",{"_index":1769,"t":{"505":{"position":[[82,6]]},"661":{"position":[[545,6],[575,6],[607,6],[639,6],[672,6],[702,6],[1098,6],[1141,6]]},"1374":{"position":[[1014,6]]}}}],["between",{"_index":628,"t":{"118":{"position":[[590,7]]},"235":{"position":[[550,7]]},"283":{"position":[[819,7],[937,7],[1145,7],[1305,7]]},"414":{"position":[[344,7]]},"498":{"position":[[1438,7]]},"563":{"position":[[546,7]]},"602":{"position":[[536,7]]},"710":{"position":[[98,7]]},"737":{"position":[[339,7],[1961,7],[2207,7]]},"745":{"position":[[900,7]]},"753":{"position":[[59,7]]},"764":{"position":[[56,7],[655,7]]},"802":{"position":[[118,7]]},"828":{"position":[[544,7]]},"847":{"position":[[322,7]]},"859":{"position":[[630,7]]},"876":{"position":[[24,7]]},"888":{"position":[[73,7],[122,7]]},"910":{"position":[[386,7],[2306,7]]},"940":{"position":[[278,7]]},"957":{"position":[[849,7]]},"975":{"position":[[837,7]]},"988":{"position":[[1725,7]]},"1004":{"position":[[260,7]]},"1006":{"position":[[212,7]]},"1040":{"position":[[381,7]]},"1042":{"position":[[1537,7]]},"1066":{"position":[[185,7]]},"1074":{"position":[[215,7]]},"1162":{"position":[[402,7]]},"1176":{"position":[[181,7]]},"1238":{"position":[[43,7]]},"1290":{"position":[[950,7]]},"1300":{"position":[[475,7]]},"1439":{"position":[[126,7]]},"1454":{"position":[[112,7]]},"1468":{"position":[[212,7]]}}}],["bewar",{"_index":2828,"t":{"934":{"position":[[8,6]]}}}],["bfs_tree",{"_index":1095,"t":{"408":{"position":[[100,8]]}}}],["binari",{"_index":1786,"t":{"543":{"position":[[646,6]]}}}],["bit",{"_index":2193,"t":{"661":{"position":[[207,4]]}}}],["block",{"_index":339,"t":{"73":{"position":[[264,5],[324,6],[347,7]]},"633":{"position":[[132,6]]}}}],["blockquote>

    text

    /statement/pumpstexttexttitletitletitletitletitletitlelink",{"_index":2146,"t":{"639":{"position":[[1121,35]]}}}],["html",{"_index":2110,"t":{"639":{"position":[[82,4],[1202,4],[1313,4]]}}}],["hull",{"_index":2574,"t":{"781":{"position":[[1144,4]]}}}],["hydrocarbon",{"_index":811,"t":{"235":{"position":[[31,12],[374,11],[394,11]]},"360":{"position":[[331,11]]},"557":{"position":[[31,11],[239,11]]},"708":{"position":[[110,11],[178,11]]},"731":{"position":[[31,11],[239,11]]},"802":{"position":[[1460,11]]},"830":{"position":[[234,12],[675,12]]}}}],["hydrocarbon_export_sm3_per_day",{"_index":1848,"t":{"555":{"position":[[312,31]]},"565":{"position":[[1798,31]]},"729":{"position":[[312,31]]},"739":{"position":[[623,31]]}}}],["hyperlink",{"_index":2144,"t":{"639":{"position":[[1070,10]]}}}],["hyphen",{"_index":407,"t":{"93":{"position":[[344,6],[3468,6],[5029,6]]},"513":{"position":[[344,6]]}}}],["i.",{"_index":409,"t":{"93":{"position":[[364,5],[5049,5]]},"178":{"position":[[247,4]]},"235":{"position":[[145,6],[513,5]]},"248":{"position":[[229,6]]},"513":{"position":[[364,5]]},"661":{"position":[[135,4]]},"762":{"position":[[212,5]]},"764":{"position":[[610,5]]},"768":{"position":[[411,4]]},"781":{"position":[[1333,5]]},"822":{"position":[[64,5]]},"940":{"position":[[222,4]]},"973":{"position":[[1236,4]]},"975":{"position":[[1680,4]]},"990":{"position":[[116,4]]},"1055":{"position":[[418,4]]},"1086":{"position":[[283,4]]},"1142":{"position":[[252,4]]},"1266":{"position":[[118,4]]},"1358":{"position":[[366,4]]},"1378":{"position":[[277,4]]}}}],["i_butan",{"_index":2329,"t":{"704":{"position":[[1227,9]]},"712":{"position":[[509,9]]},"955":{"position":[[624,9]]},"1000":{"position":[[285,9]]},"1002":{"position":[[219,9]]}}}],["i_pentan",{"_index":2333,"t":{"704":{"position":[[1282,10]]},"712":{"position":[[564,10]]},"955":{"position":[[661,10]]},"1000":{"position":[[337,10]]},"1002":{"position":[[256,10]]}}}],["iconv",{"_index":368,"t":{"81":{"position":[[159,6],[216,5]]}}}],["id",{"_index":2070,"t":{"627":{"position":[[510,3]]},"663":{"position":[[610,2]]}}}],["idea",{"_index":235,"t":{"59":{"position":[[695,4]]},"661":{"position":[[1219,5],[1284,5],[1323,4]]}}}],["ident",{"_index":2352,"t":{"710":{"position":[[1102,10]]},"920":{"position":[[903,9]]},"984":{"position":[[427,10]]},"1098":{"position":[[270,9]]}}}],["identifi",{"_index":2302,"t":{"696":{"position":[[102,11]]},"719":{"position":[[199,11]]}}}],["ie",{"_index":686,"t":{"145":{"position":[[285,3]]},"1403":{"position":[[897,3]]}}}],["ignor",{"_index":147,"t":{"48":{"position":[[53,8]]},"134":{"position":[[158,7]]},"481":{"position":[[2228,6]]},"611":{"position":[[125,8],[228,8]]},"802":{"position":[[2352,8]]},"1407":{"position":[[53,8]]}}}],["illustr",{"_index":720,"t":{"147":{"position":[[1352,11]]},"725":{"position":[[377,13]]},"839":{"position":[[172,11]]},"1047":{"position":[[16,11]]}}}],["imag",{"_index":1616,"t":{"468":{"position":[[284,5]]},"639":{"position":[[961,6],[1063,6]]},"1047":{"position":[[4,5]]}}}],["image](path/to/imag",{"_index":2140,"t":{"639":{"position":[[989,21]]}}}],["img",{"_index":2141,"t":{"639":{"position":[[1011,4]]}}}],["impact",{"_index":2833,"t":{"934":{"position":[[1243,8]]}}}],["implement",{"_index":435,"t":{"93":{"position":[[1725,11],[1803,14]]},"427":{"position":[[0,9]]},"602":{"position":[[317,11]]},"661":{"position":[[1173,14],[1232,14]]},"663":{"position":[[472,9]]},"1082":{"position":[[393,11]]}}}],["impli",{"_index":3088,"t":{"1090":{"position":[[908,5]]}}}],["implicit",{"_index":442,"t":{"93":{"position":[[2220,8]]},"661":{"position":[[587,9]]}}}],["implicitli",{"_index":101,"t":{"44":{"position":[[328,10]]},"1403":{"position":[[371,10]]}}}],["import",{"_index":12,"t":{"2":{"position":[[127,9]]},"10":{"position":[[137,9]]},"34":{"position":[[158,9]]},"71":{"position":[[33,9]]},"102":{"position":[[660,9],[781,10],[1378,9]]},"104":{"position":[[382,9]]},"108":{"position":[[717,9]]},"235":{"position":[[525,9]]},"342":{"position":[[180,9]]},"535":{"position":[[118,9]]},"743":{"position":[[1068,9]]},"800":{"position":[[161,10]]},"930":{"position":[[267,9]]},"934":{"position":[[1519,9]]},"984":{"position":[[189,9]]},"998":{"position":[[278,9],[402,10]]},"1154":{"position":[[0,9]]},"1202":{"position":[[190,9]]}}}],["improv",{"_index":948,"t":{"358":{"position":[[550,7]]},"362":{"position":[[79,7]]},"414":{"position":[[216,7]]},"438":{"position":[[434,7],[531,7]]},"449":{"position":[[998,7],[1089,7]]},"451":{"position":[[179,7]]},"483":{"position":[[899,8]]},"491":{"position":[[437,8]]},"507":{"position":[[0,8]]},"511":{"position":[[41,9]]},"521":{"position":[[41,9]]},"539":{"position":[[41,9]]},"594":{"position":[[383,8]]},"602":{"position":[[722,8]]},"607":{"position":[[439,8]]},"616":{"position":[[265,7]]}}}],["in",{"_index":2974,"t":{"1016":{"position":[[493,3]]},"1435":{"position":[[407,3]]}}}],["includ",{"_index":44,"t":{"10":{"position":[[31,8]]},"18":{"position":[[31,8]]},"44":{"position":[[258,8]]},"93":{"position":[[507,7],[4067,7],[4285,7],[4499,7],[4752,7]]},"95":{"position":[[13,8]]},"141":{"position":[[211,9]]},"149":{"position":[[107,8],[203,7]]},"235":{"position":[[498,8]]},"316":{"position":[[12,8],[64,8]]},"318":{"position":[[0,8],[102,8]]},"320":{"position":[[0,8],[96,8]]},"322":{"position":[[0,8],[179,8]]},"324":{"position":[[0,8],[98,8]]},"375":{"position":[[0,7]]},"379":{"position":[[105,7]]},"408":{"position":[[32,7]]},"414":{"position":[[506,7]]},"481":{"position":[[88,7],[121,9]]},"483":{"position":[[1009,8]]},"573":{"position":[[194,9]]},"602":{"position":[[111,8]]},"607":{"position":[[256,8]]},"653":{"position":[[289,7]]},"665":{"position":[[518,10]]},"743":{"position":[[554,8]]},"751":{"position":[[162,8]]},"753":{"position":[[201,7]]},"768":{"position":[[205,8]]},"802":{"position":[[719,9]]},"811":{"position":[[59,7]]},"864":{"position":[[130,9]]},"880":{"position":[[209,9]]},"920":{"position":[[526,7]]},"1022":{"position":[[71,7]]},"1047":{"position":[[117,8]]},"1053":{"position":[[855,8]]},"1074":{"position":[[58,9]]},"1162":{"position":[[190,7]]},"1403":{"position":[[301,8]]}}}],["incom",{"_index":2236,"t":{"663":{"position":[[656,8]]}}}],["incomprehens",{"_index":312,"t":{"69":{"position":[[79,16]]}}}],["incompress",{"_index":2993,"t":{"1040":{"position":[[25,15]]}}}],["inconsist",{"_index":1576,"t":{"458":{"position":[[141,12]]}}}],["incorrect",{"_index":138,"t":{"44":{"position":[[1057,10]]},"500":{"position":[[747,9]]},"1403":{"position":[[1182,10]]}}}],["incorrectli",{"_index":1748,"t":{"498":{"position":[[1696,14]]},"596":{"position":[[16,11]]},"602":{"position":[[21,11]]},"1042":{"position":[[3188,12]]}}}],["increas",{"_index":446,"t":{"93":{"position":[[2319,9]]},"602":{"position":[[461,8]]},"607":{"position":[[493,8]]},"704":{"position":[[885,8]]},"940":{"position":[[196,8],[338,8]]},"948":{"position":[[505,8]]},"965":{"position":[[1281,8]]},"967":{"position":[[697,10],[835,8],[966,9],[1020,9],[1129,8],[2774,8]]},"982":{"position":[[118,8],[1106,8],[1238,8],[1283,10],[1435,9],[1449,10],[1557,8],[1729,10]]},"986":{"position":[[967,9],[1111,9]]},"988":{"position":[[863,10],[1245,10],[1374,10],[2273,9],[2514,9],[2588,8]]},"990":{"position":[[618,9]]},"1042":{"position":[[491,10]]},"1162":{"position":[[486,8]]},"1374":{"position":[[1031,8]]}}}],["indent",{"_index":321,"t":{"71":{"position":[[13,11],[121,11]]},"77":{"position":[[39,11]]},"639":{"position":[[455,8]]},"800":{"position":[[124,12],[141,11],[200,11]]},"1120":{"position":[[43,9]]}}}],["independ",{"_index":935,"t":{"336":{"position":[[159,12]]},"649":{"position":[[207,11]]},"910":{"position":[[1881,14]]},"946":{"position":[[246,13]]},"975":{"position":[[472,14],[1634,11]]},"1042":{"position":[[3394,13]]},"1053":{"position":[[482,11]]}}}],["indepthli",{"_index":3045,"t":{"1055":{"position":[[34,9]]}}}],["index",{"_index":3130,"t":{"1184":{"position":[[1094,5]]},"1302":{"position":[[1087,5]]}}}],["indic",{"_index":350,"t":{"75":{"position":[[237,8]]},"116":{"position":[[120,10]]},"127":{"position":[[146,8]]},"500":{"position":[[153,9],[207,9]]},"802":{"position":[[2278,8]]},"890":{"position":[[617,9]]},"1090":{"position":[[1468,8],[1540,8],[1621,8],[1733,8],[1805,8],[1863,8]]}}}],["individu",{"_index":253,"t":{"59":{"position":[[1094,10]]},"147":{"position":[[1132,10]]},"486":{"position":[[183,10]]},"602":{"position":[[400,12]]},"839":{"position":[[471,10]]},"940":{"position":[[377,12]]},"984":{"position":[[309,10]]},"988":{"position":[[179,10]]},"1059":{"position":[[282,10]]},"1162":{"position":[[520,10]]}}}],["individual_asv_pressur",{"_index":1715,"t":{"486":{"position":[[404,23]]},"965":{"position":[[199,24]]},"967":{"position":[[2902,24]]},"977":{"position":[[68,23]]},"988":{"position":[[391,23],[1934,24]]},"1328":{"position":[[208,23]]},"1330":{"position":[[157,24]]},"1332":{"position":[[96,23]]}}}],["individual_asv_r",{"_index":907,"t":{"295":{"position":[[833,20],[920,20]]},"330":{"position":[[218,20]]},"332":{"position":[[218,19]]},"486":{"position":[[349,19]]},"531":{"position":[[130,19],[163,19]]},"965":{"position":[[224,19]]},"967":{"position":[[2927,20]]},"977":{"position":[[92,19]]},"979":{"position":[[572,19],[640,19]]},"988":{"position":[[415,19],[2205,20]]},"1172":{"position":[[679,19],[747,19]]},"1222":{"position":[[220,20]]},"1224":{"position":[[218,19]]},"1328":{"position":[[232,19]]},"1330":{"position":[[182,20]]},"1399":{"position":[[404,19],[472,19]]}}}],["infeas",{"_index":842,"t":{"248":{"position":[[218,10],[621,11]]},"764":{"position":[[1224,10]]}}}],["infinit",{"_index":1665,"t":{"476":{"position":[[1619,8]]}}}],["influenc",{"_index":2912,"t":{"982":{"position":[[1306,9],[1607,11]]}}}],["influence_time_vector",{"_index":556,"t":{"102":{"position":[[282,22],[556,22]]},"118":{"position":[[140,21]]},"299":{"position":[[14,21]]},"301":{"position":[[200,21]]},"303":{"position":[[0,22]]},"1020":{"position":[[128,22],[357,22]]},"1022":{"position":[[31,21]]},"1024":{"position":[[271,22]]},"1066":{"position":[[432,21]]},"1072":{"position":[[895,21]]},"1439":{"position":[[382,21]]},"1441":{"position":[[206,22]]}}}],["info",{"_index":151,"t":{"50":{"position":[[0,4]]},"65":{"position":[[0,4]]},"394":{"position":[[26,4]]},"614":{"position":[[129,4]]},"627":{"position":[[424,4]]},"641":{"position":[[355,4]]},"665":{"position":[[391,4]]},"669":{"position":[[271,4]]},"1064":{"position":[[58,4],[270,5]]}}}],["inform",{"_index":114,"t":{"44":{"position":[[607,11]]},"93":{"position":[[2120,12]]},"143":{"position":[[84,11]]},"147":{"position":[[114,11]]},"336":{"position":[[172,11]]},"362":{"position":[[156,12]]},"447":{"position":[[128,11]]},"476":{"position":[[2143,12]]},"600":{"position":[[251,11]]},"651":{"position":[[213,11]]},"665":{"position":[[342,11]]},"747":{"position":[[89,12]]},"809":{"position":[[802,12]]},"946":{"position":[[517,12]]},"990":{"position":[[71,11]]},"1042":{"position":[[168,11],[3624,11]]},"1053":{"position":[[1147,12]]},"1064":{"position":[[753,11]]},"1070":{"position":[[16,11]]},"1403":{"position":[[634,11]]}}}],["ingo",{"_index":904,"t":{"295":{"position":[[576,7]]},"969":{"position":[[101,7]]},"971":{"position":[[373,7],[481,7],[853,7]]},"973":{"position":[[132,7],[562,7],[732,7]]},"979":{"position":[[139,7],[202,7]]},"1170":{"position":[[145,7],[253,7]]},"1172":{"position":[[144,7],[207,7]]},"1395":{"position":[[359,7],[529,7]]},"1397":{"position":[[304,7]]},"1413":{"position":[[303,7]]},"1419":{"position":[[247,7]]},"1421":{"position":[[140,7],[248,7]]},"1423":{"position":[[139,7],[202,7]]}}}],["ingoing/outgo",{"_index":1749,"t":{"500":{"position":[[15,16]]}}}],["inherit",{"_index":2186,"t":{"659":{"position":[[229,11]]},"859":{"position":[[497,7]]}}}],["init",{"_index":1189,"t":{"425":{"position":[[4,4]]}}}],["initi",{"_index":1645,"t":{"471":{"position":[[0,7]]},"500":{"position":[[1097,11]]}}}],["inject",{"_index":221,"t":{"59":{"position":[[439,9]]},"543":{"position":[[866,9],[963,9],[1060,9]]},"555":{"position":[[1165,9]]},"559":{"position":[[218,9],[286,9],[793,9]]},"563":{"position":[[165,9],[1488,9],[1582,9],[1804,9],[2026,9],[2817,9]]},"565":{"position":[[3127,9]]},"696":{"position":[[517,9],[587,9]]},"710":{"position":[[748,9],[1383,9]]},"719":{"position":[[465,9],[539,9],[685,9],[782,9],[877,9]]},"733":{"position":[[218,9],[258,9],[287,9],[545,9],[728,9]]},"737":{"position":[[233,9],[355,9],[545,9],[1621,9],[1693,9],[1808,9],[1912,9],[1969,8],[2505,9]]},"739":{"position":[[1615,9],[2232,9]]},"814":{"position":[[23,9],[58,9],[108,9]]},"839":{"position":[[885,9]]},"910":{"position":[[2507,9]]},"975":{"position":[[2045,9]]},"984":{"position":[[1057,10]]},"1090":{"position":[[709,9]]}}}],["injection_compressor",{"_index":2732,"t":{"851":{"position":[[211,20]]},"1102":{"position":[[211,20]]},"1118":{"position":[[211,20]]},"1186":{"position":[[211,20]]},"1309":{"position":[[211,20]]}}}],["injection_compressor_refer",{"_index":2733,"t":{"851":{"position":[[250,30]]},"1102":{"position":[[250,30]]},"1118":{"position":[[250,30]]},"1186":{"position":[[250,30]]},"1309":{"position":[[250,30]]}}}],["inlet",{"_index":876,"t":{"271":{"position":[[102,5]]},"273":{"position":[[80,6]]},"295":{"position":[[404,6],[623,6]]},"430":{"position":[[15,5]]},"436":{"position":[[36,5]]},"445":{"position":[[186,5]]},"498":{"position":[[1088,6]]},"594":{"position":[[14,5],[153,5]]},"764":{"position":[[682,5]]},"781":{"position":[[206,5]]},"841":{"position":[[475,5]]},"910":{"position":[[860,5]]},"926":{"position":[[1467,5],[1484,6]]},"942":{"position":[[182,6]]},"950":{"position":[[91,5],[275,6],[455,6]]},"952":{"position":[[1035,6]]},"965":{"position":[[425,6],[685,6]]},"967":{"position":[[1614,6],[2026,6]]},"971":{"position":[[279,5],[681,6],[1087,6],[1712,6]]},"973":{"position":[[1132,5]]},"977":{"position":[[281,5]]},"982":{"position":[[1078,5],[1132,5],[1323,5]]},"984":{"position":[[1125,5]]},"986":{"position":[[910,5],[941,5]]},"1042":{"position":[[1890,5],[2181,5],[2889,5],[4045,5]]},"1053":{"position":[[645,5]]},"1165":{"position":[[185,6]]},"1170":{"position":[[453,6]]},"1178":{"position":[[185,6]]},"1260":{"position":[[253,6]]},"1268":{"position":[[379,6]]},"1393":{"position":[[104,6]]},"1397":{"position":[[132,6],[538,6]]},"1413":{"position":[[131,6],[352,6]]}}}],["inlet/outlet",{"_index":2669,"t":{"809":{"position":[[350,12]]}}}],["inlet_temperatur",{"_index":874,"t":{"269":{"position":[[9,17]]},"273":{"position":[[61,18]]},"275":{"position":[[65,18]]},"295":{"position":[[385,18],[604,18]]},"498":{"position":[[1069,18]]},"553":{"position":[[1245,18],[1330,18],[1415,18]]},"565":{"position":[[1534,18],[1619,18],[1704,18]]},"704":{"position":[[1737,18]]},"712":{"position":[[1019,18]]},"932":{"position":[[252,18]]},"942":{"position":[[163,18]]},"950":{"position":[[256,18],[436,18]]},"952":{"position":[[1016,18]]},"955":{"position":[[860,18]]},"957":{"position":[[478,18]]},"959":{"position":[[775,18],[853,18]]},"961":{"position":[[418,18]]},"965":{"position":[[406,18],[666,18]]},"967":{"position":[[1595,18],[2007,18]]},"971":{"position":[[662,18],[1068,18],[1693,18]]},"979":{"position":[[317,18],[397,18],[453,18],[713,18]]},"1165":{"position":[[166,18]]},"1167":{"position":[[128,18]]},"1170":{"position":[[434,18]]},"1172":{"position":[[322,18],[453,18],[560,18],[820,18]]},"1178":{"position":[[166,18]]},"1180":{"position":[[128,18]]},"1260":{"position":[[234,18]]},"1268":{"position":[[360,18]]},"1270":{"position":[[225,18]]},"1393":{"position":[[85,18]]},"1397":{"position":[[113,18],[519,18]]},"1399":{"position":[[149,18],[229,18],[285,18],[545,18]]},"1413":{"position":[[112,18],[333,18]]},"1415":{"position":[[148,18]]}}}],["inlin",{"_index":1722,"t":{"491":{"position":[[503,6]]},"639":{"position":[[513,8]]}}}],["inner",{"_index":178,"t":{"55":{"position":[[219,6]]}}}],["innov",{"_index":192,"t":{"57":{"position":[[87,10]]}}}],["input",{"_index":143,"t":{"48":{"position":[[9,5]]},"71":{"position":[[92,6]]},"75":{"position":[[206,6]]},"93":{"position":[[2642,5],[2786,5],[5120,5],[5201,5]]},"104":{"position":[[344,6]]},"118":{"position":[[101,5]]},"134":{"position":[[67,5]]},"136":{"position":[[65,5]]},"145":{"position":[[279,5],[335,5],[505,5]]},"149":{"position":[[284,5]]},"153":{"position":[[107,6]]},"163":{"position":[[31,5],[158,5],[243,6],[314,5]]},"165":{"position":[[13,5],[126,5],[197,5],[395,6]]},"171":{"position":[[14,5]]},"178":{"position":[[13,5]]},"184":{"position":[[49,5]]},"271":{"position":[[66,5]]},"283":{"position":[[119,6],[545,5]]},"301":{"position":[[37,5]]},"358":{"position":[[320,5]]},"392":{"position":[[231,5]]},"403":{"position":[[56,5]]},"406":{"position":[[192,5]]},"414":{"position":[[292,5],[468,5]]},"427":{"position":[[79,5],[307,5]]},"430":{"position":[[86,5]]},"434":{"position":[[154,5]]},"438":{"position":[[481,5],[579,5]]},"468":{"position":[[562,5]]},"483":{"position":[[846,5]]},"500":{"position":[[909,6],[987,6]]},"545":{"position":[[61,6],[108,5],[137,5]]},"549":{"position":[[15,5]]},"563":{"position":[[724,5]]},"579":{"position":[[67,6]]},"581":{"position":[[110,6]]},"594":{"position":[[58,5]]},"607":{"position":[[77,5],[407,5]]},"611":{"position":[[50,5]]},"616":{"position":[[307,5]]},"618":{"position":[[56,5]]},"698":{"position":[[65,5],[80,6],[93,6],[110,5]]},"704":{"position":[[277,5],[355,5]]},"708":{"position":[[73,6]]},"710":{"position":[[1904,5],[2005,8]]},"721":{"position":[[61,6],[108,5],[137,5]]},"725":{"position":[[15,5],[478,5],[520,5]]},"737":{"position":[[1762,5]]},"743":{"position":[[136,5],[163,5],[267,5],[435,5],[579,5],[659,5],[835,6],[980,6],[1078,6]]},"745":{"position":[[106,5],[233,5],[318,6],[389,5]]},"747":{"position":[[14,5],[66,6]]},"749":{"position":[[13,5],[126,5],[197,5]]},"768":{"position":[[266,5]]},"781":{"position":[[312,8],[1164,5]]},"798":{"position":[[582,5]]},"802":{"position":[[53,6],[211,5],[290,5],[661,5],[779,5]]},"805":{"position":[[42,7]]},"809":{"position":[[123,7]]},"822":{"position":[[574,5]]},"826":{"position":[[295,5]]},"843":{"position":[[169,6]]},"849":{"position":[[221,7]]},"861":{"position":[[158,5]]},"871":{"position":[[25,5]]},"880":{"position":[[111,7]]},"882":{"position":[[120,6]]},"890":{"position":[[152,7]]},"896":{"position":[[186,5],[221,5]]},"898":{"position":[[128,6]]},"904":{"position":[[157,5],[257,5]]},"910":{"position":[[965,5],[1000,8]]},"912":{"position":[[330,5]]},"918":{"position":[[311,5]]},"920":{"position":[[494,5],[764,5]]},"924":{"position":[[614,5]]},"926":{"position":[[969,5],[1060,5],[1546,8]]},"934":{"position":[[414,5],[623,8],[703,5]]},"940":{"position":[[145,6]]},"946":{"position":[[738,5]]},"952":{"position":[[213,5],[560,5]]},"986":{"position":[[181,6],[235,7],[305,6],[357,7]]},"1004":{"position":[[660,5],[695,5]]},"1010":{"position":[[191,5]]},"1014":{"position":[[313,5]]},"1016":{"position":[[111,6],[936,5]]},"1018":{"position":[[185,6]]},"1020":{"position":[[236,5]]},"1022":{"position":[[13,5]]},"1051":{"position":[[62,8]]},"1057":{"position":[[113,5]]},"1066":{"position":[[140,7],[157,6],[415,5],[1261,5]]},"1072":{"position":[[878,5]]},"1074":{"position":[[170,7],[187,6]]},"1078":{"position":[[104,5],[427,5]]},"1082":{"position":[[110,5],[220,6]]},"1086":{"position":[[13,5]]},"1090":{"position":[[244,5],[353,5]]},"1108":{"position":[[162,6]]},"1116":{"position":[[147,7]]},"1138":{"position":[[51,5]]},"1142":{"position":[[13,5]]},"1154":{"position":[[44,5],[148,5]]},"1158":{"position":[[179,5],[365,6]]},"1162":{"position":[[158,5]]},"1248":{"position":[[133,8]]},"1258":{"position":[[199,8],[306,5]]},"1274":{"position":[[61,5],[208,5]]},"1338":{"position":[[118,7]]},"1374":{"position":[[251,5],[635,5],[1074,6],[1344,5]]},"1376":{"position":[[254,5]]},"1407":{"position":[[9,5]]},"1427":{"position":[[304,8]]},"1435":{"position":[[25,6]]},"1437":{"position":[[119,5]]},"1466":{"position":[[333,8]]}}}],["input;.is_valid",{"_index":703,"t":{"147":{"position":[[249,15]]}}}],["name>:.yml",{"_index":371,"t":{"81":{"position":[[256,31],[360,32]]}}}],["next",{"_index":714,"t":{"147":{"position":[[913,4]]},"283":{"position":[[1169,4]]},"483":{"position":[[103,4]]},"495":{"position":[[101,4]]},"828":{"position":[[570,4]]},"973":{"position":[[992,4]]},"1120":{"position":[[30,4]]},"1395":{"position":[[789,4]]}}}],["nice",{"_index":1768,"t":{"505":{"position":[[60,4]]}}}],["nitrogen",{"_index":2320,"t":{"704":{"position":[[1100,9]]},"712":{"position":[[382,9]]},"955":{"position":[[539,9]]},"990":{"position":[[312,8]]},"1000":{"position":[[154,9]]},"1002":{"position":[[134,9]]}}}],["nmvoc",{"_index":1484,"t":{"449":{"position":[[129,5]]},"602":{"position":[[0,5],[150,6]]}}}],["nnn",{"_index":3013,"t":{"1042":{"position":[[1243,3],[1792,3]]}}}],["no_flow",{"_index":1202,"t":{"425":{"position":[[239,7]]}}}],["no_flow_r",{"_index":2024,"t":{"600":{"position":[[22,12]]}}}],["node",{"_index":1088,"t":{"406":{"position":[[85,5]]},"416":{"position":[[265,5]]},"425":{"position":[[536,4]]},"627":{"position":[[382,5],[489,5]]},"802":{"position":[[437,4]]},"809":{"position":[[309,4]]}}}],["nodejs.org",{"_index":2065,"t":{"627":{"position":[[402,10]]}}}],["non",{"_index":576,"t":{"104":{"position":[[58,3]]},"476":{"position":[[1173,3],[1615,3]]},"483":{"position":[[188,3]]},"498":{"position":[[1457,3]]},"802":{"position":[[1811,3]]},"828":{"position":[[839,3]]}}}],["none",{"_index":47,"t":{"10":{"position":[[132,4]]},"18":{"position":[[161,4]]},"42":{"position":[[42,4],[47,4]]},"75":{"position":[[317,4],[351,4]]},"116":{"position":[[136,4]]},"151":{"position":[[79,4]]},"161":{"position":[[55,4]]},"269":{"position":[[73,4]]},"491":{"position":[[121,4]]},"577":{"position":[[117,4]]},"585":{"position":[[71,4]]},"604":{"position":[[0,4]]},"967":{"position":[[2962,5]]},"1066":{"position":[[585,5]]},"1072":{"position":[[1048,5]]},"1088":{"position":[[135,4]]},"1096":{"position":[[96,4]]},"1104":{"position":[[126,4]]},"1112":{"position":[[121,4]]},"1122":{"position":[[112,4]]},"1130":{"position":[[113,4]]},"1136":{"position":[[89,4]]},"1152":{"position":[[124,4]]},"1182":{"position":[[138,4]]},"1210":{"position":[[151,4]]},"1236":{"position":[[102,4]]},"1328":{"position":[[263,4]]},"1330":{"position":[[217,5]]}}}],["none|year|month|day",{"_index":3062,"t":{"1066":{"position":[[273,22]]},"1072":{"position":[[736,22]]}}}],["normal",{"_index":113,"t":{"44":{"position":[[563,8]]},"934":{"position":[[1214,8]]},"998":{"position":[[334,10]]},"1090":{"position":[[2111,8],[2164,8]]},"1403":{"position":[[591,8]]}}}],["notat",{"_index":1446,"t":{"445":{"position":[[598,8]]}}}],["note",{"_index":180,"t":{"55":{"position":[[255,4]]},"295":{"position":[[0,4]]},"549":{"position":[[277,4]]},"557":{"position":[[417,4]]},"639":{"position":[[1166,4]]},"725":{"position":[[391,4]]},"745":{"position":[[0,4]]},"751":{"position":[[359,4]]},"768":{"position":[[131,4]]},"798":{"position":[[546,4],[551,4]]},"818":{"position":[[0,4]]},"824":{"position":[[0,4]]},"828":{"position":[[624,4]]},"869":{"position":[[0,4]]},"874":{"position":[[0,4]]},"904":{"position":[[0,4]]},"910":{"position":[[982,5]]},"920":{"position":[[716,4]]},"926":{"position":[[1340,4]]},"930":{"position":[[280,4]]},"975":{"position":[[0,4]]},"988":{"position":[[446,4]]},"1016":{"position":[[0,4]]},"1026":{"position":[[0,4]]},"1090":{"position":[[339,4],[841,4]]},"1098":{"position":[[89,4]]},"1120":{"position":[[0,4]]},"1154":{"position":[[641,4]]},"1184":{"position":[[1075,4]]},"1238":{"position":[[122,4],[127,4]]},"1302":{"position":[[1068,4]]},"1358":{"position":[[462,4]]},"1374":{"position":[[1164,4]]},"1376":{"position":[[13,5],[232,4]]},"1378":{"position":[[115,4]]},"1409":{"position":[[32,4]]},"1427":{"position":[[270,4]]}}}],["noth",{"_index":1872,"t":{"563":{"position":[[645,7]]}}}],["now",{"_index":374,"t":{"81":{"position":[[320,3]]},"93":{"position":[[1916,3],[2494,3],[3380,3],[3513,3],[3793,3]]},"95":{"position":[[297,3],[436,3],[747,3],[1716,3],[1994,3],[2535,3],[2702,3]]},"102":{"position":[[450,4],[801,3]]},"104":{"position":[[369,3],[582,3]]},"106":{"position":[[87,3],[253,3]]},"116":{"position":[[22,3]]},"118":{"position":[[698,3],[1122,3]]},"120":{"position":[[260,3]]},"124":{"position":[[106,3],[312,3]]},"127":{"position":[[11,3]]},"141":{"position":[[511,4]]},"145":{"position":[[971,3]]},"271":{"position":[[182,4]]},"342":{"position":[[316,3]]},"358":{"position":[[208,3],[605,3]]},"362":{"position":[[138,3]]},"483":{"position":[[958,3]]},"486":{"position":[[295,4]]},"488":{"position":[[21,3]]},"491":{"position":[[523,3]]},"500":{"position":[[82,3],[139,3],[203,3],[553,3],[737,3],[838,3]]},"503":{"position":[[10,3]]},"507":{"position":[[193,3]]},"515":{"position":[[203,3],[342,3]]},"529":{"position":[[420,3]]},"531":{"position":[[212,3]]},"535":{"position":[[158,3]]},"545":{"position":[[446,3]]},"563":{"position":[[8,3]]},"594":{"position":[[225,3]]},"602":{"position":[[133,3]]},"611":{"position":[[118,3]]},"661":{"position":[[1091,3],[1161,4]]},"663":{"position":[[785,4]]},"692":{"position":[[877,3]]},"721":{"position":[[416,3]]},"737":{"position":[[8,3]]},"973":{"position":[[1196,4]]},"977":{"position":[[176,3]]}}}],["nox",{"_index":2029,"t":{"602":{"position":[[120,4]]}}}],["num",{"_index":1372,"t":{"436":{"position":[[692,3]]}}}],["number",{"_index":480,"t":{"93":{"position":[[3437,7],[3570,7]]},"145":{"position":[[164,8],[568,7],[654,7],[816,7],[923,6]]},"147":{"position":[[780,6]]},"169":{"position":[[159,7]]},"235":{"position":[[49,6]]},"259":{"position":[[346,7]]},"311":{"position":[[174,9]]},"368":{"position":[[79,6]]},"445":{"position":[[607,7]]},"507":{"position":[[90,6]]},"655":{"position":[[288,7],[328,6]]},"669":{"position":[[498,8],[524,6]]},"675":{"position":[[96,7],[217,7]]},"679":{"position":[[146,7]]},"692":{"position":[[334,7],[847,7]]},"694":{"position":[[493,7]]},"704":{"position":[[753,6]]},"737":{"position":[[738,6],[805,6],[3568,6],[3635,6]]},"739":{"position":[[1808,6],[1875,6],[2745,6],[2812,6]]},"855":{"position":[[642,6],[703,6]]},"857":{"position":[[681,9]]},"916":{"position":[[340,7]]},"922":{"position":[[343,7],[572,7]]},"928":{"position":[[179,8]]},"936":{"position":[[172,8]]},"952":{"position":[[9,6],[150,6],[239,6]]},"1004":{"position":[[252,7]]},"1184":{"position":[[975,6]]},"1191":{"position":[[146,7]]},"1198":{"position":[[149,7],[378,7]]},"1227":{"position":[[366,7]]},"1264":{"position":[[89,6],[184,6]]},"1290":{"position":[[1292,6],[1327,6]]},"1302":{"position":[[968,6]]},"1380":{"position":[[40,6]]}}}],["numbers/result",{"_index":674,"t":{"145":{"position":[[7,14]]}}}],["numer",{"_index":1696,"t":{"483":{"position":[[207,7],[279,7],[477,7]]},"609":{"position":[[23,9]]},"621":{"position":[[56,9]]}}}],["numeric_method",{"_index":1643,"t":{"468":{"position":[[1305,15]]}}}],["numpi",{"_index":1438,"t":{"445":{"position":[[433,5]]},"449":{"position":[[1173,5],[1214,5],[1234,5]]},"458":{"position":[[80,5]]}}}],["nvm",{"_index":2066,"t":{"627":{"position":[[420,3]]}}}],["o",{"_index":300,"t":{"67":{"position":[[635,1]]},"81":{"position":[[254,1]]},"1066":{"position":[[684,2]]}}}],["object",{"_index":344,"t":{"75":{"position":[[107,6],[178,8]]},"427":{"position":[[552,6]]},"451":{"position":[[77,6]]},"495":{"position":[[275,6]]},"659":{"position":[[262,6]]}}}],["obsolet",{"_index":2239,"t":{"663":{"position":[[776,8]]}}}],["obtain",{"_index":2879,"t":{"973":{"position":[[831,9]]},"1047":{"position":[[234,6]]},"1154":{"position":[[513,6]]},"1387":{"position":[[180,6]]},"1395":{"position":[[628,9]]}}}],["obviou",{"_index":2218,"t":{"661":{"position":[[1002,7],[1053,7]]}}}],["oc",{"_index":878,"t":{"271":{"position":[[172,3]]}}}],["occur",{"_index":2943,"t":{"990":{"position":[[386,6]]},"1090":{"position":[[1000,6]]}}}],["offer",{"_index":241,"t":{"59":{"position":[[891,8]]},"63":{"position":[[215,8]]},"751":{"position":[[403,5]]}}}],["offici",{"_index":153,"t":{"50":{"position":[[24,10]]},"55":{"position":[[286,10]]}}}],["offset",{"_index":574,"t":{"102":{"position":[[1622,6]]}}}],["offshor",{"_index":602,"t":{"108":{"position":[[793,8]]},"476":{"position":[[27,8],[68,8],[254,8]]},"523":{"position":[[209,8]]},"1047":{"position":[[76,8]]},"1090":{"position":[[1412,8]]}}}],["oh",{"_index":2253,"t":{"669":{"position":[[163,2]]}}}],["oil",{"_index":201,"t":{"59":{"position":[[93,3]]},"235":{"position":[[59,3],[325,3],[349,3],[420,3]]},"383":{"position":[[81,3]]},"543":{"position":[[208,3]]},"708":{"position":[[264,3]]},"719":{"position":[[85,3]]},"729":{"position":[[427,3],[1111,3]]},"739":{"position":[[738,3]]},"900":{"position":[[150,3]]},"990":{"position":[[437,5]]},"1047":{"position":[[85,3]]},"1053":{"position":[[896,3],[939,3],[1032,3]]},"1090":{"position":[[1549,3],[1630,3]]},"1128":{"position":[[76,3]]}}}],["oil/ga",{"_index":2630,"t":{"794":{"position":[[153,8]]}}}],["oil_prod",{"_index":1783,"t":{"543":{"position":[[212,10]]},"567":{"position":[[750,9]]},"708":{"position":[[268,10]]},"719":{"position":[[89,10]]},"741":{"position":[[736,9]]}}}],["oil_rate_per_timestep",{"_index":495,"t":{"93":{"position":[[4151,21],[4369,21],[4583,21],[4907,21]]}}}],["old",{"_index":457,"t":{"93":{"position":[[2532,3]]},"95":{"position":[[2679,3]]},"102":{"position":[[980,3]]},"478":{"position":[[138,3]]},"483":{"position":[[554,3]]},"607":{"position":[[548,3]]},"621":{"position":[[98,3]]}}}],["old_setup_file_name_utf",{"_index":372,"t":{"81":{"position":[[288,24]]}}}],["omit",{"_index":2260,"t":{"669":{"position":[[565,7]]}}}],["on",{"_index":64,"t":{"28":{"position":[[13,3]]},"79":{"position":[[144,3]]},"102":{"position":[[846,3],[853,3]]},"129":{"position":[[77,3]]},"147":{"position":[[830,3]]},"215":{"position":[[262,3]]},"248":{"position":[[337,3]]},"256":{"position":[[20,3],[321,3]]},"301":{"position":[[177,3]]},"360":{"position":[[127,3],[279,3]]},"392":{"position":[[69,3]]},"425":{"position":[[1149,3]]},"449":{"position":[[851,3]]},"483":{"position":[[1191,3]]},"486":{"position":[[64,3]]},"498":{"position":[[1261,3],[1545,3]]},"500":{"position":[[1327,3]]},"541":{"position":[[77,3]]},"543":{"position":[[313,3]]},"559":{"position":[[9,3]]},"561":{"position":[[9,3]]},"575":{"position":[[118,3]]},"607":{"position":[[535,4]]},"616":{"position":[[69,3]]},"621":{"position":[[224,3],[264,3]]},"661":{"position":[[428,3],[970,3],[996,3],[1305,3]]},"663":{"position":[[192,3]]},"710":{"position":[[9,3],[1010,3]]},"719":{"position":[[33,3]]},"727":{"position":[[30,3]]},"733":{"position":[[9,3]]},"751":{"position":[[213,3]]},"785":{"position":[[33,3]]},"794":{"position":[[351,3],[449,3]]},"802":{"position":[[1068,3],[1367,3],[1896,3],[1958,3]]},"818":{"position":[[332,3]]},"826":{"position":[[29,3]]},"859":{"position":[[172,3]]},"910":{"position":[[267,3],[559,3],[2422,3]]},"914":{"position":[[65,3]]},"934":{"position":[[968,3],[1445,3]]},"946":{"position":[[609,3],[670,3]]},"952":{"position":[[52,3],[472,3]]},"963":{"position":[[53,3]]},"971":{"position":[[1260,3]]},"973":{"position":[[548,3]]},"975":{"position":[[54,3],[64,5],[1533,3]]},"984":{"position":[[238,3],[625,3]]},"988":{"position":[[143,3],[461,3],[490,3]]},"998":{"position":[[314,3]]},"1016":{"position":[[208,3],[259,3]]},"1022":{"position":[[9,3]]},"1042":{"position":[[159,3],[2356,3],[2637,3],[4028,3],[4131,3]]},"1055":{"position":[[231,3],[439,3],[489,3]]},"1170":{"position":[[626,3]]},"1184":{"position":[[57,3]]},"1238":{"position":[[215,3]]},"1290":{"position":[[573,3],[830,3],[1057,3],[1128,3]]},"1292":{"position":[[12,3],[137,3]]},"1294":{"position":[[12,3],[216,3]]},"1296":{"position":[[12,3],[302,3]]},"1298":{"position":[[12,3],[314,3]]},"1300":{"position":[[92,3],[303,3]]},"1358":{"position":[[12,3],[233,3]]},"1387":{"position":[[139,3]]},"1395":{"position":[[345,3]]},"1397":{"position":[[711,3]]},"1413":{"position":[[525,3]]},"1435":{"position":[[122,3],[173,3]]},"1439":{"position":[[541,3]]}}}],["onc",{"_index":267,"t":{"63":{"position":[[106,4]]},"295":{"position":[[83,4]]},"651":{"position":[[0,4]]}}}],["onshor",{"_index":1658,"t":{"476":{"position":[[444,7],[753,7]]}}}],["onshore_pow",{"_index":1662,"t":{"476":{"position":[[708,13]]},"481":{"position":[[706,13]]}}}],["onto",{"_index":2294,"t":{"694":{"position":[[889,4]]}}}],["open",{"_index":453,"t":{"93":{"position":[[2439,4]]},"95":{"position":[[2312,4]]},"647":{"position":[[26,4]]},"649":{"position":[[177,4]]},"653":{"position":[[26,4]]},"692":{"position":[[51,4]]}}}],["oper",{"_index":444,"t":{"93":{"position":[[2258,8]]},"116":{"position":[[45,11],[148,11],[261,11]]},"143":{"position":[[103,9]]},"145":{"position":[[746,7]]},"147":{"position":[[481,9],[503,11]]},"163":{"position":[[408,9]]},"427":{"position":[[236,11],[400,11]]},"430":{"position":[[208,11]]},"438":{"position":[[717,11]]},"445":{"position":[[50,11],[843,11]]},"449":{"position":[[476,11]]},"483":{"position":[[1266,11]]},"529":{"position":[[395,11]]},"600":{"position":[[67,11]]},"710":{"position":[[615,11],[2061,11],[2099,11]]},"745":{"position":[[483,9]]},"764":{"position":[[275,11]]},"781":{"position":[[139,11],[1667,11]]},"811":{"position":[[80,9],[120,9],[200,9],[268,9],[293,8]]},"849":{"position":[[321,12]]},"864":{"position":[[212,11]]},"888":{"position":[[152,11]]},"890":{"position":[[307,12],[467,11],[497,11],[636,11]]},"910":{"position":[[413,11],[793,11]]},"982":{"position":[[612,9],[748,9],[820,9],[1004,9],[1366,9],[1647,9]]},"984":{"position":[[613,8],[819,8]]},"1040":{"position":[[758,11],[920,9],[941,11]]},"1042":{"position":[[774,11]]},"1055":{"position":[[380,7]]},"1057":{"position":[[577,11]]},"1059":{"position":[[103,11]]},"1116":{"position":[[235,12]]},"1154":{"position":[[711,9]]},"1290":{"position":[[19,11],[980,11]]},"1292":{"position":[[141,11]]},"1294":{"position":[[220,11]]},"1296":{"position":[[162,11]]},"1298":{"position":[[168,11]]},"1300":{"position":[[357,11],[407,11],[497,11]]},"1358":{"position":[[237,11],[337,11]]},"1374":{"position":[[121,10],[856,9]]}}}],["operational_set",{"_index":1880,"t":{"563":{"position":[[1312,21],[2345,21]]},"565":{"position":[[2943,21],[3446,21]]},"571":{"position":[[223,20]]},"710":{"position":[[1571,21],[2446,21]]},"712":{"position":[[1565,21],[1949,21]]},"849":{"position":[[299,21]]},"851":{"position":[[332,21]]},"890":{"position":[[285,21],[350,20]]},"892":{"position":[[205,21]]},"1116":{"position":[[213,21],[262,20]]},"1120":{"position":[[291,21]]},"1182":{"position":[[45,20],[117,20]]},"1186":{"position":[[332,21]]},"1210":{"position":[[130,20]]},"1212":{"position":[[79,20]]},"1288":{"position":[[45,20]]},"1309":{"position":[[332,21],[934,21]]},"1342":{"position":[[364,21]]},"1360":{"position":[[199,21]]},"1362":{"position":[[203,21]]},"1427":{"position":[[77,20]]}}}],["opportun",{"_index":259,"t":{"61":{"position":[[213,13]]}}}],["opposit",{"_index":704,"t":{"147":{"position":[[330,8]]},"1376":{"position":[[290,8]]}}}],["optim",{"_index":1136,"t":{"416":{"position":[[148,9]]},"427":{"position":[[500,12]]}}}],["option",{"_index":159,"t":{"50":{"position":[[110,7]]},"53":{"position":[[21,6]]},"55":{"position":[[26,6]]},"65":{"position":[[352,7]]},"67":{"position":[[449,7]]},"83":{"position":[[279,7]]},"95":{"position":[[1768,9],[1917,9],[2741,6]]},"102":{"position":[[1059,8]]},"141":{"position":[[231,10]]},"215":{"position":[[322,10]]},"219":{"position":[[178,8]]},"256":{"position":[[236,9]]},"416":{"position":[[4,6]]},"486":{"position":[[47,7],[68,6],[170,7],[227,7]]},"498":{"position":[[1213,10],[1289,9],[1368,9]]},"573":{"position":[[610,8]]},"663":{"position":[[139,9],[155,9],[352,8]]},"743":{"position":[[1048,9]]},"766":{"position":[[78,10]]},"768":{"position":[[20,9]]},"773":{"position":[[93,10]]},"775":{"position":[[49,9]]},"800":{"position":[[283,8]]},"802":{"position":[[493,8]]},"818":{"position":[[392,10]]},"824":{"position":[[571,9]]},"839":{"position":[[20,7],[156,7]]},"855":{"position":[[585,9]]},"857":{"position":[[331,6]]},"859":{"position":[[29,9],[372,11]]},"861":{"position":[[70,9]]},"904":{"position":[[27,8]]},"910":{"position":[[598,7]]},"948":{"position":[[222,9],[290,9],[380,10]]},"950":{"position":[[689,9],[757,9]]},"952":{"position":[[1097,9]]},"965":{"position":[[999,9],[1067,9],[1157,9]]},"967":{"position":[[2492,9],[2560,9],[2650,9]]},"971":{"position":[[1212,10],[1288,9],[1367,9],[2035,9]]},"973":{"position":[[1088,9]]},"975":{"position":[[203,8]]},"984":{"position":[[496,7]]},"986":{"position":[[682,7]]},"988":{"position":[[362,7],[675,7]]},"998":{"position":[[153,8]]},"1006":{"position":[[280,9]]},"1012":{"position":[[424,9]]},"1026":{"position":[[30,8]]},"1042":{"position":[[3748,7]]},"1064":{"position":[[114,6],[171,9],[199,8]]},"1066":{"position":[[53,9],[222,8],[317,7],[1494,6],[1522,7]]},"1068":{"position":[[72,9],[82,8]]},"1070":{"position":[[73,9],[101,8]]},"1072":{"position":[[96,9],[106,8],[527,6],[555,7],[780,7]]},"1074":{"position":[[93,9],[252,8]]},"1090":{"position":[[161,8],[181,8]]},"1116":{"position":[[174,9]]},"1170":{"position":[[578,10],[654,9],[733,9]]},"1258":{"position":[[11,8]]},"1266":{"position":[[11,8]]},"1268":{"position":[[441,9]]},"1313":{"position":[[0,8]]},"1374":{"position":[[1021,6]]},"1397":{"position":[[663,10],[739,9],[818,9]]},"1413":{"position":[[477,10],[553,9],[632,9]]},"1439":{"position":[[196,9],[404,9],[428,9]]},"1468":{"position":[[280,9]]}}}],["order",{"_index":410,"t":{"93":{"position":[[457,5]]},"108":{"position":[[279,5]]},"120":{"position":[[174,5],[234,5]]},"124":{"position":[[237,5]]},"127":{"position":[[493,5]]},"434":{"position":[[216,5]]},"458":{"position":[[216,5]]},"468":{"position":[[568,5]]},"476":{"position":[[1375,5]]},"493":{"position":[[404,5],[482,5]]},"525":{"position":[[49,5]]},"529":{"position":[[132,5]]},"596":{"position":[[154,5]]},"633":{"position":[[208,6]]},"639":{"position":[[836,9]]},"659":{"position":[[31,5]]},"675":{"position":[[3,5]]},"689":{"position":[[3,5]]},"708":{"position":[[163,5]]},"737":{"position":[[3293,5]]},"785":{"position":[[383,5]]}}}],["orient",{"_index":2187,"t":{"659":{"position":[[269,8]]}}}],["origin",{"_index":566,"t":{"102":{"position":[[1411,6]]},"679":{"position":[[118,6]]},"692":{"position":[[819,6]]},"694":{"position":[[236,8],[1051,6]]}}}],["origin/main",{"_index":2290,"t":{"692":{"position":[[760,11]]}}}],["other",{"_index":2712,"t":{"828":{"position":[[261,6]]}}}],["otherwis",{"_index":710,"t":{"147":{"position":[[676,9]]},"639":{"position":[[1271,9]]},"1124":{"position":[[246,9]]}}}],["out",{"_index":571,"t":{"102":{"position":[[1528,3]]},"481":{"position":[[231,3]]},"515":{"position":[[369,3]]},"525":{"position":[[207,3]]},"631":{"position":[[222,3]]},"661":{"position":[[243,4],[1368,3]]},"669":{"position":[[144,3]]},"807":{"position":[[83,3]]},"910":{"position":[[2199,3],[2412,3]]},"934":{"position":[[1576,4]]},"973":{"position":[[33,3]]},"975":{"position":[[1739,3]]},"1419":{"position":[[148,3]]}}}],["outgo",{"_index":1744,"t":{"498":{"position":[[1272,8],[1351,8]]},"969":{"position":[[116,8]]},"971":{"position":[[595,8],[634,8],[1271,8],[1350,8]]},"973":{"position":[[160,8],[716,9],[937,8],[1039,8]]},"975":{"position":[[1895,8]]},"979":{"position":[[266,8]]},"1170":{"position":[[367,8],[406,8],[637,8],[716,8]]},"1172":{"position":[[271,8]]},"1395":{"position":[[513,9],[734,8],[836,8]]},"1397":{"position":[[722,8],[801,8]]},"1413":{"position":[[536,8],[615,8]]},"1419":{"position":[[275,8]]},"1421":{"position":[[362,8]]},"1423":{"position":[[266,8]]}}}],["outlet",{"_index":1277,"t":{"430":{"position":[[26,6]]},"445":{"position":[[195,6]]},"594":{"position":[[25,6],[164,6]]},"764":{"position":[[667,6]]},"781":{"position":[[223,6]]},"841":{"position":[[543,6]]},"910":{"position":[[877,6]]},"967":{"position":[[227,6],[1264,6]]},"971":{"position":[[211,6]]},"973":{"position":[[794,6]]},"977":{"position":[[291,6]]},"982":{"position":[[1264,6],[1464,6]]},"1042":{"position":[[2376,6],[2865,6],[4135,6]]},"1184":{"position":[[667,6]]},"1258":{"position":[[581,6]]},"1302":{"position":[[660,6]]},"1395":{"position":[[591,6]]}}}],["outlin",{"_index":2156,"t":{"641":{"position":[[143,8]]},"944":{"position":[[13,8]]},"1044":{"position":[[18,7]]},"1047":{"position":[[205,7]]}}}],["output",{"_index":96,"t":{"44":{"position":[[274,7],[816,6],[1086,6]]},"67":{"position":[[78,6],[134,6],[148,6],[165,6],[184,6],[266,6],[334,6],[416,6],[480,6],[517,6],[607,6],[724,8]]},"81":{"position":[[85,6]]},"95":{"position":[[2566,6],[2734,6]]},"118":{"position":[[265,6],[340,6],[825,6],[1148,6],[1233,6]]},"120":{"position":[[37,6]]},"143":{"position":[[26,9]]},"145":{"position":[[0,6],[240,6],[440,7],[452,6],[548,7],[955,7]]},"147":{"position":[[216,6],[1316,6]]},"235":{"position":[[116,6]]},"410":{"position":[[78,6]]},"430":{"position":[[116,6]]},"432":{"position":[[895,6]]},"434":{"position":[[184,6]]},"443":{"position":[[0,6]]},"458":{"position":[[176,6]]},"478":{"position":[[26,6]]},"481":{"position":[[535,7],[1472,6],[1524,6],[1602,7],[1770,6],[1986,6]]},"483":{"position":[[18,7]]},"495":{"position":[[205,6],[232,6]]},"498":{"position":[[50,7],[237,7]]},"500":{"position":[[132,6]]},"507":{"position":[[71,6]]},"529":{"position":[[92,6],[245,9],[335,6]]},"594":{"position":[[325,6]]},"609":{"position":[[214,6]]},"618":{"position":[[171,6]]},"743":{"position":[[786,8]]},"890":{"position":[[585,6]]},"896":{"position":[[237,6],[298,6]]},"988":{"position":[[2660,7]]},"1066":{"position":[[237,6],[309,7],[609,6],[660,6],[675,7],[689,6],[751,7],[844,6],[927,7],[1099,7],[1250,6],[1350,7],[1376,6],[1392,7]]},"1072":{"position":[[195,6],[332,6],[352,6],[416,7],[424,6],[440,7],[719,6],[772,7]]},"1158":{"position":[[264,6]]},"1403":{"position":[[317,7],[1140,6],[1283,7]]}}}],["outputfold",{"_index":3064,"t":{"1066":{"position":[[706,12],[725,13]]}}}],["outputfrequ",{"_index":3061,"t":{"1066":{"position":[[257,15]]}}}],["outsid",{"_index":705,"t":{"147":{"position":[[491,7],[534,7]]},"248":{"position":[[236,7]]},"416":{"position":[[617,7]]},"483":{"position":[[1290,7]]},"493":{"position":[[725,7]]},"498":{"position":[[189,7]]},"602":{"position":[[674,7]]},"609":{"position":[[355,7]]},"764":{"position":[[1235,8],[1388,7]]},"781":{"position":[[1253,7]]},"794":{"position":[[330,7]]},"890":{"position":[[439,7]]},"896":{"position":[[209,7]]},"934":{"position":[[896,7]]},"1057":{"position":[[481,7]]}}}],["over",{"_index":451,"t":{"93":{"position":[[2398,4]]},"129":{"position":[[59,4]]},"441":{"position":[[40,4]]},"449":{"position":[[759,4]]},"541":{"position":[[59,4]]},"575":{"position":[[60,4],[151,4]]},"659":{"position":[[224,4],[257,4]]},"888":{"position":[[67,5]]},"988":{"position":[[525,4],[2016,4]]},"1055":{"position":[[746,4]]},"1154":{"position":[[677,4]]},"1184":{"position":[[47,4],[216,4],[328,4],[432,4],[1021,4],[1060,4]]},"1290":{"position":[[944,5]]},"1300":{"position":[[185,4]]},"1302":{"position":[[47,4],[209,4],[321,4],[425,4],[1014,4],[1053,4]]},"1304":{"position":[[37,4],[201,4]]},"1378":{"position":[[464,4]]},"1427":{"position":[[238,4]]}}}],["overal",{"_index":657,"t":{"127":{"position":[[436,7]]},"802":{"position":[[4,7]]}}}],["overdefin",{"_index":2867,"t":{"963":{"position":[[324,11]]}}}],["overrid",{"_index":801,"t":{"219":{"position":[[206,8]]},"859":{"position":[[404,8],[725,8]]}}}],["overshoot",{"_index":3128,"t":{"1184":{"position":[[501,12]]},"1302":{"position":[[494,12]]}}}],["overview",{"_index":889,"t":{"279":{"position":[[368,8]]},"807":{"position":[[48,8]]},"824":{"position":[[529,8]]},"1076":{"position":[[109,8],[159,8]]}}}],["ownership",{"_index":1566,"t":{"455":{"position":[[284,9]]}}}],["p1p_1p1",{"_index":3001,"t":{"1040":{"position":[[530,8]]}}}],["p1p_{1}p1",{"_index":2686,"t":{"816":{"position":[[117,10]]}}}],["p1v1n=p2v2np_\\mathrm{1",{"_index":3009,"t":{"1042":{"position":[[1152,23]]}}}],["p2p_2p2",{"_index":3002,"t":{"1040":{"position":[[543,8]]}}}],["p2p_{2}p2",{"_index":2687,"t":{"816":{"position":[[132,11]]}}}],["p>just",{"_index":2118,"t":{"639":{"position":[[328,7]]}}}],["p_1)}{liquid\\_dens",{"_index":2999,"t":{"1040":{"position":[[466,21]]}}}],["p_\\mathrm{2",{"_index":3011,"t":{"1042":{"position":[[1193,12]]}}}],["p_{1",{"_index":2692,"t":{"816":{"position":[[211,5]]}}}],["p_{2",{"_index":2691,"t":{"816":{"position":[[203,5]]}}}],["packag",{"_index":1249,"t":{"425":{"position":[[1242,8]]},"432":{"position":[[151,7]]},"438":{"position":[[770,7]]}}}],["page",{"_index":315,"t":{"69":{"position":[[117,4]]},"631":{"position":[[93,4],[355,6],[440,6]]},"1076":{"position":[[95,4]]},"1278":{"position":[[320,5]]}}}],["paragraph",{"_index":2117,"t":{"639":{"position":[[300,9]]}}}],["parallel",{"_index":1581,"t":{"460":{"position":[[41,11],[122,11]]},"762":{"position":[[142,9]]},"910":{"position":[[312,8]]},"1098":{"position":[[301,9]]}}}],["paramet",{"_index":875,"t":{"271":{"position":[[72,9]]},"802":{"position":[[296,10]]},"967":{"position":[[153,10]]}}}],["parenthes",{"_index":1496,"t":{"449":{"position":[[632,11]]},"811":{"position":[[462,11]]}}}],["pars",{"_index":338,"t":{"73":{"position":[[254,7]]},"445":{"position":[[581,5],[645,5]]},"669":{"position":[[678,7]]}}}],["part",{"_index":16,"t":{"2":{"position":[[191,4]]},"55":{"position":[[171,6]]},"65":{"position":[[240,4]]},"145":{"position":[[839,5]]},"163":{"position":[[5,4],[185,4]]},"215":{"position":[[5,4],[203,4]]},"663":{"position":[[361,6]]},"687":{"position":[[301,4]]},"745":{"position":[[80,4],[260,4]]},"751":{"position":[[107,4]]},"818":{"position":[[75,4],[273,4]]},"822":{"position":[[279,4]]},"904":{"position":[[131,4],[284,4]]},"910":{"position":[[2378,4]]},"975":{"position":[[291,5],[691,4],[866,5],[1368,4]]},"977":{"position":[[478,4]]},"990":{"position":[[418,4]]},"998":{"position":[[219,4]]},"1016":{"position":[[76,4]]},"1020":{"position":[[333,4]]},"1274":{"position":[[108,4],[158,4]]}}}],["particular",{"_index":2882,"t":{"973":{"position":[[1155,10]]},"1403":{"position":[[181,10]]}}}],["pass",{"_index":1733,"t":{"495":{"position":[[77,7]]},"661":{"position":[[853,4]]},"694":{"position":[[633,7]]},"1154":{"position":[[600,6]]},"1374":{"position":[[81,7]]}}}],["past",{"_index":715,"t":{"147":{"position":[[1054,4]]}}}],["patch",{"_index":1759,"t":{"500":{"position":[[1000,7],[1150,7],[1269,7],[1454,7]]}}}],["path",{"_index":518,"t":{"95":{"position":[[1069,6],[1126,4]]},"102":{"position":[[267,5],[541,5]]},"165":{"position":[[184,5]]},"184":{"position":[[14,4],[65,4]]},"583":{"position":[[89,5]]},"692":{"position":[[396,5]]},"694":{"position":[[679,5]]},"749":{"position":[[184,5]]},"755":{"position":[[54,4]]},"1016":{"position":[[678,4],[923,5]]},"1064":{"position":[[75,4],[289,5]]},"1066":{"position":[[719,5]]},"1072":{"position":[[274,5],[346,5]]},"1074":{"position":[[268,5]]},"1435":{"position":[[592,4]]},"1437":{"position":[[111,4]]}}}],["path/fold",{"_index":530,"t":{"95":{"position":[[1415,11]]}}}],["path/to/file.csv",{"_index":778,"t":{"186":{"position":[[6,19]]}}}],["path_to_chart_file>.csv",{"_index":851,"t":{"252":{"position":[[109,24]]}}}],["path_to_fil",{"_index":2976,"t":{"1020":{"position":[[113,14]]}}}],["path_to_file.csv",{"_index":2560,"t":{"770":{"position":[[53,18]]},"777":{"position":[[53,18]]},"1232":{"position":[[53,18]]}}}],["path_to_model1/model_data.csv",{"_index":2978,"t":{"1024":{"position":[[46,30]]},"1441":{"position":[[46,30]]}}}],["path_to_tiein/tie_in_field.csv",{"_index":2979,"t":{"1024":{"position":[[110,31]]}}}],["pattern",{"_index":2650,"t":{"800":{"position":[[70,7]]}}}],["pdoc",{"_index":968,"t":{"366":{"position":[[10,4]]}}}],["pe",{"_index":3190,"t":{"1374":{"position":[[400,4]]}}}],["peng",{"_index":2311,"t":{"704":{"position":[[106,4]]},"990":{"position":[[1008,5]]}}}],["pentan",{"_index":2937,"t":{"990":{"position":[[274,8]]}}}],["pep",{"_index":2196,"t":{"661":{"position":[[464,3],[504,3]]}}}],["per",{"_index":774,"t":{"180":{"position":[[31,3]]},"368":{"position":[[23,3]]},"704":{"position":[[950,3]]},"727":{"position":[[132,3]]},"781":{"position":[[826,3]]},"800":{"position":[[224,3]]},"952":{"position":[[95,3],[347,3],[879,3]]},"988":{"position":[[195,3]]},"1268":{"position":[[223,3]]},"1290":{"position":[[605,3],[864,3],[1086,3],[1143,3]]},"1292":{"position":[[27,3]]},"1294":{"position":[[27,3]]},"1296":{"position":[[27,3],[334,3]]},"1298":{"position":[[27,3],[348,3]]},"1300":{"position":[[107,3]]},"1358":{"position":[[27,3]]}}}],["percentag",{"_index":464,"t":{"93":{"position":[[2729,10],[2875,10]]},"178":{"position":[[41,11]]},"252":{"position":[[92,10]]},"549":{"position":[[624,10]]},"565":{"position":[[330,10]]},"602":{"position":[[490,10]]},"702":{"position":[[592,10]]},"712":{"position":[[262,10]]},"725":{"position":[[980,10]]},"739":{"position":[[510,10]]},"770":{"position":[[259,12]]},"777":{"position":[[261,12]]},"779":{"position":[[161,10],[322,10],[502,10]]},"916":{"position":[[280,12]]},"922":{"position":[[282,12]]},"928":{"position":[[438,12]]},"936":{"position":[[242,12]]},"940":{"position":[[131,10],[232,10]]},"942":{"position":[[415,11],[438,11]]},"967":{"position":[[1970,11],[1993,11],[2383,11],[2406,11]]},"971":{"position":[[1025,11],[1048,11],[1447,11],[1470,11],[1899,11],[1922,11]]},"1086":{"position":[[49,11]]},"1162":{"position":[[334,10]]},"1165":{"position":[[418,11],[441,11]]},"1170":{"position":[[813,11],[836,11]]},"1172":{"position":[[408,10],[515,10]]},"1176":{"position":[[135,10]]},"1178":{"position":[[418,11],[441,11]]},"1227":{"position":[[122,11]]},"1230":{"position":[[135,11]]},"1232":{"position":[[159,12]]},"1397":{"position":[[476,11],[499,11],[898,11],[921,11]]},"1490":{"position":[[224,12]]},"1492":{"position":[[236,12]]},"1495":{"position":[[123,10]]}}}],["perform",{"_index":214,"t":{"59":{"position":[[292,8]]},"118":{"position":[[21,9],[422,10]]},"543":{"position":[[389,9]]},"696":{"position":[[131,9]]},"719":{"position":[[228,9]]},"745":{"position":[[624,11],[676,11],[732,11]]},"982":{"position":[[148,10]]},"1042":{"position":[[630,7]]},"1057":{"position":[[507,11]]}}}],["period",{"_index":94,"t":{"44":{"position":[[223,6]]},"118":{"position":[[583,6],[958,7],[997,7]]},"828":{"position":[[223,7],[304,7]]},"1154":{"position":[[684,6]]},"1374":{"position":[[1097,7]]},"1378":{"position":[[478,6]]},"1403":{"position":[[928,8]]}}}],["period,period",{"_index":1413,"t":{"438":{"position":[[910,14]]}}}],["permiss",{"_index":531,"t":{"95":{"position":[[1475,12]]}}}],["person",{"_index":2086,"t":{"631":{"position":[[303,9]]}}}],["phase",{"_index":2813,"t":{"926":{"position":[[306,6]]},"990":{"position":[[443,5]]}}}],["physic",{"_index":236,"t":{"59":{"position":[[709,8]]}}}],["pick",{"_index":622,"t":{"118":{"position":[[468,7]]}}}],["pin",{"_index":1518,"t":{"449":{"position":[[1210,3]]}}}],["place",{"_index":130,"t":{"44":{"position":[[880,6]]},"169":{"position":[[94,6]]},"555":{"position":[[101,7]]},"729":{"position":[[101,7]]},"826":{"position":[[81,6]]},"839":{"position":[[244,6]]}}}],["placehold",{"_index":1792,"t":{"545":{"position":[[313,13],[344,13],[370,13],[395,13],[424,13],[462,12]]},"557":{"position":[[713,13],[742,13],[875,13],[904,13]]},"559":{"position":[[670,13],[765,13],[852,13],[923,13],[1004,13]]},"561":{"position":[[610,13],[691,13],[779,13]]},"563":{"position":[[30,12]]},"698":{"position":[[209,13],[240,13],[262,13],[288,13],[317,13]]},"721":{"position":[[283,13],[314,13],[340,13],[365,13],[394,13],[432,12]]},"731":{"position":[[495,13],[524,13]]},"733":{"position":[[519,13],[607,13],[696,13],[778,13]]},"735":{"position":[[139,13],[224,13]]},"737":{"position":[[30,12]]}}}],["placement",{"_index":2906,"t":{"982":{"position":[[582,9]]}}}],["plan",{"_index":218,"t":{"59":{"position":[[376,5]]},"1004":{"position":[[134,8]]}}}],["platform",{"_index":882,"t":{"279":{"position":[[122,9]]},"802":{"position":[[1314,8]]},"824":{"position":[[195,9]]},"1053":{"position":[[1257,9]]},"1078":{"position":[[341,10]]}}}],["platform_a",{"_index":2717,"t":{"833":{"position":[[22,10]]}}}],["platform_b",{"_index":2718,"t":{"833":{"position":[[102,10]]}}}],["platforms/rig",{"_index":2523,"t":{"743":{"position":[[880,15]]}}}],["pleas",{"_index":383,"t":{"85":{"position":[[103,6],[281,6]]},"455":{"position":[[15,6]]},"629":{"position":[[43,6]]},"633":{"position":[[65,6]]},"647":{"position":[[19,6]]},"653":{"position":[[19,6],[282,6]]},"655":{"position":[[0,6]]},"657":{"position":[[57,6]]},"661":{"position":[[1355,6]]},"663":{"position":[[368,6]]},"694":{"position":[[1116,6]]},"1090":{"position":[[332,6]]}}}],["plot",{"_index":893,"t":{"283":{"position":[[1333,4]]},"1057":{"position":[[628,7]]}}}],["plu",{"_index":941,"t":{"358":{"position":[[304,4]]},"635":{"position":[[41,4]]},"814":{"position":[[87,4]]},"816":{"position":[[51,4]]}}}],["poetri",{"_index":1221,"t":{"425":{"position":[[587,6]]}}}],["point",{"_index":120,"t":{"44":{"position":[[745,6]]},"118":{"position":[[1258,5]]},"414":{"position":[[298,6]]},"483":{"position":[[824,5]]},"498":{"position":[[377,6]]},"553":{"position":[[169,6]]},"600":{"position":[[79,5]]},"710":{"position":[[2073,6]]},"764":{"position":[[326,5],[1381,6]]},"781":{"position":[[91,5],[366,5],[1039,5]]},"896":{"position":[[202,6]]},"902":{"position":[[113,5]]},"910":{"position":[[745,5]]},"912":{"position":[[242,5]]},"920":{"position":[[250,6],[534,6]]},"926":{"position":[[679,5],[730,6],[947,5],[1038,5],[1162,7]]},"934":{"position":[[376,5],[508,5],[679,5],[792,6],[831,6],[889,6],[921,5],[1066,6],[1085,6],[1228,6],[1466,6]]},"967":{"position":[[880,5]]},"982":{"position":[[622,7],[720,5],[758,6],[830,5],[1014,6],[1376,6],[1657,6]]},"1055":{"position":[[930,7]]},"1057":{"position":[[472,5],[589,6]]},"1124":{"position":[[112,6]]},"1162":{"position":[[198,6]]}}}],["polytrop",{"_index":859,"t":{"262":{"position":[[64,11]]},"264":{"position":[[60,11]]},"704":{"position":[[461,10]]},"770":{"position":[[172,11]]},"777":{"position":[[174,11]]},"910":{"position":[[1206,10],[1558,10]]},"916":{"position":[[165,11],[238,11],[412,10],[478,10]]},"922":{"position":[[167,11],[240,11],[415,10],[481,10],[644,10],[710,10]]},"926":{"position":[[1615,10],[1740,10],[1762,11]]},"928":{"position":[[131,11],[236,10],[323,11],[396,11]]},"936":{"position":[[124,11],[200,11]]},"963":{"position":[[643,10]]},"1042":{"position":[[721,10],[989,10],[1110,10],[1254,10],[1545,10],[1803,10],[1954,10],[2264,10],[2430,10],[2508,10]]},"1055":{"position":[[830,10]]},"1191":{"position":[[218,10],[284,10]]},"1198":{"position":[[221,10],[287,10],[450,10],[516,10]]},"1490":{"position":[[117,11]]},"1492":{"position":[[121,11],[194,11]]}}}],["polytropic\\_efficiency}{\\kappa",{"_index":3034,"t":{"1042":{"position":[[2034,30]]}}}],["polytropic_effici",{"_index":1812,"t":{"553":{"position":[[411,22]]},"565":{"position":[[702,22]]},"704":{"position":[[1455,22]]},"712":{"position":[[737,22]]},"928":{"position":[[108,22]]},"930":{"position":[[120,22]]},"936":{"position":[[101,22]]},"938":{"position":[[106,22]]},"957":{"position":[[120,22]]}}}],["polytropic_efficiencyκ−1\\frac{\\kappa",{"_index":3033,"t":{"1042":{"position":[[1993,38]]}}}],["polytropic_head=nn−1zrt1mw((p1p2)n−1n−1)polytropic\\_head",{"_index":3018,"t":{"1042":{"position":[[1583,56]]}}}],["poorli",{"_index":959,"t":{"360":{"position":[[144,6]]}}}],["portfolio",{"_index":245,"t":{"59":{"position":[[971,9]]}}}],["posit",{"_index":679,"t":{"145":{"position":[[123,8]]},"555":{"position":[[1183,9]]},"563":{"position":[[183,9],[1822,9]]},"816":{"position":[[306,9]]},"1128":{"position":[[94,9]]},"1184":{"position":[[894,8],[933,8]]},"1302":{"position":[[887,8],[926,8]]}}}],["possibl",{"_index":137,"t":{"44":{"position":[[1048,8]]},"91":{"position":[[117,9]]},"93":{"position":[[259,8],[1446,8],[1920,8],[4944,8],[5167,8]]},"95":{"position":[[544,8],[930,9]]},"100":{"position":[[119,9]]},"102":{"position":[[944,13]]},"118":{"position":[[1208,8]]},"283":{"position":[[571,8]]},"342":{"position":[[320,8]]},"414":{"position":[[491,11]]},"495":{"position":[[39,8]]},"498":{"position":[[616,8]]},"513":{"position":[[259,8]]},"575":{"position":[[6,8]]},"594":{"position":[[229,8]]},"600":{"position":[[42,8]]},"627":{"position":[[95,8]]},"729":{"position":[[1179,8]]},"781":{"position":[[718,8]]},"785":{"position":[[338,8]]},"910":{"position":[[2153,8]]},"918":{"position":[[299,8]]},"924":{"position":[[602,8]]},"926":{"position":[[571,8]]},"940":{"position":[[44,8]]},"982":{"position":[[189,8]]},"988":{"position":[[268,8]]},"1018":{"position":[[109,8]]},"1090":{"position":[[296,8]]},"1098":{"position":[[161,8]]},"1162":{"position":[[727,8]]},"1176":{"position":[[399,8]]},"1184":{"position":[[623,8],[727,8],[1065,9]]},"1256":{"position":[[44,8]]},"1302":{"position":[[616,8],[720,8],[1058,9]]}}}],["potenti",{"_index":706,"t":{"147":{"position":[[521,12]]},"659":{"position":[[81,9]]},"835":{"position":[[285,9]]},"934":{"position":[[978,9],[1393,9]]},"1042":{"position":[[4088,11]]},"1378":{"position":[[239,9]]}}}],["power",{"_index":433,"t":{"93":{"position":[[1699,5],[1786,5],[1883,5],[2073,5],[2094,5]]},"108":{"position":[[507,5]]},"178":{"position":[[260,6]]},"248":{"position":[[318,5],[499,5]]},"309":{"position":[[82,5]]},"311":{"position":[[155,6]]},"449":{"position":[[220,5],[1451,5]]},"462":{"position":[[47,5]]},"468":{"position":[[1089,5]]},"476":{"position":[[51,5],[366,5],[393,5],[673,5],[761,5],[789,5],[874,5],[1282,5],[1412,5]]},"481":{"position":[[671,5]]},"488":{"position":[[0,5]]},"493":{"position":[[12,5],[137,5],[190,5],[275,6],[302,5]]},"498":{"position":[[249,5],[1536,5],[1690,5]]},"500":{"position":[[783,5],[874,5],[952,5]]},"507":{"position":[[162,5]]},"509":{"position":[[12,5]]},"543":{"position":[[587,5],[687,5],[785,5],[980,5],[1251,5]]},"559":{"position":[[56,5],[159,5]]},"561":{"position":[[56,5],[158,5]]},"567":{"position":[[399,6]]},"631":{"position":[[164,5]]},"669":{"position":[[9,8]]},"696":{"position":[[327,5],[385,5],[471,5],[532,5],[615,5]]},"702":{"position":[[337,5]]},"710":{"position":[[106,5]]},"715":{"position":[[11,6]]},"719":{"position":[[424,5],[486,5],[604,5],[797,5]]},"733":{"position":[[56,5],[159,5]]},"737":{"position":[[402,5]]},"743":{"position":[[337,5],[935,5]]},"751":{"position":[[71,5],[259,5]]},"757":{"position":[[42,6]]},"759":{"position":[[22,5]]},"764":{"position":[[1318,5]]},"781":{"position":[[909,5],[940,5]]},"785":{"position":[[0,5],[244,5],[281,5],[358,5],[408,5],[456,5],[620,5]]},"787":{"position":[[15,5]]},"790":{"position":[[5,5]]},"792":{"position":[[41,5]]},"794":{"position":[[206,5]]},"796":{"position":[[20,5],[33,5]]},"798":{"position":[[799,5]]},"811":{"position":[[438,5]]},"828":{"position":[[848,5]]},"857":{"position":[[662,6]]},"859":{"position":[[800,5]]},"864":{"position":[[123,6],[144,5],[343,5]]},"869":{"position":[[5,5],[135,5]]},"871":{"position":[[58,6],[235,5],[422,5],[525,5],[696,5]]},"948":{"position":[[320,5]]},"950":{"position":[[787,5]]},"965":{"position":[[1097,5]]},"967":{"position":[[2590,5]]},"971":{"position":[[2065,5]]},"1006":{"position":[[125,5]]},"1010":{"position":[[133,5]]},"1040":{"position":[[209,5]]},"1042":{"position":[[104,5],[1337,5]]},"1053":{"position":[[9,5],[1044,5]]},"1055":{"position":[[128,5],[470,5]]},"1057":{"position":[[725,5]]},"1059":{"position":[[413,5]]},"1066":{"position":[[1460,6]]},"1086":{"position":[[296,6]]},"1090":{"position":[[1330,5],[1486,6],[1742,5]]},"1142":{"position":[[265,6]]},"1146":{"position":[[29,5]]},"1238":{"position":[[64,5],[234,5],[451,5]]},"1313":{"position":[[79,5]]},"1321":{"position":[[42,5],[107,5],[175,5],[237,5],[261,5],[496,5],[546,5]]},"1378":{"position":[[50,5]]},"1461":{"position":[[76,5]]},"1468":{"position":[[125,5]]}}}],["power,fuel",{"_index":2461,"t":{"741":{"position":[[379,10]]}}}],["power/energi",{"_index":947,"t":{"358":{"position":[[463,12]]}}}],["power=head∗mass_rateefficiency.pow",{"_index":2994,"t":{"1040":{"position":[[249,36]]}}}],["power=polytropic_head∗mass_rateefficiencypow",{"_index":3015,"t":{"1042":{"position":[[1376,46]]}}}],["power_adjustment_const",{"_index":945,"t":{"358":{"position":[[401,25]]},"855":{"position":[[558,26]]},"948":{"position":[[195,26]]},"950":{"position":[[662,26]]},"952":{"position":[[1070,26]]},"965":{"position":[[972,26]]},"967":{"position":[[2465,26]]},"1006":{"position":[[253,26]]},"1008":{"position":[[284,26]]},"1012":{"position":[[397,26]]},"1014":{"position":[[185,26],[513,26]]},"1252":{"position":[[284,26]]},"1268":{"position":[[414,26]]},"1311":{"position":[[9,25]]},"1315":{"position":[[52,26]]},"1317":{"position":[[87,26]]},"1456":{"position":[[284,26]]},"1463":{"position":[[284,26]]},"1468":{"position":[[253,26]]},"1470":{"position":[[284,26]]}}}],["power_from_shor",{"_index":1661,"t":{"476":{"position":[[646,16]]},"481":{"position":[[644,16]]}}}],["power_loss_factor",{"_index":1409,"t":{"438":{"position":[[809,17]]}}}],["power_r",{"_index":1709,"t":{"483":{"position":[[995,10]]},"507":{"position":[[148,10]]}}}],["powerlossfactor",{"_index":918,"t":{"311":{"position":[[138,16]]},"434":{"position":[[89,15]]},"571":{"position":[[244,15]]},"573":{"position":[[590,15]]},"857":{"position":[[645,16]]},"1059":{"position":[[593,16]]},"1319":{"position":[[45,15]]},"1321":{"position":[[198,15]]},"1323":{"position":[[0,16]]},"1325":{"position":[[0,16],[22,16]]}}}],["powerlossfactor}powerrequired​=1−powerlossfactorpowersubsea",{"_index":3166,"t":{"1321":{"position":[[383,61]]}}}],["powerrequired=powersubsea1−powerlossfactorpower_{requir",{"_index":3164,"t":{"1321":{"position":[[298,58]]}}}],["powersubseapower_{subsea}powersubsea",{"_index":3167,"t":{"1321":{"position":[[451,37]]}}}],["pr",{"_index":1015,"t":{"381":{"position":[[176,2]]},"455":{"position":[[22,2]]},"655":{"position":[[215,3]]},"704":{"position":[[120,4],[1073,2]]},"712":{"position":[[355,2]]},"990":{"position":[[954,3],[1005,2]]},"996":{"position":[[242,2]]}}}],["practic",{"_index":693,"t":{"145":{"position":[[530,9]]},"149":{"position":[[56,8]]},"283":{"position":[[1408,9]]},"661":{"position":[[806,12]]},"982":{"position":[[669,8]]},"1124":{"position":[[227,9]]}}}],["pre",{"_index":405,"t":{"93":{"position":[[298,3],[4983,3],[5081,3],[5257,3]]},"389":{"position":[[15,3]]},"425":{"position":[[945,3]]},"455":{"position":[[356,3]]},"513":{"position":[[298,3]]},"659":{"position":[[11,3]]},"661":{"position":[[15,3]]},"764":{"position":[[39,3]]},"946":{"position":[[651,4]]},"1090":{"position":[[205,3]]}}}],["pre>stat",{"_index":2130,"t":{"639":{"position":[[605,26]]}}}],["preced",{"_index":2664,"t":{"802":{"position":[[2431,9]]}}}],["precompressor",{"_index":735,"t":{"149":{"position":[[468,13]]}}}],["predefin",{"_index":782,"t":{"195":{"position":[[58,10]]},"529":{"position":[[22,10]]},"553":{"position":[[796,10]]},"565":{"position":[[1087,10]]},"912":{"position":[[131,10],[161,10]]},"934":{"position":[[1048,10]]},"957":{"position":[[296,10]]},"959":{"position":[[593,10]]},"961":{"position":[[154,10]]},"992":{"position":[[10,10]]},"994":{"position":[[83,10],[138,10]]},"996":{"position":[[14,10],[104,10],[220,10],[409,10]]},"1098":{"position":[[23,10]]}}}],["predefined_single_speed_compressor_chart",{"_index":2779,"t":{"918":{"position":[[16,40]]},"1193":{"position":[[16,40]]}}}],["predefined_variable_speed_compressor_chart",{"_index":860,"t":{"267":{"position":[[16,42]]},"553":{"position":[[545,42],[1455,42]]},"565":{"position":[[836,42],[1744,42]]},"924":{"position":[[16,42]]},"955":{"position":[[16,42],[900,42]]},"959":{"position":[[114,42],[893,42]]},"1200":{"position":[[16,42]]},"1234":{"position":[[16,42]]},"1497":{"position":[[16,42]]}}}],["predict",{"_index":1578,"t":{"458":{"position":[[206,9]]},"529":{"position":[[122,9]]},"1082":{"position":[[69,9]]}}}],["prefer",{"_index":2217,"t":{"661":{"position":[[980,10]]}}}],["prefix",{"_index":302,"t":{"67":{"position":[[714,6]]},"438":{"position":[[1003,6]]},"692":{"position":[[270,8]]},"694":{"position":[[429,8]]},"1066":{"position":[[801,7],[833,6]]}}}],["prepar",{"_index":538,"t":{"95":{"position":[[2300,7]]},"511":{"position":[[79,7]]},"521":{"position":[[79,7]]},"539":{"position":[[79,7]]}}}],["prerequisit",{"_index":2058,"t":{"627":{"position":[[283,14]]}}}],["presampl",{"_index":2969,"t":{"1014":{"position":[[237,10]]}}}],["present",{"_index":649,"t":{"124":{"position":[[266,9]]},"385":{"position":[[22,12]]},"416":{"position":[[330,12]]},"768":{"position":[[251,7],[363,7]]},"1128":{"position":[[55,7]]},"1378":{"position":[[151,7]]}}}],["preserv",{"_index":1723,"t":{"491":{"position":[[530,9]]}}}],["pressur",{"_index":238,"t":{"59":{"position":[[771,9]]},"104":{"position":[[520,9]]},"149":{"position":[[449,8]]},"283":{"position":[[419,8]]},"293":{"position":[[197,8],[268,8]]},"295":{"position":[[984,8],[1122,9],[1273,9]]},"297":{"position":[[164,8],[419,8]]},"328":{"position":[[162,8],[219,8],[347,10]]},"358":{"position":[[153,10]]},"368":{"position":[[8,8]]},"425":{"position":[[668,9],[751,9],[918,9],[1409,9]]},"430":{"position":[[33,9],[103,9]]},"432":{"position":[[929,9]]},"434":{"position":[[171,9]]},"436":{"position":[[4,8],[42,8]]},"445":{"position":[[21,8],[490,8],[534,8]]},"449":{"position":[[289,8],[372,9],[512,8],[539,8],[597,8],[1519,8]]},"466":{"position":[[69,8]]},"476":{"position":[[1160,8]]},"483":{"position":[[1066,9],[1150,9]]},"486":{"position":[[30,8],[239,8]]},"493":{"position":[[75,8]]},"498":{"position":[[714,8]]},"500":{"position":[[503,8],[527,8],[1184,8]]},"531":{"position":[[195,8]]},"543":{"position":[[899,8],[932,8]]},"563":{"position":[[1855,8],[1878,8]]},"594":{"position":[[43,9],[103,8],[171,9],[208,10],[280,10]]},"596":{"position":[[308,9]]},"600":{"position":[[395,9]]},"607":{"position":[[68,8]]},"704":{"position":[[876,8],[935,8]]},"710":{"position":[[594,10],[1328,8],[2207,8]]},"719":{"position":[[718,8],[751,8]]},"737":{"position":[[1246,8],[1269,8],[3259,8]]},"764":{"position":[[71,9],[635,8],[716,8],[849,8]]},"781":{"position":[[114,9],[212,10],[230,9],[387,9],[407,9],[1490,8],[1554,8]]},"809":{"position":[[279,8],[334,8],[401,8]]},"816":{"position":[[107,9]]},"828":{"position":[[318,8]]},"841":{"position":[[451,8],[522,8],[550,8]]},"843":{"position":[[257,8],[309,8]]},"853":{"position":[[127,10]]},"855":{"position":[[264,9],[415,8],[467,8],[537,8],[901,8],[953,8]]},"880":{"position":[[66,9]]},"882":{"position":[[192,8],[244,8]]},"902":{"position":[[446,8],[498,8]]},"910":{"position":[[768,9],[866,10],[884,9],[1311,8],[1353,8],[1409,9],[1794,9],[1836,8],[2100,10],[2268,8],[2447,8],[2529,9]]},"926":{"position":[[1491,8]]},"940":{"position":[[829,10]]},"944":{"position":[[296,9]]},"946":{"position":[[108,9],[162,8]]},"952":{"position":[[80,8],[123,8],[290,8],[332,8],[864,8]]},"963":{"position":[[360,8],[383,9],[422,8],[523,9],[547,10]]},"965":{"position":[[135,8],[306,8],[339,8],[614,9],[875,9]]},"967":{"position":[[211,8],[270,9],[588,10],[1093,10],[1250,9],[1886,9],[2299,9],[2838,8]]},"969":{"position":[[146,8]]},"971":{"position":[[941,9],[1512,9],[1618,9],[1666,9],[1964,9]]},"973":{"position":[[1138,8]]},"975":{"position":[[366,9],[569,8],[788,9],[1014,8],[1109,8],[1291,8],[1481,8],[1939,8],[2067,9]]},"977":{"position":[[14,8],[147,8],[298,9],[351,8],[387,8],[418,8],[445,9],[530,8]]},"982":{"position":[[963,8],[1084,9],[1166,8],[1271,8],[1471,10]]},"984":{"position":[[545,8],[699,8],[735,9],[874,8],[1012,9],[1131,8],[1150,8],[1226,8],[1248,9],[1312,8],[1352,9]]},"986":{"position":[[151,8],[202,8],[293,8],[324,8],[428,8],[451,9],[486,8],[706,8],[754,8],[806,8],[893,9],[916,8],[999,8],[1044,8],[1183,8],[1243,9]]},"988":{"position":[[929,8],[1125,9],[1348,9],[1568,9],[1963,8],[2006,9],[2120,8],[2180,8]]},"990":{"position":[[628,8]]},"1024":{"position":[[232,9]]},"1040":{"position":[[398,9],[587,10]]},"1042":{"position":[[303,9],[446,8],[1569,9],[2383,8],[2598,9],[2970,8],[3015,8],[3251,8],[3333,9],[3650,8],[3711,9],[3731,8],[4074,9],[4171,8],[4297,10]]},"1053":{"position":[[620,9],[661,9]]},"1162":{"position":[[695,10]]},"1170":{"position":[[878,9],[984,9],[1032,9]]},"1176":{"position":[[367,10]]},"1184":{"position":[[464,8],[565,8],[641,8],[674,8],[709,9],[739,9]]},"1212":{"position":[[29,8]]},"1214":{"position":[[31,8]]},"1220":{"position":[[162,8],[220,8],[348,10]]},"1256":{"position":[[63,8],[145,8],[187,9]]},"1258":{"position":[[218,9],[330,9],[362,8],[430,8],[498,8],[683,8],[719,8]]},"1260":{"position":[[189,8]]},"1264":{"position":[[270,8]]},"1268":{"position":[[208,8]]},"1290":{"position":[[382,8],[475,8],[585,8],[633,8],[730,8],[844,8]]},"1296":{"position":[[63,8],[228,8],[314,8]]},"1298":{"position":[[65,8],[238,8],[328,8]]},"1302":{"position":[[457,8],[558,8],[634,8],[667,8],[702,9],[732,9]]},"1328":{"position":[[133,8],[300,8]]},"1330":{"position":[[93,8]]},"1397":{"position":[[392,9],[963,9],[1069,9],[1117,9]]},"1427":{"position":[[27,8],[208,8],[280,8]]},"1429":{"position":[[27,8]]},"1441":{"position":[[167,9]]}}}],["pressure/suct",{"_index":2928,"t":{"988":{"position":[[1989,16]]}}}],["pressure_control",{"_index":1717,"t":{"491":{"position":[[23,16],[103,17]]},"932":{"position":[[130,17]]},"963":{"position":[[830,17]]},"965":{"position":[[105,17]]},"967":{"position":[[2808,17]]},"1258":{"position":[[96,16]]},"1260":{"position":[[105,17]]},"1328":{"position":[[0,16]]},"1330":{"position":[[63,17]]},"1332":{"position":[[78,17]]}}}],["pressure_drop_ahead_of_stag",{"_index":2868,"t":{"965":{"position":[[584,29],[845,29]]},"967":{"position":[[1856,29],[2269,29]]},"971":{"position":[[911,29],[1482,29],[1934,29]]},"973":{"position":[[1056,28]]},"1170":{"position":[[848,29]]},"1397":{"position":[[362,29],[933,29]]}}}],["prevent",{"_index":659,"t":{"127":{"position":[[502,7]]},"663":{"position":[[563,7]]}}}],["preview",{"_index":2074,"t":{"627":{"position":[[564,7],[661,7]]}}}],["previou",{"_index":561,"t":{"102":{"position":[[698,8]]},"283":{"position":[[961,8]]},"607":{"position":[[526,8]]},"973":{"position":[[815,8]]},"1395":{"position":[[612,8]]}}}],["previous",{"_index":441,"t":{"93":{"position":[[2205,10]]},"95":{"position":[[672,10],[853,10]]},"102":{"position":[[146,11],[1007,10]]},"104":{"position":[[0,10]]},"118":{"position":[[433,10],[1069,10]]},"124":{"position":[[70,10]]},"127":{"position":[[214,10]]},"141":{"position":[[256,11]]},"281":{"position":[[46,10]]},"358":{"position":[[653,10]]},"493":{"position":[[593,10]]},"500":{"position":[[1404,10]]},"687":{"position":[[256,10]]},"708":{"position":[[34,10]]},"710":{"position":[[479,10]]},"988":{"position":[[3,10]]},"1411":{"position":[[187,10]]}}}],["price",{"_index":667,"t":{"134":{"position":[[101,5]]},"381":{"position":[[73,5]]},"611":{"position":[[84,5]]}}}],["priorit",{"_index":1710,"t":{"483":{"position":[[1254,11]]}}}],["prioritazion",{"_index":1704,"t":{"483":{"position":[[581,12]]}}}],["prioriti",{"_index":1135,"t":{"416":{"position":[[139,8]]}}}],["priorityoptim",{"_index":1153,"t":{"416":{"position":[[599,17]]}}}],["problem",{"_index":1682,"t":{"481":{"position":[[235,8]]},"602":{"position":[[608,7]]},"616":{"position":[[192,7]]},"835":{"position":[[331,7]]},"963":{"position":[[313,7]]},"988":{"position":[[216,7]]}}}],["process",{"_index":203,"t":{"59":{"position":[[120,11],[797,10],[1064,10]]},"318":{"position":[[111,10]]},"549":{"position":[[30,10]]},"641":{"position":[[156,7],[554,8]]},"651":{"position":[[254,7]]},"687":{"position":[[224,8]]},"725":{"position":[[30,10]]},"802":{"position":[[1783,10],[1997,9],[2050,9],[2081,9]]},"839":{"position":[[482,7]]},"920":{"position":[[804,7]]},"926":{"position":[[276,7]]},"990":{"position":[[557,8]]},"1042":{"position":[[129,8],[377,8],[927,7],[1000,8],[1121,7],[2247,8],[2275,7],[3937,7]]},"1047":{"position":[[41,7]]},"1074":{"position":[[47,10]]},"1154":{"position":[[1021,7]]},"1158":{"position":[[441,7]]},"1264":{"position":[[48,7]]},"1304":{"position":[[133,9]]},"1374":{"position":[[838,7]]},"1378":{"position":[[262,7],[376,7]]}}}],["produc",{"_index":527,"t":{"95":{"position":[[1260,8]]},"235":{"position":[[558,8]]},"543":{"position":[[751,8]]},"559":{"position":[[240,8]]},"639":{"position":[[52,8]]},"696":{"position":[[434,8]]},"719":{"position":[[572,8]]},"733":{"position":[[240,8],[629,8]]},"737":{"position":[[832,8],[1303,8],[1982,8],[2046,8],[2184,8]]},"739":{"position":[[1910,8]]},"751":{"position":[[50,9],[132,7]]},"816":{"position":[[37,8]]}}}],["produced_water_reinjection_condit",{"_index":2422,"t":{"729":{"position":[[772,37]]},"737":{"position":[[991,36],[1085,36]]},"739":{"position":[[1083,37]]}}}],["produced_water_reinjection_total_system_rate_m3_per_day",{"_index":2423,"t":{"729":{"position":[[839,56]]},"739":{"position":[[1150,56]]}}}],["product",{"_index":202,"t":{"59":{"position":[[105,10],[424,10],[750,10]]},"108":{"position":[[113,10]]},"242":{"position":[[49,10]]},"279":{"position":[[136,10]]},"543":{"position":[[569,10],[602,10],[840,10],[1085,10],[1233,10],[1266,10]]},"559":{"position":[[197,10],[599,10],[634,10]]},"561":{"position":[[195,10],[539,10],[574,10]]},"563":{"position":[[83,10],[207,10],[242,10],[3520,10],[3573,10],[3608,10],[4126,10]]},"565":{"position":[[2516,10],[2551,10],[4401,10],[4436,10]]},"631":{"position":[[322,8]]},"696":{"position":[[311,10]]},"719":{"position":[[408,10],[659,10],[902,10]]},"729":{"position":[[1115,10]]},"733":{"position":[[197,10],[463,10]]},"737":{"position":[[83,10],[144,10],[934,10],[1189,10],[1834,10]]},"739":{"position":[[1518,10]]},"743":{"position":[[211,10]]},"794":{"position":[[162,11]]},"824":{"position":[[209,10]]},"1053":{"position":[[501,10]]},"1090":{"position":[[600,10],[763,10],[816,10],[934,10]]},"1094":{"position":[[55,10]]},"1124":{"position":[[319,10],[388,11]]},"1128":{"position":[[80,10],[144,10]]},"1374":{"position":[[378,10]]}}}],["production_data.csv",{"_index":1793,"t":{"547":{"position":[[81,20]]},"723":{"position":[[81,20],[300,19]]},"739":{"position":[[42,19]]},"741":{"position":[[709,19]]}}}],["production_load",{"_index":3103,"t":{"1128":{"position":[[112,15]]}}}],["profil",{"_index":222,"t":{"59":{"position":[[449,8]]},"379":{"position":[[255,7]]},"743":{"position":[[222,8]]},"802":{"position":[[323,10]]},"1016":{"position":[[590,8]]},"1051":{"position":[[15,8]]},"1435":{"position":[[504,8]]}}}],["prognosi",{"_index":212,"t":{"59":{"position":[[253,9]]},"1066":{"position":[[956,9],[1129,9]]}}}],["program",{"_index":167,"t":{"53":{"position":[[58,11]]}}}],["programmat",{"_index":174,"t":{"55":{"position":[[122,16]]},"83":{"position":[[140,16]]}}}],["project",{"_index":2154,"t":{"641":{"position":[[56,8],[73,7]]},"649":{"position":[[21,8]]},"671":{"position":[[163,7]]},"687":{"position":[[174,7]]},"692":{"position":[[137,7]]},"694":{"position":[[52,7],[148,7]]},"764":{"position":[[486,9]]}}}],["prone",{"_index":1774,"t":{"523":{"position":[[323,6]]}}}],["propan",{"_index":2327,"t":{"704":{"position":[[1201,8]]},"712":{"position":[[483,8]]},"955":{"position":[[606,8]]},"990":{"position":[[257,8]]},"1000":{"position":[[260,8]]},"1002":{"position":[[201,8]]}}}],["proper",{"_index":1732,"t":{"493":{"position":[[766,6]]}}}],["properli",{"_index":1747,"t":{"498":{"position":[[1635,9]]}}}],["properti",{"_index":1406,"t":{"438":{"position":[[692,10]]},"596":{"position":[[140,10]]},"990":{"position":[[898,10]]},"1042":{"position":[[3147,8]]}}}],["properties/st",{"_index":2869,"t":{"967":{"position":[[119,16]]}}}],["propos",{"_index":319,"t":{"69":{"position":[[170,8]]}}}],["proven",{"_index":654,"t":{"127":{"position":[[367,6]]}}}],["provid",{"_index":110,"t":{"44":{"position":[[442,7],[594,7],[647,8]]},"91":{"position":[[131,7]]},"100":{"position":[[133,7]]},"108":{"position":[[169,8],[319,8]]},"478":{"position":[[152,9]]},"493":{"position":[[265,9]]},"621":{"position":[[154,7]]},"631":{"position":[[213,8]]},"694":{"position":[[1123,7]]},"781":{"position":[[899,7]]},"785":{"position":[[317,9],[465,9],[537,9]]},"1066":{"position":[[985,8],[1158,8]]},"1258":{"position":[[478,7]]},"1403":{"position":[[467,7],[620,8]]}}}],["publish",{"_index":1650,"t":{"473":{"position":[[7,7]]}}}],["pull",{"_index":2155,"t":{"641":{"position":[[114,4]]},"649":{"position":[[76,4],[184,4]]},"651":{"position":[[7,4],[111,4]]},"655":{"position":[[24,4],[72,4],[247,4]]},"679":{"position":[[4,4]]},"692":{"position":[[58,4],[890,4]]},"694":{"position":[[614,4],[857,4],[1090,4],[1316,4]]}}}],["pump",{"_index":231,"t":{"59":{"position":[[577,5]]},"93":{"position":[[117,4],[2146,4],[2189,4],[3233,4]]},"147":{"position":[[459,6]]},"207":{"position":[[37,4]]},"248":{"position":[[17,4],[244,4]]},"259":{"position":[[40,4],[422,6]]},"264":{"position":[[25,5]]},"358":{"position":[[291,4]]},"419":{"position":[[4,4]]},"425":{"position":[[288,4]]},"432":{"position":[[255,4],[1070,4]]},"443":{"position":[[7,4]]},"445":{"position":[[709,4]]},"468":{"position":[[862,4]]},"503":{"position":[[64,4]]},"507":{"position":[[44,4]]},"513":{"position":[[117,4]]},"535":{"position":[[46,4],[92,4]]},"543":{"position":[[778,4],[886,4],[973,4]]},"549":{"position":[[135,4],[265,4]]},"559":{"position":[[267,4],[296,5],[803,4],[827,4],[881,4],[898,4]]},"563":{"position":[[1498,4],[1680,4],[2036,4],[2060,4],[2103,6],[2753,4],[2920,4],[2963,4],[2980,4],[3011,4]]},"565":{"position":[[3137,4],[3161,4],[3204,6],[3862,4],[3879,4],[3910,4]]},"571":{"position":[[260,5]]},"573":{"position":[[427,4]]},"579":{"position":[[175,4]]},"696":{"position":[[527,4],[610,4]]},"702":{"position":[[104,4],[205,4],[249,4]]},"710":{"position":[[251,5],[468,6],[513,4],[655,5],[706,4],[776,5],[824,5],[857,4],[920,4],[989,4],[1014,4],[1046,4],[1094,4],[1204,4],[1226,4],[1403,4],[1446,6],[2632,5]]},"712":{"position":[[1397,4],[1440,6]]},"719":{"position":[[599,4],[705,4],[792,4]]},"725":{"position":[[135,4],[298,5],[323,4]]},"733":{"position":[[268,4],[297,5],[656,4],[671,4],[738,4],[753,4]]},"737":{"position":[[859,4],[1051,4],[1330,4],[1345,4],[1376,4],[1631,4],[2515,4],[2530,4]]},"739":{"position":[[1937,4],[1952,4],[1983,4],[2242,4],[2257,4]]},"745":{"position":[[691,5],[697,5],[1099,4]]},"747":{"position":[[115,4]]},"762":{"position":[[0,5],[62,7],[133,5],[166,4],[285,5],[431,5]]},"764":{"position":[[17,5],[124,4],[148,6],[178,4],[216,5],[235,5],[245,4],[372,4],[798,4],[896,5],[919,6],[1024,4],[1244,4]]},"766":{"position":[[0,4],[33,5]]},"768":{"position":[[187,5],[399,4],[470,4]]},"770":{"position":[[225,5]]},"773":{"position":[[0,4],[41,5]]},"777":{"position":[[227,5]]},"878":{"position":[[0,4]]},"880":{"position":[[22,5],[32,4],[149,4]]},"882":{"position":[[26,4],[130,4]]},"884":{"position":[[26,4]]},"888":{"position":[[18,5]]},"890":{"position":[[72,6],[129,4]]},"892":{"position":[[38,6]]},"1038":{"position":[[32,4]]},"1040":{"position":[[41,4],[112,6],[227,4],[560,4],[666,4],[728,5],[787,5],[810,6],[915,4]]},"1053":{"position":[[907,6],[943,6]]},"1057":{"position":[[368,6]]},"1059":{"position":[[313,4]]},"1082":{"position":[[51,6],[527,4]]},"1090":{"position":[[1189,4],[1207,6],[1229,6]]},"1227":{"position":[[46,4],[436,6]]},"1232":{"position":[[125,5]]},"1290":{"position":[[1033,4],[1090,5]]},"1309":{"position":[[676,6]]},"1334":{"position":[[45,5]]},"1336":{"position":[[25,5],[73,4],[159,4]]},"1338":{"position":[[38,6],[95,4]]},"1340":{"position":[[38,6]]},"1342":{"position":[[33,4],[88,6]]},"1346":{"position":[[139,4]]},"1348":{"position":[[51,5]]},"1350":{"position":[[28,4]]},"1358":{"position":[[376,4],[396,6],[413,4]]},"1360":{"position":[[38,6],[53,5],[98,5]]},"1362":{"position":[[38,6]]},"1376":{"position":[[537,4]]},"1480":{"position":[[18,4]]},"1487":{"position":[[45,4],[122,5]]},"1490":{"position":[[25,5],[190,5]]}}}],["pump'",{"_index":2552,"t":{"764":{"position":[[268,6]]}}}],["pump/compressor",{"_index":707,"t":{"147":{"position":[[546,15]]}}}],["pump1",{"_index":1885,"t":{"563":{"position":[[2118,5]]},"565":{"position":[[3219,5]]},"892":{"position":[[53,5]]},"1309":{"position":[[691,5]]},"1340":{"position":[[53,5]]},"1362":{"position":[[53,5]]}}}],["pump2",{"_index":1886,"t":{"563":{"position":[[2150,5]]},"565":{"position":[[3251,5]]},"892":{"position":[[105,5]]},"1309":{"position":[[743,5]]},"1340":{"position":[[105,5]]},"1362":{"position":[[105,5]]}}}],["pump3",{"_index":1887,"t":{"563":{"position":[[2182,5]]},"565":{"position":[[3283,5]]}}}],["pump4",{"_index":1888,"t":{"563":{"position":[[2214,5]]},"565":{"position":[[3315,5]]}}}],["pump_",{"_index":3181,"t":{"1342":{"position":[[275,6]]}}}],["pump_a",{"_index":3173,"t":{"1342":{"position":[[103,6]]}}}],["pump_a_lp",{"_index":2354,"t":{"710":{"position":[[1461,9]]},"712":{"position":[[1455,9]]}}}],["pump_b",{"_index":3175,"t":{"1342":{"position":[[146,6]]}}}],["pump_b_lp",{"_index":2355,"t":{"710":{"position":[[1493,9]]},"712":{"position":[[1487,9]]}}}],["pump_c",{"_index":3177,"t":{"1342":{"position":[[189,6]]}}}],["pump_chart",{"_index":1765,"t":{"503":{"position":[[27,10]]},"549":{"position":[[516,10]]},"563":{"position":[[2131,10],[2163,10],[2195,10],[2227,10],[2871,10],[3074,10]]},"565":{"position":[[222,10],[3232,10],[3264,10],[3296,10],[3328,10],[3973,10]]},"725":{"position":[[872,10]]},"737":{"position":[[1450,10]]},"739":{"position":[[402,10],[2057,10]]}}}],["pump_chart.csv",{"_index":1804,"t":{"549":{"position":[[533,14]]},"565":{"position":[[239,14]]},"567":{"position":[[488,14]]},"725":{"position":[[889,14]]},"739":{"position":[[419,14]]},"741":{"position":[[474,14]]}}}],["pump_chart_single_spe",{"_index":460,"t":{"93":{"position":[[2659,23]]},"165":{"position":[[332,23]]},"252":{"position":[[22,23]]},"498":{"position":[[397,23]]},"549":{"position":[[554,23]]},"565":{"position":[[260,23]]},"702":{"position":[[267,24],[522,23]]},"712":{"position":[[192,23]]},"725":{"position":[[910,23]]},"739":{"position":[[440,23]]},"749":{"position":[[332,23]]},"770":{"position":[[78,23]]},"779":{"position":[[91,23],[432,23]]},"1232":{"position":[[78,23]]},"1476":{"position":[[44,23]]},"1495":{"position":[[49,23]]}}}],["pump_chart_variable_spe",{"_index":466,"t":{"93":{"position":[[2803,25]]},"165":{"position":[[356,25]]},"498":{"position":[[425,25]]},"749":{"position":[[356,25]]},"777":{"position":[[78,25]]},"779":{"position":[[250,25]]},"1350":{"position":[[39,25]]},"1476":{"position":[[68,25]]}}}],["pump_d",{"_index":3179,"t":{"1342":{"position":[[232,6]]}}}],["pump_nam",{"_index":850,"t":{"252":{"position":[[6,9]]}}}],["pump_sampl",{"_index":2413,"t":{"725":{"position":[[814,12]]},"737":{"position":[[2587,12]]},"739":{"position":[[344,12],[2314,12]]}}}],["pump_sampled.csv",{"_index":2414,"t":{"725":{"position":[[833,16]]},"739":{"position":[[363,16]]},"741":{"position":[[618,16]]}}}],["pump_system",{"_index":1883,"t":{"563":{"position":[[1909,11],[1979,11],[2091,11]]},"565":{"position":[[3192,11]]},"573":{"position":[[432,11]]},"710":{"position":[[1434,11]]},"712":{"position":[[1428,11]]},"890":{"position":[[26,11]]},"892":{"position":[[26,11]]},"1290":{"position":[[73,11]]},"1300":{"position":[[67,12],[217,12]]},"1309":{"position":[[664,11]]},"1336":{"position":[[36,11]]},"1338":{"position":[[26,11]]},"1340":{"position":[[26,11]]},"1342":{"position":[[76,11]]},"1360":{"position":[[26,11]]},"1362":{"position":[[26,11]]},"1376":{"position":[[586,11]]},"1445":{"position":[[100,12]]},"1447":{"position":[[26,11]]},"1449":{"position":[[26,11]]},"1480":{"position":[[41,11]]}}}],["pure",{"_index":2631,"t":{"794":{"position":[[281,4]]},"896":{"position":[[15,4]]}}}],["puriti",{"_index":2209,"t":{"661":{"position":[[825,7]]}}}],["purpos",{"_index":3037,"t":{"1042":{"position":[[3232,9]]}}}],["push",{"_index":2275,"t":{"679":{"position":[[98,4]]},"681":{"position":[[4,4]]},"692":{"position":[[772,4],[799,4]]},"694":{"position":[[1023,4],[1046,4]]}}}],["put",{"_index":833,"t":{"244":{"position":[[219,3],[278,3],[426,3],[485,3]]},"248":{"position":[[91,3]]},"563":{"position":[[4226,3]]},"710":{"position":[[542,3]]},"764":{"position":[[1099,3]]},"833":{"position":[[84,3],[165,3]]},"998":{"position":[[252,3]]}}}],["pvt",{"_index":2784,"t":{"920":{"position":[[1000,3]]}}}],["pycharm",{"_index":2071,"t":{"627":{"position":[[522,8]]}}}],["pydant",{"_index":995,"t":{"379":{"position":[[76,8]]},"383":{"position":[[256,8],[366,8]]},"455":{"position":[[168,8]]}}}],["pypi",{"_index":1651,"t":{"473":{"position":[[18,4]]}}}],["python",{"_index":161,"t":{"50":{"position":[[155,6]]},"55":{"position":[[11,6],[143,7],[260,6]]},"65":{"position":[[63,6],[127,6],[258,6]]},"83":{"position":[[51,6],[125,6]]},"85":{"position":[[206,6]]},"425":{"position":[[1085,6]]},"569":{"position":[[113,6]]},"661":{"position":[[446,7],[488,6],[524,7]]}}}],["q",{"_index":2685,"t":{"816":{"position":[[88,1]]}}}],["q=25000⋅p1⋅(p2−p1)q",{"_index":2688,"t":{"816":{"position":[[144,19]]}}}],["qa",{"_index":547,"t":{"95":{"position":[[2613,2]]}}}],["qualiti",{"_index":209,"t":{"59":{"position":[[205,7],[946,7]]},"147":{"position":[[13,7]]}}}],["quantiti",{"_index":2581,"t":{"787":{"position":[[0,8]]},"886":{"position":[[0,8]]},"894":{"position":[[0,8]]},"1248":{"position":[[177,8]]}}}],["quarter",{"_index":3039,"t":{"1053":{"position":[[319,8]]}}}],["quarterli",{"_index":641,"t":{"118":{"position":[[1138,9]]}}}],["queri",{"_index":2028,"t":{"602":{"position":[[97,5]]}}}],["question",{"_index":2225,"t":{"661":{"position":[[1394,10]]}}}],["queue",{"_index":1513,"t":{"449":{"position":[[1157,5]]}}}],["quick",{"_index":2097,"t":{"631":{"position":[[590,5]]},"637":{"position":[[10,5]]},"692":{"position":[[114,5]]},"694":{"position":[[86,5]]}}}],["quickli",{"_index":2666,"t":{"807":{"position":[[33,7]]}}}],["quot",{"_index":2126,"t":{"639":{"position":[[448,6]]}}}],["quota",{"_index":666,"t":{"134":{"position":[[91,5]]},"611":{"position":[[74,5]]}}}],["r",{"_index":3021,"t":{"1042":{"position":[[1664,1]]}}}],["race",{"_index":2234,"t":{"663":{"position":[[571,6],[755,6]]}}}],["rais",{"_index":1594,"t":{"464":{"position":[[103,5]]},"476":{"position":[[1193,5],[1691,5]]},"1258":{"position":[[284,7]]}}}],["ran",{"_index":515,"t":{"95":{"position":[[683,3]]}}}],["rang",{"_index":633,"t":{"118":{"position":[[802,5]]},"149":{"position":[[458,5]]},"871":{"position":[[568,5]]}}}],["rate",{"_index":11,"t":{"2":{"position":[[122,4]]},"4":{"position":[[227,4]]},"6":{"position":[[34,5],[57,5],[79,4],[120,4]]},"8":{"position":[[22,5]]},"20":{"position":[[28,4]]},"22":{"position":[[25,4]]},"36":{"position":[[240,4]]},"38":{"position":[[42,4]]},"59":{"position":[[761,5]]},"93":{"position":[[2690,5],[2836,5],[2995,5],[3152,5]]},"104":{"position":[[48,5],[62,5],[92,4],[261,5],[426,5],[479,4],[534,6]]},"118":{"position":[[496,4],[545,5],[655,5],[742,4],[855,4],[1228,4],[1245,5]]},"141":{"position":[[35,4],[205,5],[432,4],[610,5],[633,5],[655,4],[696,4],[882,5]]},"153":{"position":[[179,5]]},"229":{"position":[[49,4],[111,4]]},"231":{"position":[[14,5],[86,4]]},"252":{"position":[[61,5]]},"259":{"position":[[405,4]]},"267":{"position":[[116,5],[186,5]]},"283":{"position":[[352,5],[651,5],[796,5],[859,4],[911,4],[1067,4],[1119,4],[1270,4]]},"311":{"position":[[93,4]]},"342":{"position":[[366,5]]},"377":{"position":[[12,4]]},"387":{"position":[[26,4]]},"398":{"position":[[16,4]]},"408":{"position":[[40,4]]},"414":{"position":[[431,4]]},"421":{"position":[[100,4]]},"425":{"position":[[275,4]]},"432":{"position":[[247,4],[308,4],[622,4],[776,4],[1062,4]]},"436":{"position":[[87,4]]},"445":{"position":[[871,4],[943,4]]},"464":{"position":[[194,4]]},"468":{"position":[[1108,4]]},"476":{"position":[[1182,5],[1748,4]]},"483":{"position":[[250,4],[678,5]]},"488":{"position":[[6,4]]},"493":{"position":[[143,4],[196,4],[308,4]]},"498":{"position":[[315,4]]},"500":{"position":[[630,6]]},"529":{"position":[[269,5],[318,5]]},"537":{"position":[[164,5]]},"543":{"position":[[746,4],[851,4],[876,5],[1070,4],[1096,4],[1391,4]]},"549":{"position":[[585,5]]},"553":{"position":[[481,5],[645,5]]},"555":{"position":[[1175,4],[1203,4]]},"563":{"position":[[175,4],[527,4],[606,4],[755,5],[1592,4],[1814,4],[2827,5],[3085,5],[4137,4],[4463,5]]},"565":{"position":[[291,5],[772,5],[936,5],[3984,5],[4767,5]]},"567":{"position":[[21,5],[345,5],[503,5]]},"571":{"position":[[266,4]]},"575":{"position":[[381,4],[515,4]]},"594":{"position":[[299,4],[332,4]]},"596":{"position":[[7,4],[68,4],[179,4],[326,4]]},"600":{"position":[[453,4]]},"602":{"position":[[237,4],[520,4],[665,4]]},"607":{"position":[[60,4],[243,4]]},"609":{"position":[[80,4]]},"614":{"position":[[16,4],[70,4]]},"621":{"position":[[170,4],[245,4]]},"696":{"position":[[447,4],[597,4]]},"702":{"position":[[561,5]]},"704":{"position":[[370,4]]},"710":{"position":[[605,5],[758,5],[905,5],[959,4],[1117,4]]},"712":{"position":[[231,5]]},"719":{"position":[[549,4],[567,4],[670,4],[695,5],[887,4],[913,4],[976,4],[1025,4],[1132,4]]},"725":{"position":[[949,5]]},"729":{"position":[[407,4],[1126,5],[1162,6]]},"737":{"position":[[365,4],[429,4],[659,5],[945,4],[1461,5],[1703,5],[1714,4],[1858,4],[1922,4],[2061,4],[2199,4],[2619,4],[3105,4],[3492,5]]},"739":{"position":[[479,5],[718,4],[1729,5],[2068,5],[2346,4],[2669,5]]},"764":{"position":[[64,6],[298,5],[348,4],[410,4],[478,4],[991,4]]},"766":{"position":[[63,4]]},"768":{"position":[[10,4]]},"770":{"position":[[109,5],[115,5]]},"773":{"position":[[78,4]]},"775":{"position":[[0,5]]},"777":{"position":[[111,5],[117,5]]},"779":{"position":[[122,5],[283,5],[463,5]]},"781":{"position":[[104,5],[198,7],[372,6],[1343,5],[1372,6]]},"785":{"position":[[78,4]]},"787":{"position":[[24,4]]},"790":{"position":[[0,4]]},"792":{"position":[[0,4]]},"794":{"position":[[147,5]]},"798":{"position":[[78,5],[504,4],[570,4],[638,4],[755,5],[1752,4]]},"809":{"position":[[167,5],[224,4]]},"814":{"position":[[4,4],[68,4],[118,4]]},"816":{"position":[[4,4],[46,4],[298,4],[327,5]]},"828":{"position":[[277,4],[875,4]]},"841":{"position":[[282,5],[404,4]]},"843":{"position":[[206,5],[212,5]]},"845":{"position":[[82,5]]},"849":{"position":[[279,4]]},"851":{"position":[[356,6],[475,6]]},"857":{"position":[[423,4],[581,4],[766,4]]},"864":{"position":[[105,4]]},"880":{"position":[[37,5]]},"882":{"position":[[141,5],[147,5]]},"884":{"position":[[77,5]]},"886":{"position":[[23,4]]},"888":{"position":[[104,4]]},"890":{"position":[[210,4]]},"894":{"position":[[23,4]]},"900":{"position":[[107,4]]},"902":{"position":[[385,5],[391,5]]},"910":{"position":[[758,5],[852,7]]},"916":{"position":[[102,5],[108,5],[348,5],[363,4]]},"918":{"position":[[112,5],[181,5]]},"920":{"position":[[245,4]]},"922":{"position":[[104,5],[110,5],[351,5],[366,4],[580,5],[595,4]]},"924":{"position":[[116,5],[186,5],[303,5],[444,5]]},"926":{"position":[[742,5],[838,5],[1148,4],[1325,4],[1354,4],[1459,4],[1564,5]]},"928":{"position":[[209,5],[260,5],[266,5]]},"930":{"position":[[189,5]]},"934":{"position":[[146,5],[305,4],[884,4],[1187,4],[1374,5]]},"940":{"position":[[262,4],[482,4]]},"948":{"position":[[421,4]]},"955":{"position":[[116,5],[186,5],[304,5]]},"957":{"position":[[189,5]]},"959":{"position":[[214,5],[284,5],[402,5]]},"963":{"position":[[346,5],[508,6]]},"965":{"position":[[1197,4]]},"967":{"position":[[2690,4]]},"973":{"position":[[908,4],[969,4],[1027,4]]},"975":{"position":[[356,5],[812,6]]},"982":{"position":[[942,6],[1154,4],[1204,6],[1329,4],[1486,4],[1705,4]]},"984":{"position":[[682,4]]},"986":{"position":[[173,4],[270,4],[414,5],[952,4]]},"988":{"position":[[855,4],[1019,4],[1217,4],[1316,4],[1403,4],[1649,4],[1742,4],[1798,4],[2235,4]]},"1036":{"position":[[242,5]]},"1042":{"position":[[277,5],[836,5]]},"1053":{"position":[[512,4],[1036,4]]},"1057":{"position":[[419,4]]},"1066":{"position":[[522,5]]},"1072":{"position":[[985,5]]},"1116":{"position":[[197,4]]},"1154":{"position":[[50,5],[79,5],[112,5],[208,4],[473,5],[548,6],[672,4],[868,4],[958,4],[1091,4],[1175,5]]},"1158":{"position":[[23,4],[189,4],[256,4],[316,4],[517,4]]},"1162":{"position":[[386,4]]},"1176":{"position":[[165,4]]},"1184":{"position":[[25,5],[84,4],[273,4],[296,4],[414,5],[514,4]]},"1189":{"position":[[374,5]]},"1191":{"position":[[154,5],[169,4]]},"1193":{"position":[[130,5]]},"1196":{"position":[[442,5]]},"1198":{"position":[[157,5],[172,4],[386,5],[401,4]]},"1200":{"position":[[135,5],[252,5]]},"1227":{"position":[[419,4]]},"1234":{"position":[[116,5],[186,5]]},"1258":{"position":[[312,5]]},"1290":{"position":[[111,4],[224,6],[250,4],[1157,6]]},"1292":{"position":[[55,4],[100,5]]},"1294":{"position":[[55,4],[179,5]]},"1302":{"position":[[23,5],[75,4],[266,4],[289,4],[407,5],[507,4]]},"1304":{"position":[[59,4],[120,4]]},"1306":{"position":[[55,4]]},"1309":{"position":[[356,6],[475,6]]},"1344":{"position":[[45,4]]},"1346":{"position":[[51,4],[203,4]]},"1348":{"position":[[0,5],[6,5],[88,5]]},"1350":{"position":[[0,5],[76,5]]},"1353":{"position":[[94,5],[117,5],[139,4],[180,4]]},"1355":{"position":[[97,5]]},"1358":{"position":[[55,4],[187,5],[278,4],[447,4],[544,4]]},"1360":{"position":[[162,5]]},"1366":{"position":[[19,4]]},"1368":{"position":[[19,5],[39,5]]},"1374":{"position":[[76,4],[144,4],[183,6],[244,6],[300,6],[431,5],[514,4],[598,5],[668,4],[705,4],[797,4],[813,4],[919,5],[1169,5],[1350,5],[1414,6]]},"1376":{"position":[[82,6],[260,4],[279,4],[354,4],[376,5],[474,4]]},"1378":{"position":[[9,5],[67,5],[108,6],[136,5],[216,4]]},"1387":{"position":[[58,5],[106,4],[200,5],[271,4],[310,4],[402,5]]},"1395":{"position":[[705,4],[766,4],[824,4]]},"1439":{"position":[[103,5],[241,5]]},"1445":{"position":[[32,4]]},"1447":{"position":[[88,4],[212,4]]},"1490":{"position":[[54,5],[60,5]]},"1492":{"position":[[58,5],[64,5]]},"1495":{"position":[[84,5]]},"1497":{"position":[[116,5]]}}}],["rate,fuel",{"_index":2455,"t":{"741":{"position":[[279,9]]}}}],["rate,head,efficiency,spe",{"_index":2385,"t":{"715":{"position":[[308,26]]}}}],["rate,pow",{"_index":2439,"t":{"741":{"position":[[23,10],[635,10]]}}}],["rate/head",{"_index":2358,"t":{"710":{"position":[[1984,9]]},"934":{"position":[[816,9]]},"967":{"position":[[870,9]]}}}],["rate.csv",{"_index":2579,"t":{"783":{"position":[[118,18]]}}}],["satisfi",{"_index":3047,"t":{"1055":{"position":[[458,7]]}}}],["save",{"_index":1780,"t":{"535":{"position":[[3,4]]},"687":{"position":[[151,4]]}}}],["scale",{"_index":2819,"t":{"926":{"position":[[1239,7]]}}}],["scan",{"_index":331,"t":{"73":{"position":[[133,8]]},"79":{"position":[[239,8]]}}}],["scenario",{"_index":2256,"t":{"669":{"position":[[238,9]]},"710":{"position":[[237,9]]},"984":{"position":[[518,9]]}}}],["schema",{"_index":1308,"t":{"432":{"position":[[560,6]]},"438":{"position":[[86,6],[134,6],[181,6],[228,6],[272,6],[319,6],[365,6],[410,6]]},"445":{"position":[[231,6],[317,6]]}}}],["scienc",{"_index":891,"t":{"283":{"position":[[997,7],[1201,7]]}}}],["scientif",{"_index":1445,"t":{"445":{"position":[[587,10]]}}}],["scm.com",{"_index":2247,"t":{"667":{"position":[[10,7]]}}}],["scope",{"_index":2228,"t":{"663":{"position":[[117,7]]}}}],["scroll",{"_index":522,"t":{"95":{"position":[[1179,9]]}}}],["sd",{"_index":3188,"t":{"1374":{"position":[[178,4]]}}}],["sea",{"_index":1789,"t":{"543":{"position":[[953,3]]},"559":{"position":[[276,3]]},"696":{"position":[[507,3]]},"719":{"position":[[772,3]]},"733":{"position":[[277,3],[718,3]]},"737":{"position":[[1611,3],[2111,4],[2292,4],[2495,3]]},"739":{"position":[[2222,3]]}}}],["sea_water_injection_rate_m3_per_day",{"_index":2417,"t":{"729":{"position":[[442,36]]},"737":{"position":[[2402,35]]},"739":{"position":[[753,36]]}}}],["seawat",{"_index":1895,"t":{"563":{"position":[[2808,8]]},"737":{"position":[[1684,8],[1903,8]]}}}],["seawater_inj",{"_index":2434,"t":{"737":{"position":[[1927,15],[1998,12],[2126,12],[2302,12]]}}}],["secant",{"_index":1702,"t":{"483":{"position":[[441,6],[558,6]]}}}],["second",{"_index":99,"t":{"44":{"position":[[305,7]]},"543":{"position":[[160,6]]},"563":{"position":[[660,6]]},"710":{"position":[[913,6]]},"950":{"position":[[555,6]]},"965":{"position":[[785,6]]},"967":{"position":[[2126,6]]},"975":{"position":[[684,6],[859,6],[1454,6]]},"988":{"position":[[2454,6],[2575,6]]},"1184":{"position":[[926,6],[949,6]]},"1302":{"position":[[919,6],[942,6]]},"1304":{"position":[[150,6],[171,6]]},"1306":{"position":[[14,6]]},"1403":{"position":[[348,7]]}}}],["seconds\\_per\\_day}{lower\\_heating\\_valu",{"_index":2962,"t":{"1004":{"position":[[432,40]]}}}],["seconds_per_hour",{"_index":2191,"t":{"661":{"position":[[140,16]]}}}],["section",{"_index":266,"t":{"63":{"position":[[97,8],[277,8]]},"149":{"position":[[5,7]]},"191":{"position":[[110,8]]},"259":{"position":[[195,8],[280,8],[469,8]]},"293":{"position":[[140,9]]},"297":{"position":[[30,7]]},"553":{"position":[[86,8]]},"631":{"position":[[632,8]]},"669":{"position":[[293,8]]},"702":{"position":[[56,7],[192,8]]},"704":{"position":[[10,7]]},"708":{"position":[[21,8]]},"710":{"position":[[2599,8]]},"743":{"position":[[5,7],[88,8],[795,7]]},"828":{"position":[[51,7]]},"839":{"position":[[114,7],[258,9],[302,7],[521,8]]},"878":{"position":[[47,8]]},"880":{"position":[[191,7]]},"910":{"position":[[1023,8],[1062,7],[2027,8]]},"944":{"position":[[5,7]]},"975":{"position":[[625,7],[1037,7],[1214,7],[1461,8]]},"984":{"position":[[82,8],[504,8]]},"1028":{"position":[[35,7]]},"1036":{"position":[[36,8]]},"1038":{"position":[[5,7]]},"1044":{"position":[[5,7]]},"1227":{"position":[[203,8],[300,8],[483,8]]},"1466":{"position":[[103,8]]}}}],["see",{"_index":276,"t":{"65":{"position":[[331,3]]},"83":{"position":[[258,3]]},"85":{"position":[[110,3],[288,3]]},"93":{"position":[[1565,3],[2090,3],[3208,3],[5276,3]]},"95":{"position":[[1585,3],[1811,3],[2476,3],[2770,3]]},"102":{"position":[[924,3],[1068,3]]},"108":{"position":[[590,3]]},"159":{"position":[[0,3]]},"165":{"position":[[382,3]]},"188":{"position":[[0,3]]},"215":{"position":[[353,3]]},"235":{"position":[[586,3]]},"256":{"position":[[361,3]]},"279":{"position":[[398,3]]},"289":{"position":[[0,3]]},"295":{"position":[[1205,3]]},"305":{"position":[[0,3]]},"318":{"position":[[79,3]]},"328":{"position":[[279,3]]},"358":{"position":[[85,3]]},"476":{"position":[[196,3],[518,3],[967,3],[1424,3],[1546,3],[2120,3]]},"481":{"position":[[2171,3]]},"503":{"position":[[60,3]]},"527":{"position":[[77,3]]},"533":{"position":[[77,3]]},"535":{"position":[[79,6]]},"547":{"position":[[221,3]]},"549":{"position":[[148,3]]},"553":{"position":[[95,3],[1498,3]]},"557":{"position":[[557,3]]},"563":{"position":[[922,3],[1975,3]]},"631":{"position":[[615,3]]},"643":{"position":[[0,3]]},"653":{"position":[[206,3]]},"657":{"position":[[64,3]]},"665":{"position":[[317,3]]},"667":{"position":[[164,3]]},"704":{"position":[[381,3]]},"710":{"position":[[1222,3]]},"723":{"position":[[221,3]]},"725":{"position":[[148,3],[470,3]]},"809":{"position":[[770,3]]},"826":{"position":[[375,3]]},"828":{"position":[[589,3]]},"835":{"position":[[98,3]]},"902":{"position":[[176,3]]},"910":{"position":[[2001,3]]},"920":{"position":[[637,3]]},"946":{"position":[[486,3]]},"973":{"position":[[1318,3]]},"975":{"position":[[140,3],[1126,4]]},"977":{"position":[[520,3]]},"1020":{"position":[[478,3]]},"1042":{"position":[[599,3],[3059,3],[3456,3],[3830,3],[4229,3]]},"1090":{"position":[[1031,3]]},"1116":{"position":[[258,3]]},"1128":{"position":[[254,3]]},"1132":{"position":[[0,3]]},"1162":{"position":[[801,3]]},"1176":{"position":[[473,3]]},"1220":{"position":[[280,3]]},"1282":{"position":[[75,3]]},"1376":{"position":[[382,3]]},"1441":{"position":[[281,3]]}}}],["seemingli",{"_index":311,"t":{"69":{"position":[[69,9]]}}}],["seen",{"_index":673,"t":{"143":{"position":[[151,4]]},"147":{"position":[[190,4],[596,4],[1160,5]]},"336":{"position":[[226,4]]},"747":{"position":[[40,4]]},"982":{"position":[[682,4]]},"988":{"position":[[758,4],[800,4]]},"1374":{"position":[[951,4]]}}}],["select",{"_index":719,"t":{"147":{"position":[[1326,9]]},"704":{"position":[[137,8]]}}}],["self",{"_index":2185,"t":{"659":{"position":[[154,4],[181,4]]},"661":{"position":[[322,4]]}}}],["selftest",{"_index":3059,"t":{"1064":{"position":[[680,9]]},"1068":{"position":[[63,8]]}}}],["send",{"_index":1871,"t":{"563":{"position":[[597,4]]},"689":{"position":[[12,4]]},"694":{"position":[[848,4]]},"1184":{"position":[[581,9],[1010,4]]},"1302":{"position":[[574,9],[1003,4]]},"1306":{"position":[[40,4]]}}}],["sensit",{"_index":503,"t":{"93":{"position":[[5215,9]]},"1090":{"position":[[367,10]]}}}],["separ",{"_index":408,"t":{"93":{"position":[[354,9],[5039,9]]},"104":{"position":[[600,8]]},"108":{"position":[[402,10]]},"163":{"position":[[278,9]]},"165":{"position":[[156,9]]},"259":{"position":[[161,8]]},"293":{"position":[[131,8]]},"316":{"position":[[24,8]]},"416":{"position":[[92,10]]},"427":{"position":[[491,8]]},"445":{"position":[[670,10]]},"476":{"position":[[411,10]]},"513":{"position":[[354,9]]},"547":{"position":[[65,9]]},"653":{"position":[[132,8]]},"723":{"position":[[65,9]]},"743":{"position":[[79,8]]},"745":{"position":[[353,9]]},"749":{"position":[[156,9]]},"751":{"position":[[288,8]]},"984":{"position":[[140,8]]},"1053":{"position":[[610,9],[651,9]]},"1066":{"position":[[1042,9],[1215,9]]},"1227":{"position":[[169,8]]}}}],["seri",{"_index":31,"t":{"4":{"position":[[165,6]]},"22":{"position":[[58,7]]},"36":{"position":[[170,6]]},"102":{"position":[[66,6],[206,6],[428,6],[482,6],[1106,6],[1337,6]]},"104":{"position":[[77,7]]},"106":{"position":[[22,6]]},"235":{"position":[[193,6],[265,6]]},"271":{"position":[[237,6]]},"385":{"position":[[61,6]]},"414":{"position":[[188,6],[372,6]]},"436":{"position":[[145,6]]},"438":{"position":[[403,6]]},"545":{"position":[[54,6]]},"547":{"position":[[119,6]]},"573":{"position":[[166,6]]},"591":{"position":[[10,6]]},"698":{"position":[[58,6]]},"721":{"position":[[54,6]]},"723":{"position":[[119,6]]},"802":{"position":[[707,6]]},"826":{"position":[[288,6],[384,6]]},"973":{"position":[[1248,6]]},"1016":{"position":[[328,6]]},"1018":{"position":[[19,6]]},"1020":{"position":[[71,6]]},"1051":{"position":[[81,6]]},"1066":{"position":[[133,6]]},"1074":{"position":[[163,6]]},"1078":{"position":[[469,6]]},"1124":{"position":[[131,6]]},"1427":{"position":[[169,6]]},"1435":{"position":[[242,6]]},"1437":{"position":[[51,6],[68,6]]},"1441":{"position":[[290,6]]}}}],["servic",{"_index":2244,"t":{"665":{"position":[[293,7]]}}}],["set",{"_index":26,"t":{"4":{"position":[[107,3],[153,3]]},"36":{"position":[[112,3],[158,3]]},"44":{"position":[[339,3],[520,3]]},"85":{"position":[[241,7]]},"93":{"position":[[91,7],[558,5],[1863,3],[1871,7],[5093,3]]},"95":{"position":[[1309,3],[1728,3]]},"102":{"position":[[919,4]]},"104":{"position":[[110,3],[186,3],[310,3],[436,3]]},"108":{"position":[[345,4],[727,3]]},"116":{"position":[[57,7],[101,7],[160,8],[273,7]]},"118":{"position":[[165,3]]},"127":{"position":[[113,3]]},"153":{"position":[[209,3]]},"157":{"position":[[5,3]]},"199":{"position":[[117,3],[182,3]]},"244":{"position":[[208,4],[415,4]]},"248":{"position":[[459,3]]},"256":{"position":[[45,4],[53,5],[142,3],[375,4]]},"259":{"position":[[244,3],[319,3]]},"279":{"position":[[85,8]]},"287":{"position":[[50,3],[123,3]]},"297":{"position":[[57,3],[176,3]]},"427":{"position":[[412,8]]},"430":{"position":[[220,8]]},"432":{"position":[[84,3]]},"438":{"position":[[315,3],[729,8]]},"455":{"position":[[272,3],[367,8]]},"468":{"position":[[1085,3]]},"476":{"position":[[482,4],[1637,7]]},"481":{"position":[[319,5],[413,4],[442,3],[464,4],[1297,3]]},"483":{"position":[[1095,4],[1278,7]]},"498":{"position":[[285,3],[761,3]]},"500":{"position":[[800,3],[853,3]]},"513":{"position":[[91,7]]},"529":{"position":[[407,8]]},"543":{"position":[[487,3],[503,3],[1148,3],[1164,3]]},"559":{"position":[[23,4],[38,3],[184,3],[515,3]]},"561":{"position":[[23,4],[38,3],[183,3],[455,3]]},"563":{"position":[[865,7],[1617,3]]},"565":{"position":[[2432,3],[4317,3]]},"573":{"position":[[108,3],[154,3]]},"627":{"position":[[371,3]]},"633":{"position":[[191,3]]},"665":{"position":[[179,3]]},"667":{"position":[[182,3]]},"679":{"position":[[105,3]]},"692":{"position":[[806,3]]},"696":{"position":[[48,4],[229,3],[245,3]]},"702":{"position":[[129,3],[306,3]]},"710":{"position":[[23,3],[60,3],[627,9]]},"719":{"position":[[326,3],[342,3]]},"733":{"position":[[23,4],[38,3],[184,3],[327,3],[380,3]]},"737":{"position":[[971,3]]},"739":{"position":[[1435,3]]},"743":{"position":[[286,5],[731,3]]},"745":{"position":[[651,3]]},"751":{"position":[[345,3]]},"753":{"position":[[128,4]]},"766":{"position":[[185,3]]},"768":{"position":[[49,3],[101,3]]},"773":{"position":[[200,3]]},"781":{"position":[[24,3],[97,3]]},"802":{"position":[[582,3],[933,4],[1421,3],[1761,6],[1949,4]]},"824":{"position":[[158,8]]},"826":{"position":[[21,3]]},"830":{"position":[[74,3],[515,3]]},"849":{"position":[[334,8]]},"859":{"position":[[197,4],[205,5],[294,3],[605,4],[689,3]]},"864":{"position":[[28,3],[250,4]]},"890":{"position":[[320,8],[479,8],[509,7],[600,3],[648,8]]},"902":{"position":[[281,3]]},"910":{"position":[[425,9],[751,3]]},"912":{"position":[[32,3],[105,3]]},"926":{"position":[[660,4],[688,3]]},"934":{"position":[[245,3],[536,7],[637,4],[666,3],[1427,3]]},"940":{"position":[[697,7]]},"948":{"position":[[449,3]]},"952":{"position":[[141,4]]},"965":{"position":[[1225,3]]},"967":{"position":[[2718,3]]},"975":{"position":[[1427,3],[1630,3]]},"998":{"position":[[32,7],[77,7],[174,3]]},"1004":{"position":[[898,3]]},"1016":{"position":[[633,3]]},"1020":{"position":[[441,3]]},"1022":{"position":[[53,3]]},"1044":{"position":[[64,7]]},"1055":{"position":[[10,4]]},"1057":{"position":[[132,3],[671,4]]},"1064":{"position":[[242,3]]},"1066":{"position":[[454,3]]},"1072":{"position":[[917,3]]},"1090":{"position":[[217,3]]},"1116":{"position":[[248,9]]},"1146":{"position":[[54,4]]},"1154":{"position":[[286,7],[432,3],[624,3]]},"1162":{"position":[[563,7]]},"1176":{"position":[[235,7]]},"1227":{"position":[[258,3],[339,3]]},"1230":{"position":[[171,4]]},"1238":{"position":[[117,4],[171,3]]},"1256":{"position":[[27,4],[115,7]]},"1258":{"position":[[20,7]]},"1264":{"position":[[209,3]]},"1266":{"position":[[20,7]]},"1290":{"position":[[31,8],[992,8]]},"1292":{"position":[[153,8]]},"1294":{"position":[[232,8]]},"1296":{"position":[[174,8],[207,3]]},"1298":{"position":[[180,8],[215,3]]},"1300":{"position":[[299,3],[369,9],[509,9]]},"1321":{"position":[[217,3],[285,4]]},"1358":{"position":[[249,8]]},"1403":{"position":[[382,3],[546,3]]},"1435":{"position":[[547,3]]},"1439":{"position":[[271,3]]}}}],["set_regular",{"_index":1171,"t":{"421":{"position":[[150,14]]}}}],["setting.yml",{"_index":365,"t":{"81":{"position":[[62,15],[179,15]]}}}],["seven",{"_index":2941,"t":{"990":{"position":[[355,5]]}}}],["sever",{"_index":853,"t":{"256":{"position":[[27,7]]},"316":{"position":[[49,7]]},"500":{"position":[[7,7]]},"753":{"position":[[161,7]]},"762":{"position":[[125,7]]},"800":{"position":[[96,7]]},"802":{"position":[[1374,7]]},"859":{"position":[[179,7]]},"1016":{"position":[[274,7]]},"1435":{"position":[[188,7]]}}}],["shaft",{"_index":2570,"t":{"781":{"position":[[954,5]]},"785":{"position":[[275,5],[402,5]]},"910":{"position":[[132,5],[247,6],[1903,5]]},"916":{"position":[[309,6]]},"922":{"position":[[312,6],[541,6]]},"946":{"position":[[363,5]]},"963":{"position":[[110,6],[160,5],[242,5],[283,5]]},"982":{"position":[[94,6]]},"986":{"position":[[49,5]]},"1010":{"position":[[127,5]]},"1042":{"position":[[2735,6],[3529,5]]},"1191":{"position":[[115,6]]},"1198":{"position":[[118,6],[347,6]]}}}],["share",{"_index":2755,"t":{"888":{"position":[[29,5]]}}}],["shell",{"_index":3058,"t":{"1064":{"position":[[454,6],[546,6]]}}}],["shift",{"_index":2313,"t":{"704":{"position":[[334,7]]},"710":{"position":[[1891,7],[2041,7]]},"926":{"position":[[1084,5]]},"982":{"position":[[774,7]]},"1059":{"position":[[540,8]]}}}],["shit",{"_index":2254,"t":{"669":{"position":[[166,5]]}}}],["shore",{"_index":434,"t":{"93":{"position":[[1710,6],[1797,5],[1894,5],[2084,5],[2105,5]]},"476":{"position":[[377,5],[684,5]]},"481":{"position":[[682,5]]},"859":{"position":[[811,6]]},"869":{"position":[[16,5],[146,5]]},"871":{"position":[[246,5],[433,5],[536,5],[707,5]]},"1090":{"position":[[1341,5]]}}}],["short",{"_index":2176,"t":{"653":{"position":[[391,5]]},"669":{"position":[[626,5]]},"1066":{"position":[[1118,5]]},"1076":{"position":[[210,5]]}}}],["show",{"_index":278,"t":{"67":{"position":[[4,4],[191,4],[235,4],[303,4],[465,4],[792,4]]},"95":{"position":[[566,4]]},"106":{"position":[[91,4]]},"118":{"position":[[1022,5]]},"244":{"position":[[8,7]]},"283":{"position":[[1344,5]]},"318":{"position":[[53,4]]},"425":{"position":[[966,4]]},"436":{"position":[[476,7]]},"481":{"position":[[16,4],[136,4],[742,4],[981,4],[1105,4],[1366,4],[1694,4],[1733,4],[1755,4],[1789,4],[1838,4],[1910,4],[1958,4],[2327,4]]},"495":{"position":[[282,7]]},"673":{"position":[[107,4]]},"802":{"position":[[1676,6]]},"1042":{"position":[[4005,5]]},"1064":{"position":[[124,4],[334,4],[463,4],[512,4],[603,4],[731,5],[748,4]]},"1066":{"position":[[1688,4]]},"1068":{"position":[[99,4]]},"1070":{"position":[[11,4],[68,4],[118,4],[165,4],[185,4]]},"1072":{"position":[[0,4],[83,4],[159,4],[221,4],[1062,4]]},"1074":{"position":[[0,4],[27,4],[83,4],[332,4]]},"1184":{"position":[[795,4]]},"1302":{"position":[[788,4]]}}}],["shown",{"_index":282,"t":{"67":{"position":[[59,5]]},"95":{"position":[[2653,5]]},"147":{"position":[[268,5],[352,5]]},"481":{"position":[[1897,5]]},"555":{"position":[[915,5],[983,5]]},"753":{"position":[[279,5]]},"896":{"position":[[284,6]]},"1128":{"position":[[20,5]]}}}],["side",{"_index":908,"t":{"295":{"position":[[1164,6]]},"631":{"position":[[127,4]]},"975":{"position":[[428,4]]},"1042":{"position":[[153,5]]}}}],["sign",{"_index":697,"t":{"145":{"position":[[649,4],[796,5]]}}}],["signifi",{"_index":3129,"t":{"1184":{"position":[[1041,9]]},"1302":{"position":[[1034,9]]}}}],["signific",{"_index":675,"t":{"145":{"position":[[57,11],[189,11],[859,12],[933,11]]},"990":{"position":[[457,11]]}}}],["significantli",{"_index":2842,"t":{"948":{"position":[[522,14]]},"965":{"position":[[1298,14]]},"967":{"position":[[2791,14]]}}}],["silenc",{"_index":2213,"t":{"661":{"position":[[886,9]]}}}],["silent",{"_index":2210,"t":{"661":{"position":[[858,9]]}}}],["sim",{"_index":1797,"t":{"547":{"position":[[290,3]]},"555":{"position":[[827,3]]},"565":{"position":[[32,3]]},"723":{"position":[[290,3]]},"729":{"position":[[1021,3]]},"739":{"position":[[32,3]]},"835":{"position":[[13,3]]}}}],["sim1",{"_index":738,"t":{"149":{"position":[[548,4]]},"700":{"position":[[96,4]]},"712":{"position":[[21,4]]},"835":{"position":[[229,4]]},"1024":{"position":[[21,4]]},"1441":{"position":[[21,4]]}}}],["sim1:col1",{"_index":1673,"t":{"476":{"position":[[1975,9]]},"1032":{"position":[[40,9],[124,9],[159,9]]},"1036":{"position":[[372,9]]}}}],["sim1:gas_prod",{"_index":3185,"t":{"1350":{"position":[[6,13]]},"1370":{"position":[[19,13]]}}}],["sim1:gas_sal",{"_index":3187,"t":{"1370":{"position":[[35,14]]}}}],["sim1;discharge_pressur",{"_index":2728,"t":{"845":{"position":[[162,23]]}}}],["sim1;gas_inj",{"_index":2644,"t":{"798":{"position":[[521,12]]},"814":{"position":[[240,12]]},"851":{"position":[[386,12],[530,12]]},"1309":{"position":[[386,12],[530,12]]}}}],["sim1;gas_lift",{"_index":2734,"t":{"851":{"position":[[318,13]]},"1186":{"position":[[318,13]]},"1309":{"position":[[318,13]]},"1449":{"position":[[153,13]]}}}],["sim1;gas_prod",{"_index":2010,"t":{"575":{"position":[[398,13],[532,13]]},"708":{"position":[[386,13]]},"710":{"position":[[2432,13]]},"712":{"position":[[1224,13],[1935,13]]},"845":{"position":[[88,13]]},"851":{"position":[[300,13]]},"900":{"position":[[124,13]]},"1186":{"position":[[300,13]]},"1309":{"position":[[300,13]]},"1449":{"position":[[135,13]]}}}],["sim1;gas_prod_b",{"_index":3199,"t":{"1387":{"position":[[315,17],[428,15]]}}}],["sim1;gas_sal",{"_index":830,"t":{"242":{"position":[[136,14]]},"798":{"position":[[1769,14]]},"851":{"position":[[365,14],[484,14],[507,14]]},"1309":{"position":[[365,14],[484,14],[507,14]]}}}],["sim1;gor",{"_index":2764,"t":{"900":{"position":[[172,8]]}}}],["sim1;inj_pressur",{"_index":2735,"t":{"851":{"position":[[455,17],[599,17]]},"1309":{"position":[[455,17],[599,17]]}}}],["sim1;oil",{"_index":2679,"t":{"811":{"position":[[522,9],[585,9],[642,9],[708,9]]}}}],["sim1;oil_prod",{"_index":827,"t":{"242":{"position":[[92,13]]},"708":{"position":[[368,13]]},"712":{"position":[[1206,13]]},"837":{"position":[[176,13]]}}}],["sim1;oil_prod:pla",{"_index":3104,"t":{"1128":{"position":[[199,17]]}}}],["sim1;powerloss",{"_index":3168,"t":{"1325":{"position":[[39,14]]}}}],["sim1;regular",{"_index":3197,"t":{"1385":{"position":[[12,15]]}}}],["sim1;suction_pressur",{"_index":2648,"t":{"798":{"position":[[1833,21]]},"845":{"position":[[120,21]]}}}],["sim1;temp",{"_index":2766,"t":{"900":{"position":[[217,9]]}}}],["sim1;water_inj",{"_index":2356,"t":{"710":{"position":[[1536,14]]},"712":{"position":[[1530,14]]},"884":{"position":[[83,14]]},"892":{"position":[[168,14]]},"1309":{"position":[[806,14]]},"1362":{"position":[[168,14]]},"1449":{"position":[[57,14]]}}}],["sim1;water_prod",{"_index":3158,"t":{"1309":{"position":[[846,15],[896,16]]}}}],["sim1;water_prod:field_a",{"_index":2719,"t":{"835":{"position":[[177,23]]}}}],["sim2",{"_index":2682,"t":{"814":{"position":[[184,6]]},"835":{"position":[[238,4]]},"1024":{"position":[[85,4]]}}}],["sim2:gas_prod_a",{"_index":3200,"t":{"1387":{"position":[[408,15]]}}}],["sim2:oil_prod",{"_index":829,"t":{"242":{"position":[[118,13]]},"837":{"position":[[202,13]]}}}],["sim2;gas_inj",{"_index":2684,"t":{"814":{"position":[[257,12]]}}}],["sim2;gas_prod_a",{"_index":3198,"t":{"1387":{"position":[[276,17]]}}}],["sim2;gas_sal",{"_index":2722,"t":{"837":{"position":[[220,14]]}}}],["sim2;water_prod",{"_index":3160,"t":{"1309":{"position":[[875,16],[917,16]]}}}],["sim2;water_prod:field_b",{"_index":2720,"t":{"835":{"position":[[205,23]]}}}],["sim8;gas_prod",{"_index":3101,"t":{"1120":{"position":[[265,13]]}}}],["sim8;water_inj",{"_index":3183,"t":{"1342":{"position":[[329,14]]}}}],["sim:gas_prod",{"_index":2427,"t":{"729":{"position":[[1132,12]]}}}],["sim:oil_prod",{"_index":2426,"t":{"729":{"position":[[1091,12]]}}}],["sim;col1",{"_index":2985,"t":{"1036":{"position":[[74,8]]}}}],["sim;col2",{"_index":2987,"t":{"1036":{"position":[[101,8]]}}}],["sim;flag",{"_index":2680,"t":{"811":{"position":[[759,9],[812,9]]}}}],["sim;ga",{"_index":2678,"t":{"811":{"position":[[359,7],[393,7],[420,7],[444,7],[476,7],[510,7],[573,7],[630,7],[696,7],[747,7],[800,7]]}}}],["sim;gas_inj",{"_index":2421,"t":{"729":{"position":[[743,11]]},"737":{"position":[[503,11]]},"739":{"position":[[1054,11]]}}}],["sim;gas_lift",{"_index":1856,"t":{"555":{"position":[[576,13]]},"565":{"position":[[2062,13]]},"729":{"position":[[759,12]]},"737":{"position":[[519,13]]},"739":{"position":[[1070,12]]}}}],["sim;gas_prod",{"_index":1849,"t":{"555":{"position":[[368,12],[426,12],[511,12]]},"563":{"position":[[4208,13],[4271,12]]},"565":{"position":[[1854,12],[1912,12],[1997,12]]},"729":{"position":[[368,12],[691,12]]},"737":{"position":[[3176,13]]},"739":{"position":[[679,12],[1002,12]]},"816":{"position":[[340,12],[359,12]]}}}],["sim;gas_sal",{"_index":824,"t":{"240":{"position":[[27,13]]}}}],["sim;gas_sales:field_a",{"_index":832,"t":{"244":{"position":[[138,21]]}}}],["sim;gas_sales:field_b",{"_index":835,"t":{"244":{"position":[[346,24]]}}}],["sim;oil_prod",{"_index":823,"t":{"240":{"position":[[10,12]]},"555":{"position":[[351,12]]},"565":{"position":[[1837,12]]},"729":{"position":[[351,12]]},"739":{"position":[[662,12]]},"835":{"position":[[0,12]]},"837":{"position":[[101,12]]},"1094":{"position":[[110,12]]}}}],["sim;oil_prod:field_a",{"_index":831,"t":{"244":{"position":[[113,20]]}}}],["sim;oil_prod:field_b",{"_index":834,"t":{"244":{"position":[[321,20]]}}}],["sim;p1",{"_index":2694,"t":{"816":{"position":[[394,6],[418,6]]}}}],["sim;p2",{"_index":2695,"t":{"816":{"position":[[407,6]]}}}],["sim;water_inj",{"_index":1852,"t":{"555":{"position":[[468,13]]},"563":{"position":[[1661,14]]},"565":{"position":[[1954,13]]},"729":{"position":[[486,13]]},"739":{"position":[[797,13]]}}}],["sim;water_prod",{"_index":1858,"t":{"555":{"position":[[629,14]]},"563":{"position":[[1761,14]]},"565":{"position":[[2115,14]]},"729":{"position":[[504,14],[523,14],[542,15],[570,15],[601,15],[630,15],[817,14],[903,14]]},"737":{"position":[[1031,15],[1143,14]]},"739":{"position":[[815,14],[834,14],[853,15],[881,15],[912,15],[941,15],[1128,14],[1214,14]]}}}],["similar",{"_index":134,"t":{"44":{"position":[[971,7]]},"108":{"position":[[773,8]]},"523":{"position":[[198,7]]},"543":{"position":[[21,7]]},"627":{"position":[[348,7],[552,8]]},"1403":{"position":[[967,7]]},"1466":{"position":[[233,7]]}}}],["similarli",{"_index":2917,"t":{"986":{"position":[[243,10]]}}}],["simpl",{"_index":168,"t":{"53":{"position":[[75,6]]},"73":{"position":[[144,6]]},"79":{"position":[[250,6]]},"85":{"position":[[74,6]]},"95":{"position":[[417,6],[2516,6]]},"385":{"position":[[5,6]]},"495":{"position":[[198,6],[225,6]]},"515":{"position":[[323,6]]},"543":{"position":[[32,6]]},"569":{"position":[[29,6]]},"645":{"position":[[26,6]]},"661":{"position":[[597,6]]},"663":{"position":[[429,6]]},"745":{"position":[[958,6]]},"828":{"position":[[201,6]]},"1066":{"position":[[998,6],[1171,6]]},"1128":{"position":[[2,6]]}}}],["simple_compressor",{"_index":3161,"t":{"1317":{"position":[[16,17]]}}}],["simpler",{"_index":1865,"t":{"555":{"position":[[1057,7]]},"1040":{"position":[[63,7]]}}}],["simpli",{"_index":621,"t":{"118":{"position":[[461,6]]},"982":{"position":[[1550,6]]},"998":{"position":[[245,6]]},"1059":{"position":[[575,6]]},"1090":{"position":[[859,6]]}}}],["simplifi",{"_index":544,"t":{"95":{"position":[[2434,8]]},"410":{"position":[[137,10]]},"449":{"position":[[1305,8]]},"476":{"position":[[1769,10]]},"495":{"position":[[257,10]]},"507":{"position":[[108,10]]},"553":{"position":[[246,10]]},"563":{"position":[[400,10]]},"609":{"position":[[91,10]]},"847":{"position":[[190,10]]},"910":{"position":[[1613,10]]},"930":{"position":[[295,10]]},"944":{"position":[[183,10]]},"946":{"position":[[4,10]]},"1042":{"position":[[3460,10]]},"1047":{"position":[[30,10]]},"1053":{"position":[[25,8],[759,8]]}}}],["simplified_compressor_model",{"_index":2860,"t":{"955":{"position":[[728,27]]},"957":{"position":[[347,27],[962,27]]}}}],["simplified_compressor_model_with_turbin",{"_index":2862,"t":{"957":{"position":[[873,40]]}}}],["simplified_compressor_train_model",{"_index":1843,"t":{"553":{"position":[[1108,33]]},"563":{"position":[[1157,33],[1226,33]]},"565":{"position":[[1397,33],[2788,33],[2857,33]]},"704":{"position":[[1518,33]]},"710":{"position":[[2379,33]]},"712":{"position":[[800,33],[1882,33]]},"959":{"position":[[641,33]]},"961":{"position":[[202,33]]},"1014":{"position":[[111,33]]},"1270":{"position":[[16,33]]}}}],["simplified_compressor_train_model_with_turbin",{"_index":2968,"t":{"1014":{"position":[[16,46]]}}}],["simplified_variable_speed_compressor_train",{"_index":1844,"t":{"553":{"position":[[1148,42]]},"565":{"position":[[1437,42]]},"704":{"position":[[593,42],[1558,42]]},"712":{"position":[[840,42]]},"908":{"position":[[78,42]]},"932":{"position":[[61,42]]},"948":{"position":[[35,42]]},"950":{"position":[[145,42]]},"952":{"position":[[720,42]]},"955":{"position":[[762,42]]},"957":{"position":[[381,42]]},"959":{"position":[[681,42]]},"961":{"position":[[242,42]]},"1264":{"position":[[116,42]]},"1266":{"position":[[54,42]]},"1268":{"position":[[35,42]]},"1270":{"position":[[56,42]]},"1278":{"position":[[78,42]]},"1317":{"position":[[40,42]]},"1482":{"position":[[163,42]]}}}],["simul",{"_index":2671,"t":{"809":{"position":[[483,10]]},"811":{"position":[[13,10]]},"920":{"position":[[812,10]]},"975":{"position":[[1198,11]]},"1016":{"position":[[222,10],[388,10],[870,10]]},"1053":{"position":[[142,10]]},"1374":{"position":[[1190,11]]},"1435":{"position":[[136,10],[302,10],[784,10]]}}}],["singl",{"_index":287,"t":{"67":{"position":[[210,6]]},"173":{"position":[[2,6]]},"235":{"position":[[181,6]]},"271":{"position":[[218,6]]},"297":{"position":[[209,6]]},"320":{"position":[[49,6]]},"358":{"position":[[611,6],[834,6]]},"414":{"position":[[87,6]]},"438":{"position":[[490,6]]},"445":{"position":[[277,6]]},"476":{"position":[[1094,6]]},"483":{"position":[[123,6]]},"486":{"position":[[261,6]]},"491":{"position":[[44,6],[391,6]]},"500":{"position":[[309,6]]},"549":{"position":[[252,6]]},"559":{"position":[[874,6]]},"563":{"position":[[2746,6],[2956,6]]},"565":{"position":[[3855,6]]},"631":{"position":[[86,6]]},"702":{"position":[[218,6]]},"710":{"position":[[699,6]]},"725":{"position":[[310,6]]},"751":{"position":[[422,6]]},"762":{"position":[[18,6]]},"764":{"position":[[222,6],[359,6],[906,6]]},"766":{"position":[[20,6]]},"768":{"position":[[174,6],[432,6]]},"841":{"position":[[133,6]]},"880":{"position":[[15,6]]},"902":{"position":[[223,6]]},"910":{"position":[[19,6],[446,6],[515,6],[1070,6]]},"912":{"position":[[142,6]]},"914":{"position":[[4,6],[37,6]]},"918":{"position":[[317,6],[396,6]]},"934":{"position":[[320,6],[362,6]]},"944":{"position":[[109,6]]},"963":{"position":[[4,6],[65,6],[123,6],[576,6],[727,6],[781,6]]},"973":{"position":[[1208,6]]},"977":{"position":[[205,6]]},"982":{"position":[[198,7]]},"984":{"position":[[365,6]]},"988":{"position":[[632,6],[944,6]]},"1040":{"position":[[797,6]]},"1042":{"position":[[3577,6],[3834,6]]},"1082":{"position":[[538,7]]},"1090":{"position":[[1194,6]]},"1154":{"position":[[812,6]]},"1189":{"position":[[22,6],[84,6]]},"1248":{"position":[[147,6]]},"1258":{"position":[[54,6]]},"1380":{"position":[[33,6]]}}}],["single_spe",{"_index":470,"t":{"93":{"position":[[2967,12]]},"916":{"position":[[82,12]]},"918":{"position":[[92,12]]},"1191":{"position":[[82,12],[409,12]]},"1193":{"position":[[92,12]]}}}],["single_speed_compressor",{"_index":787,"t":{"195":{"position":[[109,23]]}}}],["single_speed_compressor_chart",{"_index":467,"t":{"93":{"position":[[2902,29]]}}}],["single_speed_compressor_train",{"_index":788,"t":{"195":{"position":[[139,29]]},"908":{"position":[[48,29]]},"965":{"position":[[35,29]]},"984":{"position":[[635,32]]},"1260":{"position":[[35,29]]},"1278":{"position":[[48,29]]},"1482":{"position":[[101,29]]}}}],["single_speed_pump",{"_index":3207,"t":{"1495":{"position":[[25,17]]}}}],["single_speed_pump_chart",{"_index":459,"t":{"93":{"position":[[2606,23]]}}}],["singular",{"_index":2909,"t":{"982":{"position":[[739,8]]}}}],["site",{"_index":2048,"t":{"625":{"position":[[5,4]]},"631":{"position":[[58,4],[192,4],[298,4]]}}}],["situat",{"_index":1311,"t":{"432":{"position":[[595,10]]},"483":{"position":[[255,9]]},"982":{"position":[[568,9]]},"986":{"position":[[5,9]]}}}],["six",{"_index":2521,"t":{"743":{"position":[[75,3]]}}}],["skeleton",{"_index":2305,"t":{"698":{"position":[[144,8]]},"747":{"position":[[28,8]]}}}],["skew",{"_index":2835,"t":{"934":{"position":[[1406,4]]}}}],["skip",{"_index":1080,"t":{"400":{"position":[[0,4]]},"416":{"position":[[14,4]]},"495":{"position":[[6,4],[51,4]]},"871":{"position":[[582,4]]}}}],["slight",{"_index":2040,"t":{"607":{"position":[[595,6]]}}}],["slightli",{"_index":760,"t":{"169":{"position":[[236,8]]}}}],["slot",{"_index":1753,"t":{"500":{"position":[[367,5]]}}}],["sm3",{"_index":775,"t":{"180":{"position":[[35,3]]},"235":{"position":[[78,4]]},"727":{"position":[[136,3]]}}}],["sm3/cd",{"_index":2036,"t":{"607":{"position":[[325,6]]}}}],["sm3/d",{"_index":1926,"t":{"567":{"position":[[419,7]]},"715":{"position":[[31,7]]},"741":{"position":[[800,6],[807,6],[826,6],[833,5]]},"798":{"position":[[807,8]]}}}],["sm3/day",{"_index":822,"t":{"237":{"position":[[25,9],[71,9],[104,9]]},"557":{"position":[[261,7]]},"719":{"position":[[987,8],[1035,7]]},"731":{"position":[[261,7]]},"737":{"position":[[370,9],[1214,8],[2080,8],[2231,8],[2263,7]]},"757":{"position":[[61,9]]},"759":{"position":[[40,7]]},"781":{"position":[[834,9]]},"787":{"position":[[29,7],[86,7]]},"796":{"position":[[61,7]]},"798":{"position":[[536,9],[1786,9]]},"871":{"position":[[78,9]]},"886":{"position":[[28,7]]},"894":{"position":[[28,7]]},"902":{"position":[[408,10]]},"948":{"position":[[426,9]]},"965":{"position":[[1202,9]]},"967":{"position":[[2695,9]]},"1051":{"position":[[35,8]]},"1116":{"position":[[202,10]]},"1120":{"position":[[281,9]]},"1290":{"position":[[116,9]]},"1292":{"position":[[60,9]]},"1445":{"position":[[37,9]]},"1447":{"position":[[107,10]]}}}],["sm3/day],[mw",{"_index":2440,"t":{"741":{"position":[[34,15],[646,15]]}}}],["sm3/day],[sm3/day",{"_index":2456,"t":{"741":{"position":[[289,20]]}}}],["sm3/hr",{"_index":2821,"t":{"926":{"position":[[1409,7]]}}}],["sm3/sd",{"_index":2035,"t":{"607":{"position":[[296,6]]}}}],["small",{"_index":2041,"t":{"609":{"position":[[17,5]]},"621":{"position":[[50,5]]},"641":{"position":[[646,6]]},"655":{"position":[[66,5]]},"1004":{"position":[[828,5]]},"1082":{"position":[[420,5]]}}}],["smaller",{"_index":698,"t":{"145":{"position":[[662,7]]},"517":{"position":[[17,7]]},"527":{"position":[[17,7]]},"533":{"position":[[17,7]]},"647":{"position":[[92,7]]},"655":{"position":[[91,8]]},"661":{"position":[[199,7]]},"764":{"position":[[691,7]]},"920":{"position":[[942,8]]},"1053":{"position":[[364,7],[699,7]]}}}],["snake_cas",{"_index":1320,"t":{"432":{"position":[[876,10]]}}}],["snapshot",{"_index":1046,"t":{"383":{"position":[[399,8]]},"449":{"position":[[1435,9]]},"468":{"position":[[1343,9]]},"687":{"position":[[158,8],[313,8]]}}}],["snok/instal",{"_index":1220,"t":{"425":{"position":[[574,12]]}}}],["soav",{"_index":2944,"t":{"990":{"position":[[783,6],[983,6]]}}}],["softwar",{"_index":196,"t":{"59":{"position":[[12,8]]}}}],["sole",{"_index":2724,"t":{"839":{"position":[[637,6]]},"934":{"position":[[1431,6]]}}}],["solut",{"_index":1740,"t":{"498":{"position":[[632,8]]},"869":{"position":[[186,8]]},"874":{"position":[[138,8]]},"984":{"position":[[329,8]]},"988":{"position":[[277,10],[569,8]]},"1057":{"position":[[219,10]]}}}],["solv",{"_index":2030,"t":{"602":{"position":[[597,6]]},"669":{"position":[[544,8]]},"692":{"position":[[642,5]]},"910":{"position":[[1859,6]]},"926":{"position":[[856,7],[1121,5]]},"934":{"position":[[804,6]]},"975":{"position":[[465,6]]}}}],["some_compressor_chart",{"_index":3148,"t":{"1270":{"position":[[203,21]]}}}],["some_facility_input",{"_index":765,"t":{"178":{"position":[[84,19]]},"1086":{"position":[[108,19]]},"1142":{"position":[[88,19]]}}}],["some_fluid_model",{"_index":3147,"t":{"1270":{"position":[[112,16]]}}}],["some_yaml_file.yaml",{"_index":920,"t":{"318":{"position":[[9,21]]}}}],["somebodi",{"_index":570,"t":{"102":{"position":[[1501,8]]}}}],["somedirectemitt",{"_index":3133,"t":{"1208":{"position":[[25,17]]}}}],["somedirectory/foo/bar",{"_index":301,"t":{"67":{"position":[[637,23]]}}}],["someelectricalconsum",{"_index":3108,"t":{"1150":{"position":[[19,22]]}}}],["somelocation/myfield.yaml",{"_index":284,"t":{"67":{"position":[[105,26]]}}}],["somelocation/myfield.yml",{"_index":299,"t":{"67":{"position":[[563,25],[661,25],[766,25],[848,25]]}}}],["someotherdirectemitt",{"_index":3134,"t":{"1208":{"position":[[142,22]]}}}],["someotherelectricalconsum",{"_index":3109,"t":{"1150":{"position":[[117,27]]}}}],["someotherfuelconsum",{"_index":805,"t":{"223":{"position":[[224,21]]}}}],["someotherventingemitt",{"_index":936,"t":{"348":{"position":[[144,23]]},"354":{"position":[[115,23]]}}}],["someth",{"_index":1676,"t":{"476":{"position":[[2222,9]]},"669":{"position":[[591,9]]},"1378":{"position":[[439,9]]}}}],["someventingemitt",{"_index":669,"t":{"141":{"position":[[811,18]]},"348":{"position":[[26,18]]},"354":{"position":[[26,18]]},"1355":{"position":[[26,18]]}}}],["somewher",{"_index":324,"t":{"71":{"position":[[133,10]]}}}],["soon",{"_index":186,"t":{"55":{"position":[[372,4]]},"655":{"position":[[159,5]]}}}],["sort",{"_index":854,"t":{"256":{"position":[[80,4]]},"859":{"position":[[232,4]]}}}],["sourc",{"_index":240,"t":{"59":{"position":[[880,7]]},"95":{"position":[[2317,6]]},"153":{"position":[[192,6]]},"283":{"position":[[35,6],[701,6]]},"301":{"position":[[43,6]]},"455":{"position":[[298,6]]},"665":{"position":[[246,6]]},"694":{"position":[[907,7]]},"737":{"position":[[1768,7]]},"802":{"position":[[667,8]]},"826":{"position":[[301,6]]},"835":{"position":[[272,7]]},"1016":{"position":[[282,7],[640,7]]},"1022":{"position":[[19,6],[79,7]]},"1078":{"position":[[433,7]]},"1321":{"position":[[267,6]]},"1387":{"position":[[130,8]]},"1435":{"position":[[196,7],[554,7]]},"1439":{"position":[[254,6]]}}}],["space",{"_index":485,"t":{"93":{"position":[[3483,5]]},"360":{"position":[[190,6]]},"445":{"position":[[651,6]]},"669":{"position":[[706,6]]},"800":{"position":[[217,6]]},"896":{"position":[[173,5]]}}}],["span",{"_index":2567,"t":{"781":{"position":[[130,4]]},"910":{"position":[[784,4]]}}}],["spars",{"_index":2202,"t":{"661":{"position":[[692,6]]}}}],["special",{"_index":1730,"t":{"493":{"position":[[615,7]]},"633":{"position":[[20,7]]},"639":{"position":[[1194,7]]},"661":{"position":[[741,7],[762,7]]}}}],["specif",{"_index":448,"t":{"93":{"position":[[2347,14],[4804,13]]},"221":{"position":[[113,14]]},"481":{"position":[[922,8],[1124,8]]},"545":{"position":[[162,14]]},"627":{"position":[[680,8]]},"743":{"position":[[871,8]]},"802":{"position":[[1428,14],[1489,14]]},"822":{"position":[[244,13]]},"830":{"position":[[78,14],[143,14],[190,13],[254,13],[312,13],[382,13],[519,14],[584,14],[631,13],[695,13],[753,13],[823,13]]},"859":{"position":[[435,13]]},"948":{"position":[[180,14]]},"1042":{"position":[[231,13]]},"1057":{"position":[[287,8]]},"1066":{"position":[[937,8],[1109,8]]}}}],["specifi",{"_index":22,"t":{"4":{"position":[[13,9]]},"28":{"position":[[65,9]]},"36":{"position":[[18,9]]},"44":{"position":[[178,7],[908,7],[1004,10]]},"67":{"position":[[589,7],[687,7]]},"71":{"position":[[47,9]]},"93":{"position":[[2270,7],[2511,8]]},"95":{"position":[[186,9],[627,7],[806,9],[874,7],[963,10]]},"141":{"position":[[173,10]]},"145":{"position":[[915,7]]},"163":{"position":[[113,9],[304,9]]},"184":{"position":[[0,9]]},"215":{"position":[[23,9],[118,9],[290,9],[333,7]]},"250":{"position":[[23,9]]},"256":{"position":[[106,9]]},"283":{"position":[[522,9]]},"287":{"position":[[29,9],[102,9]]},"295":{"position":[[28,9],[243,10],[1020,9]]},"301":{"position":[[100,10]]},"328":{"position":[[231,9]]},"447":{"position":[[171,7]]},"476":{"position":[[1885,9]]},"481":{"position":[[910,7],[1439,9],[1511,10]]},"493":{"position":[[455,9]]},"498":{"position":[[811,10],[1520,7]]},"500":{"position":[[887,9],[961,9]]},"515":{"position":[[92,9]]},"549":{"position":[[3,7]]},"553":{"position":[[127,8]]},"555":{"position":[[38,7],[257,7]]},"557":{"position":[[192,8],[334,9],[386,9]]},"563":{"position":[[4301,10]]},"573":{"position":[[23,9]]},"594":{"position":[[291,7]]},"621":{"position":[[293,10]]},"702":{"position":[[38,9],[170,9]]},"704":{"position":[[495,10],[738,10]]},"708":{"position":[[136,10]]},"710":{"position":[[326,9],[2167,9],[2581,9]]},"725":{"position":[[3,7]]},"729":{"position":[[38,7],[257,7],[1191,7]]},"731":{"position":[[192,8],[298,9],[350,9]]},"737":{"position":[[2376,9],[2476,10],[2901,10],[3280,9],[3334,10]]},"743":{"position":[[623,9],[846,9]]},"745":{"position":[[188,9],[379,9]]},"753":{"position":[[31,10],[349,9]]},"781":{"position":[[283,9]]},"785":{"position":[[350,7]]},"794":{"position":[[71,9]]},"800":{"position":[[111,9]]},"802":{"position":[[1924,10],[1986,10]]},"814":{"position":[[151,9]]},"818":{"position":[[93,9],[188,9],[360,9],[403,7]]},"841":{"position":[[19,9],[347,9],[394,9]]},"847":{"position":[[26,9],[411,10]]},"857":{"position":[[341,7]]},"859":{"position":[[258,9],[478,10],[557,10]]},"871":{"position":[[99,7],[286,9]]},"876":{"position":[[0,7],[235,9]]},"910":{"position":[[937,9],[1190,9],[1542,9],[2296,9],[2437,9]]},"912":{"position":[[225,9]]},"934":{"position":[[521,9]]},"946":{"position":[[565,10]]},"952":{"position":[[60,7]]},"967":{"position":[[386,10]]},"973":{"position":[[192,10],[469,9]]},"975":{"position":[[40,9],[109,9],[241,9],[1514,9]]},"998":{"position":[[19,9],[190,10]]},"1004":{"position":[[124,9]]},"1016":{"position":[[655,9],[894,9]]},"1018":{"position":[[121,8]]},"1042":{"position":[[267,9],[755,9]]},"1053":{"position":[[1345,9]]},"1057":{"position":[[433,10]]},"1064":{"position":[[444,9],[536,9]]},"1066":{"position":[[117,10],[354,10]]},"1072":{"position":[[314,9],[817,10]]},"1074":{"position":[[147,10],[308,9]]},"1090":{"position":[[32,7]]},"1124":{"position":[[59,9],[429,10]]},"1154":{"position":[[124,7],[225,9]]},"1158":{"position":[[0,10]]},"1184":{"position":[[10,9],[982,9]]},"1189":{"position":[[72,7],[330,9]]},"1196":{"position":[[74,7],[398,9]]},"1220":{"position":[[232,9]]},"1238":{"position":[[17,9]]},"1248":{"position":[[40,9],[96,9]]},"1266":{"position":[[141,10]]},"1274":{"position":[[16,9],[176,9]]},"1290":{"position":[[169,9],[405,9],[565,7],[656,9],[822,7],[903,7],[1049,7]]},"1292":{"position":[[40,10]]},"1294":{"position":[[40,10]]},"1296":{"position":[[40,10],[294,7]]},"1298":{"position":[[40,10],[306,7]]},"1300":{"position":[[120,10]]},"1302":{"position":[[10,9],[975,9]]},"1358":{"position":[[40,10],[263,10],[533,10]]},"1374":{"position":[[1269,10]]},"1376":{"position":[[123,9],[221,10]]},"1380":{"position":[[18,9]]},"1395":{"position":[[266,9]]},"1403":{"position":[[255,7],[661,10],[1082,10]]},"1419":{"position":[[307,10]]},"1435":{"position":[[569,9],[808,9]]},"1452":{"position":[[41,9],[97,9]]},"1459":{"position":[[33,9],[89,9]]},"1466":{"position":[[62,10],[218,9]]},"1487":{"position":[[31,9],[107,10],[141,9]]}}}],["specifications/data",{"_index":2846,"t":{"952":{"position":[[629,19]]}}}],["speed",{"_index":839,"t":{"248":{"position":[[76,5]]},"267":{"position":[[174,6]]},"295":{"position":[[1218,5]]},"328":{"position":[[292,5]]},"358":{"position":[[98,5]]},"414":{"position":[[94,5],[263,5]]},"438":{"position":[[497,5],[597,5]]},"445":{"position":[[284,5]]},"476":{"position":[[1101,5],[1120,5],[1521,5],[1584,5]]},"483":{"position":[[143,5]]},"486":{"position":[[24,5],[268,5]]},"491":{"position":[[64,5],[139,5],[398,5]]},"493":{"position":[[60,5]]},"498":{"position":[[666,5],[734,5]]},"500":{"position":[[273,5],[316,5],[1245,5]]},"531":{"position":[[189,5]]},"549":{"position":[[259,5]]},"567":{"position":[[45,5],[527,5]]},"596":{"position":[[259,5]]},"600":{"position":[[99,5],[315,5]]},"602":{"position":[[250,5],[342,5],[422,6],[585,6],[715,6]]},"607":{"position":[[378,5]]},"702":{"position":[[225,6]]},"710":{"position":[[507,5]]},"725":{"position":[[317,5]]},"762":{"position":[[25,5],[44,6]]},"764":{"position":[[210,5],[229,5],[366,5],[433,5],[452,6],[603,6],[835,5],[913,5],[1084,5]]},"766":{"position":[[27,5]]},"768":{"position":[[91,6],[141,5],[181,5],[232,5],[334,6],[354,5],[439,5],[464,5]]},"773":{"position":[[29,5],[71,6]]},"775":{"position":[[15,5]]},"847":{"position":[[210,5],[249,5]]},"853":{"position":[[72,5]]},"855":{"position":[[209,5]]},"910":{"position":[[26,5],[44,6],[1077,5],[1284,5],[1428,5],[1633,5],[1909,5],[2045,5]]},"912":{"position":[[149,5],[181,5]]},"914":{"position":[[11,5],[69,6]]},"916":{"position":[[302,6],[316,5]]},"918":{"position":[[169,6],[324,5],[403,5]]},"920":{"position":[[13,5],[96,7],[150,5],[190,5],[288,5],[675,5],[738,5]]},"922":{"position":[[305,6],[319,5],[534,6],[548,5]]},"924":{"position":[[174,6],[291,6],[431,6],[629,5],[711,5]]},"930":{"position":[[315,5]]},"940":{"position":[[15,5],[327,6],[399,5],[523,5],[733,5],[774,5]]},"944":{"position":[[116,5],[154,5],[203,5],[241,5]]},"946":{"position":[[24,5],[392,6]]},"955":{"position":[[174,6],[291,6]]},"959":{"position":[[272,6],[389,6]]},"963":{"position":[[11,5],[72,5],[130,5],[226,6],[248,5],[289,5],[583,5],[734,5],[788,5]]},"967":{"position":[[57,6],[142,5],[173,5],[327,5],[429,5],[829,5],[858,6],[931,7],[943,5],[991,5],[1014,5],[1142,5]]},"973":{"position":[[1356,5]]},"975":{"position":[[520,5],[597,5],[735,5],[831,5],[917,5],[954,5],[1071,5],[1414,5]]},"977":{"position":[[212,5],[231,5],[495,5]]},"982":{"position":[[64,5],[206,5],[414,5]]},"984":{"position":[[629,5],[843,6],[1088,5],[1182,5],[1280,5]]},"986":{"position":[[36,5],[480,5],[853,5]]},"988":{"position":[[951,5]]},"1040":{"position":[[804,5]]},"1042":{"position":[[2697,5],[2814,6],[2914,6],[3072,5],[3141,5],[3420,5],[3480,5],[3590,6],[3841,5],[4242,5]]},"1082":{"position":[[546,6],[562,5]]},"1090":{"position":[[1201,5],[1223,5]]},"1162":{"position":[[61,5],[451,6],[531,5],[599,5],[640,5],[782,5],[839,5]]},"1176":{"position":[[73,5],[271,5],[312,5],[454,5],[511,5]]},"1189":{"position":[[29,5],[91,5],[367,6]]},"1191":{"position":[[108,6],[122,5]]},"1193":{"position":[[118,6]]},"1196":{"position":[[31,5],[95,5],[296,6],[435,6],[493,6]]},"1198":{"position":[[111,6],[125,5],[340,6],[354,5]]},"1200":{"position":[[123,6],[240,6]]},"1220":{"position":[[293,5]]},"1234":{"position":[[174,6]]},"1258":{"position":[[61,5]]}}}],["speed,rate,head,effici",{"_index":2470,"t":{"741":{"position":[[489,26]]}}}],["speed/minimum",{"_index":2557,"t":{"764":{"position":[[938,13]]}}}],["spell",{"_index":1364,"t":{"436":{"position":[[548,8]]}}}],["spellcheck",{"_index":1081,"t":{"400":{"position":[[5,13]]}}}],["spelling/dash",{"_index":3085,"t":{"1090":{"position":[[420,13]]}}}],["split",{"_index":663,"t":{"129":{"position":[[142,5]]},"295":{"position":[[1075,5]]},"483":{"position":[[668,9]]},"541":{"position":[[142,5]]},"575":{"position":[[218,5]]},"661":{"position":[[164,5]]},"710":{"position":[[972,5],[1138,5]]},"888":{"position":[[116,5]]},"975":{"position":[[276,5]]}}}],["splitting/halv",{"_index":2830,"t":{"934":{"position":[[124,17]]}}}],["spread",{"_index":2815,"t":{"926":{"position":[[641,6],[722,7]]},"934":{"position":[[763,6]]}}}],["sqrt{p_{1",{"_index":2690,"t":{"816":{"position":[[178,11]]}}}],["src=\"path/image.jpg",{"_index":2142,"t":{"639":{"position":[[1016,20]]}}}],["srk",{"_index":784,"t":{"195":{"position":[[80,3]]},"553":{"position":[[818,3]]},"565":{"position":[[1109,3]]},"955":{"position":[[522,3]]},"957":{"position":[[318,3]]},"959":{"position":[[615,3]]},"961":{"position":[[176,3]]},"990":{"position":[[779,3],[947,3],[979,3]]},"996":{"position":[[126,3],[299,3]]},"1002":{"position":[[106,3]]}}}],["stack",{"_index":305,"t":{"67":{"position":[[797,5]]}}}],["stage",{"_index":717,"t":{"147":{"position":[[1193,5],[1258,5]]},"271":{"position":[[136,6]]},"273":{"position":[[51,7],[114,6]]},"275":{"position":[[55,7]]},"295":{"position":[[52,6],[375,7],[438,6],[657,6]]},"330":{"position":[[113,7]]},"332":{"position":[[106,7]]},"368":{"position":[[27,5]]},"425":{"position":[[130,5],[1377,5]]},"432":{"position":[[652,5]]},"436":{"position":[[27,5]]},"445":{"position":[[330,6]]},"498":{"position":[[824,5],[1052,6],[1059,7],[1122,6]]},"500":{"position":[[69,5]]},"553":{"position":[[1235,7]]},"565":{"position":[[1524,7]]},"596":{"position":[[356,5]]},"687":{"position":[[267,6]]},"704":{"position":[[775,7],[966,5]]},"781":{"position":[[271,7]]},"841":{"position":[[494,6],[571,6]]},"910":{"position":[[563,6],[925,7],[1254,6],[1606,6],[1819,6],[1875,5],[2216,6],[2318,7],[2426,5]]},"932":{"position":[[181,7]]},"940":{"position":[[599,7],[712,6]]},"942":{"position":[[153,7],[216,6],[288,6]]},"946":{"position":[[102,5],[190,6],[634,6],[695,6]]},"950":{"position":[[20,6],[43,5],[246,7],[309,6],[381,6],[489,6],[562,6],[643,5]]},"952":{"position":[[30,6],[99,6],[351,6],[883,6],[958,7],[1062,7]]},"955":{"position":[[850,7]]},"957":{"position":[[468,7]]},"959":{"position":[[765,7]]},"963":{"position":[[692,5]]},"965":{"position":[[396,7],[459,6],[531,6],[648,5],[719,6],[792,6],[909,5],[953,5]]},"967":{"position":[[1585,7],[1648,6],[1720,6],[1830,6],[1920,5],[2060,6],[2133,6],[2243,6],[2333,5],[2446,5]]},"971":{"position":[[195,5],[236,5],[652,7],[715,6],[975,5],[1121,6],[1546,5],[1746,6],[1998,5]]},"973":{"position":[[203,6],[231,6],[272,6],[416,6],[488,6],[509,6],[645,6],[652,6],[824,6],[997,6],[1166,5]]},"975":{"position":[[77,6],[133,6],[1708,5],[1773,5]]},"979":{"position":[[275,7],[605,5],[673,5]]},"984":{"position":[[242,6],[296,5],[372,5]]},"988":{"position":[[158,6],[199,6],[476,5],[639,5],[2037,5],[2264,5],[2340,6],[2376,5],[2407,5],[2508,5],[2582,5],[2772,5]]},"1042":{"position":[[3286,7],[3370,5]]},"1160":{"position":[[17,6]]},"1162":{"position":[[578,6]]},"1165":{"position":[[156,7],[219,6],[291,6]]},"1167":{"position":[[118,7]]},"1170":{"position":[[424,7],[487,6],[912,5]]},"1172":{"position":[[280,7],[712,5],[780,5]]},"1174":{"position":[[17,6]]},"1176":{"position":[[250,6]]},"1178":{"position":[[156,7],[219,6],[291,6]]},"1180":{"position":[[118,7]]},"1222":{"position":[[113,7]]},"1224":{"position":[[106,7]]},"1260":{"position":[[224,7],[287,6]]},"1264":{"position":[[172,7]]},"1266":{"position":[[110,7],[126,6]]},"1268":{"position":[[227,6],[302,7],[406,7]]},"1391":{"position":[[36,5]]},"1393":{"position":[[75,7],[138,6],[210,6]]},"1395":{"position":[[0,6],[28,6],[69,6],[213,6],[285,6],[306,6],[442,6],[449,6],[621,6],[794,6]]},"1397":{"position":[[103,7],[166,6],[426,5],[572,6],[997,5]]},"1399":{"position":[[107,7],[437,5],[505,5]]},"1409":{"position":[[17,6]]},"1411":{"position":[[136,6],[176,5]]},"1413":{"position":[[102,7],[165,6],[386,6]]},"1415":{"position":[[106,7]]}}}],["stand",{"_index":2771,"t":{"910":{"position":[[63,5]]}}}],["standalon",{"_index":2837,"t":{"946":{"position":[[295,10]]}}}],["standard",{"_index":1124,"t":{"414":{"position":[[422,8]]},"436":{"position":[[342,8]]},"464":{"position":[[185,8]]},"537":{"position":[[101,8],[155,8]]},"609":{"position":[[71,8]]},"635":{"position":[[16,8]]},"637":{"position":[[27,8]]},"694":{"position":[[1234,8]]},"781":{"position":[[804,8]]},"926":{"position":[[1555,8]]},"948":{"position":[[412,8]]},"965":{"position":[[1188,8]]},"967":{"position":[[2681,8]]},"1066":{"position":[[918,8],[1090,8]]},"1248":{"position":[[230,8]]}}}],["standard_conditions_dens",{"_index":1458,"t":{"445":{"position":[[1019,27]]}}}],["start",{"_index":133,"t":{"44":{"position":[[952,5]]},"63":{"position":[[269,7]]},"73":{"position":[[363,7]]},"85":{"position":[[233,7]]},"242":{"position":[[31,6],[60,5]]},"410":{"position":[[12,5]]},"414":{"position":[[514,5]]},"493":{"position":[[240,6],[820,7]]},"609":{"position":[[131,5],[334,5],[406,8]]},"639":{"position":[[315,5],[336,5]]},"641":{"position":[[292,5]]},"643":{"position":[[39,7]]},"665":{"position":[[382,8]]},"753":{"position":[[248,8]]},"802":{"position":[[2291,5]]},"982":{"position":[[842,6]]},"1004":{"position":[[758,5]]},"1078":{"position":[[352,5],[368,5]]},"1238":{"position":[[353,8]]},"1401":{"position":[[0,5]]},"1403":{"position":[[11,5],[417,6],[560,5],[1159,6]]},"1405":{"position":[[0,6]]},"1407":{"position":[[117,6]]}}}],["state",{"_index":1614,"t":{"468":{"position":[[248,6]]},"704":{"position":[[158,5]]},"973":{"position":[[98,5]]},"990":{"position":[[607,5],[718,5]]},"1042":{"position":[[427,5],[580,5]]},"1419":{"position":[[213,5]]}}}],["statement",{"_index":678,"t":{"145":{"position":[[100,9]]},"639":{"position":[[522,9],[569,9],[581,9],[593,9]]}}}],["static",{"_index":169,"t":{"53":{"position":[[123,10]]},"631":{"position":[[51,6]]},"1042":{"position":[[222,8]]}}}],["statu",{"_index":2278,"t":{"683":{"position":[[79,6]]}}}],["status",{"_index":2025,"t":{"600":{"position":[[51,8]]}}}],["stay",{"_index":2008,"t":{"575":{"position":[[105,5]]},"1403":{"position":[[1230,4]]}}}],["steam",{"_index":591,"t":{"108":{"position":[[32,5],[191,5],[366,5],[473,5],[528,5],[644,5],[749,5]]},"523":{"position":[[141,5]]},"1090":{"position":[[1667,5],[1758,5],[1814,5]]}}}],["steamgen",{"_index":599,"t":{"108":{"position":[[625,8]]}}}],["steamturbinegeneratorconsumpt",{"_index":1776,"t":{"525":{"position":[[135,32]]}}}],["step",{"_index":394,"t":{"91":{"position":[[141,4],[149,4]]},"100":{"position":[[143,4],[151,4]]},"106":{"position":[[68,6]]},"153":{"position":[[238,4],[283,4]]},"283":{"position":[[683,5],[842,6],[890,4],[975,5],[1098,4],[1179,5],[1322,6]]},"301":{"position":[[23,5]]},"414":{"position":[[445,5]]},"445":{"position":[[931,5]]},"476":{"position":[[1226,5]]},"493":{"position":[[176,4]]},"495":{"position":[[71,5],[106,5]]},"645":{"position":[[33,6]]},"835":{"position":[[310,6]]},"890":{"position":[[423,5]]},"975":{"position":[[1357,6],[1572,5]]},"988":{"position":[[2084,4]]},"1047":{"position":[[250,5]]},"1066":{"position":[[383,5]]},"1072":{"position":[[846,5]]},"1403":{"position":[[687,4]]},"1439":{"position":[[149,5],[300,4],[345,4],[470,5]]}}}],["still",{"_index":846,"t":{"248":{"position":[[612,5]]},"481":{"position":[[2337,5]]},"495":{"position":[[122,5]]},"683":{"position":[[46,5]]},"743":{"position":[[1062,5]]},"768":{"position":[[311,5]]},"890":{"position":[[407,5]]},"984":{"position":[[854,5]]},"1053":{"position":[[1225,5]]}}}],["stonewal",{"_index":2875,"t":{"967":{"position":[[1004,9],[1160,9]]}}}],["stop",{"_index":86,"t":{"44":{"position":[[29,4],[859,5]]},"493":{"position":[[117,5]]}}}],["storag",{"_index":491,"t":{"93":{"position":[[3771,8],[4185,7],[4250,7]]},"507":{"position":[[254,7]]},"1090":{"position":[[1586,7]]}}}],["store",{"_index":519,"t":{"95":{"position":[[1101,5]]},"478":{"position":[[174,6]]},"481":{"position":[[850,5]]},"671":{"position":[[43,5],[218,6]]},"1064":{"position":[[295,5]]},"1090":{"position":[[1647,7]]}}}],["stp",{"_index":1470,"t":{"447":{"position":[[273,3],[487,3]]},"529":{"position":[[0,3],[73,3],[376,3]]},"1066":{"position":[[1063,3],[1139,5],[1188,3]]}}}],["strategi",{"_index":2757,"t":{"888":{"position":[[164,11]]}}}],["stream",{"_index":609,"t":{"116":{"position":[[192,7]]},"295":{"position":[[521,7],[540,6],[552,8],[589,8],[1261,7]]},"328":{"position":[[335,7]]},"358":{"position":[[141,7]]},"392":{"position":[[52,7]]},"416":{"position":[[416,6],[499,6]]},"419":{"position":[[44,6],[105,7],[167,7]]},"421":{"position":[[119,7]]},"425":{"position":[[1397,7]]},"427":{"position":[[19,7],[69,6],[474,6]]},"432":{"position":[[672,7]]},"436":{"position":[[288,7],[385,7]]},"445":{"position":[[202,7]]},"449":{"position":[[360,7]]},"453":{"position":[[19,6]]},"498":{"position":[[907,6],[991,7],[1205,7],[1237,6],[1249,7],[1281,7],[1312,6],[1324,7],[1360,7]]},"500":{"position":[[32,7]]},"537":{"position":[[29,7]]},"594":{"position":[[355,6]]},"596":{"position":[[296,7]]},"600":{"position":[[383,7]]},"607":{"position":[[307,9]]},"616":{"position":[[52,7]]},"621":{"position":[[228,7]]},"853":{"position":[[115,7]]},"855":{"position":[[252,7],[316,6],[344,6],[378,6],[713,7]]},"857":{"position":[[383,6]]},"910":{"position":[[2088,7],[2178,7],[2396,6]]},"940":{"position":[[817,7]]},"944":{"position":[[284,7]]},"967":{"position":[[1271,6]]},"969":{"position":[[125,7]]},"971":{"position":[[170,7],[218,6],[264,8],[285,7],[357,6],[465,6],[579,6],[643,8],[798,7],[817,6],[829,8],[866,8],[1204,7],[1236,6],[1248,7],[1280,7],[1311,6],[1323,7],[1359,7]]},"973":{"position":[[0,7],[43,7],[140,6],[552,6],[680,6],[740,6],[764,6],[801,6],[946,6],[1048,7]]},"975":{"position":[[1659,7],[1749,6],[1805,7],[1872,7],[1904,6]]},"979":{"position":[[102,8],[339,7],[475,7]]},"1042":{"position":[[2872,6],[2895,6],[4051,7],[4142,6],[4285,7]]},"1090":{"position":[[827,6]]},"1110":{"position":[[111,8]]},"1154":{"position":[[68,6],[584,6],[833,6],[1035,6]]},"1162":{"position":[[683,7]]},"1170":{"position":[[103,8],[129,6],[237,6],[351,6],[415,8],[570,7],[602,6],[614,7],[646,7],[677,6],[689,7],[725,7]]},"1172":{"position":[[107,8],[344,7],[582,7]]},"1176":{"position":[[355,7]]},"1220":{"position":[[336,7]]},"1258":{"position":[[588,6]]},"1366":{"position":[[33,6]]},"1374":{"position":[[167,6],[233,6],[420,6],[458,6],[908,6],[1214,6]]},"1376":{"position":[[71,6],[343,6],[526,6],[544,6],[575,6],[600,6],[623,6]]},"1378":{"position":[[97,6]]},"1387":{"position":[[30,6],[95,6],[299,6]]},"1389":{"position":[[17,7]]},"1395":{"position":[[349,6],[477,6],[537,6],[561,6],[598,6],[743,6],[845,7]]},"1397":{"position":[[249,7],[268,6],[280,8],[317,8],[655,7],[687,6],[699,7],[731,7],[762,6],[774,7],[810,7]]},"1399":{"position":[[171,7],[307,7]]},"1409":{"position":[[24,7],[77,7]]},"1411":{"position":[[206,8]]},"1413":{"position":[[248,7],[267,6],[279,8],[316,8],[469,7],[501,6],[513,7],[545,7],[576,6],[588,7],[624,7]]},"1415":{"position":[[170,7]]},"1417":{"position":[[17,7]]},"1419":{"position":[[115,7],[158,7],[255,6]]},"1421":{"position":[[98,8],[124,6],[232,6],[346,6]]},"1423":{"position":[[102,8]]}}}],["stream/calendar",{"_index":3193,"t":{"1376":{"position":[[493,15]]}}}],["stream_day",{"_index":40,"t":{"6":{"position":[[139,11]]},"8":{"position":[[54,10]]},"141":{"position":[[715,11],[914,10]]},"621":{"position":[[314,11]]},"1154":{"position":[[342,11],[414,10],[845,11]]},"1156":{"position":[[107,11]]},"1158":{"position":[[149,10],[215,10],[354,10]]},"1353":{"position":[[199,11]]},"1355":{"position":[[129,10]]},"1376":{"position":[[203,10],[268,10]]}}}],["streamcondit",{"_index":1146,"t":{"416":{"position":[[426,16]]},"427":{"position":[[455,15]]}}}],["strict",{"_index":2649,"t":{"800":{"position":[[63,6]]}}}],["strike",{"_index":2124,"t":{"639":{"position":[[416,6]]}}}],["string",{"_index":1498,"t":{"449":{"position":[[695,7]]},"498":{"position":[[951,6]]},"669":{"position":[[731,7]]},"1474":{"position":[[21,7],[41,8]]}}}],["strive",{"_index":2183,"t":{"659":{"position":[[107,6]]},"661":{"position":[[58,6]]}}}],["strong>text/[opt",{"_index":2227,"t":{"663":{"position":[[101,15]]}}}],["typer",{"_index":1521,"t":{"449":{"position":[[1285,5]]}}}],["typic",{"_index":816,"t":{"235":{"position":[[283,9]]},"279":{"position":[[98,9]]},"283":{"position":[[362,9]]},"609":{"position":[[264,10]]},"704":{"position":[[310,9]]},"802":{"position":[[823,10]]},"824":{"position":[[171,9]]},"926":{"position":[[594,9]]},"982":{"position":[[16,9]]},"990":{"position":[[185,7]]},"1042":{"position":[[1091,9]]},"1053":{"position":[[228,9]]},"1055":{"position":[[182,9]]},"1378":{"position":[[362,9]]}}}],["typing
  • list",{"_index":2136,"t":{"639":{"position":[[761,12],[891,12]]}}}],["ultra_dri",{"_index":2950,"t":{"992":{"position":[[64,9]]},"996":{"position":[[255,9]]}}}],["ultra_rich",{"_index":2956,"t":{"992":{"position":[[150,10]]}}}],["unabl",{"_index":2350,"t":{"710":{"position":[[865,6]]}}}],["unbias",{"_index":841,"t":{"248":{"position":[[122,9]]},"764":{"position":[[1130,9]]}}}],["under",{"_index":852,"t":{"256":{"position":[[0,5]]},"259":{"position":[[175,5],[267,5],[443,5]]},"279":{"position":[[297,5]]},"295":{"position":[[118,5]]},"483":{"position":[[971,5]]},"549":{"position":[[330,5]]},"553":{"position":[[70,5]]},"557":{"position":[[344,5]]},"569":{"position":[[128,5]]},"710":{"position":[[151,5],[336,5]]},"725":{"position":[[444,5]]},"731":{"position":[[308,5]]},"753":{"position":[[292,5]]},"783":{"position":[[40,5]]},"798":{"position":[[331,5],[593,6],[643,5],[1574,5]]},"802":{"position":[[1862,5],[2175,5]]},"824":{"position":[[458,5]]},"839":{"position":[[282,5],[310,5],[497,5]]},"841":{"position":[[29,5]]},"847":{"position":[[36,5],[153,5]]},"859":{"position":[[152,5]]},"871":{"position":[[124,5],[296,5]]},"876":{"position":[[67,5],[245,5]]},"963":{"position":[[869,5]]},"967":{"position":[[1416,5]]},"971":{"position":[[21,5]]},"984":{"position":[[341,5]]},"988":{"position":[[227,5]]},"1016":{"position":[[773,5]]},"1020":{"position":[[10,5]]},"1189":{"position":[[283,5]]},"1196":{"position":[[350,5]]},"1227":{"position":[[183,5],[287,5],[457,5]]},"1248":{"position":[[50,5]]},"1411":{"position":[[126,5]]},"1435":{"position":[[687,5]]},"1452":{"position":[[51,5]]},"1459":{"position":[[43,5]]},"1466":{"position":[[86,5]]}}}],["underscor",{"_index":483,"t":{"93":{"position":[[3452,10],[3588,10]]}}}],["understand",{"_index":655,"t":{"127":{"position":[[403,10]]},"555":{"position":[[155,10]]},"725":{"position":[[505,10]]},"729":{"position":[[155,10]]},"1403":{"position":[[1057,14]]}}}],["understood",{"_index":560,"t":{"102":{"position":[[678,10]]}}}],["undocu",{"_index":1602,"t":{"466":{"position":[[18,12]]}}}],["unicod",{"_index":363,"t":{"79":{"position":[[209,9]]}}}],["unifi",{"_index":2818,"t":{"926":{"position":[[1170,7],[1251,7]]},"934":{"position":[[441,7]]}}}],["uniform",{"_index":2181,"t":{"659":{"position":[[47,7]]}}}],["union",{"_index":614,"t":{"118":{"position":[[69,5]]},"1066":{"position":[[402,5]]},"1072":{"position":[[865,5]]}}}],["uniqu",{"_index":395,"t":{"93":{"position":[[28,6],[411,7],[447,6]]},"421":{"position":[[57,6]]},"449":{"position":[[794,6],[822,6]]},"513":{"position":[[28,6]]},"988":{"position":[[562,6]]}}}],["unisim",{"_index":2782,"t":{"920":{"position":[[916,6]]}}}],["unit",{"_index":36,"t":{"6":{"position":[[63,5],[84,5]]},"8":{"position":[[37,5]]},"59":{"position":[[533,5]]},"93":{"position":[[67,5],[2136,5],[2229,6],[2283,5],[2481,6],[2683,6],[2829,6],[2980,6],[3137,6]]},"141":{"position":[[49,4],[242,4],[639,5],[660,5],[897,5]]},"173":{"position":[[20,4]]},"235":{"position":[[340,5]]},"252":{"position":[[46,6]]},"259":{"position":[[217,5]]},"262":{"position":[[51,6],[81,5]]},"264":{"position":[[47,6],[77,5]]},"267":{"position":[[109,6]]},"279":{"position":[[147,5],[199,5]]},"342":{"position":[[339,4]]},"358":{"position":[[248,6],[326,4]]},"464":{"position":[[59,5]]},"483":{"position":[[908,5]]},"498":{"position":[[388,5]]},"503":{"position":[[0,5]]},"507":{"position":[[134,5]]},"513":{"position":[[67,5]]},"549":{"position":[[578,6]]},"553":{"position":[[474,6],[638,6]]},"565":{"position":[[284,6],[765,6],[929,6]]},"653":{"position":[[297,4]]},"702":{"position":[[546,6]]},"704":{"position":[[1482,6]]},"712":{"position":[[216,6],[764,6]]},"725":{"position":[[934,6]]},"739":{"position":[[464,6]]},"759":{"position":[[7,4]]},"766":{"position":[[122,5]]},"770":{"position":[[102,6],[121,5],[189,5],[242,4]]},"773":{"position":[[137,5]]},"775":{"position":[[43,5]]},"777":{"position":[[104,6],[123,5],[191,5],[244,4]]},"779":{"position":[[115,6],[276,6],[456,6]]},"787":{"position":[[9,5]]},"796":{"position":[[7,4]]},"802":{"position":[[1333,6]]},"824":{"position":[[220,5],[272,5]]},"839":{"position":[[490,6]]},"886":{"position":[[17,5]]},"894":{"position":[[17,5]]},"916":{"position":[[95,6],[114,5],[182,5],[261,5]]},"918":{"position":[[105,6]]},"922":{"position":[[97,6],[116,5],[184,5],[263,5]]},"924":{"position":[[109,6]]},"926":{"position":[[1374,5],[1421,5],[1668,6]]},"928":{"position":[[253,6],[272,5],[340,5],[419,5]]},"930":{"position":[[182,6]]},"936":{"position":[[181,6],[223,5]]},"938":{"position":[[134,6]]},"955":{"position":[[109,6]]},"957":{"position":[[182,6]]},"959":{"position":[[207,6]]},"973":{"position":[[1407,4]]},"1004":{"position":[[591,5],[940,5]]},"1020":{"position":[[275,6]]},"1047":{"position":[[112,4]]},"1142":{"position":[[49,7]]},"1154":{"position":[[1029,5]]},"1158":{"position":[[449,4]]},"1176":{"position":[[25,4]]},"1227":{"position":[[225,5]]},"1230":{"position":[[99,6]]},"1232":{"position":[[102,6],[142,4]]},"1234":{"position":[[109,6]]},"1346":{"position":[[128,5]]},"1348":{"position":[[81,6]]},"1350":{"position":[[69,6]]},"1353":{"position":[[123,5],[144,5]]},"1355":{"position":[[112,5]]},"1358":{"position":[[349,4]]},"1378":{"position":[[270,6],[287,5],[384,5]]},"1427":{"position":[[224,4]]},"1487":{"position":[[0,5]]},"1490":{"position":[[47,6],[66,5],[134,5],[207,4]]},"1492":{"position":[[51,6],[70,5],[138,5],[217,5]]},"1495":{"position":[[77,6]]},"1497":{"position":[[109,6]]}}}],["unix",{"_index":309,"t":{"69":{"position":[[25,4]]}}}],["unknown",{"_index":3146,"t":{"1264":{"position":[[164,7]]},"1266":{"position":[[102,7]]}}}],["unless",{"_index":2211,"t":{"661":{"position":[[868,6],[1070,6]]},"667":{"position":[[57,6]]}}}],["unnecessari",{"_index":1366,"t":{"436":{"position":[[594,11]]},"447":{"position":[[116,11]]}}}],["unord",{"_index":2134,"t":{"639":{"position":[[707,11]]}}}],["unrealist",{"_index":2817,"t":{"926":{"position":[[826,11]]},"934":{"position":[[1167,11],[1449,11],[1547,11]]},"1057":{"position":[[207,11]]}}}],["unrecogn",{"_index":358,"t":{"79":{"position":[[170,12]]}}}],["unrel",{"_index":2177,"t":{"655":{"position":[[184,9]]}}}],["until",{"_index":2870,"t":{"967":{"position":[[191,5],[747,5]]},"1042":{"position":[[2317,5],[2950,5]]},"1258":{"position":[[455,5]]}}}],["unus",{"_index":1598,"t":{"464":{"position":[[216,6]]},"661":{"position":[[248,6]]}}}],["unwant",{"_index":2829,"t":{"934":{"position":[[101,8]]}}}],["up",{"_index":27,"t":{"4":{"position":[[111,2]]},"36":{"position":[[116,2]]},"59":{"position":[[921,2]]},"85":{"position":[[249,2]]},"93":{"position":[[99,2],[2444,2]]},"242":{"position":[[66,3]]},"414":{"position":[[133,2]]},"513":{"position":[[99,2]]},"573":{"position":[[112,2]]},"627":{"position":[[375,2]]},"655":{"position":[[240,2]]},"667":{"position":[[186,2]]},"743":{"position":[[108,2],[735,2]]},"764":{"position":[[496,2],[761,2]]},"781":{"position":[[28,2],[1405,2],[1579,2]]},"802":{"position":[[586,2]]},"826":{"position":[[25,3],[118,2]]},"902":{"position":[[285,2]]},"912":{"position":[[36,2],[109,2]]},"934":{"position":[[249,2],[544,2]]},"940":{"position":[[705,2]]},"1044":{"position":[[72,2]]},"1053":{"position":[[635,2]]},"1066":{"position":[[551,2]]},"1072":{"position":[[1014,2]]},"1162":{"position":[[571,2]]},"1176":{"position":[[243,2]]},"1184":{"position":[[749,3]]},"1302":{"position":[[742,3]]}}}],["upcom",{"_index":183,"t":{"55":{"position":[[341,8]]},"65":{"position":[[94,8]]},"83":{"position":[[73,8]]},"423":{"position":[[80,8]]}}}],["updat",{"_index":17,"t":{"2":{"position":[[202,7]]},"141":{"position":[[0,6]]},"149":{"position":[[511,7]]},"342":{"position":[[209,7]]},"368":{"position":[[118,6]]},"381":{"position":[[123,6],[169,6]]},"383":{"position":[[208,6],[285,6],[322,6],[359,6],[392,6]]},"387":{"position":[[0,6]]},"394":{"position":[[0,6]]},"412":{"position":[[0,6]]},"414":{"position":[[557,6],[608,6]]},"421":{"position":[[190,6]]},"423":{"position":[[59,6]]},"425":{"position":[[1004,6],[1041,6],[1078,6],[1114,6],[1180,6],[1284,7]]},"434":{"position":[[361,6],[397,6]]},"436":{"position":[[728,6],[760,6]]},"447":{"position":[[226,6],[293,6],[328,6],[389,6],[450,6]]},"449":{"position":[[1357,6],[1428,6]]},"455":{"position":[[195,6],[349,6]]},"466":{"position":[[51,6]]},"468":{"position":[[1190,6],[1241,6],[1284,6],[1331,6]]},"471":{"position":[[49,6]]},"537":{"position":[[131,8]]},"575":{"position":[[18,6]]},"602":{"position":[[365,7]]},"614":{"position":[[103,6]]},"621":{"position":[[0,7]]},"679":{"position":[[19,6]]},"681":{"position":[[19,6]]}}}],["upgrad",{"_index":979,"t":{"370":{"position":[[0,7]]},"425":{"position":[[1234,7]]},"517":{"position":[[25,7]]},"527":{"position":[[25,7]]},"533":{"position":[[25,7]]}}}],["upload",{"_index":1719,"t":{"491":{"position":[[303,9],[458,9]]}}}],["upon",{"_index":2914,"t":{"984":{"position":[[470,4]]}}}],["upper",{"_index":478,"t":{"93":{"position":[[3414,5],[3547,5]]},"920":{"position":[[134,5],[272,5]]},"1090":{"position":[[401,5]]}}}],["uppercas",{"_index":406,"t":{"93":{"position":[[329,9],[5014,9]]},"513":{"position":[[329,9]]},"1282":{"position":[[55,9]]}}}],["upstream",{"_index":898,"t":{"293":{"position":[[173,8]]},"295":{"position":[[960,8]]},"328":{"position":[[186,8]]},"679":{"position":[[109,8]]},"692":{"position":[[810,8]]},"694":{"position":[[281,8],[305,8],[898,8],[989,8]]},"975":{"position":[[1268,8]]},"982":{"position":[[441,8],[1040,8],[1799,8]]},"984":{"position":[[11,8]]},"986":{"position":[[554,8]]},"1258":{"position":[[544,8]]}}}],["upstream/downstream",{"_index":2834,"t":{"934":{"position":[[1307,19]]}}}],["upstream/main",{"_index":2295,"t":{"694":{"position":[[1009,13]]}}}],["upstream_chok",{"_index":906,"t":{"295":{"position":[[816,14],[903,14]]},"330":{"position":[[201,14]]},"332":{"position":[[174,14]]},"486":{"position":[[300,14]]},"932":{"position":[[148,14]]},"965":{"position":[[181,15]]},"967":{"position":[[2884,15]]},"977":{"position":[[53,14]]},"986":{"position":[[726,15]]},"1222":{"position":[[203,14]]},"1224":{"position":[[174,14]]},"1328":{"position":[[193,14]]},"1330":{"position":[[139,15]]}}}],["upstream_pressure_control",{"_index":902,"t":{"295":{"position":[[169,25],[769,26]]},"326":{"position":[[47,25]]},"330":{"position":[[154,26]]},"332":{"position":[[147,26]]},"971":{"position":[[1591,26]]},"979":{"position":[[545,26]]},"1170":{"position":[[957,26]]},"1172":{"position":[[652,26]]},"1224":{"position":[[147,26]]},"1397":{"position":[[1042,26]]},"1399":{"position":[[377,26]]}}}],["upstream_pressure_control/downstream_pressure_control",{"_index":2884,"t":{"975":{"position":[[1131,55]]}}}],["upward",{"_index":2760,"t":{"890":{"position":[[713,7]]}}}],["url",{"_index":1178,"t":{"421":{"position":[[282,4]]},"471":{"position":[[70,3]]}}}],["us",{"_index":21,"t":{"2":{"position":[[300,5]]},"4":{"position":[[99,4]]},"10":{"position":[[347,3]]},"20":{"position":[[0,4],[62,5]]},"28":{"position":[[50,3]]},"34":{"position":[[371,3]]},"36":{"position":[[104,4]]},"50":{"position":[[69,5]]},"55":{"position":[[139,3],[167,3],[330,3]]},"59":{"position":[[703,5],[907,4]]},"61":{"position":[[3,5]]},"63":{"position":[[3,3]]},"65":{"position":[[36,3],[173,3]]},"67":{"position":[[0,3]]},"79":{"position":[[6,4]]},"81":{"position":[[153,5],[341,5]]},"83":{"position":[[43,3],[117,3]]},"85":{"position":[[196,5],[382,3]]},"93":{"position":[[210,4],[234,3],[271,3],[1693,5],[1821,4],[2308,5],[3622,4],[3646,3],[3800,4],[4000,4],[4059,4],[4218,4],[4277,4],[4434,4],[4491,4],[4671,4],[4744,4],[4852,4],[4956,3],[5179,3]]},"95":{"position":[[143,3],[308,4],[509,3],[751,3],[2109,5],[2180,3],[2604,4],[2715,3]]},"102":{"position":[[1018,4],[1450,4]]},"104":{"position":[[117,3]]},"108":{"position":[[816,5]]},"116":{"position":[[113,6]]},"118":{"position":[[1220,3]]},"134":{"position":[[62,4]]},"149":{"position":[[30,3]]},"163":{"position":[[150,4],[385,5]]},"165":{"position":[[35,5]]},"169":{"position":[[26,4],[78,4],[300,5]]},"173":{"position":[[72,4]]},"199":{"position":[[51,4],[134,4]]},"207":{"position":[[0,4]]},"215":{"position":[[81,4],[238,3]]},"219":{"position":[[198,4]]},"227":{"position":[[0,4]]},"259":{"position":[[26,4],[149,4]]},"271":{"position":[[18,4]]},"283":{"position":[[255,5]]},"293":{"position":[[119,4]]},"295":{"position":[[78,4]]},"309":{"position":[[0,4]]},"316":{"position":[[8,3],[80,4]]},"318":{"position":[[43,3]]},"320":{"position":[[16,4]]},"322":{"position":[[16,4]]},"324":{"position":[[16,4]]},"328":{"position":[[16,4],[105,4]]},"336":{"position":[[16,4],[54,4],[92,3],[203,5]]},"342":{"position":[[489,3]]},"358":{"position":[[696,3],[893,5]]},"362":{"position":[[232,5]]},"385":{"position":[[52,3]]},"416":{"position":[[541,3],[595,3]]},"421":{"position":[[252,3]]},"425":{"position":[[1145,3]]},"427":{"position":[[542,3]]},"432":{"position":[[1011,3]]},"438":{"position":[[899,3],[943,3],[994,3]]},"449":{"position":[[1050,5],[1331,3]]},"451":{"position":[[251,4],[407,3]]},"460":{"position":[[109,3]]},"476":{"position":[[1991,3],[2236,5],[2273,3]]},"478":{"position":[[186,5]]},"481":{"position":[[1029,4],[1073,3],[1868,5],[2081,3]]},"483":{"position":[[44,4],[386,3],[411,3],[469,4],[781,5]]},"495":{"position":[[221,3]]},"500":{"position":[[547,5],[637,3],[1198,5],[1311,5]]},"507":{"position":[[343,4]]},"513":{"position":[[210,4],[234,3],[271,3]]},"515":{"position":[[49,3],[214,4]]},"529":{"position":[[58,3],[255,5]]},"531":{"position":[[124,5]]},"543":{"position":[[75,3]]},"549":{"position":[[51,5],[82,4]]},"551":{"position":[[80,4]]},"555":{"position":[[831,5],[885,3]]},"557":{"position":[[442,4],[516,4]]},"563":{"position":[[2862,4],[3255,3],[3344,5],[3762,3],[3851,5]]},"573":{"position":[[100,4]]},"579":{"position":[[87,4]]},"587":{"position":[[37,5]]},"602":{"position":[[429,5]]},"611":{"position":[[189,4]]},"618":{"position":[[73,5],[245,5]]},"625":{"position":[[71,5]]},"627":{"position":[[123,5],[416,3],[503,3],[720,4]]},"629":{"position":[[34,3]]},"631":{"position":[[271,4],[409,3]]},"633":{"position":[[49,5],[115,5],[160,5]]},"635":{"position":[[11,4]]},"639":{"position":[[14,3],[1218,5]]},"653":{"position":[[126,3],[181,3]]},"659":{"position":[[3,3]]},"661":{"position":[[101,3],[260,3]]},"663":{"position":[[734,4]]},"665":{"position":[[280,3]]},"669":{"position":[[35,4],[220,4],[305,3]]},"675":{"position":[[155,3]]},"681":{"position":[[176,5]]},"689":{"position":[[50,3]]},"692":{"position":[[442,5]]},"694":{"position":[[725,5],[1243,3]]},"704":{"position":[[199,3],[453,5],[549,4],[585,5],[645,4],[712,5]]},"708":{"position":[[155,4]]},"710":{"position":[[27,4],[664,5],[717,4],[838,5],[946,4],[1065,4],[1293,5],[1806,5],[1831,3]]},"725":{"position":[[51,5],[82,4],[349,4]]},"729":{"position":[[1025,5],[1075,3]]},"737":{"position":[[727,4],[794,4],[2749,3],[2838,5],[3212,4],[3557,4],[3624,4]]},"739":{"position":[[1797,4],[1864,4],[2734,4],[2801,4]]},"743":{"position":[[467,3],[611,4]]},"745":{"position":[[225,4],[460,5],[592,4],[991,5],[1076,4]]},"749":{"position":[[35,5]]},"753":{"position":[[359,5]]},"764":{"position":[[1368,4]]},"768":{"position":[[154,4],[422,5]]},"781":{"position":[[848,3]]},"785":{"position":[[156,4]]},"794":{"position":[[81,5]]},"800":{"position":[[193,3]]},"802":{"position":[[382,4],[513,4],[980,4],[1039,4],[1153,4],[1187,4],[2265,5],[2371,4],[2448,4]]},"818":{"position":[[151,4],[308,3]]},"822":{"position":[[118,4],[196,3]]},"824":{"position":[[608,3]]},"826":{"position":[[91,5]]},"828":{"position":[[653,5]]},"835":{"position":[[158,5]]},"837":{"position":[[13,4]]},"847":{"position":[[115,5]]},"859":{"position":[[396,4]]},"871":{"position":[[227,3],[545,4]]},"876":{"position":[[186,3]]},"904":{"position":[[249,4]]},"910":{"position":[[1373,4],[1922,4],[1968,5]]},"912":{"position":[[24,4]]},"914":{"position":[[76,5]]},"920":{"position":[[104,5],[721,5],[832,4]]},"926":{"position":[[29,4],[71,4]]},"934":{"position":[[20,5],[354,5],[658,4]]},"940":{"position":[[174,4],[570,4]]},"948":{"position":[[477,3]]},"952":{"position":[[426,3],[945,4]]},"965":{"position":[[332,3],[1253,3]]},"967":{"position":[[610,3],[648,3],[2746,3]]},"973":{"position":[[118,4],[627,4],[1265,4]]},"975":{"position":[[1553,4]]},"977":{"position":[[167,5]]},"982":{"position":[[315,5],[546,4]]},"988":{"position":[[1170,5]]},"990":{"position":[[739,5],[838,4]]},"1004":{"position":[[185,5]]},"1018":{"position":[[139,4]]},"1034":{"position":[[17,4],[81,4]]},"1036":{"position":[[0,5],[286,5]]},"1038":{"position":[[67,4]]},"1040":{"position":[[657,4]]},"1042":{"position":[[559,5],[2645,3],[2797,5],[2827,4],[3043,3],[3440,3],[3786,5],[3814,3],[4192,3]]},"1047":{"position":[[167,3]]},"1051":{"position":[[116,4]]},"1055":{"position":[[98,5],[248,5],[518,5],[606,4],[737,3],[799,3]]},"1059":{"position":[[442,6],[585,5]]},"1076":{"position":[[25,5]]},"1078":{"position":[[199,4]]},"1082":{"position":[[409,4]]},"1090":{"position":[[24,4],[1025,5]]},"1098":{"position":[[116,4],[149,5],[173,3]]},"1106":{"position":[[76,4]]},"1114":{"position":[[0,4]]},"1124":{"position":[[103,5],[296,3]]},"1138":{"position":[[28,4]]},"1154":{"position":[[981,4]]},"1162":{"position":[[464,4]]},"1184":{"position":[[1088,3]]},"1189":{"position":[[5,5],[247,5],[277,5],[321,5]]},"1196":{"position":[[5,5],[252,5],[344,5],[389,5]]},"1202":{"position":[[299,3]]},"1212":{"position":[[0,4],[100,5]]},"1220":{"position":[[16,4],[105,4]]},"1227":{"position":[[32,4],[157,4]]},"1258":{"position":[[692,5]]},"1264":{"position":[[36,4]]},"1268":{"position":[[289,4]]},"1274":{"position":[[53,4],[267,3]]},"1290":{"position":[[0,4],[218,5],[557,4],[814,4],[895,4],[1024,4]]},"1292":{"position":[[89,3]]},"1294":{"position":[[99,5],[168,3]]},"1296":{"position":[[91,3],[183,3]]},"1298":{"position":[[93,3],[189,3]]},"1300":{"position":[[171,5],[230,3],[379,3]]},"1302":{"position":[[1081,3]]},"1336":{"position":[[0,4]]},"1346":{"position":[[12,4],[32,4],[90,5],[110,4],[184,4]]},"1358":{"position":[[99,5],[176,3]]},"1366":{"position":[[0,4],[136,5]]},"1374":{"position":[[1146,5],[1256,4],[1356,4]]},"1376":{"position":[[437,3]]},"1387":{"position":[[89,3]]},"1391":{"position":[[16,4]]},"1395":{"position":[[424,4]]},"1403":{"position":[[197,5]]},"1411":{"position":[[121,4],[160,4]]},"1419":{"position":[[233,4]]},"1427":{"position":[[0,4],[98,5],[156,5],[183,4]]},"1445":{"position":[[0,4]]},"1466":{"position":[[5,5]]},"1474":{"position":[[117,5]]}}}],["usabl",{"_index":1770,"t":{"505":{"position":[[89,10]]}}}],["usag",{"_index":55,"t":{"16":{"position":[[0,5]]},"32":{"position":[[64,5]]},"165":{"position":[[464,6]]},"207":{"position":[[54,5]]},"215":{"position":[[391,6]]},"221":{"position":[[88,5]]},"223":{"position":[[106,5],[194,5],[313,5]]},"227":{"position":[[28,5]]},"256":{"position":[[403,6]]},"279":{"position":[[439,6]]},"309":{"position":[[28,5]]},"358":{"position":[[476,5]]},"425":{"position":[[343,5]]},"449":{"position":[[342,5]]},"468":{"position":[[975,5]]},"476":{"position":[[57,5],[809,5]]},"483":{"position":[[887,5]]},"498":{"position":[[93,5]]},"500":{"position":[[1338,5]]},"543":{"position":[[103,5]]},"553":{"position":[[43,5]]},"573":{"position":[[11,5],[66,5],[226,6],[252,5],[391,5],[678,5],[712,5]]},"579":{"position":[[103,5],[187,5],[216,5]]},"581":{"position":[[34,5]]},"737":{"position":[[301,5]]},"762":{"position":[[261,5]]},"764":{"position":[[7,5],[92,6]]},"768":{"position":[[380,5]]},"781":{"position":[[257,5],[438,6],[505,5],[627,5],[781,5],[795,5],[974,6]]},"785":{"position":[[414,5]]},"802":{"position":[[541,5]]},"822":{"position":[[587,5]]},"828":{"position":[[792,5]]},"841":{"position":[[371,5]]},"853":{"position":[[12,5]]},"857":{"position":[[18,5],[56,5],[205,5],[417,5]]},"869":{"position":[[111,6]]},"871":{"position":[[51,6]]},"896":{"position":[[269,5]]},"910":{"position":[[911,5]]},"934":{"position":[[75,5]]},"963":{"position":[[492,5]]},"975":{"position":[[181,5]]},"986":{"position":[[396,5]]},"990":{"position":[[24,5]]},"1004":{"position":[[286,5],[884,5]]},"1010":{"position":[[236,6]]},"1042":{"position":[[2766,5]]},"1064":{"position":[[156,6]]},"1066":{"position":[[34,6],[1453,6]]},"1068":{"position":[[48,6]]},"1070":{"position":[[53,6]]},"1072":{"position":[[68,6],[485,5]]},"1074":{"position":[[68,6]]},"1082":{"position":[[86,5],[151,6],[270,5],[498,5]]},"1098":{"position":[[76,5]]},"1124":{"position":[[11,5]]},"1148":{"position":[[84,5]]},"1150":{"position":[[91,5],[193,5],[295,5]]},"1154":{"position":[[253,5]]},"1286":{"position":[[0,5],[43,5]]},"1300":{"position":[[26,5],[263,5]]},"1336":{"position":[[55,5]]},"1374":{"position":[[34,5]]},"1376":{"position":[[39,5],[103,5]]},"1441":{"position":[[320,6]]}}}],["usage/emiss",{"_index":3089,"t":{"1090":{"position":[[1079,15]]}}}],["used,th",{"_index":3111,"t":{"1154":{"position":[[187,8]]}}}],["user",{"_index":172,"t":{"55":{"position":[[69,5]]},"63":{"position":[[176,4]]},"95":{"position":[[1386,4],[2629,6],[2697,4]]},"104":{"position":[[217,5],[339,4]]},"106":{"position":[[257,5]]},"116":{"position":[[229,5]]},"127":{"position":[[394,5],[510,4]]},"145":{"position":[[907,4]]},"147":{"position":[[109,4]]},"425":{"position":[[1321,4]]},"481":{"position":[[422,5]]},"498":{"position":[[1510,4]]},"802":{"position":[[40,4]]},"809":{"position":[[446,5]]},"828":{"position":[[180,4]]},"835":{"position":[[56,4]]},"896":{"position":[[50,4],[127,4]]},"946":{"position":[[424,4]]},"963":{"position":[[768,4]]},"967":{"position":[[305,4]]},"1004":{"position":[[776,4]]},"1057":{"position":[[143,4]]},"1374":{"position":[[1331,4]]}}}],["user.email",{"_index":2268,"t":{"673":{"position":[[60,10]]}}}],["user.nam",{"_index":2267,"t":{"673":{"position":[[20,9]]}}}],["usual",{"_index":2530,"t":{"751":{"position":[[200,7]]},"1238":{"position":[[249,7]]}}}],["utf",{"_index":361,"t":{"79":{"position":[[202,4]]},"81":{"position":[[206,4],[225,3]]}}}],["util",{"_index":1606,"t":{"468":{"position":[[22,5]]}}}],["utilis",{"_index":896,"t":{"293":{"position":[[25,8]]},"579":{"position":[[148,9]]},"702":{"position":[[382,9]]},"704":{"position":[[288,9]]},"710":{"position":[[191,7]]},"839":{"position":[[38,7]]},"934":{"position":[[1504,8]]},"1057":{"position":[[780,8]]},"1358":{"position":[[520,8]]},"1409":{"position":[[101,8]]},"1411":{"position":[[25,8]]},"1419":{"position":[[25,8]]}}}],["v1",{"_index":996,"t":{"379":{"position":[[85,2]]},"462":{"position":[[24,2]]}}}],["v2",{"_index":1037,"t":{"383":{"position":[[265,2]]},"408":{"position":[[134,2]]},"416":{"position":[[225,2],[496,2]]},"419":{"position":[[27,2],[76,2]]},"421":{"position":[[80,2]]},"425":{"position":[[1128,2]]},"427":{"position":[[152,2],[428,2]]},"430":{"position":[[163,2],[232,2]]},"432":{"position":[[11,2],[68,2],[267,2],[421,2],[510,2],[557,2],[803,2],[987,2],[1082,2]]},"438":{"position":[[714,2],[839,2],[886,2]]},"451":{"position":[[16,2]]},"458":{"position":[[53,2]]},"462":{"position":[[30,2]]},"468":{"position":[[58,2],[536,2]]},"478":{"position":[[80,2]]}}}],["v3",{"_index":1677,"t":{"478":{"position":[[23,2]]}}}],["v5.3.1",{"_index":727,"t":{"149":{"position":[[275,6]]}}}],["v7",{"_index":391,"t":{"91":{"position":[[76,2]]}}}],["v7.1",{"_index":3090,"t":{"1090":{"position":[[1282,4],[1325,4],[1407,4],[1500,4]]}}}],["v7.2",{"_index":922,"t":{"318":{"position":[[129,5]]},"1090":{"position":[[1183,5]]}}}],["v7.4.1",{"_index":1760,"t":{"500":{"position":[[1011,6]]}}}],["v7.4.2",{"_index":1762,"t":{"500":{"position":[[1161,6],[1280,6]]}}}],["v7.4.3",{"_index":1764,"t":{"500":{"position":[[1465,7]]}}}],["v8",{"_index":392,"t":{"91":{"position":[[82,3]]},"95":{"position":[[606,2]]},"100":{"position":[[76,2]]},"505":{"position":[[7,2]]}}}],["v8.0",{"_index":1772,"t":{"517":{"position":[[38,5]]},"1090":{"position":[[1581,4],[1662,4]]}}}],["v8.1",{"_index":548,"t":{"100":{"position":[[82,5]]},"281":{"position":[[40,5]]},"517":{"position":[[7,4]]},"527":{"position":[[38,5]]},"1018":{"position":[[151,4]]},"1090":{"position":[[1780,4]]}}}],["v8.2",{"_index":1777,"t":{"527":{"position":[[7,4]]},"533":{"position":[[38,5]]},"1090":{"position":[[1838,4],[1901,4]]}}}],["v8.3",{"_index":1341,"t":{"434":{"position":[[382,4]]},"533":{"position":[[7,4]]}}}],["v8.4",{"_index":1186,"t":{"423":{"position":[[97,4]]},"434":{"position":[[145,4]]}}}],["v8.6",{"_index":1126,"t":{"414":{"position":[[578,4],[636,4]]}}}],["v8.7",{"_index":3132,"t":{"1202":{"position":[[22,4]]}}}],["v8.8",{"_index":3,"t":{"2":{"position":[[23,5]]},"10":{"position":[[22,4]]},"18":{"position":[[22,4]]},"34":{"position":[[22,4]]},"342":{"position":[[46,5]]},"381":{"position":[[139,4]]},"1346":{"position":[[178,5]]}}}],["v_\\mathrm{1}^n",{"_index":3010,"t":{"1042":{"position":[[1176,14]]}}}],["v_\\mathrm{2}^np1​v1n​=p2​v2n",{"_index":3012,"t":{"1042":{"position":[[1206,30]]}}}],["valid",{"_index":121,"t":{"44":{"position":[[769,5]]},"93":{"position":[[961,6],[1042,5],[5114,5]]},"102":{"position":[[403,5]]},"141":{"position":[[459,5]]},"145":{"position":[[113,5]]},"147":{"position":[[65,8],[85,8],[159,6],[312,6],[575,8],[1116,8],[1229,8]]},"153":{"position":[[13,5]]},"283":{"position":[[13,5],[727,5]]},"414":{"position":[[456,5]]},"416":{"position":[[26,10]]},"421":{"position":[[203,10]]},"427":{"position":[[227,8],[292,8]]},"436":{"position":[[173,10]]},"445":{"position":[[36,10],[798,5],[829,10],[901,5],[917,8]]},"449":{"position":[[462,10]]},"468":{"position":[[235,5]]},"491":{"position":[[256,5]]},"493":{"position":[[395,8],[488,10]]},"495":{"position":[[11,10],[60,10],[138,10]]},"498":{"position":[[1625,9]]},"500":{"position":[[233,5],[577,5]]},"563":{"position":[[888,5]]},"614":{"position":[[294,5]]},"1057":{"position":[[36,5],[90,6],[230,8]]},"1090":{"position":[[238,5]]},"1184":{"position":[[204,5],[443,6]]},"1302":{"position":[[197,5],[436,6]]},"1403":{"position":[[734,5]]}}}],["valu",{"_index":35,"t":{"6":{"position":[[40,6]]},"8":{"position":[[28,6]]},"73":{"position":[[99,6]]},"77":{"position":[[73,6]]},"95":{"position":[[2019,7]]},"141":{"position":[[221,5],[616,6],[888,6]]},"153":{"position":[[264,5]]},"173":{"position":[[9,5]]},"175":{"position":[[8,7]]},"209":{"position":[[30,5]]},"248":{"position":[[58,6],[167,6],[403,6],[429,6],[485,6],[571,6]]},"259":{"position":[[251,6],[326,6],[410,7]]},"271":{"position":[[225,6]]},"283":{"position":[[1048,7],[1250,7]]},"297":{"position":[[139,5],[216,5]]},"316":{"position":[[88,5],[104,5],[127,5]]},"322":{"position":[[49,5],[65,5]]},"324":{"position":[[43,5],[59,5]]},"410":{"position":[[200,6]]},"414":{"position":[[379,6]]},"468":{"position":[[170,6]]},"476":{"position":[[1968,6]]},"491":{"position":[[262,5]]},"555":{"position":[[80,6],[344,6],[419,6],[461,6],[504,6],[553,6],[622,6],[686,6],[710,6],[761,6],[786,6]]},"563":{"position":[[3297,5],[3804,5]]},"565":{"position":[[1830,6],[1905,6],[1947,6],[1990,6],[2039,6],[2108,6],[2172,6],[2196,6],[2247,6],[2272,6]]},"669":{"position":[[368,7]]},"704":{"position":[[511,5],[569,5]]},"708":{"position":[[202,6]]},"710":{"position":[[1994,6]]},"729":{"position":[[80,6],[344,6],[479,6],[684,6],[736,6],[810,6],[896,6],[955,6],[980,6],[1246,7]]},"737":{"position":[[2791,5]]},"739":{"position":[[655,6],[790,6],[995,6],[1047,6],[1121,6],[1207,6],[1266,6],[1291,6]]},"764":{"position":[[1065,6],[1175,6]]},"768":{"position":[[109,6]]},"794":{"position":[[383,6]]},"805":{"position":[[149,6]]},"814":{"position":[[233,6]]},"816":{"position":[[333,6]]},"828":{"position":[[663,6]]},"916":{"position":[[368,6],[428,6],[500,6]]},"922":{"position":[[371,6],[431,6],[503,6],[600,6],[660,6],[732,6]]},"934":{"position":[[1192,6]]},"940":{"position":[[450,6]]},"942":{"position":[[366,5]]},"967":{"position":[[1845,5],[2258,5]]},"971":{"position":[[900,5],[1402,5],[1854,5]]},"973":{"position":[[1183,6],[1215,5]]},"1004":{"position":[[27,6],[106,5],[200,6],[241,6],[701,6],[839,7],[856,6],[922,5]]},"1006":{"position":[[84,5],[131,6],[194,7]]},"1020":{"position":[[434,6]]},"1030":{"position":[[28,6],[117,6]]},"1032":{"position":[[33,6],[117,6],[152,6]]},"1036":{"position":[[67,6],[94,6],[365,6],[411,6]]},"1042":{"position":[[2211,6]]},"1057":{"position":[[424,5],[767,5]]},"1066":{"position":[[568,6],[1052,8],[1225,8]]},"1072":{"position":[[1031,6]]},"1084":{"position":[[28,7],[52,7]]},"1140":{"position":[[10,7]]},"1165":{"position":[[369,5]]},"1170":{"position":[[768,5]]},"1178":{"position":[[369,5]]},"1184":{"position":[[873,6]]},"1191":{"position":[[174,6],[234,6],[306,6]]},"1198":{"position":[[177,6],[237,6],[309,6],[406,6],[466,6],[538,6]]},"1227":{"position":[[265,6],[346,6],[424,7]]},"1230":{"position":[[179,7]]},"1248":{"position":[[154,5]]},"1250":{"position":[[88,5]]},"1258":{"position":[[248,6],[525,5]]},"1302":{"position":[[866,6]]},"1315":{"position":[[79,6]]},"1353":{"position":[[100,6]]},"1355":{"position":[[103,6]]},"1397":{"position":[[351,5],[853,5]]},"1427":{"position":[[112,5],[289,6]]},"1439":{"position":[[326,5]]},"1452":{"position":[[182,7]]},"1454":{"position":[[94,7]]},"1459":{"position":[[185,7]]},"1461":{"position":[[82,6]]},"1468":{"position":[[84,5],[131,6],[194,7]]}}}],["value/express",{"_index":910,"t":{"297":{"position":[[428,17]]},"1429":{"position":[[36,17]]}}}],["valueerror",{"_index":3145,"t":{"1258":{"position":[[257,10]]}}}],["valv",{"_index":2555,"t":{"764":{"position":[[558,7]]},"781":{"position":[[1471,6]]},"926":{"position":[[525,6]]},"967":{"position":[[670,5],[1366,5]]},"986":{"position":[[548,5]]},"988":{"position":[[1191,6]]},"1042":{"position":[[3803,7]]}}}],["valve)/recircul",{"_index":2578,"t":{"781":{"position":[[1450,20]]}}}],["var.base_production_load_mw",{"_index":1869,"t":{"563":{"position":[[297,28]]},"565":{"position":[[2606,28]]}}}],["var.flare_a_fuel_rate_sm3_day",{"_index":1898,"t":{"563":{"position":[[3484,30]]},"565":{"position":[[4149,30]]}}}],["var.flare_b_fuel_rate_sm3_day",{"_index":1899,"t":{"563":{"position":[[3991,30]]},"565":{"position":[[4585,30]]}}}],["var.flare_fuel_rate_sm3_day",{"_index":2437,"t":{"737":{"position":[[2985,28]]},"739":{"position":[[2493,28]]}}}],["var.gas_export_condit",{"_index":1900,"t":{"563":{"position":[[4437,25]]},"565":{"position":[[4741,25]]}}}],["var.gas_export_rate_sm3_per_day",{"_index":1879,"t":{"563":{"position":[[1279,32],[4469,32]]},"565":{"position":[[2910,32],[4773,32]]},"737":{"position":[[3498,32]]},"739":{"position":[[2675,32]]}}}],["var.gas_injection_rate_sm3_per_day",{"_index":2429,"t":{"737":{"position":[[665,35]]},"739":{"position":[[1735,35]]}}}],["var.gas_ratea",{"_index":2990,"t":{"1036":{"position":[[248,14]]}}}],["var.gas_rateb",{"_index":2991,"t":{"1036":{"position":[[267,14]]}}}],["var.hydrocarbon_export_sm3_per_day",{"_index":1868,"t":{"557":{"position":[[298,35],[631,35],[789,35]]},"559":{"position":[[415,35]]},"561":{"position":[[351,35]]},"565":{"position":[[2332,35],[4213,35]]},"731":{"position":[[429,35]]},"739":{"position":[[1351,35]]}}}],["var.produced_water_reinjection_condit",{"_index":2430,"t":{"737":{"position":[[1392,41]]},"739":{"position":[[1999,41]]}}}],["var.produced_water_reinjection_total_system_rate_m3_per_day",{"_index":2431,"t":{"737":{"position":[[1467,60]]},"739":{"position":[[2074,60]]}}}],["var.salt_water_inject",{"_index":1674,"t":{"476":{"position":[[2030,25],[2086,26]]},"1036":{"position":[[418,25]]}}}],["var.salt_water_injection_rate_m3_per_day",{"_index":2428,"t":{"729":{"position":[[1280,41]]},"739":{"position":[[2363,41]]}}}],["var.sea_water_injection_rate_m3_per_day",{"_index":2436,"t":{"737":{"position":[[2636,40]]}}}],["var.variable_name1",{"_index":2018,"t":{"591":{"position":[[185,19]]}}}],["var.variable_name2",{"_index":2019,"t":{"591":{"position":[[209,19]]}}}],["var.water_injection_condit",{"_index":1891,"t":{"563":{"position":[[2314,30],[3027,30]]},"565":{"position":[[3415,30],[3926,30]]}}}],["var.water_injection_r",{"_index":1890,"t":{"563":{"position":[[2277,25]]},"565":{"position":[[3378,25]]}}}],["vari",{"_index":791,"t":{"203":{"position":[[40,7]]},"231":{"position":[[91,7]]},"543":{"position":[[623,7]]},"555":{"position":[[957,7]]},"828":{"position":[[63,4]]},"837":{"position":[[134,6]]},"963":{"position":[[265,7],[303,5]]},"986":{"position":[[66,6]]},"1016":{"position":[[829,7]]},"1090":{"position":[[590,4]]},"1300":{"position":[[452,4]]},"1427":{"position":[[233,4]]},"1435":{"position":[[743,7]]}}}],["variabl",{"_index":815,"t":{"235":{"position":[[200,8],[272,10]]},"259":{"position":[[357,10]]},"295":{"position":[[1209,8]]},"328":{"position":[[283,8]]},"334":{"position":[[0,9]]},"336":{"position":[[31,9],[118,9],[209,9]]},"358":{"position":[[89,8]]},"408":{"position":[[12,9]]},"414":{"position":[[254,8]]},"438":{"position":[[588,8]]},"464":{"position":[[254,9]]},"476":{"position":[[1111,8],[1512,8],[1575,8],[1868,9],[1935,10],[2000,8],[2124,9]]},"483":{"position":[[134,8]]},"491":{"position":[[55,8],[130,8]]},"493":{"position":[[51,8],[502,8],[536,8]]},"500":{"position":[[1236,8]]},"543":{"position":[[507,8],[702,8],[800,8],[995,8],[1168,8],[1342,8]]},"545":{"position":[[192,9],[204,9],[384,10]]},"547":{"position":[[14,10],[164,9]]},"555":{"position":[[46,10],[200,8],[279,10],[301,10],[965,9]]},"557":{"position":[[289,8],[350,9]]},"563":{"position":[[463,8],[1515,8],[1628,8],[1704,9],[3354,8],[3861,8],[4056,8],[4168,8]]},"565":{"position":[[1787,10]]},"571":{"position":[[311,9]]},"575":{"position":[[362,10],[496,10]]},"585":{"position":[[0,9],[61,9]]},"591":{"position":[[154,8]]},"596":{"position":[[250,8]]},"600":{"position":[[90,8],[306,8]]},"602":{"position":[[333,8]]},"607":{"position":[[369,8]]},"659":{"position":[[197,8]]},"696":{"position":[[249,8],[400,8],[547,8]]},"700":{"position":[[14,10]]},"710":{"position":[[498,8]]},"719":{"position":[[346,8],[501,8],[619,8],[812,8],[1086,8]]},"721":{"position":[[162,9],[174,9],[354,10]]},"723":{"position":[[14,10],[164,9]]},"729":{"position":[[46,10],[200,8],[279,10],[301,10],[1322,8]]},"731":{"position":[[289,8],[314,9]]},"737":{"position":[[460,8],[867,8],[982,8],[1075,9],[2393,8],[2600,10],[2848,8],[3029,8],[3136,8]]},"739":{"position":[[612,10],[2327,10]]},"743":{"position":[[187,10],[649,9],[668,9],[1089,10]]},"745":{"position":[[839,8],[908,9]]},"762":{"position":[[35,8]]},"764":{"position":[[201,8],[443,8]]},"768":{"position":[[455,8]]},"773":{"position":[[20,8]]},"781":{"position":[[1170,10]]},"794":{"position":[[426,9],[453,8]]},"796":{"position":[[105,8],[186,9]]},"798":{"position":[[485,10],[624,8],[649,9],[1733,10]]},"802":{"position":[[743,10],[1142,10],[1171,9]]},"805":{"position":[[122,10]]},"809":{"position":[[4,9],[53,8],[466,9],[624,9],[695,9]]},"814":{"position":[[191,10]]},"816":{"position":[[316,10]]},"826":{"position":[[46,9],[171,9],[365,9]]},"835":{"position":[[87,10]]},"847":{"position":[[201,8],[240,8]]},"853":{"position":[[63,8]]},"855":{"position":[[200,8]]},"896":{"position":[[81,10],[164,8]]},"898":{"position":[[152,10],[180,9],[227,9]]},"900":{"position":[[88,10]]},"902":{"position":[[165,10]]},"910":{"position":[[35,8],[1419,8],[1624,8],[2036,8]]},"912":{"position":[[172,8]]},"920":{"position":[[4,8],[666,8],[729,8]]},"924":{"position":[[620,8],[702,8]]},"930":{"position":[[306,8]]},"940":{"position":[[6,8],[724,8],[765,8]]},"944":{"position":[[145,8],[194,8],[232,8]]},"946":{"position":[[15,8]]},"967":{"position":[[318,8],[420,8]]},"973":{"position":[[1347,8]]},"1016":{"position":[[137,10],[162,11],[335,10],[609,10],[804,9]]},"1022":{"position":[[106,9]]},"1024":{"position":[[183,8]]},"1026":{"position":[[9,9]]},"1028":{"position":[[0,9]]},"1030":{"position":[[0,10],[11,9],[64,10],[75,9]]},"1032":{"position":[[0,10],[72,10]]},"1034":{"position":[[0,9],[108,10]]},"1036":{"position":[[6,9],[45,10],[292,9],[322,9],[332,10]]},"1042":{"position":[[3063,8],[3471,8],[4233,8]]},"1082":{"position":[[553,8]]},"1090":{"position":[[1214,8]]},"1162":{"position":[[52,8],[590,8],[631,8],[773,8],[830,8]]},"1176":{"position":[[64,8],[262,8],[303,8],[445,8],[502,8]]},"1196":{"position":[[22,8],[86,8]]},"1220":{"position":[[284,8]]},"1227":{"position":[[377,10]]},"1435":{"position":[[51,10],[76,11],[249,10],[523,10],[718,9]]},"1441":{"position":[[118,8]]}}}],["variable + + + + +Search the documentation + + + + +

    Search the documentation

    + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000000..acb2b30f37 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://equinor.github.io/ecalc/searchweekly0.5https://equinor.github.io/ecalc/versionsweekly0.5https://equinor.github.io/ecalc/docs/tagsweekly0.5https://equinor.github.io/ecalc/docs/tags/e-calcweekly0.5https://equinor.github.io/ecalc/docs/tags/releaseweekly0.5https://equinor.github.io/ecalc/docs/about/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/cli/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/cli/faqweekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/library/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/yaml/weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v7_to_v8weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8_to_v81weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-1_to_v8-2weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-2_to_v8-3weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-3_to_v8-4weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-5_to_v8-6weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-6_to_v8-7weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8.7_to_v8.8weekly0.5https://equinor.github.io/ecalc/docs/about/miscellaneous/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/advancedweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/drogonweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/simpleweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/generator_modellingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_chartsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/tabularweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/file_format_and_syntax/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressionsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/fuel_typesweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressorweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_systemweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressuresweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/direct_consumersweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculationsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculationsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculationsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressuresweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/fluid_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/turbine_modelingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/time_seriesweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/variablesweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/theory/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/theory/compressor_modellingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/theory/pump_modellingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/workflow/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/workflow/generic_workflowweekly0.5https://equinor.github.io/ecalc/docs/about/references/weekly0.5https://equinor.github.io/ecalc/docs/about/references/api/weekly0.5https://equinor.github.io/ecalc/docs/about/references/cli_referenceweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/weekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ADJUSTMENTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CATEGORYweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/COMPRESSOR_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEMweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONDITIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONDITIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONSTANTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONSUMERSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONTROL_MARGINweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNITweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CROSSOVERweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CURVEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CURVESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/DIRECT_EMITTERSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/DISCHARGE_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROLweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EFFICIENCYweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ELECTRICITY2FUELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMISSIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMISSION_NAMEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMISSION_RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMISSIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMITTER_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ENDweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ENERGYFUNCTIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EXPRESSIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EXTRAPOLATIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FACILITY_INPUTSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FACTORweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FILEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FLUID_DENSITYweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FLUID_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FUELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FUEL_TYPESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FUELCONSUMERSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FUELRATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/GENERATORSETSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/HCEXPORTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/HEADweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/HEAD_MARGINweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/includeweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTORweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INLET_TEMPERATUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INSTALLATIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INTERPOLATION_TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/LOADweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/MODELSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/NAMEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/POWERLOSSFACTORweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/PRESSURE_CONTROLweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/PUMPSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/RATE_FRACTIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/RATE_PER_STREAMweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/REGULARITYweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/STAGESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/STARTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/STREAMweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/STREAMSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/SUCTION_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TIME_SERIESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TURBINE_LOADweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TURBINE_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/UNITSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROLweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/VARIABLESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/VENTING_EMITTERSweekly0.5https://equinor.github.io/ecalc/docs/category/documentationweekly0.5https://equinor.github.io/ecalc/docs/category/guidesweekly0.5https://equinor.github.io/ecalc/docs/changelog/weekly0.5https://equinor.github.io/ecalc/docs/changelog/latestweekly0.5https://equinor.github.io/ecalc/docs/changelog/separatorweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-0-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-1-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-2-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-3-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-4-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-5-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-6-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.0-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.1-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.2-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.3-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.4-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.5-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.6-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.7-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.8-releaseweekly0.5https://equinor.github.io/ecalc/docs/contribute/documentation-guide/documentationweekly0.5https://equinor.github.io/ecalc/docs/contribute/documentation-guide/markdownweekly0.5https://equinor.github.io/ecalc/docs/contribute/get-startedweekly0.5https://equinor.github.io/ecalc/docs/contribute/guides/conventional-commitsweekly0.5https://equinor.github.io/ecalc/docs/contribute/guides/gitweekly0.5https://equinor.github.io/ecalc/weekly0.5 \ No newline at end of file diff --git a/versions/index.html b/versions/index.html new file mode 100644 index 0000000000..a310de7942 --- /dev/null +++ b/versions/index.html @@ -0,0 +1,13 @@ + + + + + +Versions | eCalc™ Docs + + + + +

    eCalc documentation versions

    Current version (Stable)

    Here you can find the documentation for current released version.

    NextDocumentationRelease Notes
    + + \ No newline at end of file
  • yt|;v>+BVefT1O_slmt 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�-q?%ckZO8uMasO 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 literal 0 HcmV?d00001 diff --git a/assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png b/assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png new file mode 100644 index 0000000000000000000000000000000000000000..25dbfc51024d0cc8896201680eb4d3fe345e655e GIT binary patch literal 59154 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 Ybd`DA$CodSqCShf+zHv_gZgg&2e{-c7XSbN literal 0 HcmV?d00001 diff --git a/assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG b/assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG new file mode 100644 index 0000000000000000000000000000000000000000..efd6e51377eca031930cc6fd5a54007f71914d7f GIT binary patch literal 12910 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 literal 0 HcmV?d00001 diff --git a/assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG b/assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..302a6588ea0110e02cd6875449793c60a10872ab GIT binary patch literal 14284 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 iPYGCJA?fDs+5Zm>nHLYJNs5dB0000AL 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