diff --git a/.dir-locals.el b/.dir-locals.el index 38863baa7..317e2e5bd 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -11,3 +11,5 @@ ;; ((nil . ((cider-clojure-cli-aliases . "-A:dev:behave/vms") ;; (cider-default-cljs-repl . figwheel-main) ;; (cider-figwheel-main-default-options . "vms")))) + + diff --git a/.github/workflows/cljs-tests.yml b/.github/workflows/cljs-tests.yml new file mode 100644 index 000000000..c781db7c3 --- /dev/null +++ b/.github/workflows/cljs-tests.yml @@ -0,0 +1,50 @@ +name: CLJS tests + +on: + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + cljs-tests: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '21' + + - uses: DeLaGuardo/setup-clojure@13.0 + with: + cli: latest + bb: latest + + - uses: actions/cache@v4 + with: + path: | + ~/.m2/repository + ~/.gitlibs + key: cljdeps-${{ hashFiles('deps.edn', 'projects/behave/deps.edn') }} + restore-keys: cljdeps- + + - uses: browser-actions/setup-chrome@v1 + id: chrome + with: + chrome-version: stable + + # Prefetch deps so the test step is compile + run only. + - name: Prefetch deps + working-directory: projects/behave + run: clojure -P -M:test-ci + + # Compiles the test build, launches headless Chrome via figwheel, runs + # the suite (behave.headless-test-runner), and exits pass/fail. + - name: Run CLJS test suite (headless Chrome) + working-directory: projects/behave + env: + CHROME_BIN: ${{ steps.chrome.outputs.chrome-path }} + run: bb test:ci diff --git a/.github/workflows/cucumber-pr.yml b/.github/workflows/cucumber-pr.yml new file mode 100644 index 000000000..73430242e --- /dev/null +++ b/.github/workflows/cucumber-pr.yml @@ -0,0 +1,20 @@ +name: cucumber (on PR core only) + +# Runs the core cucumber suite automatically on every PR to main. The full/all scope +# stays on the manual push-button workflow (cucumber.yml). +on: + pull_request: + branches: + - main + +# Cancel a still-running core run when the PR gets a new commit. +concurrency: + group: cucumber-pr-${{ github.ref }} + cancel-in-progress: true + +jobs: + core: + uses: ./.github/workflows/cucumber-run.yml + with: + scope: core + timeout_minutes: 120 # core-only is far smaller than the 360 push-button cap; tune as needed diff --git a/.github/workflows/cucumber-run.yml b/.github/workflows/cucumber-run.yml new file mode 100644 index 000000000..ca4aebf38 --- /dev/null +++ b/.github/workflows/cucumber-run.yml @@ -0,0 +1,100 @@ +name: cucumber (base) + +# Reusable job shared by the push-button (cucumber.yml) and the PR (cucumber-pr.yml) +# workflows. Single source of truth for the cucumber CI steps. +on: + workflow_call: + inputs: + scope: + description: 'Which scenarios to run: core (@core, excluding @extended) or all (@core + @extended)' + type: string + default: core + features_dir: + description: 'Features dir (narrow to a subset, e.g. features/results-page)' + type: string + default: features + serve_timeout: + description: 'Seconds to wait for the app to become reachable' + type: string + default: '300' + shards: + description: 'Number of parallel shards (each = 1 Chrome + 1 app server; bump cautiously on RAM)' + type: string + default: '2' + timeout_minutes: + description: 'Job timeout in minutes (GitHub-hosted runner max is 360 / 6h)' + type: number + default: 360 + +jobs: + cucumber: + runs-on: ubuntu-latest + timeout-minutes: ${{ inputs.timeout_minutes }} + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '21' + + - uses: DeLaGuardo/setup-clojure@13.0 + with: + cli: latest # clojure CLI + bb: latest # babashka + + - uses: actions/cache@v4 + with: + path: | + ~/.m2/repository + ~/.gitlibs + key: cljdeps-${{ hashFiles('deps.edn', 'projects/behave/deps.edn') }} + restore-keys: cljdeps- + + # Install Chrome only. We deliberately do NOT install/pin chromedriver here — setup-chrome's + # "stable" chromedriver can drift a major version ahead of the browser (SessionNotCreated). + # Selenium Manager (bundled in Selenium 4.23) downloads the matching driver at runtime. + - uses: browser-actions/setup-chrome@v1 + id: chrome + with: + chrome-version: stable + + # Prefetch deps so the run is compile-only (all three classpaths the sharded run uses: + # driver, per-shard server, and the advanced CLJS compile). + - name: Prefetch deps + run: | + clojure -P -M:dev:behave/cms + clojure -P -M:dev:behave/app + (cd projects/behave && clojure -P -M:compile-cljs) + + # Compiles the advanced CLJS build once, starts N isolated app servers (own port + DB + # each), splits features across them, runs N headless Chrome drivers in parallel, then + # merges + tears everything down. Non-zero exit fails the job. Inputs are read via env + # to avoid ${{ }} script injection. + - name: Run cucumber suite (sharded, headless, fresh DBs) + env: + # No CHROMEDRIVER_PATH — Selenium Manager auto-resolves a driver matching CHROME_BIN. + CHROME_BIN: ${{ steps.chrome.outputs.chrome-path }} + SCOPE: ${{ inputs.scope }} + FEATURES_DIR: ${{ inputs.features_dir }} + SERVE_TIMEOUT: ${{ inputs.serve_timeout }} + SHARDS: ${{ inputs.shards }} + run: | + case "$SCOPE" in + all) QUERY='(or "core" "extended")' ;; + *) QUERY='(and "core" (not "extended"))' ;; + esac + bb cucumber:ci \ + --headless \ + --shards "$SHARDS" \ + --query "$QUERY" \ + --features-dir "$FEATURES_DIR" \ + --serve-timeout "$SERVE_TIMEOUT" + + - uses: actions/upload-artifact@v4 + if: always() + with: + name: cucumber-results + path: | + logs/cucumber/** + if-no-files-found: ignore diff --git a/.github/workflows/cucumber.yml b/.github/workflows/cucumber.yml index e237c35d0..2a7931671 100644 --- a/.github/workflows/cucumber.yml +++ b/.github/workflows/cucumber.yml @@ -1,69 +1,33 @@ -name: cucumber +name: cucumber (manual dispatch) on: - pull_request: - push: - branches: [main] workflow_dispatch: + inputs: + scope: + description: 'Which scenarios to run' + type: choice + default: core + options: + - core # @core, excluding @extended + - all # @core + @extended + features_dir: + description: 'Features dir (narrow to a subset, e.g. features/results-page)' + type: string + default: features + serve_timeout: + description: 'Seconds to wait for the app to become reachable' + type: string + default: '300' + shards: + description: 'Number of parallel shards (each = 1 Chrome + 1 app server; bump cautiously on RAM)' + type: string + default: '2' jobs: - cucumber-core: - runs-on: ubuntu-latest - timeout-minutes: 45 - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: '21' - - - uses: DeLaGuardo/setup-clojure@13.0 - with: - cli: latest # clojure CLI - bb: latest # babashka - - - uses: actions/cache@v4 - with: - path: | - ~/.m2/repository - ~/.gitlibs - key: cljdeps-${{ hashFiles('deps.edn', 'projects/behave/deps.edn') }} - restore-keys: cljdeps- - - # Matched Chrome + chromedriver (avoids Selenium SessionNotCreated version drift). - - uses: browser-actions/setup-chrome@v1 - id: chrome - with: - chrome-version: stable - install-chromedriver: true - - # Prefetch deps so the readiness window is compile-only (both classpaths the run uses). - - name: Prefetch deps - run: | - clojure -P -M:dev:behave/cms - (cd projects/behave && clojure -P -M:figwheel-lib) - - # Starts the app (figwheel serve + init-config!/init-db!), runs the @core suite - # headless against a freshly-created empty DB (connect! creates it; VMS comes from - # the tracked layout.msgpack), then tears the app down. Non-zero exit fails the job. - - name: Run @core cucumber suite (headless, fresh DB) - env: - CHROME_BIN: ${{ steps.chrome.outputs.chrome-path }} - CHROMEDRIVER_PATH: ${{ steps.chrome.outputs.chromedriver-path }} - run: | - bb cucumber:ci \ - --query '(and "core" (not "extended"))' \ - --db-path ci-db.sqlite \ - --serve-timeout 300 - - - uses: actions/upload-artifact@v4 - if: always() - with: - name: cucumber-results - path: | - cucumber_test_results_*.org - cucumber_results_*.edn - cucumber_figwheel.log - cucumber_run.log - if-no-files-found: ignore + cucumber: + uses: ./.github/workflows/cucumber-run.yml + with: + scope: ${{ inputs.scope }} + features_dir: ${{ inputs.features_dir }} + serve_timeout: ${{ inputs.serve_timeout }} + shards: ${{ inputs.shards }} diff --git a/.gitignore b/.gitignore index 161e44979..12fcc09d0 100644 --- a/.gitignore +++ b/.gitignore @@ -232,3 +232,8 @@ projects/behave/resources/public/cljs-test/ projects/behave/resources/public/js/behave.js projects/behave/projects/ projects/behave/resources/db.sqlite + +# Cucumber test run artifacts (logs already covered by *.log above) +cucumber_results_*.edn +cucumber_test_results*.org +ci-db.sqlite diff --git a/bb.edn b/bb.edn index fb2c0e070..2862c6de1 100644 --- a/bb.edn +++ b/bb.edn @@ -32,6 +32,13 @@ (shell "find projects/behave/resources/public/help/images -type f ( -iname \"*.jpg\" -o -iname \"*.jpeg\" -o -iname \"*.png\" ) -exec sh -c 'for file do convert \"$file\" \"${file%.*}.webp\" && echo \"Converted $file to ${file%.*}.webp\"; done' sh {} +") (shell "find projects/behave/resources/public/help/images -type f ( -iname \"*.jpg\" -o -iname \"*.jpeg\" -o -iname \"*.png\" ) -exec rm {} +")) + ;;; Cucumber + cucumber {:doc "Run the cucumber suite (app must already be running). Opts forwarded to scripts/run_cucumber_tests.clj: --headless --query --features-dir --steps-dir --retry-failed --stop --url --help" + :task (System/exit (:exit (apply shell {:continue true} "bb" "scripts/run_cucumber_tests.clj" *command-line-args*)))} + + cucumber:ci {:doc "Cucumber run: compile the advanced CLJS build once, start isolated app server(s) (own port + DB each), run Chrome driver(s), then merge + tear down. DEFAULT is a visible browser: 1 shard, browser + server stay open until Ctrl-C. Pass --headless for the headless CI path: parallel sharding (default 2) and auto-close. Requires chromedriver on PATH. Opts: --headless (headless + parallel shards, auto-close), --shards N (default 2 with --headless; 1 in visible mode unless set), --feature F, --query, --features-dir, --serve-timeout, --db-prefix, --base-port, --skip-compile, --stop (halt at first failure; forces 1 shard unless --shards given)." + :task (System/exit (:exit (apply shell {:continue true} "bb" "scripts/cucumber_ci.clj" *command-line-args*)))} + ;;; Datomic -today (str (java.time.LocalDate/now)) diff --git a/behave-lib/Makefile b/behave-lib/Makefile index aecad94a7..a7ec800a4 100644 --- a/behave-lib/Makefile +++ b/behave-lib/Makefile @@ -15,7 +15,7 @@ all: clean install # NOTE Make sure to set WEBIDL in Enviornment Variables bind: - ${WEBIDL} include/idl/behave.idl include/js/glue + python ${WEBIDL} include/idl/behave.idl include/js/glue mv include/js/glue.cpp include/cpp/emscripten/glue.cpp compile: clean bind diff --git a/behave-lib/behave-mirror b/behave-lib/behave-mirror index 7bfd16422..29888c7ad 160000 --- a/behave-lib/behave-mirror +++ b/behave-lib/behave-mirror @@ -1 +1 @@ -Subproject commit 7bfd16422fcb2439af2f7adfd3ed1aae8277943d +Subproject commit 29888c7ad364aa18cfb340f4c25a8e395f24260f diff --git a/behave-lib/include/cpp/emscripten/glue.cpp b/behave-lib/include/cpp/emscripten/glue.cpp index ad0e262a4..8a8f9c24f 100644 --- a/behave-lib/include/cpp/emscripten/glue.cpp +++ b/behave-lib/include/cpp/emscripten/glue.cpp @@ -1,35 +1,34 @@ #include +#include -EM_JS_DEPS(webidl_binder, "$intArrayFromString"); +EM_JS_DEPS(webidl_binder, "$intArrayFromString,$UTF8ToString,$alignMemory,$addOnInit"); extern "C" { -// Not using size_t for array indices as the values used by the javascript code are signed. +// Define custom allocator functions that we can force export using +// EMSCRIPTEN_KEEPALIVE. This avoids all webidl users having to add +// malloc/free to -sEXPORTED_FUNCTIONS. +EMSCRIPTEN_KEEPALIVE void webidl_free(void* p) { free(p); } +EMSCRIPTEN_KEEPALIVE void* webidl_malloc(size_t len) { return malloc(len); } -EM_JS(void, array_bounds_check_error, (size_t idx, size_t size), { - throw 'Array index ' + idx + ' out of bounds: [0,' + size + ')'; -}); -void array_bounds_check(const int array_size, const int array_idx) { - if (array_idx < 0 || array_idx >= array_size) { - array_bounds_check_error(array_idx, array_size); - } -} +// Interface: VoidPtr -// VoidPtr void EMSCRIPTEN_KEEPALIVE emscripten_bind_VoidPtr___destroy___0(void** self) { delete self; } -// DoublePtr +// Interface: DoublePtr + void EMSCRIPTEN_KEEPALIVE emscripten_bind_DoublePtr___destroy___0(DoublePtr* self) { delete self; } -// BoolVector +// Interface: BoolVector + BoolVector* EMSCRIPTEN_KEEPALIVE emscripten_bind_BoolVector_BoolVector_0() { return new BoolVector(); @@ -59,7 +58,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_BoolVector___destroy___0(BoolVector* s delete self; } -// CharVector +// Interface: CharVector + CharVector* EMSCRIPTEN_KEEPALIVE emscripten_bind_CharVector_CharVector_0() { return new CharVector(); @@ -89,7 +89,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_CharVector___destroy___0(CharVector* s delete self; } -// IntVector +// Interface: IntVector + IntVector* EMSCRIPTEN_KEEPALIVE emscripten_bind_IntVector_IntVector_0() { return new IntVector(); @@ -119,7 +120,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_IntVector___destroy___0(IntVector* sel delete self; } -// DoubleVector +// Interface: DoubleVector + DoubleVector* EMSCRIPTEN_KEEPALIVE emscripten_bind_DoubleVector_DoubleVector_0() { return new DoubleVector(); @@ -149,7 +151,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_DoubleVector___destroy___0(DoubleVecto delete self; } -// SpeciesMasterTableRecordVector +// Interface: SpeciesMasterTableRecordVector + SpeciesMasterTableRecordVector* EMSCRIPTEN_KEEPALIVE emscripten_bind_SpeciesMasterTableRecordVector_SpeciesMasterTableRecordVector_0() { return new SpeciesMasterTableRecordVector(); @@ -179,245 +182,263 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SpeciesMasterTableRecordVector___destr delete self; } -// AreaUnits +// Interface: AreaUnits + -double EMSCRIPTEN_KEEPALIVE emscripten_bind_AreaUnits_toBaseUnits_2(AreaUnits* self, double value, AreaUnits_AreaUnitsEnum units) { - return self->toBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_AreaUnits_toBaseUnits_2(double value, AreaUnits_AreaUnitsEnum units) { + return AreaUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_AreaUnits_fromBaseUnits_2(AreaUnits* self, double value, AreaUnits_AreaUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_AreaUnits_fromBaseUnits_2(double value, AreaUnits_AreaUnitsEnum units) { + return AreaUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_AreaUnits___destroy___0(AreaUnits* self) { delete self; } -// BasalAreaUnits +// Interface: BasalAreaUnits + -double EMSCRIPTEN_KEEPALIVE emscripten_bind_BasalAreaUnits_toBaseUnits_2(BasalAreaUnits* self, double value, BasalAreaUnits_BasalAreaUnitsEnum units) { - return self->toBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_BasalAreaUnits_toBaseUnits_2(double value, BasalAreaUnits_BasalAreaUnitsEnum units) { + return BasalAreaUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_BasalAreaUnits_fromBaseUnits_2(BasalAreaUnits* self, double value, BasalAreaUnits_BasalAreaUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_BasalAreaUnits_fromBaseUnits_2(double value, BasalAreaUnits_BasalAreaUnitsEnum units) { + return BasalAreaUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_BasalAreaUnits___destroy___0(BasalAreaUnits* self) { delete self; } -// FractionUnits +// Interface: FractionUnits -double EMSCRIPTEN_KEEPALIVE emscripten_bind_FractionUnits_toBaseUnits_2(FractionUnits* self, double value, FractionUnits_FractionUnitsEnum units) { - return self->toBaseUnits(value, units); + +double EMSCRIPTEN_KEEPALIVE emscripten_bind_FractionUnits_toBaseUnits_2(double value, FractionUnits_FractionUnitsEnum units) { + return FractionUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_FractionUnits_fromBaseUnits_2(FractionUnits* self, double value, FractionUnits_FractionUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_FractionUnits_fromBaseUnits_2(double value, FractionUnits_FractionUnitsEnum units) { + return FractionUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_FractionUnits___destroy___0(FractionUnits* self) { delete self; } -// LengthUnits +// Interface: LengthUnits + -double EMSCRIPTEN_KEEPALIVE emscripten_bind_LengthUnits_toBaseUnits_2(LengthUnits* self, double value, LengthUnits_LengthUnitsEnum units) { - return self->toBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_LengthUnits_toBaseUnits_2(double value, LengthUnits_LengthUnitsEnum units) { + return LengthUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_LengthUnits_fromBaseUnits_2(LengthUnits* self, double value, LengthUnits_LengthUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_LengthUnits_fromBaseUnits_2(double value, LengthUnits_LengthUnitsEnum units) { + return LengthUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_LengthUnits___destroy___0(LengthUnits* self) { delete self; } -// LoadingUnits +// Interface: LoadingUnits + -double EMSCRIPTEN_KEEPALIVE emscripten_bind_LoadingUnits_toBaseUnits_2(LoadingUnits* self, double value, LoadingUnits_LoadingUnitsEnum units) { - return self->toBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_LoadingUnits_toBaseUnits_2(double value, LoadingUnits_LoadingUnitsEnum units) { + return LoadingUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_LoadingUnits_fromBaseUnits_2(LoadingUnits* self, double value, LoadingUnits_LoadingUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_LoadingUnits_fromBaseUnits_2(double value, LoadingUnits_LoadingUnitsEnum units) { + return LoadingUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_LoadingUnits___destroy___0(LoadingUnits* self) { delete self; } -// SurfaceAreaToVolumeUnits +// Interface: SurfaceAreaToVolumeUnits -double EMSCRIPTEN_KEEPALIVE emscripten_bind_SurfaceAreaToVolumeUnits_toBaseUnits_2(SurfaceAreaToVolumeUnits* self, double value, SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum units) { - return self->toBaseUnits(value, units); + +double EMSCRIPTEN_KEEPALIVE emscripten_bind_SurfaceAreaToVolumeUnits_toBaseUnits_2(double value, SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum units) { + return SurfaceAreaToVolumeUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_SurfaceAreaToVolumeUnits_fromBaseUnits_2(SurfaceAreaToVolumeUnits* self, double value, SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_SurfaceAreaToVolumeUnits_fromBaseUnits_2(double value, SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum units) { + return SurfaceAreaToVolumeUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_SurfaceAreaToVolumeUnits___destroy___0(SurfaceAreaToVolumeUnits* self) { delete self; } -// SpeedUnits +// Interface: SpeedUnits + -double EMSCRIPTEN_KEEPALIVE emscripten_bind_SpeedUnits_toBaseUnits_2(SpeedUnits* self, double value, SpeedUnits_SpeedUnitsEnum units) { - return self->toBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_SpeedUnits_toBaseUnits_2(double value, SpeedUnits_SpeedUnitsEnum units) { + return SpeedUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_SpeedUnits_fromBaseUnits_2(SpeedUnits* self, double value, SpeedUnits_SpeedUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_SpeedUnits_fromBaseUnits_2(double value, SpeedUnits_SpeedUnitsEnum units) { + return SpeedUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_SpeedUnits___destroy___0(SpeedUnits* self) { delete self; } -// PressureUnits +// Interface: PressureUnits + -double EMSCRIPTEN_KEEPALIVE emscripten_bind_PressureUnits_toBaseUnits_2(PressureUnits* self, double value, PressureUnits_PressureUnitsEnum units) { - return self->toBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_PressureUnits_toBaseUnits_2(double value, PressureUnits_PressureUnitsEnum units) { + return PressureUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_PressureUnits_fromBaseUnits_2(PressureUnits* self, double value, PressureUnits_PressureUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_PressureUnits_fromBaseUnits_2(double value, PressureUnits_PressureUnitsEnum units) { + return PressureUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_PressureUnits___destroy___0(PressureUnits* self) { delete self; } -// SlopeUnits +// Interface: SlopeUnits -double EMSCRIPTEN_KEEPALIVE emscripten_bind_SlopeUnits_toBaseUnits_2(SlopeUnits* self, double value, SlopeUnits_SlopeUnitsEnum units) { - return self->toBaseUnits(value, units); + +double EMSCRIPTEN_KEEPALIVE emscripten_bind_SlopeUnits_toBaseUnits_2(double value, SlopeUnits_SlopeUnitsEnum units) { + return SlopeUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_SlopeUnits_fromBaseUnits_2(SlopeUnits* self, double value, SlopeUnits_SlopeUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_SlopeUnits_fromBaseUnits_2(double value, SlopeUnits_SlopeUnitsEnum units) { + return SlopeUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_SlopeUnits___destroy___0(SlopeUnits* self) { delete self; } -// DensityUnits +// Interface: DensityUnits + -double EMSCRIPTEN_KEEPALIVE emscripten_bind_DensityUnits_toBaseUnits_2(DensityUnits* self, double value, DensityUnits_DensityUnitsEnum units) { - return self->toBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_DensityUnits_toBaseUnits_2(double value, DensityUnits_DensityUnitsEnum units) { + return DensityUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_DensityUnits_fromBaseUnits_2(DensityUnits* self, double value, DensityUnits_DensityUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_DensityUnits_fromBaseUnits_2(double value, DensityUnits_DensityUnitsEnum units) { + return DensityUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_DensityUnits___destroy___0(DensityUnits* self) { delete self; } -// HeatOfCombustionUnits +// Interface: HeatOfCombustionUnits + -double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatOfCombustionUnits_toBaseUnits_2(HeatOfCombustionUnits* self, double value, HeatOfCombustionUnits_HeatOfCombustionUnitsEnum units) { - return self->toBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatOfCombustionUnits_toBaseUnits_2(double value, HeatOfCombustionUnits_HeatOfCombustionUnitsEnum units) { + return HeatOfCombustionUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatOfCombustionUnits_fromBaseUnits_2(HeatOfCombustionUnits* self, double value, HeatOfCombustionUnits_HeatOfCombustionUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatOfCombustionUnits_fromBaseUnits_2(double value, HeatOfCombustionUnits_HeatOfCombustionUnitsEnum units) { + return HeatOfCombustionUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatOfCombustionUnits___destroy___0(HeatOfCombustionUnits* self) { delete self; } -// HeatSinkUnits +// Interface: HeatSinkUnits -double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatSinkUnits_toBaseUnits_2(HeatSinkUnits* self, double value, HeatSinkUnits_HeatSinkUnitsEnum units) { - return self->toBaseUnits(value, units); + +double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatSinkUnits_toBaseUnits_2(double value, HeatSinkUnits_HeatSinkUnitsEnum units) { + return HeatSinkUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatSinkUnits_fromBaseUnits_2(HeatSinkUnits* self, double value, HeatSinkUnits_HeatSinkUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatSinkUnits_fromBaseUnits_2(double value, HeatSinkUnits_HeatSinkUnitsEnum units) { + return HeatSinkUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatSinkUnits___destroy___0(HeatSinkUnits* self) { delete self; } -// HeatPerUnitAreaUnits +// Interface: HeatPerUnitAreaUnits + -double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatPerUnitAreaUnits_toBaseUnits_2(HeatPerUnitAreaUnits* self, double value, HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum units) { - return self->toBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatPerUnitAreaUnits_toBaseUnits_2(double value, HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum units) { + return HeatPerUnitAreaUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatPerUnitAreaUnits_fromBaseUnits_2(HeatPerUnitAreaUnits* self, double value, HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatPerUnitAreaUnits_fromBaseUnits_2(double value, HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum units) { + return HeatPerUnitAreaUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatPerUnitAreaUnits___destroy___0(HeatPerUnitAreaUnits* self) { delete self; } -// HeatSourceAndReactionIntensityUnits +// Interface: HeatSourceAndReactionIntensityUnits + -double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatSourceAndReactionIntensityUnits_toBaseUnits_2(HeatSourceAndReactionIntensityUnits* self, double value, HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum units) { - return self->toBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatSourceAndReactionIntensityUnits_toBaseUnits_2(double value, HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum units) { + return HeatSourceAndReactionIntensityUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatSourceAndReactionIntensityUnits_fromBaseUnits_2(HeatSourceAndReactionIntensityUnits* self, double value, HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatSourceAndReactionIntensityUnits_fromBaseUnits_2(double value, HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum units) { + return HeatSourceAndReactionIntensityUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_HeatSourceAndReactionIntensityUnits___destroy___0(HeatSourceAndReactionIntensityUnits* self) { delete self; } -// FirelineIntensityUnits +// Interface: FirelineIntensityUnits -double EMSCRIPTEN_KEEPALIVE emscripten_bind_FirelineIntensityUnits_toBaseUnits_2(FirelineIntensityUnits* self, double value, FirelineIntensityUnits_FirelineIntensityUnitsEnum units) { - return self->toBaseUnits(value, units); + +double EMSCRIPTEN_KEEPALIVE emscripten_bind_FirelineIntensityUnits_toBaseUnits_2(double value, FirelineIntensityUnits_FirelineIntensityUnitsEnum units) { + return FirelineIntensityUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_FirelineIntensityUnits_fromBaseUnits_2(FirelineIntensityUnits* self, double value, FirelineIntensityUnits_FirelineIntensityUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_FirelineIntensityUnits_fromBaseUnits_2(double value, FirelineIntensityUnits_FirelineIntensityUnitsEnum units) { + return FirelineIntensityUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_FirelineIntensityUnits___destroy___0(FirelineIntensityUnits* self) { delete self; } -// TemperatureUnits +// Interface: TemperatureUnits + -double EMSCRIPTEN_KEEPALIVE emscripten_bind_TemperatureUnits_toBaseUnits_2(TemperatureUnits* self, double value, TemperatureUnits_TemperatureUnitsEnum units) { - return self->toBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_TemperatureUnits_toBaseUnits_2(double value, TemperatureUnits_TemperatureUnitsEnum units) { + return TemperatureUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_TemperatureUnits_fromBaseUnits_2(TemperatureUnits* self, double value, TemperatureUnits_TemperatureUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_TemperatureUnits_fromBaseUnits_2(double value, TemperatureUnits_TemperatureUnitsEnum units) { + return TemperatureUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_TemperatureUnits___destroy___0(TemperatureUnits* self) { delete self; } -// TimeUnits +// Interface: TimeUnits + -double EMSCRIPTEN_KEEPALIVE emscripten_bind_TimeUnits_toBaseUnits_2(TimeUnits* self, double value, TimeUnits_TimeUnitsEnum units) { - return self->toBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_TimeUnits_toBaseUnits_2(double value, TimeUnits_TimeUnitsEnum units) { + return TimeUnits::toBaseUnits(value, units); } -double EMSCRIPTEN_KEEPALIVE emscripten_bind_TimeUnits_fromBaseUnits_2(TimeUnits* self, double value, TimeUnits_TimeUnitsEnum units) { - return self->fromBaseUnits(value, units); +double EMSCRIPTEN_KEEPALIVE emscripten_bind_TimeUnits_fromBaseUnits_2(double value, TimeUnits_TimeUnitsEnum units) { + return TimeUnits::fromBaseUnits(value, units); } void EMSCRIPTEN_KEEPALIVE emscripten_bind_TimeUnits___destroy___0(TimeUnits* self) { delete self; } -// FireSize +// Interface: FireSize + double EMSCRIPTEN_KEEPALIVE emscripten_bind_FireSize_getBackingSpreadRate_1(FireSize* self, SpeedUnits_SpeedUnitsEnum spreadRateUnits) { return self->getBackingSpreadRate(spreadRateUnits); @@ -475,7 +496,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_FireSize___destroy___0(FireSize* self) delete self; } -// SIGContainAdapter +// Interface: SIGContainAdapter + SIGContainAdapter* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGContainAdapter_SIGContainAdapter_0() { return new SIGContainAdapter(); @@ -486,22 +508,22 @@ ContainStatus_ContainStatusEnum EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGContainA } DoubleVector* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGContainAdapter_getFirePerimeterX_0(SIGContainAdapter* self) { - static DoubleVector temp; + static thread_local DoubleVector temp; return (temp = self->getFirePerimeterX(), &temp); } DoubleVector* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGContainAdapter_getFirePerimeterY_0(SIGContainAdapter* self) { - static DoubleVector temp; + static thread_local DoubleVector temp; return (temp = self->getFirePerimeterY(), &temp); } DoubleVector* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGContainAdapter_getOptimizedContainProductionRates_0(SIGContainAdapter* self) { - static DoubleVector temp; + static thread_local DoubleVector temp; return (temp = self->getOptimizedContainProductionRates(), &temp); } DoubleVector* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGContainAdapter_getOptimizedContainAreas_0(SIGContainAdapter* self) { - static DoubleVector temp; + static thread_local DoubleVector temp; return (temp = self->getOptimizedContainAreas(), &temp); } @@ -673,7 +695,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGContainAdapter___destroy___0(SIGCon delete self; } -// SIGIgnite +// Interface: SIGIgnite + SIGIgnite* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGIgnite_SIGIgnite_0() { return new SIGIgnite(); @@ -767,7 +790,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGIgnite___destroy___0(SIGIgnite* sel delete self; } -// SIGMoistureScenarios +// Interface: SIGMoistureScenarios + SIGMoistureScenarios* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGMoistureScenarios_SIGMoistureScenarios_0() { return new SIGMoistureScenarios(); @@ -845,7 +869,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGMoistureScenarios___destroy___0(SIG delete self; } -// SIGSpot +// Interface: SIGSpot + SIGSpot* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGSpot_SIGSpot_0() { return new SIGSpot(); @@ -1071,7 +1096,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGSpot___destroy___0(SIGSpot* self) { delete self; } -// SIGFuelModels +// Interface: SIGFuelModels + SIGFuelModels* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGFuelModels_SIGFuelModels_0() { return new SIGFuelModels(); @@ -1169,7 +1195,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGFuelModels___destroy___0(SIGFuelMod delete self; } -// SIGSurface +// Interface: SIGSurface + SIGSurface* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGSurface_SIGSurface_1(SIGFuelModels* fuelModels) { return new SIGSurface(*fuelModels); @@ -2047,7 +2074,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGSurface___destroy___0(SIGSurface* s delete self; } -// PalmettoGallberry +// Interface: PalmettoGallberry + PalmettoGallberry* EMSCRIPTEN_KEEPALIVE emscripten_bind_PalmettoGallberry_PalmettoGallberry_0() { return new PalmettoGallberry(); @@ -2137,7 +2165,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_PalmettoGallberry___destroy___0(Palmet delete self; } -// WesternAspen +// Interface: WesternAspen + WesternAspen* EMSCRIPTEN_KEEPALIVE emscripten_bind_WesternAspen_WesternAspen_0() { return new WesternAspen(); @@ -2207,7 +2236,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_WesternAspen___destroy___0(WesternAspe delete self; } -// SIGCrown +// Interface: SIGCrown + SIGCrown* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGCrown_SIGCrown_1(SIGFuelModels* fuelModels) { return new SIGCrown(*fuelModels); @@ -2657,7 +2687,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGCrown___destroy___0(SIGCrown* self) delete self; } -// SpeciesMasterTableRecord +// Interface: SpeciesMasterTableRecord + SpeciesMasterTableRecord* EMSCRIPTEN_KEEPALIVE emscripten_bind_SpeciesMasterTableRecord_SpeciesMasterTableRecord_0() { return new SpeciesMasterTableRecord(); @@ -2671,7 +2702,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SpeciesMasterTableRecord___destroy___0 delete self; } -// SpeciesMasterTable +// Interface: SpeciesMasterTable + SpeciesMasterTable* EMSCRIPTEN_KEEPALIVE emscripten_bind_SpeciesMasterTable_SpeciesMasterTable_0() { return new SpeciesMasterTable(); @@ -2697,7 +2729,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SpeciesMasterTable___destroy___0(Speci delete self; } -// SIGMortality +// Interface: SIGMortality + SIGMortality* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGMortality_SIGMortality_1(SpeciesMasterTable* speciesMasterTable) { return new SIGMortality(*speciesMasterTable); @@ -3103,7 +3136,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGMortality___destroy___0(SIGMortalit delete self; } -// WindSpeedUtility +// Interface: WindSpeedUtility + WindSpeedUtility* EMSCRIPTEN_KEEPALIVE emscripten_bind_WindSpeedUtility_WindSpeedUtility_0() { return new WindSpeedUtility(); @@ -3121,7 +3155,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_WindSpeedUtility___destroy___0(WindSpe delete self; } -// SIGFineDeadFuelMoistureTool +// Interface: SIGFineDeadFuelMoistureTool + SIGFineDeadFuelMoistureTool* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGFineDeadFuelMoistureTool_SIGFineDeadFuelMoistureTool_0() { return new SIGFineDeadFuelMoistureTool(); @@ -3215,7 +3250,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGFineDeadFuelMoistureTool___destroy_ delete self; } -// SIGSlopeTool +// Interface: SIGSlopeTool + SIGSlopeTool* EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGSlopeTool_SIGSlopeTool_0() { return new SIGSlopeTool(); @@ -3365,7 +3401,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SIGSlopeTool___destroy___0(SIGSlopeToo delete self; } -// VaporPressureDeficitCalculator +// Interface: VaporPressureDeficitCalculator + VaporPressureDeficitCalculator* EMSCRIPTEN_KEEPALIVE emscripten_bind_VaporPressureDeficitCalculator_VaporPressureDeficitCalculator_0() { return new VaporPressureDeficitCalculator(); @@ -3391,7 +3428,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_VaporPressureDeficitCalculator___destr delete self; } -// RelativeHumidityTool +// Interface: RelativeHumidityTool + RelativeHumidityTool* EMSCRIPTEN_KEEPALIVE emscripten_bind_RelativeHumidityTool_RelativeHumidityTool_0() { return new RelativeHumidityTool(); @@ -3441,7 +3479,8 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_RelativeHumidityTool___destroy___0(Rel delete self; } -// SafeSeparationDistanceCalculator +// Interface: SafeSeparationDistanceCalculator + SafeSeparationDistanceCalculator* EMSCRIPTEN_KEEPALIVE emscripten_bind_SafeSeparationDistanceCalculator_SafeSeparationDistanceCalculator_0() { return new SafeSeparationDistanceCalculator(); @@ -3499,7 +3538,7 @@ void EMSCRIPTEN_KEEPALIVE emscripten_bind_SafeSeparationDistanceCalculator___des delete self; } -// AreaUnits_AreaUnitsEnum +// $AreaUnits_AreaUnitsEnum AreaUnits_AreaUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_AreaUnits_AreaUnitsEnum_SquareFeet() { return AreaUnits::SquareFeet; } @@ -3519,7 +3558,7 @@ AreaUnits_AreaUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_AreaUnits_AreaUnits return AreaUnits::SquareKilometers; } -// BasalAreaUnits_BasalAreaUnitsEnum +// $BasalAreaUnits_BasalAreaUnitsEnum BasalAreaUnits_BasalAreaUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_BasalAreaUnits_BasalAreaUnitsEnum_SquareFeetPerAcre() { return BasalAreaUnits::SquareFeetPerAcre; } @@ -3527,7 +3566,7 @@ BasalAreaUnits_BasalAreaUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_BasalArea return BasalAreaUnits::SquareMetersPerHectare; } -// FractionUnits_FractionUnitsEnum +// $FractionUnits_FractionUnitsEnum FractionUnits_FractionUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FractionUnits_FractionUnitsEnum_Fraction() { return FractionUnits::Fraction; } @@ -3535,7 +3574,7 @@ FractionUnits_FractionUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FractionUni return FractionUnits::Percent; } -// LengthUnits_LengthUnitsEnum +// $LengthUnits_LengthUnitsEnum LengthUnits_LengthUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_LengthUnits_LengthUnitsEnum_Feet() { return LengthUnits::Feet; } @@ -3561,7 +3600,7 @@ LengthUnits_LengthUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_LengthUnits_Len return LengthUnits::Kilometers; } -// LoadingUnits_LoadingUnitsEnum +// $LoadingUnits_LoadingUnitsEnum LoadingUnits_LoadingUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_LoadingUnits_LoadingUnitsEnum_PoundsPerSquareFoot() { return LoadingUnits::PoundsPerSquareFoot; } @@ -3575,7 +3614,7 @@ LoadingUnits_LoadingUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_LoadingUnits_ return LoadingUnits::KilogramsPerSquareMeter; } -// SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum +// $SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareFeetOverCubicFeet() { return SurfaceAreaToVolumeUnits::SquareFeetOverCubicFeet; } @@ -3589,7 +3628,7 @@ SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum EMSCRIPTEN_KEEPALIVE emscr return SurfaceAreaToVolumeUnits::SquareCentimetersOverCubicCentimeters; } -// SpeedUnits_SpeedUnitsEnum +// $SpeedUnits_SpeedUnitsEnum SpeedUnits_SpeedUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpeedUnits_SpeedUnitsEnum_FeetPerMinute() { return SpeedUnits::FeetPerMinute; } @@ -3602,14 +3641,20 @@ SpeedUnits_SpeedUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpeedUnits_SpeedU SpeedUnits_SpeedUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpeedUnits_SpeedUnitsEnum_MetersPerMinute() { return SpeedUnits::MetersPerMinute; } +SpeedUnits_SpeedUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpeedUnits_SpeedUnitsEnum_MetersPerHour() { + return SpeedUnits::MetersPerHour; +} SpeedUnits_SpeedUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpeedUnits_SpeedUnitsEnum_MilesPerHour() { return SpeedUnits::MilesPerHour; } SpeedUnits_SpeedUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpeedUnits_SpeedUnitsEnum_KilometersPerHour() { return SpeedUnits::KilometersPerHour; } +SpeedUnits_SpeedUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpeedUnits_SpeedUnitsEnum_FurlongsPerFortnight() { + return SpeedUnits::FurlongsPerFortnight; +} -// PressureUnits_PressureUnitsEnum +// $PressureUnits_PressureUnitsEnum PressureUnits_PressureUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_PressureUnits_PressureUnitsEnum_Pascal() { return PressureUnits::Pascal; } @@ -3638,7 +3683,7 @@ PressureUnits_PressureUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_PressureUni return PressureUnits::PoundPerSquareInch; } -// SlopeUnits_SlopeUnitsEnum +// $SlopeUnits_SlopeUnitsEnum SlopeUnits_SlopeUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SlopeUnits_SlopeUnitsEnum_Degrees() { return SlopeUnits::Degrees; } @@ -3646,7 +3691,7 @@ SlopeUnits_SlopeUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SlopeUnits_SlopeU return SlopeUnits::Percent; } -// DensityUnits_DensityUnitsEnum +// $DensityUnits_DensityUnitsEnum DensityUnits_DensityUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_DensityUnits_DensityUnitsEnum_PoundsPerCubicFoot() { return DensityUnits::PoundsPerCubicFoot; } @@ -3654,7 +3699,7 @@ DensityUnits_DensityUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_DensityUnits_ return DensityUnits::KilogramsPerCubicMeter; } -// HeatOfCombustionUnits_HeatOfCombustionUnitsEnum +// $HeatOfCombustionUnits_HeatOfCombustionUnitsEnum HeatOfCombustionUnits_HeatOfCombustionUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_HeatOfCombustionUnits_HeatOfCombustionUnitsEnum_BtusPerPound() { return HeatOfCombustionUnits::BtusPerPound; } @@ -3662,7 +3707,7 @@ HeatOfCombustionUnits_HeatOfCombustionUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_ return HeatOfCombustionUnits::KilojoulesPerKilogram; } -// HeatSinkUnits_HeatSinkUnitsEnum +// $HeatSinkUnits_HeatSinkUnitsEnum HeatSinkUnits_HeatSinkUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_HeatSinkUnits_HeatSinkUnitsEnum_BtusPerCubicFoot() { return HeatSinkUnits::BtusPerCubicFoot; } @@ -3670,7 +3715,7 @@ HeatSinkUnits_HeatSinkUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_HeatSinkUni return HeatSinkUnits::KilojoulesPerCubicMeter; } -// HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum +// $HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum_BtusPerSquareFoot() { return HeatPerUnitAreaUnits::BtusPerSquareFoot; } @@ -3681,7 +3726,7 @@ HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_en return HeatPerUnitAreaUnits::KilowattSecondsPerSquareMeter; } -// HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum +// $HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_BtusPerSquareFootPerMinute() { return HeatSourceAndReactionIntensityUnits::BtusPerSquareFootPerMinute; } @@ -3698,7 +3743,7 @@ HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum EMSC return HeatSourceAndReactionIntensityUnits::KilowattsPerSquareMeter; } -// FirelineIntensityUnits_FirelineIntensityUnitsEnum +// $FirelineIntensityUnits_FirelineIntensityUnitsEnum FirelineIntensityUnits_FirelineIntensityUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_BtusPerFootPerSecond() { return FirelineIntensityUnits::BtusPerFootPerSecond; } @@ -3715,7 +3760,7 @@ FirelineIntensityUnits_FirelineIntensityUnitsEnum EMSCRIPTEN_KEEPALIVE emscripte return FirelineIntensityUnits::KilowattsPerMeter; } -// TemperatureUnits_TemperatureUnitsEnum +// $TemperatureUnits_TemperatureUnitsEnum TemperatureUnits_TemperatureUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_TemperatureUnits_TemperatureUnitsEnum_Fahrenheit() { return TemperatureUnits::Fahrenheit; } @@ -3726,7 +3771,7 @@ TemperatureUnits_TemperatureUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_Tempe return TemperatureUnits::Kelvin; } -// TimeUnits_TimeUnitsEnum +// $TimeUnits_TimeUnitsEnum TimeUnits_TimeUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_TimeUnits_TimeUnitsEnum_Minutes() { return TimeUnits::Minutes; } @@ -3736,8 +3781,14 @@ TimeUnits_TimeUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_TimeUnits_TimeUnits TimeUnits_TimeUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_TimeUnits_TimeUnitsEnum_Hours() { return TimeUnits::Hours; } +TimeUnits_TimeUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_TimeUnits_TimeUnitsEnum_Days() { + return TimeUnits::Days; +} +TimeUnits_TimeUnitsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_TimeUnits_TimeUnitsEnum_Years() { + return TimeUnits::Years; +} -// ContainTactic_ContainTacticEnum +// $ContainTactic_ContainTacticEnum ContainTactic_ContainTacticEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_ContainTactic_ContainTacticEnum_HeadAttack() { return ContainTactic::HeadAttack; } @@ -3745,7 +3796,7 @@ ContainTactic_ContainTacticEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_ContainTact return ContainTactic::RearAttack; } -// ContainStatus_ContainStatusEnum +// $ContainStatus_ContainStatusEnum ContainStatus_ContainStatusEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_ContainStatus_ContainStatusEnum_Unreported() { return ContainStatus::Unreported; } @@ -3774,7 +3825,7 @@ ContainStatus_ContainStatusEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_ContainStat return ContainStatus::TimeLimitExceeded; } -// ContainFlank_ContainFlankEnum +// $ContainFlank_ContainFlankEnum ContainFlank_ContainFlankEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_ContainFlank_ContainFlankEnum_LeftFlank() { return ContainFlank::LeftFlank; } @@ -3788,7 +3839,7 @@ ContainFlank_ContainFlankEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_ContainFlank_ return ContainFlank::NeitherFlank; } -// ContainMode +// $ContainMode ContainMode EMSCRIPTEN_KEEPALIVE emscripten_enum_ContainMode_Default() { return ContainMode::Default; } @@ -3796,7 +3847,7 @@ ContainMode EMSCRIPTEN_KEEPALIVE emscripten_enum_ContainMode_ComputeWithOptimalR return ContainMode::ComputeWithOptimalResource; } -// IgnitionFuelBedType_IgnitionFuelBedTypeEnum +// $IgnitionFuelBedType_IgnitionFuelBedTypeEnum IgnitionFuelBedType_IgnitionFuelBedTypeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PonderosaPineLitter() { return IgnitionFuelBedType::PonderosaPineLitter; } @@ -3822,7 +3873,7 @@ IgnitionFuelBedType_IgnitionFuelBedTypeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum return IgnitionFuelBedType::PeatMoss; } -// LightningCharge_LightningChargeEnum +// $LightningCharge_LightningChargeEnum LightningCharge_LightningChargeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_LightningCharge_LightningChargeEnum_Negative() { return LightningCharge::Negative; } @@ -3833,7 +3884,7 @@ LightningCharge_LightningChargeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_Lightni return LightningCharge::Unknown; } -// SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum +// $SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum_CLOSED() { return SpotDownWindCanopyMode::CLOSED; } @@ -3841,7 +3892,7 @@ SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum EMSCRIPTEN_KEEPALIVE emscripte return SpotDownWindCanopyMode::OPEN; } -// SpotTreeSpecies_SpotTreeSpeciesEnum +// $SpotTreeSpecies_SpotTreeSpeciesEnum SpotTreeSpecies_SpotTreeSpeciesEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_ENGELMANN_SPRUCE() { return SpotTreeSpecies::ENGELMANN_SPRUCE; } @@ -3885,7 +3936,7 @@ SpotTreeSpecies_SpotTreeSpeciesEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpotTre return SpotTreeSpecies::LOBLOLLY_PINE; } -// SpotFireLocation_SpotFireLocationEnum +// $SpotFireLocation_SpotFireLocationEnum SpotFireLocation_SpotFireLocationEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpotFireLocation_SpotFireLocationEnum_MIDSLOPE_WINDWARD() { return SpotFireLocation::MIDSLOPE_WINDWARD; } @@ -3899,7 +3950,7 @@ SpotFireLocation_SpotFireLocationEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpotF return SpotFireLocation::RIDGE_TOP; } -// FuelLifeState_FuelLifeStateEnum +// $FuelLifeState_FuelLifeStateEnum FuelLifeState_FuelLifeStateEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FuelLifeState_FuelLifeStateEnum_Dead() { return FuelLifeState::Dead; } @@ -3907,7 +3958,7 @@ FuelLifeState_FuelLifeStateEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FuelLifeSta return FuelLifeState::Live; } -// FuelConstantsEnum_FuelConstantsEnum +// $FuelConstantsEnum_FuelConstantsEnum FuelConstantsEnum_FuelConstantsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxLifeStates() { return FuelConstants::MaxLifeStates; } @@ -3927,7 +3978,7 @@ FuelConstantsEnum_FuelConstantsEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FuelCon return FuelConstants::MaxFuelModels; } -// AspenFireSeverity_AspenFireSeverityEnum +// $AspenFireSeverity_AspenFireSeverityEnum AspenFireSeverity_AspenFireSeverityEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_AspenFireSeverity_AspenFireSeverityEnum_Low() { return AspenFireSeverity::Low; } @@ -3935,7 +3986,7 @@ AspenFireSeverity_AspenFireSeverityEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_Asp return AspenFireSeverity::Moderate; } -// ChaparralFuelType_ChaparralFuelTypeEnum +// $ChaparralFuelType_ChaparralFuelTypeEnum ChaparralFuelType_ChaparralFuelTypeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_ChaparralFuelType_ChaparralFuelTypeEnum_NotSet() { return ChaparralFuelType::NotSet; } @@ -3946,7 +3997,7 @@ ChaparralFuelType_ChaparralFuelTypeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_Cha return ChaparralFuelType::MixedBrush; } -// ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum +// $ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum_DirectFuelLoad() { return ChaparralFuelLoadInputMode::DirectFuelLoad; } @@ -3954,7 +4005,7 @@ ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum EMSCRIPTEN_KEEPALIVE e return ChaparralFuelLoadInputMode::FuelLoadFromDepthAndChaparralType; } -// MoistureInputMode_MoistureInputModeEnum +// $MoistureInputMode_MoistureInputModeEnum MoistureInputMode_MoistureInputModeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_MoistureInputMode_MoistureInputModeEnum_BySizeClass() { return MoistureInputMode::BySizeClass; } @@ -3971,7 +4022,7 @@ MoistureInputMode_MoistureInputModeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_Moi return MoistureInputMode::MoistureScenario; } -// MoistureClassInput_MoistureClassInputEnum +// $MoistureClassInput_MoistureClassInputEnum MoistureClassInput_MoistureClassInputEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_MoistureClassInput_MoistureClassInputEnum_OneHour() { return MoistureClassInput::OneHour; } @@ -3994,7 +4045,7 @@ MoistureClassInput_MoistureClassInputEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_M return MoistureClassInput::LiveAggregate; } -// SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum +// $SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum_FromIgnitionPoint() { return SurfaceFireSpreadDirectionMode::FromIgnitionPoint; } @@ -4002,7 +4053,7 @@ SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum EMSCRIPTEN_KEE return SurfaceFireSpreadDirectionMode::FromPerimeter; } -// TwoFuelModelsMethod_TwoFuelModelsMethodEnum +// $TwoFuelModelsMethod_TwoFuelModelsMethodEnum TwoFuelModelsMethod_TwoFuelModelsMethodEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_NoMethod() { return TwoFuelModelsMethod::NoMethod; } @@ -4016,7 +4067,7 @@ TwoFuelModelsMethod_TwoFuelModelsMethodEnum EMSCRIPTEN_KEEPALIVE emscripten_enum return TwoFuelModelsMethod::TwoDimensional; } -// WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum +// $WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum_Unsheltered() { return WindAdjustmentFactorShelterMethod::Unsheltered; } @@ -4024,7 +4075,7 @@ WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum EMSCRIPT return WindAdjustmentFactorShelterMethod::Sheltered; } -// WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum +// $WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum_UserInput() { return WindAdjustmentFactorCalculationMethod::UserInput; } @@ -4035,7 +4086,7 @@ WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum return WindAdjustmentFactorCalculationMethod::DontUseCrownRatio; } -// WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum +// $WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum_RelativeToUpslope() { return WindAndSpreadOrientationMode::RelativeToUpslope; } @@ -4043,7 +4094,7 @@ WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum EMSCRIPTEN_KEEPALI return WindAndSpreadOrientationMode::RelativeToNorth; } -// WindHeightInputMode_WindHeightInputModeEnum +// $WindHeightInputMode_WindHeightInputModeEnum WindHeightInputMode_WindHeightInputModeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_WindHeightInputMode_WindHeightInputModeEnum_DirectMidflame() { return WindHeightInputMode::DirectMidflame; } @@ -4054,7 +4105,7 @@ WindHeightInputMode_WindHeightInputModeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum return WindHeightInputMode::TenMeter; } -// WindUpslopeAlignmentMode +// $WindUpslopeAlignmentMode WindUpslopeAlignmentMode EMSCRIPTEN_KEEPALIVE emscripten_enum_WindUpslopeAlignmentMode_NotAligned() { return WindUpslopeAlignmentMode::NotAligned; } @@ -4062,7 +4113,7 @@ WindUpslopeAlignmentMode EMSCRIPTEN_KEEPALIVE emscripten_enum_WindUpslopeAlignme return WindUpslopeAlignmentMode::Aligned; } -// SurfaceRunInDirectionOf +// $SurfaceRunInDirectionOf SurfaceRunInDirectionOf EMSCRIPTEN_KEEPALIVE emscripten_enum_SurfaceRunInDirectionOf_MaxSpread() { return SurfaceRunInDirectionOf::MaxSpread; } @@ -4073,7 +4124,7 @@ SurfaceRunInDirectionOf EMSCRIPTEN_KEEPALIVE emscripten_enum_SurfaceRunInDirecti return SurfaceRunInDirectionOf::HeadingBackingFlanking; } -// FireType_FireTypeEnum +// $FireType_FireTypeEnum FireType_FireTypeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FireType_FireTypeEnum_Surface() { return FireType::Surface; } @@ -4087,7 +4138,7 @@ FireType_FireTypeEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FireType_FireTypeEnum return FireType::Crowning; } -// BeetleDamage +// $BeetleDamage BeetleDamage EMSCRIPTEN_KEEPALIVE emscripten_enum_BeetleDamage_not_set() { return BeetleDamage::not_set; } @@ -4098,7 +4149,7 @@ BeetleDamage EMSCRIPTEN_KEEPALIVE emscripten_enum_BeetleDamage_yes() { return BeetleDamage::yes; } -// CrownFireCalculationMethod +// $CrownFireCalculationMethod CrownFireCalculationMethod EMSCRIPTEN_KEEPALIVE emscripten_enum_CrownFireCalculationMethod_rothermel() { return CrownFireCalculationMethod::rothermel; } @@ -4106,7 +4157,7 @@ CrownFireCalculationMethod EMSCRIPTEN_KEEPALIVE emscripten_enum_CrownFireCalcula return CrownFireCalculationMethod::scott_and_reinhardt; } -// CrownDamageEquationCode +// $CrownDamageEquationCode CrownDamageEquationCode EMSCRIPTEN_KEEPALIVE emscripten_enum_CrownDamageEquationCode_not_set() { return CrownDamageEquationCode::not_set; } @@ -4144,7 +4195,7 @@ CrownDamageEquationCode EMSCRIPTEN_KEEPALIVE emscripten_enum_CrownDamageEquation return CrownDamageEquationCode::douglas_fir; } -// CrownDamageType +// $CrownDamageType CrownDamageType EMSCRIPTEN_KEEPALIVE emscripten_enum_CrownDamageType_not_set() { return CrownDamageType::not_set; } @@ -4158,7 +4209,7 @@ CrownDamageType EMSCRIPTEN_KEEPALIVE emscripten_enum_CrownDamageType_crown_kill( return CrownDamageType::crown_kill; } -// EquationType +// $EquationType EquationType EMSCRIPTEN_KEEPALIVE emscripten_enum_EquationType_not_set() { return EquationType::not_set; } @@ -4172,7 +4223,7 @@ EquationType EMSCRIPTEN_KEEPALIVE emscripten_enum_EquationType_crown_damage() { return EquationType::crown_damage; } -// FireSeverity +// $FireSeverity FireSeverity EMSCRIPTEN_KEEPALIVE emscripten_enum_FireSeverity_not_set() { return FireSeverity::not_set; } @@ -4183,7 +4234,7 @@ FireSeverity EMSCRIPTEN_KEEPALIVE emscripten_enum_FireSeverity_low() { return FireSeverity::low; } -// FlameLengthOrScorchHeightSwitch +// $FlameLengthOrScorchHeightSwitch FlameLengthOrScorchHeightSwitch EMSCRIPTEN_KEEPALIVE emscripten_enum_FlameLengthOrScorchHeightSwitch_flame_length() { return FlameLengthOrScorchHeightSwitch::flame_length; } @@ -4191,7 +4242,7 @@ FlameLengthOrScorchHeightSwitch EMSCRIPTEN_KEEPALIVE emscripten_enum_FlameLength return FlameLengthOrScorchHeightSwitch::scorch_height; } -// GACC +// $GACC GACC EMSCRIPTEN_KEEPALIVE emscripten_enum_GACC_NotSet() { return GACC::NotSet; } @@ -4223,7 +4274,7 @@ GACC EMSCRIPTEN_KEEPALIVE emscripten_enum_GACC_Southwest() { return GACC::Southwest; } -// RequiredFieldNames +// $RequiredFieldNames RequiredFieldNames EMSCRIPTEN_KEEPALIVE emscripten_enum_RequiredFieldNames_region() { return RequiredFieldNames::region; } @@ -4267,7 +4318,7 @@ RequiredFieldNames EMSCRIPTEN_KEEPALIVE emscripten_enum_RequiredFieldNames_num_i return RequiredFieldNames::num_inputs; } -// FDFMToolAspectIndex_AspectIndexEnum +// $FDFMToolAspectIndex_AspectIndexEnum FDFMToolAspectIndex_AspectIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_NORTH() { return FDFMToolAspectIndex::NORTH; } @@ -4281,7 +4332,7 @@ FDFMToolAspectIndex_AspectIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMToo return FDFMToolAspectIndex::WEST; } -// FDFMToolDryBulbIndex_DryBulbIndexEnum +// $FDFMToolDryBulbIndex_DryBulbIndexEnum FDFMToolDryBulbIndex_DryBulbIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_TEN_TO_TWENTY_NINE_DEGREES_F() { return FDFMToolDryBulbIndex::TEN_TO_TWENTY_NINE_DEGREES_F; } @@ -4301,7 +4352,7 @@ FDFMToolDryBulbIndex_DryBulbIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMT return FDFMToolDryBulbIndex::GREATER_THAN_ONE_HUNDRED_NINE_DEGREES_F; } -// FDFMToolElevationIndex_ElevationIndexEnum +// $FDFMToolElevationIndex_ElevationIndexEnum FDFMToolElevationIndex_ElevationIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMToolElevationIndex_ElevationIndexEnum_BELOW_1000_TO_2000_FT() { return FDFMToolElevationIndex::BELOW_1000_TO_2000_FT; } @@ -4312,7 +4363,7 @@ FDFMToolElevationIndex_ElevationIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_F return FDFMToolElevationIndex::ABOVE_1000_TO_2000_FT; } -// FDFMToolMonthIndex_MonthIndexEnum +// $FDFMToolMonthIndex_MonthIndexEnum FDFMToolMonthIndex_MonthIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMToolMonthIndex_MonthIndexEnum_MAY_JUNE_JULY() { return FDFMToolMonthIndex::MAY_JUNE_JULY; } @@ -4323,7 +4374,7 @@ FDFMToolMonthIndex_MonthIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMToolM return FDFMToolMonthIndex::NOV_DEC_JAN; } -// FDFMToolRHIndex_RHIndexEnum +// $FDFMToolRHIndex_RHIndexEnum FDFMToolRHIndex_RHIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMToolRHIndex_RHIndexEnum_ZERO_TO_FOUR_PERCENT() { return FDFMToolRHIndex::ZERO_TO_FOUR_PERCENT; } @@ -4388,7 +4439,7 @@ FDFMToolRHIndex_RHIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMToolRHIndex return FDFMToolRHIndex::ONE_HUNDRED_PERCENT; } -// FDFMToolShadingIndex_ShadingIndexEnum +// $FDFMToolShadingIndex_ShadingIndexEnum FDFMToolShadingIndex_ShadingIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMToolShadingIndex_ShadingIndexEnum_EXPOSED() { return FDFMToolShadingIndex::EXPOSED; } @@ -4396,7 +4447,7 @@ FDFMToolShadingIndex_ShadingIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMT return FDFMToolShadingIndex::SHADED; } -// FDFMToolSlopeIndex_SlopeIndexEnum +// $FDFMToolSlopeIndex_SlopeIndexEnum FDFMToolSlopeIndex_SlopeIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMToolSlopeIndex_SlopeIndexEnum_ZERO_TO_THIRTY_PERCENT() { return FDFMToolSlopeIndex::ZERO_TO_THIRTY_PERCENT; } @@ -4404,7 +4455,7 @@ FDFMToolSlopeIndex_SlopeIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMToolS return FDFMToolSlopeIndex::GREATER_THAN_OR_EQUAL_TO_THIRTY_ONE_PERCENT; } -// FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum +// $FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_EIGHT_HUNDRED_HOURS_TO_NINE_HUNDRED_FIFTY_NINE() { return FDFMToolTimeOfDayIndex::EIGHT_HUNDRED_HOURS_TO_NINE_HUNDRED_FIFTY_NINE; } @@ -4424,7 +4475,7 @@ FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_F return FDFMToolTimeOfDayIndex::EIGHTTEEN_HUNDRED_HOURS_TO_SUNSET; } -// RepresentativeFraction_RepresentativeFractionEnum +// $RepresentativeFraction_RepresentativeFractionEnum RepresentativeFraction_RepresentativeFractionEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_NINTEEN_HUNDRED_EIGHTY() { return RepresentativeFraction::NINTEEN_HUNDRED_EIGHTY; } @@ -4480,7 +4531,7 @@ RepresentativeFraction_RepresentativeFractionEnum EMSCRIPTEN_KEEPALIVE emscripte return RepresentativeFraction::ONE_MILLION_THIRTEEN_THOUSAND_SEVEN_HUNDRED_SIXTY; } -// HorizontalDistanceIndex_HorizontalDistanceIndexEnum +// $HorizontalDistanceIndex_HorizontalDistanceIndexEnum HorizontalDistanceIndex_HorizontalDistanceIndexEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_UPSLOPE_ZERO_DEGREES() { return HorizontalDistanceIndex::UPSLOPE_ZERO_DEGREES; } @@ -4503,7 +4554,7 @@ HorizontalDistanceIndex_HorizontalDistanceIndexEnum EMSCRIPTEN_KEEPALIVE emscrip return HorizontalDistanceIndex::CROSS_SLOPE_NINETY_DEGREES; } -// BurningCondition_BurningConditionEnum +// $BurningCondition_BurningConditionEnum BurningCondition_BurningConditionEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_BurningCondition_BurningConditionEnum_Low() { return BurningCondition::Low; } @@ -4514,7 +4565,7 @@ BurningCondition_BurningConditionEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_Burni return BurningCondition::Extreme; } -// SlopeClass_SlopeClassEnum +// $SlopeClass_SlopeClassEnum SlopeClass_SlopeClassEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SlopeClass_SlopeClassEnum_Flat() { return SlopeClass::Flat; } @@ -4525,7 +4576,7 @@ SlopeClass_SlopeClassEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SlopeClass_SlopeC return SlopeClass::Steep; } -// SpeedClass_SpeedClassEnum +// $SpeedClass_SpeedClassEnum SpeedClass_SpeedClassEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpeedClass_SpeedClassEnum_Light() { return SpeedClass::Light; } @@ -4536,7 +4587,7 @@ SpeedClass_SpeedClassEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SpeedClass_SpeedC return SpeedClass::High; } -// SafetyCondition_SafetyConditionEnum +// $SafetyCondition_SafetyConditionEnum SafetyCondition_SafetyConditionEnum EMSCRIPTEN_KEEPALIVE emscripten_enum_SafetyCondition_SafetyConditionEnum_Low() { return SafetyCondition::Low; } diff --git a/behave-lib/include/idl/behave.idl b/behave-lib/include/idl/behave.idl index ec5a3e97f..c3976b743 100644 --- a/behave-lib/include/idl/behave.idl +++ b/behave-lib/include/idl/behave.idl @@ -124,8 +124,10 @@ enum SpeedUnits_SpeedUnitsEnum { "SpeedUnits::ChainsPerHour", "SpeedUnits::MetersPerSecond", "SpeedUnits::MetersPerMinute", + "SpeedUnits::MetersPerHour", "SpeedUnits::MilesPerHour", - "SpeedUnits::KilometersPerHour" + "SpeedUnits::KilometersPerHour", + "SpeedUnits::FurlongsPerFortnight" }; interface SpeedUnits { @@ -241,7 +243,9 @@ interface TemperatureUnits { enum TimeUnits_TimeUnitsEnum { "TimeUnits::Minutes", "TimeUnits::Seconds", - "TimeUnits::Hours" + "TimeUnits::Hours", + "TimeUnits::Days", + "TimeUnits::Years" }; interface TimeUnits { diff --git a/behave-lib/include/js/glue.js b/behave-lib/include/js/glue.js index ec21a3702..123dcfd52 100644 --- a/behave-lib/include/js/glue.js +++ b/behave-lib/include/js/glue.js @@ -74,15 +74,15 @@ var ensureCache = { temps: [], // extra allocations needed: 0, // the total size we need next time - prepare: function() { + prepare() { if (ensureCache.needed) { // clear the temps for (var i = 0; i < ensureCache.temps.length; i++) { - Module['_free'](ensureCache.temps[i]); + Module['_webidl_free'](ensureCache.temps[i]); } ensureCache.temps.length = 0; // prepare to allocate a bigger buffer - Module['_free'](ensureCache.buffer); + Module['_webidl_free'](ensureCache.buffer); ensureCache.buffer = 0; ensureCache.size += ensureCache.needed; // clean up @@ -90,22 +90,22 @@ var ensureCache = { } if (!ensureCache.buffer) { // happens first time, or when we need to grow ensureCache.size += 128; // heuristic, avoid many small grow events - ensureCache.buffer = Module['_malloc'](ensureCache.size); + ensureCache.buffer = Module['_webidl_malloc'](ensureCache.size); assert(ensureCache.buffer); } ensureCache.pos = 0; }, - alloc: function(array, view) { + alloc(array, view) { assert(ensureCache.buffer); var bytes = view.BYTES_PER_ELEMENT; var len = array.length * bytes; - len = (len + 7) & -8; // keep things aligned to 8 byte boundaries + len = alignMemory(len, 8); // keep things aligned to 8 byte boundaries var ret; if (ensureCache.pos + len >= ensureCache.size) { - // we failed to allocate in the buffer, ensureCache time around :( + // we failed to allocate in the buffer, next time around :( assert(len > 0); // null terminator, at least ensureCache.needed += len; - ret = Module['_malloc'](len); + ret = Module['_webidl_malloc'](len); ensureCache.temps.push(ret); } else { // we can allocate in the buffer @@ -114,18 +114,6 @@ var ensureCache = { } return ret; }, - copy: function(array, view, offset) { - offset >>>= 0; - var bytes = view.BYTES_PER_ELEMENT; - switch (bytes) { - case 2: offset >>>= 1; break; - case 4: offset >>>= 2; break; - case 8: offset >>>= 3; break; - } - for (var i = 0; i < array.length; i++) { - view[offset + i] = array[i]; - } - }, }; /** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */ @@ -133,823 +121,978 @@ function ensureString(value) { if (typeof value === 'string') { var intArray = intArrayFromString(value); var offset = ensureCache.alloc(intArray, HEAP8); - ensureCache.copy(intArray, HEAP8, offset); + for (var i = 0; i < intArray.length; i++) { + HEAP8[offset + i] = intArray[i]; + } return offset; } return value; } + /** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */ function ensureInt8(value) { if (typeof value === 'object') { var offset = ensureCache.alloc(value, HEAP8); - ensureCache.copy(value, HEAP8, offset); + for (var i = 0; i < value.length; i++) { + HEAP8[offset + i] = value[i]; + } return offset; } return value; } + /** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */ function ensureInt16(value) { if (typeof value === 'object') { var offset = ensureCache.alloc(value, HEAP16); - ensureCache.copy(value, HEAP16, offset); + var heapOffset = offset / 2; + for (var i = 0; i < value.length; i++) { + HEAP16[heapOffset + i] = value[i]; + } return offset; } return value; } + /** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */ function ensureInt32(value) { if (typeof value === 'object') { var offset = ensureCache.alloc(value, HEAP32); - ensureCache.copy(value, HEAP32, offset); + var heapOffset = offset / 4; + for (var i = 0; i < value.length; i++) { + HEAP32[heapOffset + i] = value[i]; + } return offset; } return value; } + /** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */ function ensureFloat32(value) { if (typeof value === 'object') { var offset = ensureCache.alloc(value, HEAPF32); - ensureCache.copy(value, HEAPF32, offset); + var heapOffset = offset / 4; + for (var i = 0; i < value.length; i++) { + HEAPF32[heapOffset + i] = value[i]; + } return offset; } return value; } + /** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */ function ensureFloat64(value) { if (typeof value === 'object') { var offset = ensureCache.alloc(value, HEAPF64); - ensureCache.copy(value, HEAPF64, offset); + var heapOffset = offset / 8; + for (var i = 0; i < value.length; i++) { + HEAPF64[heapOffset + i] = value[i]; + } return offset; } return value; } +// Interface: VoidPtr -// VoidPtr -/** @suppress {undefinedVars, duplicate} @this{Object} */function VoidPtr() { throw "cannot construct a VoidPtr, no constructor in IDL" } +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function VoidPtr() { throw "cannot construct a VoidPtr, no constructor in IDL" } VoidPtr.prototype = Object.create(WrapperObject.prototype); VoidPtr.prototype.constructor = VoidPtr; VoidPtr.prototype.__class__ = VoidPtr; VoidPtr.__cache__ = {}; Module['VoidPtr'] = VoidPtr; - VoidPtr.prototype['__destroy__'] = VoidPtr.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +VoidPtr.prototype['__destroy__'] = VoidPtr.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_VoidPtr___destroy___0(self); }; -// DoublePtr -/** @suppress {undefinedVars, duplicate} @this{Object} */function DoublePtr() { throw "cannot construct a DoublePtr, no constructor in IDL" } + +// Interface: DoublePtr + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function DoublePtr() { throw "cannot construct a DoublePtr, no constructor in IDL" } DoublePtr.prototype = Object.create(WrapperObject.prototype); DoublePtr.prototype.constructor = DoublePtr; DoublePtr.prototype.__class__ = DoublePtr; DoublePtr.__cache__ = {}; Module['DoublePtr'] = DoublePtr; - DoublePtr.prototype['__destroy__'] = DoublePtr.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +DoublePtr.prototype['__destroy__'] = DoublePtr.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_DoublePtr___destroy___0(self); }; -// BoolVector -/** @suppress {undefinedVars, duplicate} @this{Object} */function BoolVector(size) { + +// Interface: BoolVector + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function BoolVector(size) { if (size && typeof size === 'object') size = size.ptr; if (size === undefined) { this.ptr = _emscripten_bind_BoolVector_BoolVector_0(); getCache(BoolVector)[this.ptr] = this;return } this.ptr = _emscripten_bind_BoolVector_BoolVector_1(size); getCache(BoolVector)[this.ptr] = this; -};; +}; + BoolVector.prototype = Object.create(WrapperObject.prototype); BoolVector.prototype.constructor = BoolVector; BoolVector.prototype.__class__ = BoolVector; BoolVector.__cache__ = {}; Module['BoolVector'] = BoolVector; - -BoolVector.prototype['resize'] = BoolVector.prototype.resize = /** @suppress {undefinedVars, duplicate} @this{Object} */function(size) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +BoolVector.prototype['resize'] = BoolVector.prototype.resize = function(size) { var self = this.ptr; if (size && typeof size === 'object') size = size.ptr; _emscripten_bind_BoolVector_resize_1(self, size); -};; +}; -BoolVector.prototype['get'] = BoolVector.prototype.get = /** @suppress {undefinedVars, duplicate} @this{Object} */function(i) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +BoolVector.prototype['get'] = BoolVector.prototype.get = function(i) { var self = this.ptr; if (i && typeof i === 'object') i = i.ptr; return !!(_emscripten_bind_BoolVector_get_1(self, i)); -};; +}; -BoolVector.prototype['set'] = BoolVector.prototype.set = /** @suppress {undefinedVars, duplicate} @this{Object} */function(i, val) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +BoolVector.prototype['set'] = BoolVector.prototype.set = function(i, val) { var self = this.ptr; if (i && typeof i === 'object') i = i.ptr; if (val && typeof val === 'object') val = val.ptr; _emscripten_bind_BoolVector_set_2(self, i, val); -};; +}; -BoolVector.prototype['size'] = BoolVector.prototype.size = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +BoolVector.prototype['size'] = BoolVector.prototype.size = function() { var self = this.ptr; return _emscripten_bind_BoolVector_size_0(self); -};; +}; + - BoolVector.prototype['__destroy__'] = BoolVector.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +BoolVector.prototype['__destroy__'] = BoolVector.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_BoolVector___destroy___0(self); }; -// CharVector -/** @suppress {undefinedVars, duplicate} @this{Object} */function CharVector(size) { + +// Interface: CharVector + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function CharVector(size) { if (size && typeof size === 'object') size = size.ptr; if (size === undefined) { this.ptr = _emscripten_bind_CharVector_CharVector_0(); getCache(CharVector)[this.ptr] = this;return } this.ptr = _emscripten_bind_CharVector_CharVector_1(size); getCache(CharVector)[this.ptr] = this; -};; +}; + CharVector.prototype = Object.create(WrapperObject.prototype); CharVector.prototype.constructor = CharVector; CharVector.prototype.__class__ = CharVector; CharVector.__cache__ = {}; Module['CharVector'] = CharVector; - -CharVector.prototype['resize'] = CharVector.prototype.resize = /** @suppress {undefinedVars, duplicate} @this{Object} */function(size) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +CharVector.prototype['resize'] = CharVector.prototype.resize = function(size) { var self = this.ptr; if (size && typeof size === 'object') size = size.ptr; _emscripten_bind_CharVector_resize_1(self, size); -};; +}; -CharVector.prototype['get'] = CharVector.prototype.get = /** @suppress {undefinedVars, duplicate} @this{Object} */function(i) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +CharVector.prototype['get'] = CharVector.prototype.get = function(i) { var self = this.ptr; if (i && typeof i === 'object') i = i.ptr; return _emscripten_bind_CharVector_get_1(self, i); -};; +}; -CharVector.prototype['set'] = CharVector.prototype.set = /** @suppress {undefinedVars, duplicate} @this{Object} */function(i, val) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +CharVector.prototype['set'] = CharVector.prototype.set = function(i, val) { var self = this.ptr; if (i && typeof i === 'object') i = i.ptr; if (val && typeof val === 'object') val = val.ptr; _emscripten_bind_CharVector_set_2(self, i, val); -};; +}; -CharVector.prototype['size'] = CharVector.prototype.size = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +CharVector.prototype['size'] = CharVector.prototype.size = function() { var self = this.ptr; return _emscripten_bind_CharVector_size_0(self); -};; +}; + - CharVector.prototype['__destroy__'] = CharVector.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +CharVector.prototype['__destroy__'] = CharVector.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_CharVector___destroy___0(self); }; -// IntVector -/** @suppress {undefinedVars, duplicate} @this{Object} */function IntVector(size) { + +// Interface: IntVector + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function IntVector(size) { if (size && typeof size === 'object') size = size.ptr; if (size === undefined) { this.ptr = _emscripten_bind_IntVector_IntVector_0(); getCache(IntVector)[this.ptr] = this;return } this.ptr = _emscripten_bind_IntVector_IntVector_1(size); getCache(IntVector)[this.ptr] = this; -};; +}; + IntVector.prototype = Object.create(WrapperObject.prototype); IntVector.prototype.constructor = IntVector; IntVector.prototype.__class__ = IntVector; IntVector.__cache__ = {}; Module['IntVector'] = IntVector; - -IntVector.prototype['resize'] = IntVector.prototype.resize = /** @suppress {undefinedVars, duplicate} @this{Object} */function(size) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +IntVector.prototype['resize'] = IntVector.prototype.resize = function(size) { var self = this.ptr; if (size && typeof size === 'object') size = size.ptr; _emscripten_bind_IntVector_resize_1(self, size); -};; +}; -IntVector.prototype['get'] = IntVector.prototype.get = /** @suppress {undefinedVars, duplicate} @this{Object} */function(i) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +IntVector.prototype['get'] = IntVector.prototype.get = function(i) { var self = this.ptr; if (i && typeof i === 'object') i = i.ptr; return _emscripten_bind_IntVector_get_1(self, i); -};; +}; -IntVector.prototype['set'] = IntVector.prototype.set = /** @suppress {undefinedVars, duplicate} @this{Object} */function(i, val) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +IntVector.prototype['set'] = IntVector.prototype.set = function(i, val) { var self = this.ptr; if (i && typeof i === 'object') i = i.ptr; if (val && typeof val === 'object') val = val.ptr; _emscripten_bind_IntVector_set_2(self, i, val); -};; +}; -IntVector.prototype['size'] = IntVector.prototype.size = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +IntVector.prototype['size'] = IntVector.prototype.size = function() { var self = this.ptr; return _emscripten_bind_IntVector_size_0(self); -};; +}; + - IntVector.prototype['__destroy__'] = IntVector.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +IntVector.prototype['__destroy__'] = IntVector.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_IntVector___destroy___0(self); }; -// DoubleVector -/** @suppress {undefinedVars, duplicate} @this{Object} */function DoubleVector(size) { + +// Interface: DoubleVector + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function DoubleVector(size) { if (size && typeof size === 'object') size = size.ptr; if (size === undefined) { this.ptr = _emscripten_bind_DoubleVector_DoubleVector_0(); getCache(DoubleVector)[this.ptr] = this;return } this.ptr = _emscripten_bind_DoubleVector_DoubleVector_1(size); getCache(DoubleVector)[this.ptr] = this; -};; +}; + DoubleVector.prototype = Object.create(WrapperObject.prototype); DoubleVector.prototype.constructor = DoubleVector; DoubleVector.prototype.__class__ = DoubleVector; DoubleVector.__cache__ = {}; Module['DoubleVector'] = DoubleVector; - -DoubleVector.prototype['resize'] = DoubleVector.prototype.resize = /** @suppress {undefinedVars, duplicate} @this{Object} */function(size) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +DoubleVector.prototype['resize'] = DoubleVector.prototype.resize = function(size) { var self = this.ptr; if (size && typeof size === 'object') size = size.ptr; _emscripten_bind_DoubleVector_resize_1(self, size); -};; +}; -DoubleVector.prototype['get'] = DoubleVector.prototype.get = /** @suppress {undefinedVars, duplicate} @this{Object} */function(i) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +DoubleVector.prototype['get'] = DoubleVector.prototype.get = function(i) { var self = this.ptr; if (i && typeof i === 'object') i = i.ptr; return _emscripten_bind_DoubleVector_get_1(self, i); -};; +}; -DoubleVector.prototype['set'] = DoubleVector.prototype.set = /** @suppress {undefinedVars, duplicate} @this{Object} */function(i, val) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +DoubleVector.prototype['set'] = DoubleVector.prototype.set = function(i, val) { var self = this.ptr; if (i && typeof i === 'object') i = i.ptr; if (val && typeof val === 'object') val = val.ptr; _emscripten_bind_DoubleVector_set_2(self, i, val); -};; +}; -DoubleVector.prototype['size'] = DoubleVector.prototype.size = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +DoubleVector.prototype['size'] = DoubleVector.prototype.size = function() { var self = this.ptr; return _emscripten_bind_DoubleVector_size_0(self); -};; +}; - DoubleVector.prototype['__destroy__'] = DoubleVector.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +DoubleVector.prototype['__destroy__'] = DoubleVector.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_DoubleVector___destroy___0(self); }; -// SpeciesMasterTableRecordVector -/** @suppress {undefinedVars, duplicate} @this{Object} */function SpeciesMasterTableRecordVector(size) { + +// Interface: SpeciesMasterTableRecordVector + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SpeciesMasterTableRecordVector(size) { if (size && typeof size === 'object') size = size.ptr; if (size === undefined) { this.ptr = _emscripten_bind_SpeciesMasterTableRecordVector_SpeciesMasterTableRecordVector_0(); getCache(SpeciesMasterTableRecordVector)[this.ptr] = this;return } this.ptr = _emscripten_bind_SpeciesMasterTableRecordVector_SpeciesMasterTableRecordVector_1(size); getCache(SpeciesMasterTableRecordVector)[this.ptr] = this; -};; +}; + SpeciesMasterTableRecordVector.prototype = Object.create(WrapperObject.prototype); SpeciesMasterTableRecordVector.prototype.constructor = SpeciesMasterTableRecordVector; SpeciesMasterTableRecordVector.prototype.__class__ = SpeciesMasterTableRecordVector; SpeciesMasterTableRecordVector.__cache__ = {}; Module['SpeciesMasterTableRecordVector'] = SpeciesMasterTableRecordVector; - -SpeciesMasterTableRecordVector.prototype['resize'] = SpeciesMasterTableRecordVector.prototype.resize = /** @suppress {undefinedVars, duplicate} @this{Object} */function(size) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeciesMasterTableRecordVector.prototype['resize'] = SpeciesMasterTableRecordVector.prototype.resize = function(size) { var self = this.ptr; if (size && typeof size === 'object') size = size.ptr; _emscripten_bind_SpeciesMasterTableRecordVector_resize_1(self, size); -};; +}; -SpeciesMasterTableRecordVector.prototype['get'] = SpeciesMasterTableRecordVector.prototype.get = /** @suppress {undefinedVars, duplicate} @this{Object} */function(i) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeciesMasterTableRecordVector.prototype['get'] = SpeciesMasterTableRecordVector.prototype.get = function(i) { var self = this.ptr; if (i && typeof i === 'object') i = i.ptr; return wrapPointer(_emscripten_bind_SpeciesMasterTableRecordVector_get_1(self, i), SpeciesMasterTableRecord); -};; +}; -SpeciesMasterTableRecordVector.prototype['set'] = SpeciesMasterTableRecordVector.prototype.set = /** @suppress {undefinedVars, duplicate} @this{Object} */function(i, val) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeciesMasterTableRecordVector.prototype['set'] = SpeciesMasterTableRecordVector.prototype.set = function(i, val) { var self = this.ptr; if (i && typeof i === 'object') i = i.ptr; if (val && typeof val === 'object') val = val.ptr; _emscripten_bind_SpeciesMasterTableRecordVector_set_2(self, i, val); -};; +}; -SpeciesMasterTableRecordVector.prototype['size'] = SpeciesMasterTableRecordVector.prototype.size = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeciesMasterTableRecordVector.prototype['size'] = SpeciesMasterTableRecordVector.prototype.size = function() { var self = this.ptr; return _emscripten_bind_SpeciesMasterTableRecordVector_size_0(self); -};; +}; - SpeciesMasterTableRecordVector.prototype['__destroy__'] = SpeciesMasterTableRecordVector.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeciesMasterTableRecordVector.prototype['__destroy__'] = SpeciesMasterTableRecordVector.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SpeciesMasterTableRecordVector___destroy___0(self); }; -// AreaUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function AreaUnits() { throw "cannot construct a AreaUnits, no constructor in IDL" } + +// Interface: AreaUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function AreaUnits() { throw "cannot construct a AreaUnits, no constructor in IDL" } AreaUnits.prototype = Object.create(WrapperObject.prototype); AreaUnits.prototype.constructor = AreaUnits; AreaUnits.prototype.__class__ = AreaUnits; AreaUnits.__cache__ = {}; Module['AreaUnits'] = AreaUnits; - -AreaUnits.prototype['toBaseUnits'] = AreaUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +AreaUnits.prototype['toBaseUnits'] = AreaUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_AreaUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_AreaUnits_toBaseUnits_2(value, units); +}; -AreaUnits.prototype['fromBaseUnits'] = AreaUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +AreaUnits.prototype['fromBaseUnits'] = AreaUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_AreaUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_AreaUnits_fromBaseUnits_2(value, units); +}; - AreaUnits.prototype['__destroy__'] = AreaUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +AreaUnits.prototype['__destroy__'] = AreaUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_AreaUnits___destroy___0(self); }; -// BasalAreaUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function BasalAreaUnits() { throw "cannot construct a BasalAreaUnits, no constructor in IDL" } + +// Interface: BasalAreaUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function BasalAreaUnits() { throw "cannot construct a BasalAreaUnits, no constructor in IDL" } BasalAreaUnits.prototype = Object.create(WrapperObject.prototype); BasalAreaUnits.prototype.constructor = BasalAreaUnits; BasalAreaUnits.prototype.__class__ = BasalAreaUnits; BasalAreaUnits.__cache__ = {}; Module['BasalAreaUnits'] = BasalAreaUnits; - -BasalAreaUnits.prototype['toBaseUnits'] = BasalAreaUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +BasalAreaUnits.prototype['toBaseUnits'] = BasalAreaUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_BasalAreaUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_BasalAreaUnits_toBaseUnits_2(value, units); +}; -BasalAreaUnits.prototype['fromBaseUnits'] = BasalAreaUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +BasalAreaUnits.prototype['fromBaseUnits'] = BasalAreaUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_BasalAreaUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_BasalAreaUnits_fromBaseUnits_2(value, units); +}; - BasalAreaUnits.prototype['__destroy__'] = BasalAreaUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +BasalAreaUnits.prototype['__destroy__'] = BasalAreaUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_BasalAreaUnits___destroy___0(self); }; -// FractionUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function FractionUnits() { throw "cannot construct a FractionUnits, no constructor in IDL" } + +// Interface: FractionUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function FractionUnits() { throw "cannot construct a FractionUnits, no constructor in IDL" } FractionUnits.prototype = Object.create(WrapperObject.prototype); FractionUnits.prototype.constructor = FractionUnits; FractionUnits.prototype.__class__ = FractionUnits; FractionUnits.__cache__ = {}; Module['FractionUnits'] = FractionUnits; - -FractionUnits.prototype['toBaseUnits'] = FractionUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FractionUnits.prototype['toBaseUnits'] = FractionUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_FractionUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_FractionUnits_toBaseUnits_2(value, units); +}; -FractionUnits.prototype['fromBaseUnits'] = FractionUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FractionUnits.prototype['fromBaseUnits'] = FractionUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_FractionUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_FractionUnits_fromBaseUnits_2(value, units); +}; - FractionUnits.prototype['__destroy__'] = FractionUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FractionUnits.prototype['__destroy__'] = FractionUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_FractionUnits___destroy___0(self); }; -// LengthUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function LengthUnits() { throw "cannot construct a LengthUnits, no constructor in IDL" } + +// Interface: LengthUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function LengthUnits() { throw "cannot construct a LengthUnits, no constructor in IDL" } LengthUnits.prototype = Object.create(WrapperObject.prototype); LengthUnits.prototype.constructor = LengthUnits; LengthUnits.prototype.__class__ = LengthUnits; LengthUnits.__cache__ = {}; Module['LengthUnits'] = LengthUnits; - -LengthUnits.prototype['toBaseUnits'] = LengthUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +LengthUnits.prototype['toBaseUnits'] = LengthUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_LengthUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_LengthUnits_toBaseUnits_2(value, units); +}; -LengthUnits.prototype['fromBaseUnits'] = LengthUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +LengthUnits.prototype['fromBaseUnits'] = LengthUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_LengthUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_LengthUnits_fromBaseUnits_2(value, units); +}; - LengthUnits.prototype['__destroy__'] = LengthUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +LengthUnits.prototype['__destroy__'] = LengthUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_LengthUnits___destroy___0(self); }; -// LoadingUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function LoadingUnits() { throw "cannot construct a LoadingUnits, no constructor in IDL" } + +// Interface: LoadingUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function LoadingUnits() { throw "cannot construct a LoadingUnits, no constructor in IDL" } LoadingUnits.prototype = Object.create(WrapperObject.prototype); LoadingUnits.prototype.constructor = LoadingUnits; LoadingUnits.prototype.__class__ = LoadingUnits; LoadingUnits.__cache__ = {}; Module['LoadingUnits'] = LoadingUnits; - -LoadingUnits.prototype['toBaseUnits'] = LoadingUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +LoadingUnits.prototype['toBaseUnits'] = LoadingUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_LoadingUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_LoadingUnits_toBaseUnits_2(value, units); +}; -LoadingUnits.prototype['fromBaseUnits'] = LoadingUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +LoadingUnits.prototype['fromBaseUnits'] = LoadingUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_LoadingUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_LoadingUnits_fromBaseUnits_2(value, units); +}; + - LoadingUnits.prototype['__destroy__'] = LoadingUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +LoadingUnits.prototype['__destroy__'] = LoadingUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_LoadingUnits___destroy___0(self); }; -// SurfaceAreaToVolumeUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function SurfaceAreaToVolumeUnits() { throw "cannot construct a SurfaceAreaToVolumeUnits, no constructor in IDL" } + +// Interface: SurfaceAreaToVolumeUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SurfaceAreaToVolumeUnits() { throw "cannot construct a SurfaceAreaToVolumeUnits, no constructor in IDL" } SurfaceAreaToVolumeUnits.prototype = Object.create(WrapperObject.prototype); SurfaceAreaToVolumeUnits.prototype.constructor = SurfaceAreaToVolumeUnits; SurfaceAreaToVolumeUnits.prototype.__class__ = SurfaceAreaToVolumeUnits; SurfaceAreaToVolumeUnits.__cache__ = {}; Module['SurfaceAreaToVolumeUnits'] = SurfaceAreaToVolumeUnits; - -SurfaceAreaToVolumeUnits.prototype['toBaseUnits'] = SurfaceAreaToVolumeUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SurfaceAreaToVolumeUnits.prototype['toBaseUnits'] = SurfaceAreaToVolumeUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_SurfaceAreaToVolumeUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_SurfaceAreaToVolumeUnits_toBaseUnits_2(value, units); +}; -SurfaceAreaToVolumeUnits.prototype['fromBaseUnits'] = SurfaceAreaToVolumeUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SurfaceAreaToVolumeUnits.prototype['fromBaseUnits'] = SurfaceAreaToVolumeUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_SurfaceAreaToVolumeUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_SurfaceAreaToVolumeUnits_fromBaseUnits_2(value, units); +}; - SurfaceAreaToVolumeUnits.prototype['__destroy__'] = SurfaceAreaToVolumeUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SurfaceAreaToVolumeUnits.prototype['__destroy__'] = SurfaceAreaToVolumeUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SurfaceAreaToVolumeUnits___destroy___0(self); }; -// SpeedUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function SpeedUnits() { throw "cannot construct a SpeedUnits, no constructor in IDL" } + +// Interface: SpeedUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SpeedUnits() { throw "cannot construct a SpeedUnits, no constructor in IDL" } SpeedUnits.prototype = Object.create(WrapperObject.prototype); SpeedUnits.prototype.constructor = SpeedUnits; SpeedUnits.prototype.__class__ = SpeedUnits; SpeedUnits.__cache__ = {}; Module['SpeedUnits'] = SpeedUnits; - -SpeedUnits.prototype['toBaseUnits'] = SpeedUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeedUnits.prototype['toBaseUnits'] = SpeedUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_SpeedUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_SpeedUnits_toBaseUnits_2(value, units); +}; -SpeedUnits.prototype['fromBaseUnits'] = SpeedUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeedUnits.prototype['fromBaseUnits'] = SpeedUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_SpeedUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_SpeedUnits_fromBaseUnits_2(value, units); +}; + - SpeedUnits.prototype['__destroy__'] = SpeedUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeedUnits.prototype['__destroy__'] = SpeedUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SpeedUnits___destroy___0(self); }; -// PressureUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function PressureUnits() { throw "cannot construct a PressureUnits, no constructor in IDL" } + +// Interface: PressureUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function PressureUnits() { throw "cannot construct a PressureUnits, no constructor in IDL" } PressureUnits.prototype = Object.create(WrapperObject.prototype); PressureUnits.prototype.constructor = PressureUnits; PressureUnits.prototype.__class__ = PressureUnits; PressureUnits.__cache__ = {}; Module['PressureUnits'] = PressureUnits; - -PressureUnits.prototype['toBaseUnits'] = PressureUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PressureUnits.prototype['toBaseUnits'] = PressureUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_PressureUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_PressureUnits_toBaseUnits_2(value, units); +}; -PressureUnits.prototype['fromBaseUnits'] = PressureUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PressureUnits.prototype['fromBaseUnits'] = PressureUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_PressureUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_PressureUnits_fromBaseUnits_2(value, units); +}; + - PressureUnits.prototype['__destroy__'] = PressureUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PressureUnits.prototype['__destroy__'] = PressureUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_PressureUnits___destroy___0(self); }; -// SlopeUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function SlopeUnits() { throw "cannot construct a SlopeUnits, no constructor in IDL" } + +// Interface: SlopeUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SlopeUnits() { throw "cannot construct a SlopeUnits, no constructor in IDL" } SlopeUnits.prototype = Object.create(WrapperObject.prototype); SlopeUnits.prototype.constructor = SlopeUnits; SlopeUnits.prototype.__class__ = SlopeUnits; SlopeUnits.__cache__ = {}; Module['SlopeUnits'] = SlopeUnits; - -SlopeUnits.prototype['toBaseUnits'] = SlopeUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SlopeUnits.prototype['toBaseUnits'] = SlopeUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_SlopeUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_SlopeUnits_toBaseUnits_2(value, units); +}; -SlopeUnits.prototype['fromBaseUnits'] = SlopeUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SlopeUnits.prototype['fromBaseUnits'] = SlopeUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_SlopeUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_SlopeUnits_fromBaseUnits_2(value, units); +}; + - SlopeUnits.prototype['__destroy__'] = SlopeUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SlopeUnits.prototype['__destroy__'] = SlopeUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SlopeUnits___destroy___0(self); }; -// DensityUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function DensityUnits() { throw "cannot construct a DensityUnits, no constructor in IDL" } + +// Interface: DensityUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function DensityUnits() { throw "cannot construct a DensityUnits, no constructor in IDL" } DensityUnits.prototype = Object.create(WrapperObject.prototype); DensityUnits.prototype.constructor = DensityUnits; DensityUnits.prototype.__class__ = DensityUnits; DensityUnits.__cache__ = {}; Module['DensityUnits'] = DensityUnits; - -DensityUnits.prototype['toBaseUnits'] = DensityUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +DensityUnits.prototype['toBaseUnits'] = DensityUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_DensityUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_DensityUnits_toBaseUnits_2(value, units); +}; -DensityUnits.prototype['fromBaseUnits'] = DensityUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +DensityUnits.prototype['fromBaseUnits'] = DensityUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_DensityUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_DensityUnits_fromBaseUnits_2(value, units); +}; + - DensityUnits.prototype['__destroy__'] = DensityUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +DensityUnits.prototype['__destroy__'] = DensityUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_DensityUnits___destroy___0(self); }; -// HeatOfCombustionUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function HeatOfCombustionUnits() { throw "cannot construct a HeatOfCombustionUnits, no constructor in IDL" } + +// Interface: HeatOfCombustionUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function HeatOfCombustionUnits() { throw "cannot construct a HeatOfCombustionUnits, no constructor in IDL" } HeatOfCombustionUnits.prototype = Object.create(WrapperObject.prototype); HeatOfCombustionUnits.prototype.constructor = HeatOfCombustionUnits; HeatOfCombustionUnits.prototype.__class__ = HeatOfCombustionUnits; HeatOfCombustionUnits.__cache__ = {}; Module['HeatOfCombustionUnits'] = HeatOfCombustionUnits; - -HeatOfCombustionUnits.prototype['toBaseUnits'] = HeatOfCombustionUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +HeatOfCombustionUnits.prototype['toBaseUnits'] = HeatOfCombustionUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_HeatOfCombustionUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_HeatOfCombustionUnits_toBaseUnits_2(value, units); +}; -HeatOfCombustionUnits.prototype['fromBaseUnits'] = HeatOfCombustionUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +HeatOfCombustionUnits.prototype['fromBaseUnits'] = HeatOfCombustionUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_HeatOfCombustionUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_HeatOfCombustionUnits_fromBaseUnits_2(value, units); +}; + - HeatOfCombustionUnits.prototype['__destroy__'] = HeatOfCombustionUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +HeatOfCombustionUnits.prototype['__destroy__'] = HeatOfCombustionUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_HeatOfCombustionUnits___destroy___0(self); }; -// HeatSinkUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function HeatSinkUnits() { throw "cannot construct a HeatSinkUnits, no constructor in IDL" } + +// Interface: HeatSinkUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function HeatSinkUnits() { throw "cannot construct a HeatSinkUnits, no constructor in IDL" } HeatSinkUnits.prototype = Object.create(WrapperObject.prototype); HeatSinkUnits.prototype.constructor = HeatSinkUnits; HeatSinkUnits.prototype.__class__ = HeatSinkUnits; HeatSinkUnits.__cache__ = {}; Module['HeatSinkUnits'] = HeatSinkUnits; - -HeatSinkUnits.prototype['toBaseUnits'] = HeatSinkUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +HeatSinkUnits.prototype['toBaseUnits'] = HeatSinkUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_HeatSinkUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_HeatSinkUnits_toBaseUnits_2(value, units); +}; -HeatSinkUnits.prototype['fromBaseUnits'] = HeatSinkUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +HeatSinkUnits.prototype['fromBaseUnits'] = HeatSinkUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_HeatSinkUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_HeatSinkUnits_fromBaseUnits_2(value, units); +}; + - HeatSinkUnits.prototype['__destroy__'] = HeatSinkUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +HeatSinkUnits.prototype['__destroy__'] = HeatSinkUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_HeatSinkUnits___destroy___0(self); }; -// HeatPerUnitAreaUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function HeatPerUnitAreaUnits() { throw "cannot construct a HeatPerUnitAreaUnits, no constructor in IDL" } + +// Interface: HeatPerUnitAreaUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function HeatPerUnitAreaUnits() { throw "cannot construct a HeatPerUnitAreaUnits, no constructor in IDL" } HeatPerUnitAreaUnits.prototype = Object.create(WrapperObject.prototype); HeatPerUnitAreaUnits.prototype.constructor = HeatPerUnitAreaUnits; HeatPerUnitAreaUnits.prototype.__class__ = HeatPerUnitAreaUnits; HeatPerUnitAreaUnits.__cache__ = {}; Module['HeatPerUnitAreaUnits'] = HeatPerUnitAreaUnits; - -HeatPerUnitAreaUnits.prototype['toBaseUnits'] = HeatPerUnitAreaUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +HeatPerUnitAreaUnits.prototype['toBaseUnits'] = HeatPerUnitAreaUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_HeatPerUnitAreaUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_HeatPerUnitAreaUnits_toBaseUnits_2(value, units); +}; -HeatPerUnitAreaUnits.prototype['fromBaseUnits'] = HeatPerUnitAreaUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +HeatPerUnitAreaUnits.prototype['fromBaseUnits'] = HeatPerUnitAreaUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_HeatPerUnitAreaUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_HeatPerUnitAreaUnits_fromBaseUnits_2(value, units); +}; + - HeatPerUnitAreaUnits.prototype['__destroy__'] = HeatPerUnitAreaUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +HeatPerUnitAreaUnits.prototype['__destroy__'] = HeatPerUnitAreaUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_HeatPerUnitAreaUnits___destroy___0(self); }; -// HeatSourceAndReactionIntensityUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function HeatSourceAndReactionIntensityUnits() { throw "cannot construct a HeatSourceAndReactionIntensityUnits, no constructor in IDL" } + +// Interface: HeatSourceAndReactionIntensityUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function HeatSourceAndReactionIntensityUnits() { throw "cannot construct a HeatSourceAndReactionIntensityUnits, no constructor in IDL" } HeatSourceAndReactionIntensityUnits.prototype = Object.create(WrapperObject.prototype); HeatSourceAndReactionIntensityUnits.prototype.constructor = HeatSourceAndReactionIntensityUnits; HeatSourceAndReactionIntensityUnits.prototype.__class__ = HeatSourceAndReactionIntensityUnits; HeatSourceAndReactionIntensityUnits.__cache__ = {}; Module['HeatSourceAndReactionIntensityUnits'] = HeatSourceAndReactionIntensityUnits; - -HeatSourceAndReactionIntensityUnits.prototype['toBaseUnits'] = HeatSourceAndReactionIntensityUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +HeatSourceAndReactionIntensityUnits.prototype['toBaseUnits'] = HeatSourceAndReactionIntensityUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_HeatSourceAndReactionIntensityUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_HeatSourceAndReactionIntensityUnits_toBaseUnits_2(value, units); +}; -HeatSourceAndReactionIntensityUnits.prototype['fromBaseUnits'] = HeatSourceAndReactionIntensityUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +HeatSourceAndReactionIntensityUnits.prototype['fromBaseUnits'] = HeatSourceAndReactionIntensityUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_HeatSourceAndReactionIntensityUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_HeatSourceAndReactionIntensityUnits_fromBaseUnits_2(value, units); +}; + - HeatSourceAndReactionIntensityUnits.prototype['__destroy__'] = HeatSourceAndReactionIntensityUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +HeatSourceAndReactionIntensityUnits.prototype['__destroy__'] = HeatSourceAndReactionIntensityUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_HeatSourceAndReactionIntensityUnits___destroy___0(self); }; -// FirelineIntensityUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function FirelineIntensityUnits() { throw "cannot construct a FirelineIntensityUnits, no constructor in IDL" } + +// Interface: FirelineIntensityUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function FirelineIntensityUnits() { throw "cannot construct a FirelineIntensityUnits, no constructor in IDL" } FirelineIntensityUnits.prototype = Object.create(WrapperObject.prototype); FirelineIntensityUnits.prototype.constructor = FirelineIntensityUnits; FirelineIntensityUnits.prototype.__class__ = FirelineIntensityUnits; FirelineIntensityUnits.__cache__ = {}; Module['FirelineIntensityUnits'] = FirelineIntensityUnits; - -FirelineIntensityUnits.prototype['toBaseUnits'] = FirelineIntensityUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FirelineIntensityUnits.prototype['toBaseUnits'] = FirelineIntensityUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_FirelineIntensityUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_FirelineIntensityUnits_toBaseUnits_2(value, units); +}; -FirelineIntensityUnits.prototype['fromBaseUnits'] = FirelineIntensityUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FirelineIntensityUnits.prototype['fromBaseUnits'] = FirelineIntensityUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_FirelineIntensityUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_FirelineIntensityUnits_fromBaseUnits_2(value, units); +}; + - FirelineIntensityUnits.prototype['__destroy__'] = FirelineIntensityUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FirelineIntensityUnits.prototype['__destroy__'] = FirelineIntensityUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_FirelineIntensityUnits___destroy___0(self); }; -// TemperatureUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function TemperatureUnits() { throw "cannot construct a TemperatureUnits, no constructor in IDL" } + +// Interface: TemperatureUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function TemperatureUnits() { throw "cannot construct a TemperatureUnits, no constructor in IDL" } TemperatureUnits.prototype = Object.create(WrapperObject.prototype); TemperatureUnits.prototype.constructor = TemperatureUnits; TemperatureUnits.prototype.__class__ = TemperatureUnits; TemperatureUnits.__cache__ = {}; Module['TemperatureUnits'] = TemperatureUnits; - -TemperatureUnits.prototype['toBaseUnits'] = TemperatureUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +TemperatureUnits.prototype['toBaseUnits'] = TemperatureUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_TemperatureUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_TemperatureUnits_toBaseUnits_2(value, units); +}; -TemperatureUnits.prototype['fromBaseUnits'] = TemperatureUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +TemperatureUnits.prototype['fromBaseUnits'] = TemperatureUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_TemperatureUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_TemperatureUnits_fromBaseUnits_2(value, units); +}; + - TemperatureUnits.prototype['__destroy__'] = TemperatureUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +TemperatureUnits.prototype['__destroy__'] = TemperatureUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_TemperatureUnits___destroy___0(self); }; -// TimeUnits -/** @suppress {undefinedVars, duplicate} @this{Object} */function TimeUnits() { throw "cannot construct a TimeUnits, no constructor in IDL" } + +// Interface: TimeUnits + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function TimeUnits() { throw "cannot construct a TimeUnits, no constructor in IDL" } TimeUnits.prototype = Object.create(WrapperObject.prototype); TimeUnits.prototype.constructor = TimeUnits; TimeUnits.prototype.__class__ = TimeUnits; TimeUnits.__cache__ = {}; Module['TimeUnits'] = TimeUnits; - -TimeUnits.prototype['toBaseUnits'] = TimeUnits.prototype.toBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +TimeUnits.prototype['toBaseUnits'] = TimeUnits.prototype.toBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_TimeUnits_toBaseUnits_2(self, value, units); -};; + return _emscripten_bind_TimeUnits_toBaseUnits_2(value, units); +}; -TimeUnits.prototype['fromBaseUnits'] = TimeUnits.prototype.fromBaseUnits = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, units) { - var self = this.ptr; +/** @suppress {undefinedVars, duplicate} @this{Object} */ +TimeUnits.prototype['fromBaseUnits'] = TimeUnits.prototype.fromBaseUnits = function(value, units) { if (value && typeof value === 'object') value = value.ptr; if (units && typeof units === 'object') units = units.ptr; - return _emscripten_bind_TimeUnits_fromBaseUnits_2(self, value, units); -};; + return _emscripten_bind_TimeUnits_fromBaseUnits_2(value, units); +}; + - TimeUnits.prototype['__destroy__'] = TimeUnits.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +TimeUnits.prototype['__destroy__'] = TimeUnits.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_TimeUnits___destroy___0(self); }; -// FireSize -/** @suppress {undefinedVars, duplicate} @this{Object} */function FireSize() { throw "cannot construct a FireSize, no constructor in IDL" } + +// Interface: FireSize + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function FireSize() { throw "cannot construct a FireSize, no constructor in IDL" } FireSize.prototype = Object.create(WrapperObject.prototype); FireSize.prototype.constructor = FireSize; FireSize.prototype.__class__ = FireSize; FireSize.__cache__ = {}; Module['FireSize'] = FireSize; - -FireSize.prototype['getBackingSpreadRate'] = FireSize.prototype.getBackingSpreadRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spreadRateUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['getBackingSpreadRate'] = FireSize.prototype.getBackingSpreadRate = function(spreadRateUnits) { var self = this.ptr; if (spreadRateUnits && typeof spreadRateUnits === 'object') spreadRateUnits = spreadRateUnits.ptr; return _emscripten_bind_FireSize_getBackingSpreadRate_1(self, spreadRateUnits); -};; +}; -FireSize.prototype['getEccentricity'] = FireSize.prototype.getEccentricity = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['getEccentricity'] = FireSize.prototype.getEccentricity = function() { var self = this.ptr; return _emscripten_bind_FireSize_getEccentricity_0(self); -};; +}; -FireSize.prototype['getEllipticalA'] = FireSize.prototype.getEllipticalA = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits, elapsedTime, timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['getEllipticalA'] = FireSize.prototype.getEllipticalA = function(lengthUnits, elapsedTime, timeUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; if (elapsedTime && typeof elapsedTime === 'object') elapsedTime = elapsedTime.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; return _emscripten_bind_FireSize_getEllipticalA_3(self, lengthUnits, elapsedTime, timeUnits); -};; +}; -FireSize.prototype['getEllipticalB'] = FireSize.prototype.getEllipticalB = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits, elapsedTime, timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['getEllipticalB'] = FireSize.prototype.getEllipticalB = function(lengthUnits, elapsedTime, timeUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; if (elapsedTime && typeof elapsedTime === 'object') elapsedTime = elapsedTime.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; return _emscripten_bind_FireSize_getEllipticalB_3(self, lengthUnits, elapsedTime, timeUnits); -};; +}; -FireSize.prototype['getEllipticalC'] = FireSize.prototype.getEllipticalC = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits, elapsedTime, timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['getEllipticalC'] = FireSize.prototype.getEllipticalC = function(lengthUnits, elapsedTime, timeUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; if (elapsedTime && typeof elapsedTime === 'object') elapsedTime = elapsedTime.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; return _emscripten_bind_FireSize_getEllipticalC_3(self, lengthUnits, elapsedTime, timeUnits); -};; +}; -FireSize.prototype['getFireArea'] = FireSize.prototype.getFireArea = /** @suppress {undefinedVars, duplicate} @this{Object} */function(isCrown, areaUnits, elapsedTime, timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['getFireArea'] = FireSize.prototype.getFireArea = function(isCrown, areaUnits, elapsedTime, timeUnits) { var self = this.ptr; if (isCrown && typeof isCrown === 'object') isCrown = isCrown.ptr; if (areaUnits && typeof areaUnits === 'object') areaUnits = areaUnits.ptr; if (elapsedTime && typeof elapsedTime === 'object') elapsedTime = elapsedTime.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; return _emscripten_bind_FireSize_getFireArea_4(self, isCrown, areaUnits, elapsedTime, timeUnits); -};; +}; -FireSize.prototype['getFireLength'] = FireSize.prototype.getFireLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits, elapsedTime, timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['getFireLength'] = FireSize.prototype.getFireLength = function(lengthUnits, elapsedTime, timeUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; if (elapsedTime && typeof elapsedTime === 'object') elapsedTime = elapsedTime.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; return _emscripten_bind_FireSize_getFireLength_3(self, lengthUnits, elapsedTime, timeUnits); -};; +}; -FireSize.prototype['getFireLengthToWidthRatio'] = FireSize.prototype.getFireLengthToWidthRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['getFireLengthToWidthRatio'] = FireSize.prototype.getFireLengthToWidthRatio = function() { var self = this.ptr; return _emscripten_bind_FireSize_getFireLengthToWidthRatio_0(self); -};; +}; -FireSize.prototype['getFirePerimeter'] = FireSize.prototype.getFirePerimeter = /** @suppress {undefinedVars, duplicate} @this{Object} */function(isCrown, lengthUnits, elapsedTime, timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['getFirePerimeter'] = FireSize.prototype.getFirePerimeter = function(isCrown, lengthUnits, elapsedTime, timeUnits) { var self = this.ptr; if (isCrown && typeof isCrown === 'object') isCrown = isCrown.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; if (elapsedTime && typeof elapsedTime === 'object') elapsedTime = elapsedTime.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; return _emscripten_bind_FireSize_getFirePerimeter_4(self, isCrown, lengthUnits, elapsedTime, timeUnits); -};; +}; -FireSize.prototype['getFlankingSpreadRate'] = FireSize.prototype.getFlankingSpreadRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spreadRateUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['getFlankingSpreadRate'] = FireSize.prototype.getFlankingSpreadRate = function(spreadRateUnits) { var self = this.ptr; if (spreadRateUnits && typeof spreadRateUnits === 'object') spreadRateUnits = spreadRateUnits.ptr; return _emscripten_bind_FireSize_getFlankingSpreadRate_1(self, spreadRateUnits); -};; +}; -FireSize.prototype['getHeadingToBackingRatio'] = FireSize.prototype.getHeadingToBackingRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['getHeadingToBackingRatio'] = FireSize.prototype.getHeadingToBackingRatio = function() { var self = this.ptr; return _emscripten_bind_FireSize_getHeadingToBackingRatio_0(self); -};; +}; -FireSize.prototype['getMaxFireWidth'] = FireSize.prototype.getMaxFireWidth = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits, elapsedTime, timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['getMaxFireWidth'] = FireSize.prototype.getMaxFireWidth = function(lengthUnits, elapsedTime, timeUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; if (elapsedTime && typeof elapsedTime === 'object') elapsedTime = elapsedTime.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; return _emscripten_bind_FireSize_getMaxFireWidth_3(self, lengthUnits, elapsedTime, timeUnits); -};; +}; -FireSize.prototype['calculateFireBasicDimensions'] = FireSize.prototype.calculateFireBasicDimensions = /** @suppress {undefinedVars, duplicate} @this{Object} */function(isCrown, effectiveWindSpeed, windSpeedRateUnits, forwardSpreadRate, spreadRateUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['calculateFireBasicDimensions'] = FireSize.prototype.calculateFireBasicDimensions = function(isCrown, effectiveWindSpeed, windSpeedRateUnits, forwardSpreadRate, spreadRateUnits) { var self = this.ptr; if (isCrown && typeof isCrown === 'object') isCrown = isCrown.ptr; if (effectiveWindSpeed && typeof effectiveWindSpeed === 'object') effectiveWindSpeed = effectiveWindSpeed.ptr; @@ -957,188 +1100,223 @@ FireSize.prototype['calculateFireBasicDimensions'] = FireSize.prototype.calculat if (forwardSpreadRate && typeof forwardSpreadRate === 'object') forwardSpreadRate = forwardSpreadRate.ptr; if (spreadRateUnits && typeof spreadRateUnits === 'object') spreadRateUnits = spreadRateUnits.ptr; _emscripten_bind_FireSize_calculateFireBasicDimensions_5(self, isCrown, effectiveWindSpeed, windSpeedRateUnits, forwardSpreadRate, spreadRateUnits); -};; +}; - FireSize.prototype['__destroy__'] = FireSize.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +FireSize.prototype['__destroy__'] = FireSize.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_FireSize___destroy___0(self); }; -// SIGContainAdapter -/** @suppress {undefinedVars, duplicate} @this{Object} */function SIGContainAdapter() { + +// Interface: SIGContainAdapter + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SIGContainAdapter() { this.ptr = _emscripten_bind_SIGContainAdapter_SIGContainAdapter_0(); getCache(SIGContainAdapter)[this.ptr] = this; -};; +}; + SIGContainAdapter.prototype = Object.create(WrapperObject.prototype); SIGContainAdapter.prototype.constructor = SIGContainAdapter; SIGContainAdapter.prototype.__class__ = SIGContainAdapter; SIGContainAdapter.__cache__ = {}; Module['SIGContainAdapter'] = SIGContainAdapter; - -SIGContainAdapter.prototype['getContainmentStatus'] = SIGContainAdapter.prototype.getContainmentStatus = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getContainmentStatus'] = SIGContainAdapter.prototype.getContainmentStatus = function() { var self = this.ptr; return _emscripten_bind_SIGContainAdapter_getContainmentStatus_0(self); -};; +}; -SIGContainAdapter.prototype['getFirePerimeterX'] = SIGContainAdapter.prototype.getFirePerimeterX = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFirePerimeterX'] = SIGContainAdapter.prototype.getFirePerimeterX = function() { var self = this.ptr; return wrapPointer(_emscripten_bind_SIGContainAdapter_getFirePerimeterX_0(self), DoubleVector); -};; +}; -SIGContainAdapter.prototype['getFirePerimeterY'] = SIGContainAdapter.prototype.getFirePerimeterY = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFirePerimeterY'] = SIGContainAdapter.prototype.getFirePerimeterY = function() { var self = this.ptr; return wrapPointer(_emscripten_bind_SIGContainAdapter_getFirePerimeterY_0(self), DoubleVector); -};; +}; -SIGContainAdapter.prototype['getOptimizedContainProductionRates'] = SIGContainAdapter.prototype.getOptimizedContainProductionRates = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getOptimizedContainProductionRates'] = SIGContainAdapter.prototype.getOptimizedContainProductionRates = function() { var self = this.ptr; return wrapPointer(_emscripten_bind_SIGContainAdapter_getOptimizedContainProductionRates_0(self), DoubleVector); -};; +}; -SIGContainAdapter.prototype['getOptimizedContainAreas'] = SIGContainAdapter.prototype.getOptimizedContainAreas = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getOptimizedContainAreas'] = SIGContainAdapter.prototype.getOptimizedContainAreas = function() { var self = this.ptr; return wrapPointer(_emscripten_bind_SIGContainAdapter_getOptimizedContainAreas_0(self), DoubleVector); -};; +}; -SIGContainAdapter.prototype['getOptimizedContainPointCount'] = SIGContainAdapter.prototype.getOptimizedContainPointCount = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getOptimizedContainPointCount'] = SIGContainAdapter.prototype.getOptimizedContainPointCount = function() { var self = this.ptr; return _emscripten_bind_SIGContainAdapter_getOptimizedContainPointCount_0(self); -};; +}; -SIGContainAdapter.prototype['getAttackDistance'] = SIGContainAdapter.prototype.getAttackDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getAttackDistance'] = SIGContainAdapter.prototype.getAttackDistance = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGContainAdapter_getAttackDistance_1(self, lengthUnits); -};; +}; -SIGContainAdapter.prototype['getFinalContainmentArea'] = SIGContainAdapter.prototype.getFinalContainmentArea = /** @suppress {undefinedVars, duplicate} @this{Object} */function(areaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFinalContainmentArea'] = SIGContainAdapter.prototype.getFinalContainmentArea = function(areaUnits) { var self = this.ptr; if (areaUnits && typeof areaUnits === 'object') areaUnits = areaUnits.ptr; return _emscripten_bind_SIGContainAdapter_getFinalContainmentArea_1(self, areaUnits); -};; +}; -SIGContainAdapter.prototype['getFinalCost'] = SIGContainAdapter.prototype.getFinalCost = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFinalCost'] = SIGContainAdapter.prototype.getFinalCost = function() { var self = this.ptr; return _emscripten_bind_SIGContainAdapter_getFinalCost_0(self); -};; +}; -SIGContainAdapter.prototype['getFinalFireLineLength'] = SIGContainAdapter.prototype.getFinalFireLineLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFinalFireLineLength'] = SIGContainAdapter.prototype.getFinalFireLineLength = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGContainAdapter_getFinalFireLineLength_1(self, lengthUnits); -};; +}; -SIGContainAdapter.prototype['getFinalFireSize'] = SIGContainAdapter.prototype.getFinalFireSize = /** @suppress {undefinedVars, duplicate} @this{Object} */function(areaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFinalFireSize'] = SIGContainAdapter.prototype.getFinalFireSize = function(areaUnits) { var self = this.ptr; if (areaUnits && typeof areaUnits === 'object') areaUnits = areaUnits.ptr; return _emscripten_bind_SIGContainAdapter_getFinalFireSize_1(self, areaUnits); -};; +}; -SIGContainAdapter.prototype['getFinalTimeSinceReport'] = SIGContainAdapter.prototype.getFinalTimeSinceReport = /** @suppress {undefinedVars, duplicate} @this{Object} */function(timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFinalTimeSinceReport'] = SIGContainAdapter.prototype.getFinalTimeSinceReport = function(timeUnits) { var self = this.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; return _emscripten_bind_SIGContainAdapter_getFinalTimeSinceReport_1(self, timeUnits); -};; +}; -SIGContainAdapter.prototype['getFinalProductionRate'] = SIGContainAdapter.prototype.getFinalProductionRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFinalProductionRate'] = SIGContainAdapter.prototype.getFinalProductionRate = function(speedUnits) { var self = this.ptr; if (speedUnits && typeof speedUnits === 'object') speedUnits = speedUnits.ptr; return _emscripten_bind_SIGContainAdapter_getFinalProductionRate_1(self, speedUnits); -};; +}; -SIGContainAdapter.prototype['getFireBackAtAttack'] = SIGContainAdapter.prototype.getFireBackAtAttack = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFireBackAtAttack'] = SIGContainAdapter.prototype.getFireBackAtAttack = function() { var self = this.ptr; return _emscripten_bind_SIGContainAdapter_getFireBackAtAttack_0(self); -};; +}; -SIGContainAdapter.prototype['getFireBackAtReport'] = SIGContainAdapter.prototype.getFireBackAtReport = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFireBackAtReport'] = SIGContainAdapter.prototype.getFireBackAtReport = function() { var self = this.ptr; return _emscripten_bind_SIGContainAdapter_getFireBackAtReport_0(self); -};; +}; -SIGContainAdapter.prototype['getFireHeadAtAttack'] = SIGContainAdapter.prototype.getFireHeadAtAttack = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFireHeadAtAttack'] = SIGContainAdapter.prototype.getFireHeadAtAttack = function() { var self = this.ptr; return _emscripten_bind_SIGContainAdapter_getFireHeadAtAttack_0(self); -};; +}; -SIGContainAdapter.prototype['getFireHeadAtReport'] = SIGContainAdapter.prototype.getFireHeadAtReport = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFireHeadAtReport'] = SIGContainAdapter.prototype.getFireHeadAtReport = function() { var self = this.ptr; return _emscripten_bind_SIGContainAdapter_getFireHeadAtReport_0(self); -};; +}; -SIGContainAdapter.prototype['getFireSizeAtInitialAttack'] = SIGContainAdapter.prototype.getFireSizeAtInitialAttack = /** @suppress {undefinedVars, duplicate} @this{Object} */function(areaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFireSizeAtInitialAttack'] = SIGContainAdapter.prototype.getFireSizeAtInitialAttack = function(areaUnits) { var self = this.ptr; if (areaUnits && typeof areaUnits === 'object') areaUnits = areaUnits.ptr; return _emscripten_bind_SIGContainAdapter_getFireSizeAtInitialAttack_1(self, areaUnits); -};; +}; -SIGContainAdapter.prototype['getLengthToWidthRatio'] = SIGContainAdapter.prototype.getLengthToWidthRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getLengthToWidthRatio'] = SIGContainAdapter.prototype.getLengthToWidthRatio = function() { var self = this.ptr; return _emscripten_bind_SIGContainAdapter_getLengthToWidthRatio_0(self); -};; +}; -SIGContainAdapter.prototype['getPerimeterAtContainment'] = SIGContainAdapter.prototype.getPerimeterAtContainment = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getPerimeterAtContainment'] = SIGContainAdapter.prototype.getPerimeterAtContainment = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGContainAdapter_getPerimeterAtContainment_1(self, lengthUnits); -};; +}; -SIGContainAdapter.prototype['getPerimeterAtInitialAttack'] = SIGContainAdapter.prototype.getPerimeterAtInitialAttack = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getPerimeterAtInitialAttack'] = SIGContainAdapter.prototype.getPerimeterAtInitialAttack = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGContainAdapter_getPerimeterAtInitialAttack_1(self, lengthUnits); -};; +}; -SIGContainAdapter.prototype['getReportSize'] = SIGContainAdapter.prototype.getReportSize = /** @suppress {undefinedVars, duplicate} @this{Object} */function(areaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getReportSize'] = SIGContainAdapter.prototype.getReportSize = function(areaUnits) { var self = this.ptr; if (areaUnits && typeof areaUnits === 'object') areaUnits = areaUnits.ptr; return _emscripten_bind_SIGContainAdapter_getReportSize_1(self, areaUnits); -};; +}; -SIGContainAdapter.prototype['getReportRate'] = SIGContainAdapter.prototype.getReportRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getReportRate'] = SIGContainAdapter.prototype.getReportRate = function(speedUnits) { var self = this.ptr; if (speedUnits && typeof speedUnits === 'object') speedUnits = speedUnits.ptr; return _emscripten_bind_SIGContainAdapter_getReportRate_1(self, speedUnits); -};; +}; -SIGContainAdapter.prototype['getAutoComputedResourceProductionRate'] = SIGContainAdapter.prototype.getAutoComputedResourceProductionRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getAutoComputedResourceProductionRate'] = SIGContainAdapter.prototype.getAutoComputedResourceProductionRate = function(speedUnits) { var self = this.ptr; if (speedUnits && typeof speedUnits === 'object') speedUnits = speedUnits.ptr; return _emscripten_bind_SIGContainAdapter_getAutoComputedResourceProductionRate_1(self, speedUnits); -};; +}; -SIGContainAdapter.prototype['getTactic'] = SIGContainAdapter.prototype.getTactic = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getTactic'] = SIGContainAdapter.prototype.getTactic = function() { var self = this.ptr; return _emscripten_bind_SIGContainAdapter_getTactic_0(self); -};; +}; -SIGContainAdapter.prototype['getFirePerimeterPointCount'] = SIGContainAdapter.prototype.getFirePerimeterPointCount = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['getFirePerimeterPointCount'] = SIGContainAdapter.prototype.getFirePerimeterPointCount = function() { var self = this.ptr; return _emscripten_bind_SIGContainAdapter_getFirePerimeterPointCount_0(self); -};; +}; -SIGContainAdapter.prototype['removeAllResourcesWithThisDesc'] = SIGContainAdapter.prototype.removeAllResourcesWithThisDesc = /** @suppress {undefinedVars, duplicate} @this{Object} */function(desc) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['removeAllResourcesWithThisDesc'] = SIGContainAdapter.prototype.removeAllResourcesWithThisDesc = function(desc) { var self = this.ptr; ensureCache.prepare(); if (desc && typeof desc === 'object') desc = desc.ptr; else desc = ensureString(desc); return _emscripten_bind_SIGContainAdapter_removeAllResourcesWithThisDesc_1(self, desc); -};; +}; -SIGContainAdapter.prototype['removeResourceAt'] = SIGContainAdapter.prototype.removeResourceAt = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['removeResourceAt'] = SIGContainAdapter.prototype.removeResourceAt = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return _emscripten_bind_SIGContainAdapter_removeResourceAt_1(self, index); -};; +}; -SIGContainAdapter.prototype['removeResourceWithThisDesc'] = SIGContainAdapter.prototype.removeResourceWithThisDesc = /** @suppress {undefinedVars, duplicate} @this{Object} */function(desc) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['removeResourceWithThisDesc'] = SIGContainAdapter.prototype.removeResourceWithThisDesc = function(desc) { var self = this.ptr; ensureCache.prepare(); if (desc && typeof desc === 'object') desc = desc.ptr; else desc = ensureString(desc); return _emscripten_bind_SIGContainAdapter_removeResourceWithThisDesc_1(self, desc); -};; +}; -SIGContainAdapter.prototype['addResource'] = SIGContainAdapter.prototype.addResource = /** @suppress {undefinedVars, duplicate} @this{Object} */function(arrival, arrivalTimeUnit, duration, durationTimeUnit, productionRate, productionRateUnits, description, baseCost, hourCost) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['addResource'] = SIGContainAdapter.prototype.addResource = function(arrival, arrivalTimeUnit, duration, durationTimeUnit, productionRate, productionRateUnits, description, baseCost, hourCost) { var self = this.ptr; ensureCache.prepare(); if (arrival && typeof arrival === 'object') arrival = arrival.ptr; @@ -1152,196 +1330,230 @@ SIGContainAdapter.prototype['addResource'] = SIGContainAdapter.prototype.addReso if (baseCost && typeof baseCost === 'object') baseCost = baseCost.ptr; if (hourCost && typeof hourCost === 'object') hourCost = hourCost.ptr; _emscripten_bind_SIGContainAdapter_addResource_9(self, arrival, arrivalTimeUnit, duration, durationTimeUnit, productionRate, productionRateUnits, description, baseCost, hourCost); -};; +}; -SIGContainAdapter.prototype['doContainRun'] = SIGContainAdapter.prototype.doContainRun = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['doContainRun'] = SIGContainAdapter.prototype.doContainRun = function() { var self = this.ptr; _emscripten_bind_SIGContainAdapter_doContainRun_0(self); -};; +}; -SIGContainAdapter.prototype['removeAllResources'] = SIGContainAdapter.prototype.removeAllResources = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['removeAllResources'] = SIGContainAdapter.prototype.removeAllResources = function() { var self = this.ptr; _emscripten_bind_SIGContainAdapter_removeAllResources_0(self); -};; +}; -SIGContainAdapter.prototype['setAttackDistance'] = SIGContainAdapter.prototype.setAttackDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(attackDistance, lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setAttackDistance'] = SIGContainAdapter.prototype.setAttackDistance = function(attackDistance, lengthUnits) { var self = this.ptr; if (attackDistance && typeof attackDistance === 'object') attackDistance = attackDistance.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; _emscripten_bind_SIGContainAdapter_setAttackDistance_2(self, attackDistance, lengthUnits); -};; +}; -SIGContainAdapter.prototype['setContainMode'] = SIGContainAdapter.prototype.setContainMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(containmode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setContainMode'] = SIGContainAdapter.prototype.setContainMode = function(containmode) { var self = this.ptr; if (containmode && typeof containmode === 'object') containmode = containmode.ptr; _emscripten_bind_SIGContainAdapter_setContainMode_1(self, containmode); -};; +}; -SIGContainAdapter.prototype['setFireStartTime'] = SIGContainAdapter.prototype.setFireStartTime = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fireStartTime) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setFireStartTime'] = SIGContainAdapter.prototype.setFireStartTime = function(fireStartTime) { var self = this.ptr; if (fireStartTime && typeof fireStartTime === 'object') fireStartTime = fireStartTime.ptr; _emscripten_bind_SIGContainAdapter_setFireStartTime_1(self, fireStartTime); -};; +}; -SIGContainAdapter.prototype['setLwRatio'] = SIGContainAdapter.prototype.setLwRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lwRatio) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setLwRatio'] = SIGContainAdapter.prototype.setLwRatio = function(lwRatio) { var self = this.ptr; if (lwRatio && typeof lwRatio === 'object') lwRatio = lwRatio.ptr; _emscripten_bind_SIGContainAdapter_setLwRatio_1(self, lwRatio); -};; +}; -SIGContainAdapter.prototype['setMaxFireSize'] = SIGContainAdapter.prototype.setMaxFireSize = /** @suppress {undefinedVars, duplicate} @this{Object} */function(maxFireSize) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setMaxFireSize'] = SIGContainAdapter.prototype.setMaxFireSize = function(maxFireSize) { var self = this.ptr; if (maxFireSize && typeof maxFireSize === 'object') maxFireSize = maxFireSize.ptr; _emscripten_bind_SIGContainAdapter_setMaxFireSize_1(self, maxFireSize); -};; +}; -SIGContainAdapter.prototype['setMaxFireTime'] = SIGContainAdapter.prototype.setMaxFireTime = /** @suppress {undefinedVars, duplicate} @this{Object} */function(maxFireTime) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setMaxFireTime'] = SIGContainAdapter.prototype.setMaxFireTime = function(maxFireTime) { var self = this.ptr; if (maxFireTime && typeof maxFireTime === 'object') maxFireTime = maxFireTime.ptr; _emscripten_bind_SIGContainAdapter_setMaxFireTime_1(self, maxFireTime); -};; +}; -SIGContainAdapter.prototype['setMaxSteps'] = SIGContainAdapter.prototype.setMaxSteps = /** @suppress {undefinedVars, duplicate} @this{Object} */function(maxSteps) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setMaxSteps'] = SIGContainAdapter.prototype.setMaxSteps = function(maxSteps) { var self = this.ptr; if (maxSteps && typeof maxSteps === 'object') maxSteps = maxSteps.ptr; _emscripten_bind_SIGContainAdapter_setMaxSteps_1(self, maxSteps); -};; +}; -SIGContainAdapter.prototype['setMinSteps'] = SIGContainAdapter.prototype.setMinSteps = /** @suppress {undefinedVars, duplicate} @this{Object} */function(minSteps) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setMinSteps'] = SIGContainAdapter.prototype.setMinSteps = function(minSteps) { var self = this.ptr; if (minSteps && typeof minSteps === 'object') minSteps = minSteps.ptr; _emscripten_bind_SIGContainAdapter_setMinSteps_1(self, minSteps); -};; +}; -SIGContainAdapter.prototype['setReportRate'] = SIGContainAdapter.prototype.setReportRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(reportRate, speedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setReportRate'] = SIGContainAdapter.prototype.setReportRate = function(reportRate, speedUnits) { var self = this.ptr; if (reportRate && typeof reportRate === 'object') reportRate = reportRate.ptr; if (speedUnits && typeof speedUnits === 'object') speedUnits = speedUnits.ptr; _emscripten_bind_SIGContainAdapter_setReportRate_2(self, reportRate, speedUnits); -};; +}; -SIGContainAdapter.prototype['setReportSize'] = SIGContainAdapter.prototype.setReportSize = /** @suppress {undefinedVars, duplicate} @this{Object} */function(reportSize, areaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setReportSize'] = SIGContainAdapter.prototype.setReportSize = function(reportSize, areaUnits) { var self = this.ptr; if (reportSize && typeof reportSize === 'object') reportSize = reportSize.ptr; if (areaUnits && typeof areaUnits === 'object') areaUnits = areaUnits.ptr; _emscripten_bind_SIGContainAdapter_setReportSize_2(self, reportSize, areaUnits); -};; +}; -SIGContainAdapter.prototype['setResourceArrivalTime'] = SIGContainAdapter.prototype.setResourceArrivalTime = /** @suppress {undefinedVars, duplicate} @this{Object} */function(arrivalTime, timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setResourceArrivalTime'] = SIGContainAdapter.prototype.setResourceArrivalTime = function(arrivalTime, timeUnits) { var self = this.ptr; if (arrivalTime && typeof arrivalTime === 'object') arrivalTime = arrivalTime.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; _emscripten_bind_SIGContainAdapter_setResourceArrivalTime_2(self, arrivalTime, timeUnits); -};; +}; -SIGContainAdapter.prototype['setResourceDuration'] = SIGContainAdapter.prototype.setResourceDuration = /** @suppress {undefinedVars, duplicate} @this{Object} */function(duration, timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setResourceDuration'] = SIGContainAdapter.prototype.setResourceDuration = function(duration, timeUnits) { var self = this.ptr; if (duration && typeof duration === 'object') duration = duration.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; _emscripten_bind_SIGContainAdapter_setResourceDuration_2(self, duration, timeUnits); -};; +}; -SIGContainAdapter.prototype['setRetry'] = SIGContainAdapter.prototype.setRetry = /** @suppress {undefinedVars, duplicate} @this{Object} */function(retry) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setRetry'] = SIGContainAdapter.prototype.setRetry = function(retry) { var self = this.ptr; if (retry && typeof retry === 'object') retry = retry.ptr; _emscripten_bind_SIGContainAdapter_setRetry_1(self, retry); -};; +}; -SIGContainAdapter.prototype['setTactic'] = SIGContainAdapter.prototype.setTactic = /** @suppress {undefinedVars, duplicate} @this{Object} */function(tactic) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['setTactic'] = SIGContainAdapter.prototype.setTactic = function(tactic) { var self = this.ptr; if (tactic && typeof tactic === 'object') tactic = tactic.ptr; _emscripten_bind_SIGContainAdapter_setTactic_1(self, tactic); -};; +}; - SIGContainAdapter.prototype['__destroy__'] = SIGContainAdapter.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGContainAdapter.prototype['__destroy__'] = SIGContainAdapter.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SIGContainAdapter___destroy___0(self); }; -// SIGIgnite -/** @suppress {undefinedVars, duplicate} @this{Object} */function SIGIgnite() { + +// Interface: SIGIgnite + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SIGIgnite() { this.ptr = _emscripten_bind_SIGIgnite_SIGIgnite_0(); getCache(SIGIgnite)[this.ptr] = this; -};; +}; + SIGIgnite.prototype = Object.create(WrapperObject.prototype); SIGIgnite.prototype.constructor = SIGIgnite; SIGIgnite.prototype.__class__ = SIGIgnite; SIGIgnite.__cache__ = {}; Module['SIGIgnite'] = SIGIgnite; - -SIGIgnite.prototype['initializeMembers'] = SIGIgnite.prototype.initializeMembers = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['initializeMembers'] = SIGIgnite.prototype.initializeMembers = function() { var self = this.ptr; _emscripten_bind_SIGIgnite_initializeMembers_0(self); -};; +}; -SIGIgnite.prototype['getFuelBedType'] = SIGIgnite.prototype.getFuelBedType = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['getFuelBedType'] = SIGIgnite.prototype.getFuelBedType = function() { var self = this.ptr; return _emscripten_bind_SIGIgnite_getFuelBedType_0(self); -};; +}; -SIGIgnite.prototype['getLightningChargeType'] = SIGIgnite.prototype.getLightningChargeType = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['getLightningChargeType'] = SIGIgnite.prototype.getLightningChargeType = function() { var self = this.ptr; return _emscripten_bind_SIGIgnite_getLightningChargeType_0(self); -};; +}; -SIGIgnite.prototype['calculateFirebrandIgnitionProbability'] = SIGIgnite.prototype.calculateFirebrandIgnitionProbability = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['calculateFirebrandIgnitionProbability'] = SIGIgnite.prototype.calculateFirebrandIgnitionProbability = function() { var self = this.ptr; _emscripten_bind_SIGIgnite_calculateFirebrandIgnitionProbability_0(self); -};; +}; -SIGIgnite.prototype['calculateLightningIgnitionProbability'] = SIGIgnite.prototype.calculateLightningIgnitionProbability = /** @suppress {undefinedVars, duplicate} @this{Object} */function(desiredUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['calculateLightningIgnitionProbability'] = SIGIgnite.prototype.calculateLightningIgnitionProbability = function(desiredUnits) { var self = this.ptr; if (desiredUnits && typeof desiredUnits === 'object') desiredUnits = desiredUnits.ptr; return _emscripten_bind_SIGIgnite_calculateLightningIgnitionProbability_1(self, desiredUnits); -};; +}; -SIGIgnite.prototype['setAirTemperature'] = SIGIgnite.prototype.setAirTemperature = /** @suppress {undefinedVars, duplicate} @this{Object} */function(airTemperature, temperatureUnites) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['setAirTemperature'] = SIGIgnite.prototype.setAirTemperature = function(airTemperature, temperatureUnites) { var self = this.ptr; if (airTemperature && typeof airTemperature === 'object') airTemperature = airTemperature.ptr; if (temperatureUnites && typeof temperatureUnites === 'object') temperatureUnites = temperatureUnites.ptr; _emscripten_bind_SIGIgnite_setAirTemperature_2(self, airTemperature, temperatureUnites); -};; +}; -SIGIgnite.prototype['setDuffDepth'] = SIGIgnite.prototype.setDuffDepth = /** @suppress {undefinedVars, duplicate} @this{Object} */function(duffDepth, lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['setDuffDepth'] = SIGIgnite.prototype.setDuffDepth = function(duffDepth, lengthUnits) { var self = this.ptr; if (duffDepth && typeof duffDepth === 'object') duffDepth = duffDepth.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; _emscripten_bind_SIGIgnite_setDuffDepth_2(self, duffDepth, lengthUnits); -};; +}; -SIGIgnite.prototype['setIgnitionFuelBedType'] = SIGIgnite.prototype.setIgnitionFuelBedType = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelBedType_) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['setIgnitionFuelBedType'] = SIGIgnite.prototype.setIgnitionFuelBedType = function(fuelBedType_) { var self = this.ptr; if (fuelBedType_ && typeof fuelBedType_ === 'object') fuelBedType_ = fuelBedType_.ptr; _emscripten_bind_SIGIgnite_setIgnitionFuelBedType_1(self, fuelBedType_); -};; +}; -SIGIgnite.prototype['setLightningChargeType'] = SIGIgnite.prototype.setLightningChargeType = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lightningChargeType) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['setLightningChargeType'] = SIGIgnite.prototype.setLightningChargeType = function(lightningChargeType) { var self = this.ptr; if (lightningChargeType && typeof lightningChargeType === 'object') lightningChargeType = lightningChargeType.ptr; _emscripten_bind_SIGIgnite_setLightningChargeType_1(self, lightningChargeType); -};; +}; -SIGIgnite.prototype['setMoistureHundredHour'] = SIGIgnite.prototype.setMoistureHundredHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureHundredHour, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['setMoistureHundredHour'] = SIGIgnite.prototype.setMoistureHundredHour = function(moistureHundredHour, moistureUnits) { var self = this.ptr; if (moistureHundredHour && typeof moistureHundredHour === 'object') moistureHundredHour = moistureHundredHour.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGIgnite_setMoistureHundredHour_2(self, moistureHundredHour, moistureUnits); -};; +}; -SIGIgnite.prototype['setMoistureOneHour'] = SIGIgnite.prototype.setMoistureOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureOneHour, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['setMoistureOneHour'] = SIGIgnite.prototype.setMoistureOneHour = function(moistureOneHour, moistureUnits) { var self = this.ptr; if (moistureOneHour && typeof moistureOneHour === 'object') moistureOneHour = moistureOneHour.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGIgnite_setMoistureOneHour_2(self, moistureOneHour, moistureUnits); -};; +}; -SIGIgnite.prototype['setSunShade'] = SIGIgnite.prototype.setSunShade = /** @suppress {undefinedVars, duplicate} @this{Object} */function(sunShade, sunShadeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['setSunShade'] = SIGIgnite.prototype.setSunShade = function(sunShade, sunShadeUnits) { var self = this.ptr; if (sunShade && typeof sunShade === 'object') sunShade = sunShade.ptr; if (sunShadeUnits && typeof sunShadeUnits === 'object') sunShadeUnits = sunShadeUnits.ptr; _emscripten_bind_SIGIgnite_setSunShade_2(self, sunShade, sunShadeUnits); -};; +}; -SIGIgnite.prototype['updateIgniteInputs'] = SIGIgnite.prototype.updateIgniteInputs = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureOneHour, moistureHundredHour, moistureUnits, airTemperature, temperatureUnits, sunShade, sunShadeUnits, fuelBedType, duffDepth, duffDepthUnits, lightningChargeType) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['updateIgniteInputs'] = SIGIgnite.prototype.updateIgniteInputs = function(moistureOneHour, moistureHundredHour, moistureUnits, airTemperature, temperatureUnits, sunShade, sunShadeUnits, fuelBedType, duffDepth, duffDepthUnits, lightningChargeType) { var self = this.ptr; if (moistureOneHour && typeof moistureOneHour === 'object') moistureOneHour = moistureOneHour.ptr; if (moistureHundredHour && typeof moistureHundredHour === 'object') moistureHundredHour = moistureHundredHour.ptr; @@ -1355,522 +1567,609 @@ SIGIgnite.prototype['updateIgniteInputs'] = SIGIgnite.prototype.updateIgniteInpu if (duffDepthUnits && typeof duffDepthUnits === 'object') duffDepthUnits = duffDepthUnits.ptr; if (lightningChargeType && typeof lightningChargeType === 'object') lightningChargeType = lightningChargeType.ptr; _emscripten_bind_SIGIgnite_updateIgniteInputs_11(self, moistureOneHour, moistureHundredHour, moistureUnits, airTemperature, temperatureUnits, sunShade, sunShadeUnits, fuelBedType, duffDepth, duffDepthUnits, lightningChargeType); -};; +}; -SIGIgnite.prototype['getAirTemperature'] = SIGIgnite.prototype.getAirTemperature = /** @suppress {undefinedVars, duplicate} @this{Object} */function(desiredUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['getAirTemperature'] = SIGIgnite.prototype.getAirTemperature = function(desiredUnits) { var self = this.ptr; if (desiredUnits && typeof desiredUnits === 'object') desiredUnits = desiredUnits.ptr; return _emscripten_bind_SIGIgnite_getAirTemperature_1(self, desiredUnits); -};; +}; -SIGIgnite.prototype['getDuffDepth'] = SIGIgnite.prototype.getDuffDepth = /** @suppress {undefinedVars, duplicate} @this{Object} */function(desiredUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['getDuffDepth'] = SIGIgnite.prototype.getDuffDepth = function(desiredUnits) { var self = this.ptr; if (desiredUnits && typeof desiredUnits === 'object') desiredUnits = desiredUnits.ptr; return _emscripten_bind_SIGIgnite_getDuffDepth_1(self, desiredUnits); -};; +}; -SIGIgnite.prototype['getFirebrandIgnitionProbability'] = SIGIgnite.prototype.getFirebrandIgnitionProbability = /** @suppress {undefinedVars, duplicate} @this{Object} */function(desiredUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['getFirebrandIgnitionProbability'] = SIGIgnite.prototype.getFirebrandIgnitionProbability = function(desiredUnits) { var self = this.ptr; if (desiredUnits && typeof desiredUnits === 'object') desiredUnits = desiredUnits.ptr; return _emscripten_bind_SIGIgnite_getFirebrandIgnitionProbability_1(self, desiredUnits); -};; +}; -SIGIgnite.prototype['getFuelTemperature'] = SIGIgnite.prototype.getFuelTemperature = /** @suppress {undefinedVars, duplicate} @this{Object} */function(desiredUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['getFuelTemperature'] = SIGIgnite.prototype.getFuelTemperature = function(desiredUnits) { var self = this.ptr; if (desiredUnits && typeof desiredUnits === 'object') desiredUnits = desiredUnits.ptr; return _emscripten_bind_SIGIgnite_getFuelTemperature_1(self, desiredUnits); -};; +}; -SIGIgnite.prototype['getMoistureHundredHour'] = SIGIgnite.prototype.getMoistureHundredHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(desiredUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['getMoistureHundredHour'] = SIGIgnite.prototype.getMoistureHundredHour = function(desiredUnits) { var self = this.ptr; if (desiredUnits && typeof desiredUnits === 'object') desiredUnits = desiredUnits.ptr; return _emscripten_bind_SIGIgnite_getMoistureHundredHour_1(self, desiredUnits); -};; +}; -SIGIgnite.prototype['getMoistureOneHour'] = SIGIgnite.prototype.getMoistureOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(desiredUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['getMoistureOneHour'] = SIGIgnite.prototype.getMoistureOneHour = function(desiredUnits) { var self = this.ptr; if (desiredUnits && typeof desiredUnits === 'object') desiredUnits = desiredUnits.ptr; return _emscripten_bind_SIGIgnite_getMoistureOneHour_1(self, desiredUnits); -};; +}; -SIGIgnite.prototype['getSunShade'] = SIGIgnite.prototype.getSunShade = /** @suppress {undefinedVars, duplicate} @this{Object} */function(desiredUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['getSunShade'] = SIGIgnite.prototype.getSunShade = function(desiredUnits) { var self = this.ptr; if (desiredUnits && typeof desiredUnits === 'object') desiredUnits = desiredUnits.ptr; return _emscripten_bind_SIGIgnite_getSunShade_1(self, desiredUnits); -};; +}; -SIGIgnite.prototype['isFuelDepthNeeded'] = SIGIgnite.prototype.isFuelDepthNeeded = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['isFuelDepthNeeded'] = SIGIgnite.prototype.isFuelDepthNeeded = function() { var self = this.ptr; return !!(_emscripten_bind_SIGIgnite_isFuelDepthNeeded_0(self)); -};; +}; + - SIGIgnite.prototype['__destroy__'] = SIGIgnite.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGIgnite.prototype['__destroy__'] = SIGIgnite.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SIGIgnite___destroy___0(self); }; -// SIGMoistureScenarios -/** @suppress {undefinedVars, duplicate} @this{Object} */function SIGMoistureScenarios() { + +// Interface: SIGMoistureScenarios + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SIGMoistureScenarios() { this.ptr = _emscripten_bind_SIGMoistureScenarios_SIGMoistureScenarios_0(); getCache(SIGMoistureScenarios)[this.ptr] = this; -};; +}; + SIGMoistureScenarios.prototype = Object.create(WrapperObject.prototype); SIGMoistureScenarios.prototype.constructor = SIGMoistureScenarios; SIGMoistureScenarios.prototype.__class__ = SIGMoistureScenarios; SIGMoistureScenarios.__cache__ = {}; Module['SIGMoistureScenarios'] = SIGMoistureScenarios; - -SIGMoistureScenarios.prototype['getIsMoistureScenarioDefinedByIndex'] = SIGMoistureScenarios.prototype.getIsMoistureScenarioDefinedByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getIsMoistureScenarioDefinedByIndex'] = SIGMoistureScenarios.prototype.getIsMoistureScenarioDefinedByIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return !!(_emscripten_bind_SIGMoistureScenarios_getIsMoistureScenarioDefinedByIndex_1(self, index)); -};; +}; -SIGMoistureScenarios.prototype['getIsMoistureScenarioDefinedByName'] = SIGMoistureScenarios.prototype.getIsMoistureScenarioDefinedByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getIsMoistureScenarioDefinedByName'] = SIGMoistureScenarios.prototype.getIsMoistureScenarioDefinedByName = function(name) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); return !!(_emscripten_bind_SIGMoistureScenarios_getIsMoistureScenarioDefinedByName_1(self, name)); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioHundredHourByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioHundredHourByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioHundredHourByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioHundredHourByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGMoistureScenarios_getMoistureScenarioHundredHourByIndex_2(self, index, moistureUnits); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioHundredHourByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioHundredHourByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioHundredHourByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioHundredHourByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGMoistureScenarios_getMoistureScenarioHundredHourByName_2(self, name, moistureUnits); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioLiveHerbaceousByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioLiveHerbaceousByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioLiveHerbaceousByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioLiveHerbaceousByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveHerbaceousByIndex_2(self, index, moistureUnits); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioLiveHerbaceousByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioLiveHerbaceousByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioLiveHerbaceousByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioLiveHerbaceousByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveHerbaceousByName_2(self, name, moistureUnits); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioLiveWoodyByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioLiveWoodyByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioLiveWoodyByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioLiveWoodyByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveWoodyByIndex_2(self, index, moistureUnits); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioLiveWoodyByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioLiveWoodyByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioLiveWoodyByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioLiveWoodyByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveWoodyByName_2(self, name, moistureUnits); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioOneHourByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioOneHourByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioOneHourByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioOneHourByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGMoistureScenarios_getMoistureScenarioOneHourByIndex_2(self, index, moistureUnits); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioOneHourByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioOneHourByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioOneHourByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioOneHourByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGMoistureScenarios_getMoistureScenarioOneHourByName_2(self, name, moistureUnits); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioTenHourByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioTenHourByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioTenHourByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioTenHourByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGMoistureScenarios_getMoistureScenarioTenHourByIndex_2(self, index, moistureUnits); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioTenHourByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioTenHourByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioTenHourByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioTenHourByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGMoistureScenarios_getMoistureScenarioTenHourByName_2(self, name, moistureUnits); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioIndexByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioIndexByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioIndexByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioIndexByName = function(name) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); return _emscripten_bind_SIGMoistureScenarios_getMoistureScenarioIndexByName_1(self, name); -};; +}; -SIGMoistureScenarios.prototype['getNumberOfMoistureScenarios'] = SIGMoistureScenarios.prototype.getNumberOfMoistureScenarios = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getNumberOfMoistureScenarios'] = SIGMoistureScenarios.prototype.getNumberOfMoistureScenarios = function() { var self = this.ptr; return _emscripten_bind_SIGMoistureScenarios_getNumberOfMoistureScenarios_0(self); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioDescriptionByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioDescriptionByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioDescriptionByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioDescriptionByIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return UTF8ToString(_emscripten_bind_SIGMoistureScenarios_getMoistureScenarioDescriptionByIndex_1(self, index)); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioDescriptionByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioDescriptionByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioDescriptionByName'] = SIGMoistureScenarios.prototype.getMoistureScenarioDescriptionByName = function(name) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); return UTF8ToString(_emscripten_bind_SIGMoistureScenarios_getMoistureScenarioDescriptionByName_1(self, name)); -};; +}; -SIGMoistureScenarios.prototype['getMoistureScenarioNameByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioNameByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['getMoistureScenarioNameByIndex'] = SIGMoistureScenarios.prototype.getMoistureScenarioNameByIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return UTF8ToString(_emscripten_bind_SIGMoistureScenarios_getMoistureScenarioNameByIndex_1(self, index)); -};; +}; - SIGMoistureScenarios.prototype['__destroy__'] = SIGMoistureScenarios.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMoistureScenarios.prototype['__destroy__'] = SIGMoistureScenarios.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SIGMoistureScenarios___destroy___0(self); }; -// SIGSpot -/** @suppress {undefinedVars, duplicate} @this{Object} */function SIGSpot() { + +// Interface: SIGSpot + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SIGSpot() { this.ptr = _emscripten_bind_SIGSpot_SIGSpot_0(); getCache(SIGSpot)[this.ptr] = this; -};; +}; + SIGSpot.prototype = Object.create(WrapperObject.prototype); SIGSpot.prototype.constructor = SIGSpot; SIGSpot.prototype.__class__ = SIGSpot; SIGSpot.__cache__ = {}; Module['SIGSpot'] = SIGSpot; - -SIGSpot.prototype['getDownwindCanopyMode'] = SIGSpot.prototype.getDownwindCanopyMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getDownwindCanopyMode'] = SIGSpot.prototype.getDownwindCanopyMode = function() { var self = this.ptr; return _emscripten_bind_SIGSpot_getDownwindCanopyMode_0(self); -};; +}; -SIGSpot.prototype['getLocation'] = SIGSpot.prototype.getLocation = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getLocation'] = SIGSpot.prototype.getLocation = function() { var self = this.ptr; return _emscripten_bind_SIGSpot_getLocation_0(self); -};; +}; -SIGSpot.prototype['getTreeSpecies'] = SIGSpot.prototype.getTreeSpecies = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getTreeSpecies'] = SIGSpot.prototype.getTreeSpecies = function() { var self = this.ptr; return _emscripten_bind_SIGSpot_getTreeSpecies_0(self); -};; +}; -SIGSpot.prototype['getBurningPileFlameHeight'] = SIGSpot.prototype.getBurningPileFlameHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getBurningPileFlameHeight'] = SIGSpot.prototype.getBurningPileFlameHeight = function(flameHeightUnits) { var self = this.ptr; if (flameHeightUnits && typeof flameHeightUnits === 'object') flameHeightUnits = flameHeightUnits.ptr; return _emscripten_bind_SIGSpot_getBurningPileFlameHeight_1(self, flameHeightUnits); -};; +}; -SIGSpot.prototype['getCoverHeightUsedForBurningPile'] = SIGSpot.prototype.getCoverHeightUsedForBurningPile = /** @suppress {undefinedVars, duplicate} @this{Object} */function(coverHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getCoverHeightUsedForBurningPile'] = SIGSpot.prototype.getCoverHeightUsedForBurningPile = function(coverHeightUnits) { var self = this.ptr; if (coverHeightUnits && typeof coverHeightUnits === 'object') coverHeightUnits = coverHeightUnits.ptr; return _emscripten_bind_SIGSpot_getCoverHeightUsedForBurningPile_1(self, coverHeightUnits); -};; +}; -SIGSpot.prototype['getCoverHeightUsedForSurfaceFire'] = SIGSpot.prototype.getCoverHeightUsedForSurfaceFire = /** @suppress {undefinedVars, duplicate} @this{Object} */function(coverHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getCoverHeightUsedForSurfaceFire'] = SIGSpot.prototype.getCoverHeightUsedForSurfaceFire = function(coverHeightUnits) { var self = this.ptr; if (coverHeightUnits && typeof coverHeightUnits === 'object') coverHeightUnits = coverHeightUnits.ptr; return _emscripten_bind_SIGSpot_getCoverHeightUsedForSurfaceFire_1(self, coverHeightUnits); -};; +}; -SIGSpot.prototype['getCoverHeightUsedForTorchingTrees'] = SIGSpot.prototype.getCoverHeightUsedForTorchingTrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function(coverHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getCoverHeightUsedForTorchingTrees'] = SIGSpot.prototype.getCoverHeightUsedForTorchingTrees = function(coverHeightUnits) { var self = this.ptr; if (coverHeightUnits && typeof coverHeightUnits === 'object') coverHeightUnits = coverHeightUnits.ptr; return _emscripten_bind_SIGSpot_getCoverHeightUsedForTorchingTrees_1(self, coverHeightUnits); -};; +}; -SIGSpot.prototype['getDBH'] = SIGSpot.prototype.getDBH = /** @suppress {undefinedVars, duplicate} @this{Object} */function(DBHUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getDBH'] = SIGSpot.prototype.getDBH = function(DBHUnits) { var self = this.ptr; if (DBHUnits && typeof DBHUnits === 'object') DBHUnits = DBHUnits.ptr; return _emscripten_bind_SIGSpot_getDBH_1(self, DBHUnits); -};; +}; -SIGSpot.prototype['getDownwindCoverHeight'] = SIGSpot.prototype.getDownwindCoverHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(coverHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getDownwindCoverHeight'] = SIGSpot.prototype.getDownwindCoverHeight = function(coverHeightUnits) { var self = this.ptr; if (coverHeightUnits && typeof coverHeightUnits === 'object') coverHeightUnits = coverHeightUnits.ptr; return _emscripten_bind_SIGSpot_getDownwindCoverHeight_1(self, coverHeightUnits); -};; +}; -SIGSpot.prototype['getFlameDurationForTorchingTrees'] = SIGSpot.prototype.getFlameDurationForTorchingTrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function(durationUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getFlameDurationForTorchingTrees'] = SIGSpot.prototype.getFlameDurationForTorchingTrees = function(durationUnits) { var self = this.ptr; if (durationUnits && typeof durationUnits === 'object') durationUnits = durationUnits.ptr; return _emscripten_bind_SIGSpot_getFlameDurationForTorchingTrees_1(self, durationUnits); -};; +}; -SIGSpot.prototype['getFlameHeightForTorchingTrees'] = SIGSpot.prototype.getFlameHeightForTorchingTrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getFlameHeightForTorchingTrees'] = SIGSpot.prototype.getFlameHeightForTorchingTrees = function(flameHeightUnits) { var self = this.ptr; if (flameHeightUnits && typeof flameHeightUnits === 'object') flameHeightUnits = flameHeightUnits.ptr; return _emscripten_bind_SIGSpot_getFlameHeightForTorchingTrees_1(self, flameHeightUnits); -};; +}; -SIGSpot.prototype['getFlameRatioForTorchingTrees'] = SIGSpot.prototype.getFlameRatioForTorchingTrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getFlameRatioForTorchingTrees'] = SIGSpot.prototype.getFlameRatioForTorchingTrees = function() { var self = this.ptr; return _emscripten_bind_SIGSpot_getFlameRatioForTorchingTrees_0(self); -};; +}; -SIGSpot.prototype['getMaxFirebrandHeightFromBurningPile'] = SIGSpot.prototype.getMaxFirebrandHeightFromBurningPile = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firebrandHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getMaxFirebrandHeightFromBurningPile'] = SIGSpot.prototype.getMaxFirebrandHeightFromBurningPile = function(firebrandHeightUnits) { var self = this.ptr; if (firebrandHeightUnits && typeof firebrandHeightUnits === 'object') firebrandHeightUnits = firebrandHeightUnits.ptr; return _emscripten_bind_SIGSpot_getMaxFirebrandHeightFromBurningPile_1(self, firebrandHeightUnits); -};; +}; -SIGSpot.prototype['getMaxFirebrandHeightFromSurfaceFire'] = SIGSpot.prototype.getMaxFirebrandHeightFromSurfaceFire = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firebrandHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getMaxFirebrandHeightFromSurfaceFire'] = SIGSpot.prototype.getMaxFirebrandHeightFromSurfaceFire = function(firebrandHeightUnits) { var self = this.ptr; if (firebrandHeightUnits && typeof firebrandHeightUnits === 'object') firebrandHeightUnits = firebrandHeightUnits.ptr; return _emscripten_bind_SIGSpot_getMaxFirebrandHeightFromSurfaceFire_1(self, firebrandHeightUnits); -};; +}; -SIGSpot.prototype['getMaxFirebrandHeightFromTorchingTrees'] = SIGSpot.prototype.getMaxFirebrandHeightFromTorchingTrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firebrandHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getMaxFirebrandHeightFromTorchingTrees'] = SIGSpot.prototype.getMaxFirebrandHeightFromTorchingTrees = function(firebrandHeightUnits) { var self = this.ptr; if (firebrandHeightUnits && typeof firebrandHeightUnits === 'object') firebrandHeightUnits = firebrandHeightUnits.ptr; return _emscripten_bind_SIGSpot_getMaxFirebrandHeightFromTorchingTrees_1(self, firebrandHeightUnits); -};; +}; -SIGSpot.prototype['getMaxFlatTerrainSpottingDistanceFromBurningPile'] = SIGSpot.prototype.getMaxFlatTerrainSpottingDistanceFromBurningPile = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spottingDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getMaxFlatTerrainSpottingDistanceFromBurningPile'] = SIGSpot.prototype.getMaxFlatTerrainSpottingDistanceFromBurningPile = function(spottingDistanceUnits) { var self = this.ptr; if (spottingDistanceUnits && typeof spottingDistanceUnits === 'object') spottingDistanceUnits = spottingDistanceUnits.ptr; return _emscripten_bind_SIGSpot_getMaxFlatTerrainSpottingDistanceFromBurningPile_1(self, spottingDistanceUnits); -};; +}; -SIGSpot.prototype['getMaxFlatTerrainSpottingDistanceFromSurfaceFire'] = SIGSpot.prototype.getMaxFlatTerrainSpottingDistanceFromSurfaceFire = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spottingDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getMaxFlatTerrainSpottingDistanceFromSurfaceFire'] = SIGSpot.prototype.getMaxFlatTerrainSpottingDistanceFromSurfaceFire = function(spottingDistanceUnits) { var self = this.ptr; if (spottingDistanceUnits && typeof spottingDistanceUnits === 'object') spottingDistanceUnits = spottingDistanceUnits.ptr; return _emscripten_bind_SIGSpot_getMaxFlatTerrainSpottingDistanceFromSurfaceFire_1(self, spottingDistanceUnits); -};; +}; -SIGSpot.prototype['getMaxFlatTerrainSpottingDistanceFromTorchingTrees'] = SIGSpot.prototype.getMaxFlatTerrainSpottingDistanceFromTorchingTrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spottingDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getMaxFlatTerrainSpottingDistanceFromTorchingTrees'] = SIGSpot.prototype.getMaxFlatTerrainSpottingDistanceFromTorchingTrees = function(spottingDistanceUnits) { var self = this.ptr; if (spottingDistanceUnits && typeof spottingDistanceUnits === 'object') spottingDistanceUnits = spottingDistanceUnits.ptr; return _emscripten_bind_SIGSpot_getMaxFlatTerrainSpottingDistanceFromTorchingTrees_1(self, spottingDistanceUnits); -};; +}; -SIGSpot.prototype['getMaxMountainousTerrainSpottingDistanceFromBurningPile'] = SIGSpot.prototype.getMaxMountainousTerrainSpottingDistanceFromBurningPile = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spottingDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getMaxMountainousTerrainSpottingDistanceFromBurningPile'] = SIGSpot.prototype.getMaxMountainousTerrainSpottingDistanceFromBurningPile = function(spottingDistanceUnits) { var self = this.ptr; if (spottingDistanceUnits && typeof spottingDistanceUnits === 'object') spottingDistanceUnits = spottingDistanceUnits.ptr; return _emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromBurningPile_1(self, spottingDistanceUnits); -};; +}; -SIGSpot.prototype['getMaxMountainousTerrainSpottingDistanceFromSurfaceFire'] = SIGSpot.prototype.getMaxMountainousTerrainSpottingDistanceFromSurfaceFire = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spottingDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getMaxMountainousTerrainSpottingDistanceFromSurfaceFire'] = SIGSpot.prototype.getMaxMountainousTerrainSpottingDistanceFromSurfaceFire = function(spottingDistanceUnits) { var self = this.ptr; if (spottingDistanceUnits && typeof spottingDistanceUnits === 'object') spottingDistanceUnits = spottingDistanceUnits.ptr; return _emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromSurfaceFire_1(self, spottingDistanceUnits); -};; +}; -SIGSpot.prototype['getMaxMountainousTerrainSpottingDistanceFromTorchingTrees'] = SIGSpot.prototype.getMaxMountainousTerrainSpottingDistanceFromTorchingTrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spottingDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getMaxMountainousTerrainSpottingDistanceFromTorchingTrees'] = SIGSpot.prototype.getMaxMountainousTerrainSpottingDistanceFromTorchingTrees = function(spottingDistanceUnits) { var self = this.ptr; if (spottingDistanceUnits && typeof spottingDistanceUnits === 'object') spottingDistanceUnits = spottingDistanceUnits.ptr; return _emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromTorchingTrees_1(self, spottingDistanceUnits); -};; +}; -SIGSpot.prototype['getMaxMountainousTerrainSpottingDistanceFromActiveCrown'] = SIGSpot.prototype.getMaxMountainousTerrainSpottingDistanceFromActiveCrown = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spottingDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getMaxMountainousTerrainSpottingDistanceFromActiveCrown'] = SIGSpot.prototype.getMaxMountainousTerrainSpottingDistanceFromActiveCrown = function(spottingDistanceUnits) { var self = this.ptr; if (spottingDistanceUnits && typeof spottingDistanceUnits === 'object') spottingDistanceUnits = spottingDistanceUnits.ptr; return _emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromActiveCrown_1(self, spottingDistanceUnits); -};; +}; -SIGSpot.prototype['getRidgeToValleyDistance'] = SIGSpot.prototype.getRidgeToValleyDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(ridgeToValleyDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getRidgeToValleyDistance'] = SIGSpot.prototype.getRidgeToValleyDistance = function(ridgeToValleyDistanceUnits) { var self = this.ptr; if (ridgeToValleyDistanceUnits && typeof ridgeToValleyDistanceUnits === 'object') ridgeToValleyDistanceUnits = ridgeToValleyDistanceUnits.ptr; return _emscripten_bind_SIGSpot_getRidgeToValleyDistance_1(self, ridgeToValleyDistanceUnits); -};; +}; -SIGSpot.prototype['getRidgeToValleyElevation'] = SIGSpot.prototype.getRidgeToValleyElevation = /** @suppress {undefinedVars, duplicate} @this{Object} */function(elevationUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getRidgeToValleyElevation'] = SIGSpot.prototype.getRidgeToValleyElevation = function(elevationUnits) { var self = this.ptr; if (elevationUnits && typeof elevationUnits === 'object') elevationUnits = elevationUnits.ptr; return _emscripten_bind_SIGSpot_getRidgeToValleyElevation_1(self, elevationUnits); -};; +}; -SIGSpot.prototype['getSurfaceFlameLength'] = SIGSpot.prototype.getSurfaceFlameLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(surfaceFlameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getSurfaceFlameLength'] = SIGSpot.prototype.getSurfaceFlameLength = function(surfaceFlameLengthUnits) { var self = this.ptr; if (surfaceFlameLengthUnits && typeof surfaceFlameLengthUnits === 'object') surfaceFlameLengthUnits = surfaceFlameLengthUnits.ptr; return _emscripten_bind_SIGSpot_getSurfaceFlameLength_1(self, surfaceFlameLengthUnits); -};; +}; -SIGSpot.prototype['getTreeHeight'] = SIGSpot.prototype.getTreeHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(treeHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getTreeHeight'] = SIGSpot.prototype.getTreeHeight = function(treeHeightUnits) { var self = this.ptr; if (treeHeightUnits && typeof treeHeightUnits === 'object') treeHeightUnits = treeHeightUnits.ptr; return _emscripten_bind_SIGSpot_getTreeHeight_1(self, treeHeightUnits); -};; +}; -SIGSpot.prototype['getWindSpeedAtTwentyFeet'] = SIGSpot.prototype.getWindSpeedAtTwentyFeet = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windSpeedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getWindSpeedAtTwentyFeet'] = SIGSpot.prototype.getWindSpeedAtTwentyFeet = function(windSpeedUnits) { var self = this.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; return _emscripten_bind_SIGSpot_getWindSpeedAtTwentyFeet_1(self, windSpeedUnits); -};; +}; -SIGSpot.prototype['getTorchingTrees'] = SIGSpot.prototype.getTorchingTrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['getTorchingTrees'] = SIGSpot.prototype.getTorchingTrees = function() { var self = this.ptr; return _emscripten_bind_SIGSpot_getTorchingTrees_0(self); -};; +}; -SIGSpot.prototype['calculateAll'] = SIGSpot.prototype.calculateAll = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['calculateAll'] = SIGSpot.prototype.calculateAll = function() { var self = this.ptr; _emscripten_bind_SIGSpot_calculateAll_0(self); -};; +}; -SIGSpot.prototype['calculateSpottingDistanceFromBurningPile'] = SIGSpot.prototype.calculateSpottingDistanceFromBurningPile = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['calculateSpottingDistanceFromBurningPile'] = SIGSpot.prototype.calculateSpottingDistanceFromBurningPile = function() { var self = this.ptr; _emscripten_bind_SIGSpot_calculateSpottingDistanceFromBurningPile_0(self); -};; +}; -SIGSpot.prototype['calculateSpottingDistanceFromSurfaceFire'] = SIGSpot.prototype.calculateSpottingDistanceFromSurfaceFire = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['calculateSpottingDistanceFromSurfaceFire'] = SIGSpot.prototype.calculateSpottingDistanceFromSurfaceFire = function() { var self = this.ptr; _emscripten_bind_SIGSpot_calculateSpottingDistanceFromSurfaceFire_0(self); -};; +}; -SIGSpot.prototype['calculateSpottingDistanceFromTorchingTrees'] = SIGSpot.prototype.calculateSpottingDistanceFromTorchingTrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['calculateSpottingDistanceFromTorchingTrees'] = SIGSpot.prototype.calculateSpottingDistanceFromTorchingTrees = function() { var self = this.ptr; _emscripten_bind_SIGSpot_calculateSpottingDistanceFromTorchingTrees_0(self); -};; +}; -SIGSpot.prototype['initializeMembers'] = SIGSpot.prototype.initializeMembers = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['initializeMembers'] = SIGSpot.prototype.initializeMembers = function() { var self = this.ptr; _emscripten_bind_SIGSpot_initializeMembers_0(self); -};; +}; -SIGSpot.prototype['setActiveCrownFlameLength'] = SIGSpot.prototype.setActiveCrownFlameLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLength, flameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setActiveCrownFlameLength'] = SIGSpot.prototype.setActiveCrownFlameLength = function(flameLength, flameLengthUnits) { var self = this.ptr; if (flameLength && typeof flameLength === 'object') flameLength = flameLength.ptr; if (flameLengthUnits && typeof flameLengthUnits === 'object') flameLengthUnits = flameLengthUnits.ptr; _emscripten_bind_SIGSpot_setActiveCrownFlameLength_2(self, flameLength, flameLengthUnits); -};; +}; -SIGSpot.prototype['setBurningPileFlameHeight'] = SIGSpot.prototype.setBurningPileFlameHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(buringPileflameHeight, flameHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setBurningPileFlameHeight'] = SIGSpot.prototype.setBurningPileFlameHeight = function(buringPileflameHeight, flameHeightUnits) { var self = this.ptr; if (buringPileflameHeight && typeof buringPileflameHeight === 'object') buringPileflameHeight = buringPileflameHeight.ptr; if (flameHeightUnits && typeof flameHeightUnits === 'object') flameHeightUnits = flameHeightUnits.ptr; _emscripten_bind_SIGSpot_setBurningPileFlameHeight_2(self, buringPileflameHeight, flameHeightUnits); -};; +}; -SIGSpot.prototype['setDBH'] = SIGSpot.prototype.setDBH = /** @suppress {undefinedVars, duplicate} @this{Object} */function(DBH, DBHUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setDBH'] = SIGSpot.prototype.setDBH = function(DBH, DBHUnits) { var self = this.ptr; if (DBH && typeof DBH === 'object') DBH = DBH.ptr; if (DBHUnits && typeof DBHUnits === 'object') DBHUnits = DBHUnits.ptr; _emscripten_bind_SIGSpot_setDBH_2(self, DBH, DBHUnits); -};; +}; -SIGSpot.prototype['setDownwindCanopyMode'] = SIGSpot.prototype.setDownwindCanopyMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(downwindCanopyMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setDownwindCanopyMode'] = SIGSpot.prototype.setDownwindCanopyMode = function(downwindCanopyMode) { var self = this.ptr; if (downwindCanopyMode && typeof downwindCanopyMode === 'object') downwindCanopyMode = downwindCanopyMode.ptr; _emscripten_bind_SIGSpot_setDownwindCanopyMode_1(self, downwindCanopyMode); -};; +}; -SIGSpot.prototype['setDownwindCoverHeight'] = SIGSpot.prototype.setDownwindCoverHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(downwindCoverHeight, coverHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setDownwindCoverHeight'] = SIGSpot.prototype.setDownwindCoverHeight = function(downwindCoverHeight, coverHeightUnits) { var self = this.ptr; if (downwindCoverHeight && typeof downwindCoverHeight === 'object') downwindCoverHeight = downwindCoverHeight.ptr; if (coverHeightUnits && typeof coverHeightUnits === 'object') coverHeightUnits = coverHeightUnits.ptr; _emscripten_bind_SIGSpot_setDownwindCoverHeight_2(self, downwindCoverHeight, coverHeightUnits); -};; +}; -SIGSpot.prototype['setFireType'] = SIGSpot.prototype.setFireType = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fireType) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setFireType'] = SIGSpot.prototype.setFireType = function(fireType) { var self = this.ptr; if (fireType && typeof fireType === 'object') fireType = fireType.ptr; _emscripten_bind_SIGSpot_setFireType_1(self, fireType); -};; +}; -SIGSpot.prototype['setFlameLength'] = SIGSpot.prototype.setFlameLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLength, flameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setFlameLength'] = SIGSpot.prototype.setFlameLength = function(flameLength, flameLengthUnits) { var self = this.ptr; if (flameLength && typeof flameLength === 'object') flameLength = flameLength.ptr; if (flameLengthUnits && typeof flameLengthUnits === 'object') flameLengthUnits = flameLengthUnits.ptr; _emscripten_bind_SIGSpot_setFlameLength_2(self, flameLength, flameLengthUnits); -};; +}; -SIGSpot.prototype['setFirelineIntensity'] = SIGSpot.prototype.setFirelineIntensity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firelineIntensity, firelineIntensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setFirelineIntensity'] = SIGSpot.prototype.setFirelineIntensity = function(firelineIntensity, firelineIntensityUnits) { var self = this.ptr; if (firelineIntensity && typeof firelineIntensity === 'object') firelineIntensity = firelineIntensity.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; _emscripten_bind_SIGSpot_setFirelineIntensity_2(self, firelineIntensity, firelineIntensityUnits); -};; +}; -SIGSpot.prototype['setLocation'] = SIGSpot.prototype.setLocation = /** @suppress {undefinedVars, duplicate} @this{Object} */function(location) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setLocation'] = SIGSpot.prototype.setLocation = function(location) { var self = this.ptr; if (location && typeof location === 'object') location = location.ptr; _emscripten_bind_SIGSpot_setLocation_1(self, location); -};; +}; -SIGSpot.prototype['setRidgeToValleyDistance'] = SIGSpot.prototype.setRidgeToValleyDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(ridgeToValleyDistance, ridgeToValleyDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setRidgeToValleyDistance'] = SIGSpot.prototype.setRidgeToValleyDistance = function(ridgeToValleyDistance, ridgeToValleyDistanceUnits) { var self = this.ptr; if (ridgeToValleyDistance && typeof ridgeToValleyDistance === 'object') ridgeToValleyDistance = ridgeToValleyDistance.ptr; if (ridgeToValleyDistanceUnits && typeof ridgeToValleyDistanceUnits === 'object') ridgeToValleyDistanceUnits = ridgeToValleyDistanceUnits.ptr; _emscripten_bind_SIGSpot_setRidgeToValleyDistance_2(self, ridgeToValleyDistance, ridgeToValleyDistanceUnits); -};; +}; -SIGSpot.prototype['setRidgeToValleyElevation'] = SIGSpot.prototype.setRidgeToValleyElevation = /** @suppress {undefinedVars, duplicate} @this{Object} */function(ridgeToValleyElevation, elevationUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setRidgeToValleyElevation'] = SIGSpot.prototype.setRidgeToValleyElevation = function(ridgeToValleyElevation, elevationUnits) { var self = this.ptr; if (ridgeToValleyElevation && typeof ridgeToValleyElevation === 'object') ridgeToValleyElevation = ridgeToValleyElevation.ptr; if (elevationUnits && typeof elevationUnits === 'object') elevationUnits = elevationUnits.ptr; _emscripten_bind_SIGSpot_setRidgeToValleyElevation_2(self, ridgeToValleyElevation, elevationUnits); -};; +}; -SIGSpot.prototype['setTorchingTrees'] = SIGSpot.prototype.setTorchingTrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function(torchingTrees) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setTorchingTrees'] = SIGSpot.prototype.setTorchingTrees = function(torchingTrees) { var self = this.ptr; if (torchingTrees && typeof torchingTrees === 'object') torchingTrees = torchingTrees.ptr; _emscripten_bind_SIGSpot_setTorchingTrees_1(self, torchingTrees); -};; +}; -SIGSpot.prototype['setTreeHeight'] = SIGSpot.prototype.setTreeHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(treeHeight, treeHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setTreeHeight'] = SIGSpot.prototype.setTreeHeight = function(treeHeight, treeHeightUnits) { var self = this.ptr; if (treeHeight && typeof treeHeight === 'object') treeHeight = treeHeight.ptr; if (treeHeightUnits && typeof treeHeightUnits === 'object') treeHeightUnits = treeHeightUnits.ptr; _emscripten_bind_SIGSpot_setTreeHeight_2(self, treeHeight, treeHeightUnits); -};; +}; -SIGSpot.prototype['setTreeSpecies'] = SIGSpot.prototype.setTreeSpecies = /** @suppress {undefinedVars, duplicate} @this{Object} */function(treeSpecies) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setTreeSpecies'] = SIGSpot.prototype.setTreeSpecies = function(treeSpecies) { var self = this.ptr; if (treeSpecies && typeof treeSpecies === 'object') treeSpecies = treeSpecies.ptr; _emscripten_bind_SIGSpot_setTreeSpecies_1(self, treeSpecies); -};; +}; -SIGSpot.prototype['setWindSpeedAtTwentyFeet'] = SIGSpot.prototype.setWindSpeedAtTwentyFeet = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windSpeedAtTwentyFeet, windSpeedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setWindSpeedAtTwentyFeet'] = SIGSpot.prototype.setWindSpeedAtTwentyFeet = function(windSpeedAtTwentyFeet, windSpeedUnits) { var self = this.ptr; if (windSpeedAtTwentyFeet && typeof windSpeedAtTwentyFeet === 'object') windSpeedAtTwentyFeet = windSpeedAtTwentyFeet.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; _emscripten_bind_SIGSpot_setWindSpeedAtTwentyFeet_2(self, windSpeedAtTwentyFeet, windSpeedUnits); -};; +}; -SIGSpot.prototype['setWindSpeed'] = SIGSpot.prototype.setWindSpeed = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windSpeed, windSpeedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setWindSpeed'] = SIGSpot.prototype.setWindSpeed = function(windSpeed, windSpeedUnits) { var self = this.ptr; if (windSpeed && typeof windSpeed === 'object') windSpeed = windSpeed.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; _emscripten_bind_SIGSpot_setWindSpeed_2(self, windSpeed, windSpeedUnits); -};; +}; -SIGSpot.prototype['setWindSpeedAndWindHeightInputMode'] = SIGSpot.prototype.setWindSpeedAndWindHeightInputMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windSpeed, windSpeedUnits, windHeightInputMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setWindSpeedAndWindHeightInputMode'] = SIGSpot.prototype.setWindSpeedAndWindHeightInputMode = function(windSpeed, windSpeedUnits, windHeightInputMode) { var self = this.ptr; if (windSpeed && typeof windSpeed === 'object') windSpeed = windSpeed.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; if (windHeightInputMode && typeof windHeightInputMode === 'object') windHeightInputMode = windHeightInputMode.ptr; _emscripten_bind_SIGSpot_setWindSpeedAndWindHeightInputMode_3(self, windSpeed, windSpeedUnits, windHeightInputMode); -};; +}; -SIGSpot.prototype['setWindHeightInputMode'] = SIGSpot.prototype.setWindHeightInputMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windHeightInputMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['setWindHeightInputMode'] = SIGSpot.prototype.setWindHeightInputMode = function(windHeightInputMode) { var self = this.ptr; if (windHeightInputMode && typeof windHeightInputMode === 'object') windHeightInputMode = windHeightInputMode.ptr; _emscripten_bind_SIGSpot_setWindHeightInputMode_1(self, windHeightInputMode); -};; +}; -SIGSpot.prototype['updateSpotInputsForBurningPile'] = SIGSpot.prototype.updateSpotInputsForBurningPile = /** @suppress {undefinedVars, duplicate} @this{Object} */function(location, ridgeToValleyDistance, ridgeToValleyDistanceUnits, ridgeToValleyElevation, elevationUnits, downwindCoverHeight, coverHeightUnits, downwindCanopyMode, buringPileFlameHeight, flameHeightUnits, windSpeedAtTwentyFeet, windSpeedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['updateSpotInputsForBurningPile'] = SIGSpot.prototype.updateSpotInputsForBurningPile = function(location, ridgeToValleyDistance, ridgeToValleyDistanceUnits, ridgeToValleyElevation, elevationUnits, downwindCoverHeight, coverHeightUnits, downwindCanopyMode, buringPileFlameHeight, flameHeightUnits, windSpeedAtTwentyFeet, windSpeedUnits) { var self = this.ptr; if (location && typeof location === 'object') location = location.ptr; if (ridgeToValleyDistance && typeof ridgeToValleyDistance === 'object') ridgeToValleyDistance = ridgeToValleyDistance.ptr; @@ -1885,9 +2184,10 @@ SIGSpot.prototype['updateSpotInputsForBurningPile'] = SIGSpot.prototype.updateSp if (windSpeedAtTwentyFeet && typeof windSpeedAtTwentyFeet === 'object') windSpeedAtTwentyFeet = windSpeedAtTwentyFeet.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; _emscripten_bind_SIGSpot_updateSpotInputsForBurningPile_12(self, location, ridgeToValleyDistance, ridgeToValleyDistanceUnits, ridgeToValleyElevation, elevationUnits, downwindCoverHeight, coverHeightUnits, downwindCanopyMode, buringPileFlameHeight, flameHeightUnits, windSpeedAtTwentyFeet, windSpeedUnits); -};; +}; -SIGSpot.prototype['updateSpotInputsForSurfaceFire'] = SIGSpot.prototype.updateSpotInputsForSurfaceFire = /** @suppress {undefinedVars, duplicate} @this{Object} */function(location, ridgeToValleyDistance, ridgeToValleyDistanceUnits, ridgeToValleyElevation, elevationUnits, downwindCoverHeight, coverHeightUnits, downwindCanopyMode, windSpeedAtTwentyFeet, windSpeedUnits, flameLength, flameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['updateSpotInputsForSurfaceFire'] = SIGSpot.prototype.updateSpotInputsForSurfaceFire = function(location, ridgeToValleyDistance, ridgeToValleyDistanceUnits, ridgeToValleyElevation, elevationUnits, downwindCoverHeight, coverHeightUnits, downwindCanopyMode, windSpeedAtTwentyFeet, windSpeedUnits, flameLength, flameLengthUnits) { var self = this.ptr; if (location && typeof location === 'object') location = location.ptr; if (ridgeToValleyDistance && typeof ridgeToValleyDistance === 'object') ridgeToValleyDistance = ridgeToValleyDistance.ptr; @@ -1902,9 +2202,10 @@ SIGSpot.prototype['updateSpotInputsForSurfaceFire'] = SIGSpot.prototype.updateSp if (flameLength && typeof flameLength === 'object') flameLength = flameLength.ptr; if (flameLengthUnits && typeof flameLengthUnits === 'object') flameLengthUnits = flameLengthUnits.ptr; _emscripten_bind_SIGSpot_updateSpotInputsForSurfaceFire_12(self, location, ridgeToValleyDistance, ridgeToValleyDistanceUnits, ridgeToValleyElevation, elevationUnits, downwindCoverHeight, coverHeightUnits, downwindCanopyMode, windSpeedAtTwentyFeet, windSpeedUnits, flameLength, flameLengthUnits); -};; +}; -SIGSpot.prototype['updateSpotInputsForTorchingTrees'] = SIGSpot.prototype.updateSpotInputsForTorchingTrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function(location, ridgeToValleyDistance, ridgeToValleyDistanceUnits, ridgeToValleyElevation, elevationUnits, downwindCoverHeight, coverHeightUnits, downwindCanopyMode, torchingTrees, DBH, DBHUnits, treeHeight, treeHeightUnits, treeSpecies, windSpeedAtTwentyFeet, windSpeedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['updateSpotInputsForTorchingTrees'] = SIGSpot.prototype.updateSpotInputsForTorchingTrees = function(location, ridgeToValleyDistance, ridgeToValleyDistanceUnits, ridgeToValleyElevation, elevationUnits, downwindCoverHeight, coverHeightUnits, downwindCanopyMode, torchingTrees, DBH, DBHUnits, treeHeight, treeHeightUnits, treeSpecies, windSpeedAtTwentyFeet, windSpeedUnits) { var self = this.ptr; if (location && typeof location === 'object') location = location.ptr; if (ridgeToValleyDistance && typeof ridgeToValleyDistance === 'object') ridgeToValleyDistance = ridgeToValleyDistance.ptr; @@ -1923,62 +2224,74 @@ SIGSpot.prototype['updateSpotInputsForTorchingTrees'] = SIGSpot.prototype.update if (windSpeedAtTwentyFeet && typeof windSpeedAtTwentyFeet === 'object') windSpeedAtTwentyFeet = windSpeedAtTwentyFeet.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; _emscripten_bind_SIGSpot_updateSpotInputsForTorchingTrees_16(self, location, ridgeToValleyDistance, ridgeToValleyDistanceUnits, ridgeToValleyElevation, elevationUnits, downwindCoverHeight, coverHeightUnits, downwindCanopyMode, torchingTrees, DBH, DBHUnits, treeHeight, treeHeightUnits, treeSpecies, windSpeedAtTwentyFeet, windSpeedUnits); -};; +}; + - SIGSpot.prototype['__destroy__'] = SIGSpot.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSpot.prototype['__destroy__'] = SIGSpot.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SIGSpot___destroy___0(self); }; -// SIGFuelModels -/** @suppress {undefinedVars, duplicate} @this{Object} */function SIGFuelModels(rhs) { + +// Interface: SIGFuelModels + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SIGFuelModels(rhs) { if (rhs && typeof rhs === 'object') rhs = rhs.ptr; if (rhs === undefined) { this.ptr = _emscripten_bind_SIGFuelModels_SIGFuelModels_0(); getCache(SIGFuelModels)[this.ptr] = this;return } this.ptr = _emscripten_bind_SIGFuelModels_SIGFuelModels_1(rhs); getCache(SIGFuelModels)[this.ptr] = this; -};; +}; + SIGFuelModels.prototype = Object.create(WrapperObject.prototype); SIGFuelModels.prototype.constructor = SIGFuelModels; SIGFuelModels.prototype.__class__ = SIGFuelModels; SIGFuelModels.__cache__ = {}; Module['SIGFuelModels'] = SIGFuelModels; - -SIGFuelModels.prototype['equal'] = SIGFuelModels.prototype.equal = /** @suppress {undefinedVars, duplicate} @this{Object} */function(rhs) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['equal'] = SIGFuelModels.prototype.equal = function(rhs) { var self = this.ptr; if (rhs && typeof rhs === 'object') rhs = rhs.ptr; return wrapPointer(_emscripten_bind_SIGFuelModels_equal_1(self, rhs), SIGFuelModels); -};; +}; -SIGFuelModels.prototype['clearCustomFuelModel'] = SIGFuelModels.prototype.clearCustomFuelModel = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['clearCustomFuelModel'] = SIGFuelModels.prototype.clearCustomFuelModel = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return !!(_emscripten_bind_SIGFuelModels_clearCustomFuelModel_1(self, fuelModelNumber)); -};; +}; -SIGFuelModels.prototype['getIsDynamic'] = SIGFuelModels.prototype.getIsDynamic = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getIsDynamic'] = SIGFuelModels.prototype.getIsDynamic = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return !!(_emscripten_bind_SIGFuelModels_getIsDynamic_1(self, fuelModelNumber)); -};; +}; -SIGFuelModels.prototype['isAllFuelLoadZero'] = SIGFuelModels.prototype.isAllFuelLoadZero = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['isAllFuelLoadZero'] = SIGFuelModels.prototype.isAllFuelLoadZero = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return !!(_emscripten_bind_SIGFuelModels_isAllFuelLoadZero_1(self, fuelModelNumber)); -};; +}; -SIGFuelModels.prototype['isFuelModelDefined'] = SIGFuelModels.prototype.isFuelModelDefined = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['isFuelModelDefined'] = SIGFuelModels.prototype.isFuelModelDefined = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return !!(_emscripten_bind_SIGFuelModels_isFuelModelDefined_1(self, fuelModelNumber)); -};; +}; -SIGFuelModels.prototype['isFuelModelReserved'] = SIGFuelModels.prototype.isFuelModelReserved = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['isFuelModelReserved'] = SIGFuelModels.prototype.isFuelModelReserved = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return !!(_emscripten_bind_SIGFuelModels_isFuelModelReserved_1(self, fuelModelNumber)); -};; +}; -SIGFuelModels.prototype['setCustomFuelModel'] = SIGFuelModels.prototype.setCustomFuelModel = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, code, name, fuelBedDepth, lengthUnits, moistureOfExtinctionDead, moistureUnits, heatOfCombustionDead, heatOfCombustionLive, heatOfCombustionUnits, fuelLoadOneHour, fuelLoadTenHour, fuelLoadHundredHour, fuelLoadLiveHerbaceous, fuelLoadLiveWoody, loadingUnits, savrOneHour, savrLiveHerbaceous, savrLiveWoody, savrUnits, isDynamic) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['setCustomFuelModel'] = SIGFuelModels.prototype.setCustomFuelModel = function(fuelModelNumber, code, name, fuelBedDepth, lengthUnits, moistureOfExtinctionDead, moistureUnits, heatOfCombustionDead, heatOfCombustionLive, heatOfCombustionUnits, fuelLoadOneHour, fuelLoadTenHour, fuelLoadHundredHour, fuelLoadLiveHerbaceous, fuelLoadLiveWoody, loadingUnits, savrOneHour, savrLiveHerbaceous, savrLiveWoody, savrUnits, isDynamic) { var self = this.ptr; ensureCache.prepare(); if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; @@ -2005,1433 +2318,1665 @@ SIGFuelModels.prototype['setCustomFuelModel'] = SIGFuelModels.prototype.setCusto if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; if (isDynamic && typeof isDynamic === 'object') isDynamic = isDynamic.ptr; return !!(_emscripten_bind_SIGFuelModels_setCustomFuelModel_21(self, fuelModelNumber, code, name, fuelBedDepth, lengthUnits, moistureOfExtinctionDead, moistureUnits, heatOfCombustionDead, heatOfCombustionLive, heatOfCombustionUnits, fuelLoadOneHour, fuelLoadTenHour, fuelLoadHundredHour, fuelLoadLiveHerbaceous, fuelLoadLiveWoody, loadingUnits, savrOneHour, savrLiveHerbaceous, savrLiveWoody, savrUnits, isDynamic)); -};; +}; -SIGFuelModels.prototype['getFuelCode'] = SIGFuelModels.prototype.getFuelCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getFuelCode'] = SIGFuelModels.prototype.getFuelCode = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return UTF8ToString(_emscripten_bind_SIGFuelModels_getFuelCode_1(self, fuelModelNumber)); -};; +}; -SIGFuelModels.prototype['getFuelName'] = SIGFuelModels.prototype.getFuelName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getFuelName'] = SIGFuelModels.prototype.getFuelName = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return UTF8ToString(_emscripten_bind_SIGFuelModels_getFuelName_1(self, fuelModelNumber)); -};; +}; -SIGFuelModels.prototype['getFuelLoadHundredHour'] = SIGFuelModels.prototype.getFuelLoadHundredHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getFuelLoadHundredHour'] = SIGFuelModels.prototype.getFuelLoadHundredHour = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGFuelModels_getFuelLoadHundredHour_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGFuelModels.prototype['getFuelLoadLiveHerbaceous'] = SIGFuelModels.prototype.getFuelLoadLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getFuelLoadLiveHerbaceous'] = SIGFuelModels.prototype.getFuelLoadLiveHerbaceous = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGFuelModels_getFuelLoadLiveHerbaceous_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGFuelModels.prototype['getFuelLoadLiveWoody'] = SIGFuelModels.prototype.getFuelLoadLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getFuelLoadLiveWoody'] = SIGFuelModels.prototype.getFuelLoadLiveWoody = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGFuelModels_getFuelLoadLiveWoody_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGFuelModels.prototype['getFuelLoadOneHour'] = SIGFuelModels.prototype.getFuelLoadOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getFuelLoadOneHour'] = SIGFuelModels.prototype.getFuelLoadOneHour = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGFuelModels_getFuelLoadOneHour_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGFuelModels.prototype['getFuelLoadTenHour'] = SIGFuelModels.prototype.getFuelLoadTenHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getFuelLoadTenHour'] = SIGFuelModels.prototype.getFuelLoadTenHour = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGFuelModels_getFuelLoadTenHour_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGFuelModels.prototype['getFuelbedDepth'] = SIGFuelModels.prototype.getFuelbedDepth = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getFuelbedDepth'] = SIGFuelModels.prototype.getFuelbedDepth = function(fuelModelNumber, lengthUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGFuelModels_getFuelbedDepth_2(self, fuelModelNumber, lengthUnits); -};; +}; -SIGFuelModels.prototype['getHeatOfCombustionDead'] = SIGFuelModels.prototype.getHeatOfCombustionDead = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, heatOfCombustionUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getHeatOfCombustionDead'] = SIGFuelModels.prototype.getHeatOfCombustionDead = function(fuelModelNumber, heatOfCombustionUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (heatOfCombustionUnits && typeof heatOfCombustionUnits === 'object') heatOfCombustionUnits = heatOfCombustionUnits.ptr; return _emscripten_bind_SIGFuelModels_getHeatOfCombustionDead_2(self, fuelModelNumber, heatOfCombustionUnits); -};; +}; -SIGFuelModels.prototype['getMoistureOfExtinctionDead'] = SIGFuelModels.prototype.getMoistureOfExtinctionDead = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getMoistureOfExtinctionDead'] = SIGFuelModels.prototype.getMoistureOfExtinctionDead = function(fuelModelNumber, moistureUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGFuelModels_getMoistureOfExtinctionDead_2(self, fuelModelNumber, moistureUnits); -};; +}; -SIGFuelModels.prototype['getSavrLiveHerbaceous'] = SIGFuelModels.prototype.getSavrLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getSavrLiveHerbaceous'] = SIGFuelModels.prototype.getSavrLiveHerbaceous = function(fuelModelNumber, savrUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGFuelModels_getSavrLiveHerbaceous_2(self, fuelModelNumber, savrUnits); -};; +}; -SIGFuelModels.prototype['getSavrLiveWoody'] = SIGFuelModels.prototype.getSavrLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getSavrLiveWoody'] = SIGFuelModels.prototype.getSavrLiveWoody = function(fuelModelNumber, savrUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGFuelModels_getSavrLiveWoody_2(self, fuelModelNumber, savrUnits); -};; +}; -SIGFuelModels.prototype['getSavrOneHour'] = SIGFuelModels.prototype.getSavrOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getSavrOneHour'] = SIGFuelModels.prototype.getSavrOneHour = function(fuelModelNumber, savrUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGFuelModels_getSavrOneHour_2(self, fuelModelNumber, savrUnits); -};; +}; -SIGFuelModels.prototype['getHeatOfCombustionLive'] = SIGFuelModels.prototype.getHeatOfCombustionLive = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, heatOfCombustionUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['getHeatOfCombustionLive'] = SIGFuelModels.prototype.getHeatOfCombustionLive = function(fuelModelNumber, heatOfCombustionUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (heatOfCombustionUnits && typeof heatOfCombustionUnits === 'object') heatOfCombustionUnits = heatOfCombustionUnits.ptr; return _emscripten_bind_SIGFuelModels_getHeatOfCombustionLive_2(self, fuelModelNumber, heatOfCombustionUnits); -};; +}; - SIGFuelModels.prototype['__destroy__'] = SIGFuelModels.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFuelModels.prototype['__destroy__'] = SIGFuelModels.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SIGFuelModels___destroy___0(self); }; -// SIGSurface -/** @suppress {undefinedVars, duplicate} @this{Object} */function SIGSurface(fuelModels) { + +// Interface: SIGSurface + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SIGSurface(fuelModels) { if (fuelModels && typeof fuelModels === 'object') fuelModels = fuelModels.ptr; this.ptr = _emscripten_bind_SIGSurface_SIGSurface_1(fuelModels); getCache(SIGSurface)[this.ptr] = this; -};; +}; + SIGSurface.prototype = Object.create(WrapperObject.prototype); SIGSurface.prototype.constructor = SIGSurface; SIGSurface.prototype.__class__ = SIGSurface; SIGSurface.__cache__ = {}; Module['SIGSurface'] = SIGSurface; - -SIGSurface.prototype['getAspenFireSeverity'] = SIGSurface.prototype.getAspenFireSeverity = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAspenFireSeverity'] = SIGSurface.prototype.getAspenFireSeverity = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getAspenFireSeverity_0(self); -};; +}; -SIGSurface.prototype['getChaparralFuelType'] = SIGSurface.prototype.getChaparralFuelType = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralFuelType'] = SIGSurface.prototype.getChaparralFuelType = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getChaparralFuelType_0(self); -};; +}; -SIGSurface.prototype['getMoistureInputMode'] = SIGSurface.prototype.getMoistureInputMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureInputMode'] = SIGSurface.prototype.getMoistureInputMode = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getMoistureInputMode_0(self); -};; +}; -SIGSurface.prototype['getWindAdjustmentFactorCalculationMethod'] = SIGSurface.prototype.getWindAdjustmentFactorCalculationMethod = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getWindAdjustmentFactorCalculationMethod'] = SIGSurface.prototype.getWindAdjustmentFactorCalculationMethod = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getWindAdjustmentFactorCalculationMethod_0(self); -};; +}; -SIGSurface.prototype['getWindAndSpreadOrientationMode'] = SIGSurface.prototype.getWindAndSpreadOrientationMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getWindAndSpreadOrientationMode'] = SIGSurface.prototype.getWindAndSpreadOrientationMode = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getWindAndSpreadOrientationMode_0(self); -};; +}; -SIGSurface.prototype['getWindHeightInputMode'] = SIGSurface.prototype.getWindHeightInputMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getWindHeightInputMode'] = SIGSurface.prototype.getWindHeightInputMode = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getWindHeightInputMode_0(self); -};; +}; -SIGSurface.prototype['getWindUpslopeAlignmentMode'] = SIGSurface.prototype.getWindUpslopeAlignmentMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getWindUpslopeAlignmentMode'] = SIGSurface.prototype.getWindUpslopeAlignmentMode = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getWindUpslopeAlignmentMode_0(self); -};; +}; -SIGSurface.prototype['getSurfaceRunInDirectionOf'] = SIGSurface.prototype.getSurfaceRunInDirectionOf = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getSurfaceRunInDirectionOf'] = SIGSurface.prototype.getSurfaceRunInDirectionOf = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getSurfaceRunInDirectionOf_0(self); -};; +}; -SIGSurface.prototype['getIsMoistureScenarioDefinedByIndex'] = SIGSurface.prototype.getIsMoistureScenarioDefinedByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getIsMoistureScenarioDefinedByIndex'] = SIGSurface.prototype.getIsMoistureScenarioDefinedByIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return !!(_emscripten_bind_SIGSurface_getIsMoistureScenarioDefinedByIndex_1(self, index)); -};; +}; -SIGSurface.prototype['getIsMoistureScenarioDefinedByName'] = SIGSurface.prototype.getIsMoistureScenarioDefinedByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getIsMoistureScenarioDefinedByName'] = SIGSurface.prototype.getIsMoistureScenarioDefinedByName = function(name) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); return !!(_emscripten_bind_SIGSurface_getIsMoistureScenarioDefinedByName_1(self, name)); -};; +}; -SIGSurface.prototype['getIsUsingChaparral'] = SIGSurface.prototype.getIsUsingChaparral = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getIsUsingChaparral'] = SIGSurface.prototype.getIsUsingChaparral = function() { var self = this.ptr; return !!(_emscripten_bind_SIGSurface_getIsUsingChaparral_0(self)); -};; +}; -SIGSurface.prototype['getIsUsingPalmettoGallberry'] = SIGSurface.prototype.getIsUsingPalmettoGallberry = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getIsUsingPalmettoGallberry'] = SIGSurface.prototype.getIsUsingPalmettoGallberry = function() { var self = this.ptr; return !!(_emscripten_bind_SIGSurface_getIsUsingPalmettoGallberry_0(self)); -};; +}; -SIGSurface.prototype['getIsUsingWesternAspen'] = SIGSurface.prototype.getIsUsingWesternAspen = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getIsUsingWesternAspen'] = SIGSurface.prototype.getIsUsingWesternAspen = function() { var self = this.ptr; return !!(_emscripten_bind_SIGSurface_getIsUsingWesternAspen_0(self)); -};; +}; -SIGSurface.prototype['isAllFuelLoadZero'] = SIGSurface.prototype.isAllFuelLoadZero = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['isAllFuelLoadZero'] = SIGSurface.prototype.isAllFuelLoadZero = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return !!(_emscripten_bind_SIGSurface_isAllFuelLoadZero_1(self, fuelModelNumber)); -};; +}; -SIGSurface.prototype['isFuelDynamic'] = SIGSurface.prototype.isFuelDynamic = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['isFuelDynamic'] = SIGSurface.prototype.isFuelDynamic = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return !!(_emscripten_bind_SIGSurface_isFuelDynamic_1(self, fuelModelNumber)); -};; +}; -SIGSurface.prototype['isFuelModelDefined'] = SIGSurface.prototype.isFuelModelDefined = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['isFuelModelDefined'] = SIGSurface.prototype.isFuelModelDefined = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return !!(_emscripten_bind_SIGSurface_isFuelModelDefined_1(self, fuelModelNumber)); -};; +}; -SIGSurface.prototype['isFuelModelReserved'] = SIGSurface.prototype.isFuelModelReserved = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['isFuelModelReserved'] = SIGSurface.prototype.isFuelModelReserved = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return !!(_emscripten_bind_SIGSurface_isFuelModelReserved_1(self, fuelModelNumber)); -};; +}; -SIGSurface.prototype['isMoistureClassInputNeededForCurrentFuelModel'] = SIGSurface.prototype.isMoistureClassInputNeededForCurrentFuelModel = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureClass) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['isMoistureClassInputNeededForCurrentFuelModel'] = SIGSurface.prototype.isMoistureClassInputNeededForCurrentFuelModel = function(moistureClass) { var self = this.ptr; if (moistureClass && typeof moistureClass === 'object') moistureClass = moistureClass.ptr; return !!(_emscripten_bind_SIGSurface_isMoistureClassInputNeededForCurrentFuelModel_1(self, moistureClass)); -};; +}; -SIGSurface.prototype['isUsingTwoFuelModels'] = SIGSurface.prototype.isUsingTwoFuelModels = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['isUsingTwoFuelModels'] = SIGSurface.prototype.isUsingTwoFuelModels = function() { var self = this.ptr; return !!(_emscripten_bind_SIGSurface_isUsingTwoFuelModels_0(self)); -};; +}; -SIGSurface.prototype['setCurrentMoistureScenarioByIndex'] = SIGSurface.prototype.setCurrentMoistureScenarioByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureScenarioIndex) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setCurrentMoistureScenarioByIndex'] = SIGSurface.prototype.setCurrentMoistureScenarioByIndex = function(moistureScenarioIndex) { var self = this.ptr; if (moistureScenarioIndex && typeof moistureScenarioIndex === 'object') moistureScenarioIndex = moistureScenarioIndex.ptr; return !!(_emscripten_bind_SIGSurface_setCurrentMoistureScenarioByIndex_1(self, moistureScenarioIndex)); -};; +}; -SIGSurface.prototype['setCurrentMoistureScenarioByName'] = SIGSurface.prototype.setCurrentMoistureScenarioByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureScenarioName) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setCurrentMoistureScenarioByName'] = SIGSurface.prototype.setCurrentMoistureScenarioByName = function(moistureScenarioName) { var self = this.ptr; ensureCache.prepare(); if (moistureScenarioName && typeof moistureScenarioName === 'object') moistureScenarioName = moistureScenarioName.ptr; else moistureScenarioName = ensureString(moistureScenarioName); return !!(_emscripten_bind_SIGSurface_setCurrentMoistureScenarioByName_1(self, moistureScenarioName)); -};; +}; -SIGSurface.prototype['calculateFlameLength'] = SIGSurface.prototype.calculateFlameLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firelineIntensity, firelineIntensityUnits, flameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['calculateFlameLength'] = SIGSurface.prototype.calculateFlameLength = function(firelineIntensity, firelineIntensityUnits, flameLengthUnits) { var self = this.ptr; if (firelineIntensity && typeof firelineIntensity === 'object') firelineIntensity = firelineIntensity.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; if (flameLengthUnits && typeof flameLengthUnits === 'object') flameLengthUnits = flameLengthUnits.ptr; return _emscripten_bind_SIGSurface_calculateFlameLength_3(self, firelineIntensity, firelineIntensityUnits, flameLengthUnits); -};; +}; -SIGSurface.prototype['getAgeOfRough'] = SIGSurface.prototype.getAgeOfRough = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAgeOfRough'] = SIGSurface.prototype.getAgeOfRough = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getAgeOfRough_0(self); -};; +}; -SIGSurface.prototype['getAspect'] = SIGSurface.prototype.getAspect = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAspect'] = SIGSurface.prototype.getAspect = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getAspect_0(self); -};; +}; -SIGSurface.prototype['getAspenCuringLevel'] = SIGSurface.prototype.getAspenCuringLevel = /** @suppress {undefinedVars, duplicate} @this{Object} */function(curingLevelUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAspenCuringLevel'] = SIGSurface.prototype.getAspenCuringLevel = function(curingLevelUnits) { var self = this.ptr; if (curingLevelUnits && typeof curingLevelUnits === 'object') curingLevelUnits = curingLevelUnits.ptr; return _emscripten_bind_SIGSurface_getAspenCuringLevel_1(self, curingLevelUnits); -};; +}; -SIGSurface.prototype['getAspenDBH'] = SIGSurface.prototype.getAspenDBH = /** @suppress {undefinedVars, duplicate} @this{Object} */function(dbhUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAspenDBH'] = SIGSurface.prototype.getAspenDBH = function(dbhUnits) { var self = this.ptr; if (dbhUnits && typeof dbhUnits === 'object') dbhUnits = dbhUnits.ptr; return _emscripten_bind_SIGSurface_getAspenDBH_1(self, dbhUnits); -};; +}; -SIGSurface.prototype['getAspenLoadDeadOneHour'] = SIGSurface.prototype.getAspenLoadDeadOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAspenLoadDeadOneHour'] = SIGSurface.prototype.getAspenLoadDeadOneHour = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getAspenLoadDeadOneHour_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getAspenLoadDeadTenHour'] = SIGSurface.prototype.getAspenLoadDeadTenHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAspenLoadDeadTenHour'] = SIGSurface.prototype.getAspenLoadDeadTenHour = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getAspenLoadDeadTenHour_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getAspenLoadLiveHerbaceous'] = SIGSurface.prototype.getAspenLoadLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAspenLoadLiveHerbaceous'] = SIGSurface.prototype.getAspenLoadLiveHerbaceous = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getAspenLoadLiveHerbaceous_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getAspenLoadLiveWoody'] = SIGSurface.prototype.getAspenLoadLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAspenLoadLiveWoody'] = SIGSurface.prototype.getAspenLoadLiveWoody = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getAspenLoadLiveWoody_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getAspenSavrDeadOneHour'] = SIGSurface.prototype.getAspenSavrDeadOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAspenSavrDeadOneHour'] = SIGSurface.prototype.getAspenSavrDeadOneHour = function(savrUnits) { var self = this.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGSurface_getAspenSavrDeadOneHour_1(self, savrUnits); -};; +}; -SIGSurface.prototype['getAspenSavrDeadTenHour'] = SIGSurface.prototype.getAspenSavrDeadTenHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAspenSavrDeadTenHour'] = SIGSurface.prototype.getAspenSavrDeadTenHour = function(savrUnits) { var self = this.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGSurface_getAspenSavrDeadTenHour_1(self, savrUnits); -};; +}; -SIGSurface.prototype['getAspenSavrLiveHerbaceous'] = SIGSurface.prototype.getAspenSavrLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function(savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAspenSavrLiveHerbaceous'] = SIGSurface.prototype.getAspenSavrLiveHerbaceous = function(savrUnits) { var self = this.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGSurface_getAspenSavrLiveHerbaceous_1(self, savrUnits); -};; +}; -SIGSurface.prototype['getAspenSavrLiveWoody'] = SIGSurface.prototype.getAspenSavrLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function(savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAspenSavrLiveWoody'] = SIGSurface.prototype.getAspenSavrLiveWoody = function(savrUnits) { var self = this.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGSurface_getAspenSavrLiveWoody_1(self, savrUnits); -};; +}; -SIGSurface.prototype['getBackingFirelineIntensity'] = SIGSurface.prototype.getBackingFirelineIntensity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firelineIntensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getBackingFirelineIntensity'] = SIGSurface.prototype.getBackingFirelineIntensity = function(firelineIntensityUnits) { var self = this.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; return _emscripten_bind_SIGSurface_getBackingFirelineIntensity_1(self, firelineIntensityUnits); -};; +}; -SIGSurface.prototype['getBackingFlameLength'] = SIGSurface.prototype.getBackingFlameLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getBackingFlameLength'] = SIGSurface.prototype.getBackingFlameLength = function(flameLengthUnits) { var self = this.ptr; if (flameLengthUnits && typeof flameLengthUnits === 'object') flameLengthUnits = flameLengthUnits.ptr; return _emscripten_bind_SIGSurface_getBackingFlameLength_1(self, flameLengthUnits); -};; +}; -SIGSurface.prototype['getBackingSpreadDistance'] = SIGSurface.prototype.getBackingSpreadDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getBackingSpreadDistance'] = SIGSurface.prototype.getBackingSpreadDistance = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGSurface_getBackingSpreadDistance_1(self, lengthUnits); -};; +}; -SIGSurface.prototype['getBackingSpreadRate'] = SIGSurface.prototype.getBackingSpreadRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spreadRateUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getBackingSpreadRate'] = SIGSurface.prototype.getBackingSpreadRate = function(spreadRateUnits) { var self = this.ptr; if (spreadRateUnits && typeof spreadRateUnits === 'object') spreadRateUnits = spreadRateUnits.ptr; return _emscripten_bind_SIGSurface_getBackingSpreadRate_1(self, spreadRateUnits); -};; +}; -SIGSurface.prototype['getBulkDensity'] = SIGSurface.prototype.getBulkDensity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(densityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getBulkDensity'] = SIGSurface.prototype.getBulkDensity = function(densityUnits) { var self = this.ptr; if (densityUnits && typeof densityUnits === 'object') densityUnits = densityUnits.ptr; return _emscripten_bind_SIGSurface_getBulkDensity_1(self, densityUnits); -};; +}; -SIGSurface.prototype['getCanopyCover'] = SIGSurface.prototype.getCanopyCover = /** @suppress {undefinedVars, duplicate} @this{Object} */function(coverUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getCanopyCover'] = SIGSurface.prototype.getCanopyCover = function(coverUnits) { var self = this.ptr; if (coverUnits && typeof coverUnits === 'object') coverUnits = coverUnits.ptr; return _emscripten_bind_SIGSurface_getCanopyCover_1(self, coverUnits); -};; +}; -SIGSurface.prototype['getCanopyHeight'] = SIGSurface.prototype.getCanopyHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(canopyHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getCanopyHeight'] = SIGSurface.prototype.getCanopyHeight = function(canopyHeightUnits) { var self = this.ptr; if (canopyHeightUnits && typeof canopyHeightUnits === 'object') canopyHeightUnits = canopyHeightUnits.ptr; return _emscripten_bind_SIGSurface_getCanopyHeight_1(self, canopyHeightUnits); -};; +}; -SIGSurface.prototype['getChaparralAge'] = SIGSurface.prototype.getChaparralAge = /** @suppress {undefinedVars, duplicate} @this{Object} */function(ageUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralAge'] = SIGSurface.prototype.getChaparralAge = function(ageUnits) { var self = this.ptr; if (ageUnits && typeof ageUnits === 'object') ageUnits = ageUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralAge_1(self, ageUnits); -};; +}; -SIGSurface.prototype['getChaparralDaysSinceMayFirst'] = SIGSurface.prototype.getChaparralDaysSinceMayFirst = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralDaysSinceMayFirst'] = SIGSurface.prototype.getChaparralDaysSinceMayFirst = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getChaparralDaysSinceMayFirst_0(self); -};; +}; -SIGSurface.prototype['getChaparralDeadFuelFraction'] = SIGSurface.prototype.getChaparralDeadFuelFraction = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralDeadFuelFraction'] = SIGSurface.prototype.getChaparralDeadFuelFraction = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getChaparralDeadFuelFraction_0(self); -};; +}; -SIGSurface.prototype['getChaparralDeadMoistureOfExtinction'] = SIGSurface.prototype.getChaparralDeadMoistureOfExtinction = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralDeadMoistureOfExtinction'] = SIGSurface.prototype.getChaparralDeadMoistureOfExtinction = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralDeadMoistureOfExtinction_1(self, moistureUnits); -};; +}; -SIGSurface.prototype['getChaparralDensity'] = SIGSurface.prototype.getChaparralDensity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lifeState, sizeClass, densityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralDensity'] = SIGSurface.prototype.getChaparralDensity = function(lifeState, sizeClass, densityUnits) { var self = this.ptr; if (lifeState && typeof lifeState === 'object') lifeState = lifeState.ptr; if (sizeClass && typeof sizeClass === 'object') sizeClass = sizeClass.ptr; if (densityUnits && typeof densityUnits === 'object') densityUnits = densityUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralDensity_3(self, lifeState, sizeClass, densityUnits); -};; +}; -SIGSurface.prototype['getChaparralFuelBedDepth'] = SIGSurface.prototype.getChaparralFuelBedDepth = /** @suppress {undefinedVars, duplicate} @this{Object} */function(depthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralFuelBedDepth'] = SIGSurface.prototype.getChaparralFuelBedDepth = function(depthUnits) { var self = this.ptr; if (depthUnits && typeof depthUnits === 'object') depthUnits = depthUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralFuelBedDepth_1(self, depthUnits); -};; +}; -SIGSurface.prototype['getChaparralFuelDeadLoadFraction'] = SIGSurface.prototype.getChaparralFuelDeadLoadFraction = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralFuelDeadLoadFraction'] = SIGSurface.prototype.getChaparralFuelDeadLoadFraction = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getChaparralFuelDeadLoadFraction_0(self); -};; +}; -SIGSurface.prototype['getChaparralHeatOfCombustion'] = SIGSurface.prototype.getChaparralHeatOfCombustion = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lifeState, sizeClass, heatOfCombustionUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralHeatOfCombustion'] = SIGSurface.prototype.getChaparralHeatOfCombustion = function(lifeState, sizeClass, heatOfCombustionUnits) { var self = this.ptr; if (lifeState && typeof lifeState === 'object') lifeState = lifeState.ptr; if (sizeClass && typeof sizeClass === 'object') sizeClass = sizeClass.ptr; if (heatOfCombustionUnits && typeof heatOfCombustionUnits === 'object') heatOfCombustionUnits = heatOfCombustionUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralHeatOfCombustion_3(self, lifeState, sizeClass, heatOfCombustionUnits); -};; +}; -SIGSurface.prototype['getChaparralLiveMoistureOfExtinction'] = SIGSurface.prototype.getChaparralLiveMoistureOfExtinction = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralLiveMoistureOfExtinction'] = SIGSurface.prototype.getChaparralLiveMoistureOfExtinction = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralLiveMoistureOfExtinction_1(self, moistureUnits); -};; +}; -SIGSurface.prototype['getChaparralLoadDeadHalfInchToLessThanOneInch'] = SIGSurface.prototype.getChaparralLoadDeadHalfInchToLessThanOneInch = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralLoadDeadHalfInchToLessThanOneInch'] = SIGSurface.prototype.getChaparralLoadDeadHalfInchToLessThanOneInch = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralLoadDeadHalfInchToLessThanOneInch_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getChaparralLoadDeadLessThanQuarterInch'] = SIGSurface.prototype.getChaparralLoadDeadLessThanQuarterInch = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralLoadDeadLessThanQuarterInch'] = SIGSurface.prototype.getChaparralLoadDeadLessThanQuarterInch = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralLoadDeadLessThanQuarterInch_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getChaparralLoadDeadOneInchToThreeInch'] = SIGSurface.prototype.getChaparralLoadDeadOneInchToThreeInch = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralLoadDeadOneInchToThreeInch'] = SIGSurface.prototype.getChaparralLoadDeadOneInchToThreeInch = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralLoadDeadOneInchToThreeInch_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getChaparralLoadDeadQuarterInchToLessThanHalfInch'] = SIGSurface.prototype.getChaparralLoadDeadQuarterInchToLessThanHalfInch = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralLoadDeadQuarterInchToLessThanHalfInch'] = SIGSurface.prototype.getChaparralLoadDeadQuarterInchToLessThanHalfInch = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralLoadDeadQuarterInchToLessThanHalfInch_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getChaparralLoadLiveHalfInchToLessThanOneInch'] = SIGSurface.prototype.getChaparralLoadLiveHalfInchToLessThanOneInch = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralLoadLiveHalfInchToLessThanOneInch'] = SIGSurface.prototype.getChaparralLoadLiveHalfInchToLessThanOneInch = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralLoadLiveHalfInchToLessThanOneInch_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getChaparralLoadLiveLeaves'] = SIGSurface.prototype.getChaparralLoadLiveLeaves = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralLoadLiveLeaves'] = SIGSurface.prototype.getChaparralLoadLiveLeaves = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralLoadLiveLeaves_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getChaparralLoadLiveOneInchToThreeInch'] = SIGSurface.prototype.getChaparralLoadLiveOneInchToThreeInch = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralLoadLiveOneInchToThreeInch'] = SIGSurface.prototype.getChaparralLoadLiveOneInchToThreeInch = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralLoadLiveOneInchToThreeInch_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getChaparralLoadLiveQuarterInchToLessThanHalfInch'] = SIGSurface.prototype.getChaparralLoadLiveQuarterInchToLessThanHalfInch = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralLoadLiveQuarterInchToLessThanHalfInch'] = SIGSurface.prototype.getChaparralLoadLiveQuarterInchToLessThanHalfInch = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralLoadLiveQuarterInchToLessThanHalfInch_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getChaparralLoadLiveStemsLessThanQuaterInch'] = SIGSurface.prototype.getChaparralLoadLiveStemsLessThanQuaterInch = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralLoadLiveStemsLessThanQuaterInch'] = SIGSurface.prototype.getChaparralLoadLiveStemsLessThanQuaterInch = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralLoadLiveStemsLessThanQuaterInch_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getChaparralMoisture'] = SIGSurface.prototype.getChaparralMoisture = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lifeState, sizeClass, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralMoisture'] = SIGSurface.prototype.getChaparralMoisture = function(lifeState, sizeClass, moistureUnits) { var self = this.ptr; if (lifeState && typeof lifeState === 'object') lifeState = lifeState.ptr; if (sizeClass && typeof sizeClass === 'object') sizeClass = sizeClass.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralMoisture_3(self, lifeState, sizeClass, moistureUnits); -};; +}; -SIGSurface.prototype['getChaparralTotalDeadFuelLoad'] = SIGSurface.prototype.getChaparralTotalDeadFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralTotalDeadFuelLoad'] = SIGSurface.prototype.getChaparralTotalDeadFuelLoad = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralTotalDeadFuelLoad_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getChaparralTotalFuelLoad'] = SIGSurface.prototype.getChaparralTotalFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralTotalFuelLoad'] = SIGSurface.prototype.getChaparralTotalFuelLoad = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralTotalFuelLoad_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getChaparralTotalLiveFuelLoad'] = SIGSurface.prototype.getChaparralTotalLiveFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getChaparralTotalLiveFuelLoad'] = SIGSurface.prototype.getChaparralTotalLiveFuelLoad = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getChaparralTotalLiveFuelLoad_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getCharacteristicMoistureByLifeState'] = SIGSurface.prototype.getCharacteristicMoistureByLifeState = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lifeState, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getCharacteristicMoistureByLifeState'] = SIGSurface.prototype.getCharacteristicMoistureByLifeState = function(lifeState, moistureUnits) { var self = this.ptr; if (lifeState && typeof lifeState === 'object') lifeState = lifeState.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getCharacteristicMoistureByLifeState_2(self, lifeState, moistureUnits); -};; +}; -SIGSurface.prototype['getCharacteristicMoistureDead'] = SIGSurface.prototype.getCharacteristicMoistureDead = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getCharacteristicMoistureDead'] = SIGSurface.prototype.getCharacteristicMoistureDead = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getCharacteristicMoistureDead_1(self, moistureUnits); -};; +}; -SIGSurface.prototype['getCharacteristicMoistureLive'] = SIGSurface.prototype.getCharacteristicMoistureLive = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getCharacteristicMoistureLive'] = SIGSurface.prototype.getCharacteristicMoistureLive = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getCharacteristicMoistureLive_1(self, moistureUnits); -};; +}; -SIGSurface.prototype['getCharacteristicSAVR'] = SIGSurface.prototype.getCharacteristicSAVR = /** @suppress {undefinedVars, duplicate} @this{Object} */function(savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getCharacteristicSAVR'] = SIGSurface.prototype.getCharacteristicSAVR = function(savrUnits) { var self = this.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGSurface_getCharacteristicSAVR_1(self, savrUnits); -};; +}; -SIGSurface.prototype['getCrownRatio'] = SIGSurface.prototype.getCrownRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function(crownRatioUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getCrownRatio'] = SIGSurface.prototype.getCrownRatio = function(crownRatioUnits) { var self = this.ptr; if (crownRatioUnits && typeof crownRatioUnits === 'object') crownRatioUnits = crownRatioUnits.ptr; return _emscripten_bind_SIGSurface_getCrownRatio_1(self, crownRatioUnits); -};; +}; -SIGSurface.prototype['getDirectionOfMaxSpread'] = SIGSurface.prototype.getDirectionOfMaxSpread = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getDirectionOfMaxSpread'] = SIGSurface.prototype.getDirectionOfMaxSpread = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getDirectionOfMaxSpread_0(self); -};; +}; -SIGSurface.prototype['getDirectionOfInterest'] = SIGSurface.prototype.getDirectionOfInterest = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getDirectionOfInterest'] = SIGSurface.prototype.getDirectionOfInterest = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getDirectionOfInterest_0(self); -};; +}; -SIGSurface.prototype['getDirectionOfBacking'] = SIGSurface.prototype.getDirectionOfBacking = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getDirectionOfBacking'] = SIGSurface.prototype.getDirectionOfBacking = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getDirectionOfBacking_0(self); -};; +}; -SIGSurface.prototype['getDirectionOfFlanking'] = SIGSurface.prototype.getDirectionOfFlanking = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getDirectionOfFlanking'] = SIGSurface.prototype.getDirectionOfFlanking = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getDirectionOfFlanking_0(self); -};; +}; -SIGSurface.prototype['getElapsedTime'] = SIGSurface.prototype.getElapsedTime = /** @suppress {undefinedVars, duplicate} @this{Object} */function(timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getElapsedTime'] = SIGSurface.prototype.getElapsedTime = function(timeUnits) { var self = this.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; return _emscripten_bind_SIGSurface_getElapsedTime_1(self, timeUnits); -};; +}; -SIGSurface.prototype['getEllipticalA'] = SIGSurface.prototype.getEllipticalA = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getEllipticalA'] = SIGSurface.prototype.getEllipticalA = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGSurface_getEllipticalA_1(self, lengthUnits); -};; +}; -SIGSurface.prototype['getEllipticalB'] = SIGSurface.prototype.getEllipticalB = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getEllipticalB'] = SIGSurface.prototype.getEllipticalB = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGSurface_getEllipticalB_1(self, lengthUnits); -};; +}; -SIGSurface.prototype['getEllipticalC'] = SIGSurface.prototype.getEllipticalC = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getEllipticalC'] = SIGSurface.prototype.getEllipticalC = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGSurface_getEllipticalC_1(self, lengthUnits); -};; +}; -SIGSurface.prototype['getFireLength'] = SIGSurface.prototype.getFireLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFireLength'] = SIGSurface.prototype.getFireLength = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGSurface_getFireLength_1(self, lengthUnits); -};; +}; -SIGSurface.prototype['getMaxFireWidth'] = SIGSurface.prototype.getMaxFireWidth = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMaxFireWidth'] = SIGSurface.prototype.getMaxFireWidth = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGSurface_getMaxFireWidth_1(self, lengthUnits); -};; +}; -SIGSurface.prototype['getFireArea'] = SIGSurface.prototype.getFireArea = /** @suppress {undefinedVars, duplicate} @this{Object} */function(areaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFireArea'] = SIGSurface.prototype.getFireArea = function(areaUnits) { var self = this.ptr; if (areaUnits && typeof areaUnits === 'object') areaUnits = areaUnits.ptr; return _emscripten_bind_SIGSurface_getFireArea_1(self, areaUnits); -};; +}; -SIGSurface.prototype['getFireEccentricity'] = SIGSurface.prototype.getFireEccentricity = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFireEccentricity'] = SIGSurface.prototype.getFireEccentricity = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getFireEccentricity_0(self); -};; +}; -SIGSurface.prototype['getFireLengthToWidthRatio'] = SIGSurface.prototype.getFireLengthToWidthRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFireLengthToWidthRatio'] = SIGSurface.prototype.getFireLengthToWidthRatio = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getFireLengthToWidthRatio_0(self); -};; +}; -SIGSurface.prototype['getFirePerimeter'] = SIGSurface.prototype.getFirePerimeter = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFirePerimeter'] = SIGSurface.prototype.getFirePerimeter = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGSurface_getFirePerimeter_1(self, lengthUnits); -};; +}; -SIGSurface.prototype['getFirelineIntensity'] = SIGSurface.prototype.getFirelineIntensity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firelineIntensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFirelineIntensity'] = SIGSurface.prototype.getFirelineIntensity = function(firelineIntensityUnits) { var self = this.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; return _emscripten_bind_SIGSurface_getFirelineIntensity_1(self, firelineIntensityUnits); -};; +}; -SIGSurface.prototype['getFirelineIntensityInDirectionOfInterest'] = SIGSurface.prototype.getFirelineIntensityInDirectionOfInterest = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firelineIntensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFirelineIntensityInDirectionOfInterest'] = SIGSurface.prototype.getFirelineIntensityInDirectionOfInterest = function(firelineIntensityUnits) { var self = this.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; return _emscripten_bind_SIGSurface_getFirelineIntensityInDirectionOfInterest_1(self, firelineIntensityUnits); -};; +}; -SIGSurface.prototype['getFlameLength'] = SIGSurface.prototype.getFlameLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFlameLength'] = SIGSurface.prototype.getFlameLength = function(flameLengthUnits) { var self = this.ptr; if (flameLengthUnits && typeof flameLengthUnits === 'object') flameLengthUnits = flameLengthUnits.ptr; return _emscripten_bind_SIGSurface_getFlameLength_1(self, flameLengthUnits); -};; +}; -SIGSurface.prototype['getFlameLengthInDirectionOfInterest'] = SIGSurface.prototype.getFlameLengthInDirectionOfInterest = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFlameLengthInDirectionOfInterest'] = SIGSurface.prototype.getFlameLengthInDirectionOfInterest = function(flameLengthUnits) { var self = this.ptr; if (flameLengthUnits && typeof flameLengthUnits === 'object') flameLengthUnits = flameLengthUnits.ptr; return _emscripten_bind_SIGSurface_getFlameLengthInDirectionOfInterest_1(self, flameLengthUnits); -};; +}; -SIGSurface.prototype['getFlankingFirelineIntensity'] = SIGSurface.prototype.getFlankingFirelineIntensity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firelineIntensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFlankingFirelineIntensity'] = SIGSurface.prototype.getFlankingFirelineIntensity = function(firelineIntensityUnits) { var self = this.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; return _emscripten_bind_SIGSurface_getFlankingFirelineIntensity_1(self, firelineIntensityUnits); -};; +}; -SIGSurface.prototype['getFlankingFlameLength'] = SIGSurface.prototype.getFlankingFlameLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFlankingFlameLength'] = SIGSurface.prototype.getFlankingFlameLength = function(flameLengthUnits) { var self = this.ptr; if (flameLengthUnits && typeof flameLengthUnits === 'object') flameLengthUnits = flameLengthUnits.ptr; return _emscripten_bind_SIGSurface_getFlankingFlameLength_1(self, flameLengthUnits); -};; +}; -SIGSurface.prototype['getFlankingSpreadRate'] = SIGSurface.prototype.getFlankingSpreadRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spreadRateUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFlankingSpreadRate'] = SIGSurface.prototype.getFlankingSpreadRate = function(spreadRateUnits) { var self = this.ptr; if (spreadRateUnits && typeof spreadRateUnits === 'object') spreadRateUnits = spreadRateUnits.ptr; return _emscripten_bind_SIGSurface_getFlankingSpreadRate_1(self, spreadRateUnits); -};; +}; -SIGSurface.prototype['getFlankingSpreadDistance'] = SIGSurface.prototype.getFlankingSpreadDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFlankingSpreadDistance'] = SIGSurface.prototype.getFlankingSpreadDistance = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGSurface_getFlankingSpreadDistance_1(self, lengthUnits); -};; +}; -SIGSurface.prototype['getFuelHeatOfCombustionDead'] = SIGSurface.prototype.getFuelHeatOfCombustionDead = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, heatOfCombustionUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelHeatOfCombustionDead'] = SIGSurface.prototype.getFuelHeatOfCombustionDead = function(fuelModelNumber, heatOfCombustionUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (heatOfCombustionUnits && typeof heatOfCombustionUnits === 'object') heatOfCombustionUnits = heatOfCombustionUnits.ptr; return _emscripten_bind_SIGSurface_getFuelHeatOfCombustionDead_2(self, fuelModelNumber, heatOfCombustionUnits); -};; +}; -SIGSurface.prototype['getFuelHeatOfCombustionLive'] = SIGSurface.prototype.getFuelHeatOfCombustionLive = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, heatOfCombustionUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelHeatOfCombustionLive'] = SIGSurface.prototype.getFuelHeatOfCombustionLive = function(fuelModelNumber, heatOfCombustionUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (heatOfCombustionUnits && typeof heatOfCombustionUnits === 'object') heatOfCombustionUnits = heatOfCombustionUnits.ptr; return _emscripten_bind_SIGSurface_getFuelHeatOfCombustionLive_2(self, fuelModelNumber, heatOfCombustionUnits); -};; +}; -SIGSurface.prototype['getFuelLoadHundredHour'] = SIGSurface.prototype.getFuelLoadHundredHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelLoadHundredHour'] = SIGSurface.prototype.getFuelLoadHundredHour = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getFuelLoadHundredHour_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGSurface.prototype['getFuelLoadLiveHerbaceous'] = SIGSurface.prototype.getFuelLoadLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelLoadLiveHerbaceous'] = SIGSurface.prototype.getFuelLoadLiveHerbaceous = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getFuelLoadLiveHerbaceous_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGSurface.prototype['getFuelLoadLiveWoody'] = SIGSurface.prototype.getFuelLoadLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelLoadLiveWoody'] = SIGSurface.prototype.getFuelLoadLiveWoody = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getFuelLoadLiveWoody_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGSurface.prototype['getFuelLoadOneHour'] = SIGSurface.prototype.getFuelLoadOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelLoadOneHour'] = SIGSurface.prototype.getFuelLoadOneHour = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getFuelLoadOneHour_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGSurface.prototype['getFuelLoadTenHour'] = SIGSurface.prototype.getFuelLoadTenHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelLoadTenHour'] = SIGSurface.prototype.getFuelLoadTenHour = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getFuelLoadTenHour_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGSurface.prototype['getFuelMoistureOfExtinctionDead'] = SIGSurface.prototype.getFuelMoistureOfExtinctionDead = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelMoistureOfExtinctionDead'] = SIGSurface.prototype.getFuelMoistureOfExtinctionDead = function(fuelModelNumber, moistureUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getFuelMoistureOfExtinctionDead_2(self, fuelModelNumber, moistureUnits); -};; +}; -SIGSurface.prototype['getFuelSavrLiveHerbaceous'] = SIGSurface.prototype.getFuelSavrLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelSavrLiveHerbaceous'] = SIGSurface.prototype.getFuelSavrLiveHerbaceous = function(fuelModelNumber, savrUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGSurface_getFuelSavrLiveHerbaceous_2(self, fuelModelNumber, savrUnits); -};; +}; -SIGSurface.prototype['getFuelSavrLiveWoody'] = SIGSurface.prototype.getFuelSavrLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelSavrLiveWoody'] = SIGSurface.prototype.getFuelSavrLiveWoody = function(fuelModelNumber, savrUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGSurface_getFuelSavrLiveWoody_2(self, fuelModelNumber, savrUnits); -};; +}; -SIGSurface.prototype['getFuelSavrOneHour'] = SIGSurface.prototype.getFuelSavrOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelSavrOneHour'] = SIGSurface.prototype.getFuelSavrOneHour = function(fuelModelNumber, savrUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGSurface_getFuelSavrOneHour_2(self, fuelModelNumber, savrUnits); -};; +}; -SIGSurface.prototype['getFuelbedDepth'] = SIGSurface.prototype.getFuelbedDepth = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelbedDepth'] = SIGSurface.prototype.getFuelbedDepth = function(fuelModelNumber, lengthUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGSurface_getFuelbedDepth_2(self, fuelModelNumber, lengthUnits); -};; +}; -SIGSurface.prototype['getHeadingSpreadRate'] = SIGSurface.prototype.getHeadingSpreadRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spreadRateUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getHeadingSpreadRate'] = SIGSurface.prototype.getHeadingSpreadRate = function(spreadRateUnits) { var self = this.ptr; if (spreadRateUnits && typeof spreadRateUnits === 'object') spreadRateUnits = spreadRateUnits.ptr; return _emscripten_bind_SIGSurface_getHeadingSpreadRate_1(self, spreadRateUnits); -};; +}; -SIGSurface.prototype['getHeadingToBackingRatio'] = SIGSurface.prototype.getHeadingToBackingRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getHeadingToBackingRatio'] = SIGSurface.prototype.getHeadingToBackingRatio = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getHeadingToBackingRatio_0(self); -};; +}; -SIGSurface.prototype['getHeatPerUnitArea'] = SIGSurface.prototype.getHeatPerUnitArea = /** @suppress {undefinedVars, duplicate} @this{Object} */function(heatPerUnitAreaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getHeatPerUnitArea'] = SIGSurface.prototype.getHeatPerUnitArea = function(heatPerUnitAreaUnits) { var self = this.ptr; if (heatPerUnitAreaUnits && typeof heatPerUnitAreaUnits === 'object') heatPerUnitAreaUnits = heatPerUnitAreaUnits.ptr; return _emscripten_bind_SIGSurface_getHeatPerUnitArea_1(self, heatPerUnitAreaUnits); -};; +}; -SIGSurface.prototype['getHeatSink'] = SIGSurface.prototype.getHeatSink = /** @suppress {undefinedVars, duplicate} @this{Object} */function(heatSinkUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getHeatSink'] = SIGSurface.prototype.getHeatSink = function(heatSinkUnits) { var self = this.ptr; if (heatSinkUnits && typeof heatSinkUnits === 'object') heatSinkUnits = heatSinkUnits.ptr; return _emscripten_bind_SIGSurface_getHeatSink_1(self, heatSinkUnits); -};; +}; -SIGSurface.prototype['getHeatSource'] = SIGSurface.prototype.getHeatSource = /** @suppress {undefinedVars, duplicate} @this{Object} */function(heatSourceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getHeatSource'] = SIGSurface.prototype.getHeatSource = function(heatSourceUnits) { var self = this.ptr; if (heatSourceUnits && typeof heatSourceUnits === 'object') heatSourceUnits = heatSourceUnits.ptr; return _emscripten_bind_SIGSurface_getHeatSource_1(self, heatSourceUnits); -};; +}; -SIGSurface.prototype['getHeightOfUnderstory'] = SIGSurface.prototype.getHeightOfUnderstory = /** @suppress {undefinedVars, duplicate} @this{Object} */function(heightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getHeightOfUnderstory'] = SIGSurface.prototype.getHeightOfUnderstory = function(heightUnits) { var self = this.ptr; if (heightUnits && typeof heightUnits === 'object') heightUnits = heightUnits.ptr; return _emscripten_bind_SIGSurface_getHeightOfUnderstory_1(self, heightUnits); -};; +}; -SIGSurface.prototype['getLiveFuelMoistureOfExtinction'] = SIGSurface.prototype.getLiveFuelMoistureOfExtinction = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getLiveFuelMoistureOfExtinction'] = SIGSurface.prototype.getLiveFuelMoistureOfExtinction = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getLiveFuelMoistureOfExtinction_1(self, moistureUnits); -};; +}; -SIGSurface.prototype['getMidflameWindspeed'] = SIGSurface.prototype.getMidflameWindspeed = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windSpeedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMidflameWindspeed'] = SIGSurface.prototype.getMidflameWindspeed = function(windSpeedUnits) { var self = this.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; return _emscripten_bind_SIGSurface_getMidflameWindspeed_1(self, windSpeedUnits); -};; +}; -SIGSurface.prototype['getMoistureDeadAggregateValue'] = SIGSurface.prototype.getMoistureDeadAggregateValue = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureDeadAggregateValue'] = SIGSurface.prototype.getMoistureDeadAggregateValue = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureDeadAggregateValue_1(self, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureHundredHour'] = SIGSurface.prototype.getMoistureHundredHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureHundredHour'] = SIGSurface.prototype.getMoistureHundredHour = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureHundredHour_1(self, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureLiveAggregateValue'] = SIGSurface.prototype.getMoistureLiveAggregateValue = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureLiveAggregateValue'] = SIGSurface.prototype.getMoistureLiveAggregateValue = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureLiveAggregateValue_1(self, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureLiveHerbaceous'] = SIGSurface.prototype.getMoistureLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureLiveHerbaceous'] = SIGSurface.prototype.getMoistureLiveHerbaceous = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureLiveHerbaceous_1(self, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureLiveWoody'] = SIGSurface.prototype.getMoistureLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureLiveWoody'] = SIGSurface.prototype.getMoistureLiveWoody = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureLiveWoody_1(self, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureOneHour'] = SIGSurface.prototype.getMoistureOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureOneHour'] = SIGSurface.prototype.getMoistureOneHour = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureOneHour_1(self, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureScenarioHundredHourByIndex'] = SIGSurface.prototype.getMoistureScenarioHundredHourByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioHundredHourByIndex'] = SIGSurface.prototype.getMoistureScenarioHundredHourByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureScenarioHundredHourByIndex_2(self, index, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureScenarioHundredHourByName'] = SIGSurface.prototype.getMoistureScenarioHundredHourByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioHundredHourByName'] = SIGSurface.prototype.getMoistureScenarioHundredHourByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureScenarioHundredHourByName_2(self, name, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureScenarioLiveHerbaceousByIndex'] = SIGSurface.prototype.getMoistureScenarioLiveHerbaceousByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioLiveHerbaceousByIndex'] = SIGSurface.prototype.getMoistureScenarioLiveHerbaceousByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureScenarioLiveHerbaceousByIndex_2(self, index, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureScenarioLiveHerbaceousByName'] = SIGSurface.prototype.getMoistureScenarioLiveHerbaceousByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioLiveHerbaceousByName'] = SIGSurface.prototype.getMoistureScenarioLiveHerbaceousByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureScenarioLiveHerbaceousByName_2(self, name, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureScenarioLiveWoodyByIndex'] = SIGSurface.prototype.getMoistureScenarioLiveWoodyByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioLiveWoodyByIndex'] = SIGSurface.prototype.getMoistureScenarioLiveWoodyByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureScenarioLiveWoodyByIndex_2(self, index, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureScenarioLiveWoodyByName'] = SIGSurface.prototype.getMoistureScenarioLiveWoodyByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioLiveWoodyByName'] = SIGSurface.prototype.getMoistureScenarioLiveWoodyByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureScenarioLiveWoodyByName_2(self, name, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureScenarioOneHourByIndex'] = SIGSurface.prototype.getMoistureScenarioOneHourByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioOneHourByIndex'] = SIGSurface.prototype.getMoistureScenarioOneHourByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureScenarioOneHourByIndex_2(self, index, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureScenarioOneHourByName'] = SIGSurface.prototype.getMoistureScenarioOneHourByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioOneHourByName'] = SIGSurface.prototype.getMoistureScenarioOneHourByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureScenarioOneHourByName_2(self, name, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureScenarioTenHourByIndex'] = SIGSurface.prototype.getMoistureScenarioTenHourByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioTenHourByIndex'] = SIGSurface.prototype.getMoistureScenarioTenHourByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureScenarioTenHourByIndex_2(self, index, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureScenarioTenHourByName'] = SIGSurface.prototype.getMoistureScenarioTenHourByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioTenHourByName'] = SIGSurface.prototype.getMoistureScenarioTenHourByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureScenarioTenHourByName_2(self, name, moistureUnits); -};; +}; -SIGSurface.prototype['getMoistureTenHour'] = SIGSurface.prototype.getMoistureTenHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureTenHour'] = SIGSurface.prototype.getMoistureTenHour = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getMoistureTenHour_1(self, moistureUnits); -};; +}; -SIGSurface.prototype['getOverstoryBasalArea'] = SIGSurface.prototype.getOverstoryBasalArea = /** @suppress {undefinedVars, duplicate} @this{Object} */function(basalAreaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getOverstoryBasalArea'] = SIGSurface.prototype.getOverstoryBasalArea = function(basalAreaUnits) { var self = this.ptr; if (basalAreaUnits && typeof basalAreaUnits === 'object') basalAreaUnits = basalAreaUnits.ptr; return _emscripten_bind_SIGSurface_getOverstoryBasalArea_1(self, basalAreaUnits); -};; +}; -SIGSurface.prototype['getPalmettoGallberryCoverage'] = SIGSurface.prototype.getPalmettoGallberryCoverage = /** @suppress {undefinedVars, duplicate} @this{Object} */function(coverUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getPalmettoGallberryCoverage'] = SIGSurface.prototype.getPalmettoGallberryCoverage = function(coverUnits) { var self = this.ptr; if (coverUnits && typeof coverUnits === 'object') coverUnits = coverUnits.ptr; return _emscripten_bind_SIGSurface_getPalmettoGallberryCoverage_1(self, coverUnits); -};; +}; -SIGSurface.prototype['getPalmettoGallberryHeatOfCombustionDead'] = SIGSurface.prototype.getPalmettoGallberryHeatOfCombustionDead = /** @suppress {undefinedVars, duplicate} @this{Object} */function(heatOfCombustionUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getPalmettoGallberryHeatOfCombustionDead'] = SIGSurface.prototype.getPalmettoGallberryHeatOfCombustionDead = function(heatOfCombustionUnits) { var self = this.ptr; if (heatOfCombustionUnits && typeof heatOfCombustionUnits === 'object') heatOfCombustionUnits = heatOfCombustionUnits.ptr; return _emscripten_bind_SIGSurface_getPalmettoGallberryHeatOfCombustionDead_1(self, heatOfCombustionUnits); -};; +}; -SIGSurface.prototype['getPalmettoGallberryHeatOfCombustionLive'] = SIGSurface.prototype.getPalmettoGallberryHeatOfCombustionLive = /** @suppress {undefinedVars, duplicate} @this{Object} */function(heatOfCombustionUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getPalmettoGallberryHeatOfCombustionLive'] = SIGSurface.prototype.getPalmettoGallberryHeatOfCombustionLive = function(heatOfCombustionUnits) { var self = this.ptr; if (heatOfCombustionUnits && typeof heatOfCombustionUnits === 'object') heatOfCombustionUnits = heatOfCombustionUnits.ptr; return _emscripten_bind_SIGSurface_getPalmettoGallberryHeatOfCombustionLive_1(self, heatOfCombustionUnits); -};; +}; -SIGSurface.prototype['getPalmettoGallberryMoistureOfExtinctionDead'] = SIGSurface.prototype.getPalmettoGallberryMoistureOfExtinctionDead = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getPalmettoGallberryMoistureOfExtinctionDead'] = SIGSurface.prototype.getPalmettoGallberryMoistureOfExtinctionDead = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGSurface_getPalmettoGallberryMoistureOfExtinctionDead_1(self, moistureUnits); -};; +}; -SIGSurface.prototype['getPalmettoGallberyDeadFineFuelLoad'] = SIGSurface.prototype.getPalmettoGallberyDeadFineFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getPalmettoGallberyDeadFineFuelLoad'] = SIGSurface.prototype.getPalmettoGallberyDeadFineFuelLoad = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getPalmettoGallberyDeadFineFuelLoad_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getPalmettoGallberyDeadFoliageLoad'] = SIGSurface.prototype.getPalmettoGallberyDeadFoliageLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getPalmettoGallberyDeadFoliageLoad'] = SIGSurface.prototype.getPalmettoGallberyDeadFoliageLoad = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getPalmettoGallberyDeadFoliageLoad_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getPalmettoGallberyDeadMediumFuelLoad'] = SIGSurface.prototype.getPalmettoGallberyDeadMediumFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getPalmettoGallberyDeadMediumFuelLoad'] = SIGSurface.prototype.getPalmettoGallberyDeadMediumFuelLoad = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getPalmettoGallberyDeadMediumFuelLoad_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getPalmettoGallberyFuelBedDepth'] = SIGSurface.prototype.getPalmettoGallberyFuelBedDepth = /** @suppress {undefinedVars, duplicate} @this{Object} */function(depthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getPalmettoGallberyFuelBedDepth'] = SIGSurface.prototype.getPalmettoGallberyFuelBedDepth = function(depthUnits) { var self = this.ptr; if (depthUnits && typeof depthUnits === 'object') depthUnits = depthUnits.ptr; return _emscripten_bind_SIGSurface_getPalmettoGallberyFuelBedDepth_1(self, depthUnits); -};; +}; -SIGSurface.prototype['getPalmettoGallberyLitterLoad'] = SIGSurface.prototype.getPalmettoGallberyLitterLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getPalmettoGallberyLitterLoad'] = SIGSurface.prototype.getPalmettoGallberyLitterLoad = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getPalmettoGallberyLitterLoad_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getPalmettoGallberyLiveFineFuelLoad'] = SIGSurface.prototype.getPalmettoGallberyLiveFineFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getPalmettoGallberyLiveFineFuelLoad'] = SIGSurface.prototype.getPalmettoGallberyLiveFineFuelLoad = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getPalmettoGallberyLiveFineFuelLoad_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getPalmettoGallberyLiveFoliageLoad'] = SIGSurface.prototype.getPalmettoGallberyLiveFoliageLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getPalmettoGallberyLiveFoliageLoad'] = SIGSurface.prototype.getPalmettoGallberyLiveFoliageLoad = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getPalmettoGallberyLiveFoliageLoad_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getPalmettoGallberyLiveMediumFuelLoad'] = SIGSurface.prototype.getPalmettoGallberyLiveMediumFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getPalmettoGallberyLiveMediumFuelLoad'] = SIGSurface.prototype.getPalmettoGallberyLiveMediumFuelLoad = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getPalmettoGallberyLiveMediumFuelLoad_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getReactionIntensity'] = SIGSurface.prototype.getReactionIntensity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(reactiontionIntensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getReactionIntensity'] = SIGSurface.prototype.getReactionIntensity = function(reactiontionIntensityUnits) { var self = this.ptr; if (reactiontionIntensityUnits && typeof reactiontionIntensityUnits === 'object') reactiontionIntensityUnits = reactiontionIntensityUnits.ptr; return _emscripten_bind_SIGSurface_getReactionIntensity_1(self, reactiontionIntensityUnits); -};; +}; -SIGSurface.prototype['getResidenceTime'] = SIGSurface.prototype.getResidenceTime = /** @suppress {undefinedVars, duplicate} @this{Object} */function(timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getResidenceTime'] = SIGSurface.prototype.getResidenceTime = function(timeUnits) { var self = this.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; return _emscripten_bind_SIGSurface_getResidenceTime_1(self, timeUnits); -};; +}; -SIGSurface.prototype['getSlope'] = SIGSurface.prototype.getSlope = /** @suppress {undefinedVars, duplicate} @this{Object} */function(slopeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getSlope'] = SIGSurface.prototype.getSlope = function(slopeUnits) { var self = this.ptr; if (slopeUnits && typeof slopeUnits === 'object') slopeUnits = slopeUnits.ptr; return _emscripten_bind_SIGSurface_getSlope_1(self, slopeUnits); -};; +}; -SIGSurface.prototype['getSlopeFactor'] = SIGSurface.prototype.getSlopeFactor = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getSlopeFactor'] = SIGSurface.prototype.getSlopeFactor = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getSlopeFactor_0(self); -};; +}; -SIGSurface.prototype['getSpreadDistance'] = SIGSurface.prototype.getSpreadDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getSpreadDistance'] = SIGSurface.prototype.getSpreadDistance = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGSurface_getSpreadDistance_1(self, lengthUnits); -};; +}; -SIGSurface.prototype['getSpreadDistanceInDirectionOfInterest'] = SIGSurface.prototype.getSpreadDistanceInDirectionOfInterest = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getSpreadDistanceInDirectionOfInterest'] = SIGSurface.prototype.getSpreadDistanceInDirectionOfInterest = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGSurface_getSpreadDistanceInDirectionOfInterest_1(self, lengthUnits); -};; +}; -SIGSurface.prototype['getSpreadRate'] = SIGSurface.prototype.getSpreadRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spreadRateUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getSpreadRate'] = SIGSurface.prototype.getSpreadRate = function(spreadRateUnits) { var self = this.ptr; if (spreadRateUnits && typeof spreadRateUnits === 'object') spreadRateUnits = spreadRateUnits.ptr; return _emscripten_bind_SIGSurface_getSpreadRate_1(self, spreadRateUnits); -};; +}; -SIGSurface.prototype['getSpreadRateInDirectionOfInterest'] = SIGSurface.prototype.getSpreadRateInDirectionOfInterest = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spreadRateUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getSpreadRateInDirectionOfInterest'] = SIGSurface.prototype.getSpreadRateInDirectionOfInterest = function(spreadRateUnits) { var self = this.ptr; if (spreadRateUnits && typeof spreadRateUnits === 'object') spreadRateUnits = spreadRateUnits.ptr; return _emscripten_bind_SIGSurface_getSpreadRateInDirectionOfInterest_1(self, spreadRateUnits); -};; +}; -SIGSurface.prototype['getSurfaceFireReactionIntensityForLifeState'] = SIGSurface.prototype.getSurfaceFireReactionIntensityForLifeState = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lifeState) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getSurfaceFireReactionIntensityForLifeState'] = SIGSurface.prototype.getSurfaceFireReactionIntensityForLifeState = function(lifeState) { var self = this.ptr; if (lifeState && typeof lifeState === 'object') lifeState = lifeState.ptr; return _emscripten_bind_SIGSurface_getSurfaceFireReactionIntensityForLifeState_1(self, lifeState); -};; +}; -SIGSurface.prototype['getTotalLiveFuelLoad'] = SIGSurface.prototype.getTotalLiveFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getTotalLiveFuelLoad'] = SIGSurface.prototype.getTotalLiveFuelLoad = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getTotalLiveFuelLoad_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getTotalDeadFuelLoad'] = SIGSurface.prototype.getTotalDeadFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getTotalDeadFuelLoad'] = SIGSurface.prototype.getTotalDeadFuelLoad = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getTotalDeadFuelLoad_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getTotalDeadHerbaceousFuelLoad'] = SIGSurface.prototype.getTotalDeadHerbaceousFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getTotalDeadHerbaceousFuelLoad'] = SIGSurface.prototype.getTotalDeadHerbaceousFuelLoad = function(loadingUnits) { var self = this.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGSurface_getTotalDeadHerbaceousFuelLoad_1(self, loadingUnits); -};; +}; -SIGSurface.prototype['getWindDirection'] = SIGSurface.prototype.getWindDirection = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getWindDirection'] = SIGSurface.prototype.getWindDirection = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getWindDirection_0(self); -};; +}; -SIGSurface.prototype['getWindSpeed'] = SIGSurface.prototype.getWindSpeed = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windSpeedUnits, windHeightInputMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getWindSpeed'] = SIGSurface.prototype.getWindSpeed = function(windSpeedUnits, windHeightInputMode) { var self = this.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; if (windHeightInputMode && typeof windHeightInputMode === 'object') windHeightInputMode = windHeightInputMode.ptr; return _emscripten_bind_SIGSurface_getWindSpeed_2(self, windSpeedUnits, windHeightInputMode); -};; +}; -SIGSurface.prototype['getAspenFuelModelNumber'] = SIGSurface.prototype.getAspenFuelModelNumber = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getAspenFuelModelNumber'] = SIGSurface.prototype.getAspenFuelModelNumber = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getAspenFuelModelNumber_0(self); -};; +}; -SIGSurface.prototype['getFuelModelNumber'] = SIGSurface.prototype.getFuelModelNumber = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelModelNumber'] = SIGSurface.prototype.getFuelModelNumber = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getFuelModelNumber_0(self); -};; +}; -SIGSurface.prototype['getMoistureScenarioIndexByName'] = SIGSurface.prototype.getMoistureScenarioIndexByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioIndexByName'] = SIGSurface.prototype.getMoistureScenarioIndexByName = function(name) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); return _emscripten_bind_SIGSurface_getMoistureScenarioIndexByName_1(self, name); -};; +}; -SIGSurface.prototype['getNumberOfMoistureScenarios'] = SIGSurface.prototype.getNumberOfMoistureScenarios = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getNumberOfMoistureScenarios'] = SIGSurface.prototype.getNumberOfMoistureScenarios = function() { var self = this.ptr; return _emscripten_bind_SIGSurface_getNumberOfMoistureScenarios_0(self); -};; +}; -SIGSurface.prototype['getFuelCode'] = SIGSurface.prototype.getFuelCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelCode'] = SIGSurface.prototype.getFuelCode = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return UTF8ToString(_emscripten_bind_SIGSurface_getFuelCode_1(self, fuelModelNumber)); -};; +}; -SIGSurface.prototype['getFuelName'] = SIGSurface.prototype.getFuelName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getFuelName'] = SIGSurface.prototype.getFuelName = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return UTF8ToString(_emscripten_bind_SIGSurface_getFuelName_1(self, fuelModelNumber)); -};; +}; -SIGSurface.prototype['getMoistureScenarioDescriptionByIndex'] = SIGSurface.prototype.getMoistureScenarioDescriptionByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioDescriptionByIndex'] = SIGSurface.prototype.getMoistureScenarioDescriptionByIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return UTF8ToString(_emscripten_bind_SIGSurface_getMoistureScenarioDescriptionByIndex_1(self, index)); -};; +}; -SIGSurface.prototype['getMoistureScenarioDescriptionByName'] = SIGSurface.prototype.getMoistureScenarioDescriptionByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioDescriptionByName'] = SIGSurface.prototype.getMoistureScenarioDescriptionByName = function(name) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); return UTF8ToString(_emscripten_bind_SIGSurface_getMoistureScenarioDescriptionByName_1(self, name)); -};; +}; -SIGSurface.prototype['getMoistureScenarioNameByIndex'] = SIGSurface.prototype.getMoistureScenarioNameByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['getMoistureScenarioNameByIndex'] = SIGSurface.prototype.getMoistureScenarioNameByIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return UTF8ToString(_emscripten_bind_SIGSurface_getMoistureScenarioNameByIndex_1(self, index)); -};; +}; -SIGSurface.prototype['doSurfaceRun'] = SIGSurface.prototype.doSurfaceRun = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['doSurfaceRun'] = SIGSurface.prototype.doSurfaceRun = function() { var self = this.ptr; _emscripten_bind_SIGSurface_doSurfaceRun_0(self); -};; +}; -SIGSurface.prototype['doSurfaceRunInDirectionOfInterest'] = SIGSurface.prototype.doSurfaceRunInDirectionOfInterest = /** @suppress {undefinedVars, duplicate} @this{Object} */function(directionOfInterest, directionMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['doSurfaceRunInDirectionOfInterest'] = SIGSurface.prototype.doSurfaceRunInDirectionOfInterest = function(directionOfInterest, directionMode) { var self = this.ptr; if (directionOfInterest && typeof directionOfInterest === 'object') directionOfInterest = directionOfInterest.ptr; if (directionMode && typeof directionMode === 'object') directionMode = directionMode.ptr; _emscripten_bind_SIGSurface_doSurfaceRunInDirectionOfInterest_2(self, directionOfInterest, directionMode); -};; +}; -SIGSurface.prototype['doSurfaceRunInDirectionOfMaxSpread'] = SIGSurface.prototype.doSurfaceRunInDirectionOfMaxSpread = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['doSurfaceRunInDirectionOfMaxSpread'] = SIGSurface.prototype.doSurfaceRunInDirectionOfMaxSpread = function() { var self = this.ptr; _emscripten_bind_SIGSurface_doSurfaceRunInDirectionOfMaxSpread_0(self); -};; +}; -SIGSurface.prototype['initializeMembers'] = SIGSurface.prototype.initializeMembers = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['initializeMembers'] = SIGSurface.prototype.initializeMembers = function() { var self = this.ptr; _emscripten_bind_SIGSurface_initializeMembers_0(self); -};; +}; -SIGSurface.prototype['setAgeOfRough'] = SIGSurface.prototype.setAgeOfRough = /** @suppress {undefinedVars, duplicate} @this{Object} */function(ageOfRough) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setAgeOfRough'] = SIGSurface.prototype.setAgeOfRough = function(ageOfRough) { var self = this.ptr; if (ageOfRough && typeof ageOfRough === 'object') ageOfRough = ageOfRough.ptr; _emscripten_bind_SIGSurface_setAgeOfRough_1(self, ageOfRough); -};; +}; -SIGSurface.prototype['setAspect'] = SIGSurface.prototype.setAspect = /** @suppress {undefinedVars, duplicate} @this{Object} */function(aspect) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setAspect'] = SIGSurface.prototype.setAspect = function(aspect) { var self = this.ptr; if (aspect && typeof aspect === 'object') aspect = aspect.ptr; _emscripten_bind_SIGSurface_setAspect_1(self, aspect); -};; +}; -SIGSurface.prototype['setAspenCuringLevel'] = SIGSurface.prototype.setAspenCuringLevel = /** @suppress {undefinedVars, duplicate} @this{Object} */function(aspenCuringLevel, curingLevelUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setAspenCuringLevel'] = SIGSurface.prototype.setAspenCuringLevel = function(aspenCuringLevel, curingLevelUnits) { var self = this.ptr; if (aspenCuringLevel && typeof aspenCuringLevel === 'object') aspenCuringLevel = aspenCuringLevel.ptr; if (curingLevelUnits && typeof curingLevelUnits === 'object') curingLevelUnits = curingLevelUnits.ptr; _emscripten_bind_SIGSurface_setAspenCuringLevel_2(self, aspenCuringLevel, curingLevelUnits); -};; +}; -SIGSurface.prototype['setAspenDBH'] = SIGSurface.prototype.setAspenDBH = /** @suppress {undefinedVars, duplicate} @this{Object} */function(dbh, dbhUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setAspenDBH'] = SIGSurface.prototype.setAspenDBH = function(dbh, dbhUnits) { var self = this.ptr; if (dbh && typeof dbh === 'object') dbh = dbh.ptr; if (dbhUnits && typeof dbhUnits === 'object') dbhUnits = dbhUnits.ptr; _emscripten_bind_SIGSurface_setAspenDBH_2(self, dbh, dbhUnits); -};; +}; -SIGSurface.prototype['setAspenFireSeverity'] = SIGSurface.prototype.setAspenFireSeverity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(aspenFireSeverity) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setAspenFireSeverity'] = SIGSurface.prototype.setAspenFireSeverity = function(aspenFireSeverity) { var self = this.ptr; if (aspenFireSeverity && typeof aspenFireSeverity === 'object') aspenFireSeverity = aspenFireSeverity.ptr; _emscripten_bind_SIGSurface_setAspenFireSeverity_1(self, aspenFireSeverity); -};; +}; -SIGSurface.prototype['setAspenFuelModelNumber'] = SIGSurface.prototype.setAspenFuelModelNumber = /** @suppress {undefinedVars, duplicate} @this{Object} */function(aspenFuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setAspenFuelModelNumber'] = SIGSurface.prototype.setAspenFuelModelNumber = function(aspenFuelModelNumber) { var self = this.ptr; if (aspenFuelModelNumber && typeof aspenFuelModelNumber === 'object') aspenFuelModelNumber = aspenFuelModelNumber.ptr; _emscripten_bind_SIGSurface_setAspenFuelModelNumber_1(self, aspenFuelModelNumber); -};; +}; -SIGSurface.prototype['setCanopyCover'] = SIGSurface.prototype.setCanopyCover = /** @suppress {undefinedVars, duplicate} @this{Object} */function(canopyCover, coverUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setCanopyCover'] = SIGSurface.prototype.setCanopyCover = function(canopyCover, coverUnits) { var self = this.ptr; if (canopyCover && typeof canopyCover === 'object') canopyCover = canopyCover.ptr; if (coverUnits && typeof coverUnits === 'object') coverUnits = coverUnits.ptr; _emscripten_bind_SIGSurface_setCanopyCover_2(self, canopyCover, coverUnits); -};; +}; -SIGSurface.prototype['setCanopyHeight'] = SIGSurface.prototype.setCanopyHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(canopyHeight, canopyHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setCanopyHeight'] = SIGSurface.prototype.setCanopyHeight = function(canopyHeight, canopyHeightUnits) { var self = this.ptr; if (canopyHeight && typeof canopyHeight === 'object') canopyHeight = canopyHeight.ptr; if (canopyHeightUnits && typeof canopyHeightUnits === 'object') canopyHeightUnits = canopyHeightUnits.ptr; _emscripten_bind_SIGSurface_setCanopyHeight_2(self, canopyHeight, canopyHeightUnits); -};; +}; -SIGSurface.prototype['setChaparralFuelBedDepth'] = SIGSurface.prototype.setChaparralFuelBedDepth = /** @suppress {undefinedVars, duplicate} @this{Object} */function(chaparralFuelBedDepth, depthUnts) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setChaparralFuelBedDepth'] = SIGSurface.prototype.setChaparralFuelBedDepth = function(chaparralFuelBedDepth, depthUnts) { var self = this.ptr; if (chaparralFuelBedDepth && typeof chaparralFuelBedDepth === 'object') chaparralFuelBedDepth = chaparralFuelBedDepth.ptr; if (depthUnts && typeof depthUnts === 'object') depthUnts = depthUnts.ptr; _emscripten_bind_SIGSurface_setChaparralFuelBedDepth_2(self, chaparralFuelBedDepth, depthUnts); -};; +}; -SIGSurface.prototype['setChaparralFuelDeadLoadFraction'] = SIGSurface.prototype.setChaparralFuelDeadLoadFraction = /** @suppress {undefinedVars, duplicate} @this{Object} */function(chaparralFuelDeadLoadFraction) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setChaparralFuelDeadLoadFraction'] = SIGSurface.prototype.setChaparralFuelDeadLoadFraction = function(chaparralFuelDeadLoadFraction) { var self = this.ptr; if (chaparralFuelDeadLoadFraction && typeof chaparralFuelDeadLoadFraction === 'object') chaparralFuelDeadLoadFraction = chaparralFuelDeadLoadFraction.ptr; _emscripten_bind_SIGSurface_setChaparralFuelDeadLoadFraction_1(self, chaparralFuelDeadLoadFraction); -};; +}; -SIGSurface.prototype['setChaparralFuelLoadInputMode'] = SIGSurface.prototype.setChaparralFuelLoadInputMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelLoadInputMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setChaparralFuelLoadInputMode'] = SIGSurface.prototype.setChaparralFuelLoadInputMode = function(fuelLoadInputMode) { var self = this.ptr; if (fuelLoadInputMode && typeof fuelLoadInputMode === 'object') fuelLoadInputMode = fuelLoadInputMode.ptr; _emscripten_bind_SIGSurface_setChaparralFuelLoadInputMode_1(self, fuelLoadInputMode); -};; +}; -SIGSurface.prototype['setChaparralFuelType'] = SIGSurface.prototype.setChaparralFuelType = /** @suppress {undefinedVars, duplicate} @this{Object} */function(chaparralFuelType) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setChaparralFuelType'] = SIGSurface.prototype.setChaparralFuelType = function(chaparralFuelType) { var self = this.ptr; if (chaparralFuelType && typeof chaparralFuelType === 'object') chaparralFuelType = chaparralFuelType.ptr; _emscripten_bind_SIGSurface_setChaparralFuelType_1(self, chaparralFuelType); -};; +}; -SIGSurface.prototype['setChaparralTotalFuelLoad'] = SIGSurface.prototype.setChaparralTotalFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(chaparralTotalFuelLoad, fuelLoadUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setChaparralTotalFuelLoad'] = SIGSurface.prototype.setChaparralTotalFuelLoad = function(chaparralTotalFuelLoad, fuelLoadUnits) { var self = this.ptr; if (chaparralTotalFuelLoad && typeof chaparralTotalFuelLoad === 'object') chaparralTotalFuelLoad = chaparralTotalFuelLoad.ptr; if (fuelLoadUnits && typeof fuelLoadUnits === 'object') fuelLoadUnits = fuelLoadUnits.ptr; _emscripten_bind_SIGSurface_setChaparralTotalFuelLoad_2(self, chaparralTotalFuelLoad, fuelLoadUnits); -};; +}; -SIGSurface.prototype['setCrownRatio'] = SIGSurface.prototype.setCrownRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function(crownRatio, crownRatioUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setCrownRatio'] = SIGSurface.prototype.setCrownRatio = function(crownRatio, crownRatioUnits) { var self = this.ptr; if (crownRatio && typeof crownRatio === 'object') crownRatio = crownRatio.ptr; if (crownRatioUnits && typeof crownRatioUnits === 'object') crownRatioUnits = crownRatioUnits.ptr; _emscripten_bind_SIGSurface_setCrownRatio_2(self, crownRatio, crownRatioUnits); -};; +}; -SIGSurface.prototype['setDirectionOfInterest'] = SIGSurface.prototype.setDirectionOfInterest = /** @suppress {undefinedVars, duplicate} @this{Object} */function(directionOfInterest) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setDirectionOfInterest'] = SIGSurface.prototype.setDirectionOfInterest = function(directionOfInterest) { var self = this.ptr; if (directionOfInterest && typeof directionOfInterest === 'object') directionOfInterest = directionOfInterest.ptr; _emscripten_bind_SIGSurface_setDirectionOfInterest_1(self, directionOfInterest); -};; +}; -SIGSurface.prototype['setElapsedTime'] = SIGSurface.prototype.setElapsedTime = /** @suppress {undefinedVars, duplicate} @this{Object} */function(elapsedTime, timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setElapsedTime'] = SIGSurface.prototype.setElapsedTime = function(elapsedTime, timeUnits) { var self = this.ptr; if (elapsedTime && typeof elapsedTime === 'object') elapsedTime = elapsedTime.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; _emscripten_bind_SIGSurface_setElapsedTime_2(self, elapsedTime, timeUnits); -};; +}; -SIGSurface.prototype['setFirstFuelModelNumber'] = SIGSurface.prototype.setFirstFuelModelNumber = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firstFuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setFirstFuelModelNumber'] = SIGSurface.prototype.setFirstFuelModelNumber = function(firstFuelModelNumber) { var self = this.ptr; if (firstFuelModelNumber && typeof firstFuelModelNumber === 'object') firstFuelModelNumber = firstFuelModelNumber.ptr; _emscripten_bind_SIGSurface_setFirstFuelModelNumber_1(self, firstFuelModelNumber); -};; +}; -SIGSurface.prototype['setFuelModels'] = SIGSurface.prototype.setFuelModels = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModels) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setFuelModels'] = SIGSurface.prototype.setFuelModels = function(fuelModels) { var self = this.ptr; if (fuelModels && typeof fuelModels === 'object') fuelModels = fuelModels.ptr; _emscripten_bind_SIGSurface_setFuelModels_1(self, fuelModels); -};; +}; -SIGSurface.prototype['setHeightOfUnderstory'] = SIGSurface.prototype.setHeightOfUnderstory = /** @suppress {undefinedVars, duplicate} @this{Object} */function(heightOfUnderstory, heightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setHeightOfUnderstory'] = SIGSurface.prototype.setHeightOfUnderstory = function(heightOfUnderstory, heightUnits) { var self = this.ptr; if (heightOfUnderstory && typeof heightOfUnderstory === 'object') heightOfUnderstory = heightOfUnderstory.ptr; if (heightUnits && typeof heightUnits === 'object') heightUnits = heightUnits.ptr; _emscripten_bind_SIGSurface_setHeightOfUnderstory_2(self, heightOfUnderstory, heightUnits); -};; +}; -SIGSurface.prototype['setIsUsingChaparral'] = SIGSurface.prototype.setIsUsingChaparral = /** @suppress {undefinedVars, duplicate} @this{Object} */function(isUsingChaparral) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setIsUsingChaparral'] = SIGSurface.prototype.setIsUsingChaparral = function(isUsingChaparral) { var self = this.ptr; if (isUsingChaparral && typeof isUsingChaparral === 'object') isUsingChaparral = isUsingChaparral.ptr; _emscripten_bind_SIGSurface_setIsUsingChaparral_1(self, isUsingChaparral); -};; +}; -SIGSurface.prototype['setIsUsingPalmettoGallberry'] = SIGSurface.prototype.setIsUsingPalmettoGallberry = /** @suppress {undefinedVars, duplicate} @this{Object} */function(isUsingPalmettoGallberry) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setIsUsingPalmettoGallberry'] = SIGSurface.prototype.setIsUsingPalmettoGallberry = function(isUsingPalmettoGallberry) { var self = this.ptr; if (isUsingPalmettoGallberry && typeof isUsingPalmettoGallberry === 'object') isUsingPalmettoGallberry = isUsingPalmettoGallberry.ptr; _emscripten_bind_SIGSurface_setIsUsingPalmettoGallberry_1(self, isUsingPalmettoGallberry); -};; +}; -SIGSurface.prototype['setIsUsingWesternAspen'] = SIGSurface.prototype.setIsUsingWesternAspen = /** @suppress {undefinedVars, duplicate} @this{Object} */function(isUsingWesternAspen) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setIsUsingWesternAspen'] = SIGSurface.prototype.setIsUsingWesternAspen = function(isUsingWesternAspen) { var self = this.ptr; if (isUsingWesternAspen && typeof isUsingWesternAspen === 'object') isUsingWesternAspen = isUsingWesternAspen.ptr; _emscripten_bind_SIGSurface_setIsUsingWesternAspen_1(self, isUsingWesternAspen); -};; +}; -SIGSurface.prototype['setMoistureDeadAggregate'] = SIGSurface.prototype.setMoistureDeadAggregate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureDead, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setMoistureDeadAggregate'] = SIGSurface.prototype.setMoistureDeadAggregate = function(moistureDead, moistureUnits) { var self = this.ptr; if (moistureDead && typeof moistureDead === 'object') moistureDead = moistureDead.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGSurface_setMoistureDeadAggregate_2(self, moistureDead, moistureUnits); -};; +}; -SIGSurface.prototype['setMoistureHundredHour'] = SIGSurface.prototype.setMoistureHundredHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureHundredHour, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setMoistureHundredHour'] = SIGSurface.prototype.setMoistureHundredHour = function(moistureHundredHour, moistureUnits) { var self = this.ptr; if (moistureHundredHour && typeof moistureHundredHour === 'object') moistureHundredHour = moistureHundredHour.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGSurface_setMoistureHundredHour_2(self, moistureHundredHour, moistureUnits); -};; +}; -SIGSurface.prototype['setMoistureInputMode'] = SIGSurface.prototype.setMoistureInputMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureInputMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setMoistureInputMode'] = SIGSurface.prototype.setMoistureInputMode = function(moistureInputMode) { var self = this.ptr; if (moistureInputMode && typeof moistureInputMode === 'object') moistureInputMode = moistureInputMode.ptr; _emscripten_bind_SIGSurface_setMoistureInputMode_1(self, moistureInputMode); -};; +}; -SIGSurface.prototype['setMoistureLiveAggregate'] = SIGSurface.prototype.setMoistureLiveAggregate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureLive, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setMoistureLiveAggregate'] = SIGSurface.prototype.setMoistureLiveAggregate = function(moistureLive, moistureUnits) { var self = this.ptr; if (moistureLive && typeof moistureLive === 'object') moistureLive = moistureLive.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGSurface_setMoistureLiveAggregate_2(self, moistureLive, moistureUnits); -};; +}; -SIGSurface.prototype['setMoistureLiveHerbaceous'] = SIGSurface.prototype.setMoistureLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureLiveHerbaceous, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setMoistureLiveHerbaceous'] = SIGSurface.prototype.setMoistureLiveHerbaceous = function(moistureLiveHerbaceous, moistureUnits) { var self = this.ptr; if (moistureLiveHerbaceous && typeof moistureLiveHerbaceous === 'object') moistureLiveHerbaceous = moistureLiveHerbaceous.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGSurface_setMoistureLiveHerbaceous_2(self, moistureLiveHerbaceous, moistureUnits); -};; +}; -SIGSurface.prototype['setMoistureLiveWoody'] = SIGSurface.prototype.setMoistureLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureLiveWoody, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setMoistureLiveWoody'] = SIGSurface.prototype.setMoistureLiveWoody = function(moistureLiveWoody, moistureUnits) { var self = this.ptr; if (moistureLiveWoody && typeof moistureLiveWoody === 'object') moistureLiveWoody = moistureLiveWoody.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGSurface_setMoistureLiveWoody_2(self, moistureLiveWoody, moistureUnits); -};; +}; -SIGSurface.prototype['setMoistureOneHour'] = SIGSurface.prototype.setMoistureOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureOneHour, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setMoistureOneHour'] = SIGSurface.prototype.setMoistureOneHour = function(moistureOneHour, moistureUnits) { var self = this.ptr; if (moistureOneHour && typeof moistureOneHour === 'object') moistureOneHour = moistureOneHour.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGSurface_setMoistureOneHour_2(self, moistureOneHour, moistureUnits); -};; +}; -SIGSurface.prototype['setMoistureScenarios'] = SIGSurface.prototype.setMoistureScenarios = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureScenarios) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setMoistureScenarios'] = SIGSurface.prototype.setMoistureScenarios = function(moistureScenarios) { var self = this.ptr; if (moistureScenarios && typeof moistureScenarios === 'object') moistureScenarios = moistureScenarios.ptr; _emscripten_bind_SIGSurface_setMoistureScenarios_1(self, moistureScenarios); -};; +}; -SIGSurface.prototype['setMoistureTenHour'] = SIGSurface.prototype.setMoistureTenHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureTenHour, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setMoistureTenHour'] = SIGSurface.prototype.setMoistureTenHour = function(moistureTenHour, moistureUnits) { var self = this.ptr; if (moistureTenHour && typeof moistureTenHour === 'object') moistureTenHour = moistureTenHour.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGSurface_setMoistureTenHour_2(self, moistureTenHour, moistureUnits); -};; +}; -SIGSurface.prototype['setOverstoryBasalArea'] = SIGSurface.prototype.setOverstoryBasalArea = /** @suppress {undefinedVars, duplicate} @this{Object} */function(overstoryBasalArea, basalAreaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setOverstoryBasalArea'] = SIGSurface.prototype.setOverstoryBasalArea = function(overstoryBasalArea, basalAreaUnits) { var self = this.ptr; if (overstoryBasalArea && typeof overstoryBasalArea === 'object') overstoryBasalArea = overstoryBasalArea.ptr; if (basalAreaUnits && typeof basalAreaUnits === 'object') basalAreaUnits = basalAreaUnits.ptr; _emscripten_bind_SIGSurface_setOverstoryBasalArea_2(self, overstoryBasalArea, basalAreaUnits); -};; +}; -SIGSurface.prototype['setPalmettoCoverage'] = SIGSurface.prototype.setPalmettoCoverage = /** @suppress {undefinedVars, duplicate} @this{Object} */function(palmettoCoverage, coverUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setPalmettoCoverage'] = SIGSurface.prototype.setPalmettoCoverage = function(palmettoCoverage, coverUnits) { var self = this.ptr; if (palmettoCoverage && typeof palmettoCoverage === 'object') palmettoCoverage = palmettoCoverage.ptr; if (coverUnits && typeof coverUnits === 'object') coverUnits = coverUnits.ptr; _emscripten_bind_SIGSurface_setPalmettoCoverage_2(self, palmettoCoverage, coverUnits); -};; +}; -SIGSurface.prototype['setSecondFuelModelNumber'] = SIGSurface.prototype.setSecondFuelModelNumber = /** @suppress {undefinedVars, duplicate} @this{Object} */function(secondFuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setSecondFuelModelNumber'] = SIGSurface.prototype.setSecondFuelModelNumber = function(secondFuelModelNumber) { var self = this.ptr; if (secondFuelModelNumber && typeof secondFuelModelNumber === 'object') secondFuelModelNumber = secondFuelModelNumber.ptr; _emscripten_bind_SIGSurface_setSecondFuelModelNumber_1(self, secondFuelModelNumber); -};; +}; -SIGSurface.prototype['setSlope'] = SIGSurface.prototype.setSlope = /** @suppress {undefinedVars, duplicate} @this{Object} */function(slope, slopeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setSlope'] = SIGSurface.prototype.setSlope = function(slope, slopeUnits) { var self = this.ptr; if (slope && typeof slope === 'object') slope = slope.ptr; if (slopeUnits && typeof slopeUnits === 'object') slopeUnits = slopeUnits.ptr; _emscripten_bind_SIGSurface_setSlope_2(self, slope, slopeUnits); -};; +}; -SIGSurface.prototype['setSurfaceFireSpreadDirectionMode'] = SIGSurface.prototype.setSurfaceFireSpreadDirectionMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(directionMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setSurfaceFireSpreadDirectionMode'] = SIGSurface.prototype.setSurfaceFireSpreadDirectionMode = function(directionMode) { var self = this.ptr; if (directionMode && typeof directionMode === 'object') directionMode = directionMode.ptr; _emscripten_bind_SIGSurface_setSurfaceFireSpreadDirectionMode_1(self, directionMode); -};; +}; -SIGSurface.prototype['setSurfaceRunInDirectionOf'] = SIGSurface.prototype.setSurfaceRunInDirectionOf = /** @suppress {undefinedVars, duplicate} @this{Object} */function(surfaceRunInDirectionOf) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setSurfaceRunInDirectionOf'] = SIGSurface.prototype.setSurfaceRunInDirectionOf = function(surfaceRunInDirectionOf) { var self = this.ptr; if (surfaceRunInDirectionOf && typeof surfaceRunInDirectionOf === 'object') surfaceRunInDirectionOf = surfaceRunInDirectionOf.ptr; _emscripten_bind_SIGSurface_setSurfaceRunInDirectionOf_1(self, surfaceRunInDirectionOf); -};; +}; -SIGSurface.prototype['setTwoFuelModelsFirstFuelModelCoverage'] = SIGSurface.prototype.setTwoFuelModelsFirstFuelModelCoverage = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firstFuelModelCoverage, coverUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setTwoFuelModelsFirstFuelModelCoverage'] = SIGSurface.prototype.setTwoFuelModelsFirstFuelModelCoverage = function(firstFuelModelCoverage, coverUnits) { var self = this.ptr; if (firstFuelModelCoverage && typeof firstFuelModelCoverage === 'object') firstFuelModelCoverage = firstFuelModelCoverage.ptr; if (coverUnits && typeof coverUnits === 'object') coverUnits = coverUnits.ptr; _emscripten_bind_SIGSurface_setTwoFuelModelsFirstFuelModelCoverage_2(self, firstFuelModelCoverage, coverUnits); -};; +}; -SIGSurface.prototype['setTwoFuelModelsMethod'] = SIGSurface.prototype.setTwoFuelModelsMethod = /** @suppress {undefinedVars, duplicate} @this{Object} */function(twoFuelModelsMethod) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setTwoFuelModelsMethod'] = SIGSurface.prototype.setTwoFuelModelsMethod = function(twoFuelModelsMethod) { var self = this.ptr; if (twoFuelModelsMethod && typeof twoFuelModelsMethod === 'object') twoFuelModelsMethod = twoFuelModelsMethod.ptr; _emscripten_bind_SIGSurface_setTwoFuelModelsMethod_1(self, twoFuelModelsMethod); -};; +}; -SIGSurface.prototype['setUserProvidedWindAdjustmentFactor'] = SIGSurface.prototype.setUserProvidedWindAdjustmentFactor = /** @suppress {undefinedVars, duplicate} @this{Object} */function(userProvidedWindAdjustmentFactor) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setUserProvidedWindAdjustmentFactor'] = SIGSurface.prototype.setUserProvidedWindAdjustmentFactor = function(userProvidedWindAdjustmentFactor) { var self = this.ptr; if (userProvidedWindAdjustmentFactor && typeof userProvidedWindAdjustmentFactor === 'object') userProvidedWindAdjustmentFactor = userProvidedWindAdjustmentFactor.ptr; _emscripten_bind_SIGSurface_setUserProvidedWindAdjustmentFactor_1(self, userProvidedWindAdjustmentFactor); -};; +}; -SIGSurface.prototype['setWindAdjustmentFactorCalculationMethod'] = SIGSurface.prototype.setWindAdjustmentFactorCalculationMethod = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windAdjustmentFactorCalculationMethod) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setWindAdjustmentFactorCalculationMethod'] = SIGSurface.prototype.setWindAdjustmentFactorCalculationMethod = function(windAdjustmentFactorCalculationMethod) { var self = this.ptr; if (windAdjustmentFactorCalculationMethod && typeof windAdjustmentFactorCalculationMethod === 'object') windAdjustmentFactorCalculationMethod = windAdjustmentFactorCalculationMethod.ptr; _emscripten_bind_SIGSurface_setWindAdjustmentFactorCalculationMethod_1(self, windAdjustmentFactorCalculationMethod); -};; +}; -SIGSurface.prototype['setWindAndSpreadOrientationMode'] = SIGSurface.prototype.setWindAndSpreadOrientationMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windAndSpreadOrientationMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setWindAndSpreadOrientationMode'] = SIGSurface.prototype.setWindAndSpreadOrientationMode = function(windAndSpreadOrientationMode) { var self = this.ptr; if (windAndSpreadOrientationMode && typeof windAndSpreadOrientationMode === 'object') windAndSpreadOrientationMode = windAndSpreadOrientationMode.ptr; _emscripten_bind_SIGSurface_setWindAndSpreadOrientationMode_1(self, windAndSpreadOrientationMode); -};; +}; -SIGSurface.prototype['setWindDirection'] = SIGSurface.prototype.setWindDirection = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windDirection) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setWindDirection'] = SIGSurface.prototype.setWindDirection = function(windDirection) { var self = this.ptr; if (windDirection && typeof windDirection === 'object') windDirection = windDirection.ptr; _emscripten_bind_SIGSurface_setWindDirection_1(self, windDirection); -};; +}; -SIGSurface.prototype['setWindHeightInputMode'] = SIGSurface.prototype.setWindHeightInputMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windHeightInputMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setWindHeightInputMode'] = SIGSurface.prototype.setWindHeightInputMode = function(windHeightInputMode) { var self = this.ptr; if (windHeightInputMode && typeof windHeightInputMode === 'object') windHeightInputMode = windHeightInputMode.ptr; _emscripten_bind_SIGSurface_setWindHeightInputMode_1(self, windHeightInputMode); -};; +}; -SIGSurface.prototype['setWindSpeed'] = SIGSurface.prototype.setWindSpeed = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windSpeed, windSpeedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setWindSpeed'] = SIGSurface.prototype.setWindSpeed = function(windSpeed, windSpeedUnits) { var self = this.ptr; if (windSpeed && typeof windSpeed === 'object') windSpeed = windSpeed.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; _emscripten_bind_SIGSurface_setWindSpeed_2(self, windSpeed, windSpeedUnits); -};; +}; -SIGSurface.prototype['updateSurfaceInputs'] = SIGSurface.prototype.updateSurfaceInputs = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['updateSurfaceInputs'] = SIGSurface.prototype.updateSurfaceInputs = function(fuelModelNumber, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (moistureOneHour && typeof moistureOneHour === 'object') moistureOneHour = moistureOneHour.ptr; @@ -3455,9 +4000,10 @@ SIGSurface.prototype['updateSurfaceInputs'] = SIGSurface.prototype.updateSurface if (crownRatio && typeof crownRatio === 'object') crownRatio = crownRatio.ptr; if (crownRatioUnits && typeof crownRatioUnits === 'object') crownRatioUnits = crownRatioUnits.ptr; _emscripten_bind_SIGSurface_updateSurfaceInputs_21(self, fuelModelNumber, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnits); -};; +}; -SIGSurface.prototype['updateSurfaceInputsForPalmettoGallbery'] = SIGSurface.prototype.updateSurfaceInputsForPalmettoGallbery = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, ageOfRough, heightOfUnderstory, palmettoCoverage, overstoryBasalArea, basalAreaUnits, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['updateSurfaceInputsForPalmettoGallbery'] = SIGSurface.prototype.updateSurfaceInputsForPalmettoGallbery = function(moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, ageOfRough, heightOfUnderstory, palmettoCoverage, overstoryBasalArea, basalAreaUnits, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnits) { var self = this.ptr; if (moistureOneHour && typeof moistureOneHour === 'object') moistureOneHour = moistureOneHour.ptr; if (moistureTenHour && typeof moistureTenHour === 'object') moistureTenHour = moistureTenHour.ptr; @@ -3485,9 +4031,10 @@ SIGSurface.prototype['updateSurfaceInputsForPalmettoGallbery'] = SIGSurface.prot if (crownRatio && typeof crownRatio === 'object') crownRatio = crownRatio.ptr; if (crownRatioUnits && typeof crownRatioUnits === 'object') crownRatioUnits = crownRatioUnits.ptr; _emscripten_bind_SIGSurface_updateSurfaceInputsForPalmettoGallbery_25(self, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, ageOfRough, heightOfUnderstory, palmettoCoverage, overstoryBasalArea, basalAreaUnits, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnits); -};; +}; -SIGSurface.prototype['updateSurfaceInputsForTwoFuelModels'] = SIGSurface.prototype.updateSurfaceInputsForTwoFuelModels = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firstFuelModelNumber, secondFuelModelNumber, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, firstFuelModelCoverage, firstFuelModelCoverageUnits, twoFuelModelsMethod, slope, slopeUnits, aspect, canopyCover, canopyFractionUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnitso) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['updateSurfaceInputsForTwoFuelModels'] = SIGSurface.prototype.updateSurfaceInputsForTwoFuelModels = function(firstFuelModelNumber, secondFuelModelNumber, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, firstFuelModelCoverage, firstFuelModelCoverageUnits, twoFuelModelsMethod, slope, slopeUnits, aspect, canopyCover, canopyFractionUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnitso) { var self = this.ptr; if (firstFuelModelNumber && typeof firstFuelModelNumber === 'object') firstFuelModelNumber = firstFuelModelNumber.ptr; if (secondFuelModelNumber && typeof secondFuelModelNumber === 'object') secondFuelModelNumber = secondFuelModelNumber.ptr; @@ -3515,9 +4062,10 @@ SIGSurface.prototype['updateSurfaceInputsForTwoFuelModels'] = SIGSurface.prototy if (crownRatio && typeof crownRatio === 'object') crownRatio = crownRatio.ptr; if (crownRatioUnitso && typeof crownRatioUnitso === 'object') crownRatioUnitso = crownRatioUnitso.ptr; _emscripten_bind_SIGSurface_updateSurfaceInputsForTwoFuelModels_25(self, firstFuelModelNumber, secondFuelModelNumber, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, firstFuelModelCoverage, firstFuelModelCoverageUnits, twoFuelModelsMethod, slope, slopeUnits, aspect, canopyCover, canopyFractionUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnitso); -};; +}; -SIGSurface.prototype['updateSurfaceInputsForWesternAspen'] = SIGSurface.prototype.updateSurfaceInputsForWesternAspen = /** @suppress {undefinedVars, duplicate} @this{Object} */function(aspenFuelModelNumber, aspenCuringLevel, curingLevelUnits, aspenFireSeverity, dbh, dbhUnits, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['updateSurfaceInputsForWesternAspen'] = SIGSurface.prototype.updateSurfaceInputsForWesternAspen = function(aspenFuelModelNumber, aspenCuringLevel, curingLevelUnits, aspenFireSeverity, dbh, dbhUnits, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnits) { var self = this.ptr; if (aspenFuelModelNumber && typeof aspenFuelModelNumber === 'object') aspenFuelModelNumber = aspenFuelModelNumber.ptr; if (aspenCuringLevel && typeof aspenCuringLevel === 'object') aspenCuringLevel = aspenCuringLevel.ptr; @@ -3546,942 +4094,1101 @@ SIGSurface.prototype['updateSurfaceInputsForWesternAspen'] = SIGSurface.prototyp if (crownRatio && typeof crownRatio === 'object') crownRatio = crownRatio.ptr; if (crownRatioUnits && typeof crownRatioUnits === 'object') crownRatioUnits = crownRatioUnits.ptr; _emscripten_bind_SIGSurface_updateSurfaceInputsForWesternAspen_26(self, aspenFuelModelNumber, aspenCuringLevel, curingLevelUnits, aspenFireSeverity, dbh, dbhUnits, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnits); -};; +}; -SIGSurface.prototype['setFuelModelNumber'] = SIGSurface.prototype.setFuelModelNumber = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['setFuelModelNumber'] = SIGSurface.prototype.setFuelModelNumber = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; _emscripten_bind_SIGSurface_setFuelModelNumber_1(self, fuelModelNumber); -};; +}; + - SIGSurface.prototype['__destroy__'] = SIGSurface.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSurface.prototype['__destroy__'] = SIGSurface.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SIGSurface___destroy___0(self); }; -// PalmettoGallberry -/** @suppress {undefinedVars, duplicate} @this{Object} */function PalmettoGallberry() { + +// Interface: PalmettoGallberry + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function PalmettoGallberry() { this.ptr = _emscripten_bind_PalmettoGallberry_PalmettoGallberry_0(); getCache(PalmettoGallberry)[this.ptr] = this; -};; +}; + PalmettoGallberry.prototype = Object.create(WrapperObject.prototype); PalmettoGallberry.prototype.constructor = PalmettoGallberry; PalmettoGallberry.prototype.__class__ = PalmettoGallberry; PalmettoGallberry.__cache__ = {}; Module['PalmettoGallberry'] = PalmettoGallberry; - -PalmettoGallberry.prototype['initializeMembers'] = PalmettoGallberry.prototype.initializeMembers = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['initializeMembers'] = PalmettoGallberry.prototype.initializeMembers = function() { var self = this.ptr; _emscripten_bind_PalmettoGallberry_initializeMembers_0(self); -};; +}; -PalmettoGallberry.prototype['calculatePalmettoGallberyDeadFineFuelLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyDeadFineFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(ageOfRough, heightOfUnderstory) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['calculatePalmettoGallberyDeadFineFuelLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyDeadFineFuelLoad = function(ageOfRough, heightOfUnderstory) { var self = this.ptr; if (ageOfRough && typeof ageOfRough === 'object') ageOfRough = ageOfRough.ptr; if (heightOfUnderstory && typeof heightOfUnderstory === 'object') heightOfUnderstory = heightOfUnderstory.ptr; return _emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyDeadFineFuelLoad_2(self, ageOfRough, heightOfUnderstory); -};; +}; -PalmettoGallberry.prototype['calculatePalmettoGallberyDeadFoliageLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyDeadFoliageLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(ageOfRough, palmettoCoverage) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['calculatePalmettoGallberyDeadFoliageLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyDeadFoliageLoad = function(ageOfRough, palmettoCoverage) { var self = this.ptr; if (ageOfRough && typeof ageOfRough === 'object') ageOfRough = ageOfRough.ptr; if (palmettoCoverage && typeof palmettoCoverage === 'object') palmettoCoverage = palmettoCoverage.ptr; return _emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyDeadFoliageLoad_2(self, ageOfRough, palmettoCoverage); -};; +}; -PalmettoGallberry.prototype['calculatePalmettoGallberyDeadMediumFuelLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyDeadMediumFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(ageOfRough, palmettoCoverage) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['calculatePalmettoGallberyDeadMediumFuelLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyDeadMediumFuelLoad = function(ageOfRough, palmettoCoverage) { var self = this.ptr; if (ageOfRough && typeof ageOfRough === 'object') ageOfRough = ageOfRough.ptr; if (palmettoCoverage && typeof palmettoCoverage === 'object') palmettoCoverage = palmettoCoverage.ptr; return _emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyDeadMediumFuelLoad_2(self, ageOfRough, palmettoCoverage); -};; +}; -PalmettoGallberry.prototype['calculatePalmettoGallberyFuelBedDepth'] = PalmettoGallberry.prototype.calculatePalmettoGallberyFuelBedDepth = /** @suppress {undefinedVars, duplicate} @this{Object} */function(heightOfUnderstory) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['calculatePalmettoGallberyFuelBedDepth'] = PalmettoGallberry.prototype.calculatePalmettoGallberyFuelBedDepth = function(heightOfUnderstory) { var self = this.ptr; if (heightOfUnderstory && typeof heightOfUnderstory === 'object') heightOfUnderstory = heightOfUnderstory.ptr; return _emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyFuelBedDepth_1(self, heightOfUnderstory); -};; +}; -PalmettoGallberry.prototype['calculatePalmettoGallberyLitterLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyLitterLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(ageOfRough, overstoryBasalArea) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['calculatePalmettoGallberyLitterLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyLitterLoad = function(ageOfRough, overstoryBasalArea) { var self = this.ptr; if (ageOfRough && typeof ageOfRough === 'object') ageOfRough = ageOfRough.ptr; if (overstoryBasalArea && typeof overstoryBasalArea === 'object') overstoryBasalArea = overstoryBasalArea.ptr; return _emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLitterLoad_2(self, ageOfRough, overstoryBasalArea); -};; +}; -PalmettoGallberry.prototype['calculatePalmettoGallberyLiveFineFuelLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyLiveFineFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(ageOfRough, heightOfUnderstory) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['calculatePalmettoGallberyLiveFineFuelLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyLiveFineFuelLoad = function(ageOfRough, heightOfUnderstory) { var self = this.ptr; if (ageOfRough && typeof ageOfRough === 'object') ageOfRough = ageOfRough.ptr; if (heightOfUnderstory && typeof heightOfUnderstory === 'object') heightOfUnderstory = heightOfUnderstory.ptr; return _emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLiveFineFuelLoad_2(self, ageOfRough, heightOfUnderstory); -};; +}; -PalmettoGallberry.prototype['calculatePalmettoGallberyLiveFoliageLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyLiveFoliageLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(ageOfRough, palmettoCoverage, heightOfUnderstory) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['calculatePalmettoGallberyLiveFoliageLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyLiveFoliageLoad = function(ageOfRough, palmettoCoverage, heightOfUnderstory) { var self = this.ptr; if (ageOfRough && typeof ageOfRough === 'object') ageOfRough = ageOfRough.ptr; if (palmettoCoverage && typeof palmettoCoverage === 'object') palmettoCoverage = palmettoCoverage.ptr; if (heightOfUnderstory && typeof heightOfUnderstory === 'object') heightOfUnderstory = heightOfUnderstory.ptr; return _emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLiveFoliageLoad_3(self, ageOfRough, palmettoCoverage, heightOfUnderstory); -};; +}; -PalmettoGallberry.prototype['calculatePalmettoGallberyLiveMediumFuelLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyLiveMediumFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function(ageOfRough, heightOfUnderstory) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['calculatePalmettoGallberyLiveMediumFuelLoad'] = PalmettoGallberry.prototype.calculatePalmettoGallberyLiveMediumFuelLoad = function(ageOfRough, heightOfUnderstory) { var self = this.ptr; if (ageOfRough && typeof ageOfRough === 'object') ageOfRough = ageOfRough.ptr; if (heightOfUnderstory && typeof heightOfUnderstory === 'object') heightOfUnderstory = heightOfUnderstory.ptr; return _emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLiveMediumFuelLoad_2(self, ageOfRough, heightOfUnderstory); -};; +}; -PalmettoGallberry.prototype['getHeatOfCombustionDead'] = PalmettoGallberry.prototype.getHeatOfCombustionDead = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['getHeatOfCombustionDead'] = PalmettoGallberry.prototype.getHeatOfCombustionDead = function() { var self = this.ptr; return _emscripten_bind_PalmettoGallberry_getHeatOfCombustionDead_0(self); -};; +}; -PalmettoGallberry.prototype['getHeatOfCombustionLive'] = PalmettoGallberry.prototype.getHeatOfCombustionLive = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['getHeatOfCombustionLive'] = PalmettoGallberry.prototype.getHeatOfCombustionLive = function() { var self = this.ptr; return _emscripten_bind_PalmettoGallberry_getHeatOfCombustionLive_0(self); -};; +}; -PalmettoGallberry.prototype['getMoistureOfExtinctionDead'] = PalmettoGallberry.prototype.getMoistureOfExtinctionDead = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['getMoistureOfExtinctionDead'] = PalmettoGallberry.prototype.getMoistureOfExtinctionDead = function() { var self = this.ptr; return _emscripten_bind_PalmettoGallberry_getMoistureOfExtinctionDead_0(self); -};; +}; -PalmettoGallberry.prototype['getPalmettoGallberyDeadFineFuelLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyDeadFineFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['getPalmettoGallberyDeadFineFuelLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyDeadFineFuelLoad = function() { var self = this.ptr; return _emscripten_bind_PalmettoGallberry_getPalmettoGallberyDeadFineFuelLoad_0(self); -};; +}; -PalmettoGallberry.prototype['getPalmettoGallberyDeadFoliageLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyDeadFoliageLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['getPalmettoGallberyDeadFoliageLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyDeadFoliageLoad = function() { var self = this.ptr; return _emscripten_bind_PalmettoGallberry_getPalmettoGallberyDeadFoliageLoad_0(self); -};; +}; -PalmettoGallberry.prototype['getPalmettoGallberyDeadMediumFuelLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyDeadMediumFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['getPalmettoGallberyDeadMediumFuelLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyDeadMediumFuelLoad = function() { var self = this.ptr; return _emscripten_bind_PalmettoGallberry_getPalmettoGallberyDeadMediumFuelLoad_0(self); -};; +}; -PalmettoGallberry.prototype['getPalmettoGallberyFuelBedDepth'] = PalmettoGallberry.prototype.getPalmettoGallberyFuelBedDepth = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['getPalmettoGallberyFuelBedDepth'] = PalmettoGallberry.prototype.getPalmettoGallberyFuelBedDepth = function() { var self = this.ptr; return _emscripten_bind_PalmettoGallberry_getPalmettoGallberyFuelBedDepth_0(self); -};; +}; -PalmettoGallberry.prototype['getPalmettoGallberyLitterLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyLitterLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['getPalmettoGallberyLitterLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyLitterLoad = function() { var self = this.ptr; return _emscripten_bind_PalmettoGallberry_getPalmettoGallberyLitterLoad_0(self); -};; +}; -PalmettoGallberry.prototype['getPalmettoGallberyLiveFineFuelLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyLiveFineFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['getPalmettoGallberyLiveFineFuelLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyLiveFineFuelLoad = function() { var self = this.ptr; return _emscripten_bind_PalmettoGallberry_getPalmettoGallberyLiveFineFuelLoad_0(self); -};; +}; -PalmettoGallberry.prototype['getPalmettoGallberyLiveFoliageLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyLiveFoliageLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['getPalmettoGallberyLiveFoliageLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyLiveFoliageLoad = function() { var self = this.ptr; return _emscripten_bind_PalmettoGallberry_getPalmettoGallberyLiveFoliageLoad_0(self); -};; +}; -PalmettoGallberry.prototype['getPalmettoGallberyLiveMediumFuelLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyLiveMediumFuelLoad = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['getPalmettoGallberyLiveMediumFuelLoad'] = PalmettoGallberry.prototype.getPalmettoGallberyLiveMediumFuelLoad = function() { var self = this.ptr; return _emscripten_bind_PalmettoGallberry_getPalmettoGallberyLiveMediumFuelLoad_0(self); -};; +}; + - PalmettoGallberry.prototype['__destroy__'] = PalmettoGallberry.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +PalmettoGallberry.prototype['__destroy__'] = PalmettoGallberry.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_PalmettoGallberry___destroy___0(self); }; -// WesternAspen -/** @suppress {undefinedVars, duplicate} @this{Object} */function WesternAspen() { + +// Interface: WesternAspen + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function WesternAspen() { this.ptr = _emscripten_bind_WesternAspen_WesternAspen_0(); getCache(WesternAspen)[this.ptr] = this; -};; +}; + WesternAspen.prototype = Object.create(WrapperObject.prototype); WesternAspen.prototype.constructor = WesternAspen; WesternAspen.prototype.__class__ = WesternAspen; WesternAspen.__cache__ = {}; Module['WesternAspen'] = WesternAspen; - -WesternAspen.prototype['initializeMembers'] = WesternAspen.prototype.initializeMembers = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['initializeMembers'] = WesternAspen.prototype.initializeMembers = function() { var self = this.ptr; _emscripten_bind_WesternAspen_initializeMembers_0(self); -};; +}; -WesternAspen.prototype['calculateAspenMortality'] = WesternAspen.prototype.calculateAspenMortality = /** @suppress {undefinedVars, duplicate} @this{Object} */function(severity, flameLength, DBH) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['calculateAspenMortality'] = WesternAspen.prototype.calculateAspenMortality = function(severity, flameLength, DBH) { var self = this.ptr; if (severity && typeof severity === 'object') severity = severity.ptr; if (flameLength && typeof flameLength === 'object') flameLength = flameLength.ptr; if (DBH && typeof DBH === 'object') DBH = DBH.ptr; return _emscripten_bind_WesternAspen_calculateAspenMortality_3(self, severity, flameLength, DBH); -};; +}; -WesternAspen.prototype['getAspenFuelBedDepth'] = WesternAspen.prototype.getAspenFuelBedDepth = /** @suppress {undefinedVars, duplicate} @this{Object} */function(typeIndex) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['getAspenFuelBedDepth'] = WesternAspen.prototype.getAspenFuelBedDepth = function(typeIndex) { var self = this.ptr; if (typeIndex && typeof typeIndex === 'object') typeIndex = typeIndex.ptr; return _emscripten_bind_WesternAspen_getAspenFuelBedDepth_1(self, typeIndex); -};; +}; -WesternAspen.prototype['getAspenHeatOfCombustionDead'] = WesternAspen.prototype.getAspenHeatOfCombustionDead = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['getAspenHeatOfCombustionDead'] = WesternAspen.prototype.getAspenHeatOfCombustionDead = function() { var self = this.ptr; return _emscripten_bind_WesternAspen_getAspenHeatOfCombustionDead_0(self); -};; +}; -WesternAspen.prototype['getAspenHeatOfCombustionLive'] = WesternAspen.prototype.getAspenHeatOfCombustionLive = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['getAspenHeatOfCombustionLive'] = WesternAspen.prototype.getAspenHeatOfCombustionLive = function() { var self = this.ptr; return _emscripten_bind_WesternAspen_getAspenHeatOfCombustionLive_0(self); -};; +}; -WesternAspen.prototype['getAspenLoadDeadOneHour'] = WesternAspen.prototype.getAspenLoadDeadOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['getAspenLoadDeadOneHour'] = WesternAspen.prototype.getAspenLoadDeadOneHour = function() { var self = this.ptr; return _emscripten_bind_WesternAspen_getAspenLoadDeadOneHour_0(self); -};; +}; -WesternAspen.prototype['getAspenLoadDeadTenHour'] = WesternAspen.prototype.getAspenLoadDeadTenHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['getAspenLoadDeadTenHour'] = WesternAspen.prototype.getAspenLoadDeadTenHour = function() { var self = this.ptr; return _emscripten_bind_WesternAspen_getAspenLoadDeadTenHour_0(self); -};; +}; -WesternAspen.prototype['getAspenLoadLiveHerbaceous'] = WesternAspen.prototype.getAspenLoadLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['getAspenLoadLiveHerbaceous'] = WesternAspen.prototype.getAspenLoadLiveHerbaceous = function() { var self = this.ptr; return _emscripten_bind_WesternAspen_getAspenLoadLiveHerbaceous_0(self); -};; +}; -WesternAspen.prototype['getAspenLoadLiveWoody'] = WesternAspen.prototype.getAspenLoadLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['getAspenLoadLiveWoody'] = WesternAspen.prototype.getAspenLoadLiveWoody = function() { var self = this.ptr; return _emscripten_bind_WesternAspen_getAspenLoadLiveWoody_0(self); -};; +}; -WesternAspen.prototype['getAspenMoistureOfExtinctionDead'] = WesternAspen.prototype.getAspenMoistureOfExtinctionDead = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['getAspenMoistureOfExtinctionDead'] = WesternAspen.prototype.getAspenMoistureOfExtinctionDead = function() { var self = this.ptr; return _emscripten_bind_WesternAspen_getAspenMoistureOfExtinctionDead_0(self); -};; +}; -WesternAspen.prototype['getAspenMortality'] = WesternAspen.prototype.getAspenMortality = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['getAspenMortality'] = WesternAspen.prototype.getAspenMortality = function() { var self = this.ptr; return _emscripten_bind_WesternAspen_getAspenMortality_0(self); -};; +}; -WesternAspen.prototype['getAspenSavrDeadOneHour'] = WesternAspen.prototype.getAspenSavrDeadOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['getAspenSavrDeadOneHour'] = WesternAspen.prototype.getAspenSavrDeadOneHour = function() { var self = this.ptr; return _emscripten_bind_WesternAspen_getAspenSavrDeadOneHour_0(self); -};; +}; -WesternAspen.prototype['getAspenSavrDeadTenHour'] = WesternAspen.prototype.getAspenSavrDeadTenHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['getAspenSavrDeadTenHour'] = WesternAspen.prototype.getAspenSavrDeadTenHour = function() { var self = this.ptr; return _emscripten_bind_WesternAspen_getAspenSavrDeadTenHour_0(self); -};; +}; -WesternAspen.prototype['getAspenSavrLiveHerbaceous'] = WesternAspen.prototype.getAspenSavrLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['getAspenSavrLiveHerbaceous'] = WesternAspen.prototype.getAspenSavrLiveHerbaceous = function() { var self = this.ptr; return _emscripten_bind_WesternAspen_getAspenSavrLiveHerbaceous_0(self); -};; +}; -WesternAspen.prototype['getAspenSavrLiveWoody'] = WesternAspen.prototype.getAspenSavrLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['getAspenSavrLiveWoody'] = WesternAspen.prototype.getAspenSavrLiveWoody = function() { var self = this.ptr; return _emscripten_bind_WesternAspen_getAspenSavrLiveWoody_0(self); -};; +}; - WesternAspen.prototype['__destroy__'] = WesternAspen.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WesternAspen.prototype['__destroy__'] = WesternAspen.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_WesternAspen___destroy___0(self); }; -// SIGCrown -/** @suppress {undefinedVars, duplicate} @this{Object} */function SIGCrown(fuelModels) { + +// Interface: SIGCrown + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SIGCrown(fuelModels) { if (fuelModels && typeof fuelModels === 'object') fuelModels = fuelModels.ptr; this.ptr = _emscripten_bind_SIGCrown_SIGCrown_1(fuelModels); getCache(SIGCrown)[this.ptr] = this; -};; +}; + SIGCrown.prototype = Object.create(WrapperObject.prototype); SIGCrown.prototype.constructor = SIGCrown; SIGCrown.prototype.__class__ = SIGCrown; SIGCrown.__cache__ = {}; Module['SIGCrown'] = SIGCrown; - -SIGCrown.prototype['getFireType'] = SIGCrown.prototype.getFireType = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFireType'] = SIGCrown.prototype.getFireType = function() { var self = this.ptr; return _emscripten_bind_SIGCrown_getFireType_0(self); -};; +}; -SIGCrown.prototype['getIsMoistureScenarioDefinedByIndex'] = SIGCrown.prototype.getIsMoistureScenarioDefinedByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getIsMoistureScenarioDefinedByIndex'] = SIGCrown.prototype.getIsMoistureScenarioDefinedByIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return !!(_emscripten_bind_SIGCrown_getIsMoistureScenarioDefinedByIndex_1(self, index)); -};; +}; -SIGCrown.prototype['getIsMoistureScenarioDefinedByName'] = SIGCrown.prototype.getIsMoistureScenarioDefinedByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getIsMoistureScenarioDefinedByName'] = SIGCrown.prototype.getIsMoistureScenarioDefinedByName = function(name) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); return !!(_emscripten_bind_SIGCrown_getIsMoistureScenarioDefinedByName_1(self, name)); -};; +}; -SIGCrown.prototype['isAllFuelLoadZero'] = SIGCrown.prototype.isAllFuelLoadZero = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['isAllFuelLoadZero'] = SIGCrown.prototype.isAllFuelLoadZero = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return !!(_emscripten_bind_SIGCrown_isAllFuelLoadZero_1(self, fuelModelNumber)); -};; +}; -SIGCrown.prototype['isFuelDynamic'] = SIGCrown.prototype.isFuelDynamic = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['isFuelDynamic'] = SIGCrown.prototype.isFuelDynamic = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return !!(_emscripten_bind_SIGCrown_isFuelDynamic_1(self, fuelModelNumber)); -};; +}; -SIGCrown.prototype['isFuelModelDefined'] = SIGCrown.prototype.isFuelModelDefined = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['isFuelModelDefined'] = SIGCrown.prototype.isFuelModelDefined = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return !!(_emscripten_bind_SIGCrown_isFuelModelDefined_1(self, fuelModelNumber)); -};; +}; -SIGCrown.prototype['isFuelModelReserved'] = SIGCrown.prototype.isFuelModelReserved = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['isFuelModelReserved'] = SIGCrown.prototype.isFuelModelReserved = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return !!(_emscripten_bind_SIGCrown_isFuelModelReserved_1(self, fuelModelNumber)); -};; +}; -SIGCrown.prototype['setCurrentMoistureScenarioByIndex'] = SIGCrown.prototype.setCurrentMoistureScenarioByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureScenarioIndex) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setCurrentMoistureScenarioByIndex'] = SIGCrown.prototype.setCurrentMoistureScenarioByIndex = function(moistureScenarioIndex) { var self = this.ptr; if (moistureScenarioIndex && typeof moistureScenarioIndex === 'object') moistureScenarioIndex = moistureScenarioIndex.ptr; return !!(_emscripten_bind_SIGCrown_setCurrentMoistureScenarioByIndex_1(self, moistureScenarioIndex)); -};; +}; -SIGCrown.prototype['setCurrentMoistureScenarioByName'] = SIGCrown.prototype.setCurrentMoistureScenarioByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureScenarioName) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setCurrentMoistureScenarioByName'] = SIGCrown.prototype.setCurrentMoistureScenarioByName = function(moistureScenarioName) { var self = this.ptr; ensureCache.prepare(); if (moistureScenarioName && typeof moistureScenarioName === 'object') moistureScenarioName = moistureScenarioName.ptr; else moistureScenarioName = ensureString(moistureScenarioName); return !!(_emscripten_bind_SIGCrown_setCurrentMoistureScenarioByName_1(self, moistureScenarioName)); -};; +}; -SIGCrown.prototype['getAspect'] = SIGCrown.prototype.getAspect = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getAspect'] = SIGCrown.prototype.getAspect = function() { var self = this.ptr; return _emscripten_bind_SIGCrown_getAspect_0(self); -};; +}; -SIGCrown.prototype['getCanopyBaseHeight'] = SIGCrown.prototype.getCanopyBaseHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(canopyHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCanopyBaseHeight'] = SIGCrown.prototype.getCanopyBaseHeight = function(canopyHeightUnits) { var self = this.ptr; if (canopyHeightUnits && typeof canopyHeightUnits === 'object') canopyHeightUnits = canopyHeightUnits.ptr; return _emscripten_bind_SIGCrown_getCanopyBaseHeight_1(self, canopyHeightUnits); -};; +}; -SIGCrown.prototype['getCanopyBulkDensity'] = SIGCrown.prototype.getCanopyBulkDensity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(canopyBulkDensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCanopyBulkDensity'] = SIGCrown.prototype.getCanopyBulkDensity = function(canopyBulkDensityUnits) { var self = this.ptr; if (canopyBulkDensityUnits && typeof canopyBulkDensityUnits === 'object') canopyBulkDensityUnits = canopyBulkDensityUnits.ptr; return _emscripten_bind_SIGCrown_getCanopyBulkDensity_1(self, canopyBulkDensityUnits); -};; +}; -SIGCrown.prototype['getCanopyCover'] = SIGCrown.prototype.getCanopyCover = /** @suppress {undefinedVars, duplicate} @this{Object} */function(canopyFractionUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCanopyCover'] = SIGCrown.prototype.getCanopyCover = function(canopyFractionUnits) { var self = this.ptr; if (canopyFractionUnits && typeof canopyFractionUnits === 'object') canopyFractionUnits = canopyFractionUnits.ptr; return _emscripten_bind_SIGCrown_getCanopyCover_1(self, canopyFractionUnits); -};; +}; -SIGCrown.prototype['getCanopyHeight'] = SIGCrown.prototype.getCanopyHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(canopyHeighUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCanopyHeight'] = SIGCrown.prototype.getCanopyHeight = function(canopyHeighUnits) { var self = this.ptr; if (canopyHeighUnits && typeof canopyHeighUnits === 'object') canopyHeighUnits = canopyHeighUnits.ptr; return _emscripten_bind_SIGCrown_getCanopyHeight_1(self, canopyHeighUnits); -};; +}; -SIGCrown.prototype['getCriticalOpenWindSpeed'] = SIGCrown.prototype.getCriticalOpenWindSpeed = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCriticalOpenWindSpeed'] = SIGCrown.prototype.getCriticalOpenWindSpeed = function(speedUnits) { var self = this.ptr; if (speedUnits && typeof speedUnits === 'object') speedUnits = speedUnits.ptr; return _emscripten_bind_SIGCrown_getCriticalOpenWindSpeed_1(self, speedUnits); -};; +}; -SIGCrown.prototype['getCrownCriticalFireSpreadRate'] = SIGCrown.prototype.getCrownCriticalFireSpreadRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spreadRateUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownCriticalFireSpreadRate'] = SIGCrown.prototype.getCrownCriticalFireSpreadRate = function(spreadRateUnits) { var self = this.ptr; if (spreadRateUnits && typeof spreadRateUnits === 'object') spreadRateUnits = spreadRateUnits.ptr; return _emscripten_bind_SIGCrown_getCrownCriticalFireSpreadRate_1(self, spreadRateUnits); -};; +}; -SIGCrown.prototype['getCrownCriticalSurfaceFirelineIntensity'] = SIGCrown.prototype.getCrownCriticalSurfaceFirelineIntensity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firelineIntensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownCriticalSurfaceFirelineIntensity'] = SIGCrown.prototype.getCrownCriticalSurfaceFirelineIntensity = function(firelineIntensityUnits) { var self = this.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; return _emscripten_bind_SIGCrown_getCrownCriticalSurfaceFirelineIntensity_1(self, firelineIntensityUnits); -};; +}; -SIGCrown.prototype['getCrownCriticalSurfaceFlameLength'] = SIGCrown.prototype.getCrownCriticalSurfaceFlameLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownCriticalSurfaceFlameLength'] = SIGCrown.prototype.getCrownCriticalSurfaceFlameLength = function(flameLengthUnits) { var self = this.ptr; if (flameLengthUnits && typeof flameLengthUnits === 'object') flameLengthUnits = flameLengthUnits.ptr; return _emscripten_bind_SIGCrown_getCrownCriticalSurfaceFlameLength_1(self, flameLengthUnits); -};; +}; -SIGCrown.prototype['getCrownFireActiveRatio'] = SIGCrown.prototype.getCrownFireActiveRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownFireActiveRatio'] = SIGCrown.prototype.getCrownFireActiveRatio = function() { var self = this.ptr; return _emscripten_bind_SIGCrown_getCrownFireActiveRatio_0(self); -};; +}; -SIGCrown.prototype['getCrownFireArea'] = SIGCrown.prototype.getCrownFireArea = /** @suppress {undefinedVars, duplicate} @this{Object} */function(areaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownFireArea'] = SIGCrown.prototype.getCrownFireArea = function(areaUnits) { var self = this.ptr; if (areaUnits && typeof areaUnits === 'object') areaUnits = areaUnits.ptr; return _emscripten_bind_SIGCrown_getCrownFireArea_1(self, areaUnits); -};; +}; -SIGCrown.prototype['getCrownFirePerimeter'] = SIGCrown.prototype.getCrownFirePerimeter = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownFirePerimeter'] = SIGCrown.prototype.getCrownFirePerimeter = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGCrown_getCrownFirePerimeter_1(self, lengthUnits); -};; +}; -SIGCrown.prototype['getCrownTransitionRatio'] = SIGCrown.prototype.getCrownTransitionRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownTransitionRatio'] = SIGCrown.prototype.getCrownTransitionRatio = function() { var self = this.ptr; return _emscripten_bind_SIGCrown_getCrownTransitionRatio_0(self); -};; +}; -SIGCrown.prototype['getCrownFireLengthToWidthRatio'] = SIGCrown.prototype.getCrownFireLengthToWidthRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownFireLengthToWidthRatio'] = SIGCrown.prototype.getCrownFireLengthToWidthRatio = function() { var self = this.ptr; return _emscripten_bind_SIGCrown_getCrownFireLengthToWidthRatio_0(self); -};; +}; -SIGCrown.prototype['getCrownFireSpreadDistance'] = SIGCrown.prototype.getCrownFireSpreadDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownFireSpreadDistance'] = SIGCrown.prototype.getCrownFireSpreadDistance = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGCrown_getCrownFireSpreadDistance_1(self, lengthUnits); -};; +}; -SIGCrown.prototype['getCrownFireSpreadRate'] = SIGCrown.prototype.getCrownFireSpreadRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spreadRateUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownFireSpreadRate'] = SIGCrown.prototype.getCrownFireSpreadRate = function(spreadRateUnits) { var self = this.ptr; if (spreadRateUnits && typeof spreadRateUnits === 'object') spreadRateUnits = spreadRateUnits.ptr; return _emscripten_bind_SIGCrown_getCrownFireSpreadRate_1(self, spreadRateUnits); -};; +}; -SIGCrown.prototype['getCrownFirelineIntensity'] = SIGCrown.prototype.getCrownFirelineIntensity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firelineIntensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownFirelineIntensity'] = SIGCrown.prototype.getCrownFirelineIntensity = function(firelineIntensityUnits) { var self = this.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; return _emscripten_bind_SIGCrown_getCrownFirelineIntensity_1(self, firelineIntensityUnits); -};; +}; -SIGCrown.prototype['getCrownFlameLength'] = SIGCrown.prototype.getCrownFlameLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownFlameLength'] = SIGCrown.prototype.getCrownFlameLength = function(flameLengthUnits) { var self = this.ptr; if (flameLengthUnits && typeof flameLengthUnits === 'object') flameLengthUnits = flameLengthUnits.ptr; return _emscripten_bind_SIGCrown_getCrownFlameLength_1(self, flameLengthUnits); -};; +}; -SIGCrown.prototype['getCrownFractionBurned'] = SIGCrown.prototype.getCrownFractionBurned = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownFractionBurned'] = SIGCrown.prototype.getCrownFractionBurned = function() { var self = this.ptr; return _emscripten_bind_SIGCrown_getCrownFractionBurned_0(self); -};; +}; -SIGCrown.prototype['getCrownRatio'] = SIGCrown.prototype.getCrownRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function(crownRatioUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getCrownRatio'] = SIGCrown.prototype.getCrownRatio = function(crownRatioUnits) { var self = this.ptr; if (crownRatioUnits && typeof crownRatioUnits === 'object') crownRatioUnits = crownRatioUnits.ptr; return _emscripten_bind_SIGCrown_getCrownRatio_1(self, crownRatioUnits); -};; +}; -SIGCrown.prototype['getFinalFirelineIntesity'] = SIGCrown.prototype.getFinalFirelineIntesity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firelineIntensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFinalFirelineIntesity'] = SIGCrown.prototype.getFinalFirelineIntesity = function(firelineIntensityUnits) { var self = this.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; return _emscripten_bind_SIGCrown_getFinalFirelineIntesity_1(self, firelineIntensityUnits); -};; +}; -SIGCrown.prototype['getFinalHeatPerUnitArea'] = SIGCrown.prototype.getFinalHeatPerUnitArea = /** @suppress {undefinedVars, duplicate} @this{Object} */function(heatPerUnitAreaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFinalHeatPerUnitArea'] = SIGCrown.prototype.getFinalHeatPerUnitArea = function(heatPerUnitAreaUnits) { var self = this.ptr; if (heatPerUnitAreaUnits && typeof heatPerUnitAreaUnits === 'object') heatPerUnitAreaUnits = heatPerUnitAreaUnits.ptr; return _emscripten_bind_SIGCrown_getFinalHeatPerUnitArea_1(self, heatPerUnitAreaUnits); -};; +}; -SIGCrown.prototype['getFinalSpreadRate'] = SIGCrown.prototype.getFinalSpreadRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spreadRateUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFinalSpreadRate'] = SIGCrown.prototype.getFinalSpreadRate = function(spreadRateUnits) { var self = this.ptr; if (spreadRateUnits && typeof spreadRateUnits === 'object') spreadRateUnits = spreadRateUnits.ptr; return _emscripten_bind_SIGCrown_getFinalSpreadRate_1(self, spreadRateUnits); -};; +}; -SIGCrown.prototype['getFinalSpreadDistance'] = SIGCrown.prototype.getFinalSpreadDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFinalSpreadDistance'] = SIGCrown.prototype.getFinalSpreadDistance = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGCrown_getFinalSpreadDistance_1(self, lengthUnits); -};; +}; -SIGCrown.prototype['getFinalFireArea'] = SIGCrown.prototype.getFinalFireArea = /** @suppress {undefinedVars, duplicate} @this{Object} */function(areaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFinalFireArea'] = SIGCrown.prototype.getFinalFireArea = function(areaUnits) { var self = this.ptr; if (areaUnits && typeof areaUnits === 'object') areaUnits = areaUnits.ptr; return _emscripten_bind_SIGCrown_getFinalFireArea_1(self, areaUnits); -};; +}; -SIGCrown.prototype['getFinalFirePerimeter'] = SIGCrown.prototype.getFinalFirePerimeter = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFinalFirePerimeter'] = SIGCrown.prototype.getFinalFirePerimeter = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGCrown_getFinalFirePerimeter_1(self, lengthUnits); -};; +}; -SIGCrown.prototype['getFuelHeatOfCombustionDead'] = SIGCrown.prototype.getFuelHeatOfCombustionDead = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, heatOfCombustionUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelHeatOfCombustionDead'] = SIGCrown.prototype.getFuelHeatOfCombustionDead = function(fuelModelNumber, heatOfCombustionUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (heatOfCombustionUnits && typeof heatOfCombustionUnits === 'object') heatOfCombustionUnits = heatOfCombustionUnits.ptr; return _emscripten_bind_SIGCrown_getFuelHeatOfCombustionDead_2(self, fuelModelNumber, heatOfCombustionUnits); -};; +}; -SIGCrown.prototype['getFuelHeatOfCombustionLive'] = SIGCrown.prototype.getFuelHeatOfCombustionLive = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, heatOfCombustionUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelHeatOfCombustionLive'] = SIGCrown.prototype.getFuelHeatOfCombustionLive = function(fuelModelNumber, heatOfCombustionUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (heatOfCombustionUnits && typeof heatOfCombustionUnits === 'object') heatOfCombustionUnits = heatOfCombustionUnits.ptr; return _emscripten_bind_SIGCrown_getFuelHeatOfCombustionLive_2(self, fuelModelNumber, heatOfCombustionUnits); -};; +}; -SIGCrown.prototype['getFuelLoadHundredHour'] = SIGCrown.prototype.getFuelLoadHundredHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelLoadHundredHour'] = SIGCrown.prototype.getFuelLoadHundredHour = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGCrown_getFuelLoadHundredHour_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGCrown.prototype['getFuelLoadLiveHerbaceous'] = SIGCrown.prototype.getFuelLoadLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelLoadLiveHerbaceous'] = SIGCrown.prototype.getFuelLoadLiveHerbaceous = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGCrown_getFuelLoadLiveHerbaceous_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGCrown.prototype['getFuelLoadLiveWoody'] = SIGCrown.prototype.getFuelLoadLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelLoadLiveWoody'] = SIGCrown.prototype.getFuelLoadLiveWoody = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGCrown_getFuelLoadLiveWoody_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGCrown.prototype['getFuelLoadOneHour'] = SIGCrown.prototype.getFuelLoadOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelLoadOneHour'] = SIGCrown.prototype.getFuelLoadOneHour = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGCrown_getFuelLoadOneHour_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGCrown.prototype['getFuelLoadTenHour'] = SIGCrown.prototype.getFuelLoadTenHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, loadingUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelLoadTenHour'] = SIGCrown.prototype.getFuelLoadTenHour = function(fuelModelNumber, loadingUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (loadingUnits && typeof loadingUnits === 'object') loadingUnits = loadingUnits.ptr; return _emscripten_bind_SIGCrown_getFuelLoadTenHour_2(self, fuelModelNumber, loadingUnits); -};; +}; -SIGCrown.prototype['getFuelMoistureOfExtinctionDead'] = SIGCrown.prototype.getFuelMoistureOfExtinctionDead = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelMoistureOfExtinctionDead'] = SIGCrown.prototype.getFuelMoistureOfExtinctionDead = function(fuelModelNumber, moistureUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getFuelMoistureOfExtinctionDead_2(self, fuelModelNumber, moistureUnits); -};; +}; -SIGCrown.prototype['getFuelSavrLiveHerbaceous'] = SIGCrown.prototype.getFuelSavrLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelSavrLiveHerbaceous'] = SIGCrown.prototype.getFuelSavrLiveHerbaceous = function(fuelModelNumber, savrUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGCrown_getFuelSavrLiveHerbaceous_2(self, fuelModelNumber, savrUnits); -};; +}; -SIGCrown.prototype['getFuelSavrLiveWoody'] = SIGCrown.prototype.getFuelSavrLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelSavrLiveWoody'] = SIGCrown.prototype.getFuelSavrLiveWoody = function(fuelModelNumber, savrUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGCrown_getFuelSavrLiveWoody_2(self, fuelModelNumber, savrUnits); -};; +}; -SIGCrown.prototype['getFuelSavrOneHour'] = SIGCrown.prototype.getFuelSavrOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, savrUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelSavrOneHour'] = SIGCrown.prototype.getFuelSavrOneHour = function(fuelModelNumber, savrUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (savrUnits && typeof savrUnits === 'object') savrUnits = savrUnits.ptr; return _emscripten_bind_SIGCrown_getFuelSavrOneHour_2(self, fuelModelNumber, savrUnits); -};; +}; -SIGCrown.prototype['getFuelbedDepth'] = SIGCrown.prototype.getFuelbedDepth = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelbedDepth'] = SIGCrown.prototype.getFuelbedDepth = function(fuelModelNumber, lengthUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGCrown_getFuelbedDepth_2(self, fuelModelNumber, lengthUnits); -};; +}; -SIGCrown.prototype['getMoistureFoliar'] = SIGCrown.prototype.getMoistureFoliar = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureFoliar'] = SIGCrown.prototype.getMoistureFoliar = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureFoliar_1(self, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureHundredHour'] = SIGCrown.prototype.getMoistureHundredHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureHundredHour'] = SIGCrown.prototype.getMoistureHundredHour = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureHundredHour_1(self, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureLiveHerbaceous'] = SIGCrown.prototype.getMoistureLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureLiveHerbaceous'] = SIGCrown.prototype.getMoistureLiveHerbaceous = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureLiveHerbaceous_1(self, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureLiveWoody'] = SIGCrown.prototype.getMoistureLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureLiveWoody'] = SIGCrown.prototype.getMoistureLiveWoody = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureLiveWoody_1(self, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureOneHour'] = SIGCrown.prototype.getMoistureOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureOneHour'] = SIGCrown.prototype.getMoistureOneHour = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureOneHour_1(self, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureScenarioHundredHourByIndex'] = SIGCrown.prototype.getMoistureScenarioHundredHourByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioHundredHourByIndex'] = SIGCrown.prototype.getMoistureScenarioHundredHourByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureScenarioHundredHourByIndex_2(self, index, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureScenarioHundredHourByName'] = SIGCrown.prototype.getMoistureScenarioHundredHourByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioHundredHourByName'] = SIGCrown.prototype.getMoistureScenarioHundredHourByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureScenarioHundredHourByName_2(self, name, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureScenarioLiveHerbaceousByIndex'] = SIGCrown.prototype.getMoistureScenarioLiveHerbaceousByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioLiveHerbaceousByIndex'] = SIGCrown.prototype.getMoistureScenarioLiveHerbaceousByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureScenarioLiveHerbaceousByIndex_2(self, index, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureScenarioLiveHerbaceousByName'] = SIGCrown.prototype.getMoistureScenarioLiveHerbaceousByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioLiveHerbaceousByName'] = SIGCrown.prototype.getMoistureScenarioLiveHerbaceousByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureScenarioLiveHerbaceousByName_2(self, name, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureScenarioLiveWoodyByIndex'] = SIGCrown.prototype.getMoistureScenarioLiveWoodyByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioLiveWoodyByIndex'] = SIGCrown.prototype.getMoistureScenarioLiveWoodyByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureScenarioLiveWoodyByIndex_2(self, index, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureScenarioLiveWoodyByName'] = SIGCrown.prototype.getMoistureScenarioLiveWoodyByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioLiveWoodyByName'] = SIGCrown.prototype.getMoistureScenarioLiveWoodyByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureScenarioLiveWoodyByName_2(self, name, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureScenarioOneHourByIndex'] = SIGCrown.prototype.getMoistureScenarioOneHourByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioOneHourByIndex'] = SIGCrown.prototype.getMoistureScenarioOneHourByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureScenarioOneHourByIndex_2(self, index, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureScenarioOneHourByName'] = SIGCrown.prototype.getMoistureScenarioOneHourByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioOneHourByName'] = SIGCrown.prototype.getMoistureScenarioOneHourByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureScenarioOneHourByName_2(self, name, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureScenarioTenHourByIndex'] = SIGCrown.prototype.getMoistureScenarioTenHourByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioTenHourByIndex'] = SIGCrown.prototype.getMoistureScenarioTenHourByIndex = function(index, moistureUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureScenarioTenHourByIndex_2(self, index, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureScenarioTenHourByName'] = SIGCrown.prototype.getMoistureScenarioTenHourByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioTenHourByName'] = SIGCrown.prototype.getMoistureScenarioTenHourByName = function(name, moistureUnits) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureScenarioTenHourByName_2(self, name, moistureUnits); -};; +}; -SIGCrown.prototype['getMoistureTenHour'] = SIGCrown.prototype.getMoistureTenHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureTenHour'] = SIGCrown.prototype.getMoistureTenHour = function(moistureUnits) { var self = this.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; return _emscripten_bind_SIGCrown_getMoistureTenHour_1(self, moistureUnits); -};; +}; -SIGCrown.prototype['getSlope'] = SIGCrown.prototype.getSlope = /** @suppress {undefinedVars, duplicate} @this{Object} */function(slopeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getSlope'] = SIGCrown.prototype.getSlope = function(slopeUnits) { var self = this.ptr; if (slopeUnits && typeof slopeUnits === 'object') slopeUnits = slopeUnits.ptr; return _emscripten_bind_SIGCrown_getSlope_1(self, slopeUnits); -};; +}; -SIGCrown.prototype['getSurfaceFireSpreadDistance'] = SIGCrown.prototype.getSurfaceFireSpreadDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getSurfaceFireSpreadDistance'] = SIGCrown.prototype.getSurfaceFireSpreadDistance = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SIGCrown_getSurfaceFireSpreadDistance_1(self, lengthUnits); -};; +}; -SIGCrown.prototype['getSurfaceFireSpreadRate'] = SIGCrown.prototype.getSurfaceFireSpreadRate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(spreadRateUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getSurfaceFireSpreadRate'] = SIGCrown.prototype.getSurfaceFireSpreadRate = function(spreadRateUnits) { var self = this.ptr; if (spreadRateUnits && typeof spreadRateUnits === 'object') spreadRateUnits = spreadRateUnits.ptr; return _emscripten_bind_SIGCrown_getSurfaceFireSpreadRate_1(self, spreadRateUnits); -};; +}; -SIGCrown.prototype['getWindDirection'] = SIGCrown.prototype.getWindDirection = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getWindDirection'] = SIGCrown.prototype.getWindDirection = function() { var self = this.ptr; return _emscripten_bind_SIGCrown_getWindDirection_0(self); -};; +}; -SIGCrown.prototype['getWindSpeed'] = SIGCrown.prototype.getWindSpeed = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windSpeedUnits, windHeightInputMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getWindSpeed'] = SIGCrown.prototype.getWindSpeed = function(windSpeedUnits, windHeightInputMode) { var self = this.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; if (windHeightInputMode && typeof windHeightInputMode === 'object') windHeightInputMode = windHeightInputMode.ptr; return _emscripten_bind_SIGCrown_getWindSpeed_2(self, windSpeedUnits, windHeightInputMode); -};; +}; -SIGCrown.prototype['getFuelModelNumber'] = SIGCrown.prototype.getFuelModelNumber = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelModelNumber'] = SIGCrown.prototype.getFuelModelNumber = function() { var self = this.ptr; return _emscripten_bind_SIGCrown_getFuelModelNumber_0(self); -};; +}; -SIGCrown.prototype['getMoistureScenarioIndexByName'] = SIGCrown.prototype.getMoistureScenarioIndexByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioIndexByName'] = SIGCrown.prototype.getMoistureScenarioIndexByName = function(name) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); return _emscripten_bind_SIGCrown_getMoistureScenarioIndexByName_1(self, name); -};; +}; -SIGCrown.prototype['getNumberOfMoistureScenarios'] = SIGCrown.prototype.getNumberOfMoistureScenarios = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getNumberOfMoistureScenarios'] = SIGCrown.prototype.getNumberOfMoistureScenarios = function() { var self = this.ptr; return _emscripten_bind_SIGCrown_getNumberOfMoistureScenarios_0(self); -};; +}; -SIGCrown.prototype['getFuelCode'] = SIGCrown.prototype.getFuelCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelCode'] = SIGCrown.prototype.getFuelCode = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return UTF8ToString(_emscripten_bind_SIGCrown_getFuelCode_1(self, fuelModelNumber)); -};; +}; -SIGCrown.prototype['getFuelName'] = SIGCrown.prototype.getFuelName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFuelName'] = SIGCrown.prototype.getFuelName = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; return UTF8ToString(_emscripten_bind_SIGCrown_getFuelName_1(self, fuelModelNumber)); -};; +}; -SIGCrown.prototype['getMoistureScenarioDescriptionByIndex'] = SIGCrown.prototype.getMoistureScenarioDescriptionByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioDescriptionByIndex'] = SIGCrown.prototype.getMoistureScenarioDescriptionByIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return UTF8ToString(_emscripten_bind_SIGCrown_getMoistureScenarioDescriptionByIndex_1(self, index)); -};; +}; -SIGCrown.prototype['getMoistureScenarioDescriptionByName'] = SIGCrown.prototype.getMoistureScenarioDescriptionByName = /** @suppress {undefinedVars, duplicate} @this{Object} */function(name) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioDescriptionByName'] = SIGCrown.prototype.getMoistureScenarioDescriptionByName = function(name) { var self = this.ptr; ensureCache.prepare(); if (name && typeof name === 'object') name = name.ptr; else name = ensureString(name); return UTF8ToString(_emscripten_bind_SIGCrown_getMoistureScenarioDescriptionByName_1(self, name)); -};; +}; -SIGCrown.prototype['getMoistureScenarioNameByIndex'] = SIGCrown.prototype.getMoistureScenarioNameByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getMoistureScenarioNameByIndex'] = SIGCrown.prototype.getMoistureScenarioNameByIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return UTF8ToString(_emscripten_bind_SIGCrown_getMoistureScenarioNameByIndex_1(self, index)); -};; +}; -SIGCrown.prototype['doCrownRun'] = SIGCrown.prototype.doCrownRun = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['doCrownRun'] = SIGCrown.prototype.doCrownRun = function() { var self = this.ptr; _emscripten_bind_SIGCrown_doCrownRun_0(self); -};; +}; -SIGCrown.prototype['doCrownRunRothermel'] = SIGCrown.prototype.doCrownRunRothermel = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['doCrownRunRothermel'] = SIGCrown.prototype.doCrownRunRothermel = function() { var self = this.ptr; _emscripten_bind_SIGCrown_doCrownRunRothermel_0(self); -};; +}; -SIGCrown.prototype['doCrownRunScottAndReinhardt'] = SIGCrown.prototype.doCrownRunScottAndReinhardt = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['doCrownRunScottAndReinhardt'] = SIGCrown.prototype.doCrownRunScottAndReinhardt = function() { var self = this.ptr; _emscripten_bind_SIGCrown_doCrownRunScottAndReinhardt_0(self); -};; +}; -SIGCrown.prototype['initializeMembers'] = SIGCrown.prototype.initializeMembers = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['initializeMembers'] = SIGCrown.prototype.initializeMembers = function() { var self = this.ptr; _emscripten_bind_SIGCrown_initializeMembers_0(self); -};; +}; -SIGCrown.prototype['setAspect'] = SIGCrown.prototype.setAspect = /** @suppress {undefinedVars, duplicate} @this{Object} */function(aspect) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setAspect'] = SIGCrown.prototype.setAspect = function(aspect) { var self = this.ptr; if (aspect && typeof aspect === 'object') aspect = aspect.ptr; _emscripten_bind_SIGCrown_setAspect_1(self, aspect); -};; +}; -SIGCrown.prototype['setCanopyBaseHeight'] = SIGCrown.prototype.setCanopyBaseHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(canopyBaseHeight, canopyHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setCanopyBaseHeight'] = SIGCrown.prototype.setCanopyBaseHeight = function(canopyBaseHeight, canopyHeightUnits) { var self = this.ptr; if (canopyBaseHeight && typeof canopyBaseHeight === 'object') canopyBaseHeight = canopyBaseHeight.ptr; if (canopyHeightUnits && typeof canopyHeightUnits === 'object') canopyHeightUnits = canopyHeightUnits.ptr; _emscripten_bind_SIGCrown_setCanopyBaseHeight_2(self, canopyBaseHeight, canopyHeightUnits); -};; +}; -SIGCrown.prototype['setCanopyBulkDensity'] = SIGCrown.prototype.setCanopyBulkDensity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(canopyBulkDensity, densityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setCanopyBulkDensity'] = SIGCrown.prototype.setCanopyBulkDensity = function(canopyBulkDensity, densityUnits) { var self = this.ptr; if (canopyBulkDensity && typeof canopyBulkDensity === 'object') canopyBulkDensity = canopyBulkDensity.ptr; if (densityUnits && typeof densityUnits === 'object') densityUnits = densityUnits.ptr; _emscripten_bind_SIGCrown_setCanopyBulkDensity_2(self, canopyBulkDensity, densityUnits); -};; +}; -SIGCrown.prototype['setCanopyCover'] = SIGCrown.prototype.setCanopyCover = /** @suppress {undefinedVars, duplicate} @this{Object} */function(canopyCover, coverUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setCanopyCover'] = SIGCrown.prototype.setCanopyCover = function(canopyCover, coverUnits) { var self = this.ptr; if (canopyCover && typeof canopyCover === 'object') canopyCover = canopyCover.ptr; if (coverUnits && typeof coverUnits === 'object') coverUnits = coverUnits.ptr; _emscripten_bind_SIGCrown_setCanopyCover_2(self, canopyCover, coverUnits); -};; +}; -SIGCrown.prototype['setCanopyHeight'] = SIGCrown.prototype.setCanopyHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(canopyHeight, canopyHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setCanopyHeight'] = SIGCrown.prototype.setCanopyHeight = function(canopyHeight, canopyHeightUnits) { var self = this.ptr; if (canopyHeight && typeof canopyHeight === 'object') canopyHeight = canopyHeight.ptr; if (canopyHeightUnits && typeof canopyHeightUnits === 'object') canopyHeightUnits = canopyHeightUnits.ptr; _emscripten_bind_SIGCrown_setCanopyHeight_2(self, canopyHeight, canopyHeightUnits); -};; +}; -SIGCrown.prototype['setCrownRatio'] = SIGCrown.prototype.setCrownRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function(crownRatio, crownRatioUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setCrownRatio'] = SIGCrown.prototype.setCrownRatio = function(crownRatio, crownRatioUnits) { var self = this.ptr; if (crownRatio && typeof crownRatio === 'object') crownRatio = crownRatio.ptr; if (crownRatioUnits && typeof crownRatioUnits === 'object') crownRatioUnits = crownRatioUnits.ptr; _emscripten_bind_SIGCrown_setCrownRatio_2(self, crownRatio, crownRatioUnits); -};; +}; -SIGCrown.prototype['setFuelModelNumber'] = SIGCrown.prototype.setFuelModelNumber = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setFuelModelNumber'] = SIGCrown.prototype.setFuelModelNumber = function(fuelModelNumber) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; _emscripten_bind_SIGCrown_setFuelModelNumber_1(self, fuelModelNumber); -};; +}; -SIGCrown.prototype['setCrownFireCalculationMethod'] = SIGCrown.prototype.setCrownFireCalculationMethod = /** @suppress {undefinedVars, duplicate} @this{Object} */function(CrownFireCalculationMethod) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setCrownFireCalculationMethod'] = SIGCrown.prototype.setCrownFireCalculationMethod = function(CrownFireCalculationMethod) { var self = this.ptr; if (CrownFireCalculationMethod && typeof CrownFireCalculationMethod === 'object') CrownFireCalculationMethod = CrownFireCalculationMethod.ptr; _emscripten_bind_SIGCrown_setCrownFireCalculationMethod_1(self, CrownFireCalculationMethod); -};; +}; -SIGCrown.prototype['setElapsedTime'] = SIGCrown.prototype.setElapsedTime = /** @suppress {undefinedVars, duplicate} @this{Object} */function(elapsedTime, timeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setElapsedTime'] = SIGCrown.prototype.setElapsedTime = function(elapsedTime, timeUnits) { var self = this.ptr; if (elapsedTime && typeof elapsedTime === 'object') elapsedTime = elapsedTime.ptr; if (timeUnits && typeof timeUnits === 'object') timeUnits = timeUnits.ptr; _emscripten_bind_SIGCrown_setElapsedTime_2(self, elapsedTime, timeUnits); -};; +}; -SIGCrown.prototype['setFuelModels'] = SIGCrown.prototype.setFuelModels = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModels) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setFuelModels'] = SIGCrown.prototype.setFuelModels = function(fuelModels) { var self = this.ptr; if (fuelModels && typeof fuelModels === 'object') fuelModels = fuelModels.ptr; _emscripten_bind_SIGCrown_setFuelModels_1(self, fuelModels); -};; +}; -SIGCrown.prototype['setMoistureDeadAggregate'] = SIGCrown.prototype.setMoistureDeadAggregate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureDead, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setMoistureDeadAggregate'] = SIGCrown.prototype.setMoistureDeadAggregate = function(moistureDead, moistureUnits) { var self = this.ptr; if (moistureDead && typeof moistureDead === 'object') moistureDead = moistureDead.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGCrown_setMoistureDeadAggregate_2(self, moistureDead, moistureUnits); -};; +}; -SIGCrown.prototype['setMoistureFoliar'] = SIGCrown.prototype.setMoistureFoliar = /** @suppress {undefinedVars, duplicate} @this{Object} */function(foliarMoisture, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setMoistureFoliar'] = SIGCrown.prototype.setMoistureFoliar = function(foliarMoisture, moistureUnits) { var self = this.ptr; if (foliarMoisture && typeof foliarMoisture === 'object') foliarMoisture = foliarMoisture.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGCrown_setMoistureFoliar_2(self, foliarMoisture, moistureUnits); -};; +}; -SIGCrown.prototype['setMoistureHundredHour'] = SIGCrown.prototype.setMoistureHundredHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureHundredHour, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setMoistureHundredHour'] = SIGCrown.prototype.setMoistureHundredHour = function(moistureHundredHour, moistureUnits) { var self = this.ptr; if (moistureHundredHour && typeof moistureHundredHour === 'object') moistureHundredHour = moistureHundredHour.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGCrown_setMoistureHundredHour_2(self, moistureHundredHour, moistureUnits); -};; +}; -SIGCrown.prototype['setMoistureInputMode'] = SIGCrown.prototype.setMoistureInputMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureInputMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setMoistureInputMode'] = SIGCrown.prototype.setMoistureInputMode = function(moistureInputMode) { var self = this.ptr; if (moistureInputMode && typeof moistureInputMode === 'object') moistureInputMode = moistureInputMode.ptr; _emscripten_bind_SIGCrown_setMoistureInputMode_1(self, moistureInputMode); -};; +}; -SIGCrown.prototype['setMoistureLiveAggregate'] = SIGCrown.prototype.setMoistureLiveAggregate = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureLive, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setMoistureLiveAggregate'] = SIGCrown.prototype.setMoistureLiveAggregate = function(moistureLive, moistureUnits) { var self = this.ptr; if (moistureLive && typeof moistureLive === 'object') moistureLive = moistureLive.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGCrown_setMoistureLiveAggregate_2(self, moistureLive, moistureUnits); -};; +}; -SIGCrown.prototype['setMoistureLiveHerbaceous'] = SIGCrown.prototype.setMoistureLiveHerbaceous = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureLiveHerbaceous, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setMoistureLiveHerbaceous'] = SIGCrown.prototype.setMoistureLiveHerbaceous = function(moistureLiveHerbaceous, moistureUnits) { var self = this.ptr; if (moistureLiveHerbaceous && typeof moistureLiveHerbaceous === 'object') moistureLiveHerbaceous = moistureLiveHerbaceous.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGCrown_setMoistureLiveHerbaceous_2(self, moistureLiveHerbaceous, moistureUnits); -};; +}; -SIGCrown.prototype['setMoistureLiveWoody'] = SIGCrown.prototype.setMoistureLiveWoody = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureLiveWoody, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setMoistureLiveWoody'] = SIGCrown.prototype.setMoistureLiveWoody = function(moistureLiveWoody, moistureUnits) { var self = this.ptr; if (moistureLiveWoody && typeof moistureLiveWoody === 'object') moistureLiveWoody = moistureLiveWoody.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGCrown_setMoistureLiveWoody_2(self, moistureLiveWoody, moistureUnits); -};; +}; -SIGCrown.prototype['setMoistureOneHour'] = SIGCrown.prototype.setMoistureOneHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureOneHour, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setMoistureOneHour'] = SIGCrown.prototype.setMoistureOneHour = function(moistureOneHour, moistureUnits) { var self = this.ptr; if (moistureOneHour && typeof moistureOneHour === 'object') moistureOneHour = moistureOneHour.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGCrown_setMoistureOneHour_2(self, moistureOneHour, moistureUnits); -};; +}; -SIGCrown.prototype['setMoistureScenarios'] = SIGCrown.prototype.setMoistureScenarios = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureScenarios) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setMoistureScenarios'] = SIGCrown.prototype.setMoistureScenarios = function(moistureScenarios) { var self = this.ptr; if (moistureScenarios && typeof moistureScenarios === 'object') moistureScenarios = moistureScenarios.ptr; _emscripten_bind_SIGCrown_setMoistureScenarios_1(self, moistureScenarios); -};; +}; -SIGCrown.prototype['setMoistureTenHour'] = SIGCrown.prototype.setMoistureTenHour = /** @suppress {undefinedVars, duplicate} @this{Object} */function(moistureTenHour, moistureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setMoistureTenHour'] = SIGCrown.prototype.setMoistureTenHour = function(moistureTenHour, moistureUnits) { var self = this.ptr; if (moistureTenHour && typeof moistureTenHour === 'object') moistureTenHour = moistureTenHour.ptr; if (moistureUnits && typeof moistureUnits === 'object') moistureUnits = moistureUnits.ptr; _emscripten_bind_SIGCrown_setMoistureTenHour_2(self, moistureTenHour, moistureUnits); -};; +}; -SIGCrown.prototype['setSlope'] = SIGCrown.prototype.setSlope = /** @suppress {undefinedVars, duplicate} @this{Object} */function(slope, slopeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setSlope'] = SIGCrown.prototype.setSlope = function(slope, slopeUnits) { var self = this.ptr; if (slope && typeof slope === 'object') slope = slope.ptr; if (slopeUnits && typeof slopeUnits === 'object') slopeUnits = slopeUnits.ptr; _emscripten_bind_SIGCrown_setSlope_2(self, slope, slopeUnits); -};; +}; -SIGCrown.prototype['setUserProvidedWindAdjustmentFactor'] = SIGCrown.prototype.setUserProvidedWindAdjustmentFactor = /** @suppress {undefinedVars, duplicate} @this{Object} */function(userProvidedWindAdjustmentFactor) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setUserProvidedWindAdjustmentFactor'] = SIGCrown.prototype.setUserProvidedWindAdjustmentFactor = function(userProvidedWindAdjustmentFactor) { var self = this.ptr; if (userProvidedWindAdjustmentFactor && typeof userProvidedWindAdjustmentFactor === 'object') userProvidedWindAdjustmentFactor = userProvidedWindAdjustmentFactor.ptr; _emscripten_bind_SIGCrown_setUserProvidedWindAdjustmentFactor_1(self, userProvidedWindAdjustmentFactor); -};; +}; -SIGCrown.prototype['setWindAdjustmentFactorCalculationMethod'] = SIGCrown.prototype.setWindAdjustmentFactorCalculationMethod = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windAdjustmentFactorCalculationMethod) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setWindAdjustmentFactorCalculationMethod'] = SIGCrown.prototype.setWindAdjustmentFactorCalculationMethod = function(windAdjustmentFactorCalculationMethod) { var self = this.ptr; if (windAdjustmentFactorCalculationMethod && typeof windAdjustmentFactorCalculationMethod === 'object') windAdjustmentFactorCalculationMethod = windAdjustmentFactorCalculationMethod.ptr; _emscripten_bind_SIGCrown_setWindAdjustmentFactorCalculationMethod_1(self, windAdjustmentFactorCalculationMethod); -};; +}; -SIGCrown.prototype['setWindAndSpreadOrientationMode'] = SIGCrown.prototype.setWindAndSpreadOrientationMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windAndSpreadAngleMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setWindAndSpreadOrientationMode'] = SIGCrown.prototype.setWindAndSpreadOrientationMode = function(windAndSpreadAngleMode) { var self = this.ptr; if (windAndSpreadAngleMode && typeof windAndSpreadAngleMode === 'object') windAndSpreadAngleMode = windAndSpreadAngleMode.ptr; _emscripten_bind_SIGCrown_setWindAndSpreadOrientationMode_1(self, windAndSpreadAngleMode); -};; +}; -SIGCrown.prototype['setWindDirection'] = SIGCrown.prototype.setWindDirection = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windDirection) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setWindDirection'] = SIGCrown.prototype.setWindDirection = function(windDirection) { var self = this.ptr; if (windDirection && typeof windDirection === 'object') windDirection = windDirection.ptr; _emscripten_bind_SIGCrown_setWindDirection_1(self, windDirection); -};; +}; -SIGCrown.prototype['setWindHeightInputMode'] = SIGCrown.prototype.setWindHeightInputMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windHeightInputMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setWindHeightInputMode'] = SIGCrown.prototype.setWindHeightInputMode = function(windHeightInputMode) { var self = this.ptr; if (windHeightInputMode && typeof windHeightInputMode === 'object') windHeightInputMode = windHeightInputMode.ptr; _emscripten_bind_SIGCrown_setWindHeightInputMode_1(self, windHeightInputMode); -};; +}; -SIGCrown.prototype['setWindSpeed'] = SIGCrown.prototype.setWindSpeed = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windSpeed, windSpeedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['setWindSpeed'] = SIGCrown.prototype.setWindSpeed = function(windSpeed, windSpeedUnits) { var self = this.ptr; if (windSpeed && typeof windSpeed === 'object') windSpeed = windSpeed.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; _emscripten_bind_SIGCrown_setWindSpeed_2(self, windSpeed, windSpeedUnits); -};; +}; -SIGCrown.prototype['updateCrownInputs'] = SIGCrown.prototype.updateCrownInputs = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureFoliar, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyBaseHeight, canopyHeightUnits, crownRatio, crownRatioUnits, canopyBulkDensity, densityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['updateCrownInputs'] = SIGCrown.prototype.updateCrownInputs = function(fuelModelNumber, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureFoliar, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyBaseHeight, canopyHeightUnits, crownRatio, crownRatioUnits, canopyBulkDensity, densityUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (moistureOneHour && typeof moistureOneHour === 'object') moistureOneHour = moistureOneHour.ptr; @@ -4509,9 +5216,10 @@ SIGCrown.prototype['updateCrownInputs'] = SIGCrown.prototype.updateCrownInputs = if (canopyBulkDensity && typeof canopyBulkDensity === 'object') canopyBulkDensity = canopyBulkDensity.ptr; if (densityUnits && typeof densityUnits === 'object') densityUnits = densityUnits.ptr; _emscripten_bind_SIGCrown_updateCrownInputs_25(self, fuelModelNumber, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureFoliar, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyBaseHeight, canopyHeightUnits, crownRatio, crownRatioUnits, canopyBulkDensity, densityUnits); -};; +}; -SIGCrown.prototype['updateCrownsSurfaceInputs'] = SIGCrown.prototype.updateCrownsSurfaceInputs = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fuelModelNumber, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['updateCrownsSurfaceInputs'] = SIGCrown.prototype.updateCrownsSurfaceInputs = function(fuelModelNumber, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnits) { var self = this.ptr; if (fuelModelNumber && typeof fuelModelNumber === 'object') fuelModelNumber = fuelModelNumber.ptr; if (moistureOneHour && typeof moistureOneHour === 'object') moistureOneHour = moistureOneHour.ptr; @@ -4535,69 +5243,84 @@ SIGCrown.prototype['updateCrownsSurfaceInputs'] = SIGCrown.prototype.updateCrown if (crownRatio && typeof crownRatio === 'object') crownRatio = crownRatio.ptr; if (crownRatioUnits && typeof crownRatioUnits === 'object') crownRatioUnits = crownRatioUnits.ptr; _emscripten_bind_SIGCrown_updateCrownsSurfaceInputs_21(self, fuelModelNumber, moistureOneHour, moistureTenHour, moistureHundredHour, moistureLiveHerbaceous, moistureLiveWoody, moistureUnits, windSpeed, windSpeedUnits, windHeightInputMode, windDirection, windAndSpreadOrientationMode, slope, slopeUnits, aspect, canopyCover, coverUnits, canopyHeight, canopyHeightUnits, crownRatio, crownRatioUnits); -};; +}; -SIGCrown.prototype['getFinalFlameLength'] = SIGCrown.prototype.getFinalFlameLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['getFinalFlameLength'] = SIGCrown.prototype.getFinalFlameLength = function(flameLengthUnits) { var self = this.ptr; if (flameLengthUnits && typeof flameLengthUnits === 'object') flameLengthUnits = flameLengthUnits.ptr; return _emscripten_bind_SIGCrown_getFinalFlameLength_1(self, flameLengthUnits); -};; +}; - SIGCrown.prototype['__destroy__'] = SIGCrown.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGCrown.prototype['__destroy__'] = SIGCrown.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SIGCrown___destroy___0(self); }; -// SpeciesMasterTableRecord -/** @suppress {undefinedVars, duplicate} @this{Object} */function SpeciesMasterTableRecord(rhs) { + +// Interface: SpeciesMasterTableRecord + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SpeciesMasterTableRecord(rhs) { if (rhs && typeof rhs === 'object') rhs = rhs.ptr; if (rhs === undefined) { this.ptr = _emscripten_bind_SpeciesMasterTableRecord_SpeciesMasterTableRecord_0(); getCache(SpeciesMasterTableRecord)[this.ptr] = this;return } this.ptr = _emscripten_bind_SpeciesMasterTableRecord_SpeciesMasterTableRecord_1(rhs); getCache(SpeciesMasterTableRecord)[this.ptr] = this; -};; +}; + SpeciesMasterTableRecord.prototype = Object.create(WrapperObject.prototype); SpeciesMasterTableRecord.prototype.constructor = SpeciesMasterTableRecord; SpeciesMasterTableRecord.prototype.__class__ = SpeciesMasterTableRecord; SpeciesMasterTableRecord.__cache__ = {}; Module['SpeciesMasterTableRecord'] = SpeciesMasterTableRecord; - SpeciesMasterTableRecord.prototype['__destroy__'] = SpeciesMasterTableRecord.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeciesMasterTableRecord.prototype['__destroy__'] = SpeciesMasterTableRecord.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SpeciesMasterTableRecord___destroy___0(self); }; -// SpeciesMasterTable -/** @suppress {undefinedVars, duplicate} @this{Object} */function SpeciesMasterTable() { + +// Interface: SpeciesMasterTable + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SpeciesMasterTable() { this.ptr = _emscripten_bind_SpeciesMasterTable_SpeciesMasterTable_0(); getCache(SpeciesMasterTable)[this.ptr] = this; -};; +}; + SpeciesMasterTable.prototype = Object.create(WrapperObject.prototype); SpeciesMasterTable.prototype.constructor = SpeciesMasterTable; SpeciesMasterTable.prototype.__class__ = SpeciesMasterTable; SpeciesMasterTable.__cache__ = {}; Module['SpeciesMasterTable'] = SpeciesMasterTable; - -SpeciesMasterTable.prototype['initializeMasterTable'] = SpeciesMasterTable.prototype.initializeMasterTable = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeciesMasterTable.prototype['initializeMasterTable'] = SpeciesMasterTable.prototype.initializeMasterTable = function() { var self = this.ptr; _emscripten_bind_SpeciesMasterTable_initializeMasterTable_0(self); -};; +}; -SpeciesMasterTable.prototype['getSpeciesTableIndexFromSpeciesCode'] = SpeciesMasterTable.prototype.getSpeciesTableIndexFromSpeciesCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesCode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeciesMasterTable.prototype['getSpeciesTableIndexFromSpeciesCode'] = SpeciesMasterTable.prototype.getSpeciesTableIndexFromSpeciesCode = function(speciesCode) { var self = this.ptr; ensureCache.prepare(); if (speciesCode && typeof speciesCode === 'object') speciesCode = speciesCode.ptr; else speciesCode = ensureString(speciesCode); return _emscripten_bind_SpeciesMasterTable_getSpeciesTableIndexFromSpeciesCode_1(self, speciesCode); -};; +}; -SpeciesMasterTable.prototype['getSpeciesTableIndexFromSpeciesCodeAndEquationType'] = SpeciesMasterTable.prototype.getSpeciesTableIndexFromSpeciesCodeAndEquationType = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesCode, equationType) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeciesMasterTable.prototype['getSpeciesTableIndexFromSpeciesCodeAndEquationType'] = SpeciesMasterTable.prototype.getSpeciesTableIndexFromSpeciesCodeAndEquationType = function(speciesCode, equationType) { var self = this.ptr; ensureCache.prepare(); if (speciesCode && typeof speciesCode === 'object') speciesCode = speciesCode.ptr; else speciesCode = ensureString(speciesCode); if (equationType && typeof equationType === 'object') equationType = equationType.ptr; return _emscripten_bind_SpeciesMasterTable_getSpeciesTableIndexFromSpeciesCodeAndEquationType_2(self, speciesCode, equationType); -};; +}; -SpeciesMasterTable.prototype['insertRecord'] = SpeciesMasterTable.prototype.insertRecord = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesCode, scientificName, commonName, mortalityEquation, brkEqu, crownCoefficientCode, Alaska, California, EasternArea, GreatBasin, NorthernRockies, Northwest, RocketyMountain, SouthernArea, SouthWest, equationType, crownDamageEquationCode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeciesMasterTable.prototype['insertRecord'] = SpeciesMasterTable.prototype.insertRecord = function(speciesCode, scientificName, commonName, mortalityEquation, brkEqu, crownCoefficientCode, Alaska, California, EasternArea, GreatBasin, NorthernRockies, Northwest, RocketyMountain, SouthernArea, SouthWest, equationType, crownDamageEquationCode) { var self = this.ptr; ensureCache.prepare(); if (speciesCode && typeof speciesCode === 'object') speciesCode = speciesCode.ptr; @@ -4621,61 +5344,72 @@ SpeciesMasterTable.prototype['insertRecord'] = SpeciesMasterTable.prototype.inse if (equationType && typeof equationType === 'object') equationType = equationType.ptr; if (crownDamageEquationCode && typeof crownDamageEquationCode === 'object') crownDamageEquationCode = crownDamageEquationCode.ptr; _emscripten_bind_SpeciesMasterTable_insertRecord_17(self, speciesCode, scientificName, commonName, mortalityEquation, brkEqu, crownCoefficientCode, Alaska, California, EasternArea, GreatBasin, NorthernRockies, Northwest, RocketyMountain, SouthernArea, SouthWest, equationType, crownDamageEquationCode); -};; +}; - SpeciesMasterTable.prototype['__destroy__'] = SpeciesMasterTable.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SpeciesMasterTable.prototype['__destroy__'] = SpeciesMasterTable.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SpeciesMasterTable___destroy___0(self); }; -// SIGMortality -/** @suppress {undefinedVars, duplicate} @this{Object} */function SIGMortality(speciesMasterTable) { + +// Interface: SIGMortality + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SIGMortality(speciesMasterTable) { if (speciesMasterTable && typeof speciesMasterTable === 'object') speciesMasterTable = speciesMasterTable.ptr; this.ptr = _emscripten_bind_SIGMortality_SIGMortality_1(speciesMasterTable); getCache(SIGMortality)[this.ptr] = this; -};; +}; + SIGMortality.prototype = Object.create(WrapperObject.prototype); SIGMortality.prototype.constructor = SIGMortality; SIGMortality.prototype.__class__ = SIGMortality; SIGMortality.__cache__ = {}; Module['SIGMortality'] = SIGMortality; - -SIGMortality.prototype['initializeMembers'] = SIGMortality.prototype.initializeMembers = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['initializeMembers'] = SIGMortality.prototype.initializeMembers = function() { var self = this.ptr; _emscripten_bind_SIGMortality_initializeMembers_0(self); -};; +}; -SIGMortality.prototype['checkIsInGACCRegionAtSpeciesTableIndex'] = SIGMortality.prototype.checkIsInGACCRegionAtSpeciesTableIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, region) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['checkIsInGACCRegionAtSpeciesTableIndex'] = SIGMortality.prototype.checkIsInGACCRegionAtSpeciesTableIndex = function(index, region) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (region && typeof region === 'object') region = region.ptr; return !!(_emscripten_bind_SIGMortality_checkIsInGACCRegionAtSpeciesTableIndex_2(self, index, region)); -};; +}; -SIGMortality.prototype['checkIsInGACCRegionFromSpeciesCode'] = SIGMortality.prototype.checkIsInGACCRegionFromSpeciesCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesCode, region) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['checkIsInGACCRegionFromSpeciesCode'] = SIGMortality.prototype.checkIsInGACCRegionFromSpeciesCode = function(speciesCode, region) { var self = this.ptr; ensureCache.prepare(); if (speciesCode && typeof speciesCode === 'object') speciesCode = speciesCode.ptr; else speciesCode = ensureString(speciesCode); if (region && typeof region === 'object') region = region.ptr; return !!(_emscripten_bind_SIGMortality_checkIsInGACCRegionFromSpeciesCode_2(self, speciesCode, region)); -};; +}; -SIGMortality.prototype['updateInputsForSpeciesCodeAndEquationType'] = SIGMortality.prototype.updateInputsForSpeciesCodeAndEquationType = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesCode, equationType) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['updateInputsForSpeciesCodeAndEquationType'] = SIGMortality.prototype.updateInputsForSpeciesCodeAndEquationType = function(speciesCode, equationType) { var self = this.ptr; ensureCache.prepare(); if (speciesCode && typeof speciesCode === 'object') speciesCode = speciesCode.ptr; else speciesCode = ensureString(speciesCode); if (equationType && typeof equationType === 'object') equationType = equationType.ptr; return !!(_emscripten_bind_SIGMortality_updateInputsForSpeciesCodeAndEquationType_2(self, speciesCode, equationType)); -};; +}; -SIGMortality.prototype['calculateMortality'] = SIGMortality.prototype.calculateMortality = /** @suppress {undefinedVars, duplicate} @this{Object} */function(probablityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['calculateMortality'] = SIGMortality.prototype.calculateMortality = function(probablityUnits) { var self = this.ptr; if (probablityUnits && typeof probablityUnits === 'object') probablityUnits = probablityUnits.ptr; return _emscripten_bind_SIGMortality_calculateMortality_1(self, probablityUnits); -};; +}; -SIGMortality.prototype['calculateScorchHeight'] = SIGMortality.prototype.calculateScorchHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firelineIntensity, firelineIntensityUnits, midFlameWindSpeed, windSpeedUnits, airTemperature, temperatureUnits, scorchHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['calculateScorchHeight'] = SIGMortality.prototype.calculateScorchHeight = function(firelineIntensity, firelineIntensityUnits, midFlameWindSpeed, windSpeedUnits, airTemperature, temperatureUnits, scorchHeightUnits) { var self = this.ptr; if (firelineIntensity && typeof firelineIntensity === 'object') firelineIntensity = firelineIntensity.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; @@ -4685,718 +5419,839 @@ SIGMortality.prototype['calculateScorchHeight'] = SIGMortality.prototype.calcula if (temperatureUnits && typeof temperatureUnits === 'object') temperatureUnits = temperatureUnits.ptr; if (scorchHeightUnits && typeof scorchHeightUnits === 'object') scorchHeightUnits = scorchHeightUnits.ptr; return _emscripten_bind_SIGMortality_calculateScorchHeight_7(self, firelineIntensity, firelineIntensityUnits, midFlameWindSpeed, windSpeedUnits, airTemperature, temperatureUnits, scorchHeightUnits); -};; +}; -SIGMortality.prototype['calculateMortalityAllDirections'] = SIGMortality.prototype.calculateMortalityAllDirections = /** @suppress {undefinedVars, duplicate} @this{Object} */function(probablityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['calculateMortalityAllDirections'] = SIGMortality.prototype.calculateMortalityAllDirections = function(probablityUnits) { var self = this.ptr; if (probablityUnits && typeof probablityUnits === 'object') probablityUnits = probablityUnits.ptr; _emscripten_bind_SIGMortality_calculateMortalityAllDirections_1(self, probablityUnits); -};; +}; -SIGMortality.prototype['getRequiredFieldVector'] = SIGMortality.prototype.getRequiredFieldVector = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getRequiredFieldVector'] = SIGMortality.prototype.getRequiredFieldVector = function() { var self = this.ptr; return wrapPointer(_emscripten_bind_SIGMortality_getRequiredFieldVector_0(self), BoolVector); -};; +}; -SIGMortality.prototype['getBeetleDamage'] = SIGMortality.prototype.getBeetleDamage = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getBeetleDamage'] = SIGMortality.prototype.getBeetleDamage = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getBeetleDamage_0(self); -};; +}; -SIGMortality.prototype['getCrownDamageEquationCode'] = SIGMortality.prototype.getCrownDamageEquationCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getCrownDamageEquationCode'] = SIGMortality.prototype.getCrownDamageEquationCode = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getCrownDamageEquationCode_0(self); -};; +}; -SIGMortality.prototype['getCrownDamageEquationCodeAtSpeciesTableIndex'] = SIGMortality.prototype.getCrownDamageEquationCodeAtSpeciesTableIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getCrownDamageEquationCodeAtSpeciesTableIndex'] = SIGMortality.prototype.getCrownDamageEquationCodeAtSpeciesTableIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return _emscripten_bind_SIGMortality_getCrownDamageEquationCodeAtSpeciesTableIndex_1(self, index); -};; +}; -SIGMortality.prototype['getCrownDamageEquationCodeFromSpeciesCode'] = SIGMortality.prototype.getCrownDamageEquationCodeFromSpeciesCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesCode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getCrownDamageEquationCodeFromSpeciesCode'] = SIGMortality.prototype.getCrownDamageEquationCodeFromSpeciesCode = function(speciesCode) { var self = this.ptr; ensureCache.prepare(); if (speciesCode && typeof speciesCode === 'object') speciesCode = speciesCode.ptr; else speciesCode = ensureString(speciesCode); return _emscripten_bind_SIGMortality_getCrownDamageEquationCodeFromSpeciesCode_1(self, speciesCode); -};; +}; -SIGMortality.prototype['getCrownDamageType'] = SIGMortality.prototype.getCrownDamageType = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getCrownDamageType'] = SIGMortality.prototype.getCrownDamageType = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getCrownDamageType_0(self); -};; +}; -SIGMortality.prototype['getCommonNameAtSpeciesTableIndex'] = SIGMortality.prototype.getCommonNameAtSpeciesTableIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getCommonNameAtSpeciesTableIndex'] = SIGMortality.prototype.getCommonNameAtSpeciesTableIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return UTF8ToString(_emscripten_bind_SIGMortality_getCommonNameAtSpeciesTableIndex_1(self, index)); -};; +}; -SIGMortality.prototype['getCommonNameFromSpeciesCode'] = SIGMortality.prototype.getCommonNameFromSpeciesCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesCode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getCommonNameFromSpeciesCode'] = SIGMortality.prototype.getCommonNameFromSpeciesCode = function(speciesCode) { var self = this.ptr; ensureCache.prepare(); if (speciesCode && typeof speciesCode === 'object') speciesCode = speciesCode.ptr; else speciesCode = ensureString(speciesCode); return UTF8ToString(_emscripten_bind_SIGMortality_getCommonNameFromSpeciesCode_1(self, speciesCode)); -};; +}; -SIGMortality.prototype['getScientificNameAtSpeciesTableIndex'] = SIGMortality.prototype.getScientificNameAtSpeciesTableIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getScientificNameAtSpeciesTableIndex'] = SIGMortality.prototype.getScientificNameAtSpeciesTableIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return UTF8ToString(_emscripten_bind_SIGMortality_getScientificNameAtSpeciesTableIndex_1(self, index)); -};; +}; -SIGMortality.prototype['getScientificNameFromSpeciesCode'] = SIGMortality.prototype.getScientificNameFromSpeciesCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesCode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getScientificNameFromSpeciesCode'] = SIGMortality.prototype.getScientificNameFromSpeciesCode = function(speciesCode) { var self = this.ptr; ensureCache.prepare(); if (speciesCode && typeof speciesCode === 'object') speciesCode = speciesCode.ptr; else speciesCode = ensureString(speciesCode); return UTF8ToString(_emscripten_bind_SIGMortality_getScientificNameFromSpeciesCode_1(self, speciesCode)); -};; +}; -SIGMortality.prototype['getSpeciesCode'] = SIGMortality.prototype.getSpeciesCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getSpeciesCode'] = SIGMortality.prototype.getSpeciesCode = function() { var self = this.ptr; return UTF8ToString(_emscripten_bind_SIGMortality_getSpeciesCode_0(self)); -};; +}; -SIGMortality.prototype['getSpeciesCodeAtSpeciesTableIndex'] = SIGMortality.prototype.getSpeciesCodeAtSpeciesTableIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getSpeciesCodeAtSpeciesTableIndex'] = SIGMortality.prototype.getSpeciesCodeAtSpeciesTableIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return UTF8ToString(_emscripten_bind_SIGMortality_getSpeciesCodeAtSpeciesTableIndex_1(self, index)); -};; +}; -SIGMortality.prototype['getEquationType'] = SIGMortality.prototype.getEquationType = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getEquationType'] = SIGMortality.prototype.getEquationType = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getEquationType_0(self); -};; +}; -SIGMortality.prototype['getEquationTypeAtSpeciesTableIndex'] = SIGMortality.prototype.getEquationTypeAtSpeciesTableIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getEquationTypeAtSpeciesTableIndex'] = SIGMortality.prototype.getEquationTypeAtSpeciesTableIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return _emscripten_bind_SIGMortality_getEquationTypeAtSpeciesTableIndex_1(self, index); -};; +}; -SIGMortality.prototype['getEquationTypeFromSpeciesCode'] = SIGMortality.prototype.getEquationTypeFromSpeciesCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesCode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getEquationTypeFromSpeciesCode'] = SIGMortality.prototype.getEquationTypeFromSpeciesCode = function(speciesCode) { var self = this.ptr; ensureCache.prepare(); if (speciesCode && typeof speciesCode === 'object') speciesCode = speciesCode.ptr; else speciesCode = ensureString(speciesCode); return _emscripten_bind_SIGMortality_getEquationTypeFromSpeciesCode_1(self, speciesCode); -};; +}; -SIGMortality.prototype['getFireSeverity'] = SIGMortality.prototype.getFireSeverity = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getFireSeverity'] = SIGMortality.prototype.getFireSeverity = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getFireSeverity_0(self); -};; +}; -SIGMortality.prototype['getFlameLengthOrScorchHeightSwitch'] = SIGMortality.prototype.getFlameLengthOrScorchHeightSwitch = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getFlameLengthOrScorchHeightSwitch'] = SIGMortality.prototype.getFlameLengthOrScorchHeightSwitch = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getFlameLengthOrScorchHeightSwitch_0(self); -};; +}; -SIGMortality.prototype['getGACCRegion'] = SIGMortality.prototype.getGACCRegion = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getGACCRegion'] = SIGMortality.prototype.getGACCRegion = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getGACCRegion_0(self); -};; +}; -SIGMortality.prototype['getSpeciesRecordVectorForGACCRegion'] = SIGMortality.prototype.getSpeciesRecordVectorForGACCRegion = /** @suppress {undefinedVars, duplicate} @this{Object} */function(region) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getSpeciesRecordVectorForGACCRegion'] = SIGMortality.prototype.getSpeciesRecordVectorForGACCRegion = function(region) { var self = this.ptr; if (region && typeof region === 'object') region = region.ptr; return wrapPointer(_emscripten_bind_SIGMortality_getSpeciesRecordVectorForGACCRegion_1(self, region), SpeciesMasterTableRecordVector); -};; +}; -SIGMortality.prototype['getSpeciesRecordVectorForGACCRegionAndEquationType'] = SIGMortality.prototype.getSpeciesRecordVectorForGACCRegionAndEquationType = /** @suppress {undefinedVars, duplicate} @this{Object} */function(region, equationType) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getSpeciesRecordVectorForGACCRegionAndEquationType'] = SIGMortality.prototype.getSpeciesRecordVectorForGACCRegionAndEquationType = function(region, equationType) { var self = this.ptr; if (region && typeof region === 'object') region = region.ptr; if (equationType && typeof equationType === 'object') equationType = equationType.ptr; return wrapPointer(_emscripten_bind_SIGMortality_getSpeciesRecordVectorForGACCRegionAndEquationType_2(self, region, equationType), SpeciesMasterTableRecordVector); -};; +}; -SIGMortality.prototype['getBarkThickness'] = SIGMortality.prototype.getBarkThickness = /** @suppress {undefinedVars, duplicate} @this{Object} */function(barkThicknessUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getBarkThickness'] = SIGMortality.prototype.getBarkThickness = function(barkThicknessUnits) { var self = this.ptr; if (barkThicknessUnits && typeof barkThicknessUnits === 'object') barkThicknessUnits = barkThicknessUnits.ptr; return _emscripten_bind_SIGMortality_getBarkThickness_1(self, barkThicknessUnits); -};; +}; -SIGMortality.prototype['getBasalAreaKillled'] = SIGMortality.prototype.getBasalAreaKillled = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getBasalAreaKillled'] = SIGMortality.prototype.getBasalAreaKillled = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getBasalAreaKillled_0(self); -};; +}; -SIGMortality.prototype['getBasalAreaPostfire'] = SIGMortality.prototype.getBasalAreaPostfire = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getBasalAreaPostfire'] = SIGMortality.prototype.getBasalAreaPostfire = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getBasalAreaPostfire_0(self); -};; +}; -SIGMortality.prototype['getBasalAreaPrefire'] = SIGMortality.prototype.getBasalAreaPrefire = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getBasalAreaPrefire'] = SIGMortality.prototype.getBasalAreaPrefire = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getBasalAreaPrefire_0(self); -};; +}; -SIGMortality.prototype['getBoleCharHeight'] = SIGMortality.prototype.getBoleCharHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(boleCharHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getBoleCharHeight'] = SIGMortality.prototype.getBoleCharHeight = function(boleCharHeightUnits) { var self = this.ptr; if (boleCharHeightUnits && typeof boleCharHeightUnits === 'object') boleCharHeightUnits = boleCharHeightUnits.ptr; return _emscripten_bind_SIGMortality_getBoleCharHeight_1(self, boleCharHeightUnits); -};; +}; -SIGMortality.prototype['getBoleCharHeightBacking'] = SIGMortality.prototype.getBoleCharHeightBacking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(boleCharHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getBoleCharHeightBacking'] = SIGMortality.prototype.getBoleCharHeightBacking = function(boleCharHeightUnits) { var self = this.ptr; if (boleCharHeightUnits && typeof boleCharHeightUnits === 'object') boleCharHeightUnits = boleCharHeightUnits.ptr; return _emscripten_bind_SIGMortality_getBoleCharHeightBacking_1(self, boleCharHeightUnits); -};; +}; -SIGMortality.prototype['getBoleCharHeightFlanking'] = SIGMortality.prototype.getBoleCharHeightFlanking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(boleCharHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getBoleCharHeightFlanking'] = SIGMortality.prototype.getBoleCharHeightFlanking = function(boleCharHeightUnits) { var self = this.ptr; if (boleCharHeightUnits && typeof boleCharHeightUnits === 'object') boleCharHeightUnits = boleCharHeightUnits.ptr; return _emscripten_bind_SIGMortality_getBoleCharHeightFlanking_1(self, boleCharHeightUnits); -};; +}; -SIGMortality.prototype['getCambiumKillRating'] = SIGMortality.prototype.getCambiumKillRating = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getCambiumKillRating'] = SIGMortality.prototype.getCambiumKillRating = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getCambiumKillRating_0(self); -};; +}; -SIGMortality.prototype['getCrownDamage'] = SIGMortality.prototype.getCrownDamage = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getCrownDamage'] = SIGMortality.prototype.getCrownDamage = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getCrownDamage_0(self); -};; +}; -SIGMortality.prototype['getCrownRatio'] = SIGMortality.prototype.getCrownRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function(crownRatioUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getCrownRatio'] = SIGMortality.prototype.getCrownRatio = function(crownRatioUnits) { var self = this.ptr; if (crownRatioUnits && typeof crownRatioUnits === 'object') crownRatioUnits = crownRatioUnits.ptr; return _emscripten_bind_SIGMortality_getCrownRatio_1(self, crownRatioUnits); -};; +}; -SIGMortality.prototype['getCVSorCLS'] = SIGMortality.prototype.getCVSorCLS = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getCVSorCLS'] = SIGMortality.prototype.getCVSorCLS = function() { var self = this.ptr; return UTF8ToString(_emscripten_bind_SIGMortality_getCVSorCLS_0(self)); -};; +}; -SIGMortality.prototype['getDBH'] = SIGMortality.prototype.getDBH = /** @suppress {undefinedVars, duplicate} @this{Object} */function(diameterUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getDBH'] = SIGMortality.prototype.getDBH = function(diameterUnits) { var self = this.ptr; if (diameterUnits && typeof diameterUnits === 'object') diameterUnits = diameterUnits.ptr; return _emscripten_bind_SIGMortality_getDBH_1(self, diameterUnits); -};; +}; -SIGMortality.prototype['getFlameLength'] = SIGMortality.prototype.getFlameLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getFlameLength'] = SIGMortality.prototype.getFlameLength = function(flameLengthUnits) { var self = this.ptr; if (flameLengthUnits && typeof flameLengthUnits === 'object') flameLengthUnits = flameLengthUnits.ptr; return _emscripten_bind_SIGMortality_getFlameLength_1(self, flameLengthUnits); -};; +}; -SIGMortality.prototype['getFlameLengthOrScorchHeightValue'] = SIGMortality.prototype.getFlameLengthOrScorchHeightValue = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLengthOrScorchHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getFlameLengthOrScorchHeightValue'] = SIGMortality.prototype.getFlameLengthOrScorchHeightValue = function(flameLengthOrScorchHeightUnits) { var self = this.ptr; if (flameLengthOrScorchHeightUnits && typeof flameLengthOrScorchHeightUnits === 'object') flameLengthOrScorchHeightUnits = flameLengthOrScorchHeightUnits.ptr; return _emscripten_bind_SIGMortality_getFlameLengthOrScorchHeightValue_1(self, flameLengthOrScorchHeightUnits); -};; +}; -SIGMortality.prototype['getKilledTrees'] = SIGMortality.prototype.getKilledTrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getKilledTrees'] = SIGMortality.prototype.getKilledTrees = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getKilledTrees_0(self); -};; +}; -SIGMortality.prototype['getProbabilityOfMortality'] = SIGMortality.prototype.getProbabilityOfMortality = /** @suppress {undefinedVars, duplicate} @this{Object} */function(probabilityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getProbabilityOfMortality'] = SIGMortality.prototype.getProbabilityOfMortality = function(probabilityUnits) { var self = this.ptr; if (probabilityUnits && typeof probabilityUnits === 'object') probabilityUnits = probabilityUnits.ptr; return _emscripten_bind_SIGMortality_getProbabilityOfMortality_1(self, probabilityUnits); -};; +}; -SIGMortality.prototype['getProbabilityOfMortalityBacking'] = SIGMortality.prototype.getProbabilityOfMortalityBacking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(probabilityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getProbabilityOfMortalityBacking'] = SIGMortality.prototype.getProbabilityOfMortalityBacking = function(probabilityUnits) { var self = this.ptr; if (probabilityUnits && typeof probabilityUnits === 'object') probabilityUnits = probabilityUnits.ptr; return _emscripten_bind_SIGMortality_getProbabilityOfMortalityBacking_1(self, probabilityUnits); -};; +}; -SIGMortality.prototype['getProbabilityOfMortalityFlanking'] = SIGMortality.prototype.getProbabilityOfMortalityFlanking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(probabilityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getProbabilityOfMortalityFlanking'] = SIGMortality.prototype.getProbabilityOfMortalityFlanking = function(probabilityUnits) { var self = this.ptr; if (probabilityUnits && typeof probabilityUnits === 'object') probabilityUnits = probabilityUnits.ptr; return _emscripten_bind_SIGMortality_getProbabilityOfMortalityFlanking_1(self, probabilityUnits); -};; +}; -SIGMortality.prototype['getScorchHeight'] = SIGMortality.prototype.getScorchHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(scorchHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getScorchHeight'] = SIGMortality.prototype.getScorchHeight = function(scorchHeightUnits) { var self = this.ptr; if (scorchHeightUnits && typeof scorchHeightUnits === 'object') scorchHeightUnits = scorchHeightUnits.ptr; return _emscripten_bind_SIGMortality_getScorchHeight_1(self, scorchHeightUnits); -};; +}; -SIGMortality.prototype['getScorchHeightBacking'] = SIGMortality.prototype.getScorchHeightBacking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(scorchHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getScorchHeightBacking'] = SIGMortality.prototype.getScorchHeightBacking = function(scorchHeightUnits) { var self = this.ptr; if (scorchHeightUnits && typeof scorchHeightUnits === 'object') scorchHeightUnits = scorchHeightUnits.ptr; return _emscripten_bind_SIGMortality_getScorchHeightBacking_1(self, scorchHeightUnits); -};; +}; -SIGMortality.prototype['getScorchHeightFlanking'] = SIGMortality.prototype.getScorchHeightFlanking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(scorchHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getScorchHeightFlanking'] = SIGMortality.prototype.getScorchHeightFlanking = function(scorchHeightUnits) { var self = this.ptr; if (scorchHeightUnits && typeof scorchHeightUnits === 'object') scorchHeightUnits = scorchHeightUnits.ptr; return _emscripten_bind_SIGMortality_getScorchHeightFlanking_1(self, scorchHeightUnits); -};; +}; -SIGMortality.prototype['getTotalPrefireTrees'] = SIGMortality.prototype.getTotalPrefireTrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getTotalPrefireTrees'] = SIGMortality.prototype.getTotalPrefireTrees = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getTotalPrefireTrees_0(self); -};; +}; -SIGMortality.prototype['getTreeCrownLengthScorched'] = SIGMortality.prototype.getTreeCrownLengthScorched = /** @suppress {undefinedVars, duplicate} @this{Object} */function(treeCrownLengthScorchedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getTreeCrownLengthScorched'] = SIGMortality.prototype.getTreeCrownLengthScorched = function(treeCrownLengthScorchedUnits) { var self = this.ptr; if (treeCrownLengthScorchedUnits && typeof treeCrownLengthScorchedUnits === 'object') treeCrownLengthScorchedUnits = treeCrownLengthScorchedUnits.ptr; return _emscripten_bind_SIGMortality_getTreeCrownLengthScorched_1(self, treeCrownLengthScorchedUnits); -};; +}; -SIGMortality.prototype['getTreeCrownLengthScorchedBacking'] = SIGMortality.prototype.getTreeCrownLengthScorchedBacking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(treeCrownLengthScorchedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getTreeCrownLengthScorchedBacking'] = SIGMortality.prototype.getTreeCrownLengthScorchedBacking = function(treeCrownLengthScorchedUnits) { var self = this.ptr; if (treeCrownLengthScorchedUnits && typeof treeCrownLengthScorchedUnits === 'object') treeCrownLengthScorchedUnits = treeCrownLengthScorchedUnits.ptr; return _emscripten_bind_SIGMortality_getTreeCrownLengthScorchedBacking_1(self, treeCrownLengthScorchedUnits); -};; +}; -SIGMortality.prototype['getTreeCrownLengthScorchedFlanking'] = SIGMortality.prototype.getTreeCrownLengthScorchedFlanking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(treeCrownLengthScorchedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getTreeCrownLengthScorchedFlanking'] = SIGMortality.prototype.getTreeCrownLengthScorchedFlanking = function(treeCrownLengthScorchedUnits) { var self = this.ptr; if (treeCrownLengthScorchedUnits && typeof treeCrownLengthScorchedUnits === 'object') treeCrownLengthScorchedUnits = treeCrownLengthScorchedUnits.ptr; return _emscripten_bind_SIGMortality_getTreeCrownLengthScorchedFlanking_1(self, treeCrownLengthScorchedUnits); -};; +}; -SIGMortality.prototype['getTreeCrownVolumeScorched'] = SIGMortality.prototype.getTreeCrownVolumeScorched = /** @suppress {undefinedVars, duplicate} @this{Object} */function(getTreeCrownVolumeScorchedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getTreeCrownVolumeScorched'] = SIGMortality.prototype.getTreeCrownVolumeScorched = function(getTreeCrownVolumeScorchedUnits) { var self = this.ptr; if (getTreeCrownVolumeScorchedUnits && typeof getTreeCrownVolumeScorchedUnits === 'object') getTreeCrownVolumeScorchedUnits = getTreeCrownVolumeScorchedUnits.ptr; return _emscripten_bind_SIGMortality_getTreeCrownVolumeScorched_1(self, getTreeCrownVolumeScorchedUnits); -};; +}; -SIGMortality.prototype['getTreeCrownVolumeScorchedBacking'] = SIGMortality.prototype.getTreeCrownVolumeScorchedBacking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(getTreeCrownVolumeScorchedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getTreeCrownVolumeScorchedBacking'] = SIGMortality.prototype.getTreeCrownVolumeScorchedBacking = function(getTreeCrownVolumeScorchedUnits) { var self = this.ptr; if (getTreeCrownVolumeScorchedUnits && typeof getTreeCrownVolumeScorchedUnits === 'object') getTreeCrownVolumeScorchedUnits = getTreeCrownVolumeScorchedUnits.ptr; return _emscripten_bind_SIGMortality_getTreeCrownVolumeScorchedBacking_1(self, getTreeCrownVolumeScorchedUnits); -};; +}; -SIGMortality.prototype['getTreeCrownVolumeScorchedFlanking'] = SIGMortality.prototype.getTreeCrownVolumeScorchedFlanking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(getTreeCrownVolumeScorchedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getTreeCrownVolumeScorchedFlanking'] = SIGMortality.prototype.getTreeCrownVolumeScorchedFlanking = function(getTreeCrownVolumeScorchedUnits) { var self = this.ptr; if (getTreeCrownVolumeScorchedUnits && typeof getTreeCrownVolumeScorchedUnits === 'object') getTreeCrownVolumeScorchedUnits = getTreeCrownVolumeScorchedUnits.ptr; return _emscripten_bind_SIGMortality_getTreeCrownVolumeScorchedFlanking_1(self, getTreeCrownVolumeScorchedUnits); -};; +}; -SIGMortality.prototype['getTreeDensityPerUnitArea'] = SIGMortality.prototype.getTreeDensityPerUnitArea = /** @suppress {undefinedVars, duplicate} @this{Object} */function(areaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getTreeDensityPerUnitArea'] = SIGMortality.prototype.getTreeDensityPerUnitArea = function(areaUnits) { var self = this.ptr; if (areaUnits && typeof areaUnits === 'object') areaUnits = areaUnits.ptr; return _emscripten_bind_SIGMortality_getTreeDensityPerUnitArea_1(self, areaUnits); -};; +}; -SIGMortality.prototype['getTreeHeight'] = SIGMortality.prototype.getTreeHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(treeHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getTreeHeight'] = SIGMortality.prototype.getTreeHeight = function(treeHeightUnits) { var self = this.ptr; if (treeHeightUnits && typeof treeHeightUnits === 'object') treeHeightUnits = treeHeightUnits.ptr; return _emscripten_bind_SIGMortality_getTreeHeight_1(self, treeHeightUnits); -};; +}; -SIGMortality.prototype['postfireCanopyCover'] = SIGMortality.prototype.postfireCanopyCover = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['postfireCanopyCover'] = SIGMortality.prototype.postfireCanopyCover = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_postfireCanopyCover_0(self); -};; +}; -SIGMortality.prototype['prefireCanopyCover'] = SIGMortality.prototype.prefireCanopyCover = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['prefireCanopyCover'] = SIGMortality.prototype.prefireCanopyCover = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_prefireCanopyCover_0(self); -};; +}; -SIGMortality.prototype['getBarkEquationNumberAtSpeciesTableIndex'] = SIGMortality.prototype.getBarkEquationNumberAtSpeciesTableIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getBarkEquationNumberAtSpeciesTableIndex'] = SIGMortality.prototype.getBarkEquationNumberAtSpeciesTableIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return _emscripten_bind_SIGMortality_getBarkEquationNumberAtSpeciesTableIndex_1(self, index); -};; +}; -SIGMortality.prototype['getBarkEquationNumberFromSpeciesCode'] = SIGMortality.prototype.getBarkEquationNumberFromSpeciesCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesCode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getBarkEquationNumberFromSpeciesCode'] = SIGMortality.prototype.getBarkEquationNumberFromSpeciesCode = function(speciesCode) { var self = this.ptr; ensureCache.prepare(); if (speciesCode && typeof speciesCode === 'object') speciesCode = speciesCode.ptr; else speciesCode = ensureString(speciesCode); return _emscripten_bind_SIGMortality_getBarkEquationNumberFromSpeciesCode_1(self, speciesCode); -};; +}; -SIGMortality.prototype['getCrownCoefficientCodeAtSpeciesTableIndex'] = SIGMortality.prototype.getCrownCoefficientCodeAtSpeciesTableIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getCrownCoefficientCodeAtSpeciesTableIndex'] = SIGMortality.prototype.getCrownCoefficientCodeAtSpeciesTableIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return _emscripten_bind_SIGMortality_getCrownCoefficientCodeAtSpeciesTableIndex_1(self, index); -};; +}; -SIGMortality.prototype['getCrownCoefficientCodeFromSpeciesCode'] = SIGMortality.prototype.getCrownCoefficientCodeFromSpeciesCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesCode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getCrownCoefficientCodeFromSpeciesCode'] = SIGMortality.prototype.getCrownCoefficientCodeFromSpeciesCode = function(speciesCode) { var self = this.ptr; ensureCache.prepare(); if (speciesCode && typeof speciesCode === 'object') speciesCode = speciesCode.ptr; else speciesCode = ensureString(speciesCode); return _emscripten_bind_SIGMortality_getCrownCoefficientCodeFromSpeciesCode_1(self, speciesCode); -};; +}; -SIGMortality.prototype['getCrownScorchOrBoleCharEquationNumber'] = SIGMortality.prototype.getCrownScorchOrBoleCharEquationNumber = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getCrownScorchOrBoleCharEquationNumber'] = SIGMortality.prototype.getCrownScorchOrBoleCharEquationNumber = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getCrownScorchOrBoleCharEquationNumber_0(self); -};; +}; -SIGMortality.prototype['getMortalityEquationNumberAtSpeciesTableIndex'] = SIGMortality.prototype.getMortalityEquationNumberAtSpeciesTableIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getMortalityEquationNumberAtSpeciesTableIndex'] = SIGMortality.prototype.getMortalityEquationNumberAtSpeciesTableIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return _emscripten_bind_SIGMortality_getMortalityEquationNumberAtSpeciesTableIndex_1(self, index); -};; +}; -SIGMortality.prototype['getMortalityEquationNumberFromSpeciesCode'] = SIGMortality.prototype.getMortalityEquationNumberFromSpeciesCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesCode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getMortalityEquationNumberFromSpeciesCode'] = SIGMortality.prototype.getMortalityEquationNumberFromSpeciesCode = function(speciesCode) { var self = this.ptr; ensureCache.prepare(); if (speciesCode && typeof speciesCode === 'object') speciesCode = speciesCode.ptr; else speciesCode = ensureString(speciesCode); return _emscripten_bind_SIGMortality_getMortalityEquationNumberFromSpeciesCode_1(self, speciesCode); -};; +}; -SIGMortality.prototype['getNumberOfRecordsInSpeciesTable'] = SIGMortality.prototype.getNumberOfRecordsInSpeciesTable = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getNumberOfRecordsInSpeciesTable'] = SIGMortality.prototype.getNumberOfRecordsInSpeciesTable = function() { var self = this.ptr; return _emscripten_bind_SIGMortality_getNumberOfRecordsInSpeciesTable_0(self); -};; +}; -SIGMortality.prototype['getSpeciesTableIndexFromSpeciesCode'] = SIGMortality.prototype.getSpeciesTableIndexFromSpeciesCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesNameCode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getSpeciesTableIndexFromSpeciesCode'] = SIGMortality.prototype.getSpeciesTableIndexFromSpeciesCode = function(speciesNameCode) { var self = this.ptr; ensureCache.prepare(); if (speciesNameCode && typeof speciesNameCode === 'object') speciesNameCode = speciesNameCode.ptr; else speciesNameCode = ensureString(speciesNameCode); return _emscripten_bind_SIGMortality_getSpeciesTableIndexFromSpeciesCode_1(self, speciesNameCode); -};; +}; -SIGMortality.prototype['getSpeciesTableIndexFromSpeciesCodeAndEquationType'] = SIGMortality.prototype.getSpeciesTableIndexFromSpeciesCodeAndEquationType = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesNameCode, equationType) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['getSpeciesTableIndexFromSpeciesCodeAndEquationType'] = SIGMortality.prototype.getSpeciesTableIndexFromSpeciesCodeAndEquationType = function(speciesNameCode, equationType) { var self = this.ptr; ensureCache.prepare(); if (speciesNameCode && typeof speciesNameCode === 'object') speciesNameCode = speciesNameCode.ptr; else speciesNameCode = ensureString(speciesNameCode); if (equationType && typeof equationType === 'object') equationType = equationType.ptr; return _emscripten_bind_SIGMortality_getSpeciesTableIndexFromSpeciesCodeAndEquationType_2(self, speciesNameCode, equationType); -};; +}; -SIGMortality.prototype['setAirTemperature'] = SIGMortality.prototype.setAirTemperature = /** @suppress {undefinedVars, duplicate} @this{Object} */function(airTemperature, temperatureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setAirTemperature'] = SIGMortality.prototype.setAirTemperature = function(airTemperature, temperatureUnits) { var self = this.ptr; if (airTemperature && typeof airTemperature === 'object') airTemperature = airTemperature.ptr; if (temperatureUnits && typeof temperatureUnits === 'object') temperatureUnits = temperatureUnits.ptr; _emscripten_bind_SIGMortality_setAirTemperature_2(self, airTemperature, temperatureUnits); -};; +}; -SIGMortality.prototype['setBeetleDamage'] = SIGMortality.prototype.setBeetleDamage = /** @suppress {undefinedVars, duplicate} @this{Object} */function(beetleDamage) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setBeetleDamage'] = SIGMortality.prototype.setBeetleDamage = function(beetleDamage) { var self = this.ptr; if (beetleDamage && typeof beetleDamage === 'object') beetleDamage = beetleDamage.ptr; _emscripten_bind_SIGMortality_setBeetleDamage_1(self, beetleDamage); -};; +}; -SIGMortality.prototype['setBoleCharHeight'] = SIGMortality.prototype.setBoleCharHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(boleCharHeight, boleCharHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setBoleCharHeight'] = SIGMortality.prototype.setBoleCharHeight = function(boleCharHeight, boleCharHeightUnits) { var self = this.ptr; if (boleCharHeight && typeof boleCharHeight === 'object') boleCharHeight = boleCharHeight.ptr; if (boleCharHeightUnits && typeof boleCharHeightUnits === 'object') boleCharHeightUnits = boleCharHeightUnits.ptr; _emscripten_bind_SIGMortality_setBoleCharHeight_2(self, boleCharHeight, boleCharHeightUnits); -};; +}; -SIGMortality.prototype['setCambiumKillRating'] = SIGMortality.prototype.setCambiumKillRating = /** @suppress {undefinedVars, duplicate} @this{Object} */function(cambiumKillRating) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setCambiumKillRating'] = SIGMortality.prototype.setCambiumKillRating = function(cambiumKillRating) { var self = this.ptr; if (cambiumKillRating && typeof cambiumKillRating === 'object') cambiumKillRating = cambiumKillRating.ptr; _emscripten_bind_SIGMortality_setCambiumKillRating_1(self, cambiumKillRating); -};; +}; -SIGMortality.prototype['setCrownDamage'] = SIGMortality.prototype.setCrownDamage = /** @suppress {undefinedVars, duplicate} @this{Object} */function(crownDamage) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setCrownDamage'] = SIGMortality.prototype.setCrownDamage = function(crownDamage) { var self = this.ptr; if (crownDamage && typeof crownDamage === 'object') crownDamage = crownDamage.ptr; _emscripten_bind_SIGMortality_setCrownDamage_1(self, crownDamage); -};; +}; -SIGMortality.prototype['setCrownRatio'] = SIGMortality.prototype.setCrownRatio = /** @suppress {undefinedVars, duplicate} @this{Object} */function(crownRatio, crownRatioUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setCrownRatio'] = SIGMortality.prototype.setCrownRatio = function(crownRatio, crownRatioUnits) { var self = this.ptr; if (crownRatio && typeof crownRatio === 'object') crownRatio = crownRatio.ptr; if (crownRatioUnits && typeof crownRatioUnits === 'object') crownRatioUnits = crownRatioUnits.ptr; _emscripten_bind_SIGMortality_setCrownRatio_2(self, crownRatio, crownRatioUnits); -};; +}; -SIGMortality.prototype['setDBH'] = SIGMortality.prototype.setDBH = /** @suppress {undefinedVars, duplicate} @this{Object} */function(dbh, diameterUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setDBH'] = SIGMortality.prototype.setDBH = function(dbh, diameterUnits) { var self = this.ptr; if (dbh && typeof dbh === 'object') dbh = dbh.ptr; if (diameterUnits && typeof diameterUnits === 'object') diameterUnits = diameterUnits.ptr; _emscripten_bind_SIGMortality_setDBH_2(self, dbh, diameterUnits); -};; +}; -SIGMortality.prototype['setEquationType'] = SIGMortality.prototype.setEquationType = /** @suppress {undefinedVars, duplicate} @this{Object} */function(equationType) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setEquationType'] = SIGMortality.prototype.setEquationType = function(equationType) { var self = this.ptr; if (equationType && typeof equationType === 'object') equationType = equationType.ptr; _emscripten_bind_SIGMortality_setEquationType_1(self, equationType); -};; +}; -SIGMortality.prototype['setFireSeverity'] = SIGMortality.prototype.setFireSeverity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fireSeverity) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setFireSeverity'] = SIGMortality.prototype.setFireSeverity = function(fireSeverity) { var self = this.ptr; if (fireSeverity && typeof fireSeverity === 'object') fireSeverity = fireSeverity.ptr; _emscripten_bind_SIGMortality_setFireSeverity_1(self, fireSeverity); -};; +}; -SIGMortality.prototype['setFirelineIntensity'] = SIGMortality.prototype.setFirelineIntensity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(firelineIntensity, firelineIntensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setFirelineIntensity'] = SIGMortality.prototype.setFirelineIntensity = function(firelineIntensity, firelineIntensityUnits) { var self = this.ptr; if (firelineIntensity && typeof firelineIntensity === 'object') firelineIntensity = firelineIntensity.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; _emscripten_bind_SIGMortality_setFirelineIntensity_2(self, firelineIntensity, firelineIntensityUnits); -};; +}; -SIGMortality.prototype['setFlameLength'] = SIGMortality.prototype.setFlameLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLength, flameLengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setFlameLength'] = SIGMortality.prototype.setFlameLength = function(flameLength, flameLengthUnits) { var self = this.ptr; if (flameLength && typeof flameLength === 'object') flameLength = flameLength.ptr; if (flameLengthUnits && typeof flameLengthUnits === 'object') flameLengthUnits = flameLengthUnits.ptr; _emscripten_bind_SIGMortality_setFlameLength_2(self, flameLength, flameLengthUnits); -};; +}; -SIGMortality.prototype['setFlameLengthOrScorchHeightSwitch'] = SIGMortality.prototype.setFlameLengthOrScorchHeightSwitch = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLengthOrScorchHeightSwitch) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setFlameLengthOrScorchHeightSwitch'] = SIGMortality.prototype.setFlameLengthOrScorchHeightSwitch = function(flameLengthOrScorchHeightSwitch) { var self = this.ptr; if (flameLengthOrScorchHeightSwitch && typeof flameLengthOrScorchHeightSwitch === 'object') flameLengthOrScorchHeightSwitch = flameLengthOrScorchHeightSwitch.ptr; _emscripten_bind_SIGMortality_setFlameLengthOrScorchHeightSwitch_1(self, flameLengthOrScorchHeightSwitch); -};; +}; -SIGMortality.prototype['setFlameLengthOrScorchHeightValue'] = SIGMortality.prototype.setFlameLengthOrScorchHeightValue = /** @suppress {undefinedVars, duplicate} @this{Object} */function(flameLengthOrScorchHeightValue, flameLengthOrScorchHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setFlameLengthOrScorchHeightValue'] = SIGMortality.prototype.setFlameLengthOrScorchHeightValue = function(flameLengthOrScorchHeightValue, flameLengthOrScorchHeightUnits) { var self = this.ptr; if (flameLengthOrScorchHeightValue && typeof flameLengthOrScorchHeightValue === 'object') flameLengthOrScorchHeightValue = flameLengthOrScorchHeightValue.ptr; if (flameLengthOrScorchHeightUnits && typeof flameLengthOrScorchHeightUnits === 'object') flameLengthOrScorchHeightUnits = flameLengthOrScorchHeightUnits.ptr; _emscripten_bind_SIGMortality_setFlameLengthOrScorchHeightValue_2(self, flameLengthOrScorchHeightValue, flameLengthOrScorchHeightUnits); -};; +}; -SIGMortality.prototype['setMidFlameWindSpeed'] = SIGMortality.prototype.setMidFlameWindSpeed = /** @suppress {undefinedVars, duplicate} @this{Object} */function(midFlameWindSpeed, windSpeedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setMidFlameWindSpeed'] = SIGMortality.prototype.setMidFlameWindSpeed = function(midFlameWindSpeed, windSpeedUnits) { var self = this.ptr; if (midFlameWindSpeed && typeof midFlameWindSpeed === 'object') midFlameWindSpeed = midFlameWindSpeed.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; _emscripten_bind_SIGMortality_setMidFlameWindSpeed_2(self, midFlameWindSpeed, windSpeedUnits); -};; +}; -SIGMortality.prototype['setGACCRegion'] = SIGMortality.prototype.setGACCRegion = /** @suppress {undefinedVars, duplicate} @this{Object} */function(region) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setGACCRegion'] = SIGMortality.prototype.setGACCRegion = function(region) { var self = this.ptr; if (region && typeof region === 'object') region = region.ptr; _emscripten_bind_SIGMortality_setGACCRegion_1(self, region); -};; +}; -SIGMortality.prototype['setScorchHeight'] = SIGMortality.prototype.setScorchHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(scorchHeight, scorchHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setScorchHeight'] = SIGMortality.prototype.setScorchHeight = function(scorchHeight, scorchHeightUnits) { var self = this.ptr; if (scorchHeight && typeof scorchHeight === 'object') scorchHeight = scorchHeight.ptr; if (scorchHeightUnits && typeof scorchHeightUnits === 'object') scorchHeightUnits = scorchHeightUnits.ptr; _emscripten_bind_SIGMortality_setScorchHeight_2(self, scorchHeight, scorchHeightUnits); -};; +}; -SIGMortality.prototype['setSpeciesCode'] = SIGMortality.prototype.setSpeciesCode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speciesCode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setSpeciesCode'] = SIGMortality.prototype.setSpeciesCode = function(speciesCode) { var self = this.ptr; ensureCache.prepare(); if (speciesCode && typeof speciesCode === 'object') speciesCode = speciesCode.ptr; else speciesCode = ensureString(speciesCode); _emscripten_bind_SIGMortality_setSpeciesCode_1(self, speciesCode); -};; +}; -SIGMortality.prototype['setSurfaceFireFirelineIntensity'] = SIGMortality.prototype.setSurfaceFireFirelineIntensity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, firelineIntensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setSurfaceFireFirelineIntensity'] = SIGMortality.prototype.setSurfaceFireFirelineIntensity = function(value, firelineIntensityUnits) { var self = this.ptr; if (value && typeof value === 'object') value = value.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; _emscripten_bind_SIGMortality_setSurfaceFireFirelineIntensity_2(self, value, firelineIntensityUnits); -};; +}; -SIGMortality.prototype['setSurfaceFireFirelineIntensityBacking'] = SIGMortality.prototype.setSurfaceFireFirelineIntensityBacking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, firelineIntensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setSurfaceFireFirelineIntensityBacking'] = SIGMortality.prototype.setSurfaceFireFirelineIntensityBacking = function(value, firelineIntensityUnits) { var self = this.ptr; if (value && typeof value === 'object') value = value.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; _emscripten_bind_SIGMortality_setSurfaceFireFirelineIntensityBacking_2(self, value, firelineIntensityUnits); -};; +}; -SIGMortality.prototype['setSurfaceFireFirelineIntensityFlanking'] = SIGMortality.prototype.setSurfaceFireFirelineIntensityFlanking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, firelineIntensityUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setSurfaceFireFirelineIntensityFlanking'] = SIGMortality.prototype.setSurfaceFireFirelineIntensityFlanking = function(value, firelineIntensityUnits) { var self = this.ptr; if (value && typeof value === 'object') value = value.ptr; if (firelineIntensityUnits && typeof firelineIntensityUnits === 'object') firelineIntensityUnits = firelineIntensityUnits.ptr; _emscripten_bind_SIGMortality_setSurfaceFireFirelineIntensityFlanking_2(self, value, firelineIntensityUnits); -};; +}; -SIGMortality.prototype['setSurfaceFireFlameLength'] = SIGMortality.prototype.setSurfaceFireFlameLength = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setSurfaceFireFlameLength'] = SIGMortality.prototype.setSurfaceFireFlameLength = function(value, lengthUnits) { var self = this.ptr; if (value && typeof value === 'object') value = value.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; _emscripten_bind_SIGMortality_setSurfaceFireFlameLength_2(self, value, lengthUnits); -};; +}; -SIGMortality.prototype['setSurfaceFireFlameLengthBacking'] = SIGMortality.prototype.setSurfaceFireFlameLengthBacking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setSurfaceFireFlameLengthBacking'] = SIGMortality.prototype.setSurfaceFireFlameLengthBacking = function(value, lengthUnits) { var self = this.ptr; if (value && typeof value === 'object') value = value.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; _emscripten_bind_SIGMortality_setSurfaceFireFlameLengthBacking_2(self, value, lengthUnits); -};; +}; -SIGMortality.prototype['setSurfaceFireFlameLengthFlanking'] = SIGMortality.prototype.setSurfaceFireFlameLengthFlanking = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setSurfaceFireFlameLengthFlanking'] = SIGMortality.prototype.setSurfaceFireFlameLengthFlanking = function(value, lengthUnits) { var self = this.ptr; if (value && typeof value === 'object') value = value.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; _emscripten_bind_SIGMortality_setSurfaceFireFlameLengthFlanking_2(self, value, lengthUnits); -};; +}; -SIGMortality.prototype['setSurfaceFireScorchHeight'] = SIGMortality.prototype.setSurfaceFireScorchHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(value, lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setSurfaceFireScorchHeight'] = SIGMortality.prototype.setSurfaceFireScorchHeight = function(value, lengthUnits) { var self = this.ptr; if (value && typeof value === 'object') value = value.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; _emscripten_bind_SIGMortality_setSurfaceFireScorchHeight_2(self, value, lengthUnits); -};; +}; -SIGMortality.prototype['setTreeDensityPerUnitArea'] = SIGMortality.prototype.setTreeDensityPerUnitArea = /** @suppress {undefinedVars, duplicate} @this{Object} */function(numberOfTrees, areaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setTreeDensityPerUnitArea'] = SIGMortality.prototype.setTreeDensityPerUnitArea = function(numberOfTrees, areaUnits) { var self = this.ptr; if (numberOfTrees && typeof numberOfTrees === 'object') numberOfTrees = numberOfTrees.ptr; if (areaUnits && typeof areaUnits === 'object') areaUnits = areaUnits.ptr; _emscripten_bind_SIGMortality_setTreeDensityPerUnitArea_2(self, numberOfTrees, areaUnits); -};; +}; -SIGMortality.prototype['setTreeHeight'] = SIGMortality.prototype.setTreeHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(treeHeight, treeHeightUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setTreeHeight'] = SIGMortality.prototype.setTreeHeight = function(treeHeight, treeHeightUnits) { var self = this.ptr; if (treeHeight && typeof treeHeight === 'object') treeHeight = treeHeight.ptr; if (treeHeightUnits && typeof treeHeightUnits === 'object') treeHeightUnits = treeHeightUnits.ptr; _emscripten_bind_SIGMortality_setTreeHeight_2(self, treeHeight, treeHeightUnits); -};; +}; -SIGMortality.prototype['setUserProvidedWindAdjustmentFactor'] = SIGMortality.prototype.setUserProvidedWindAdjustmentFactor = /** @suppress {undefinedVars, duplicate} @this{Object} */function(userProvidedWindAdjustmentFactor) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setUserProvidedWindAdjustmentFactor'] = SIGMortality.prototype.setUserProvidedWindAdjustmentFactor = function(userProvidedWindAdjustmentFactor) { var self = this.ptr; if (userProvidedWindAdjustmentFactor && typeof userProvidedWindAdjustmentFactor === 'object') userProvidedWindAdjustmentFactor = userProvidedWindAdjustmentFactor.ptr; _emscripten_bind_SIGMortality_setUserProvidedWindAdjustmentFactor_1(self, userProvidedWindAdjustmentFactor); -};; +}; -SIGMortality.prototype['setWindHeightInputMode'] = SIGMortality.prototype.setWindHeightInputMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windHeightInputMode) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setWindHeightInputMode'] = SIGMortality.prototype.setWindHeightInputMode = function(windHeightInputMode) { var self = this.ptr; if (windHeightInputMode && typeof windHeightInputMode === 'object') windHeightInputMode = windHeightInputMode.ptr; _emscripten_bind_SIGMortality_setWindHeightInputMode_1(self, windHeightInputMode); -};; +}; -SIGMortality.prototype['setWindSpeed'] = SIGMortality.prototype.setWindSpeed = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windSpeed, windSpeedUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setWindSpeed'] = SIGMortality.prototype.setWindSpeed = function(windSpeed, windSpeedUnits) { var self = this.ptr; if (windSpeed && typeof windSpeed === 'object') windSpeed = windSpeed.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; _emscripten_bind_SIGMortality_setWindSpeed_2(self, windSpeed, windSpeedUnits); -};; +}; -SIGMortality.prototype['setWindSpeedAndWindHeightInputMode'] = SIGMortality.prototype.setWindSpeedAndWindHeightInputMode = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windwindSpeed, windSpeedUnits, windHeightInputMode, userProvidedWindAdjustmentFactor) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['setWindSpeedAndWindHeightInputMode'] = SIGMortality.prototype.setWindSpeedAndWindHeightInputMode = function(windwindSpeed, windSpeedUnits, windHeightInputMode, userProvidedWindAdjustmentFactor) { var self = this.ptr; if (windwindSpeed && typeof windwindSpeed === 'object') windwindSpeed = windwindSpeed.ptr; if (windSpeedUnits && typeof windSpeedUnits === 'object') windSpeedUnits = windSpeedUnits.ptr; if (windHeightInputMode && typeof windHeightInputMode === 'object') windHeightInputMode = windHeightInputMode.ptr; if (userProvidedWindAdjustmentFactor && typeof userProvidedWindAdjustmentFactor === 'object') userProvidedWindAdjustmentFactor = userProvidedWindAdjustmentFactor.ptr; _emscripten_bind_SIGMortality_setWindSpeedAndWindHeightInputMode_4(self, windwindSpeed, windSpeedUnits, windHeightInputMode, userProvidedWindAdjustmentFactor); -};; +}; + - SIGMortality.prototype['__destroy__'] = SIGMortality.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGMortality.prototype['__destroy__'] = SIGMortality.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SIGMortality___destroy___0(self); }; -// WindSpeedUtility -/** @suppress {undefinedVars, duplicate} @this{Object} */function WindSpeedUtility() { + +// Interface: WindSpeedUtility + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function WindSpeedUtility() { this.ptr = _emscripten_bind_WindSpeedUtility_WindSpeedUtility_0(); getCache(WindSpeedUtility)[this.ptr] = this; -};; +}; + WindSpeedUtility.prototype = Object.create(WrapperObject.prototype); WindSpeedUtility.prototype.constructor = WindSpeedUtility; WindSpeedUtility.prototype.__class__ = WindSpeedUtility; WindSpeedUtility.__cache__ = {}; Module['WindSpeedUtility'] = WindSpeedUtility; - -WindSpeedUtility.prototype['windSpeedAtMidflame'] = WindSpeedUtility.prototype.windSpeedAtMidflame = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windSpeedAtTwentyFeet, windAdjustmentFactor) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WindSpeedUtility.prototype['windSpeedAtMidflame'] = WindSpeedUtility.prototype.windSpeedAtMidflame = function(windSpeedAtTwentyFeet, windAdjustmentFactor) { var self = this.ptr; if (windSpeedAtTwentyFeet && typeof windSpeedAtTwentyFeet === 'object') windSpeedAtTwentyFeet = windSpeedAtTwentyFeet.ptr; if (windAdjustmentFactor && typeof windAdjustmentFactor === 'object') windAdjustmentFactor = windAdjustmentFactor.ptr; return _emscripten_bind_WindSpeedUtility_windSpeedAtMidflame_2(self, windSpeedAtTwentyFeet, windAdjustmentFactor); -};; +}; -WindSpeedUtility.prototype['windSpeedAtTwentyFeetFromTenMeter'] = WindSpeedUtility.prototype.windSpeedAtTwentyFeetFromTenMeter = /** @suppress {undefinedVars, duplicate} @this{Object} */function(windSpeedAtTenMeters) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WindSpeedUtility.prototype['windSpeedAtTwentyFeetFromTenMeter'] = WindSpeedUtility.prototype.windSpeedAtTwentyFeetFromTenMeter = function(windSpeedAtTenMeters) { var self = this.ptr; if (windSpeedAtTenMeters && typeof windSpeedAtTenMeters === 'object') windSpeedAtTenMeters = windSpeedAtTenMeters.ptr; return _emscripten_bind_WindSpeedUtility_windSpeedAtTwentyFeetFromTenMeter_1(self, windSpeedAtTenMeters); -};; +}; + - WindSpeedUtility.prototype['__destroy__'] = WindSpeedUtility.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +WindSpeedUtility.prototype['__destroy__'] = WindSpeedUtility.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_WindSpeedUtility___destroy___0(self); }; -// SIGFineDeadFuelMoistureTool -/** @suppress {undefinedVars, duplicate} @this{Object} */function SIGFineDeadFuelMoistureTool() { + +// Interface: SIGFineDeadFuelMoistureTool + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SIGFineDeadFuelMoistureTool() { this.ptr = _emscripten_bind_SIGFineDeadFuelMoistureTool_SIGFineDeadFuelMoistureTool_0(); getCache(SIGFineDeadFuelMoistureTool)[this.ptr] = this; -};; +}; + SIGFineDeadFuelMoistureTool.prototype = Object.create(WrapperObject.prototype); SIGFineDeadFuelMoistureTool.prototype.constructor = SIGFineDeadFuelMoistureTool; SIGFineDeadFuelMoistureTool.prototype.__class__ = SIGFineDeadFuelMoistureTool; SIGFineDeadFuelMoistureTool.__cache__ = {}; Module['SIGFineDeadFuelMoistureTool'] = SIGFineDeadFuelMoistureTool; - -SIGFineDeadFuelMoistureTool.prototype['calculate'] = SIGFineDeadFuelMoistureTool.prototype.calculate = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['calculate'] = SIGFineDeadFuelMoistureTool.prototype.calculate = function() { var self = this.ptr; _emscripten_bind_SIGFineDeadFuelMoistureTool_calculate_0(self); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['setTimeOfDayIndex'] = SIGFineDeadFuelMoistureTool.prototype.setTimeOfDayIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(timeOfDayIndex) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['setTimeOfDayIndex'] = SIGFineDeadFuelMoistureTool.prototype.setTimeOfDayIndex = function(timeOfDayIndex) { var self = this.ptr; if (timeOfDayIndex && typeof timeOfDayIndex === 'object') timeOfDayIndex = timeOfDayIndex.ptr; _emscripten_bind_SIGFineDeadFuelMoistureTool_setTimeOfDayIndex_1(self, timeOfDayIndex); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['setSlopeIndex'] = SIGFineDeadFuelMoistureTool.prototype.setSlopeIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(slopeIndex) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['setSlopeIndex'] = SIGFineDeadFuelMoistureTool.prototype.setSlopeIndex = function(slopeIndex) { var self = this.ptr; if (slopeIndex && typeof slopeIndex === 'object') slopeIndex = slopeIndex.ptr; _emscripten_bind_SIGFineDeadFuelMoistureTool_setSlopeIndex_1(self, slopeIndex); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['setShadingIndex'] = SIGFineDeadFuelMoistureTool.prototype.setShadingIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(shadingIndex) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['setShadingIndex'] = SIGFineDeadFuelMoistureTool.prototype.setShadingIndex = function(shadingIndex) { var self = this.ptr; if (shadingIndex && typeof shadingIndex === 'object') shadingIndex = shadingIndex.ptr; _emscripten_bind_SIGFineDeadFuelMoistureTool_setShadingIndex_1(self, shadingIndex); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['setAspectIndex'] = SIGFineDeadFuelMoistureTool.prototype.setAspectIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(aspectIndex) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['setAspectIndex'] = SIGFineDeadFuelMoistureTool.prototype.setAspectIndex = function(aspectIndex) { var self = this.ptr; if (aspectIndex && typeof aspectIndex === 'object') aspectIndex = aspectIndex.ptr; _emscripten_bind_SIGFineDeadFuelMoistureTool_setAspectIndex_1(self, aspectIndex); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['setRHIndex'] = SIGFineDeadFuelMoistureTool.prototype.setRHIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(relativeHumidityIndex) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['setRHIndex'] = SIGFineDeadFuelMoistureTool.prototype.setRHIndex = function(relativeHumidityIndex) { var self = this.ptr; if (relativeHumidityIndex && typeof relativeHumidityIndex === 'object') relativeHumidityIndex = relativeHumidityIndex.ptr; _emscripten_bind_SIGFineDeadFuelMoistureTool_setRHIndex_1(self, relativeHumidityIndex); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['setElevationIndex'] = SIGFineDeadFuelMoistureTool.prototype.setElevationIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(elevationIndex) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['setElevationIndex'] = SIGFineDeadFuelMoistureTool.prototype.setElevationIndex = function(elevationIndex) { var self = this.ptr; if (elevationIndex && typeof elevationIndex === 'object') elevationIndex = elevationIndex.ptr; _emscripten_bind_SIGFineDeadFuelMoistureTool_setElevationIndex_1(self, elevationIndex); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['setDryBulbIndex'] = SIGFineDeadFuelMoistureTool.prototype.setDryBulbIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(dryBulbIndex) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['setDryBulbIndex'] = SIGFineDeadFuelMoistureTool.prototype.setDryBulbIndex = function(dryBulbIndex) { var self = this.ptr; if (dryBulbIndex && typeof dryBulbIndex === 'object') dryBulbIndex = dryBulbIndex.ptr; _emscripten_bind_SIGFineDeadFuelMoistureTool_setDryBulbIndex_1(self, dryBulbIndex); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['setMonthIndex'] = SIGFineDeadFuelMoistureTool.prototype.setMonthIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(monthIndex) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['setMonthIndex'] = SIGFineDeadFuelMoistureTool.prototype.setMonthIndex = function(monthIndex) { var self = this.ptr; if (monthIndex && typeof monthIndex === 'object') monthIndex = monthIndex.ptr; _emscripten_bind_SIGFineDeadFuelMoistureTool_setMonthIndex_1(self, monthIndex); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['getFineDeadFuelMoisture'] = SIGFineDeadFuelMoistureTool.prototype.getFineDeadFuelMoisture = /** @suppress {undefinedVars, duplicate} @this{Object} */function(desiredUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['getFineDeadFuelMoisture'] = SIGFineDeadFuelMoistureTool.prototype.getFineDeadFuelMoisture = function(desiredUnits) { var self = this.ptr; if (desiredUnits && typeof desiredUnits === 'object') desiredUnits = desiredUnits.ptr; return _emscripten_bind_SIGFineDeadFuelMoistureTool_getFineDeadFuelMoisture_1(self, desiredUnits); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['getSlopeIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getSlopeIndexSize = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['getSlopeIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getSlopeIndexSize = function() { var self = this.ptr; return _emscripten_bind_SIGFineDeadFuelMoistureTool_getSlopeIndexSize_0(self); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['getElevationIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getElevationIndexSize = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['getElevationIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getElevationIndexSize = function() { var self = this.ptr; return _emscripten_bind_SIGFineDeadFuelMoistureTool_getElevationIndexSize_0(self); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['getMonthIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getMonthIndexSize = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['getMonthIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getMonthIndexSize = function() { var self = this.ptr; return _emscripten_bind_SIGFineDeadFuelMoistureTool_getMonthIndexSize_0(self); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['getDryBulbTemperatureIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getDryBulbTemperatureIndexSize = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['getDryBulbTemperatureIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getDryBulbTemperatureIndexSize = function() { var self = this.ptr; return _emscripten_bind_SIGFineDeadFuelMoistureTool_getDryBulbTemperatureIndexSize_0(self); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['getReferenceMoisture'] = SIGFineDeadFuelMoistureTool.prototype.getReferenceMoisture = /** @suppress {undefinedVars, duplicate} @this{Object} */function(desiredUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['getReferenceMoisture'] = SIGFineDeadFuelMoistureTool.prototype.getReferenceMoisture = function(desiredUnits) { var self = this.ptr; if (desiredUnits && typeof desiredUnits === 'object') desiredUnits = desiredUnits.ptr; return _emscripten_bind_SIGFineDeadFuelMoistureTool_getReferenceMoisture_1(self, desiredUnits); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['calculateByIndex'] = SIGFineDeadFuelMoistureTool.prototype.calculateByIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(aspectIndex, dryBulbIndex, elevationIndex, monthIndex, relativeHumidityIndex, shadingIndex, slopeIndex, timeOfDayIndex) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['calculateByIndex'] = SIGFineDeadFuelMoistureTool.prototype.calculateByIndex = function(aspectIndex, dryBulbIndex, elevationIndex, monthIndex, relativeHumidityIndex, shadingIndex, slopeIndex, timeOfDayIndex) { var self = this.ptr; if (aspectIndex && typeof aspectIndex === 'object') aspectIndex = aspectIndex.ptr; if (dryBulbIndex && typeof dryBulbIndex === 'object') dryBulbIndex = dryBulbIndex.ptr; @@ -5407,467 +6262,555 @@ SIGFineDeadFuelMoistureTool.prototype['calculateByIndex'] = SIGFineDeadFuelMoist if (slopeIndex && typeof slopeIndex === 'object') slopeIndex = slopeIndex.ptr; if (timeOfDayIndex && typeof timeOfDayIndex === 'object') timeOfDayIndex = timeOfDayIndex.ptr; _emscripten_bind_SIGFineDeadFuelMoistureTool_calculateByIndex_8(self, aspectIndex, dryBulbIndex, elevationIndex, monthIndex, relativeHumidityIndex, shadingIndex, slopeIndex, timeOfDayIndex); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['getTimeOfDayIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getTimeOfDayIndexSize = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['getTimeOfDayIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getTimeOfDayIndexSize = function() { var self = this.ptr; return _emscripten_bind_SIGFineDeadFuelMoistureTool_getTimeOfDayIndexSize_0(self); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['getCorrectionMoisture'] = SIGFineDeadFuelMoistureTool.prototype.getCorrectionMoisture = /** @suppress {undefinedVars, duplicate} @this{Object} */function(desiredUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['getCorrectionMoisture'] = SIGFineDeadFuelMoistureTool.prototype.getCorrectionMoisture = function(desiredUnits) { var self = this.ptr; if (desiredUnits && typeof desiredUnits === 'object') desiredUnits = desiredUnits.ptr; return _emscripten_bind_SIGFineDeadFuelMoistureTool_getCorrectionMoisture_1(self, desiredUnits); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['getAspectIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getAspectIndexSize = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['getAspectIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getAspectIndexSize = function() { var self = this.ptr; return _emscripten_bind_SIGFineDeadFuelMoistureTool_getAspectIndexSize_0(self); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['getShadingIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getShadingIndexSize = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['getShadingIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getShadingIndexSize = function() { var self = this.ptr; return _emscripten_bind_SIGFineDeadFuelMoistureTool_getShadingIndexSize_0(self); -};; +}; -SIGFineDeadFuelMoistureTool.prototype['getRelativeHumidityIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getRelativeHumidityIndexSize = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['getRelativeHumidityIndexSize'] = SIGFineDeadFuelMoistureTool.prototype.getRelativeHumidityIndexSize = function() { var self = this.ptr; return _emscripten_bind_SIGFineDeadFuelMoistureTool_getRelativeHumidityIndexSize_0(self); -};; +}; - SIGFineDeadFuelMoistureTool.prototype['__destroy__'] = SIGFineDeadFuelMoistureTool.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGFineDeadFuelMoistureTool.prototype['__destroy__'] = SIGFineDeadFuelMoistureTool.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SIGFineDeadFuelMoistureTool___destroy___0(self); }; -// SIGSlopeTool -/** @suppress {undefinedVars, duplicate} @this{Object} */function SIGSlopeTool() { + +// Interface: SIGSlopeTool + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SIGSlopeTool() { this.ptr = _emscripten_bind_SIGSlopeTool_SIGSlopeTool_0(); getCache(SIGSlopeTool)[this.ptr] = this; -};; +}; + SIGSlopeTool.prototype = Object.create(WrapperObject.prototype); SIGSlopeTool.prototype.constructor = SIGSlopeTool; SIGSlopeTool.prototype.__class__ = SIGSlopeTool; SIGSlopeTool.__cache__ = {}; Module['SIGSlopeTool'] = SIGSlopeTool; - -SIGSlopeTool.prototype['getCentimetersPerKilometerAtIndex'] = SIGSlopeTool.prototype.getCentimetersPerKilometerAtIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getCentimetersPerKilometerAtIndex'] = SIGSlopeTool.prototype.getCentimetersPerKilometerAtIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return _emscripten_bind_SIGSlopeTool_getCentimetersPerKilometerAtIndex_1(self, index); -};; +}; -SIGSlopeTool.prototype['getCentimetersPerKilometerAtRepresentativeFraction'] = SIGSlopeTool.prototype.getCentimetersPerKilometerAtRepresentativeFraction = /** @suppress {undefinedVars, duplicate} @this{Object} */function(representativeFraction) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getCentimetersPerKilometerAtRepresentativeFraction'] = SIGSlopeTool.prototype.getCentimetersPerKilometerAtRepresentativeFraction = function(representativeFraction) { var self = this.ptr; if (representativeFraction && typeof representativeFraction === 'object') representativeFraction = representativeFraction.ptr; return _emscripten_bind_SIGSlopeTool_getCentimetersPerKilometerAtRepresentativeFraction_1(self, representativeFraction); -};; +}; -SIGSlopeTool.prototype['getHorizontalDistance'] = SIGSlopeTool.prototype.getHorizontalDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(horizontalDistanceIndex, mapDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getHorizontalDistance'] = SIGSlopeTool.prototype.getHorizontalDistance = function(horizontalDistanceIndex, mapDistanceUnits) { var self = this.ptr; if (horizontalDistanceIndex && typeof horizontalDistanceIndex === 'object') horizontalDistanceIndex = horizontalDistanceIndex.ptr; if (mapDistanceUnits && typeof mapDistanceUnits === 'object') mapDistanceUnits = mapDistanceUnits.ptr; return _emscripten_bind_SIGSlopeTool_getHorizontalDistance_2(self, horizontalDistanceIndex, mapDistanceUnits); -};; +}; -SIGSlopeTool.prototype['getHorizontalDistanceAtIndex'] = SIGSlopeTool.prototype.getHorizontalDistanceAtIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index, mapDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getHorizontalDistanceAtIndex'] = SIGSlopeTool.prototype.getHorizontalDistanceAtIndex = function(index, mapDistanceUnits) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; if (mapDistanceUnits && typeof mapDistanceUnits === 'object') mapDistanceUnits = mapDistanceUnits.ptr; return _emscripten_bind_SIGSlopeTool_getHorizontalDistanceAtIndex_2(self, index, mapDistanceUnits); -};; +}; -SIGSlopeTool.prototype['getHorizontalDistanceFifteen'] = SIGSlopeTool.prototype.getHorizontalDistanceFifteen = /** @suppress {undefinedVars, duplicate} @this{Object} */function(mapDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getHorizontalDistanceFifteen'] = SIGSlopeTool.prototype.getHorizontalDistanceFifteen = function(mapDistanceUnits) { var self = this.ptr; if (mapDistanceUnits && typeof mapDistanceUnits === 'object') mapDistanceUnits = mapDistanceUnits.ptr; return _emscripten_bind_SIGSlopeTool_getHorizontalDistanceFifteen_1(self, mapDistanceUnits); -};; +}; -SIGSlopeTool.prototype['getHorizontalDistanceFourtyFive'] = SIGSlopeTool.prototype.getHorizontalDistanceFourtyFive = /** @suppress {undefinedVars, duplicate} @this{Object} */function(mapDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getHorizontalDistanceFourtyFive'] = SIGSlopeTool.prototype.getHorizontalDistanceFourtyFive = function(mapDistanceUnits) { var self = this.ptr; if (mapDistanceUnits && typeof mapDistanceUnits === 'object') mapDistanceUnits = mapDistanceUnits.ptr; return _emscripten_bind_SIGSlopeTool_getHorizontalDistanceFourtyFive_1(self, mapDistanceUnits); -};; +}; -SIGSlopeTool.prototype['getHorizontalDistanceMaxSlope'] = SIGSlopeTool.prototype.getHorizontalDistanceMaxSlope = /** @suppress {undefinedVars, duplicate} @this{Object} */function(slopeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getHorizontalDistanceMaxSlope'] = SIGSlopeTool.prototype.getHorizontalDistanceMaxSlope = function(slopeUnits) { var self = this.ptr; if (slopeUnits && typeof slopeUnits === 'object') slopeUnits = slopeUnits.ptr; return _emscripten_bind_SIGSlopeTool_getHorizontalDistanceMaxSlope_1(self, slopeUnits); -};; +}; -SIGSlopeTool.prototype['getHorizontalDistanceNinety'] = SIGSlopeTool.prototype.getHorizontalDistanceNinety = /** @suppress {undefinedVars, duplicate} @this{Object} */function(mapDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getHorizontalDistanceNinety'] = SIGSlopeTool.prototype.getHorizontalDistanceNinety = function(mapDistanceUnits) { var self = this.ptr; if (mapDistanceUnits && typeof mapDistanceUnits === 'object') mapDistanceUnits = mapDistanceUnits.ptr; return _emscripten_bind_SIGSlopeTool_getHorizontalDistanceNinety_1(self, mapDistanceUnits); -};; +}; -SIGSlopeTool.prototype['getHorizontalDistanceSeventy'] = SIGSlopeTool.prototype.getHorizontalDistanceSeventy = /** @suppress {undefinedVars, duplicate} @this{Object} */function(mapDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getHorizontalDistanceSeventy'] = SIGSlopeTool.prototype.getHorizontalDistanceSeventy = function(mapDistanceUnits) { var self = this.ptr; if (mapDistanceUnits && typeof mapDistanceUnits === 'object') mapDistanceUnits = mapDistanceUnits.ptr; return _emscripten_bind_SIGSlopeTool_getHorizontalDistanceSeventy_1(self, mapDistanceUnits); -};; +}; -SIGSlopeTool.prototype['getHorizontalDistanceSixty'] = SIGSlopeTool.prototype.getHorizontalDistanceSixty = /** @suppress {undefinedVars, duplicate} @this{Object} */function(mapDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getHorizontalDistanceSixty'] = SIGSlopeTool.prototype.getHorizontalDistanceSixty = function(mapDistanceUnits) { var self = this.ptr; if (mapDistanceUnits && typeof mapDistanceUnits === 'object') mapDistanceUnits = mapDistanceUnits.ptr; return _emscripten_bind_SIGSlopeTool_getHorizontalDistanceSixty_1(self, mapDistanceUnits); -};; +}; -SIGSlopeTool.prototype['getHorizontalDistanceThirty'] = SIGSlopeTool.prototype.getHorizontalDistanceThirty = /** @suppress {undefinedVars, duplicate} @this{Object} */function(mapDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getHorizontalDistanceThirty'] = SIGSlopeTool.prototype.getHorizontalDistanceThirty = function(mapDistanceUnits) { var self = this.ptr; if (mapDistanceUnits && typeof mapDistanceUnits === 'object') mapDistanceUnits = mapDistanceUnits.ptr; return _emscripten_bind_SIGSlopeTool_getHorizontalDistanceThirty_1(self, mapDistanceUnits); -};; +}; -SIGSlopeTool.prototype['getHorizontalDistanceZero'] = SIGSlopeTool.prototype.getHorizontalDistanceZero = /** @suppress {undefinedVars, duplicate} @this{Object} */function(mapDistanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getHorizontalDistanceZero'] = SIGSlopeTool.prototype.getHorizontalDistanceZero = function(mapDistanceUnits) { var self = this.ptr; if (mapDistanceUnits && typeof mapDistanceUnits === 'object') mapDistanceUnits = mapDistanceUnits.ptr; return _emscripten_bind_SIGSlopeTool_getHorizontalDistanceZero_1(self, mapDistanceUnits); -};; +}; -SIGSlopeTool.prototype['getInchesPerMileAtIndex'] = SIGSlopeTool.prototype.getInchesPerMileAtIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getInchesPerMileAtIndex'] = SIGSlopeTool.prototype.getInchesPerMileAtIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return _emscripten_bind_SIGSlopeTool_getInchesPerMileAtIndex_1(self, index); -};; +}; -SIGSlopeTool.prototype['getInchesPerMileAtRepresentativeFraction'] = SIGSlopeTool.prototype.getInchesPerMileAtRepresentativeFraction = /** @suppress {undefinedVars, duplicate} @this{Object} */function(representativeFraction) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getInchesPerMileAtRepresentativeFraction'] = SIGSlopeTool.prototype.getInchesPerMileAtRepresentativeFraction = function(representativeFraction) { var self = this.ptr; if (representativeFraction && typeof representativeFraction === 'object') representativeFraction = representativeFraction.ptr; return _emscripten_bind_SIGSlopeTool_getInchesPerMileAtRepresentativeFraction_1(self, representativeFraction); -};; +}; -SIGSlopeTool.prototype['getKilometersPerCentimeterAtIndex'] = SIGSlopeTool.prototype.getKilometersPerCentimeterAtIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getKilometersPerCentimeterAtIndex'] = SIGSlopeTool.prototype.getKilometersPerCentimeterAtIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return _emscripten_bind_SIGSlopeTool_getKilometersPerCentimeterAtIndex_1(self, index); -};; +}; -SIGSlopeTool.prototype['getKilometersPerCentimeterAtRepresentativeFraction'] = SIGSlopeTool.prototype.getKilometersPerCentimeterAtRepresentativeFraction = /** @suppress {undefinedVars, duplicate} @this{Object} */function(representativeFraction) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getKilometersPerCentimeterAtRepresentativeFraction'] = SIGSlopeTool.prototype.getKilometersPerCentimeterAtRepresentativeFraction = function(representativeFraction) { var self = this.ptr; if (representativeFraction && typeof representativeFraction === 'object') representativeFraction = representativeFraction.ptr; return _emscripten_bind_SIGSlopeTool_getKilometersPerCentimeterAtRepresentativeFraction_1(self, representativeFraction); -};; +}; -SIGSlopeTool.prototype['getMilesPerInchAtIndex'] = SIGSlopeTool.prototype.getMilesPerInchAtIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getMilesPerInchAtIndex'] = SIGSlopeTool.prototype.getMilesPerInchAtIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return _emscripten_bind_SIGSlopeTool_getMilesPerInchAtIndex_1(self, index); -};; +}; -SIGSlopeTool.prototype['getMilesPerInchAtRepresentativeFraction'] = SIGSlopeTool.prototype.getMilesPerInchAtRepresentativeFraction = /** @suppress {undefinedVars, duplicate} @this{Object} */function(representativeFraction) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getMilesPerInchAtRepresentativeFraction'] = SIGSlopeTool.prototype.getMilesPerInchAtRepresentativeFraction = function(representativeFraction) { var self = this.ptr; if (representativeFraction && typeof representativeFraction === 'object') representativeFraction = representativeFraction.ptr; return _emscripten_bind_SIGSlopeTool_getMilesPerInchAtRepresentativeFraction_1(self, representativeFraction); -};; +}; -SIGSlopeTool.prototype['getSlopeElevationChangeFromMapMeasurements'] = SIGSlopeTool.prototype.getSlopeElevationChangeFromMapMeasurements = /** @suppress {undefinedVars, duplicate} @this{Object} */function(elevationUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getSlopeElevationChangeFromMapMeasurements'] = SIGSlopeTool.prototype.getSlopeElevationChangeFromMapMeasurements = function(elevationUnits) { var self = this.ptr; if (elevationUnits && typeof elevationUnits === 'object') elevationUnits = elevationUnits.ptr; return _emscripten_bind_SIGSlopeTool_getSlopeElevationChangeFromMapMeasurements_1(self, elevationUnits); -};; +}; -SIGSlopeTool.prototype['getSlopeFromMapMeasurements'] = SIGSlopeTool.prototype.getSlopeFromMapMeasurements = /** @suppress {undefinedVars, duplicate} @this{Object} */function(slopeUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getSlopeFromMapMeasurements'] = SIGSlopeTool.prototype.getSlopeFromMapMeasurements = function(slopeUnits) { var self = this.ptr; if (slopeUnits && typeof slopeUnits === 'object') slopeUnits = slopeUnits.ptr; return _emscripten_bind_SIGSlopeTool_getSlopeFromMapMeasurements_1(self, slopeUnits); -};; +}; -SIGSlopeTool.prototype['getSlopeHorizontalDistanceFromMapMeasurements'] = SIGSlopeTool.prototype.getSlopeHorizontalDistanceFromMapMeasurements = /** @suppress {undefinedVars, duplicate} @this{Object} */function(distanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getSlopeHorizontalDistanceFromMapMeasurements'] = SIGSlopeTool.prototype.getSlopeHorizontalDistanceFromMapMeasurements = function(distanceUnits) { var self = this.ptr; if (distanceUnits && typeof distanceUnits === 'object') distanceUnits = distanceUnits.ptr; return _emscripten_bind_SIGSlopeTool_getSlopeHorizontalDistanceFromMapMeasurements_1(self, distanceUnits); -};; +}; -SIGSlopeTool.prototype['getSlopeFromMapMeasurementsInDegrees'] = SIGSlopeTool.prototype.getSlopeFromMapMeasurementsInDegrees = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getSlopeFromMapMeasurementsInDegrees'] = SIGSlopeTool.prototype.getSlopeFromMapMeasurementsInDegrees = function() { var self = this.ptr; return _emscripten_bind_SIGSlopeTool_getSlopeFromMapMeasurementsInDegrees_0(self); -};; +}; -SIGSlopeTool.prototype['getSlopeFromMapMeasurementsInPercent'] = SIGSlopeTool.prototype.getSlopeFromMapMeasurementsInPercent = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getSlopeFromMapMeasurementsInPercent'] = SIGSlopeTool.prototype.getSlopeFromMapMeasurementsInPercent = function() { var self = this.ptr; return _emscripten_bind_SIGSlopeTool_getSlopeFromMapMeasurementsInPercent_0(self); -};; +}; -SIGSlopeTool.prototype['getNumberOfHorizontalDistances'] = SIGSlopeTool.prototype.getNumberOfHorizontalDistances = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getNumberOfHorizontalDistances'] = SIGSlopeTool.prototype.getNumberOfHorizontalDistances = function() { var self = this.ptr; return _emscripten_bind_SIGSlopeTool_getNumberOfHorizontalDistances_0(self); -};; +}; -SIGSlopeTool.prototype['getNumberOfRepresentativeFractions'] = SIGSlopeTool.prototype.getNumberOfRepresentativeFractions = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getNumberOfRepresentativeFractions'] = SIGSlopeTool.prototype.getNumberOfRepresentativeFractions = function() { var self = this.ptr; return _emscripten_bind_SIGSlopeTool_getNumberOfRepresentativeFractions_0(self); -};; +}; -SIGSlopeTool.prototype['getRepresentativeFractionAtIndex'] = SIGSlopeTool.prototype.getRepresentativeFractionAtIndex = /** @suppress {undefinedVars, duplicate} @this{Object} */function(index) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getRepresentativeFractionAtIndex'] = SIGSlopeTool.prototype.getRepresentativeFractionAtIndex = function(index) { var self = this.ptr; if (index && typeof index === 'object') index = index.ptr; return _emscripten_bind_SIGSlopeTool_getRepresentativeFractionAtIndex_1(self, index); -};; +}; -SIGSlopeTool.prototype['getRepresentativeFractionAtRepresentativeFraction'] = SIGSlopeTool.prototype.getRepresentativeFractionAtRepresentativeFraction = /** @suppress {undefinedVars, duplicate} @this{Object} */function(representativeFraction) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['getRepresentativeFractionAtRepresentativeFraction'] = SIGSlopeTool.prototype.getRepresentativeFractionAtRepresentativeFraction = function(representativeFraction) { var self = this.ptr; if (representativeFraction && typeof representativeFraction === 'object') representativeFraction = representativeFraction.ptr; return _emscripten_bind_SIGSlopeTool_getRepresentativeFractionAtRepresentativeFraction_1(self, representativeFraction); -};; +}; -SIGSlopeTool.prototype['calculateHorizontalDistance'] = SIGSlopeTool.prototype.calculateHorizontalDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['calculateHorizontalDistance'] = SIGSlopeTool.prototype.calculateHorizontalDistance = function() { var self = this.ptr; _emscripten_bind_SIGSlopeTool_calculateHorizontalDistance_0(self); -};; +}; -SIGSlopeTool.prototype['calculateSlopeFromMapMeasurements'] = SIGSlopeTool.prototype.calculateSlopeFromMapMeasurements = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['calculateSlopeFromMapMeasurements'] = SIGSlopeTool.prototype.calculateSlopeFromMapMeasurements = function() { var self = this.ptr; _emscripten_bind_SIGSlopeTool_calculateSlopeFromMapMeasurements_0(self); -};; +}; -SIGSlopeTool.prototype['setCalculatedMapDistance'] = SIGSlopeTool.prototype.setCalculatedMapDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(calculatedMapDistance, distanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['setCalculatedMapDistance'] = SIGSlopeTool.prototype.setCalculatedMapDistance = function(calculatedMapDistance, distanceUnits) { var self = this.ptr; if (calculatedMapDistance && typeof calculatedMapDistance === 'object') calculatedMapDistance = calculatedMapDistance.ptr; if (distanceUnits && typeof distanceUnits === 'object') distanceUnits = distanceUnits.ptr; _emscripten_bind_SIGSlopeTool_setCalculatedMapDistance_2(self, calculatedMapDistance, distanceUnits); -};; +}; -SIGSlopeTool.prototype['setContourInterval'] = SIGSlopeTool.prototype.setContourInterval = /** @suppress {undefinedVars, duplicate} @this{Object} */function(contourInterval, contourUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['setContourInterval'] = SIGSlopeTool.prototype.setContourInterval = function(contourInterval, contourUnits) { var self = this.ptr; if (contourInterval && typeof contourInterval === 'object') contourInterval = contourInterval.ptr; if (contourUnits && typeof contourUnits === 'object') contourUnits = contourUnits.ptr; _emscripten_bind_SIGSlopeTool_setContourInterval_2(self, contourInterval, contourUnits); -};; +}; -SIGSlopeTool.prototype['setMapDistance'] = SIGSlopeTool.prototype.setMapDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(mapDistance, distanceUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['setMapDistance'] = SIGSlopeTool.prototype.setMapDistance = function(mapDistance, distanceUnits) { var self = this.ptr; if (mapDistance && typeof mapDistance === 'object') mapDistance = mapDistance.ptr; if (distanceUnits && typeof distanceUnits === 'object') distanceUnits = distanceUnits.ptr; _emscripten_bind_SIGSlopeTool_setMapDistance_2(self, mapDistance, distanceUnits); -};; +}; -SIGSlopeTool.prototype['setMapRepresentativeFraction'] = SIGSlopeTool.prototype.setMapRepresentativeFraction = /** @suppress {undefinedVars, duplicate} @this{Object} */function(mapRepresentativeFraction) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['setMapRepresentativeFraction'] = SIGSlopeTool.prototype.setMapRepresentativeFraction = function(mapRepresentativeFraction) { var self = this.ptr; if (mapRepresentativeFraction && typeof mapRepresentativeFraction === 'object') mapRepresentativeFraction = mapRepresentativeFraction.ptr; _emscripten_bind_SIGSlopeTool_setMapRepresentativeFraction_1(self, mapRepresentativeFraction); -};; +}; -SIGSlopeTool.prototype['setMaxSlopeSteepness'] = SIGSlopeTool.prototype.setMaxSlopeSteepness = /** @suppress {undefinedVars, duplicate} @this{Object} */function(maxSlopeSteepness) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['setMaxSlopeSteepness'] = SIGSlopeTool.prototype.setMaxSlopeSteepness = function(maxSlopeSteepness) { var self = this.ptr; if (maxSlopeSteepness && typeof maxSlopeSteepness === 'object') maxSlopeSteepness = maxSlopeSteepness.ptr; _emscripten_bind_SIGSlopeTool_setMaxSlopeSteepness_1(self, maxSlopeSteepness); -};; +}; -SIGSlopeTool.prototype['setNumberOfContours'] = SIGSlopeTool.prototype.setNumberOfContours = /** @suppress {undefinedVars, duplicate} @this{Object} */function(numberOfContours) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['setNumberOfContours'] = SIGSlopeTool.prototype.setNumberOfContours = function(numberOfContours) { var self = this.ptr; if (numberOfContours && typeof numberOfContours === 'object') numberOfContours = numberOfContours.ptr; _emscripten_bind_SIGSlopeTool_setNumberOfContours_1(self, numberOfContours); -};; +}; + - SIGSlopeTool.prototype['__destroy__'] = SIGSlopeTool.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SIGSlopeTool.prototype['__destroy__'] = SIGSlopeTool.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SIGSlopeTool___destroy___0(self); }; -// VaporPressureDeficitCalculator -/** @suppress {undefinedVars, duplicate} @this{Object} */function VaporPressureDeficitCalculator() { + +// Interface: VaporPressureDeficitCalculator + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function VaporPressureDeficitCalculator() { this.ptr = _emscripten_bind_VaporPressureDeficitCalculator_VaporPressureDeficitCalculator_0(); getCache(VaporPressureDeficitCalculator)[this.ptr] = this; -};; +}; + VaporPressureDeficitCalculator.prototype = Object.create(WrapperObject.prototype); VaporPressureDeficitCalculator.prototype.constructor = VaporPressureDeficitCalculator; VaporPressureDeficitCalculator.prototype.__class__ = VaporPressureDeficitCalculator; VaporPressureDeficitCalculator.__cache__ = {}; Module['VaporPressureDeficitCalculator'] = VaporPressureDeficitCalculator; - -VaporPressureDeficitCalculator.prototype['runCalculation'] = VaporPressureDeficitCalculator.prototype.runCalculation = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +VaporPressureDeficitCalculator.prototype['runCalculation'] = VaporPressureDeficitCalculator.prototype.runCalculation = function() { var self = this.ptr; _emscripten_bind_VaporPressureDeficitCalculator_runCalculation_0(self); -};; +}; -VaporPressureDeficitCalculator.prototype['setTemperature'] = VaporPressureDeficitCalculator.prototype.setTemperature = /** @suppress {undefinedVars, duplicate} @this{Object} */function(temperature, units) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +VaporPressureDeficitCalculator.prototype['setTemperature'] = VaporPressureDeficitCalculator.prototype.setTemperature = function(temperature, units) { var self = this.ptr; if (temperature && typeof temperature === 'object') temperature = temperature.ptr; if (units && typeof units === 'object') units = units.ptr; _emscripten_bind_VaporPressureDeficitCalculator_setTemperature_2(self, temperature, units); -};; +}; -VaporPressureDeficitCalculator.prototype['setRelativeHumidity'] = VaporPressureDeficitCalculator.prototype.setRelativeHumidity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(relativeHumidity, units) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +VaporPressureDeficitCalculator.prototype['setRelativeHumidity'] = VaporPressureDeficitCalculator.prototype.setRelativeHumidity = function(relativeHumidity, units) { var self = this.ptr; if (relativeHumidity && typeof relativeHumidity === 'object') relativeHumidity = relativeHumidity.ptr; if (units && typeof units === 'object') units = units.ptr; _emscripten_bind_VaporPressureDeficitCalculator_setRelativeHumidity_2(self, relativeHumidity, units); -};; +}; -VaporPressureDeficitCalculator.prototype['getVaporPressureDeficit'] = VaporPressureDeficitCalculator.prototype.getVaporPressureDeficit = /** @suppress {undefinedVars, duplicate} @this{Object} */function(units) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +VaporPressureDeficitCalculator.prototype['getVaporPressureDeficit'] = VaporPressureDeficitCalculator.prototype.getVaporPressureDeficit = function(units) { var self = this.ptr; if (units && typeof units === 'object') units = units.ptr; return _emscripten_bind_VaporPressureDeficitCalculator_getVaporPressureDeficit_1(self, units); -};; +}; + - VaporPressureDeficitCalculator.prototype['__destroy__'] = VaporPressureDeficitCalculator.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +VaporPressureDeficitCalculator.prototype['__destroy__'] = VaporPressureDeficitCalculator.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_VaporPressureDeficitCalculator___destroy___0(self); }; -// RelativeHumidityTool -/** @suppress {undefinedVars, duplicate} @this{Object} */function RelativeHumidityTool() { + +// Interface: RelativeHumidityTool + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function RelativeHumidityTool() { this.ptr = _emscripten_bind_RelativeHumidityTool_RelativeHumidityTool_0(); getCache(RelativeHumidityTool)[this.ptr] = this; -};; +}; + RelativeHumidityTool.prototype = Object.create(WrapperObject.prototype); RelativeHumidityTool.prototype.constructor = RelativeHumidityTool; RelativeHumidityTool.prototype.__class__ = RelativeHumidityTool; RelativeHumidityTool.__cache__ = {}; Module['RelativeHumidityTool'] = RelativeHumidityTool; - -RelativeHumidityTool.prototype['calculate'] = RelativeHumidityTool.prototype.calculate = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +RelativeHumidityTool.prototype['calculate'] = RelativeHumidityTool.prototype.calculate = function() { var self = this.ptr; _emscripten_bind_RelativeHumidityTool_calculate_0(self); -};; +}; -RelativeHumidityTool.prototype['getDryBulbTemperature'] = RelativeHumidityTool.prototype.getDryBulbTemperature = /** @suppress {undefinedVars, duplicate} @this{Object} */function(temperatureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +RelativeHumidityTool.prototype['getDryBulbTemperature'] = RelativeHumidityTool.prototype.getDryBulbTemperature = function(temperatureUnits) { var self = this.ptr; if (temperatureUnits && typeof temperatureUnits === 'object') temperatureUnits = temperatureUnits.ptr; return _emscripten_bind_RelativeHumidityTool_getDryBulbTemperature_1(self, temperatureUnits); -};; +}; -RelativeHumidityTool.prototype['getSiteElevation'] = RelativeHumidityTool.prototype.getSiteElevation = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +RelativeHumidityTool.prototype['getSiteElevation'] = RelativeHumidityTool.prototype.getSiteElevation = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_RelativeHumidityTool_getSiteElevation_1(self, lengthUnits); -};; +}; -RelativeHumidityTool.prototype['getWetBulbTemperature'] = RelativeHumidityTool.prototype.getWetBulbTemperature = /** @suppress {undefinedVars, duplicate} @this{Object} */function(temperatureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +RelativeHumidityTool.prototype['getWetBulbTemperature'] = RelativeHumidityTool.prototype.getWetBulbTemperature = function(temperatureUnits) { var self = this.ptr; if (temperatureUnits && typeof temperatureUnits === 'object') temperatureUnits = temperatureUnits.ptr; return _emscripten_bind_RelativeHumidityTool_getWetBulbTemperature_1(self, temperatureUnits); -};; +}; -RelativeHumidityTool.prototype['getDewPointTemperature'] = RelativeHumidityTool.prototype.getDewPointTemperature = /** @suppress {undefinedVars, duplicate} @this{Object} */function(temperatureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +RelativeHumidityTool.prototype['getDewPointTemperature'] = RelativeHumidityTool.prototype.getDewPointTemperature = function(temperatureUnits) { var self = this.ptr; if (temperatureUnits && typeof temperatureUnits === 'object') temperatureUnits = temperatureUnits.ptr; return _emscripten_bind_RelativeHumidityTool_getDewPointTemperature_1(self, temperatureUnits); -};; +}; -RelativeHumidityTool.prototype['getRelativeHumidity'] = RelativeHumidityTool.prototype.getRelativeHumidity = /** @suppress {undefinedVars, duplicate} @this{Object} */function(fractionUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +RelativeHumidityTool.prototype['getRelativeHumidity'] = RelativeHumidityTool.prototype.getRelativeHumidity = function(fractionUnits) { var self = this.ptr; if (fractionUnits && typeof fractionUnits === 'object') fractionUnits = fractionUnits.ptr; return _emscripten_bind_RelativeHumidityTool_getRelativeHumidity_1(self, fractionUnits); -};; +}; -RelativeHumidityTool.prototype['getWetBulbDepression'] = RelativeHumidityTool.prototype.getWetBulbDepression = /** @suppress {undefinedVars, duplicate} @this{Object} */function(temperatureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +RelativeHumidityTool.prototype['getWetBulbDepression'] = RelativeHumidityTool.prototype.getWetBulbDepression = function(temperatureUnits) { var self = this.ptr; if (temperatureUnits && typeof temperatureUnits === 'object') temperatureUnits = temperatureUnits.ptr; return _emscripten_bind_RelativeHumidityTool_getWetBulbDepression_1(self, temperatureUnits); -};; +}; -RelativeHumidityTool.prototype['setDryBulbTemperature'] = RelativeHumidityTool.prototype.setDryBulbTemperature = /** @suppress {undefinedVars, duplicate} @this{Object} */function(dryBulbTemperature, temperatureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +RelativeHumidityTool.prototype['setDryBulbTemperature'] = RelativeHumidityTool.prototype.setDryBulbTemperature = function(dryBulbTemperature, temperatureUnits) { var self = this.ptr; if (dryBulbTemperature && typeof dryBulbTemperature === 'object') dryBulbTemperature = dryBulbTemperature.ptr; if (temperatureUnits && typeof temperatureUnits === 'object') temperatureUnits = temperatureUnits.ptr; _emscripten_bind_RelativeHumidityTool_setDryBulbTemperature_2(self, dryBulbTemperature, temperatureUnits); -};; +}; -RelativeHumidityTool.prototype['setSiteElevation'] = RelativeHumidityTool.prototype.setSiteElevation = /** @suppress {undefinedVars, duplicate} @this{Object} */function(siteElevation, lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +RelativeHumidityTool.prototype['setSiteElevation'] = RelativeHumidityTool.prototype.setSiteElevation = function(siteElevation, lengthUnits) { var self = this.ptr; if (siteElevation && typeof siteElevation === 'object') siteElevation = siteElevation.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; _emscripten_bind_RelativeHumidityTool_setSiteElevation_2(self, siteElevation, lengthUnits); -};; +}; -RelativeHumidityTool.prototype['setWetBulbTemperature'] = RelativeHumidityTool.prototype.setWetBulbTemperature = /** @suppress {undefinedVars, duplicate} @this{Object} */function(wetBulbTemperature, temperatureUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +RelativeHumidityTool.prototype['setWetBulbTemperature'] = RelativeHumidityTool.prototype.setWetBulbTemperature = function(wetBulbTemperature, temperatureUnits) { var self = this.ptr; if (wetBulbTemperature && typeof wetBulbTemperature === 'object') wetBulbTemperature = wetBulbTemperature.ptr; if (temperatureUnits && typeof temperatureUnits === 'object') temperatureUnits = temperatureUnits.ptr; _emscripten_bind_RelativeHumidityTool_setWetBulbTemperature_2(self, wetBulbTemperature, temperatureUnits); -};; +}; + - RelativeHumidityTool.prototype['__destroy__'] = RelativeHumidityTool.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +RelativeHumidityTool.prototype['__destroy__'] = RelativeHumidityTool.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_RelativeHumidityTool___destroy___0(self); }; -// SafeSeparationDistanceCalculator -/** @suppress {undefinedVars, duplicate} @this{Object} */function SafeSeparationDistanceCalculator() { + +// Interface: SafeSeparationDistanceCalculator + +/** @suppress {undefinedVars, duplicate} @this{Object} */ +function SafeSeparationDistanceCalculator() { this.ptr = _emscripten_bind_SafeSeparationDistanceCalculator_SafeSeparationDistanceCalculator_0(); getCache(SafeSeparationDistanceCalculator)[this.ptr] = this; -};; +}; + SafeSeparationDistanceCalculator.prototype = Object.create(WrapperObject.prototype); SafeSeparationDistanceCalculator.prototype.constructor = SafeSeparationDistanceCalculator; SafeSeparationDistanceCalculator.prototype.__class__ = SafeSeparationDistanceCalculator; SafeSeparationDistanceCalculator.__cache__ = {}; Module['SafeSeparationDistanceCalculator'] = SafeSeparationDistanceCalculator; - -SafeSeparationDistanceCalculator.prototype['calculate'] = SafeSeparationDistanceCalculator.prototype.calculate = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SafeSeparationDistanceCalculator.prototype['calculate'] = SafeSeparationDistanceCalculator.prototype.calculate = function() { var self = this.ptr; _emscripten_bind_SafeSeparationDistanceCalculator_calculate_0(self); -};; +}; -SafeSeparationDistanceCalculator.prototype['getBurningCondition'] = SafeSeparationDistanceCalculator.prototype.getBurningCondition = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SafeSeparationDistanceCalculator.prototype['getBurningCondition'] = SafeSeparationDistanceCalculator.prototype.getBurningCondition = function() { var self = this.ptr; return _emscripten_bind_SafeSeparationDistanceCalculator_getBurningCondition_0(self); -};; +}; -SafeSeparationDistanceCalculator.prototype['getSlopeClass'] = SafeSeparationDistanceCalculator.prototype.getSlopeClass = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SafeSeparationDistanceCalculator.prototype['getSlopeClass'] = SafeSeparationDistanceCalculator.prototype.getSlopeClass = function() { var self = this.ptr; return _emscripten_bind_SafeSeparationDistanceCalculator_getSlopeClass_0(self); -};; +}; -SafeSeparationDistanceCalculator.prototype['getSpeedClass'] = SafeSeparationDistanceCalculator.prototype.getSpeedClass = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SafeSeparationDistanceCalculator.prototype['getSpeedClass'] = SafeSeparationDistanceCalculator.prototype.getSpeedClass = function() { var self = this.ptr; return _emscripten_bind_SafeSeparationDistanceCalculator_getSpeedClass_0(self); -};; +}; -SafeSeparationDistanceCalculator.prototype['getSafeSeparationDistance'] = SafeSeparationDistanceCalculator.prototype.getSafeSeparationDistance = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SafeSeparationDistanceCalculator.prototype['getSafeSeparationDistance'] = SafeSeparationDistanceCalculator.prototype.getSafeSeparationDistance = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SafeSeparationDistanceCalculator_getSafeSeparationDistance_1(self, lengthUnits); -};; +}; -SafeSeparationDistanceCalculator.prototype['getSafetyZoneSize'] = SafeSeparationDistanceCalculator.prototype.getSafetyZoneSize = /** @suppress {undefinedVars, duplicate} @this{Object} */function(areaUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SafeSeparationDistanceCalculator.prototype['getSafetyZoneSize'] = SafeSeparationDistanceCalculator.prototype.getSafetyZoneSize = function(areaUnits) { var self = this.ptr; if (areaUnits && typeof areaUnits === 'object') areaUnits = areaUnits.ptr; return _emscripten_bind_SafeSeparationDistanceCalculator_getSafetyZoneSize_1(self, areaUnits); -};; +}; -SafeSeparationDistanceCalculator.prototype['getVegetationHeight'] = SafeSeparationDistanceCalculator.prototype.getVegetationHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SafeSeparationDistanceCalculator.prototype['getVegetationHeight'] = SafeSeparationDistanceCalculator.prototype.getVegetationHeight = function(lengthUnits) { var self = this.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; return _emscripten_bind_SafeSeparationDistanceCalculator_getVegetationHeight_1(self, lengthUnits); -};; +}; -SafeSeparationDistanceCalculator.prototype['getSafetyCondition'] = SafeSeparationDistanceCalculator.prototype.getSafetyCondition = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SafeSeparationDistanceCalculator.prototype['getSafetyCondition'] = SafeSeparationDistanceCalculator.prototype.getSafetyCondition = function() { var self = this.ptr; return _emscripten_bind_SafeSeparationDistanceCalculator_getSafetyCondition_0(self); -};; +}; -SafeSeparationDistanceCalculator.prototype['setBurningCondition'] = SafeSeparationDistanceCalculator.prototype.setBurningCondition = /** @suppress {undefinedVars, duplicate} @this{Object} */function(condition) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SafeSeparationDistanceCalculator.prototype['setBurningCondition'] = SafeSeparationDistanceCalculator.prototype.setBurningCondition = function(condition) { var self = this.ptr; if (condition && typeof condition === 'object') condition = condition.ptr; _emscripten_bind_SafeSeparationDistanceCalculator_setBurningCondition_1(self, condition); -};; +}; -SafeSeparationDistanceCalculator.prototype['setSlopeClass'] = SafeSeparationDistanceCalculator.prototype.setSlopeClass = /** @suppress {undefinedVars, duplicate} @this{Object} */function(slope) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SafeSeparationDistanceCalculator.prototype['setSlopeClass'] = SafeSeparationDistanceCalculator.prototype.setSlopeClass = function(slope) { var self = this.ptr; if (slope && typeof slope === 'object') slope = slope.ptr; _emscripten_bind_SafeSeparationDistanceCalculator_setSlopeClass_1(self, slope); -};; +}; -SafeSeparationDistanceCalculator.prototype['setSpeedClass'] = SafeSeparationDistanceCalculator.prototype.setSpeedClass = /** @suppress {undefinedVars, duplicate} @this{Object} */function(speed) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SafeSeparationDistanceCalculator.prototype['setSpeedClass'] = SafeSeparationDistanceCalculator.prototype.setSpeedClass = function(speed) { var self = this.ptr; if (speed && typeof speed === 'object') speed = speed.ptr; _emscripten_bind_SafeSeparationDistanceCalculator_setSpeedClass_1(self, speed); -};; +}; -SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparationDistanceCalculator.prototype.setVegetationHeight = /** @suppress {undefinedVars, duplicate} @this{Object} */function(height, lengthUnits) { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparationDistanceCalculator.prototype.setVegetationHeight = function(height, lengthUnits) { var self = this.ptr; if (height && typeof height === 'object') height = height.ptr; if (lengthUnits && typeof lengthUnits === 'object') lengthUnits = lengthUnits.ptr; _emscripten_bind_SafeSeparationDistanceCalculator_setVegetationHeight_2(self, height, lengthUnits); -};; +}; + - SafeSeparationDistanceCalculator.prototype['__destroy__'] = SafeSeparationDistanceCalculator.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() { +/** @suppress {undefinedVars, duplicate} @this{Object} */ +SafeSeparationDistanceCalculator.prototype['__destroy__'] = SafeSeparationDistanceCalculator.prototype.__destroy__ = function() { var self = this.ptr; _emscripten_bind_SafeSeparationDistanceCalculator___destroy___0(self); }; + (function() { function setupEnums() { - - // AreaUnits_AreaUnitsEnum +// $AreaUnits_AreaUnitsEnum Module['AreaUnits']['SquareFeet'] = _emscripten_enum_AreaUnits_AreaUnitsEnum_SquareFeet(); @@ -5882,24 +6825,21 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['AreaUnits']['SquareKilometers'] = _emscripten_enum_AreaUnits_AreaUnitsEnum_SquareKilometers(); - - // BasalAreaUnits_BasalAreaUnitsEnum +// $BasalAreaUnits_BasalAreaUnitsEnum Module['BasalAreaUnits']['SquareFeetPerAcre'] = _emscripten_enum_BasalAreaUnits_BasalAreaUnitsEnum_SquareFeetPerAcre(); Module['BasalAreaUnits']['SquareMetersPerHectare'] = _emscripten_enum_BasalAreaUnits_BasalAreaUnitsEnum_SquareMetersPerHectare(); - - // FractionUnits_FractionUnitsEnum +// $FractionUnits_FractionUnitsEnum Module['FractionUnits']['Fraction'] = _emscripten_enum_FractionUnits_FractionUnitsEnum_Fraction(); Module['FractionUnits']['Percent'] = _emscripten_enum_FractionUnits_FractionUnitsEnum_Percent(); - - // LengthUnits_LengthUnitsEnum +// $LengthUnits_LengthUnitsEnum Module['LengthUnits']['Feet'] = _emscripten_enum_LengthUnits_LengthUnitsEnum_Feet(); @@ -5918,8 +6858,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['LengthUnits']['Kilometers'] = _emscripten_enum_LengthUnits_LengthUnitsEnum_Kilometers(); - - // LoadingUnits_LoadingUnitsEnum +// $LoadingUnits_LoadingUnitsEnum Module['LoadingUnits']['PoundsPerSquareFoot'] = _emscripten_enum_LoadingUnits_LoadingUnitsEnum_PoundsPerSquareFoot(); @@ -5930,8 +6869,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['LoadingUnits']['KilogramsPerSquareMeter'] = _emscripten_enum_LoadingUnits_LoadingUnitsEnum_KilogramsPerSquareMeter(); - - // SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum +// $SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum Module['SurfaceAreaToVolumeUnits']['SquareFeetOverCubicFeet'] = _emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareFeetOverCubicFeet(); @@ -5942,8 +6880,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['SurfaceAreaToVolumeUnits']['SquareCentimetersOverCubicCentimeters'] = _emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareCentimetersOverCubicCentimeters(); - - // SpeedUnits_SpeedUnitsEnum +// $SpeedUnits_SpeedUnitsEnum Module['SpeedUnits']['FeetPerMinute'] = _emscripten_enum_SpeedUnits_SpeedUnitsEnum_FeetPerMinute(); @@ -5953,13 +6890,16 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['SpeedUnits']['MetersPerMinute'] = _emscripten_enum_SpeedUnits_SpeedUnitsEnum_MetersPerMinute(); + Module['SpeedUnits']['MetersPerHour'] = _emscripten_enum_SpeedUnits_SpeedUnitsEnum_MetersPerHour(); + Module['SpeedUnits']['MilesPerHour'] = _emscripten_enum_SpeedUnits_SpeedUnitsEnum_MilesPerHour(); Module['SpeedUnits']['KilometersPerHour'] = _emscripten_enum_SpeedUnits_SpeedUnitsEnum_KilometersPerHour(); - + Module['SpeedUnits']['FurlongsPerFortnight'] = _emscripten_enum_SpeedUnits_SpeedUnitsEnum_FurlongsPerFortnight(); - // PressureUnits_PressureUnitsEnum + +// $PressureUnits_PressureUnitsEnum Module['PressureUnits']['Pascal'] = _emscripten_enum_PressureUnits_PressureUnitsEnum_Pascal(); @@ -5980,40 +6920,35 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['PressureUnits']['PoundPerSquareInch'] = _emscripten_enum_PressureUnits_PressureUnitsEnum_PoundPerSquareInch(); - - // SlopeUnits_SlopeUnitsEnum +// $SlopeUnits_SlopeUnitsEnum Module['SlopeUnits']['Degrees'] = _emscripten_enum_SlopeUnits_SlopeUnitsEnum_Degrees(); Module['SlopeUnits']['Percent'] = _emscripten_enum_SlopeUnits_SlopeUnitsEnum_Percent(); - - // DensityUnits_DensityUnitsEnum +// $DensityUnits_DensityUnitsEnum Module['DensityUnits']['PoundsPerCubicFoot'] = _emscripten_enum_DensityUnits_DensityUnitsEnum_PoundsPerCubicFoot(); Module['DensityUnits']['KilogramsPerCubicMeter'] = _emscripten_enum_DensityUnits_DensityUnitsEnum_KilogramsPerCubicMeter(); - - // HeatOfCombustionUnits_HeatOfCombustionUnitsEnum +// $HeatOfCombustionUnits_HeatOfCombustionUnitsEnum Module['HeatOfCombustionUnits']['BtusPerPound'] = _emscripten_enum_HeatOfCombustionUnits_HeatOfCombustionUnitsEnum_BtusPerPound(); Module['HeatOfCombustionUnits']['KilojoulesPerKilogram'] = _emscripten_enum_HeatOfCombustionUnits_HeatOfCombustionUnitsEnum_KilojoulesPerKilogram(); - - // HeatSinkUnits_HeatSinkUnitsEnum +// $HeatSinkUnits_HeatSinkUnitsEnum Module['HeatSinkUnits']['BtusPerCubicFoot'] = _emscripten_enum_HeatSinkUnits_HeatSinkUnitsEnum_BtusPerCubicFoot(); Module['HeatSinkUnits']['KilojoulesPerCubicMeter'] = _emscripten_enum_HeatSinkUnits_HeatSinkUnitsEnum_KilojoulesPerCubicMeter(); - - // HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum +// $HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum Module['HeatPerUnitAreaUnits']['BtusPerSquareFoot'] = _emscripten_enum_HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum_BtusPerSquareFoot(); @@ -6022,8 +6957,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['HeatPerUnitAreaUnits']['KilowattSecondsPerSquareMeter'] = _emscripten_enum_HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum_KilowattSecondsPerSquareMeter(); - - // HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum +// $HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum Module['HeatSourceAndReactionIntensityUnits']['BtusPerSquareFootPerMinute'] = _emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_BtusPerSquareFootPerMinute(); @@ -6036,8 +6970,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['HeatSourceAndReactionIntensityUnits']['KilowattsPerSquareMeter'] = _emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_KilowattsPerSquareMeter(); - - // FirelineIntensityUnits_FirelineIntensityUnitsEnum +// $FirelineIntensityUnits_FirelineIntensityUnitsEnum Module['FirelineIntensityUnits']['BtusPerFootPerSecond'] = _emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_BtusPerFootPerSecond(); @@ -6050,8 +6983,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['FirelineIntensityUnits']['KilowattsPerMeter'] = _emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_KilowattsPerMeter(); - - // TemperatureUnits_TemperatureUnitsEnum +// $TemperatureUnits_TemperatureUnitsEnum Module['TemperatureUnits']['Fahrenheit'] = _emscripten_enum_TemperatureUnits_TemperatureUnitsEnum_Fahrenheit(); @@ -6060,8 +6992,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['TemperatureUnits']['Kelvin'] = _emscripten_enum_TemperatureUnits_TemperatureUnitsEnum_Kelvin(); - - // TimeUnits_TimeUnitsEnum +// $TimeUnits_TimeUnitsEnum Module['TimeUnits']['Minutes'] = _emscripten_enum_TimeUnits_TimeUnitsEnum_Minutes(); @@ -6069,17 +7000,19 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['TimeUnits']['Hours'] = _emscripten_enum_TimeUnits_TimeUnitsEnum_Hours(); - + Module['TimeUnits']['Days'] = _emscripten_enum_TimeUnits_TimeUnitsEnum_Days(); + + Module['TimeUnits']['Years'] = _emscripten_enum_TimeUnits_TimeUnitsEnum_Years(); - // ContainTactic_ContainTacticEnum + +// $ContainTactic_ContainTacticEnum Module['HeadAttack'] = _emscripten_enum_ContainTactic_ContainTacticEnum_HeadAttack(); Module['RearAttack'] = _emscripten_enum_ContainTactic_ContainTacticEnum_RearAttack(); - - // ContainStatus_ContainStatusEnum +// $ContainStatus_ContainStatusEnum Module['Unreported'] = _emscripten_enum_ContainStatus_ContainStatusEnum_Unreported(); @@ -6100,8 +7033,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['TimeLimitExceeded'] = _emscripten_enum_ContainStatus_ContainStatusEnum_TimeLimitExceeded(); - - // ContainFlank_ContainFlankEnum +// $ContainFlank_ContainFlankEnum Module['LeftFlank'] = _emscripten_enum_ContainFlank_ContainFlankEnum_LeftFlank(); @@ -6112,16 +7044,14 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['NeitherFlank'] = _emscripten_enum_ContainFlank_ContainFlankEnum_NeitherFlank(); - - // ContainMode +// $ContainMode Module['Default'] = _emscripten_enum_ContainMode_Default(); Module['ComputeWithOptimalResource'] = _emscripten_enum_ContainMode_ComputeWithOptimalResource(); - - // IgnitionFuelBedType_IgnitionFuelBedTypeEnum +// $IgnitionFuelBedType_IgnitionFuelBedTypeEnum Module['PonderosaPineLitter'] = _emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PonderosaPineLitter(); @@ -6140,8 +7070,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['PeatMoss'] = _emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PeatMoss(); - - // LightningCharge_LightningChargeEnum +// $LightningCharge_LightningChargeEnum Module['Negative'] = _emscripten_enum_LightningCharge_LightningChargeEnum_Negative(); @@ -6150,16 +7079,14 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['Unknown'] = _emscripten_enum_LightningCharge_LightningChargeEnum_Unknown(); - - // SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum +// $SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum Module['CLOSED'] = _emscripten_enum_SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum_CLOSED(); Module['OPEN'] = _emscripten_enum_SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum_OPEN(); - - // SpotTreeSpecies_SpotTreeSpeciesEnum +// $SpotTreeSpecies_SpotTreeSpeciesEnum Module['ENGELMANN_SPRUCE'] = _emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_ENGELMANN_SPRUCE(); @@ -6190,8 +7117,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['LOBLOLLY_PINE'] = _emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_LOBLOLLY_PINE(); - - // SpotFireLocation_SpotFireLocationEnum +// $SpotFireLocation_SpotFireLocationEnum Module['MIDSLOPE_WINDWARD'] = _emscripten_enum_SpotFireLocation_SpotFireLocationEnum_MIDSLOPE_WINDWARD(); @@ -6202,16 +7128,14 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['RIDGE_TOP'] = _emscripten_enum_SpotFireLocation_SpotFireLocationEnum_RIDGE_TOP(); - - // FuelLifeState_FuelLifeStateEnum +// $FuelLifeState_FuelLifeStateEnum Module['Dead'] = _emscripten_enum_FuelLifeState_FuelLifeStateEnum_Dead(); Module['Live'] = _emscripten_enum_FuelLifeState_FuelLifeStateEnum_Live(); - - // FuelConstantsEnum_FuelConstantsEnum +// $FuelConstantsEnum_FuelConstantsEnum Module['MaxLifeStates'] = _emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxLifeStates(); @@ -6226,16 +7150,14 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['MaxFuelModels'] = _emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxFuelModels(); - - // AspenFireSeverity_AspenFireSeverityEnum +// $AspenFireSeverity_AspenFireSeverityEnum Module['Low'] = _emscripten_enum_AspenFireSeverity_AspenFireSeverityEnum_Low(); Module['Moderate'] = _emscripten_enum_AspenFireSeverity_AspenFireSeverityEnum_Moderate(); - - // ChaparralFuelType_ChaparralFuelTypeEnum +// $ChaparralFuelType_ChaparralFuelTypeEnum Module['NotSet'] = _emscripten_enum_ChaparralFuelType_ChaparralFuelTypeEnum_NotSet(); @@ -6244,16 +7166,14 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['MixedBrush'] = _emscripten_enum_ChaparralFuelType_ChaparralFuelTypeEnum_MixedBrush(); - - // ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum +// $ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum Module['DirectFuelLoad'] = _emscripten_enum_ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum_DirectFuelLoad(); Module['FuelLoadFromDepthAndChaparralType'] = _emscripten_enum_ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum_FuelLoadFromDepthAndChaparralType(); - - // MoistureInputMode_MoistureInputModeEnum +// $MoistureInputMode_MoistureInputModeEnum Module['BySizeClass'] = _emscripten_enum_MoistureInputMode_MoistureInputModeEnum_BySizeClass(); @@ -6266,8 +7186,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['MoistureScenario'] = _emscripten_enum_MoistureInputMode_MoistureInputModeEnum_MoistureScenario(); - - // MoistureClassInput_MoistureClassInputEnum +// $MoistureClassInput_MoistureClassInputEnum Module['OneHour'] = _emscripten_enum_MoistureClassInput_MoistureClassInputEnum_OneHour(); @@ -6284,16 +7203,14 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['LiveAggregate'] = _emscripten_enum_MoistureClassInput_MoistureClassInputEnum_LiveAggregate(); - - // SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum +// $SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum Module['FromIgnitionPoint'] = _emscripten_enum_SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum_FromIgnitionPoint(); Module['FromPerimeter'] = _emscripten_enum_SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum_FromPerimeter(); - - // TwoFuelModelsMethod_TwoFuelModelsMethodEnum +// $TwoFuelModelsMethod_TwoFuelModelsMethodEnum Module['NoMethod'] = _emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_NoMethod(); @@ -6304,16 +7221,14 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['TwoDimensional'] = _emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_TwoDimensional(); - - // WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum +// $WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum Module['Unsheltered'] = _emscripten_enum_WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum_Unsheltered(); Module['Sheltered'] = _emscripten_enum_WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum_Sheltered(); - - // WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum +// $WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum Module['UserInput'] = _emscripten_enum_WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum_UserInput(); @@ -6322,16 +7237,14 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['DontUseCrownRatio'] = _emscripten_enum_WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum_DontUseCrownRatio(); - - // WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum +// $WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum Module['RelativeToUpslope'] = _emscripten_enum_WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum_RelativeToUpslope(); Module['RelativeToNorth'] = _emscripten_enum_WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum_RelativeToNorth(); - - // WindHeightInputMode_WindHeightInputModeEnum +// $WindHeightInputMode_WindHeightInputModeEnum Module['DirectMidflame'] = _emscripten_enum_WindHeightInputMode_WindHeightInputModeEnum_DirectMidflame(); @@ -6340,16 +7253,14 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['TenMeter'] = _emscripten_enum_WindHeightInputMode_WindHeightInputModeEnum_TenMeter(); - - // WindUpslopeAlignmentMode +// $WindUpslopeAlignmentMode Module['NotAligned'] = _emscripten_enum_WindUpslopeAlignmentMode_NotAligned(); Module['Aligned'] = _emscripten_enum_WindUpslopeAlignmentMode_Aligned(); - - // SurfaceRunInDirectionOf +// $SurfaceRunInDirectionOf Module['MaxSpread'] = _emscripten_enum_SurfaceRunInDirectionOf_MaxSpread(); @@ -6358,8 +7269,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['HeadingBackingFlanking'] = _emscripten_enum_SurfaceRunInDirectionOf_HeadingBackingFlanking(); - - // FireType_FireTypeEnum +// $FireType_FireTypeEnum Module['Surface'] = _emscripten_enum_FireType_FireTypeEnum_Surface(); @@ -6370,8 +7280,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['Crowning'] = _emscripten_enum_FireType_FireTypeEnum_Crowning(); - - // BeetleDamage +// $BeetleDamage Module['not_set'] = _emscripten_enum_BeetleDamage_not_set(); @@ -6380,16 +7289,14 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['yes'] = _emscripten_enum_BeetleDamage_yes(); - - // CrownFireCalculationMethod +// $CrownFireCalculationMethod Module['rothermel'] = _emscripten_enum_CrownFireCalculationMethod_rothermel(); Module['scott_and_reinhardt'] = _emscripten_enum_CrownFireCalculationMethod_scott_and_reinhardt(); - - // CrownDamageEquationCode +// $CrownDamageEquationCode Module['not_set'] = _emscripten_enum_CrownDamageEquationCode_not_set(); @@ -6416,8 +7323,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['douglas_fir'] = _emscripten_enum_CrownDamageEquationCode_douglas_fir(); - - // CrownDamageType +// $CrownDamageType Module['not_set'] = _emscripten_enum_CrownDamageType_not_set(); @@ -6428,8 +7334,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['crown_kill'] = _emscripten_enum_CrownDamageType_crown_kill(); - - // EquationType +// $EquationType Module['not_set'] = _emscripten_enum_EquationType_not_set(); @@ -6440,8 +7345,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['crown_damage'] = _emscripten_enum_EquationType_crown_damage(); - - // FireSeverity +// $FireSeverity Module['not_set'] = _emscripten_enum_FireSeverity_not_set(); @@ -6450,16 +7354,14 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['low'] = _emscripten_enum_FireSeverity_low(); - - // FlameLengthOrScorchHeightSwitch +// $FlameLengthOrScorchHeightSwitch Module['flame_length'] = _emscripten_enum_FlameLengthOrScorchHeightSwitch_flame_length(); Module['scorch_height'] = _emscripten_enum_FlameLengthOrScorchHeightSwitch_scorch_height(); - - // GACC +// $GACC Module['NotSet'] = _emscripten_enum_GACC_NotSet(); @@ -6482,8 +7384,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['Southwest'] = _emscripten_enum_GACC_Southwest(); - - // RequiredFieldNames +// $RequiredFieldNames Module['region'] = _emscripten_enum_RequiredFieldNames_region(); @@ -6514,8 +7415,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['num_inputs'] = _emscripten_enum_RequiredFieldNames_num_inputs(); - - // FDFMToolAspectIndex_AspectIndexEnum +// $FDFMToolAspectIndex_AspectIndexEnum Module['NORTH'] = _emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_NORTH(); @@ -6526,8 +7426,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['WEST'] = _emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_WEST(); - - // FDFMToolDryBulbIndex_DryBulbIndexEnum +// $FDFMToolDryBulbIndex_DryBulbIndexEnum Module['TEN_TO_TWENTY_NINE_DEGREES_F'] = _emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_TEN_TO_TWENTY_NINE_DEGREES_F(); @@ -6542,8 +7441,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['GREATER_THAN_ONE_HUNDRED_NINE_DEGREES_F'] = _emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_GREATER_THAN_ONE_HUNDRED_NINE_DEGREES_F(); - - // FDFMToolElevationIndex_ElevationIndexEnum +// $FDFMToolElevationIndex_ElevationIndexEnum Module['BELOW_1000_TO_2000_FT'] = _emscripten_enum_FDFMToolElevationIndex_ElevationIndexEnum_BELOW_1000_TO_2000_FT(); @@ -6552,8 +7450,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['ABOVE_1000_TO_2000_FT'] = _emscripten_enum_FDFMToolElevationIndex_ElevationIndexEnum_ABOVE_1000_TO_2000_FT(); - - // FDFMToolMonthIndex_MonthIndexEnum +// $FDFMToolMonthIndex_MonthIndexEnum Module['MAY_JUNE_JULY'] = _emscripten_enum_FDFMToolMonthIndex_MonthIndexEnum_MAY_JUNE_JULY(); @@ -6562,8 +7459,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['NOV_DEC_JAN'] = _emscripten_enum_FDFMToolMonthIndex_MonthIndexEnum_NOV_DEC_JAN(); - - // FDFMToolRHIndex_RHIndexEnum +// $FDFMToolRHIndex_RHIndexEnum Module['ZERO_TO_FOUR_PERCENT'] = _emscripten_enum_FDFMToolRHIndex_RHIndexEnum_ZERO_TO_FOUR_PERCENT(); @@ -6608,24 +7504,21 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['ONE_HUNDRED_PERCENT'] = _emscripten_enum_FDFMToolRHIndex_RHIndexEnum_ONE_HUNDRED_PERCENT(); - - // FDFMToolShadingIndex_ShadingIndexEnum +// $FDFMToolShadingIndex_ShadingIndexEnum Module['EXPOSED'] = _emscripten_enum_FDFMToolShadingIndex_ShadingIndexEnum_EXPOSED(); Module['SHADED'] = _emscripten_enum_FDFMToolShadingIndex_ShadingIndexEnum_SHADED(); - - // FDFMToolSlopeIndex_SlopeIndexEnum +// $FDFMToolSlopeIndex_SlopeIndexEnum Module['ZERO_TO_THIRTY_PERCENT'] = _emscripten_enum_FDFMToolSlopeIndex_SlopeIndexEnum_ZERO_TO_THIRTY_PERCENT(); Module['GREATER_THAN_OR_EQUAL_TO_THIRTY_ONE_PERCENT'] = _emscripten_enum_FDFMToolSlopeIndex_SlopeIndexEnum_GREATER_THAN_OR_EQUAL_TO_THIRTY_ONE_PERCENT(); - - // FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum +// $FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum Module['EIGHT_HUNDRED_HOURS_TO_NINE_HUNDRED_FIFTY_NINE'] = _emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_EIGHT_HUNDRED_HOURS_TO_NINE_HUNDRED_FIFTY_NINE(); @@ -6640,8 +7533,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['EIGHTTEEN_HUNDRED_HOURS_TO_SUNSET'] = _emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_EIGHTTEEN_HUNDRED_HOURS_TO_SUNSET(); - - // RepresentativeFraction_RepresentativeFractionEnum +// $RepresentativeFraction_RepresentativeFractionEnum Module['NINTEEN_HUNDRED_EIGHTY'] = _emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_NINTEEN_HUNDRED_EIGHTY(); @@ -6680,8 +7572,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['ONE_MILLION_THIRTEEN_THOUSAND_SEVEN_HUNDRED_SIXTY'] = _emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_ONE_MILLION_THIRTEEN_THOUSAND_SEVEN_HUNDRED_SIXTY(); - - // HorizontalDistanceIndex_HorizontalDistanceIndexEnum +// $HorizontalDistanceIndex_HorizontalDistanceIndexEnum Module['UPSLOPE_ZERO_DEGREES'] = _emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_UPSLOPE_ZERO_DEGREES(); @@ -6698,8 +7589,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['CROSS_SLOPE_NINETY_DEGREES'] = _emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_CROSS_SLOPE_NINETY_DEGREES(); - - // BurningCondition_BurningConditionEnum +// $BurningCondition_BurningConditionEnum Module['Low'] = _emscripten_enum_BurningCondition_BurningConditionEnum_Low(); @@ -6708,8 +7598,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['Extreme'] = _emscripten_enum_BurningCondition_BurningConditionEnum_Extreme(); - - // SlopeClass_SlopeClassEnum +// $SlopeClass_SlopeClassEnum Module['Flat'] = _emscripten_enum_SlopeClass_SlopeClassEnum_Flat(); @@ -6718,8 +7607,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['Steep'] = _emscripten_enum_SlopeClass_SlopeClassEnum_Steep(); - - // SpeedClass_SpeedClassEnum +// $SpeedClass_SpeedClassEnum Module['Light'] = _emscripten_enum_SpeedClass_SpeedClassEnum_Light(); @@ -6728,8 +7616,7 @@ SafeSeparationDistanceCalculator.prototype['setVegetationHeight'] = SafeSeparati Module['High'] = _emscripten_enum_SpeedClass_SpeedClassEnum_High(); - - // SafetyCondition_SafetyConditionEnum +// $SafetyCondition_SafetyConditionEnum Module['Low'] = _emscripten_enum_SafetyCondition_SafetyConditionEnum_Low(); diff --git a/cms-exports/dimensions.edn b/cms-exports/dimensions.edn index 548d85877..7815626e4 100644 --- a/cms-exports/dimensions.edn +++ b/cms-exports/dimensions.edn @@ -72,7 +72,15 @@ #:unit{:enum-member-name "KilowattsPerMeter" :name "Kilowatts Per Meter (kW/m)" :system :metric - :short-code "kW/m"}]} + :short-code "kW/m"} + #:unit{:enum-member-name "KilojoulesPerMeterPerSecond" + :name "Kilojoules Per Meter Per Second (kJ/m/s)" + :system :metric + :short-code "kJ/m/s"} + #:unit{:enum-member-name "KilojoulesPerMeterPerMinute" + :name "Kilojoules Per Meter Per Minute (kJ/m/min)" + :system :metric + :short-code "kJ/m/min"}]} {:dimension/name "Heat of Combustion" :enum-name "HeatOfCombustionUnits_HeatOfCombustionUnitsEnum" @@ -112,7 +120,15 @@ #:unit{:enum-member-name "KilowattsPerSquareMeter" :name "Kilowatts Per Square Meter (kW/m2)" :system :metric - :short-code "kW/m2"}]} + :short-code "kW/m2"} + #:unit{:enum-member-name "KilojoulesPerSquareMeterPerSecond" + :name "Kilojoules Per Square Meter Per Second (kJ/m2/s)" + :system :metric + :short-code "kJ/m2/s"} + #:unit{:enum-member-name "KilojoulesPerSquareMeterPerMinute" + :name "Kilojoules Per Square Meter Per Minute (kJ/m2/min)" + :system :metric + :short-code "kJ/m2/min"}]} {:dimension/name "Heat Per Unit Area" :enum-name "HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum" @@ -124,7 +140,11 @@ #:unit{:enum-member-name "KilojoulesPerSquareMeter" :name "Kilojoules Per Square Meter (kJ/m2)" :system :metric - :short-code "kJ/m2"}]} + :short-code "kJ/m2"} + #:unit{:enum-member-name "KilowattSecondsPerSquareMeter" + :name "Kilowatt Seconds Per Square Meter (kW-s/m2)" + :system :metric + :short-code "kW-s/m2"}]} {:dimension/name "Length" :enum-name "LengthUnits_LengthUnitsEnum" @@ -172,7 +192,15 @@ #:unit{:enum-member-name "TonnesPerHectare" :name "Tonnes Per Hectare (tonne/ha)" :system :metric - :short-code "tonne/ha"}]} + :short-code "tonne/ha"} + #:unit{:enum-member-name "PoundsPerSquareFoot" + :name "Pounds Per Square Foot (lb/ft2)" + :system :english + :short-code "lb/ft2"} + #:unit{:enum-member-name "KilogramsPerSquareMeter" + :name "Kilograms Per Square Meter (kg/m2)" + :system :metric + :short-code "kg/m2"}]} {:dimension/name "Pressure" :enum-name "PressureUnits_PressureUnitsEnum" @@ -248,7 +276,15 @@ #:unit{:enum-member-name "MetersPerMinute" :name "Meters Per Minute (m/min)" :system :metric - :short-code "m/min"}]} + :short-code "m/min"} + #:unit{:enum-member-name "MetersPerSecond" + :name "Meters Per Second (m/s)" + :system :metric + :short-code "m/s"} + #:unit{:enum-member-name "FurlongsPerFortnight" + :name "Furlongs Per Fortnight (fur/fortnight)" + :system :english + :short-code "fur/fortnight"}]} {:dimension/name "Surface Area To Volume" :enum-name "SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum" @@ -260,7 +296,15 @@ #:unit{:enum-member-name "SquareMetersOverCubicMeters" :name "Square Meters Over Cubic Meters (m2/m3)" :system :metric - :short-code "m2/m3"}]} + :short-code "m2/m3"} + #:unit{:enum-member-name "SquareInchesOverCubicInches" + :name "Square Inches Over Cubic Inches (in2/in3)" + :system :english + :short-code "in2/in3"} + #:unit{:enum-member-name "SquareCentimetersOverCubicCentimeters" + :name "Square Centimeters Over Cubic Centimeters (cm2/cm3)" + :system :metric + :short-code "cm2/cm3"}]} {:dimension/name "Temperature" :enum-name "TemperatureUnits_TemperatureUnitsEnum" @@ -272,7 +316,11 @@ #:unit{:enum-member-name "Celsius" :name "Celsius (oC)" :system :metric - :short-code "oC"}]} + :short-code "oC"} + #:unit{:enum-member-name "Kelvin" + :name "Kelvin (K)" + :system :metric + :short-code "K"}]} {:dimension/name "Time" :enum-name "TimeUnits_TimeUnitsEnum" diff --git a/cms-exports/unit-enums.edn b/cms-exports/unit-enums.edn index e749b27ee..63753c2d3 100644 --- a/cms-exports/unit-enums.edn +++ b/cms-exports/unit-enums.edn @@ -50,7 +50,8 @@ :MetersPerMinute :MetersPerHour :MilesPerHour - :KilometersPerHour] + :KilometersPerHour + :FurlongsPerFortnight] :FractionUnits_FractionUnitsEnum [:Fraction diff --git a/components/cucumber/src/cucumber/element.clj b/components/cucumber/src/cucumber/element.clj index 4cb12e8a9..d50121ae7 100644 --- a/components/cucumber/src/cucumber/element.clj +++ b/components/cucumber/src/cucumber/element.clj @@ -1,5 +1,6 @@ (ns cucumber.element - (:import [org.openqa.selenium By WebElement])) + (:import [org.openqa.selenium By WebElement WrapsDriver JavascriptExecutor + ElementClickInterceptedException])) (defn attr-value "Get an element attribute value." @@ -12,9 +13,22 @@ (.clear e)) (defn click! - "Click on an element." + "Click on an element, robust to overlap by a fixed element (e.g. the app's fixed + `page__footer`). Scrolls the element to the viewport center so it clears the footer, + then clicks; if the native click is still intercepted, falls back to a JS click." [^WebElement e] - (.click e)) + (let [driver (.getWrappedDriver ^WrapsDriver e)] + (try + (.executeScript ^JavascriptExecutor driver + "arguments[0].scrollIntoView({block:'center',inline:'center'});" + (into-array Object [e])) + (catch Exception _ nil)) + (try + (.click e) + (catch ElementClickInterceptedException _ + (.executeScript ^JavascriptExecutor driver + "arguments[0].click();" + (into-array Object [e])))))) (defn css-value "Get an element's CSS Value." diff --git a/components/cucumber/src/cucumber/report.clj b/components/cucumber/src/cucumber/report.clj new file mode 100644 index 000000000..e3879761d --- /dev/null +++ b/components/cucumber/src/cucumber/report.clj @@ -0,0 +1,93 @@ +(ns cucumber.report + "Reporting for the cucumber runner (scripts/cucumber_run_driver.clj): failure + extraction and org/EDN rendering + persistence. Pure formatting — no Selenium/tegere + code dependency (only tegere-namespaced keywords are read from the result maps)." + (:require [clojure.java.io :as io] + [clojure.string :as str])) + +;;; --------------------------------------------------------------------------- +;;; Formatting / failure extraction +;;; --------------------------------------------------------------------------- + +(defn fmt-duration [secs] + (let [s (long secs) m (quot s 60) r (rem s 60)] (format "%dm %02ds" m r))) + +(defn clean-reason [r] + (-> (str r) + (str/replace #"\s*\|?\s*(Build info:|System info:|Driver info:|Capabilities \{|Session ID:|For documentation on this error|\(Session info:).*$" "") + (str/replace #"\s*\n\s*" " ") + str/trim)) + +(defn scenario-title [ex] + (let [sc (:tegere.runner/scenario ex)] + (or (:tegere.parser/description sc) (:tegere.parser/name sc) "(unnamed scenario)"))) + +(defn- step-err [step] (get-in step [:tegere.runner/execution :tegere.runner/err])) + +(defn ex-failure + "nil if the executable passed, else {:scenario :type :step :reason}." + [ex] + (when-let [bad (some (fn [st] (when-let [e (step-err st)] [st e])) + (:tegere.parser/steps ex))] + (let [[st e] bad + msg (or (not-empty (:tegere.runner/message e)) + (first (:tegere.runner/stack-trace e)) + (name (:tegere.runner/type e :fail))) + stept (str (some-> (:tegere.parser/type st) name str/capitalize) " " + (:tegere.parser/text st))] + {:scenario (scenario-title ex) + :type (:tegere.runner/type e) + :step (str/trim stept) + :reason (str/replace (str/trim msg) #"\s*\n\s*" " | ")}))) + +(defn counts [all-files status executables] + (let [state-of (fn [f] (:state (get status f)))] + {:passed (count (filter #(= :pass (state-of %)) all-files)) + :failed (count (filter #(= :fail (state-of %)) all-files)) + :skipped (count (filter #(= :skip (state-of %)) all-files)) + :pending (count (filter #(= :pending (state-of %)) all-files)) + :scenarios-passed (- (count executables) (count (filter :failure executables))) + :scenarios-failed (count (filter :failure executables)) + :failed-files (->> all-files (filter #(= :fail (state-of %))) vec)})) + +;;; --------------------------------------------------------------------------- +;;; Rendering / persistence +;;; --------------------------------------------------------------------------- + +(defn render-org + [{:keys [url query headless stop elapsed all-files status executables]}] + (let [{:keys [passed failed skipped pending scenarios-passed scenarios-failed]} + (counts all-files status executables) + sb (StringBuilder.)] + (.append sb "#+TITLE: Cucumber Test Results\n") + (.append sb (str "#+DATE: " (java.time.LocalDate/now) "\n")) + (.append sb (str "# Config: query " query ", :headless? " (boolean headless) + ", :stop " (boolean stop) "\n")) + (.append sb (str "# url " url "\n")) + (.append sb (str "# Elapsed" (when (pos? pending) " so far") ": " + (fmt-duration elapsed) " (" (format "%.1f" elapsed) "s)\n")) + (.append sb (str "# Files: " (count all-files) " total — " passed " passed, " failed " failed, " + skipped " skipped" (when (pos? pending) (str ", " pending " pending")) "\n")) + (.append sb (str "# Scenarios: " scenarios-passed " passed, " scenarios-failed " failed\n\n")) + (.append sb "* Results\n") + (doseq [file all-files] + (let [{:keys [state fails]} (get status file)] + (case state + :pass (.append sb (str "- [X] " file "\n")) + :skip (.append sb (str "- [-] " file " (SKIPPED: no matching scenario for query)\n")) + :pending (.append sb (str "- [ ] " file " :PENDING:\n")) + :fail (do (.append sb (str "- [ ] " file "\n")) + (doseq [f fails] + (.append sb (str " - Scenario \"" (:scenario f) "\": " + (str/upper-case (name (:type f))) + " at step [" (:step f) "] — " (clean-reason (:reason f)) "\n"))))))) + (.toString sb))) + +(defn write! + "Render + persist the org report and raw EDN. `:summary? true` (the final write) adds + `:summary` to the EDN — written last so the incremental writes never clobber it." + [{:keys [org edn elapsed all-files status executables] :as ctx} & {:keys [summary?]}] + (io/make-parents org) + (spit org (render-org ctx)) + (spit edn (pr-str (cond-> {:elapsed-seconds elapsed :executables executables} + summary? (assoc :summary (counts all-files status executables)))))) diff --git a/components/cucumber/src/cucumber/runner.clj b/components/cucumber/src/cucumber/runner.clj index 45dfe7f84..b94c10e35 100644 --- a/components/cucumber/src/cucumber/runner.clj +++ b/components/cucumber/src/cucumber/runner.clj @@ -5,7 +5,9 @@ [tegere.loader :refer [load-feature-files]] [tegere.steps :refer [registry]] [tegere.runner :refer [run]] - [cucumber.webdriver :as w])) + [tegere.query :as query] + [cucumber.webdriver :as w] + )) ;; Debug @@ -32,8 +34,19 @@ (defn run-cucumber-tests - "Runs cucumber tests " - [{:keys [features steps url debug?] :as opts}] + "Runs cucumber tests. + + Options: + :features - Path to feature files directory + :steps - Path to step definitions directory + :url - URL to run tests against + :debug? - Keep browser open after tests (default: false) + :headless? - Run browser in headless mode (default: false) + :query-string - Filter tests by query + :stop - Stop on first failure + :browser - Browser type (default: :chrome) + :browser-path - Path to browser executable" + [{:keys [features steps url debug? headless? query-string stop] :as opts}] (when steps (load-steps! (io/file steps))) @@ -42,7 +55,9 @@ (println [:WEBDRIVER ]driver) (let [results (run (load-feature-files (io/file features)) @registry - {} + (cond-> {} + query-string (assoc ::query/query-tree query-string) + stop (assoc :tegere.runner/stop stop)) {:initial-ctx {:driver driver :url url}})] ;; Do something with output @@ -50,7 +65,7 @@ ;; Quit Driver (when-not debug? (w/quit driver)) - results))) + (:tegere.runner/outcome-summary-report results)))) (comment @@ -74,6 +89,20 @@ :browser-path "/usr/bin/google-chrome" :url "http://localhost:8081/worksheets"}) + ;; Mac - Headless Mode + (run-cucumber-tests {:headless? true + :features "./../../features" + :browser :chrome + :url "http://localhost:8081/worksheets"}) + + ;; Linux - Headless Mode + (run-cucumber-tests {:headless? true + :features "./../../features" + :steps "./../../steps" + :browser :chrome + :browser-path "/usr/bin/google-chrome" + :url "http://localhost:8081/worksheets"}) + (def run-test-10-times (let [results (doall (map (fn [_] (run-cucumber-tests {:debug? true @@ -84,9 +113,9 @@ :url "http://localhost:8081/worksheets"})) (range 10))) failed (apply + (map #(get-in % [:tegere.runner/outcome-summary :tegere.runner/features-failed]) - results)) + results)) passed (apply + (map #(get-in % [:tegere.runner/outcome-summary :tegere.runner/features-passed]) - results))] + results))] (prn "passed: " passed) (prn "failed: " failed))) diff --git a/components/cucumber/src/cucumber/webdriver.clj b/components/cucumber/src/cucumber/webdriver.clj index 474d46b94..f921937a8 100644 --- a/components/cucumber/src/cucumber/webdriver.clj +++ b/components/cucumber/src/cucumber/webdriver.clj @@ -1,12 +1,12 @@ (ns cucumber.webdriver (:require [cucumber.remote :as remote]) - (:import [org.openqa.selenium By WebDriver] - [org.openqa.selenium.safari SafariDriver] + (:import [java.time Duration] + [org.openqa.selenium By WebDriver] + [org.openqa.selenium JavascriptExecutor] [org.openqa.selenium.chrome ChromeDriver ChromeOptions] [org.openqa.selenium.firefox FirefoxDriver] - [org.openqa.selenium JavascriptExecutor] - [org.openqa.selenium.support.ui WebDriverWait ExpectedConditions] - [java.time Duration])) + [org.openqa.selenium.safari SafariDriver] + [org.openqa.selenium.support.ui WebDriverWait ExpectedConditions])) (defn goto "Navigate to url." @@ -23,6 +23,12 @@ [^By parent ^By child] (ExpectedConditions/presenceOfNestedElementsLocatedBy parent child)) +(defn staleness-of + "Expect that `el` is no longer attached to the DOM — i.e. the page re-rendered. Lets a + caller wait for a click to take effect (old element goes stale) instead of a fixed sleep." + [^org.openqa.selenium.WebElement el] + (ExpectedConditions/stalenessOf el)) + (defn quit "Quit the webdriver." [^WebDriver driver] @@ -43,6 +49,18 @@ [^JavascriptExecutor driver script & args] (.executeScript driver script (into-array args))) +(defn add-init-script! + "Register JS to run on every new document BEFORE the page's own scripts, via CDP + (Page.addScriptToEvaluateOnNewDocument). Lets us seed localStorage on the app's + origin without a throwaway load-then-reload. Chrome only: returns true when + registered, false when the driver doesn't support CDP (caller should fall back)." + [driver source] + (when (instance? ChromeDriver driver) + (.executeCdpCommand ^ChromeDriver driver + "Page.addScriptToEvaluateOnNewDocument" + {"source" source}) + true)) + (defn ready? "Returns true if the document is ready." [^JavascriptExecutor driver] @@ -66,20 +84,37 @@ [^WebDriver d] (.. d (manage) (window) (maximize))) +(defn set-window-size + "Set an explicit window size. Headless `maximize` has no real screen to size to, so + the viewport can end up short and fixed-bottom elements (page__footer) overlap + content — set a deterministic size instead." + [^WebDriver d width height] + (.. d (manage) (window) (setSize (org.openqa.selenium.Dimension. (int width) (int height))))) + (defn chrome-driver "Instatiate a Chrome WebDriver." - [{:keys [browser-path]}] + [{:keys [browser-path headless?]}] (let [options (ChromeOptions.)] (when browser-path (.setBinary options browser-path)) (.addArguments options (into-array - ["start-maximized" ; // open Browser in maximized mode - "disable-infobars" ; // disabling infobars - "--disable-extensions" ; // disabling extensions - "--disable-gpu" ; // applicable to windows os only - "--disable-dev-shm-usage" ; // overcome limited resource problems - "--no-sandbox" ; // Bypass OS security model - "--remote-debugging-port=9222"])) - (System/setProperty "webdriver.chrome.driver" "/usr/local/bin/chromedriver") + (cond-> ["disable-infobars" ; // disabling infobars + "--disable-extensions" ; // disabling extensions + "--disable-gpu" ; // applicable to windows os only + "--disable-dev-shm-usage" ; // overcome limited resource problems + "--no-sandbox" ; // Bypass OS security model + "--remote-debugging-port=0"] ; // auto-assign: a fixed port collides when sharding runs N parallel Chromes + headless? (concat ["--headless=new" ; // run in headless mode + "--start-maximized" + "--window-size=2560,1080"]) ; // set window size for headless + (not headless?) (conj "--start-maximized")))) ; // maximize when not headless + ;; Pin the driver only when we actually have one: $CHROMEDRIVER_PATH, else a local + ;; /usr/local/bin/chromedriver IF it exists. Otherwise leave the property unset so Selenium + ;; Manager (bundled in Selenium 4.11+) downloads a chromedriver matching the browser at + ;; --browser-path — avoids the CI Chrome/chromedriver version drift (setup-chrome can hand + ;; out a driver a major version ahead of the installed Chrome). + (when-let [drv (or (System/getenv "CHROMEDRIVER_PATH") + (let [f "/usr/local/bin/chromedriver"] (when (.exists (java.io.File. f)) f)))] + (System/setProperty "webdriver.chrome.driver" drv)) (ChromeDriver. options))) (defn firefox-driver diff --git a/components/cucumber_test_generator/deps.edn b/components/cucumber_test_generator/deps.edn new file mode 100644 index 000000000..d6243df08 --- /dev/null +++ b/components/cucumber_test_generator/deps.edn @@ -0,0 +1,4 @@ +{:paths ["src" "resources"] + :deps {org.clojure/math.combinatorics {:mvn/version "0.3.0"} + com.datomic/peer {:mvn/version "1.0.7075"}} + :aliases {:test {:extra-paths ["test"]}}} diff --git a/components/cucumber_test_generator/src/cucumber_test_generator/conditional_outputs.clj b/components/cucumber_test_generator/src/cucumber_test_generator/conditional_outputs.clj new file mode 100644 index 000000000..994c98a87 --- /dev/null +++ b/components/cucumber_test_generator/src/cucumber_test_generator/conditional_outputs.clj @@ -0,0 +1,544 @@ +(ns cucumber-test-generator.conditional-outputs + "Phase-1 extraction for conditionally-set output test cases. + + Finds every output group-variable that BehavePlus auto-enables via :select + actions, resolves the full transitive chain of required inputs (including + prerequisites that make each input visible), and writes + development/conditional_outputs_matrix.edn for Phase-2 feature generation. + + Data shape of each entry (keyed by output gv-uuid): + {:output-name 'Heading Rate of Spread' + :module 'Surface' + :required-modules ['surface'] + :required-inputs [{:submodule 'Fuel Moisture' + :group 'Moisture Input Mode' + :value 'Individual Size Class'} + {:submodule 'Fuel Moisture' + :group 'By Size Class' + :subgroup '1-h Fuel Moisture' + :value '1'}]}" + (:require [clojure.edn :as edn] + [clojure.pprint :refer [pprint]] + [clojure.string :as str] + [cucumber-test-generator.core :as core] + [datomic.api :as d])) + +;;; ============================================================================ +;;; Query +;;; ============================================================================ + +(defn- find-conditionally-set-output-gvs + "Return eids of output group-variables that are conditionally set + AND have at least one :select action. Excludes GVs flagged + :group-variable/hide-result? true — those are hidden from the results page, + so a 'displayed in results' scenario would never pass for them." + [db] + (d/q '[:find [?gv ...] + :where + [?gv :group-variable/conditionally-set? true] + [?gv :group-variable/actions ?action] + [?action :action/type :select] + (not [?gv :group-variable/hide-result? true])] + db)) + +;;; ============================================================================ +;;; Pull helpers +;;; ============================================================================ + +(def ^:private actions-pull-spec + "Pull pattern for a GV's actions with their raw conditionals." + '[{:group-variable/actions + [:action/type + :action/conditionals-operator + {:action/conditionals + [:conditional/type + :conditional/operator + :conditional/values + :conditional/group-variable-uuid + :conditional/sub-conditional-operator + {:conditional/sub-conditionals + [:conditional/type + :conditional/operator + :conditional/values + :conditional/group-variable-uuid]}]}]}]) + +(defn- pull-actions-of-type + "Pull the actions of a given :action/type (e.g. :select, :disable) with their raw + conditionals for a GV eid." + [db gv-eid action-type] + (->> (d/pull db actions-pull-spec gv-eid) + :group-variable/actions + (filter #(= (:action/type %) action-type)))) + +(defn- pull-select-actions + "Pull the :select actions with their raw conditionals for a GV eid." + [db gv-eid] + (pull-actions-of-type db gv-eid :select)) + +(defn- pull-disable-actions + "Pull the :disable actions with their raw conditionals for a GV eid." + [db gv-eid] + (pull-actions-of-type db gv-eid :disable)) + +(defn- pull-ancestor-conditionals + "Return the raw gating-conditional entities from the parent group hierarchy + (up to 5 levels) and owning submodule for a given input gv-uuid." + [db gv-uuid] + (let [gv (d/pull db + '[{:group/_group-variables + [:db/id + {:group/conditionals + [:conditional/type + :conditional/operator + :conditional/values + :conditional/group-variable-uuid + {:conditional/sub-conditionals + [:conditional/type + :conditional/operator + :conditional/values + :conditional/group-variable-uuid]}]} + {:group/_children + [:db/id + {:group/conditionals + [:conditional/type + :conditional/operator + :conditional/values + :conditional/group-variable-uuid]} + {:group/_children + [:db/id + {:group/conditionals + [:conditional/type + :conditional/operator + :conditional/values + :conditional/group-variable-uuid]}]}]} + {:submodule/_groups + [{:submodule/conditionals + [:conditional/type + :conditional/operator + :conditional/values + :conditional/group-variable-uuid]}]}]}] + [:bp/uuid gv-uuid])] + (letfn [(walk [g depth] + (when (and g (pos? depth)) + (concat (:group/conditionals g) + (when-let [pg (:group/_children g)] + (walk pg (dec depth))) + (:submodule/conditionals (:submodule/_groups g)))))] + (walk (:group/_group-variables gv) 5)))) + +;;; ============================================================================ +;;; Requirement extraction +;;; ============================================================================ + +(defn- path->components + "Strip module (first) and io keyword from a path vector, returning display + :name strings of the remaining elements (submodule, groups...)." + [path] + (when (seq path) + (mapv :name (remove keyword? (rest path))))) + +(defn- pick-first-value + "Return the first satisfying value for :equal/:in operators, nil for :not-equal." + [processed] + (case (:operator processed) + :equal (first (:values processed)) + :in (first (:values processed)) + nil)) + +(defn- processed->input-req + "Convert a processed conditional into an input requirement map, or nil. + For :in conditionals with ≥2 values the full value list is preserved + under :values so downstream generators can emit Scenario Outline / Examples + tables. :value always holds the first (representative) value so that + conditional-evaluation and baseline-merge logic is unaffected." + [processed raw-cond] + (when (and (= (:type processed) :group-variable) + (= (get-in processed [:group-variable :io]) :input) + (not (get-in processed [:group-variable :group-variable/conditionally-set?])) + ;; Research group-variables must never be set in a generated test. + (not (get-in processed [:group-variable :group-variable/research?]))) + (when-let [value (pick-first-value processed)] + (cond-> {:gv-uuid (:conditional/group-variable-uuid raw-cond) + :value value + :gv-info (:group-variable processed)} + (and (= (:operator processed) :in) + (>= (count (:values processed)) 2)) + (assoc :values (:values processed)))))) + +(defn- processed->output-req + "Convert a processed conditional referencing a selected output (:values=['true']) + into an output-selection row map, or nil. + These become 'When these output paths are selected' rows in the scenario." + [processed] + (when (and (= (:type processed) :group-variable) + (= (get-in processed [:group-variable :io]) :output) + (= (:values processed) ["true"]) + ;; Research group-variables must never be selected in a generated test. + (not (get-in processed [:group-variable :group-variable/research?]))) + (let [gv (:group-variable processed) + comps (path->components (:path gv)) + gv-name (:group-variable/translated-name gv)] + (when (and (seq comps) gv-name) + (cond-> {:submodule (first comps) + :value gv-name + :module (:name (first (:path gv))) + :submodule/order (:submodule/order gv) + :group/order (:group/order gv) + :group-variable/order (:group-variable/order gv)} + (>= (count comps) 2) (assoc :group (second comps)) + (:group/single-select? gv) (assoc :group/single-select? true)))))) + +(defn- action->requirements + "Process a raw :select action map into + {:modules [...] :input-reqs [...] :output-reqs [...] :output-operator <:and|:or|nil>}. + :output-operator carries the action's conditionals operator so downstream generators + can tell an :or gate (any one output reveals the target) from an :and gate (all required)." + [db action] + (let [raw-conds (:action/conditionals action)] + {:modules (->> raw-conds + (keep #(core/process-conditional db %)) + (filter #(= (:type %) :module)) + (mapcat :values)) + :input-reqs (->> raw-conds + (keep (fn [raw] + (when-let [processed (core/process-conditional db raw)] + (processed->input-req processed raw)))) + (remove #(nil? (:value %)))) + :output-reqs (->> raw-conds + (keep (fn [raw] + (when-let [processed (core/process-conditional db raw)] + (processed->output-req processed)))) + (remove nil?)) + ;; uuids of the output-true conditionals — i.e. the OUTPUTS this action selects. + ;; Lets build-test-case look up those outputs' own :disable actions. + :output-uuids (->> raw-conds + (keep (fn [raw] + (when-let [p (core/process-conditional db raw)] + (when (and (= (get-in p [:group-variable :io]) :output) + (= (:values p) ["true"])) + (:conditional/group-variable-uuid raw))))) + distinct) + :output-operator (:action/conditionals-operator action)})) + +(defn- gating-cond->req + "Convert a raw gating-conditional entity to an input requirement map, or nil." + [db raw-cond] + (when-let [processed (core/process-conditional db raw-cond)] + (processed->input-req processed raw-cond))) + +;;; ============================================================================ +;;; Transitive closure (fixpoint) +;;; ============================================================================ + +(defn- resolve-transitive-closure + "Walk the ancestor gating conditionals of each required input and add any new + prerequisites, repeating until no new inputs are found (fixpoint). + Prerequisites are prepended so ordering is parent→child." + [db initial-reqs] + (loop [reqs (vec initial-reqs) + seen-uuids (into #{} (keep :gv-uuid initial-reqs))] + (let [new-reqs (->> reqs + (mapcat (fn [{:keys [gv-uuid]}] + (when gv-uuid + (->> (pull-ancestor-conditionals db gv-uuid) + (keep #(gating-cond->req db %)))))) + (remove #(contains? seen-uuids (:gv-uuid %))) + (reduce (fn [acc req] + (if (some #(= (:gv-uuid %) (:gv-uuid req)) acc) + acc + (conj acc req))) + []))] + (if (empty? new-reqs) + reqs + ;; Prepend prerequisites so they appear before the inputs that depend on them + (recur (into (vec new-reqs) reqs) + (into seen-uuids (keep :gv-uuid new-reqs))))))) + +;;; ============================================================================ +;;; Row conversion +;;; ============================================================================ + +(defn- req->row + "Convert a requirement map to a row with submodule/group/subgroup/value plus + VMS order fields (:module :submodule/order :group/order :group-variable/order), or nil. + When the requirement carries :values (a full :in list) that field is forwarded + onto the row so the feature-file generator can emit an Examples table." + [{:keys [value values gv-info]}] + (when-let [comps (seq (path->components (:path gv-info)))] + (cond-> {:submodule (first comps) + :value value + :module (:name (first (:path gv-info))) + :submodule/order (:submodule/order gv-info) + :group/order (:group/order gv-info) + :group-variable/order (:group-variable/order gv-info)} + (>= (count comps) 2) (assoc :group (second comps)) + (>= (count comps) 3) (assoc :subgroup (nth comps 2)) + (seq values) (assoc :values values)))) + +;;; ============================================================================ +;;; Input value overrides (conditionally auto-set input values) +;;; ============================================================================ + +(defn- find-input-value-setter-eids + "Return eids of group-variables that have a :select action carrying an + :action/target-value — i.e. the action auto-sets the GV's value when its + conditionals hold (e.g. 'Wind Measured at' -> 20-Foot for spot outputs). + Caller filters to :input GVs." + [db] + (d/q '[:find [?gv ...] + :where + [?gv :group-variable/actions ?a] + [?a :action/type :select] + [?a :action/target-value _]] + db)) + +(defn- pull-select-target-actions + "Pull a GV's :select actions that carry an :action/target-value." + [db gv-eid] + (->> (d/pull db + '[{:group-variable/actions + [:action/type + :action/target-value + :action/conditionals-operator + {:action/conditionals + [:conditional/type + :conditional/operator + :conditional/values + :conditional/group-variable-uuid]}]}] + gv-eid) + :group-variable/actions + (filter #(and (= (:action/type %) :select) (:action/target-value %))))) + +(defn- action-fires? + "True when a value-setting :select action's conditionals are satisfied by the + test's active output names and module-name set (mirrors the app: :module is + set-equality/intersection; an output conditional passes when its translated + name is among the selected outputs)." + [db action active-output-names module-name-set] + (let [conds (:action/conditionals action) + op (:action/conditionals-operator action) + res (map (fn [c] + (case (:conditional/type c) + :module + (case (:conditional/operator c) + :equal (= (set (:conditional/values c)) module-name-set) + :in (boolean (some module-name-set (:conditional/values c))) + false) + :group-variable + (boolean + (when-let [p (core/process-conditional db c)] + (and (= (get-in p [:group-variable :io]) :output) + (= (:conditional/values c) ["true"]) + (contains? active-output-names + (get-in p [:group-variable :group-variable/translated-name]))))) + false)) + conds)] + (if (= op :or) (boolean (some true? res)) (every? true? res)))) + +(defn- compute-input-value-overrides + "For each candidate input value-setter GV, if one of its value-setting :select + actions fires for the test's active outputs, emit an override row + {:submodule :group [:subgroup] :value} with the action's target-value resolved + to a display value via the GV's list options. Returns a deduped vec." + [db setter-eids active-output-names module-name-set] + (->> setter-eids + (keep (fn [eid] + (when-let [uuid (:bp/uuid (d/pull db '[:bp/uuid] eid))] + (let [info (core/resolve-group-variable-uuid db uuid)] + (when (= (:io info) :input) + (when-let [act (first (filter #(action-fires? db % active-output-names module-name-set) + (pull-select-target-actions db eid)))] + (let [comps (path->components (:path info)) + val (get (core/get-variable-list-options db uuid) + (:action/target-value act))] + (when (and (>= (count comps) 2) val) + (cond-> {:submodule (first comps) + :group (second comps) + :value val} + (>= (count comps) 3) (assoc :subgroup (nth comps 2))))))))))) + distinct + vec)) + +;;; ============================================================================ +;;; Default (auto-selected) outputs — seed-only +;;; ============================================================================ + +(defn- find-output-select-gv-eids + "Return eids of group-variables that have at least one :select action. These + are candidates for a worksheet's auto-default outputs (the app auto-selects an + output when a :select action's conditionals pass on a fresh worksheet — see + process-output-actions->fx). Caller filters to :output GVs." + [db] + (d/q '[:find [?gv ...] + :where + [?gv :group-variable/actions ?a] + [?a :action/type :select]] + db)) + +(defn- output-default-candidates + "Resolve every :output GV that has a :select action into a candidate row + {:module :submodule :group [:subgroup] :value + :actions }. Computed once per generation run and filtered + per module-combo by default-outputs-for-combo." + [db] + (->> (find-output-select-gv-eids db) + (keep (fn [eid] + (when-let [uuid (:bp/uuid (d/pull db '[:bp/uuid] eid))] + (let [info (core/resolve-group-variable-uuid db uuid)] + (when (and info (= (:io info) :output)) + (when-let [comps (seq (path->components (:path info)))] + (cond-> {:module (:name (first (:path info))) + :submodule (first comps) + :value (:group-variable/translated-name info) + :actions (pull-select-actions db eid)} + (>= (count comps) 2) (assoc :group (second comps)) + (>= (count comps) 3) (assoc :subgroup (nth comps 2))))))))) + vec)) + +(defn- default-outputs-for-combo + "Given the effective worksheet module-name set (lower-cased strings, e.g. + #{\"surface\" \"contain\"}), return the outputs the app auto-selects on a fresh + worksheet: candidate :output GVs whose module is in the combo and one of whose + :select actions fires with NO outputs yet selected (so only :module-type + conditionals can pass — mirrors process-output-actions->fx on worksheet start). + Rows are {:module :submodule :group [:subgroup] :value}; :value is the + translated output name. Seed-only — never rendered as a selected output." + [db candidates module-name-set] + (->> candidates + (filter (fn [{:keys [module actions]}] + (and (contains? module-name-set (some-> module str/lower-case)) + (some #(action-fires? db % #{} module-name-set) actions)))) + (map #(select-keys % [:module :submodule :group :subgroup :value])) + distinct + vec)) + +;;; ============================================================================ +;;; Per-GV test-case builder +;;; ============================================================================ + +(defn- build-test-case + "Return a test-case map for an output gv-eid, or nil if the GV is research, + not an output, or its action conditionals cannot be resolved. + setter-eids = candidate input value-setter GV eids (from + find-input-value-setter-eids), used to derive :input-value-overrides. + output-candidates = auto-default output candidates (from + output-default-candidates), used to derive :default-outputs." + [db gv-eid setter-eids output-candidates] + (when-let [gv-uuid (:bp/uuid (d/pull db '[:bp/uuid] gv-eid))] + (let [gv-info (core/resolve-group-variable-uuid db gv-uuid)] + (when (and gv-info + (= (:io gv-info) :output) + (not (:group-variable/research? gv-info))) + (let [actions (pull-select-actions db gv-eid)] + (when (seq actions) + ;; Collect requirements from all :select actions, merging across actions + (let [all-action-reqs (map #(action->requirements db %) actions) + modules (vec (distinct (mapcat :modules all-action-reqs))) + initial-reqs (vec (distinct (mapcat :input-reqs all-action-reqs))) + output-reqs (vec (distinct (mapcat :output-reqs all-action-reqs))) + ;; Operator of the action that actually contributed the output gate + ;; (:or = any one output reveals the target; :and = all required). + out-operator (->> all-action-reqs + (filter #(seq (:output-reqs %))) + first + :output-operator)] + ;; Proceed if there are any requirements at all (input OR output) + (when (or (seq initial-reqs) (seq output-reqs) (seq modules)) + (let [all-reqs (if (seq initial-reqs) + (resolve-transitive-closure db initial-reqs) + []) + rows (vec (keep req->row all-reqs)) + module-kw (or (first (map keyword modules)) + (some-> gv-info :path first :name str/lower-case keyword)) + ;; Outputs that, when selected, DISABLE one of the outputs this test + ;; must click (its gating outputs — e.g. "Burning Pile" — plus the + ;; target). Each such output GV carries its own :disable action whose + ;; conditionals name the outputs that disable it. Downstream + ;; (merge-with-baselines) drops any baseline output in this set so the + ;; prerequisite baseline never disables an output the test selects. + selected-out-uuids (vec (distinct (mapcat :output-uuids all-action-reqs))) + disabling-outputs (->> (cons gv-uuid selected-out-uuids) + (mapcat (fn [u] + (->> (pull-disable-actions db [:bp/uuid u]) + (mapcat #(:output-reqs (action->requirements db %)))))) + (map #(select-keys % [:module :submodule :group :value])) + distinct + vec) + ;; Some inputs are conditionally auto-set by the app via a + ;; value-setting :select action (e.g. "Wind Measured at" -> 20-Foot + ;; for spot outputs). Derive those overrides from the test's active + ;; outputs so merge-with-baselines applies the correct value instead + ;; of the (surface-fire) baseline default. + output-name (or (:group-variable/translated-name gv-info) + "Unknown Output") + active-output-names (into #{} (conj (mapv :value output-reqs) output-name)) + module-name-set (into #{} (or (seq modules) ["surface"])) + input-overrides (compute-input-value-overrides + db setter-eids active-output-names module-name-set) + ;; Effective worksheet module set: Crown/Mortality/Contain always + ;; promote to include Surface (mirrors effective-module-combo). Used to + ;; derive the outputs the app auto-defaults on a fresh worksheet. + effective-mns (let [base (into #{} (map str/lower-case) + (or (seq modules) [(name module-kw)]))] + (if (some #{"crown" "mortality" "contain"} base) + (conj base "surface") + base)) + ;; Auto-defaulted outputs (e.g. Rate of Spread / Flame Length for a + ;; Surface & Contain worksheet). Seed-only: they un-gate baseline inputs + ;; in merge-with-baselines but are never rendered as selected outputs. + default-outputs (default-outputs-for-combo db output-candidates effective-mns)] + {:gv-uuid gv-uuid + :output-name output-name + :module (some-> module-kw name str/capitalize) + :required-modules modules + :required-outputs output-reqs + :required-outputs-operator out-operator + :required-inputs rows + :disabling-outputs disabling-outputs + :input-value-overrides input-overrides + :default-outputs default-outputs}))))))))) + +;;; ============================================================================ +;;; Main entry point +;;; ============================================================================ + +(defn generate-conditional-outputs-matrix! + "Generate the :results-visibility section of the combined test_matrix_data.edn. + + Finds every output group-variable with :group-variable/conditionally-set? true + and at least one :select action, resolves the full transitive chain of required + inputs, and merges the :results-visibility section into the combined EDN file. + + Arguments: + - db — Datomic database value (from d/db) + - edn-path — (optional) combined matrix path; default 'development/test_matrix_data.edn' + + Returns: + {:edn-path '...' :entries-count N}" + ([db] + (generate-conditional-outputs-matrix! db "development/test_matrix_data.edn")) + ([db edn-path] + (let [gv-eids (find-conditionally-set-output-gvs db) + _ (println (format "Found %d conditionally-set output GVs" (count gv-eids))) + setter-eids (find-input-value-setter-eids db) + candidates (output-default-candidates db) + test-cases (->> gv-eids + (keep (fn [eid] + (try (build-test-case db eid setter-eids candidates) + (catch Exception e + (println (format " ⚠ eid %d: %s" eid (.getMessage e))) + nil)))) + (remove nil?) + (into {} (map (juxt :gv-uuid #(dissoc % :gv-uuid))))) + ;; Merge :results-visibility into existing combined file (preserves :input-visibility). + ;; select-keys strips any legacy bare path-vector keys that may have accumulated + ;; from the old flat format, keeping only the two canonical keyword sections. + existing (when (.exists (java.io.File. edn-path)) + (try (edn/read-string (slurp edn-path)) + (catch Exception _ nil))) + combined (assoc (select-keys (or existing {}) [:input-visibility :results-visibility]) + :results-visibility test-cases)] + (spit edn-path (with-out-str (pprint combined))) + (println (format "✓ %d :results-visibility test cases → %s" (count test-cases) edn-path)) + {:edn-path edn-path + :entries-count (count test-cases)}))) diff --git a/components/cucumber_test_generator/src/cucumber_test_generator/core.clj b/components/cucumber_test_generator/src/cucumber_test_generator/core.clj new file mode 100644 index 000000000..b0e5c3e93 --- /dev/null +++ b/components/cucumber_test_generator/src/cucumber_test_generator/core.clj @@ -0,0 +1,699 @@ +(ns cucumber-test-generator.core + "Core implementation for the cucumber_test_generator component. + + This component generates Cucumber feature files from a Datomic database (behave-cms), + automating the creation of comprehensive conditional visibility testing scenarios + for the BehavePlus application. + + The component operates in two phases: + 1. Data Extraction: Query Datomic database and generate test_matrix_data.edn + 2. Feature Generation: Read EDN and generate Cucumber feature files + + Implementation follows patterns from: + - /home/kcheung/work/code/behave-polylith/development/test_matrix_generator.clj + - /home/kcheung/work/code/behave-polylith/development/cucumber_test_generator.clj" + (:require [clojure.edn :as edn] + [clojure.pprint :refer [pprint]] + [datomic.api :as d])) + +;; =========================================================================================================== +;; Translation Resolution (Task 2.2) +;; =========================================================================================================== + +(defn get-translation + "Get the translation value for a translation-key from the database. + + Arguments: + - db: Datomic database value + - translation-key: Translation key string to look up + + Returns: + Translated text string or nil if not found + + Implementation pattern copied from test_matrix_generator.clj lines 31-42" + [db translation-key] + (when translation-key + (when-let [trans (d/q '[:find ?translation . + :in $ ?key + :where + [?t :translation/key ?key] + [?t :translation/translation ?translation]] + db + translation-key)] + trans))) + +;; =========================================================================================================== +;; Database Query Functions (Task 2.3) +;; =========================================================================================================== + +(defn find-all-groups-with-conditionals + "Query all groups that have :group/conditionals attribute. + + Arguments: + - db: Datomic database value + + Returns: + Vector of group entity IDs + + Implementation pattern from test_matrix_generator.clj lines 48-54" + [db] + (d/q '[:find [?g ...] + :where + [?g :group/conditionals]] + db)) + +(defn find-all-submodules-with-conditionals + "Query all submodules that have :submodule/conditionals attribute. + + Arguments: + - db: Datomic database value + + Returns: + Vector of submodule entity IDs + + Implementation pattern from test_matrix_generator.clj lines 56-62" + [db] + (d/q '[:find [?s ...] + :where + [?s :submodule/conditionals]] + db)) + +;; =========================================================================================================== +;; Pull Functions for Detailed Entity Data (Task 2.4) +;; =========================================================================================================== + +(defn pull-group-details + "Pull detailed information about a group including parent relationships. + + Arguments: + - db: Datomic database value + - group-eid: Group entity ID + + Returns: + Map with group attributes and parent relationships + + Implementation pattern from test_matrix_generator.clj lines 64-76" + [db group-eid] + (d/pull db + '[* + {:group/_children [:group/name + :group/translation-key]} + {:submodule/_groups [:submodule/name + :submodule/translation-key + :submodule/io + :submodule/order + {:module/_submodules [:module/name]}]}] + group-eid)) + +(defn pull-submodule-details + "Pull detailed information about a submodule including parent relationships. + + Arguments: + - db: Datomic database value + - submodule-eid: Submodule entity ID + + Returns: + Map with submodule attributes and module relationship + + Implementation pattern from test_matrix_generator.clj lines 78-84" + [db submodule-eid] + (d/pull db + '[* + {:module/_submodules [:module/name :module/translation-key]}] + submodule-eid)) + +;; =========================================================================================================== +;; Group Hierarchy Collection (Task 2.5) +;; =========================================================================================================== + +(defn collect-group-hierarchy + "Recursively collect all parent groups from a group up to the submodule. + Returns a vector of {:name :key} tuples in order from root (closest to submodule) to leaf. + + Using {:name :key} tuples instead of bare strings ensures that two sibling groups + sharing the same translated name (e.g. two groups both named 'Fuel Model') produce + distinct path vectors, because their :group/translation-key values differ. + + Example: For 'Live Woody Fuel Moisture' nested under 'By Size Class', + returns [{:name \"By Size Class\" :key \"…:by_size_class\"} + {:name \"Live Woody Fuel Moisture\" :key \"…:live_woody\"}] + + Uses a simple recursive walk up the :group/_children refs. + + Arguments: + - db: Datomic database value + - group-eid: Group entity ID to start from + + Returns: + Vector of {:name :key} tuples from root to leaf + + Implementation pattern from test_matrix_generator.clj lines 99-117" + [db group-eid] + (let [group (d/pull db '[:db/id + :group/translation-key + {:group/_children [:db/id :group/translation-key]}] + group-eid) + group-el {:name (get-translation db (:group/translation-key group)) + :key (:group/translation-key group)}] + (if-let [parent-group (:group/_children group)] + ;; Has a parent, recur and prepend current element + (conj (collect-group-hierarchy db (:db/id parent-group)) group-el) + ;; No parent - we're at the root + [group-el]))) + +;; =========================================================================================================== +;; Submodule Finder for Nested Groups (Task 2.6) +;; =========================================================================================================== + +(defn find-parent-submodule-for-group + "Traverse up the group hierarchy to find the parent submodule. + + Groups can be nested (subgroups), so we need to walk up through :group/_children + until we find a group that has a :submodule/_groups relationship. + + Arguments: + - group-entity: Group entity map (from d/pull) + + Returns: + Submodule entity map or nil if not found + + Implementation pattern from test_matrix_generator.clj lines 86-97" + [group-entity] + (when group-entity + (if-let [submodule (:submodule/_groups group-entity)] + submodule + ;; No submodule at this level, try the parent group + (when-let [parent-group (:group/_children group-entity)] + (recur parent-group))))) + +;; =========================================================================================================== +;; Group-Variable UUID Resolution (Task 2.7) +;; =========================================================================================================== + +(defn resolve-group-variable-uuid + "Resolve a group-variable UUID to its variable name and parent path. + + Returns nil if the variable has nil :variable/name or :variable/bp6-code (filters invalid entries). + + Arguments: + - db: Datomic database value + - gv-uuid: Group-variable UUID + + Returns: + Map with: + - :group-variable/translated-name - The translated variable name + - :group-variable/research? - Whether this is a research variable + - :io - :input or :output, derived from parent submodule + - :path - FULL path including Module > Submodule > :io > Groups... (up to variable's parent group) + - :submodule/order - The parent submodule's order + - :submodule/research? - Whether submodule is research + - :group/order - The parent group's order + + Returns nil if translation key is missing + + Implementation pattern from test_matrix_generator.clj lines 119-168" + [db gv-uuid] + (let [gv (d/pull db + '[* + {:variable/_group-variables [:variable/name]} + {:group/_group-variables [:db/id + :group/name + :group/translation-key + :group/order + :group/single-select? + {:group/_children 5} + {:submodule/_groups [:submodule/name + :submodule/translation-key + :submodule/io + :submodule/order + :submodule/research? + {:module/_submodules [:module/name + :module/translation-key]}]}]}] + [:bp/uuid gv-uuid])] + (when (seq gv) + (let [parent-group (:group/_group-variables gv) + parent-group-eid (:db/id parent-group) + ;; Collect full hierarchy + group-hierarchy (collect-group-hierarchy db parent-group-eid) + ;; Use helper function to find the submodule by traversing up the group hierarchy + parent-submodule (find-parent-submodule-for-group parent-group) + parent-module (:module/_submodules parent-submodule) + io (:submodule/io parent-submodule) + ;; Build complete path: Module > Submodule > :io > Groups... + ;; Use {:name :key} tuples so siblings with identical display names stay distinct + module-name {:name (get-translation db (:module/translation-key parent-module)) + :key (:module/translation-key parent-module)} + submodule-name {:name (:submodule/name parent-submodule) + :key (:submodule/translation-key parent-submodule)} + base-path (filterv some? (concat [module-name submodule-name] group-hierarchy)) + ;; Insert :io keyword before the last element (the variable's parent group) + full-path (if (> (count base-path) 2) + (vec (concat (take 2 base-path) [io] (drop 2 base-path))) + base-path)] + ;; Resolve display name — prefer :translation-key, fall back to :result-translation-key + ;; (directional output GVs like "Heading Rate of Spread" use the latter). + ;; Keep the metadata whenever the group-variable has a translation-KEY attribute: + ;; :io/:path/values-resolution don't depend on the display name, and dropping the + ;; whole map over a missing display translation degrades conditionals (raw enum ids, + ;; no :group-variable) and silently strips required When-step preconditions. + ;; Fall back to the raw key so translated-name is never nil for downstream consumers. + (let [translated-name (or (get-translation db (:group-variable/translation-key gv)) + (get-translation db (:group-variable/result-translation-key gv)) + (:group-variable/translation-key gv) + (:group-variable/result-translation-key gv))] + (when (or (:group-variable/translation-key gv) + (:group-variable/result-translation-key gv)) + {:group-variable/translated-name translated-name + :group-variable/research? (:group-variable/research? gv) + :group-variable/conditionally-set? (:group-variable/conditionally-set? gv) + :group-variable/order (:group-variable/order gv) + :io io + :path full-path + :submodule/order (:submodule/order parent-submodule) + :submodule/research? (:submodule/research? parent-submodule) + :group/order (:group/order parent-group) + :group/single-select? (:group/single-select? parent-group)})))))) + +;; =========================================================================================================== +;; Enum Value Resolution (Task 2.8) +;; =========================================================================================================== + +(defn get-variable-list-options + "Get list options for a group-variable UUID. + + Returns a map of {value -> translation} for all list options. + Example: {\"1\" \"10-foot wind speed\", \"2\" \"20-foot wind speed\"} + + Arguments: + - db: Datomic database value + - gv-uuid: Group-variable UUID + + Returns: + Map of value to translation, or nil if the variable doesn't have a list (continuous variables) + + Implementation pattern from test_matrix_generator.clj lines 170-194" + [db gv-uuid] + (let [gv (d/pull db + '[{:variable/_group-variables + [{:variable/list + [{:list/options + [:list-option/value + :list-option/translation-key + :list-option/order]}]}]}] + [:bp/uuid gv-uuid]) + ;; :variable/_group-variables returns a vector, get first element + variable (first (:variable/_group-variables gv))] + (when-let [list-options (get-in variable [:variable/list :list/options])] + (into {} + (map (fn [opt] + [(:list-option/value opt) + (or (get-translation db (:list-option/translation-key opt)) + (:list-option/value opt))]) ; fallback to value if translation fails + list-options))))) + +(defn resolve-enum-values + "Resolve enum values to their human-readable translations. + + Arguments: + - db: Datomic database value + - gv-uuid: Group-variable UUID + - values: Vector of enum values like [\"1\" \"2\"] + + Returns: + Vector of resolved translations, or nil if any value cannot be resolved. + + Example: + (resolve-enum-values db gv-uuid [\"1\" \"2\"]) + => [\"10-foot wind speed\" \"20-foot wind speed\"] + + (resolve-enum-values db gv-uuid [\"99\"]) ; value doesn't exist + => nil + + Implementation pattern from test_matrix_generator.clj lines 196-217" + [db gv-uuid values] + (when-let [value-map (get-variable-list-options db gv-uuid)] + (let [resolved (mapv #(get value-map %) values)] + ;; Only return entries with proper translation + (vec (remove nil? resolved))))) + +;; =========================================================================================================== +;; Conditional Processing (Task 3.2 - 3.3) +;; =========================================================================================================== + +(defn process-conditional + "Process a single conditional and extract relevant information. + + For input-based conditionals (when :io is :input), resolves enum values + to their human-readable translations. Returns nil if resolution fails. + + Arguments: + - db: Datomic database value + - conditional: Conditional entity map + + Returns: + Map with :type, :operator, :values, :group-variable (if applicable), + :sub-conditionals and :sub-conditional-operator (if nested conditionals exist). + Returns nil if resolution fails. + + Implementation pattern from test_matrix_generator.clj lines 223-257" + [db conditional] + (let [cond-type (:conditional/type conditional) + operator (:conditional/operator conditional) + values (:conditional/values conditional) + gv-uuid (:conditional/group-variable-uuid conditional) + sub-conditionals (:conditional/sub-conditionals conditional) + sub-operator (:conditional/sub-conditional-operator conditional) + + ;; Resolve group-variable info + gv-info (when gv-uuid (resolve-group-variable-uuid db gv-uuid)) + + ;; For input conditionals, try to resolve enum values + resolved-values (if (and gv-info (= (:io gv-info) :input)) + (resolve-enum-values db gv-uuid values) + (vec values))] + + ;; Drop a group-variable conditional whose referenced GV couldn't be resolved + ;; (gv-uuid present but gv-info nil). Emitting it anyway yields a degraded + ;; conditional (raw enum ids, no :group-variable) that silently strips the + ;; scenario's When-step precondition — a false-green test. Surfacing the drop + ;; makes the underlying data problem visible instead. + (when (and (or (nil? gv-uuid) gv-info) + ;; Return nil if this is an input conditional and values couldn't be resolved + (or (not= (:io gv-info) :input) ; not an input conditional, proceed + resolved-values)) ; input conditional with resolved values + + (cond-> {:type cond-type + :operator operator + :values (if (set? resolved-values) (vec resolved-values) resolved-values)} + + gv-info + (assoc :group-variable gv-info) + + sub-conditionals + (assoc :sub-conditionals (vec (keep #(process-conditional db %) sub-conditionals)) ; filter nils + :sub-conditional-operator sub-operator))))) + +(defn process-group-conditionals + "Process all conditionals for a group. + Filters out conditionals that couldn't be resolved (nil values). + Returns nil if no valid conditionals remain. + + Arguments: + - db: Datomic database value + - group: Group entity map with :group/conditionals + + Returns: + Map with :conditionals and :conditionals-operator, or nil if no valid conditionals + + Implementation pattern from test_matrix_generator.clj lines 259-270" + [db group] + (let [conditionals (:group/conditionals group) + operator (:group/conditionals-operator group) + ;; Process and filter out failed resolutions (nils) + processed (vec (keep #(process-conditional db %) conditionals))] + (when (seq processed) ; only return if at least one conditional succeeded + {:conditionals processed + :conditionals-operator operator}))) + +(defn process-submodule-conditionals + "Process all conditionals for a submodule. + Filters out conditionals that couldn't be resolved (nil values). + Returns nil if no valid conditionals remain. + + Arguments: + - db: Datomic database value + - submodule: Submodule entity map with :submodule/conditionals + + Returns: + Map with :conditionals and :conditionals-operator, or nil if no valid conditionals + + Implementation pattern from test_matrix_generator.clj lines 272-283" + [db submodule] + (let [conditionals (:submodule/conditionals submodule) + operator (:submodule/conditionals-operator submodule) + ;; Process and filter out failed resolutions (nils) + processed (vec (keep #(process-conditional db %) conditionals))] + (when (seq processed) ; only return if at least one conditional succeeded + {:conditionals processed + :conditionals-operator operator}))) + +;; =========================================================================================================== +;; Data Extraction and Organization (Task Group 2 helpers needed for Task 3.7) +;; =========================================================================================================== + +(defn find-parent-submodule + "Recursively find the parent submodule for a group, even if nested. + + Arguments: + - db: Datomic database value + - group-eid: Group entity ID + + Returns: + Submodule entity map + + Implementation pattern from test_matrix_generator.clj lines 289-303" + [db group-eid] + (let [group (d/pull db '[{:submodule/_groups [:submodule/name + :submodule/translation-key + :submodule/io + :submodule/order + {:module/_submodules [:module/name + :module/translation-key]}]} + {:group/_children [:db/id]}] + group-eid)] + (if-let [submodule (:submodule/_groups group)] + submodule + (when-let [parent-group (:group/_children group)] + (find-parent-submodule db (:db/id parent-group)))))) + +(defn extract-group-info + "Extract relevant information from a group entity. + Returns nil if no valid conditionals remain after processing. + + Arguments: + - db: Datomic database value + - group-eid: Group entity ID + + Returns: + Map with :path, :group/translated-name, :group/research?, :parent-submodule/io, + order fields, and :conditionals. Returns nil if no valid conditionals. + + Implementation pattern from test_matrix_generator.clj lines 305-328" + [db group-eid] + (let [group (pull-group-details db group-eid) + parent-submodule (find-parent-submodule db group-eid) + parent-module (:module/_submodules parent-submodule) + io (:submodule/io parent-submodule) + ;; Collect full group hierarchy + group-hierarchy (collect-group-hierarchy db group-eid) + ;; Build complete path: Module > Submodule > :io > Groups... + ;; Use {:name :key} tuples so siblings with identical display names stay distinct + module-name {:name (get-translation db (:module/translation-key parent-module)) + :key (:module/translation-key parent-module)} + submodule-name {:name (:submodule/name parent-submodule) + :key (:submodule/translation-key parent-submodule)} + base-path (filterv some? (concat [module-name submodule-name] group-hierarchy)) + ;; Insert :io keyword after module and submodule (if path is long enough) + full-path (if (> (count base-path) 2) + (vec (concat (take 2 base-path) [io] (drop 2 base-path))) + base-path) + conditionals-info (process-group-conditionals db group)] + ;; Only return group info if it has valid conditionals + (when conditionals-info + {:path full-path + :group/translated-name (get-translation db (:group/translation-key group)) + :group/research? (:group/research? group) + :group/hidden? (:group/hidden? group) + :parent-submodule/io io + :group/order (:group/order group) + :submodule/order (:submodule/order parent-submodule) + :conditionals conditionals-info}))) + +(defn extract-submodule-info + "Extract relevant information from a submodule entity. + Returns nil if no valid conditionals remain after processing. + + Arguments: + - db: Datomic database value + - submodule-eid: Submodule entity ID + + Returns: + Map with :path, :submodule/name, :submodule/io, :submodule/research?, + and :conditionals. Returns nil if no valid conditionals. + + Implementation pattern from test_matrix_generator.clj lines 330-346" + [db submodule-eid] + (let [submodule (pull-submodule-details db submodule-eid) + parent-module (:module/_submodules submodule) + io (:submodule/io submodule) + ;; Use {:name :key} tuples so siblings with identical display names stay distinct + module-name {:name (get-translation db (:module/translation-key parent-module)) + :key (:module/translation-key parent-module)} + submodule-name {:name (:submodule/name submodule) + :key (:submodule/translation-key submodule)} + ;; Submodule paths should have :io appended at the end + full-path [module-name submodule-name io] + conditionals-info (process-submodule-conditionals db submodule)] + ;; Only return submodule info if it has valid conditionals + (when conditionals-info + {:path full-path + :submodule/name (:submodule/name submodule) + :submodule/io io + :submodule/research? (:submodule/research? submodule) + :conditionals conditionals-info}))) + +;; =========================================================================================================== +;; Nil-Path Detection (data-integrity guard) +;; =========================================================================================================== + +(defn path-element-nil? + "True if a path element is bare nil, or a {:name :key} tuple with a nil :name or :key. + Used to detect VMS entries whose module/submodule translations are missing." + [el] + (or (nil? el) + (and (map? el) + (or (nil? (:name el)) (nil? (:key el)))))) + +(defn path-has-nil? + "True if any element of the path is nil-degraded. + Signals a VMS entry whose module/submodule translations are missing." + [path] + (boolean (some path-element-nil? path))) + +;; =========================================================================================================== +;; Ancestor Path Collection and Processing (Task 3.4 - 3.7) +;; =========================================================================================================== + +(defn collect-parent-groups + "Given a path like [\"Surface\" \"Fuel Moisture\" \"By Size Class\" \"Live Woody Fuel Moisture\"], + return all parent group paths in order from module/submodule to leaf. + + Skips module (first element) and submodule (second element) in intermediate paths, + but includes them in final paths for lookup. + + Example input: [\"Surface\" \"Fuel Moisture\" \"By Size Class\" \"Live Woody Fuel Moisture\"] + Example output: [[\"Surface\" \"Fuel Moisture\"] + [\"Surface\" \"Fuel Moisture\" \"By Size Class\"] + [\"Surface\" \"Fuel Moisture\" \"By Size Class\" \"Live Woody Fuel Moisture\"]] + + Arguments: + - path: Vector of path elements [Module Submodule Groups...] + + Returns: + Sequence of parent paths, or nil if path has 2 or fewer elements + + Implementation pattern from test_matrix_generator.clj lines 358-375" + [path] + (when (> (count path) 2) + (let [module (take 1 path) + rest-path (drop 1 path) + num-groups (count rest-path)] + (-> (for [i (range 1 num-groups)] + (vec (concat module (take i rest-path)))) + rest)))) + +;; =========================================================================================================== +;; EDN Data Structure Builder (Task 4.4) +;; =========================================================================================================== + +(defn generate-edn-data + "Generate EDN data structure with all conditional information. + Filters out groups/submodules where conditional resolution failed. + Returns a map with path vectors as keys. + + Arguments: + - db: Datomic database value + - groups: Collection of group entity IDs + - submodules: Collection of submodule entity IDs + + Returns: + Map with path vectors as keys, entity info as values + {['Crown' 'Spot' :input 'Torching Trees'] {:path [...] :conditionals [...] ...} + ['Crown' 'Spot' :input] {:path [...] :conditionals [...] ...} + ...}" + [db groups submodules] + (let [all-groups (vec (keep #(extract-group-info db %) groups)) + all-submodules (vec (keep #(extract-submodule-info db %) submodules)) + ;; Combine groups and submodules; drop any whose path contains a nil element + ;; (signals missing module/submodule translations in the VMS database). + all-entities (->> (concat all-groups all-submodules) + (remove #(path-has-nil? (:path %)))) + ;; Fail loudly if two entities share the same path key — silent overwrites hide data loss. + ;; With {:name :key} tuple path elements this should never happen (translation-keys are unique), + ;; but this guard catches any future regression. + _ (let [by-path (group-by :path all-entities) + dupes (filter (fn [[_ vs]] (> (count vs) 1)) by-path)] + (when (seq dupes) + (throw (ex-info "Duplicate path keys in test matrix — two entities resolved to the same path. Check for duplicate translation-keys in the VMS." + {:duplicates (mapv (fn [[path entities]] + {:path path + :entities (mapv #(select-keys % [:path :group/translated-name :submodule/name]) entities)}) + dupes)})))) + path-map (into {} (map (fn [entity] [(:path entity) (dissoc entity :path)]) all-entities))] + path-map)) + +;; =========================================================================================================== +;; Main Generation Function (Task 4.5) +;; =========================================================================================================== + +(defn generate-test-matrix! + "Generate test_matrix_data.edn from Datomic database. + + Queries the database to find all groups and submodules with conditionals, + processes them with ancestor enrichment, and writes structured EDN data for + feature file generation. + + Arguments: + - db: Datomic database value (from d/db) + - edn-path (optional): Path to output EDN file + Default: 'development/test_matrix_data.edn' + + Returns: + Map with :edn-path, :groups-count, :submodules-count + + Implementation pattern from test_matrix_generator.clj lines 456-472" + ([db] + (generate-test-matrix! db "development/test_matrix_data.edn")) + ([db edn-path] + (let [groups (find-all-groups-with-conditionals db) + submodules (find-all-submodules-with-conditionals db) + edn-data (generate-edn-data db groups submodules)] + + ;; Merge :input-visibility into existing file if present (preserves :results-visibility). + ;; select-keys strips any legacy bare path-vector keys that may have accumulated + ;; from the old flat format, keeping only the two canonical keyword sections. + (let [existing (when (.exists (java.io.File. edn-path)) + (try (edn/read-string (slurp edn-path)) + (catch Exception _ nil))) + combined (assoc (select-keys (or existing {}) [:input-visibility :results-visibility]) + :input-visibility edn-data)] + (spit edn-path (with-out-str (pprint combined)))) + (println (format "✓ :input-visibility written to: %s" edn-path)) + + {:edn-path edn-path + :groups-count (count groups) + :submodules-count (count submodules)}))) + +(defn generate-all-matrix! + "Generate the combined test_matrix_data.edn containing both sections: + - :input-visibility input-visibility test data (path-vector keys) + - :results-visibility results-visibility test data (gv-uuid string keys) + + Calls generate-test-matrix! then + cucumber-test-generator.conditional-outputs/generate-conditional-outputs-matrix! + sequentially on the same file so each section merges cleanly. + + Arguments: + - db — Datomic database value (from d/db) + - edn-path — (optional); default 'development/test_matrix_data.edn' + + Returns: + Map with :edn-path, :groups-count, :submodules-count, :results-visibility-count" + ([db] + (generate-all-matrix! db "development/test_matrix_data.edn")) + ([db edn-path] + (let [iv-result (generate-test-matrix! db edn-path) + rp-result ((requiring-resolve + 'cucumber-test-generator.conditional-outputs/generate-conditional-outputs-matrix!) + db edn-path)] + (merge iv-result {:results-visibility-count (:entries-count rp-result)})))) diff --git a/components/cucumber_test_generator/src/cucumber_test_generator/generate_results_scenarios.clj b/components/cucumber_test_generator/src/cucumber_test_generator/generate_results_scenarios.clj new file mode 100644 index 000000000..b9b4a2acb --- /dev/null +++ b/components/cucumber_test_generator/src/cucumber_test_generator/generate_results_scenarios.clj @@ -0,0 +1,775 @@ +(ns cucumber-test-generator.generate-results-scenarios + "Phase-2 feature-file generation for conditionally-set output test cases. + + Reads conditional_outputs_matrix.edn (written by Phase-1 + cucumber-test-generator.conditional-outputs) and emits one + results-page-style Cucumber scenario per entry, matching the shape of + features/test_results_page.feature: + + @core + Feature: Surface Results - + + @core + Scenario: is displayed in results + Given I have started a new Surface Worksheet in Guided Mode + When these input paths are selected + | submodule | group | subgroup | value | + | ... | ... | ... | ... | + Then \"the following outputs are displayed in the results page\" + | output | + | | + + Rendering primitives are copied from generate-scenarios (render-table, + present-headers, module-to-given-statement, indent constants, filename/header + helpers) rather than imported, to keep both namespaces independently usable." + (:require [clojure.edn :as edn] + [clojure.java.io :as io] + [clojure.string :as str])) + +;;; ============================================================================ +;;; Gherkin constants (mirrors generate-scenarios) +;;; ============================================================================ + +(def ^:const SCENARIO-INDENT " ") +(def ^:const STEP-INDENT " ") +(def ^:const TABLE-INDENT " ") + +;;; ============================================================================ +;;; Rendering primitives (copied from generate-scenarios to avoid coupling) +;;; ============================================================================ + +(defn- present-headers + "Return only headers that have a non-empty value in at least one row." + [preferred-order rows] + (filter (fn [h] (some #(seq (str (get % h ""))) rows)) preferred-order)) + +(defn- render-table + "Column-aligned Gherkin data table string." + [headers rows] + (when (and (seq headers) (seq rows)) + (let [get-cell (fn [row h] (str (get row h ""))) + col-widths (map (fn [h] + (max (count (name h)) + (apply max 0 (map #(count (get-cell % h)) rows)))) + headers) + pad (fn [s w] (str s (apply str (repeat (- w (count s)) " ")))) + fmt-row (fn [cells] + (str TABLE-INDENT "| " + (str/join " | " (map pad cells col-widths)) + " |")) + header-row (fmt-row (map name headers)) + data-rows (map #(fmt-row (map (fn [h] (get-cell % h)) headers)) rows)] + (str/join "\n" (cons header-row data-rows))))) + +(defn- effective-module-combo + "Promote a module or module list to the effective worksheet combo. + Mirrors determine-module-combination from generate_scenarios.clj: + Crown/Mortality/Contain always require Surface." + [required-modules module] + (let [m-set (->> (or (seq required-modules) [(or module "surface")]) + (map #(keyword (str/lower-case %))) + set)] + (cond + (= m-set #{:surface}) #{:surface} + (or (= m-set #{:crown}) + (= m-set #{:surface :crown})) #{:surface :crown} + (or (= m-set #{:mortality}) + (= m-set #{:surface :mortality})) #{:surface :mortality} + (or (= m-set #{:contain}) + (= m-set #{:surface :contain})) #{:surface :contain} + :else m-set))) + +(defn- module-to-given-statement + "Map a module combo set to its 'Given I have started a new … Worksheet' step." + [module-combo] + (cond + (= module-combo #{:surface}) "Given I have started a new Surface Worksheet in Guided Mode" + (= module-combo #{:surface :crown}) "Given I have started a new Surface & Crown Worksheet in Guided Mode" + (= module-combo #{:surface :mortality}) "Given I have started a new Surface & Mortality Worksheet in Guided Mode" + (= module-combo #{:surface :contain}) "Given I have started a new Surface & Contain Worksheet in Guided Mode" + :else (str "Given I have started a new " + (str/join " & " (map #(str/capitalize (name %)) (sort-by name module-combo))) + " Worksheet in Guided Mode"))) + +;;; ============================================================================ +;;; File naming +;;; ============================================================================ + +(defn- sanitize + "Lowercase, replace spaces/slashes with hyphens, strip non-alphanumeric." + [s] + (-> (str s) + str/lower-case + (str/replace #"[\s/]+" "-") + (str/replace #"[^a-z0-9\-]" ""))) + +(defn- feature-filename + "Generate a feature filename: results-page_{module}_{output}.feature" + [module output-name] + (str "results-page_" (sanitize module) "_" (sanitize output-name) ".feature")) + +;;; ============================================================================ +;;; Scenario rendering +;;; ============================================================================ + +;; Defined later (Baseline loading section); render-output-outline sorts its +;; Examples rows with it. +(declare sort-by-vms-order) + +(defn- find-varying-row + "Return the first required-input row that carries a :values list of length ≥2, + or nil when no such row exists." + [required-inputs] + (some #(when (>= (count (:values %)) 2) %) required-inputs)) + +(defn- render-scenario + "Render one test case as a plain Gherkin Scenario string (no Examples table)." + [{:keys [output-name module required-modules required-outputs required-inputs]}] + (let [module-combo (effective-module-combo required-modules module) + given (str SCENARIO-INDENT "@core\n" + SCENARIO-INDENT "Scenario: " + output-name " is displayed in results when inputs are set") + given-step (str STEP-INDENT (module-to-given-statement module-combo)) + output-headers (when (seq required-outputs) + (present-headers [:submodule :group :value] required-outputs)) + output-step (when (seq required-outputs) + (str STEP-INDENT "When these output paths are selected\n" + (render-table output-headers required-outputs))) + input-headers (present-headers [:submodule :group :subgroup :value] required-inputs) + input-step (str STEP-INDENT "When these input paths are selected\n" + (render-table input-headers required-inputs)) + then-step (str STEP-INDENT "Then \"the following outputs are displayed in the results page\"\n" + (render-table [:output] [{:output output-name}]))] + (str/join "\n" (remove nil? [given given-step output-step input-step then-step])))) + +(defn- render-scenario-outline + "Render a Scenario Outline for a test case that has a multi-value (:in) input. + + The varying input is emitted as a parameterized step, + `When this input path is entered : [: ] : `, + with its path columns supplied by the Examples table. Placeholders MUST live in + the step text: the tegere runner reifies Scenario Outline variables only in a + step's ::text, never in an attached data table (tegere/parser.clj reify-outline-step), + so a `` inside the 'these input paths are selected' table would reach + the step verbatim and fail ('Could not find or select option: '). The + non-varying inputs stay in 'these input paths are selected' tables, split around + the varying step so VMS / visibility ordering is preserved. + + tag is :core (one representative value) or :extended (all values)." + [{:keys [output-name module required-modules required-outputs required-inputs]} + varying-row + tag + & [name-suffix]] + (let [module-combo (effective-module-combo required-modules module) + tag-str (if (= tag :core) "@core" "@extended") + sname (str output-name " is displayed in results when inputs are set" + (when (= tag :extended) " (Extended)") + name-suffix) + outline-header (str SCENARIO-INDENT tag-str "\n" + SCENARIO-INDENT "Scenario Outline: " sname) + given-step (str STEP-INDENT (module-to-given-statement module-combo)) + output-headers (when (seq required-outputs) + (present-headers [:submodule :group :value] required-outputs)) + output-step (when (seq required-outputs) + (str STEP-INDENT "When these output paths are selected\n" + (render-table output-headers required-outputs))) + ;; Split static inputs around the varying row, preserving sorted VMS order so + ;; the varying value is still set in the same position (visibility-gating + ;; inputs such as Canopy Height stay after the species that reveals them). + [before after] (split-with #(not= % varying-row) required-inputs) + after (rest after) + sel-step (fn [rows] + (when (seq rows) + (str STEP-INDENT "When these input paths are selected\n" + (render-table (present-headers [:submodule :group :subgroup :value] rows) rows)))) + before-step (sel-step before) + after-step (sel-step after) + ;; Varying input — placeholders in step TEXT (reified by tegere). Use the + ;; 4-arg form when the row has a subgroup, else the 3-arg form, matching the + ;; registered steps in steps/When.clj. + has-subgroup? (seq (str (:subgroup varying-row ""))) + varying-step (str STEP-INDENT + (if has-subgroup? + "When this input path is entered : : : " + "When this input path is entered : : ")) + then-step (str STEP-INDENT "Then \"the following outputs are displayed in the results page\"\n" + (render-table [:output] [{:output output-name}])) + ;; Examples table — one row per value, carrying the full input path columns + example-values (if (= tag :core) + [(first (:values varying-row))] + (:values varying-row)) + ex-cols (if has-subgroup? [:submodule :group :subgroup :value] [:submodule :group :value]) + examples-rows (mapv (fn [v] + (-> (select-keys varying-row [:submodule :group :subgroup]) + (assoc :value v))) + example-values) + examples-step (str STEP-INDENT "Examples: This scenario is repeated for each of these rows\n" + (render-table ex-cols examples-rows))] + (str/join "\n" (remove nil? [outline-header given-step output-step + before-step varying-step after-step + then-step "" examples-step])))) + +(defn- render-output-outline + "Render a Scenario Outline for an output whose visibility is gated by an :or over + several outputs — selecting ANY ONE of them reveals the asserted output. Each + gating output becomes one Examples row, selected via a parameterized + `When this output path is selected : : ` step + (registered in steps/When.clj). The baseline outputs (Direction Mode / Surface + Fire that make the worksheet compute) and all required inputs stay static. + + tag is :core (one representative gating output) or :extended (all of them). + + The optional third arg is an output visibility class + {:gating-outputs :required-inputs :name-suffix}: when present, its :gating-outputs + supply the Examples rows and its :required-inputs the input table, and :name-suffix is + appended to the scenario name. Without it, the whole test case's gating-outputs / + required-inputs are used (unchanged behavior)." + [{:keys [output-name module required-modules required-outputs] + tc-gating :gating-outputs + tc-inputs :required-inputs} + tag + & [{cls-gating :gating-outputs cls-inputs :required-inputs name-suffix :name-suffix}]] + (let [gating-outputs (or cls-gating tc-gating) + required-inputs (or cls-inputs tc-inputs) + module-combo (effective-module-combo required-modules module) + tag-str (if (= tag :core) "@core" "@extended") + sname (str output-name " is displayed in results when inputs are set" + (when (= tag :extended) " (Extended)") + name-suffix) + outline-header (str SCENARIO-INDENT tag-str "\n" + SCENARIO-INDENT "Scenario Outline: " sname) + given-step (str STEP-INDENT (module-to-given-statement module-combo)) + ;; Static outputs = the merged outputs minus the FULL gating set (the baseline + ;; Direction Mode + Surface Fire prerequisites), set once for every row. Uses the + ;; whole test case's gating set (not just this class) so baseline outputs are + ;; subtracted correctly even when rendering a single output class. + gating-set (set tc-gating) + static-outputs (remove gating-set required-outputs) + out-headers (when (seq static-outputs) + (present-headers [:submodule :group :value] static-outputs)) + output-step (when (seq static-outputs) + (str STEP-INDENT "When these output paths are selected\n" + (render-table out-headers static-outputs))) + input-headers (when (seq required-inputs) + (present-headers [:submodule :group :subgroup :value] required-inputs)) + input-step (when (seq required-inputs) + (str STEP-INDENT "When these input paths are selected\n" + (render-table input-headers required-inputs))) + ;; Varying output — placeholders in step TEXT (reified by tegere). Grouped with + ;; the static outputs, before the inputs, so the tested output is selected first + ;; (consistent with render-scenario / render-scenario-outline). Output rows never + ;; carry a subgroup, so the 3-arg form. + varying-step (str STEP-INDENT + "When this output path is selected : : ") + then-step (str STEP-INDENT "Then \"the following outputs are displayed in the results page\"\n" + (render-table [:output] [{:output output-name}])) + gating-sorted (sort-by-vms-order gating-outputs) + example-rows (if (= tag :core) [(first gating-sorted)] gating-sorted) + examples-rows (mapv #(select-keys % [:submodule :group :value]) example-rows) + examples-step (str STEP-INDENT "Examples: This scenario is repeated for each of these rows\n" + (render-table [:submodule :group :value] examples-rows))] + (str/join "\n" (remove nil? [outline-header given-step output-step varying-step + input-step + then-step "" examples-step])))) + +;;; ============================================================================ +;;; Feature file rendering +;;; ============================================================================ + +(defn- render-feature-header + "The file-level @core tag + Feature title for a results test case. Two test cases that share + the same module + output-name render the same header, so their bodies can share one file." + [{:keys [output-name module]}] + (str "@core\n" + "Feature: " (or module "") " Results - " output-name "\n")) + +(defn- render-feature-body + "Render the Scenario/Scenario-Outline body (no Feature header) for one test case. + + When the asserted output is gated by an :or over ≥2 outputs (any one reveals it), + emits two output Scenario Outlines (@core: one representative gating output; + @extended: all of them). Otherwise, when any required-input row carries a :values + list of length ≥2 (an :in range), emits two input Scenario Outlines. Otherwise + falls back to a single plain Scenario." + [{:keys [required-inputs required-outputs-operator gating-outputs + input-visibility-classes varying-input-key] + :as test-case}] + (let [;; :or gate over multiple outputs → vary the output selection (inputs stay + ;; static). Takes precedence over an :in input outline; a case with both would + ;; keep its varying input at its representative value. + or-outputs? (and (= :or required-outputs-operator) + (>= (count gating-outputs) 2)) + varying-row (find-varying-row required-inputs) + ;; Locate the varying row in a class's inputs by its [submodule group subgroup] + ;; key — a singleton class has one :values entry, so find-varying-row can't. + vrow-of (fn [inputs] + (or (first (filter #(= [(:submodule %) (:group %) (:subgroup %)] varying-input-key) + inputs)) + (find-varying-row inputs))) + body (cond + or-outputs? + ;; Split the gating outputs into visibility classes (outputs revealing + ;; the same inputs share one @extended outline) so each row sets exactly + ;; the inputs its selected output reveals — e.g. only the Size outputs + ;; (Fire Area/Perimeter/Spread Distance) carry the Elapsed Time input. + (let [ocls (:output-visibility-classes test-case)] + (if (seq ocls) + (str/join "\n\n" + (cons (render-output-outline test-case :core (first ocls)) + (map-indexed + (fn [i c] + (render-output-outline + test-case :extended + (assoc c :name-suffix (when (> (count ocls) 1) + (str " — Group " (inc i)))))) + ocls))) + (str/join "\n\n" + [(render-output-outline test-case :core) + (render-output-outline test-case :extended)]))) + ;; Varying input splits visibility: @core uses the first class's + ;; representative; @extended emits one outline per class so each value + ;; group sets exactly the inputs its values reveal (e.g. only the + ;; Bark Char Height species that show Crown Ratio get a Crown Ratio row). + (seq input-visibility-classes) + (str/join "\n\n" + (cons (render-scenario-outline + (assoc test-case :required-inputs (first input-visibility-classes)) + (vrow-of (first input-visibility-classes)) :core) + (map-indexed + (fn [i ci] + (render-scenario-outline + (assoc test-case :required-inputs ci) + (vrow-of ci) :extended (str " — Group " (inc i)))) + input-visibility-classes))) + varying-row + (str/join "\n\n" + [(render-scenario-outline test-case varying-row :core) + (render-scenario-outline test-case varying-row :extended)]) + :else + (render-scenario test-case))] + body)) + +;;; ============================================================================ +;;; Combined matrix loading +;;; ============================================================================ + +(defn- load-combined-matrix + "Read the combined test_matrix_data.edn. Returns a map with + :input-visibility and :results-visibility top-level keys." + [edn-path] + (let [raw (-> (slurp edn-path) edn/read-string)] + ;; Support both combined format and legacy flat format + (if (contains? raw :results-visibility) + raw + {:input-visibility raw :results-visibility {}}))) + +;;; ============================================================================ +;;; Baseline loading + forward-dependency filtering +;;; ============================================================================ + +(defn- load-baselines + "Read and parse results_test_baselines.edn." + [baselines-path] + (-> (slurp baselines-path) edn/read-string)) + +(defn- input-key + "Dedup key for an input row — submodule + group + subgroup." + [row] + [(:submodule row) (:group row) (:subgroup row)]) + +;; Module display order for multi-module worksheet sorting. +;; Surface inputs always precede Crown/Mortality/Contain inputs in the wizard. +(def ^:private module-sort-order + {"Surface" 0 "Crown" 1 "Mortality" 2 "Contain" 3}) + +;; Same worksheet order, keyed by module-combo keyword. Used to order a combo's +;; constituent modules (Surface first) when deriving its baselines key. +(def ^:private module-combo-order + {:surface 0 :crown 1 :mortality 2 :contain 3}) + +(defn- combo->baseline-key + "Map an effective module-combo set to its single baselines key, Surface first. + e.g. #{:surface} -> :surface, #{:surface :mortality} -> :surface-mortality." + [module-combo] + (->> module-combo + (sort-by #(get module-combo-order % 99)) + (map name) + (str/join "-") + keyword)) + +(defn- sort-by-vms-order + "Sort rows by VMS hierarchy: module → submodule/order → group/order → group-variable/order. + Nils / unknown modules sort last." + [rows] + (sort-by (juxt #(get module-sort-order (:module %) 99) + #(or (:submodule/order %) 999) + #(or (:group/order %) 999) + #(or (:group-variable/order %) 999)) + rows)) + +(defn- build-output-order-index + "Build a [module submodule group value] → {VMS order fields} map from every + test case's :required-outputs. Output rows carry the authoritative VMS order, + so this lets baseline output rows (which no longer hand-code order) recover it + — the baseline output groups (Direction Mode / Heading, Surface Fire / Rate of + Spread) always recur as test-case outputs, so they are always covered." + [matrix] + (reduce (fn [m r] + (assoc m [(:module r) (:submodule r) (:group r) (:value r)] + (select-keys r [:submodule/order :group/order :group-variable/order]))) + {} + (mapcat :required-outputs (vals matrix)))) + +(defn- find-group-entries + "Return ALL :input-visibility entries whose path contains submodule :name and + ends with the row's deepest hierarchy element — :subgroup when present, else + :group. Nested groups (e.g. 'Wind Direction (from upslope)' under 'Wind and + slope are') carry their own visibility conditional under the subgroup path, so + matching on :group alone would wrongly resolve to the parent group's gate. + Multiple entries can exist when the same name appears in different modules with + different conditionals (e.g. 'Wind and slope are' in both Surface and Crown)." + [input-visibility {:keys [submodule group subgroup]}] + (let [target (or subgroup group)] + (keep (fn [[path entity]] + (when (and (some #(= (:name %) submodule) path) + (= (:name (last (remove keyword? path))) target)) + entity)) + input-visibility))) + +(defn- find-submodule-entries + "Return :input-visibility INPUT submodule-level entries (whose value carries + :submodule/name) matching the row's :submodule, scoped to the row's :module when + known (a submodule name like 'Size' or 'Weather' recurs across modules). A + baseline input is only visible when its submodule is visible, so these + conditionals gate it in addition to its own group/subgroup conditional. E.g. the + Mortality 'Scorch' submodule is shown only for species in its :in list, hiding + 'Air Temperature' for outputs like Bole Char Height whose species do not require + scorch inputs. Air Temperature has no group-level entry, so without this its + submodule gate would never be evaluated. + + Only :input submodules gate input rows. A same-named OUTPUT submodule (e.g. Surface + 'Size' exists as both input:size and output:size) can carry a module-only + conditional that conditionals-pass? treats as always satisfied; since the gate + passes if ANY matched entry passes, including the output entry would always satisfy + it and defeat the real input gate (e.g. 'Elapsed Time' would leak into every feature + instead of only those selecting a Size output)." + [input-visibility {:keys [module submodule]}] + (keep (fn [[path entity]] + (when (and (:submodule/name entity) + (= (:submodule/io entity) :input) + (= (:submodule/name entity) submodule) + (or (nil? module) (some #(= (:name %) module) path))) + entity)) + input-visibility)) + +(defn- conditionals-pass? + "Evaluate the :conditionals block from an :input-visibility entry against + known-values (a map of group-name → value-string) and module-name-set (the + set of the worksheet's effective module names, e.g. #{\"surface\"}). + Supports :group-variable type with :equal and :in operators, and :module type + evaluated against module-name-set (mirroring the app's resolve-conditionals: + :equal = set equality, :in = set intersection)." + [conditionals-block known-values module-name-set] + (let [conds (get-in conditionals-block [:conditionals :conditionals]) + operator (get-in conditionals-block [:conditionals :conditionals-operator])] + (if (empty? conds) + true + (let [results (map (fn [{:keys [type operator values group-variable]}] + (case type + :group-variable + ;; Key on the conditional gv's :io. Output gates are + ;; seeded by selected-output value (== translated-name); + ;; input gates resolve against the gv's deepest group + ;; name, matching how known-values keys input rows. + (let [gv-key (if (= (:io group-variable) :output) + (:group-variable/translated-name group-variable) + (:name (last (remove keyword? (:path group-variable))))) + cur-val (get known-values gv-key)] + (case operator + :equal (= cur-val (first values)) + :in (some #(= cur-val %) values) + false)) + ;; :module type — evaluate against the worksheet's module set, + ;; matching the app (a surface-only run does NOT satisfy a + ;; ["mortality" "surface"] gate, so its input drops). + :module + (case operator + :equal (= (set values) module-name-set) + :in (boolean (some module-name-set values)) + false) + false)) + conds)] + (if (= operator :or) + (some true? results) + (every? true? results)))))) + +(defn- included-baseline-inputs + "Fixpoint over `base-inputs`: admit a baseline input once BOTH its group/subgroup + conditional AND its submodule conditional pass (empty = no gate), seeding + `known-values` with `init-known` and growing it as inputs are admitted (a later + input can be revealed by an earlier one). Returns the admitted rows in baseline + declaration order. Uses vector + seen-set to avoid array-map overflow losing order." + [base-inputs init-known input-visibility module-name-set] + (loop [remaining (vec base-inputs) + known init-known + acc [] + seen #{}] + (let [newly (remove (fn [row] (seen (input-key row))) + (filter (fn [row] + (let [g (find-group-entries input-visibility row) + s (find-submodule-entries input-visibility row)] + (and (or (empty? g) (some #(conditionals-pass? % known module-name-set) g)) + (or (empty? s) (some #(conditionals-pass? % known module-name-set) s))))) + remaining)) + new-acc (into acc newly) + new-seen (into seen (map input-key newly)) + new-known (into known (map (fn [{:keys [group subgroup value]}] + [(or subgroup group) value]) newly)) + leftover (remove (fn [row] (new-seen (input-key row))) remaining)] + (if (= (count new-acc) (count acc)) + new-acc + (recur leftover new-known new-acc new-seen))))) + +(defn- merge-with-baselines + "Merge a test case with the worksheet-combo baseline. + The baseline is looked up by a single effective-combo key (:surface, + :surface-crown, :surface-mortality, :surface-contain). Each combo entry holds + its COMPLETE baseline — Surface rows are repeated per combo rather than shared, + so a combo's Surface inputs/outputs can diverge from the Surface-only combo. A + missing combo key yields an empty baseline. + + :baseline-outputs are prepended before test-case-specific :required-outputs (deduped). + :baseline-inputs are filtered via :input-visibility conditionals and merged with + test-case-specific inputs (test-case values override baseline by input-key)." + [test-case baselines input-visibility output-order-index] + (let [module-combo (effective-module-combo (:required-modules test-case) (:module test-case)) + module-name-set (into #{} (map name) module-combo) + combo-key (combo->baseline-key module-combo) + entry (get baselines combo-key {}) + baseline {:baseline-outputs (vec (:baseline-outputs entry)) + :baseline-inputs (vec (:baseline-inputs entry))} + ;; Baseline output rows no longer hand-code VMS order; recover it from the + ;; matrix-derived index so the downstream drop/dedup/sort pipeline is + ;; unchanged. + base-outputs (mapv #(merge % (get output-order-index + [(:module %) (:submodule %) (:group %) (:value %)])) + (get baseline :baseline-outputs [])) + tc-inputs (:required-inputs test-case) + ;; Drop baseline inputs the test case already provides (same submodule/ + ;; group/subgroup). The test-case value is authoritative; keeping the + ;; baseline row would otherwise pollute known-values during the fixpoint + ;; and mis-gate dependent inputs (e.g. baseline "Wind and slope are = + ;; Aligned" overwriting a test case's "Not Aligned", which gates the + ;; "Wind Direction (from upslope)" input). + tc-keys (into #{} (map input-key) tc-inputs) + ;; Apply conditionally auto-set input values (e.g. "Wind Measured at" -> 20-Foot + ;; for spot outputs) derived in Phase-1 (:input-value-overrides). Overriding the + ;; value before the fixpoint makes its dependent inputs gate correctly (e.g. + ;; "20-Foot Wind Speed" becomes visible and midflame "Wind Speed" drops). + override-vals (into {} (map (juxt input-key :value)) (:input-value-overrides test-case)) + base-inputs (->> (get baseline :baseline-inputs []) + (remove #(tc-keys (input-key %))) + (mapv (fn [row] + (if-let [v (get override-vals (input-key row))] + (assoc row :value v) + row)))) + ;; Merge baseline outputs before test-case outputs, deduped + tc-outputs (get test-case :required-outputs []) + ;; Baseline outputs are fallback defaults (a direction mode + a fire-behavior + ;; result output) that make the worksheet compute. Drop any baseline output + ;; whose [:submodule :group] the test case already selects — the test's own + ;; output covers that group, so the default is redundant (and for single-select + ;; groups like Direction Mode, only one value may be active). E.g. Backing Flame + ;; Length keeps only its own Flame Length and not the baseline Rate of Spread. + tc-out-groups (into #{} (map (juxt :submodule :group)) tc-outputs) + base-outputs (remove #(tc-out-groups [(:submodule %) (:group %)]) base-outputs) + ;; Drop any baseline output that DISABLES the tested output (its GV has a :disable + ;; action gated on that output). Otherwise the prerequisite baseline (e.g. Direction + ;; Mode Heading + Surface Fire Rate of Spread) disables the target (e.g. the Spot + ;; "Burning Pile" output) so it can never be selected. The test's own required-outputs + ;; are untouched, so the target is still selected and the worksheet still computes. + disabling-outs (into #{} (map (juxt :submodule :group :value)) (:disabling-outputs test-case)) + base-outputs (remove #(disabling-outs [(:submodule %) (:group %) (:value %)]) base-outputs) + all-outputs (->> (concat base-outputs tc-outputs) + (reduce (fn [acc row] + (if (some #(= % row) acc) acc (conj acc row))) + []) + vec) + ;; Seed known-values: input group→value AND all selected output names→"true" + ;; so output-gated input conditionals (e.g. "Wind and slope are") pass. + ;; :default-outputs are outputs the app auto-selects on a fresh worksheet + ;; (e.g. Rate of Spread / Flame Length for Surface & Contain). They are + ;; seeded here so their gated baseline inputs (fuel model, wind & slope…) + ;; survive the fixpoint, but are deliberately NOT added to all-outputs so + ;; they never render as an explicit "output paths selected" step. + init-known (into {} + (concat + (map (fn [{:keys [group subgroup value]}] [(or subgroup group) value]) tc-inputs) + (map (fn [{:keys [value]}] [value "true"]) all-outputs) + (map (fn [{:keys [value]}] [value "true"]) (:default-outputs test-case)))) + ;; Included baseline inputs for the representative (first) varying value. + included-vec (included-baseline-inputs base-inputs init-known input-visibility module-name-set) + ;; Input order is implicit: the declaration order of :baseline-inputs (already + ;; worksheet order). Several baseline inputs (DBH, Air Temperature) appear in no + ;; test case, so declaration order is the only complete ordering source. + base-order (into {} (map-indexed (fn [i r] [(input-key r) i]) + (get baseline :baseline-inputs []))) + ;; Merge an included baseline-input vector with the test-case inputs — restricting + ;; the varying row's Examples :values to `vals` — and sort into worksheet order. + ;; tc-inputs override baseline values for the same key; test-only keys append after. + varying-row (find-varying-row tc-inputs) + varying-key (when varying-row (input-key varying-row)) + finalize-inputs (fn [inc-vec example-vals] + (let [tcin (cond->> tc-inputs + varying-key + (mapv #(if (= (input-key %) varying-key) + (assoc % :values (vec example-vals) :value (first example-vals)) + %))) + tc-override (into {} (map (juxt input-key identity)) tcin) + base-keys (set (map input-key inc-vec)) + merged-raw (into (mapv #(get tc-override (input-key %) %) inc-vec) + (remove #(base-keys (input-key %)) tcin))] + (vec (sort-by #(get base-order (input-key %) Long/MAX_VALUE) merged-raw)))) + ;; Partition the varying values into visibility-equivalence classes: values that + ;; reveal the SAME baseline inputs share one class. Evaluating visibility per value + ;; (not just the representative) stops species-gated inputs — e.g. Crown Ratio, + ;; Canopy Height, Air Temperature, shown only for some Bark Char Height species — + ;; from being dropped across the whole @extended table because the first species + ;; happened to hide them. array-map preserves first-seen order, so the class holding + ;; the first value (used for @core) sorts first. + vk-known (when varying-row (or (:subgroup varying-row) (:group varying-row))) + class-map (when varying-row + (reduce (fn [m v] + (let [incl (included-baseline-inputs base-inputs + (assoc init-known vk-known v) + input-visibility module-name-set) + sig (set (map input-key incl))] + (if (contains? m sig) + (update-in m [sig :values] conj v) + (assoc m sig {:incl incl :values [v]})))) + (array-map) (:values varying-row))) + classes (mapv (fn [{:keys [incl values]}] (finalize-inputs incl values)) (vals class-map)) + ;; Output visibility classes — the varying-OUTPUT analog of class-map above. For an + ;; :or gate over ≥2 gating outputs, each Examples row selects ONE gating output, so + ;; an input revealed only by SOME outputs (e.g. Size's "Elapsed Time", shown only + ;; when a Size output is selected) must not leak onto the other rows. Seed + ;; known-values with the always-on outputs ONLY (surviving baseline outputs + + ;; :default-outputs — NOT the gating outputs), then add one gating output at a time + ;; and group outputs that reveal the same baseline inputs into a class. + or-gate? (and (= :or (:required-outputs-operator test-case)) + (>= (count tc-outputs) 2)) + base-known (into {} + (concat + (map (fn [{:keys [group subgroup value]}] [(or subgroup group) value]) tc-inputs) + (map (fn [{:keys [value]}] [value "true"]) base-outputs) + (map (fn [{:keys [value]}] [value "true"]) (:default-outputs test-case)))) + output-cls-map (when or-gate? + (reduce (fn [m g] + (let [incl (included-baseline-inputs base-inputs + (assoc base-known (:value g) "true") + input-visibility module-name-set) + sig (set (map input-key incl))] + (if (contains? m sig) + (update-in m [sig :gating] conj g) + (assoc m sig {:incl incl :gating [g]})))) + (array-map) (sort-by-vms-order tc-outputs))) + output-classes (mapv (fn [{:keys [incl gating]}] + {:gating-outputs (vec gating) + :required-inputs (finalize-inputs incl nil)}) + (vals output-cls-map))] + (assoc test-case + :required-inputs (finalize-inputs included-vec (when varying-row (:values varying-row))) + :required-outputs (sort-by-vms-order all-outputs) + ;; The test case's own outputs (the conditional gate). Preserved separately + ;; from the baseline outputs so an :or-gated render can vary just these. + :gating-outputs (vec tc-outputs) + ;; [submodule group subgroup] of the varying row, so the renderer can locate it + ;; in each class (a singleton class has only one :values entry). + :varying-input-key varying-key + ;; Attach class variants only when the varying input actually splits visibility; + ;; one class means every value reveals the same inputs (rendering unchanged). + :input-visibility-classes (when (> (count classes) 1) classes) + ;; Per-gating-output input sets for the :or-output render (see output-cls-map). + ;; Present whenever it's an :or gate — even one class, since its inputs are the + ;; correct per-output set rather than the old all-outputs-seeded union. + :output-visibility-classes (when or-gate? output-classes)))) + +;;; ============================================================================ +;;; File cleanup (only removes results-page_*.feature files) +;;; ============================================================================ + +(defn- delete-results-feature-files + "Delete previously generated results-page_*.feature files in features-dir." + [features-dir] + (let [dir (io/file features-dir) + files (filter #(and (.isFile %) + (str/starts-with? (.getName %) "results-page_") + (str/ends-with? (.getName %) ".feature")) + (file-seq dir))] + (doseq [f files] (.delete f)) + (count files))) + +;;; ============================================================================ +;;; Main entry point +;;; ============================================================================ + +(defn generate-results-feature-files! + "Generate results-page Cucumber feature files from the combined test_matrix_data.edn. + + For each :results-visibility test case, writes one feature file asserting that the + conditionally-set output appears on the results page when its required inputs are set. + Uses the :input-visibility section to determine which baseline inputs are visible + (forward-dependency filtering). + + Arguments: + - edn-path — (optional) combined matrix EDN; default 'development/test_matrix_data.edn' + - features-dir — (optional) output dir; default 'features/results-page/' + - baselines-path — (optional); default 'development/results_test_baselines.edn' + + Returns: + {:features-dir '...' :files-written N}" + ([] + (generate-results-feature-files! + "development/test_matrix_data.edn" + "features/results-page/" + "development/results_test_baselines.edn")) + ([edn-path] + (generate-results-feature-files! edn-path "features/results-page/" "development/results_test_baselines.edn")) + ([edn-path features-dir] + (generate-results-feature-files! edn-path features-dir "development/results_test_baselines.edn")) + ([edn-path features-dir baselines-path] + (let [combined (load-combined-matrix edn-path) + matrix (:results-visibility combined) + input-visibility (:input-visibility combined) + baselines (load-baselines baselines-path) + output-order-idx (build-output-order-index matrix) + _ (println (format "Loaded %d :results-visibility test cases from %s" (count matrix) edn-path)) + deleted (delete-results-feature-files features-dir) + _ (when (pos? deleted) + (println (format "Deleted %d old results-page_*.feature files" deleted))) + written (atom 0) + ;; Prepare every test case, then group by [module output-name] — the pair that determines + ;; both the filename and the Feature: title. Test cases that share it would otherwise + ;; overwrite each other's file (and collide on title); merge their bodies into one file. + prepared (map (fn [[gv-uuid test-case]] + (-> test-case + (assoc :gv-uuid gv-uuid) + (merge-with-baselines baselines input-visibility output-order-idx))) + matrix) + by-title (->> prepared + (group-by (juxt :module :output-name)) + (sort-by key))] ; deterministic file order + (doseq [[[module output-name] tcs] by-title] + (let [tcs* (sort-by :gv-uuid tcs) ; deterministic scenario order + filename (feature-filename module output-name) + filepath (str features-dir filename) + header (render-feature-header (first tcs*)) + body (str/join "\n\n" (map render-feature-body tcs*)) + content (str header "\n" body)] + (io/make-parents filepath) + (spit filepath content) + (swap! written inc) + (println (format " ✓ %s" filename)))) + (println (format "✓ Wrote %d feature files to %s" @written features-dir)) + {:features-dir features-dir + :files-written @written}))) diff --git a/components/cucumber_test_generator/src/cucumber_test_generator/generate_scenarios.clj b/components/cucumber_test_generator/src/cucumber_test_generator/generate_scenarios.clj new file mode 100644 index 000000000..cba2ad4e0 --- /dev/null +++ b/components/cucumber_test_generator/src/cucumber_test_generator/generate_scenarios.clj @@ -0,0 +1,1545 @@ +(ns cucumber-test-generator.generate-scenarios + (:require [clojure.edn :as edn] + [clojure.java.io :as io] + [clojure.math.combinatorics :as combo] + [clojure.set :as set] + [clojure.string :as str])) + +;; =========================================================================================================== +;; Gherkin Indentation Constants +;; =========================================================================================================== + +(def ^:const SCENARIO-INDENT " ") ; 2 spaces for Scenario line +(def ^:const STEP-INDENT " ") ; 4 spaces for Given/When/Then/And +(def ^:const TABLE-INDENT " ") ; 6 spaces for table rows + +;; =========================================================================================================== +;; Utility Functions +;; =========================================================================================================== + +(defn collect-parent-groups + "Given a path like [\"Surface\" \"Fuel Moisture\" \"By Size Class\" \"Live Woody Fuel Moisture\"], + return all parent group paths in order from module/submodule to leaf. + + Skips module (first element) and submodule (second element) in intermediate paths, + but includes them in final paths for lookup. + + Example input: [\"Surface\" \"Fuel Moisture\" \"By Size Class\" \"Live Woody Fuel Moisture\"] + Example output: [[\"Surface\" \"Fuel Moisture\"] + [\"Surface\" \"Fuel Moisture\" \"By Size Class\"] + [\"Surface\" \"Fuel Moisture\" \"By Size Class\" \"Live Woody Fuel Moisture\"]] + + Arguments: + - path: Vector of path elements [Module Submodule Groups...] + + Returns: + Sequence of parent paths, or nil if path has 2 or fewer elements" + [path] + (when (> (count path) 2) + (let [module (take 1 path) + rest-path (drop 1 path) + num-groups (count rest-path)] + (-> (for [i (range 1 num-groups)] + (vec (concat module (take i rest-path)))) + rest)))) + +(defn get-ancestors + "Get all ancestor entities for a given path by looking them up in the data map. + + Arguments: + - all-data: Map with path vectors as keys, entity info as values + - entity-path: Path vector like ['Crown' 'Spot' :input 'Torching Trees'] + + Returns: + Vector of ancestor entity maps (submodules and parent groups)" + [all-data entity-path] + (let [parent-paths (collect-parent-groups entity-path)] + (keep #(get all-data %) parent-paths))) + +(defn collect-all-ancestral-entities + "Recursively collect all entities referenced by conditionals' group-variable paths. + + When a conditional references a path like [\"Surface\" \"Fire Behavior\" :output \"Direction Mode\"], + this function: + 1. Extracts ancestral paths (e.g., [\"Surface\" \"Fire Behavior\" :output]) + 2. Looks them up in all-data map + 3. For any found entities with conditionals, recursively processes those too + 4. Returns all ancestral entities, deduplicated by :path + + Arguments: + - all-data: Map with path vectors as keys, entity info as values + - conditionals: Sequence of conditionals to process + + Returns: + Vector of ancestral entity maps (deduplicated by :path)" + [all-data conditionals] + (letfn [(collect-from-conditional [cond seen-paths] + (let [path (get-in cond [:group-variable :path])] + (if (and path (not (contains? seen-paths path))) + ;; Extract ancestral paths from this conditional's path + (let [ancestral-paths (collect-parent-groups path) + ;; Also check if the path itself exists (when it's a 3-element path with no parents) + direct-path-entity (get all-data path) + ;; Look up ancestral entities in all-data + ancestral-entities (keep #(get all-data %) ancestral-paths) + ;; Combine direct path entity (if exists) with ancestral entities + all-found-entities (if direct-path-entity + (cons direct-path-entity ancestral-entities) + ancestral-entities) + ;; Mark this path as seen + updated-seen (conj seen-paths path) + ;; Recursively process conditionals from all found entities + nested-results (mapcat + (fn [entity] + (when-let [entity-conds (get-in entity [:conditionals :conditionals])] + (collect-from-conditional-seq entity-conds updated-seen))) + all-found-entities)] + ;; Return all found entities plus any nested results + (concat all-found-entities nested-results)) + ;; No path or already seen, return empty + []))) + (collect-from-conditional-seq [cond-seq seen-paths] + (mapcat #(collect-from-conditional % seen-paths) cond-seq))] + ;; Start with empty seen set + (let [all-entities (collect-from-conditional-seq conditionals #{})] + ;; Deduplicate by path + (vec (vals (into {} (map (juxt :path identity) all-entities))))))) + +;; =========================================================================================================== +;; Nil-Path Detection (data-integrity guard) +;; =========================================================================================================== + +(defn path-element-nil? + "True if a path element is bare nil, or a {:name :key} tuple with a nil :name or :key. + Used to detect VMS entries whose module/submodule translations are missing." + [el] + (or (nil? el) + (and (map? el) + (or (nil? (:name el)) (nil? (:key el)))))) + +(defn path-has-nil? + "True if any element of the path is nil-degraded. + Signals a VMS entry whose module/submodule translations are missing." + [path] + (boolean (some path-element-nil? path))) + +;; =========================================================================================================== +;; EDN Loading Functions (Task 5.2) +;; =========================================================================================================== + +(defn load-test-matrix + "Read and parse test_matrix_data.edn file. + + Arguments: + - edn-path (optional): Path to input EDN file + Default: 'development/test_matrix_data.edn' + + Returns: + Map with path vectors as keys, entity info as values + + Throws: + Exception if file doesn't exist or is malformed" + ([] + (load-test-matrix "development/test_matrix_data.edn")) + ([edn-path] + (try + (let [file (io/file edn-path)] + (when-not (.exists file) + (throw (ex-info (str "EDN file not found: " edn-path) + {:edn-path edn-path}))) + (let [content (slurp edn-path) + raw (edn/read-string content) + ;; Support both combined {:input-visibility {...}} and legacy flat format + data (or (:input-visibility raw) raw)] + (when-not (map? data) + (throw (ex-info "Malformed EDN: expected a map with path keys" + {:edn-path edn-path}))) + ;; Drop any entry whose path key contains a nil element (missing VMS translations). + (into {} (->> data + (remove (fn [[k _]] (path-has-nil? k))) + (map (fn [[k v]] [k (assoc v :path k)])))))) + (catch Exception e + (throw (ex-info (str "Failed to load test matrix: " (.getMessage e)) + {:edn-path edn-path} + e)))))) + +;; =========================================================================================================== +;; Path Formatting Functions (Task 5.3) +;; =========================================================================================================== + +(defn- pname + "Return the display name for a path element. + Path elements are {:name :key} tuples when extracted from the VMS, or plain strings + in legacy data. Keywords (:input/:output) are returned as-is. + This is the single place that unwraps the tuple — all rendering code calls pname; + lookup code (get all-data path) uses the raw element so map-equality still holds." + [el] + (if (map? el) (:name el) el)) + +(defn format-path-for-gherkin + "Convert path vector to Gherkin-style format. + Skips first element (module name) and :io keywords, joins remaining with ' -> '. + + Arguments: + - path: Vector like [{:name \"Surface\" :key ...} {:name \"Fuel Moisture\" :key ...} :input ...] + + Returns: + String like \"Fuel Moisture -> By Size Class\"" + [path] + (when (seq path) + (str/join " -> " (map pname (remove keyword? (rest path)))))) + +(defn path->table-components + "Extract table path components from a path vector. + Strips module (first element) and any keyword (:input/:output). + + Arguments: + - path: Vector like [{:name \"Surface\" ...} {:name \"Wind and Slope\" ...} :input ...] + + Returns: + Vector of string elements like [\"Wind and Slope\" \"Wind and slope are\" \"Wind Direction\"]" + [path] + (when (seq path) + (mapv pname (remove keyword? (rest path))))) + +(defn present-headers + "Return only those headers that have a non-empty value in at least one row. + + Arguments: + - preferred-order: Ordered sequence of keyword headers (e.g. [:submodule :group :value]) + - rows: Sequence of row maps + + Returns: + Filtered sequence of headers" + [preferred-order rows] + (filter (fn [h] + (some #(seq (str (get % h ""))) rows)) + preferred-order)) + +(defn render-table + "Render a Gherkin data table with column-aligned padding. + + Arguments: + - headers: Ordered vector of column keywords to include + - rows: Sequence of row maps + + Returns: + Multi-line string of the table (all rows including header)" + [headers rows] + (when (and (seq headers) (seq rows)) + (let [get-cell (fn [row h] (str (get row h ""))) + col-widths (map (fn [h] + (let [header-w (count (name h)) + data-w (apply max 0 (map #(count (get-cell % h)) rows))] + (max header-w data-w))) + headers) + pad (fn [s w] (str s (apply str (repeat (- w (count s)) " ")))) + fmt-row (fn [cells] + (str TABLE-INDENT "| " + (str/join " | " (map pad cells col-widths)) + " |")) + header-row (fmt-row (map name headers)) + data-rows (map (fn [row] + (fmt-row (map #(get-cell row %) headers))) + rows)] + (str/join "\n" (cons header-row data-rows))))) + +(defn- comps->row + "Build a table-row map from stripped path components. + Always includes :submodule; adds :group, :subgroup, and :value when present." + [comps value & {:keys [subgroup?]}] + (cond-> {:submodule (first comps)} + (>= (count comps) 2) (assoc :group (second comps)) + (and subgroup? (>= (count comps) 3)) (assoc :subgroup (nth comps 2)) + value (assoc :value value))) + +(defn conditional->output-row + "Convert a positive output conditional (:values=[\"true\"]) to a table row map. + Returns nil for non-positive-output conditionals." + [conditional] + (when (and (= (get-in conditional [:group-variable :io]) :output) + (= (:values conditional) ["true"])) + (comps->row (path->table-components (get-in conditional [:group-variable :path])) + (get-in conditional [:group-variable :group-variable/translated-name])))) + +(defn conditional->negative-output-row + "Convert a negative output conditional (:values=[\"false\"]) to a table row map. + Returns nil for non-negative-output conditionals." + [conditional] + (when (and (= (get-in conditional [:group-variable :io]) :output) + (= (:values conditional) ["false"])) + (comps->row (path->table-components (get-in conditional [:group-variable :path])) + (get-in conditional [:group-variable :group-variable/translated-name])))) + +(defn conditional->input-row + "Convert an input conditional to a table row map. + Returns nil for non-input conditionals." + [conditional] + (when (= (get-in conditional [:group-variable :io]) :input) + (comps->row (path->table-components (get-in conditional [:group-variable :path])) + (first (:values conditional)) + :subgroup? true))) + +(defn target->table-row + "Convert a target entity path to a Then-table row map. + Strips module and :io keyword; maps remaining components to + submodule / group / value." + [path] + (let [comps (path->table-components path)] + (cond-> {:submodule (first comps)} + (>= (count comps) 2) (assoc :group (second comps)) + (>= (count comps) 3) (assoc :value (nth comps 2))))) + +;; =========================================================================================================== +;; Module Detection Functions (Task 5.5) +;; =========================================================================================================== + +(defn extract-module-from-path + "Extract module keyword from first path element. + + Arguments: + - path: Vector like [\"Surface\" \"Fuel\" \"Standard\"] + + Returns: + Keyword like :surface, :crown, :mortality, :contain + + Examples: + [\"Surface\" ...] -> :surface + [\"Crown\" ...] -> :crown + [\"Mortality\" ...] -> :mortality + [\"Contain\" ...] -> :contain" + [path] + (when-let [module-el (first path)] + (keyword (str/lower-case (pname module-el))))) + +(defn determine-module-combination + "Determine module combination from a set of modules. + + Maps sets of modules to their corresponding module combination sets. + Returns set of modules for valid combinations, or :unsupported for invalid ones. + + Valid combinations: + - Single surface: #{:surface} + - Surface & Crown: #{:surface :crown} + - Surface & Mortality: #{:surface :mortality} + - Surface & Contain: #{:surface :contain} + + Note: Mortality and Contain always require Surface to be included. + + Arguments: + - modules: Set of module keywords (e.g., #{:surface :crown}) + + Returns: + Set of modules for valid combinations, or :unsupported keyword for invalid" + [modules] + (let [module-count (count modules)] + (cond + ;; Single modules + (= modules #{:surface}) #{:surface} + (= modules #{:crown}) #{:surface :crown} ;Always includes surface + (= modules #{:mortality}) #{:surface :mortality} ; Always includes surface + (= modules #{:contain}) #{:surface :contain} ; Always includes surface + + ;; Two module combinations + (= modules #{:surface :crown}) #{:surface :crown} + (= modules #{:surface :mortality}) #{:surface :mortality} + (= modules #{:surface :contain}) #{:surface :contain} + + ;; Unsupported combinations (3+ modules or invalid pairs) + (>= module-count 3) :unsupported + :else :unsupported))) + +(defn extract-modules-from-paths + "Extract unique module keywords from a collection of paths. + + Arguments: + - paths: Set/sequence of path vectors + + Returns: + Set of module keywords like #{:surface :crown}" + [paths] + (set (keep extract-module-from-path paths))) + +(defn group-conditionals-by-module-combo + "Group output conditionals by the module-combo implied by their path, + plus the entity's own module. + + Arguments: + - entity-mod: Keyword for the entity's own module (e.g. :crown), or nil + - conds: Sequence of output conditional maps + + Returns: + Map of {module-combo -> [conditionals]}" + [entity-mod conds] + (group-by (fn [c] + (let [path (get-in c [:group-variable :path]) + mods (cond-> (extract-modules-from-paths [path]) + entity-mod (conj entity-mod))] + (determine-module-combination mods))) + conds)) + +(defn module-set-to-string + "Convert module set to kebab-case string for filenames. + Sorts modules alphabetically for consistency. + + Arguments: + - module-set: Set of module keywords (e.g., #{:surface :crown}) + + Returns: + String representation for filenames + + Examples: + #{:surface} -> \"surface\" + #{:surface :crown} -> \"crown-surface\" + #{:surface :mortality} -> \"mortality-surface\"" + [module-set] + (str/join "-" (sort (map name module-set)))) + +(defn module-set-to-title + "Convert module set to human-readable title with capitalization. + Surface always appears first to match worksheet naming convention. + + Arguments: + - module-set: Set of module keywords (e.g., #{:surface :crown}) + + Returns: + String representation for titles + + Examples: + #{:surface} -> \"Surface\" + #{:surface :crown} -> \"Surface & Crown\" + #{:surface :mortality} -> \"Surface & Mortality\"" + [module-set] + (let [surface-first (fn [m] (if (= m "surface") "" m)) + sorted-modules (sort-by surface-first (map name module-set)) + capitalized (map str/capitalize sorted-modules)] + (str/join " & " capitalized))) + +(defn module-to-given-statement + "Generate Gherkin 'Given' statement from module combination. + + Maps module combination sets to their corresponding worksheet initialization statements. + + Arguments: + - module-combo: Set of modules (e.g., #{:surface :crown}) or :unsupported keyword + + Returns: + String containing the 'Given' step for starting the appropriate worksheet" + [module-combo] + (cond + (= module-combo #{:surface}) + "Given I have started a new Surface Worksheet in Guided Mode" + + (= module-combo #{:crown}) + "Given I have started a new Crown Worksheet in Guided Mode" + + (= module-combo #{:surface :crown}) + "Given I have started a new Surface & Crown Worksheet in Guided Mode" + + (= module-combo #{:surface :mortality}) + "Given I have started a new Surface & Mortality Worksheet in Guided Mode" + + (= module-combo #{:surface :contain}) + "Given I have started a new Surface & Contain Worksheet in Guided Mode" + + ;; Default for unsupported or unknown + :else + (str "Given I have started a new " (module-set-to-title module-combo) " Worksheet in Guided Mode"))) + +;; =========================================================================================================== +;; Research Filtering Functions (Task 5.6) +;; =========================================================================================================== + +(defn has-research-dependency? + "Check if a conditional references research variables. + + Recursively checks :group-variable/research?, :submodule/research?, + and sub-conditionals. + + Arguments: + - conditional: Conditional map + + Returns: + Boolean true if any research flag is true" + [conditional] + (let [gv-research? (get-in conditional [:group-variable :group-variable/research?]) + submodule-research? (get-in conditional [:group-variable :submodule/research?]) + sub-conds (:sub-conditionals conditional)] + + (or (true? gv-research?) + (true? submodule-research?) + (when (seq sub-conds) + (some has-research-dependency? sub-conds))))) + +(defn conditionally-set? + "True if a conditional references a conditionally-set group-variable. + These are auto-set by the app and never shown in the UI, so they are + never valid output triggers." + [conditional] + (true? (get-in conditional [:group-variable :group-variable/conditionally-set?]))) + +(defn single-non-surface-module-conditional? + "True if a conditional gates visibility on a SINGLE non-surface module run + (crown-, contain-, or mortality-only) — a combination the harness can't run + (it supports surface-only and surface-paired combos only)." + [conditional] + (and (= :module (:type conditional)) + (= 1 (count (:values conditional))) + (not= "surface" (first (:values conditional))))) + +(defn requires-unsupported-single-module? + "True if any of the entity's conditionals — its own or inherited from + :ancestors, including nested :sub-conditionals — requires a single + non-surface module run." + [entity] + (let [own (get-in entity [:conditionals :conditionals] []) + ancestor (mapcat #(get-in % [:conditionals :conditionals] []) + (:ancestors entity [])) + walk (fn walk [cs] (mapcat (fn [c] (cons c (walk (:sub-conditionals c)))) cs))] + (boolean (some single-non-surface-module-conditional? + (walk (concat own ancestor)))))) + +(defn should-skip-group? + "Determine if a group should be excluded from feature generation. + + Checks: + - Group's :group/research? field + - Group's :group/hidden? field + - Group is gated on a single non-surface module run (unsupported combo) + + Note: Does NOT check individual conditionals for research - those will be filtered + during scenario generation to remove research items while keeping non-research alternatives. + + Arguments: + - group: Group map with :conditionals and optional :ancestors + + Returns: + Boolean true if group should be skipped" + [group] + (or (true? (:group/research? group)) + (true? (:group/hidden? group)) + (requires-unsupported-single-module? group))) + +(defn has-only-module-conditionals? + "Check if group has ONLY module-type conditionals for contain/crown/mortality. + + Skip groups that have: + - ALL conditionals are module-type (:type = :module) + - AND any module value is 'contain', 'crown', or 'mortality' + + Do NOT skip if: + - Group has any group-variable conditionals (outputs/inputs) + - Module is 'surface' (surface-only scenarios are kept) + + Arguments: + - group: Group map with :conditionals and :ancestors + + Returns: + Boolean true if group should be skipped" + [group] + (let [;; Collect all conditionals from group and ancestors + group-conds (get-in group [:conditionals :conditionals] []) + ancestor-conds (mapcat #(get-in % [:conditionals :conditionals] []) + (:ancestors group [])) + all-conds (concat group-conds ancestor-conds) + + ;; Check if ALL conditionals are module-type + all-module-type? (every? #(= :module (:type %)) all-conds) + + ;; Check if any module is contain/crown/mortality + skip-modules #{"contain" "crown" "mortality"} + has-skip-module? (boolean (some (fn [cond] + (and (= :module (:type cond)) + (some skip-modules (:values cond)))) + all-conds))] + + (and all-module-type? has-skip-module?))) + +(defn should-skip-submodule? + "Determine if a submodule should be excluded from feature generation. + + Checks for research dependencies in: + - Submodule's :submodule/research? field + - Module-only conditionals (contain/crown/mortality) + + Note: Does NOT check individual conditionals for research - those will be filtered + during scenario generation to remove research items while keeping non-research alternatives. + + Arguments: + - submodule: Submodule map with :conditionals and optional :ancestors + + Returns: + Boolean true if submodule should be skipped" + [submodule] + (let [submodule-research? (:submodule/research? submodule)] + (or (true? submodule-research?) + (has-only-module-conditionals? submodule) + (requires-unsupported-single-module? submodule)))) + +;; =========================================================================================================== +;; Module Compatibility Filtering Functions (Task 5.7) +;; =========================================================================================================== + +(defn is-path-compatible-with-modules? + "Check if a path's module is compatible with active modules. + + Arguments: + - path: Path vector like [\"Surface\" \"Fuel\" \"Standard\"] + - active-modules: Set of active module keywords like #{:surface :crown}, or :unsupported + + Returns: + Boolean true if path's module is in active modules" + [path active-modules] + (if (= active-modules :unsupported) + false + (when-let [path-module (extract-module-from-path path)] + (contains? active-modules path-module)))) + +(defn filter-conditionals-by-module + "Remove conditionals with modules incompatible with active modules. + + Recursively filters :sub-conditionals as well. + + Arguments: + - conditionals: Sequence of conditional maps + - active-modules: Set of active module keywords + + Returns: + Filtered sequence of conditionals" + [conditionals active-modules] + (keep (fn [cond] + (let [path (get-in cond [:group-variable :path]) + compatible? (if path + (is-path-compatible-with-modules? path active-modules) + true) ; module-type conditionals don't have paths + sub-conds (:sub-conditionals cond)] + + (when compatible? + (if (seq sub-conds) + ;; Recursively filter sub-conditionals + (assoc cond :sub-conditionals + (filter-conditionals-by-module sub-conds active-modules)) + cond)))) + conditionals)) + +;; =========================================================================================================== +;; Ancestor Expansion Logic (Task 6.2) +;; =========================================================================================================== + +(defn flatten-conditional-to-paths + "Recursively flatten a single conditional into all possible paths via DFS. + + Handles nested sub-conditionals with :or operators by creating separate paths. + Handles :in operator with multiple values by optimizing to first value only. + + Arguments: + - conditional: A conditional map with optional :sub-conditionals + + Returns: + Sequence of paths, where each path is a sequence of conditionals. + + Examples: + - Simple conditional (no subs): [[conditional]] + - Conditional with :in [v1 v2]: [[cond-with-v1]] (optimized to first value) + - Conditional with sub-OR [s1 s2]: [[cond s1] [cond s2]]" + [conditional] + (let [sub-conditionals (:sub-conditionals conditional) + sub-operator (:sub-conditional-operator conditional) + values (:values conditional) + operator (:operator conditional) + ;; Apply optimization for :in operator - use only first value + optimized-values (if (and (= operator :in) (> (count values) 1)) + [(first values)] + values)] + + (cond + ;; No sub-conditionals: return the conditional with optimized values + (empty? sub-conditionals) + [[(assoc conditional :values optimized-values)]] + + ;; Sub-conditionals with :or operator - create separate branches + (= sub-operator :or) + (let [;; Recursively flatten each sub-conditional + sub-paths (map flatten-conditional-to-paths sub-conditionals) + ;; Parent conditional without sub-conditionals, with optimized values + parent-cond (-> conditional + (dissoc :sub-conditionals :sub-conditional-operator) + (assoc :values optimized-values))] + ;; Create paths combining parent with each sub-path + (for [sub-path (apply concat sub-paths)] + (cons parent-cond sub-path))) + + ;; Sub-conditionals with :and or nil - keep in same path + :else + (let [;; Recursively flatten each sub-conditional + sub-paths (map flatten-conditional-to-paths sub-conditionals) + ;; Create cartesian product of all sub-paths + sub-combinations (apply combo/cartesian-product sub-paths) + ;; Parent conditional without sub-conditionals, with optimized values + parent-cond (-> conditional + (dissoc :sub-conditionals :sub-conditional-operator) + (assoc :values optimized-values))] + ;; Create paths combining parent with each sub-combination + (for [sub-combo sub-combinations + :let [flattened-subs (apply concat sub-combo)]] + (cons parent-cond flattened-subs)))))) + +(defn expand-or-conditionals + "Expand conditionals into all possible paths using DFS to handle nested sub-conditionals. + + For :or operator: each conditional creates separate branches. + For :and or nil: conditionals are combined via cartesian product. + Recursively handles nested sub-conditionals with :or operators. + + IMPORTANT: Filters out malformed conditionals that are missing required fields. + A valid conditional must have either: + - :type :module (module conditionals), OR + - :type :group-variable with a non-nil :group-variable map (output/input conditionals) + + Arguments: + - conditionals-info: Map with :conditionals and :conditionals-operator + + Returns: + Sequence of paths, where each path is a flat sequence of conditionals" + [conditionals-info] + (let [operator (:conditionals-operator conditionals-info) + conditionals (:conditionals conditionals-info) + + ;; Filter out malformed and conditionally-set conditionals + valid-conditionals (filter + (fn [cond] + (and + (not (conditionally-set? cond)) + (or + ;; Module conditionals are valid (have :type :module) + (= (:type cond) :module) + ;; Group-variable conditionals must have :group-variable map + (and (= (:type cond) :group-variable) + (some? (:group-variable cond)))))) + conditionals)] + (if (= operator :or) + ;; :or operator - create separate branch for each conditional + ;; Each conditional may have nested sub-conditionals that need flattening + (mapcat flatten-conditional-to-paths valid-conditionals) + ;; :and operator or nil - combine all conditionals + ;; Create cartesian product of all conditional paths + (let [all-paths (map flatten-conditional-to-paths valid-conditionals)] + (if (empty? all-paths) + [[]] ; no conditionals + (let [combinations (apply combo/cartesian-product all-paths)] + (map #(apply concat %) combinations))))))) + +(defn output-gv-signature + "Identity of an output group-variable conditional: its group :path plus the + variable's translated name. Path alone is ambiguous — e.g. 'Burning Pile' and + 'Wind-Driven Surface Fire (Grass Only)' are different variables sharing the same + 'Maximum Spotting Distance' group path — so the translated name is needed to tell + sibling outputs apart." + [conditional] + (let [gv (:group-variable conditional)] + [(:path gv) (:group-variable/translated-name gv)])) + +(defn entity-positive-output-signatures + "Set of output-gv-signatures for an entity's own POSITIVE output conditionals + (:io :output, :values [\"true\"]). Used to steer ancestor OR-branch selection + toward the branch the entity already satisfies." + [entity-conditionals] + (into #{} + (comp (filter #(and (= (get-in % [:group-variable :io]) :output) + (= (:values %) ["true"]))) + (map output-gv-signature)) + (:conditionals entity-conditionals))) + +(defn expand-ancestor-or-branches + "Expand ancestors using ONE branch from each ancestor's OR conditionals. + + This significantly reduces the number of generated scenarios by selecting just one + valid path through each ancestor's conditionals rather than exploring all combinations. + + Branch selection prefers a branch that the entity's own positive-output conditionals + already satisfy (preferred-sigs, a set of output-gv-signatures), so an ancestor + visibility gate the entity already trips is not re-satisfied with an unrelated, + redundant output. E.g. the Spot input submodule is gated on (Burning Pile OR + Wind-Driven Surface Fire); an input whose own gate requires Wind-Driven should NOT + also select Burning Pile. Falls back to the FIRST branch when nothing matches (or + when preferred-sigs is empty), preserving the historical behavior. + + For ancestors with :and operators, all conditionals are included. + + Arguments: + - ancestors: Sequence of ancestor maps with :conditionals + - preferred-sigs: (optional) set of entity output-gv-signatures to prefer + + Returns: + Sequence with a single ancestor setup (flat list of conditionals from chosen branches)" + ([ancestors] + (expand-ancestor-or-branches ancestors #{})) + ([ancestors preferred-sigs] + (if (empty? ancestors) + [[]] ; no ancestors, return single empty setup + (let [;; Expand each ancestor's conditionals into all possible paths + expanded-branches (map #(expand-or-conditionals (:conditionals %)) ancestors)] + (if (every? empty? expanded-branches) + [[]] ; all ancestors have no conditionals + ;; From each ancestor pick the branch the entity already satisfies, else the first. + (let [pick-branch (fn [branches] + (or (first (filter (fn [branch] + (some (fn [c] + (and (= (:type c) :group-variable) + (contains? preferred-sigs + (output-gv-signature c)))) + branch)) + branches)) + (first branches))) + chosen-branches (map pick-branch expanded-branches) + ;; Combine all chosen branches into a single ancestor setup + combined-setup (apply concat chosen-branches)] + [combined-setup])))))) + +(defn has-any-research-conditional? + "Check if any conditional in a list has research dependencies. + + Arguments: + - conditionals: Sequence of conditional maps + + Returns: + Boolean true if any conditional has research dependencies" + [conditionals] + (some has-research-dependency? conditionals)) + +(defn deduplicate-ancestor-conditionals + [conditionals] + (into #{} conditionals)) + +;; =========================================================================================================== +;; Setup Step Generation (Task 6.3) +;; =========================================================================================================== + +(defn collect-and-sort-setup-steps + "Organize all setup steps. + Separate outputs (positive), negative outputs, and inputs into three lists. + Sort each list by :submodule/order first, then :group/order. + + Arguments: + - conditionals: Sequence of conditional maps + + Returns: + Map with :outputs, :negative-outputs, :inputs keys" + [conditionals] + (let [;; Separate by type — drop conditionally-set variables from all categories + outputs (filter #(and (= (get-in % [:group-variable :io]) :output) + (= (:values %) ["true"]) + (not (conditionally-set? %))) + conditionals) + negative-outputs (filter #(and (= (get-in % [:group-variable :io]) :output) + (= (:values %) ["false"]) + (not (conditionally-set? %))) + conditionals) + inputs (filter #(and (= (get-in % [:group-variable :io]) :input) + (not (conditionally-set? %))) + conditionals) + ;; Sort function — nil-safe on all three keys so stale EDN entries don't throw + sort-fn (fn [conds] + (sort-by (juxt #(or (get-in % [:group-variable :submodule/order]) 0) + #(or (get-in % [:group-variable :group/order]) 0) + #(or (get-in % [:group-variable :group-variable/order]) 0)) + conds))] + {:outputs (sort-fn outputs) + :negative-outputs (sort-fn negative-outputs) + :inputs (sort-fn inputs)})) + +;; =========================================================================================================== +;; Scenario Rendering Functions +;; =========================================================================================================== + +(defn render-setup-blocks + "Render the fixed setup step blocks (output/negative-output/input tables). + Returns a sequence of strings (step line + table string) for each non-empty block. + + Arguments: + - setup-conds: Sequence of setup conditionals + + Returns: + Sequence of strings to join with newlines" + [setup-conds] + (let [sorted-steps (collect-and-sort-setup-steps setup-conds) + output-rows (keep conditional->output-row (:outputs sorted-steps)) + neg-rows (keep conditional->negative-output-row (:negative-outputs sorted-steps)) + input-rows (keep conditional->input-row (:inputs sorted-steps))] + (concat + (when (seq output-rows) + [(str STEP-INDENT "When these output paths are selected") + (render-table (present-headers [:submodule :group :value] output-rows) output-rows)]) + (when (seq neg-rows) + [(str STEP-INDENT "When these output paths are NOT selected") + (render-table (present-headers [:submodule :group :value] neg-rows) neg-rows)]) + (when (seq input-rows) + [(str STEP-INDENT "When these input paths are entered") + (render-table (present-headers [:submodule :group :subgroup :value] input-rows) input-rows)])))) + +(defn render-scenario + "Render a plain Scenario block (no Examples table). + + Arguments: + - scenario-name: Display name without 'Scenario:' prefix (added here) + - module-combo: Module set (for Given statement) + - setup-conds: All setup conditionals (ancestor + entity) + - target-path: Entity path (for Then table) + + Returns: + Complete scenario text" + [scenario-name module-combo setup-conds target-path] + (let [given-stmt (module-to-given-statement module-combo) + setup-blocks (render-setup-blocks setup-conds) + target-row (target->table-row target-path) + then-headers (present-headers [:submodule :group :value] [target-row])] + (str/join "\n" + (concat + [(str SCENARIO-INDENT "@core") + (str SCENARIO-INDENT "Scenario: " scenario-name) + (str STEP-INDENT given-stmt)] + setup-blocks + [(str STEP-INDENT "Then the following input paths are displayed:") + (render-table then-headers [target-row])])))) + +(defn render-outline + "Render a Scenario Outline block with Examples table. + + Arguments: + - scenario-name: Display name without 'Scenario Outline:' prefix (added here) + - module-combo: Module set (for Given statement) + - setup-conds: Fixed setup conditionals (ancestor) + - trigger-type: :output or :input + - has-subgroup?: Boolean - whether trigger path has 3 stripped components + - example-rows: Sequence of row maps for Examples table + - target-path: Entity path (for Then table) + - tag: :core or :extended + + Returns: + Complete scenario outline text" + [scenario-name module-combo setup-conds trigger-type has-subgroup? example-rows target-path tag] + (let [given-stmt (module-to-given-statement module-combo) + setup-blocks (render-setup-blocks setup-conds) + target-row (target->table-row target-path) + then-headers (present-headers [:submodule :group :value] [target-row]) + tag-str (if (= tag :core) "@core" "@extended") + when-step (if (= trigger-type :output) + (str STEP-INDENT "When this output path is selected : : ") + (if has-subgroup? + (str STEP-INDENT "When this input path is entered : : : ") + (str STEP-INDENT "When this input path is entered : : "))) + ex-headers (if (= trigger-type :output) + [:submodule :group :value] + (if has-subgroup? + [:submodule :group :subgroup :value] + [:submodule :group :value]))] + (str/join "\n" + (concat + [(str SCENARIO-INDENT tag-str) + (str SCENARIO-INDENT "Scenario Outline: " scenario-name) + (str STEP-INDENT given-stmt)] + setup-blocks + [when-step + (str STEP-INDENT "Then the following input paths are displayed:") + (render-table then-headers [target-row]) + "" + (str STEP-INDENT "Examples: This scenario is repeated for each of these rows") + (render-table ex-headers example-rows)])))) + +(defn classify-entity-trigger + "Classify the entity's own conditionals to determine what kind of scenario to emit. + + Returns a map with :type and relevant conditionals: + - {:type :compound-output :in-cond {...} :output-conds [...]} - :in input with output :sub-conditionals + - {:type :output-or :conditionals [...]} - :or with ≥2 positive output conditionals + - {:type :input-in :conditional {...}} - single conditional with :in and ≥2 values + - {:type :single :conditionals [...]} - everything else (plain Scenario)" + [entity-conditionals] + (let [operator (:conditionals-operator entity-conditionals) + all-conds (:conditionals entity-conditionals) + valid-conds (filter (fn [c] + (and + (not (conditionally-set? c)) + (or (= (:type c) :module) + (and (= (:type c) :group-variable) + (some? (:group-variable c)))))) + all-conds) + in-cond (first (filter #(= (:operator %) :in) valid-conds)) + compound-in (first (filter (fn [c] + (and (= (:operator c) :in) + (seq (:sub-conditionals c)) + (every? #(= (get-in % [:group-variable :io]) :output) + (:sub-conditionals c)))) + valid-conds))] + (cond + ;; :in input conditional with output :sub-conditionals → compound outline + ;; (outputs drive Examples:, input value becomes fixed setup per scenario) + compound-in + {:type :compound-output :in-cond compound-in :output-conds (:sub-conditionals compound-in)} + + ;; Single :in conditional with multiple values → input-in outline + (and in-cond (> (count (:values in-cond)) 1)) + {:type :input-in :conditional in-cond} + + ;; :or operator with ≥2 positive output group-variable conditionals → output-or outline + ;; Module conditionals are allowed alongside outputs and are excluded from the rows. + (and (= operator :or) + (let [gv-conds (filter #(= (:type %) :group-variable) valid-conds)] + (and (>= (count gv-conds) 2) + (every? (fn [c] + (and (= (get-in c [:group-variable :io]) :output) + (= (:values c) ["true"]))) + gv-conds)))) + {:type :output-or :conditionals (filter #(= (:type %) :group-variable) valid-conds)} + + ;; Everything else → single / plain Scenario + :else + {:type :single :conditionals valid-conds}))) + +(defn build-scenario-name + "Build a descriptive scenario name from entity's own conditionals. + + Arguments: + - entity-setup: Sequence of conditionals (entity's own, not ancestors) + - entity-name: Name of the entity (group or submodule) + + Returns: + String like 'Slope is displayed' or 'Burning Pile is displayed when Burning Pile is selected'" + [entity-setup entity-name] + (let [output-conditionals (filter (fn [cond] + (and (= (get-in cond [:group-variable :io]) :output) + (= (:values cond) ["true"]))) + entity-setup) + output-names (sort (map #(get-in % [:group-variable :group-variable/translated-name]) + output-conditionals)) + output-count (count output-names)] + (case output-count + 0 (str entity-name " is displayed") + 1 (str entity-name " is displayed when " (first output-names) " is selected") + 2 (str entity-name " is displayed when " + (first output-names) " and " (second output-names) " are selected") + (str entity-name " is displayed when " + (str/join ", " (butlast output-names)) + ", and " (last output-names) " are selected")))) + +;; =========================================================================================================== +;; Scenario Orchestration (Task 6.5) +;; =========================================================================================================== + +(defn determine-module-combo-for-combination + "Determine the module combination for a specific ancestor + entity conditional combination. + + Analyzes the paths in both ancestor-setup and entity-setup to determine + which worksheet type (module combination) is needed for this scenario. + + Arguments: + - ancestor-setup: Sequence of conditionals from ancestors + - entity-setup: Sequence of conditionals from the entity itself + - entity-path: Path of the entity being processed (e.g., [\"Surface\" \"Wind and Slope\" :input \"Slope\"]) + + Returns: + Module combination keyword like :surface, :surface-crown, :surface-mortality, etc." + [ancestor-setup entity-setup entity-path] + (let [;; Collect all paths from both setups + all-conditionals (concat ancestor-setup entity-setup) + all-paths (keep #(get-in % [:group-variable :path]) all-conditionals) + + ;; Extract entity's own module + entity-module (extract-module-from-path entity-path) + + ;; Extract modules from paths + path-modules (extract-modules-from-paths all-paths) + + ;; Combine with entity module + all-modules (if entity-module + (conj path-modules entity-module) + path-modules) + + ;; Determine combination + module-combo (determine-module-combination all-modules)] + module-combo)) + +(defn generate-scenarios-for-entity + "Generate all scenarios for one entity (group or submodule). + + Classifies the entity's trigger type, expands ancestor setup via first-branch + optimization, then renders the appropriate Scenario or Scenario Outline. + + - :output-or → one @core Scenario Outline per module-combo (Examples = all OR rows) + - :input-in → @core outline (first row) + @extended outline (all rows) + - :single → plain @core Scenario with all conditionals folded into setup tables + + Arguments: + - all-data: Map with path vectors as keys, entity info as values + - entity: Group or submodule map with :conditionals + + Returns: + Sequence of scenario maps with :text, :module, :group-path" + [all-data entity] + (when-not (or (and (:group/translated-name entity) (should-skip-group? entity)) + (and (:submodule/name entity) (should-skip-submodule? entity)) + (has-only-module-conditionals? entity) + ;; Skip :output parent entities whose only conditionals are :type :module — + ;; they are structural containers (always visible when module is active) + ;; and do not represent "which inputs are displayed" test scenarios. + (and (= :output (:submodule/io entity)) + (let [conds (get-in entity [:conditionals :conditionals] [])] + (and (seq conds) (every? #(= :module (:type %)) conds))))) + (let [entity-path (:path entity) + entity-name (or (:group/translated-name entity) (pname (:submodule/name entity))) + entity-mod (extract-module-from-path entity-path) + + ;; ===== Classify the entity's own trigger (must precede ancestor expansion) ===== + entity-conditionals (:conditionals entity) + trigger (classify-entity-trigger entity-conditionals) + + ;; ===== Ancestor expansion ===== + ;; For :or entities the sibling conditionals are mutually exclusive. Seeding + ;; ancestor collection from all of them pulls in contradictory ancestor outputs + ;; (e.g. Wind-Driven both selected AND NOT selected). Narrow to the active + ;; trigger branch so only the relevant ancestor tree is followed. + direct-ancestors (get-ancestors all-data entity-path) + all-direct-anc-conds (mapcat #(get-in % [:conditionals :conditionals]) direct-ancestors) + entity-own-conds (get-in entity [:conditionals :conditionals]) + entity-operator (get-in entity [:conditionals :conditionals-operator]) + conds-for-ancestry (if (= entity-operator :or) + (case (:type trigger) + :input-in [(:conditional trigger)] + :compound-output [(:in-cond trigger)] + entity-own-conds) + entity-own-conds) + all-conds-to-follow (concat all-direct-anc-conds conds-for-ancestry) + conditional-ancestors (when (seq all-conds-to-follow) + (collect-all-ancestral-entities all-data all-conds-to-follow)) + ancestors (vec (vals (into {} (map (juxt :path identity) + (concat direct-ancestors conditional-ancestors))))) + ;; Prefer ancestor OR-branches the entity's own outputs already satisfy, so an + ;; ancestor visibility gate isn't re-tripped with a redundant sibling output + ;; (e.g. Burning Pile alongside the Wind-Driven Surface Fire the entity requires). + ;; Scoped to :single triggers: only there are the entity's own outputs rendered + ;; in the scenario, so aligning the branch removes a genuine redundancy without + ;; changing the module combo (the entity's outputs already fix it). Other trigger + ;; types don't render the entity's outputs, so first-branch stays — steering them + ;; would cause spurious module drift (e.g. Surface → Surface & Crown). + entity-out-sigs (if (= (:type trigger) :single) + (entity-positive-output-signatures entity-conditionals) + #{}) + ancestor-setup (first (map deduplicate-ancestor-conditionals + (expand-ancestor-or-branches ancestors entity-out-sigs)))] + + (case (:type trigger) + + ;; --------- :compound-output --------- + ;; :in input with output :sub-conditionals: outputs drive Examples:, each input value + ;; becomes fixed setup → cross-product of (module-combo × input-value) → @core outlines + :compound-output + (let [in-cond (:in-cond trigger) + in-values (:values in-cond) + out-conds (remove #(or (has-research-dependency? %) (conditionally-set? %)) (:output-conds trigger)) + rows-by-combo (group-conditionals-by-module-combo entity-mod out-conds) + multi? (> (count rows-by-combo) 1) + var-name (get-in in-cond [:group-variable :group-variable/translated-name])] + (for [[module-combo combo-outs] rows-by-combo + value in-values + :when (and (not= module-combo :unsupported) (seq combo-outs))] + (let [filtered-anc (filter #(= (:type %) :module) + (filter-conditionals-by-module ancestor-setup module-combo)) + input-cond (-> in-cond + (assoc :operator :equal :values [value]) + (dissoc :sub-conditionals :sub-conditional-operator)) + anc-conds (deduplicate-ancestor-conditionals filtered-anc) + example-rows (keep conditional->output-row combo-outs) + sname (str entity-name " is displayed" + (when multi? + (str " with " (module-set-to-title module-combo) " outputs")) + " (" var-name " " value ")") + ;; Render inline: output placeholder first, then fixed input block, then Then. + ;; This matches the committed step order (output trigger → input setup → Then). + given-stmt (module-to-given-statement module-combo) + input-row (conditional->input-row input-cond) + input-table (render-table (present-headers [:submodule :group :subgroup :value] + [input-row]) + [input-row]) + target-row (target->table-row entity-path) + then-headers (present-headers [:submodule :group :value] [target-row]) + when-step (str STEP-INDENT "When this output path is selected : : ") + scenario-text (str/join "\n" + (concat + [(str SCENARIO-INDENT "@core") + (str SCENARIO-INDENT "Scenario Outline: " sname) + (str STEP-INDENT given-stmt)] + (render-setup-blocks anc-conds) + [when-step + (str STEP-INDENT "When these input paths are entered") + input-table + (str STEP-INDENT "Then the following input paths are displayed:") + (render-table then-headers [target-row]) + "" + (str STEP-INDENT "Examples: This scenario is repeated for each of these rows") + (render-table [:submodule :group :value] example-rows)]))] + {:text scenario-text + :module module-combo + :group-path entity-path}))) + + ;; --------- :output-or --------- + ;; Group the OR output rows by module-combo; one @core outline per group + :output-or + (let [or-conds (remove #(or (has-research-dependency? %) (conditionally-set? %)) (:conditionals trigger)) + rows-by-combo (group-conditionals-by-module-combo entity-mod or-conds) + multi? (> (count rows-by-combo) 1)] + (keep (fn [[module-combo or-conds-for-combo]] + (when (and (not= module-combo :unsupported) + (seq or-conds-for-combo)) + ;; For output-or, strip ancestor group-variable conds (entity outputs + ;; enable both entity and its ancestors) + (let [filtered-anc (filter #(= (:type %) :module) + (filter-conditionals-by-module ancestor-setup module-combo)) + setup-conds (deduplicate-ancestor-conditionals filtered-anc) + example-rows (keep conditional->output-row or-conds-for-combo) + sname (str entity-name " is displayed" + (when multi? + (str " with " (module-set-to-title module-combo) " outputs")))] + {:text (render-outline sname module-combo setup-conds + :output false example-rows entity-path :core) + :module module-combo + :group-path entity-path}))) + rows-by-combo)) + + ;; --------- :input-in --------- + ;; @core outline (first value row) + @extended outline (all value rows) + :input-in + (let [in-cond (:conditional trigger) + path (get-in in-cond [:group-variable :path]) + var-name (get-in in-cond [:group-variable :group-variable/translated-name]) + comps (path->table-components path) + has-subgroup? (= 3 (count comps)) + all-values (:values in-cond) + ;; Filter research from ancestor setup + anc-paths (keep #(get-in % [:group-variable :path]) ancestor-setup) + anc-mods (extract-modules-from-paths anc-paths) + all-mods (cond-> anc-mods entity-mod (conj entity-mod)) + module-combo (determine-module-combination all-mods)] + (when (not= module-combo :unsupported) + (let [filtered-anc (filter-conditionals-by-module ancestor-setup module-combo) + setup-conds (deduplicate-ancestor-conditionals filtered-anc) + make-row (fn [v] + (cond-> {:submodule (first comps)} + (>= (count comps) 2) (assoc :group (second comps)) + has-subgroup? (assoc :subgroup (nth comps 2)) + v (assoc :value v))) + first-row [(make-row (first all-values))] + all-rows (map make-row all-values) + sname (str entity-name " is displayed with these " var-name)] + (when-not (has-any-research-conditional? setup-conds) + [{:text (render-outline sname module-combo setup-conds + :input has-subgroup? first-row entity-path :core) + :module module-combo + :group-path entity-path} + {:text (render-outline (str sname " (Extended)") module-combo setup-conds + :input has-subgroup? all-rows entity-path :extended) + :module module-combo + :group-path entity-path}])))) + + ;; --------- :single --------- + ;; All entity conditionals fixed → fold into setup tables → plain Scenario + :single + (let [entity-conds (filter (fn [c] + (or (= (:type c) :module) + (and (= (:type c) :group-variable) + (some? (:group-variable c))))) + (:conditionals trigger)) + all-setup-raw (concat ancestor-setup entity-conds) + all-paths (keep #(get-in % [:group-variable :path]) all-setup-raw) + all-mods (cond-> (extract-modules-from-paths all-paths) + entity-mod (conj entity-mod)) + module-combo (determine-module-combination all-mods)] + (when (not= module-combo :unsupported) + (let [mod-conds (->> all-setup-raw + (filter #(= (:type %) :module)) + (map #(set (map keyword (:values %))))) + compatible? (every? #(set/subset? % module-combo) mod-conds)] + (when compatible? + (let [filtered-anc (filter-conditionals-by-module ancestor-setup module-combo) + filtered-entity (filter-conditionals-by-module entity-conds module-combo) + all-setup-conds (remove #(or (has-research-dependency? %) (conditionally-set? %)) + (deduplicate-ancestor-conditionals + (concat filtered-anc filtered-entity)))] + [{:text (render-scenario (build-scenario-name filtered-entity entity-name) + module-combo all-setup-conds entity-path) + :module module-combo + :group-path entity-path}]))))) + + ;; fallback + nil)))) + +(defn generate-scenarios-for-group + "Generate scenarios for a group. Delegates to generate-scenarios-for-entity." + [all-data group] + (generate-scenarios-for-entity all-data group)) + +(defn generate-scenarios-for-submodule + "Generate scenarios for a submodule. Delegates to generate-scenarios-for-entity." + [all-data submodule] + (generate-scenarios-for-entity all-data submodule)) + +(defn group-scenarios-by-feature + "Organize scenarios into feature files. + Group by entity path only — all module-combo outlines for one entity go in one file. + + Arguments: + - scenarios: Sequence of scenario maps + + Returns: + Map of entity-path -> scenarios list" + [scenarios] + (group-by :group-path scenarios)) + +;; =========================================================================================================== +;; Filename Generation Functions +;; =========================================================================================================== + +(defn sanitize-path-component + "Convert path element to filename-safe string. + - Convert to lowercase + - Replace spaces with hyphens + - Remove special characters except hyphens + + Arguments: + - component: String like 'By Size Class' + + Returns: + String like 'by-size-class'" + [component] + (-> component + str/lower-case + (str/replace #"\s+" "-") + (str/replace #"[^a-z0-9\-]" ""))) + +(defn generate-feature-filename + "Create filename from entity path. + Pattern: {entity-module}-input_{parent-groups}_{target-group}.feature + The module prefix is always derived from path[0] (the entity's own module), + regardless of what worksheet module-combo the scenarios use. + + Arguments: + - path: Entity path vector like ['Surface' 'Fuel Moisture' 'By Size Class'] + + Returns: + String like 'surface-input_fuel-moisture_by-size-class.feature'" + [path] + (let [module-str (name (extract-module-from-path path)) + path-without-mi (remove keyword? (rest path)) + sanitized-parts (map (comp sanitize-path-component pname) path-without-mi)] + (str module-str "-input_" (str/join "_" sanitized-parts) ".feature"))) + +(defn- leaf-key-segment + "Sanitized last colon-segment of the path's leaf :key, or nil if the leaf has no key." + [path] + (let [leaf (last path) + k (when (map? leaf) (:key leaf))] + (when k (sanitize-path-component (last (str/split k #":")))))) + +(defn- disambiguated-filename + "Like generate-feature-filename but derives the leaf component from the :key rather + than the display name, allowing siblings that share a display name to differ." + [path] + (let [module-str (name (extract-module-from-path path)) + non-kw (remove keyword? (rest path)) + head (map (comp sanitize-path-component pname) (butlast non-kw)) + leaf (or (leaf-key-segment path) + (sanitize-path-component (pname (last non-kw))))] + (str module-str "-input_" (str/join "_" (concat head [leaf])) ".feature"))) + +(defn assign-feature-filenames + "Map each entity path to a unique .feature filename. + Non-colliding paths keep the display-name filename from generate-feature-filename. + Within any collision group each path is rebuilt via disambiguated-filename. + Throws if names are still not unique after disambiguation (leaf :keys are globally unique, + so this should never happen)." + [paths] + (let [base (map (juxt identity generate-feature-filename) paths) + by-name (group-by second base) + assigned (into {} + (mapcat (fn [[_ entries]] + (if (= 1 (count entries)) + [[(ffirst entries) (second (first entries))]] + (map (fn [[p _]] [p (disambiguated-filename p)]) entries))) + by-name))] + (let [dupes (->> assigned (group-by val) (filter (fn [[_ v]] (> (count v) 1))))] + (when (seq dupes) + (throw (ex-info "Unresolvable feature filename collision after disambiguation." + {:duplicates (mapv (fn [[f es]] {:filename f :paths (mapv first es)}) dupes)})))) + assigned)) + +;; =========================================================================================================== +;; Feature File Writing +;; =========================================================================================================== + +(defn generate-feature-header + "Create the feature header block (file-level @core tag + Feature title). + Module title uses the actual worksheet module combo (e.g. 'Surface & Crown'). + + Arguments: + - path: Entity path vector + - module-combo: Module set (e.g. #{:surface :crown}) + + Returns: + String like '@core\\nFeature: Surface & Crown Input - Canopy Fuel\\n'" + [path module-combo] + (let [module-str (module-set-to-title module-combo) + path-str (format-path-for-gherkin path)] + (str "@core\nFeature: " module-str " Input - " path-str "\n"))) + +(defn merge-features-by-title + "Collapse feature entries whose generated Feature: header is identical into one feature. + Sibling groups sharing the same name + path (differing only by leaf :key) render the same + Feature: title but distinct :group-paths, so they land in separate files. Cucumber identifies + a feature by its Feature: line and processes only one file per title, silently dropping the + other's scenarios. Merging them into a single feature avoids that. + + Arguments: + - grouped-scenarios: map of entity-path -> scenarios (from group-scenarios-by-feature) + + Returns: + Map of one representative entity-path -> combined scenarios, one entry per unique title." + [grouped-scenarios] + (->> grouped-scenarios + (group-by (fn [[path scenarios]] + (let [module-combo (or (:module (first scenarios)) + #{(extract-module-from-path path)})] + (generate-feature-header path module-combo)))) + (into {} + (map (fn [[_ entries]] + ;; Stable order: e.g. 'fuelmodel' sorts before 'wind-driven-fuel-model', so the + ;; representative path yields the base filename and the scenario order is + ;; deterministic across regenerations. + (let [ordered (sort-by (comp disambiguated-filename first) entries)] + [(ffirst ordered) (vec (mapcat second ordered))])))))) + +(defn write-feature-file + "Write scenarios to file with header. + Use spit to write to file path. + Create parent directories if needed. + + Arguments: + - file-path: File path to write to + - header: Feature header text + - scenarios: Sequence of scenario maps + + Returns: + nil (side effect: writes file)" + [file-path header scenarios] + (io/make-parents file-path) + (let [scenario-texts (map :text scenarios) + content (str header "\n" (str/join "\n\n" scenario-texts))] + (spit file-path content))) + +(defn delete-old-generated-files + "Clean up before generation. + Delete .feature files directly in features-dir (non-recursive) except + core_conditional_scenarios.feature. Subdirectories such as results-page/ are + left untouched — those are managed by generate-results-feature-files!. + + Arguments: + - features-dir: Features directory path + + Returns: + Number of files deleted" + [features-dir] + (let [dir (io/file features-dir) + files (or (.listFiles dir) []) + feature-files (filter #(and (.isFile %) + (str/ends-with? (.getName %) ".feature")) + files)] + (doseq [file feature-files] + (.delete file)) + (count feature-files))) + +;; =========================================================================================================== +;; Main Generation Function (Task 6.8) +;; =========================================================================================================== + +(defn generate-feature-files! + "Generate Cucumber feature files from test_matrix_data.edn. + + Orchestrate full file generation workflow: + - Load test matrix EDN + - Filter out research groups/submodules + - Delete old generated files + - Generate scenarios for all entities + - Group scenarios by feature + - Split large features + - Generate filenames and write files + - Track and print statistics + + Arguments: + - edn-path (optional): Path to input EDN file + Default: 'development/test_matrix_data.edn' + - features-dir (optional): Directory for output feature files + Default: 'features/' + + Returns: + Map with :features-dir, :files-written, :scenarios-generated" + ([] + (generate-feature-files! "development/test_matrix_data.edn" "features/")) + ([edn-path] + (generate-feature-files! edn-path "features/")) + ([edn-path features-dir] + (try + ;; Load test matrix (returns map with path keys) + (let [all-data (load-test-matrix edn-path) + + ;; Get all entities (groups and submodules) from map values + all-entities (vals all-data) + + ;; Separate groups from submodules + groups (filter :group/translated-name all-entities) + submodules (filter :submodule/name all-entities) + + ;; Filter out research groups and submodules + non-research-groups (remove should-skip-group? groups) + non-research-submodules (remove should-skip-submodule? submodules) + + ;; Generate scenarios for all groups and submodules (pass all-data) + group-scenarios (mapcat #(generate-scenarios-for-group all-data %) non-research-groups) + submodule-scenarios (mapcat #(generate-scenarios-for-submodule all-data %) non-research-submodules) + all-scenarios (concat group-scenarios submodule-scenarios) + + ;; Group scenarios by entity path (all module-combo outlines in one file) + grouped-scenarios (group-scenarios-by-feature all-scenarios) + + ;; Merge entries that render to the same Feature: title (sibling groups with the same + ;; name + path) into one feature, so cucumber doesn't silently drop a duplicate-title file. + merged-features (merge-features-by-title grouped-scenarios) + + ;; Assign unique filenames — disambiguates siblings that share a display name + ;; by falling back to their leaf :key segment. Must succeed before any deletion. + filenames (assign-feature-filenames (keys merged-features)) + + ;; Safe to delete now: scenarios and filenames are fully computed. + _ (delete-old-generated-files features-dir) + + ;; Write files + files-written (atom 0) + scenarios-generated (atom 0)] + + (doseq [[entity-path scenarios] merged-features] + (let [module-combo (or (:module (first scenarios)) #{(extract-module-from-path entity-path)}) + header (generate-feature-header entity-path module-combo) + filename (get filenames entity-path) + file-path (str features-dir filename)] + (write-feature-file file-path header scenarios) + (swap! files-written inc) + (swap! scenarios-generated + (count scenarios)))) + + (println (format "✓ Generated %d feature files with %d scenarios" @files-written @scenarios-generated)) + + {:features-dir features-dir + :files-written @files-written + :scenarios-generated @scenarios-generated}) + (catch Exception e + (println (str "Error generating feature files: " (.getMessage e))) + {:features-dir features-dir + :files-written 0 + :scenarios-generated 0 + :error (.getMessage e)})))) diff --git a/components/cucumber_test_generator/src/cucumber_test_generator/interface.clj b/components/cucumber_test_generator/src/cucumber_test_generator/interface.clj new file mode 100644 index 000000000..c3c3f4c87 --- /dev/null +++ b/components/cucumber_test_generator/src/cucumber_test_generator/interface.clj @@ -0,0 +1,106 @@ +(ns cucumber-test-generator.interface + "Public API for the cucumber_test_generator component. + + This component generates Cucumber feature files from a Datomic database (behave-cms), + automating the creation of comprehensive conditional visibility testing scenarios + for the BehavePlus application. + + Usage: + (require '[cucumber-test-generator.interface :as ctg]) + ;; Generate both sections of the combined matrix in one call (recommended): + (ctg/generate-all-matrix! db) + ;; Then generate feature files for each test type: + (ctg/generate-feature-files!) + (ctg/generate-results-feature-files!) + ;; Or regenerate sections individually: + (ctg/generate-test-matrix! db) + (ctg/generate-conditional-outputs-matrix! db)" + (:require [cucumber-test-generator.conditional-outputs :as co] + [cucumber-test-generator.core :as c] + [cucumber-test-generator.generate-results-scenarios :as grs] + [cucumber-test-generator.generate-scenarios :as gs])) + +(def ^{:arglists '([db] [db edn-path]) + :doc "Generate test_matrix_data.edn from Datomic database. + + Queries the database to find all groups and submodules + with conditionals, processes them with ancestor enrichment, and + writes structured EDN data for feature file generation. + + Arguments: + - db: Datomic database value (from d/db) + - edn-path (optional): Path to output EDN file + Default: 'development/test_matrix_data.edn' + + Returns: + Map with :edn-path, :groups-count, :submodules-count"} + generate-test-matrix! c/generate-test-matrix!) + +(def ^{:arglists '([] [edn-path] [edn-path features-dir]) + :doc "Generate Cucumber feature files from test_matrix_data.edn. + + Reads the test matrix EDN file and generates comprehensive Cucumber + feature files with Gherkin scenarios for testing conditional + visibility logic. + + Arguments: + - edn-path (optional): Path to input EDN file + Default: 'development/test_matrix_data.edn' + - features-dir (optional): Directory for output feature files + Default: 'features/' + + Returns: + Map with :features-dir, :files-written, :scenarios-generated"} + generate-feature-files! gs/generate-feature-files!) + +(def ^{:arglists '([db] [db edn-path]) + :doc "Generate conditional_outputs_matrix.edn from Datomic database. + + Finds every output group-variable with + :group-variable/conditionally-set? true and at least one + :select action, resolves the full transitive chain of required + inputs, and writes structured EDN data for results-page + feature file generation. + + Arguments: + - db: Datomic database value (from d/db) + - edn-path: (optional) output path + Default: 'development/conditional_outputs_matrix.edn' + + Returns: + Map with :edn-path and :entries-count"} + generate-conditional-outputs-matrix! co/generate-conditional-outputs-matrix!) + +(def ^{:arglists '([] [edn-path] [edn-path features-dir]) + :doc "Generate results-page Cucumber feature files from + conditional_outputs_matrix.edn. + + For each test case, writes one feature file asserting that + the conditionally-set output appears on the results page when + its required inputs are set. + + Arguments: + - edn-path: (optional) input EDN + Default: 'development/conditional_outputs_matrix.edn' + - features-dir: (optional) output directory + Default: 'features/' + + Returns: + Map with :features-dir and :files-written"} + generate-results-feature-files! grs/generate-results-feature-files!) + +(def ^{:arglists '([db] [db edn-path]) + :doc "Generate the combined test_matrix_data.edn in one call. + Writes both :input-visibility and :results-visibility sections + to a single file, eliminating the need to keep two EDN + files in sync. + + Arguments: + - db: Datomic database value (from d/db) + - edn-path: (optional) output path + Default: 'development/test_matrix_data.edn' + + Returns: + Map with :edn-path, :groups-count, :submodules-count, + :results-visibility-count"} + generate-all-matrix! c/generate-all-matrix!) diff --git a/components/file_utils/src/file_utils/core.clj b/components/file_utils/src/file_utils/core.clj index 6bf17f42a..635f725b8 100644 --- a/components/file_utils/src/file_utils/core.clj +++ b/components/file_utils/src/file_utils/core.clj @@ -2,10 +2,10 @@ (:require [clojure.java.io :as io] [clojure.string :as str] [me.raynes.fs :as fs]) - (:import [java.io File OutputStream ByteArrayInputStream ByteArrayOutputStream] - [javax.imageio ImageIO] - [java.awt.image BufferedImage] + (:import [java.awt.image BufferedImage] + [java.io File OutputStream ByteArrayInputStream ByteArrayOutputStream] [java.util.zip ZipEntry ZipOutputStream ZipInputStream] + [javax.imageio ImageIO] [net.coobird.thumbnailator Thumbnails])) ;;; Constants @@ -38,7 +38,7 @@ (.size image-max-size image-max-size) (.outputQuality image-quality)) (.asBufferedImage))] - (try + (try (if output-file (write-image-to-file buffered-image fmt output-file) (write-image buffered-image fmt output-stream)) @@ -58,7 +58,7 @@ - `new-path` - string which replaces the path of each file with `new-path`, or a function which takes the original path and outputs a new path." [input-file-or-folder out-file & [{:keys [rel-path? new-path resize-images? image-max-size image-quality] - :or {image-max-size resize-max-width image-quality resize-quality}}]] + :or {image-max-size resize-max-width image-quality resize-quality}}]] (with-open [zip (ZipOutputStream. (io/output-stream out-file))] (doseq [f (file-seq (io/file input-file-or-folder)) :when (.isFile f)] (.putNextEntry zip (ZipEntry. (cond @@ -112,38 +112,48 @@ "Returns the OS-specific location for application data." [org-name app-name] (apply io/file - (concat - (condp = (os-type) - :windows - [(System/getenv "LOCALAPPDATA")] + (concat + (condp = (os-type) + :windows + [(System/getenv "LOCALAPPDATA")] - :mac - [(System/getenv "HOME") "Library" "Application Support"] + :mac + [(System/getenv "HOME") "Library" "Application Support"] - :linux - [(System/getenv "XDG_STATE_HOME")]) - [org-name app-name]))) + :linux + [(System/getenv "XDG_STATE_HOME")]) + [org-name app-name]))) -(defn os-path - "Translates a path in either Windows/Unix format - into a path compatible with the current system." - [path] - (let [path (str/split path #"[/\\]")] - (str - (apply io/file - (map - #(cond - (str/starts-with? % "~") - (fs/home) +(defn- expand-path-segment + "Expands a single path segment, resolving leading `~`, `$HOME`, + `$VAR`, and `%VAR%` tokens against the environment." + [segment] + (cond + (str/starts-with? segment "~") + (str (fs/home)) + + (= "$HOME" segment) + (str (fs/home)) + + (str/starts-with? segment "$") + (or (System/getenv (subs segment 1)) segment) - (= "$HOME" %) - (fs/home) + (str/starts-with? segment "%") + (or (System/getenv (str/replace segment #"%" "")) segment) - (str/starts-with? % "$") - (or (System/getenv (subs % 1)) %) + :else + segment)) - (str/starts-with? % "%") - (or (System/getenv (str/replace % #"%" "")) %) +(defn os-path + "Translates a path in either Windows/Unix format + into a path compatible with the current system. - :else - %) path))))) + Expands leading `~`, `$HOME`, `$VAR`, and `%VAR%` tokens. A bare + Windows drive segment (e.g. `C:`) keeps its root separator so the + result stays absolute rather than drive-relative." + [path] + (let [segments (map expand-path-segment (str/split path #"[/\\]")) + segments (if (re-matches #"[A-Za-z]:" (first segments)) + (cons (str (first segments) File/separator) (rest segments)) + segments)] + (str (apply io/file segments)))) diff --git a/components/jcef/deps.edn b/components/jcef/deps.edn index b5e1abdfa..d6cc943ec 100644 --- a/components/jcef/deps.edn +++ b/components/jcef/deps.edn @@ -1,4 +1,4 @@ {:paths ["src" "resources"] - :deps {me.friwi/jcefmaven {:mvn/version "135.0.20"} + :deps {me.friwi/jcefmaven {:mvn/version "146.0.10"} me.raynes/fs {:mvn/version "1.4.6"}} :aliases {:test {:extra-paths ["test"]}}} diff --git a/components/jcef/src/jcef/core.clj b/components/jcef/src/jcef/core.clj index 5c8c9ad38..5cc04408f 100644 --- a/components/jcef/src/jcef/core.clj +++ b/components/jcef/src/jcef/core.clj @@ -1,6 +1,5 @@ (ns jcef.core - (:require [clojure.string :as str] - [clojure.java.browse :refer [browse-url]] + (:require [clojure.java.browse :refer [browse-url]] [jcef.setup :refer [jcef-builder]] [jcef.resource-handlers :as rh] [me.raynes.fs :as fs]) @@ -14,8 +13,7 @@ CefMessageRouterHandler] [java.awt BorderLayout Cursor GraphicsEnvironment KeyboardFocusManager Toolkit] [java.awt.event ActionListener ComponentAdapter WindowAdapter] - [javax.swing JFileChooser JFrame JMenu JMenuBar JMenuItem JTextField KeyStroke SwingUtilities] - [javax.swing.filechooser FileNameExtensionFilter])) + [javax.swing JFrame JMenu JMenuBar JMenuItem JTextField KeyStroke SwingUtilities])) ;;; Helpers @@ -129,10 +127,12 @@ "Creates a CEF app frame with the following options map: - `:title` [Req.] - Title of the app. - `:url` [Req.] - URL to start the browser at. - - `:on-close` [Opt.] - Function to execute when the window closes. - - `:use-osr?` [Opt.] - Use Windowless Rendering (Default: false) - - `:transparent?` [Opt.] - Transparent window (Default: false) - - `:address-bar?` [Opt.] - Show an address bar. (Default: false) + - `:on-close` [Opt.] - Function to execute when the window closes. + - `:on-console-message` [Opt.] - Function called with `{:level :message :source :line}` + for every browser console message. + - `:use-osr?` [Opt.] - Use Windowless Rendering (Default: false) + - `:transparent?` [Opt.] - Transparent window (Default: false) + - `:address-bar?` [Opt.] - Show an address bar. (Default: false) Returns a map with: - `:frame` - `JFrame` Application @@ -140,7 +140,7 @@ - `:client` - `CefClient`" [{:keys [title menu url use-osr? size request-handler cache-path remote-debug-port transparent? address-bar? fullscreen? dev-tools? - on-close on-blur on-focus on-hidden on-shown on-before-launch] + on-close on-blur on-focus on-hidden on-shown on-before-launch on-console-message] :or {use-osr? false transparent? false address-bar? false fullscreen? false size [1024 768]}}] (let [builder (jcef-builder) settings (.getCefSettings builder) @@ -186,6 +186,15 @@ (onAddressChange [_ _ url] (.setText address url)) + (onConsoleMessage [_ level message source line] + (when (fn? on-console-message) + (on-console-message {:level (str level) + :message message + :source source + :line line})) + ;; false = keep CEF's default handling + false) + (onCursorChange [browser cursorType] (.. browser (getUIComponent) @@ -250,23 +259,6 @@ [& args] (SwingUtilities/invokeLater #(apply build-cef-app! args))) -(defn- open-file-chooser [callback frame title & extensions] - (let [file-filter (FileNameExtensionFilter. title (into-array String extensions)) - chooser (JFileChooser.)] - (.setFileFilter chooser file-filter) - (let [return-val (.showOpenDialog chooser frame)] - (when (= return-val JFileChooser/APPROVE_OPTION) - (callback (.getSelectedFile chooser)))))) - -(defn- open-save-file [callback frame title & extensions] - (let [file-filter (FileNameExtensionFilter. title (into-array String extensions)) - chooser (JFileChooser.)] - (.setFileFilter chooser file-filter) - (let [return-val (.showSaveDialog chooser frame)] - (when (= return-val JFileChooser/APPROVE_OPTION) - (callback (.getSelectedFile chooser)))))) - - (comment (require '[config.interface :refer [get-config]]) (require '[behave.server :refer [init-config! init-db!]]) diff --git a/deps.edn b/deps.edn index 11a2fbc8e..3cdc07d56 100644 --- a/deps.edn +++ b/deps.edn @@ -1,15 +1,17 @@ -{:mvn/repos {"central" {:url "https://repo1.maven.org/maven2/"} - "clojars" {:url "https://clojars.org/repo"}} +{:mvn/repos {"central" {:url "https://repo1.maven.org/maven2/"} + "clojars" {:url "https://clojars.org/repo"}} :aliases {:dev {:extra-paths ["development" "target" + "steps" ;; Components "components/async_utils/src" "components/browser_utils/src" "components/csv_parser/src" "components/cucumber/src" + "components/cucumber_test_generator/src" "components/config/src" "components/data_utils/src" "components/date_utils/src" @@ -38,103 +40,106 @@ "bases/datomic_store/src" "bases/datom_store/src"] - - :extra-deps {;; Clojure Deps - bk/ring-gzip {:mvn/version "0.3.0"} - clj-http/clj-http {:mvn/version "3.10.1"} - com.cognitect/transit-clj {:mvn/version "1.0.324"} - com.datomic/peer {:mvn/version "1.0.7075"} - com.github.seancorfield/honeysql {:mvn/version "2.2.891"} - hiccup/hiccup {:mvn/version "2.0.0-alpha2"} - io.github.tonsky/datascript-storage-sql {:mvn/version "1.0.0"} - io.replikativ/datahike {:mvn/version "0.5.1506"} - me.friwi/jcefmaven {:mvn/version "110.0.25"} - me.raynes/fs {:mvn/version "1.4.6"} - net.coobird/thumbnailator {:mvn/version "0.4.19"} - org.clj-commons/digest {:mvn/version "1.4.100"} - org.clojure/clojure {:mvn/version "1.11.1"} - org.clojure/data.json {:mvn/version "1.0.0"} - org.clojure/data.xml {:mvn/version "0.2.0-alpha7"} - org.mindrot/jbcrypt {:mvn/version "0.4"} - org.postgresql/postgresql {:mvn/version "42.5.1"} - org.xerial/sqlite-jdbc {:mvn/version "3.43.0.0"} - ring/ring {:mvn/version "1.10.0"} - ring/ring-defaults {:mvn/version "0.3.3"} - ring/ring-headers {:mvn/version "0.3.0"} - ring/ring-json {:mvn/version "0.5.0"} - ring/ring-ssl {:mvn/version "0.3.0"} - seancorfield/next.jdbc {:mvn/version "1.1.569"} - tegere/tegere {:mvn/version "0.1.5"} + :extra-deps {;; Clojure Deps + bk/ring-gzip {:mvn/version "0.3.0"} + clj-http/clj-http {:mvn/version "3.10.1"} + com.cognitect/transit-clj {:mvn/version "1.0.324"} + com.datomic/peer {:mvn/version "1.0.7075"} + com.github.seancorfield/honeysql {:mvn/version "2.2.891"} + hiccup/hiccup {:mvn/version "2.0.0-alpha2"} + io.github.tonsky/datascript-storage-sql {:mvn/version "1.0.0"} + io.replikativ/datahike {:mvn/version "0.5.1506"} + me.friwi/jcefmaven {:mvn/version "146.0.10"} + me.raynes/fs {:mvn/version "1.4.6"} + net.coobird/thumbnailator {:mvn/version "0.4.19"} + org.clj-commons/digest {:mvn/version "1.4.100"} + org.clojure/clojure {:mvn/version "1.11.1"} + org.clojure/data.json {:mvn/version "1.0.0"} + org.clojure/math.combinatorics {:mvn/version "0.3.0"} + org.clojure/data.xml {:mvn/version "0.2.0-alpha7"} + org.mindrot/jbcrypt {:mvn/version "0.4"} + org.postgresql/postgresql {:mvn/version "42.5.1"} + org.xerial/sqlite-jdbc {:mvn/version "3.43.0.0"} + ring/ring {:mvn/version "1.10.0"} + ring/ring-defaults {:mvn/version "0.3.3"} + ring/ring-headers {:mvn/version "0.3.0"} + ring/ring-json {:mvn/version "0.5.0"} + ring/ring-ssl {:mvn/version "0.3.0"} + seancorfield/next.jdbc {:mvn/version "1.1.569"} + tegere/tegere {:mvn/version "0.1.5"} ;; Clojure Common - bidi/bidi {:mvn/version "2.1.6"} - datascript/datascript {:mvn/version "1.5.3"} - cljs-ajax/cljs-ajax {:mvn/version "0.8.4"} - nano-id/nano-id {:mvn/version "1.1.0"} - com.github.rosejn/msgpack-cljc {:mvn/version "2.0.359"} - sig-gis/triangulum {:git/url "https://github.com/sig-gis/triangulum" - :sha "3d41dab63e1bc8ebe046f64db44ae3df986f5bdf"} - org.clojure/data.csv {:mvn/version "1.0.0"} + bidi/bidi {:mvn/version "2.1.6"} + datascript/datascript {:mvn/version "1.5.3"} + cljs-ajax/cljs-ajax {:mvn/version "0.8.4"} + nano-id/nano-id {:mvn/version "1.1.0"} + com.github.rosejn/msgpack-cljc {:mvn/version "2.0.359"} + sig-gis/triangulum {:git/url "https://github.com/sig-gis/triangulum" + :sha "3d41dab63e1bc8ebe046f64db44ae3df986f5bdf"} + org.clojure/data.csv {:mvn/version "1.0.0"} ;; Clojure/Script Deps - com.bhauman/figwheel-main {:mvn/version "0.2.18"} - org.clojure/clojurescript {:mvn/version "1.11.54"} - org.clojure/core.async {:mvn/version "1.2.603"} - binaryage/devtools {:mvn/version "1.0.5"} - re-frisk/re-frisk {:mvn/version "1.6.0"} - com.cognitect/transit-cljs {:mvn/version "0.8.264"} - re-frame/re-frame {:mvn/version "1.3.0-rc3"} - day8.re-frame/http-fx {:mvn/version "0.2.4"} - re-posh/re-posh {:mvn/version "0.3.3"} - reagent/reagent {:mvn/version "0.10.0"} - re-frame-utils/re-frame-utils {:mvn/version "0.1.0"} - cljsjs/vega {:mvn/version "5.25.0-0"} - cljsjs/vega-embed {:mvn/version "6.22.2-0"} - cljsjs/vega-lite {:mvn/version "5.14.1-0"} - day8.re-frame/test {:mvn/version "0.1.5"} - austinbirch/reactive-entity {:mvn/version "0.2.0"} - day8.re-frame/async-flow-fx {:mvn/version "0.3.0"} + com.bhauman/figwheel-main {:mvn/version "0.2.18"} + org.clojure/clojurescript {:mvn/version "1.11.54"} + org.clojure/core.async {:mvn/version "1.2.603"} + binaryage/devtools {:mvn/version "1.0.5"} + re-frisk/re-frisk {:mvn/version "1.6.0"} + com.cognitect/transit-cljs {:mvn/version "0.8.264"} + re-frame/re-frame {:mvn/version "1.3.0-rc3"} + day8.re-frame/http-fx {:mvn/version "0.2.4"} + re-posh/re-posh {:mvn/version "0.3.3"} + reagent/reagent {:mvn/version "0.10.0"} + re-frame-utils/re-frame-utils {:mvn/version "0.1.0"} + cljsjs/vega {:mvn/version "5.25.0-0"} + cljsjs/vega-embed {:mvn/version "6.22.2-0"} + cljsjs/vega-lite {:mvn/version "5.14.1-0"} + day8.re-frame/test {:mvn/version "0.1.5"} + austinbirch/reactive-entity {:mvn/version "0.2.0"} + day8.re-frame/async-flow-fx {:mvn/version "0.3.0"} ;; Behave CMS - applied-science/js-interop {:mvn/version "0.3.3"} - com.draines/postal {:mvn/version "2.0.3"} - garden/garden {:mvn/version "1.3.10"} - herb/herb {:mvn/version "0.10.0"} - hickory/hickory {:mvn/version "0.7.1"} - markdown-clj/markdown-clj {:mvn/version "1.11.1"} - org.clojure/tools.cli {:mvn/version "1.0.194"}} - - :jvm-opts ["--add-exports=java.base/java.lang=ALL-UNNAMED" - "--add-exports=java.desktop/sun.awt=ALL-UNNAMED" - "--add-exports=java.desktop/sun.lwawt=ALL-UNNAMED" - "--add-exports=java.desktop/sun.lwawt.macosx=ALL-UNNAMED" - "--add-exports=java.desktop/sun.java2d=ALL-UNNAMED" - "--add-opens=java.desktop/sun.awt=ALL-UNNAMED" - "--add-opens=java.desktop/sun.lwawt=ALL-UNNAMED" - "--add-opens=java.desktop/sun.lwawt.macosx=ALL-UNNAMED"]} - - :test {:extra-paths [;; Components - "components/browser_utils/test" - "components/csv_parser/test" - "components/config/test" - "components/data_utils/test" - "components/date_utils/test" - "components/datom_compressor/test" - "components/datom_utils/test" - "components/dom_utils/test" - "components/ds_schema_utils/test" - "components/markdown2hiccup/test" - "components/map_utils/test" - "components/number_utils/test" - "components/server/test" - "components/string_utils/test" - "components/transport/test" - "components/version_utils/test" + applied-science/js-interop {:mvn/version "0.3.3"} + com.draines/postal {:mvn/version "2.0.3"} + garden/garden {:mvn/version "1.3.10"} + herb/herb {:mvn/version "0.10.0"} + hickory/hickory {:mvn/version "0.7.1"} + markdown-clj/markdown-clj {:mvn/version "1.11.1"} + org.clojure/tools.cli {:mvn/version "1.0.194"} + + ;; Testing + org.seleniumhq.selenium/selenium-java {:mvn/version "4.23.0"}} + + :jvm-opts ["--add-exports=java.base/java.lang=ALL-UNNAMED" + "--add-exports=java.desktop/sun.awt=ALL-UNNAMED" + "--add-exports=java.desktop/sun.lwawt=ALL-UNNAMED" + "--add-exports=java.desktop/sun.lwawt.macosx=ALL-UNNAMED" + "--add-exports=java.desktop/sun.java2d=ALL-UNNAMED" + "--add-opens=java.desktop/sun.awt=ALL-UNNAMED" + "--add-opens=java.desktop/sun.lwawt=ALL-UNNAMED" + "--add-opens=java.desktop/sun.lwawt.macosx=ALL-UNNAMED"]} + + :test {:extra-paths [;; Components + "components/browser_utils/test" + "components/csv_parser/test" + "components/config/test" + "components/data_utils/test" + "components/date_utils/test" + "components/datom_compressor/test" + "components/datom_utils/test" + "components/dom_utils/test" + "components/ds_schema_utils/test" + "components/markdown2hiccup/test" + "components/map_utils/test" + "components/number_utils/test" + "components/server/test" + "components/string_utils/test" + "components/transport/test" + "components/version_utils/test" ;; Bases - "bases/behave_routing/test" - "bases/behave_schema/test" - "bases/datom_store/test"]} + "bases/behave_routing/test" + "bases/behave_schema/test" + "bases/datom_store/test"]} :behave/app {:extra-paths @@ -165,7 +170,7 @@ "projects/behave_cms/src/cljs" "projects/behave_cms/test/cljs" "projects/behave_cms/resources"] - :main-opts ["-m" "figwheel.main" "-co" "cms-test.cljs.edn" "-m" "behave-cms.headless-test-runner"]} + :main-opts ["-m" "figwheel.main" "-co" "cms-test.cljs.edn" "-m" "behave-cms.headless-test-runner"]} :poly {:extra-deps {polylith/clj-poly @@ -176,11 +181,11 @@ {:extra-paths ["projects/behave_cms/src/clj" "projects/behave_cms/src/cljc"] - :exec-fn help-import/import-help} + :exec-fn help-import/import-help} :rollback-help-import {:extra-paths ["projects/behave_cms/src/clj" "projects/behave_cms/src/cljc" "projects/behave_cms/resources"] - :exec-fn help-import/rollback-import}}} + :exec-fn help-import/rollback-import}}} diff --git a/development/cucumber_test.clj b/development/cucumber_test.clj new file mode 100644 index 000000000..65bbbe97f --- /dev/null +++ b/development/cucumber_test.clj @@ -0,0 +1,51 @@ +(ns cucumber-test + (:require [behave-cms.store :refer [default-conn]] + [cucumber-test-generator.conditional-outputs :as co] + [cucumber-test-generator.core :as core] + [cucumber-test-generator.generate-results-scenarios :as grs] + [cucumber-test-generator.generate-scenarios :as gs] + [cucumber.runner :refer [run-cucumber-tests]] + [datomic.api :as d])) + +(comment + + (do + (require '[cucumber-test-generator.core :as core] :reload) + (require '[cucumber-test-generator.conditional-outputs :as co] :reload) + (require '[cucumber-test-generator.generate-scenarios :as gs] :reload) + (require '[cucumber-test-generator.generate-results-scenarios :as grs] :reload)) + + ;; ── Recommended: generate both sections of the combined matrix in one call ── + (core/generate-all-matrix! (d/db (default-conn))) + + ;; ── Or regenerate sections individually ── + ;; :input-visibility section only + (core/generate-test-matrix! (d/db (default-conn))) + + ;; :results-visibility section only + (co/generate-conditional-outputs-matrix! (d/db (default-conn))) + + ;; ── Generate feature files from the combined matrix ── + ;; Input-visibility scenarios → features/ + (gs/generate-feature-files!) + + ;; Results-page scenarios → features/results-page/ + (grs/generate-results-feature-files!) + + ;; Run a SINGLE feature file (fast iteration) + (defn run-feature + "Run one feature file by path. Optional opts override defaults." + [feature-path & [opts]] + (run-cucumber-tests + (merge {:debug? false + :headless? false + :features feature-path + :steps "steps" + :stop false + :query-string '(and "core" (not "extended")) + :browser :chrome + :url "http://localhost:8081/worksheets"} + opts))) + + ;(run-feature "features/surface-input_wind-and-slope_wind-adjustment-factor.feature") + ) diff --git a/development/results_test_baselines.edn b/development/results_test_baselines.edn new file mode 100644 index 000000000..ab906b81e --- /dev/null +++ b/development/results_test_baselines.edn @@ -0,0 +1,112 @@ +{;; ============================================================================ + ;; Combo-keyed baselines. + ;; Keyed by the EFFECTIVE worksheet module combo — the set returned by + ;; effective-module-combo in generate_results_scenarios.clj (Crown/Mortality/ + ;; Contain always promote to include Surface). Each combo OWNS its complete + ;; baseline: Surface rows are REPEATED in every multi-module combo rather than + ;; shared, because a Surface-only run and a Surface & Crown run require different + ;; Surface inputs/outputs. No cross-combo assembly happens anymore. + ;; + ;; Row order = worksheet (VMS) order; the generator derives input ordering + ;; implicitly from this declaration order, and output ordering from the + ;; test-matrix outputs. + ;; ============================================================================ + :surface + {:baseline-outputs + [{:module "Surface" :submodule "Fire Behavior" :group "Direction Mode" :subgroup nil :value "Heading"} + {:module "Surface" :submodule "Fire Behavior" :group "Surface Fire" :subgroup nil :value "Rate of Spread"}] + :baseline-inputs + [{:module "Surface" :submodule "Fuel Model" :group "Standard" :subgroup "Fuel Model" :value "FB1/1 - Short grass (Static)"} + {:module "Surface" :submodule "Fuel Moisture" :group "Moisture Input Mode" :subgroup nil :value "Individual Size Class"} + {:module "Surface" :submodule "Fuel Moisture" :group "By Size Class" :subgroup "1-h Fuel Moisture" :value "1"} + {:module "Surface" :submodule "Spread Directions" :group "Direction of Interest" :subgroup nil :value "90"} + {:module "Surface" :submodule "Wind and Slope" :group "Wind Measured at:" :subgroup nil :value "Midflame (Eye Level)"} + {:module "Surface" :submodule "Wind and Slope" :group "Wind Speed" :subgroup nil :value "1"} + {:module "Surface" :submodule "Wind and Slope" :group "20-Foot Wind Speed" :subgroup nil :value "1"} + {:module "Surface" :submodule "Wind and Slope" :group "Wind and slope are" :subgroup nil :value "Aligned (Wind is ≤30° from upslope)."} + {:module "Surface" :submodule "Wind and Slope" :group "Wind and slope are" :subgroup "Wind Direction (from upslope)" :value "45"} + {:module "Surface" :submodule "Wind and Slope" :group "Slope" :subgroup nil :value "0"} + {:module "Surface" :submodule "Size" :group "Elapsed Time" :subgroup nil :value "1"} + {:module "Surface" :submodule "Spot" :group "Burning Pile" :subgroup "Flame Height from a Burning Pile" :value "1"} + {:module "Surface" :submodule "Spot" :group "Downwind Canopy Fuel" :subgroup "Downwind Canopy Height" :value "1"} + {:module "Surface" :submodule "Spot" :group "Downwind Canopy Fuel" :subgroup "Downwind Canopy Cover" :value "Closed"} + {:module "Surface" :submodule "Spot" :group "Topography" :subgroup "Ridge-to-Valley Elevation Difference" :value "1000"} + {:module "Surface" :submodule "Spot" :group "Topography" :subgroup "Ridge-to-Valley Horizontal Distance" :value "1"} + {:module "Surface" :submodule "Spot" :group "Topography" :subgroup "Spotting Source Location" :value "RT (Ridge Top)"}]} + + ;; ============================================================================ + ;; Surface & Mortality baseline. Surface rows are repeated here (this combo's + ;; Surface inputs/outputs may diverge from the Surface-only combo), followed by + ;; the Mortality-specific rows. Canopy Height and Crown Ratio are conditionally + ;; visible (gated by species). + ;; ============================================================================ + :surface-mortality + {:baseline-outputs + [{:module "Surface" :submodule "Fire Behavior" :group "Direction Mode" :subgroup nil :value "Heading"} + {:module "Surface" :submodule "Fire Behavior" :group "Surface Fire" :subgroup nil :value "Rate of Spread"}] + :baseline-inputs + [{:module "Surface" :submodule "Fuel Model" :group "Standard" :subgroup "Fuel Model" :value "FB1/1 - Short grass (Static)"} + {:module "Surface" :submodule "Fuel Moisture" :group "Moisture Input Mode" :subgroup nil :value "Individual Size Class"} + {:module "Surface" :submodule "Fuel Moisture" :group "By Size Class" :subgroup "1-h Fuel Moisture" :value "1"} + {:module "Surface" :submodule "Spread Directions" :group "Direction of Interest" :subgroup nil :value "90"} + {:module "Surface" :submodule "Wind and Slope" :group "Wind Measured at:" :subgroup nil :value "Midflame (Eye Level)"} + {:module "Surface" :submodule "Wind and Slope" :group "Wind Speed" :subgroup nil :value "1"} + {:module "Surface" :submodule "Wind and Slope" :group "Wind and slope are" :subgroup nil :value "Aligned (Wind is ≤30° from upslope)."} + {:module "Surface" :submodule "Wind and Slope" :group "Wind and slope are" :subgroup "Wind Direction (from upslope)" :value "45"} + {:module "Surface" :submodule "Wind and Slope" :group "Slope" :subgroup nil :value "0"} + {:module "Surface" :submodule "Size" :group "Elapsed Time" :subgroup nil :value "1"} + {:module "Mortality" :submodule "Tree Characteristics" :group "Mortality Tree Species" :subgroup nil :value "Abies amabilis / ABAM (Pacific silver fir)"} + {:module "Mortality" :submodule "Tree Characteristics" :group "Canopy Height" :subgroup nil :value "10"} + {:module "Mortality" :submodule "Tree Characteristics" :group "Crown Ratio" :subgroup nil :value "0.5"} + {:module "Mortality" :submodule "Tree Characteristics" :group "DBH (Diameter at Breast Height)" :subgroup nil :value "10"} + {:module "Mortality" :submodule "Scorch" :group "Air Temperature" :subgroup nil :value "70"}]} + + ;; ============================================================================ + ;; Surface & Crown baseline. Empty until a real Surface & Crown run is verified; + ;; populate with the combo's own (repeated) Surface rows plus Crown-specific rows. + ;; ============================================================================ + :surface-crown + {:baseline-outputs + [] + :baseline-inputs + [{:module "Surface" :submodule "Fuel Model" :group "Standard" :subgroup "Fuel Model" :value "FB1/1 - Short grass (Static)"} + {:module "Surface" :submodule "Fuel Moisture" :group "Moisture Input Mode" :subgroup nil :value "Individual Size Class"} + {:module "Surface" :submodule "Fuel Moisture" :group "By Size Class" :subgroup "1-h Fuel Moisture" :value "1"} + {:module "Surface" :submodule "Fuel Moisture" :group "By Size Class" :subgroup "10-h Fuel Moisture" :value "1"} + {:module "Surface" :submodule "Fuel Moisture" :group "By Size Class" :subgroup "100-h Fuel Moisture" :value "1"} + {:module "Surface" :submodule "Fuel Moisture" :group "By Size Class" :subgroup "Live Woody Fuel Moisture" :value "60"} + {:module "Surface" :submodule "Spread Directions" :group "Direction of Interest" :subgroup nil :value "90"} + {:module "Surface" :submodule "Wind and Slope" :group "Wind Measured at:" :subgroup nil :value "20-Foot"} + {:module "Surface" :submodule "Wind and Slope" :group "20-Foot Wind Speed" :subgroup nil :value "1"} + {:module "Surface" :submodule "Wind and Slope" :group "Wind Adjustment Factor" :subgroup nil :value "User Input"} + {:module "Surface" :submodule "Wind and Slope" :group "Wind Adjustment Factor" :subgroup "Wind Adjustment Factor - User Input" :value "1"} + {:module "Surface" :submodule "Wind and Slope" :group "Wind and slope are" :subgroup nil :value "Aligned (Wind is ≤30° from upslope)."} + {:module "Surface" :submodule "Wind and Slope" :group "Slope" :subgroup nil :value "0"} + {:module "Surface" :submodule "Size" :group "Elapsed Time" :subgroup nil :value "1"} + {:module "Crown" :submodule "Crown Fire Method" :group "Calculate Crown Fire Using:" :subgroup nil :value "Finney"} + {:module "Crown" :submodule "Foliar Moisture" :group "Foliar Moisture" :subgroup nil :value "30"} + {:module "Crown" :submodule "Canopy Fuel" :group "Canopy Height" :subgroup nil :value "10"} + {:module "Crown" :submodule "Canopy Fuel" :group "Canopy Base Height" :subgroup nil :value "10"} + {:module "Crown" :submodule "Canopy Fuel" :group "Canopy Bulk Density" :subgroup nil :value "0.5"}]} + + ;; ============================================================================ + ;; Surface & Contain baseline. Empty until a real Surface & Contain run is + ;; verified; populate with the combo's own (repeated) Surface rows plus + ;; Contain-specific rows. + ;; ============================================================================ + :surface-contain + {:baseline-outputs [] + :baseline-inputs + [{:module "Contain" :submodule "Suppression" :group "Contain Mode" :subgroup nil :value "Calculate Minimum Production Rate Only"} + {:module "Contain" :submodule "Suppression" :group "Tactic" :subgroup nil :value "Head"} + {:module "Contain" :submodule "Suppression" :group "Line Construction Offset" :subgroup nil :value "0"} + {:module "Contain" :submodule "Suppression" :group "Fire Area at Report" :subgroup nil :value "1"} + {:module "Contain" :submodule "Suppression" :group "Estimated Resource Arrival Time and Duration" :subgroup "Resource Arrival Time" :value "1"} + {:module "Contain" :submodule "Suppression" :group "Estimated Resource Arrival Time and Duration" :subgroup "Resource Duration" :value "8"} + {:module "Surface" :submodule "Fuel Model" :group "Standard" :subgroup "Fuel Model" :value "FB1/1 - Short grass (Static)"} + {:module "Surface" :submodule "Fuel Moisture" :group "Moisture Input Mode" :subgroup nil :value "Individual Size Class"} + {:module "Surface" :submodule "Fuel Moisture" :group "By Size Class" :subgroup "1-h Fuel Moisture" :value "1"} + {:module "Surface" :submodule "Wind and Slope" :group "Wind Measured at:" :subgroup nil :value "Midflame (Eye Level)"} + {:module "Surface" :submodule "Wind and Slope" :group "Wind Speed" :subgroup nil :value "1"} + {:module "Surface" :submodule "Wind and Slope" :group "Wind and slope are" :subgroup nil :value "Aligned (Wind is ≤30° from upslope)."} + {:module "Surface" :submodule "Wind and Slope" :group "Slope" :subgroup nil :value "0"}]}} diff --git a/development/test_matrix_data.edn b/development/test_matrix_data.edn new file mode 100644 index 000000000..5f2d633ea --- /dev/null +++ b/development/test_matrix_data.edn @@ -0,0 +1,12472 @@ +{:input-visibility + {[{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "Moisture Scenario", + :key "behaveplus:surface:input:fuel_moisture:moisture-scenario"}] + {:group/translated-name "Moisture Scenario", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 3, + :submodule/order 3, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["Moisture Scenario"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "Moisture Input Mode", + :key + "behaveplus:surface:input:fuel_moisture:moisture_input_mode"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Moisture Input Mode", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}}], + :conditionals-operator nil}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:output:spot"} + :output] + {:submodule/name "Spot", + :submodule/io :output, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["surface"]}], + :conditionals-operator :or}}, + [{:name "Contain", :key "behaveplus:contain"} + {:name "Fire", :key "behaveplus:contain:input:fire"} + :input] + {:submodule/name "Fire", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["contain"]}], + :conditionals-operator :and}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "Dead, Live Herb, and Live Woody Categories", + :key + "behaveplus:surface:input:fuel_moisture:dead-live-herb-and-live-woody-categories"} + {:name "Dead Fuel Moisture", + :key + "behaveplus:surface:input:fuel_moisture:dead-live-herb-and-live-woody-categories:dead-fuel-moisture"}] + {:group/translated-name "Dead Fuel Moisture", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 3, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :in, + :values + ["FB1/1 - Short grass (Static)" + "FB10/10 - Timber litter & understory (Static)" + "GR1/101 - Short, sparse, dry climate grass (Dynamic)" + "GR2/102 - Low load, dry climate grass (Dynamic)" + "GR3/103 - Low load, very coarse, humid climate grass (Dynamic)" + "GR4/104 - Moderate load, dry climate grass (Dynamic)" + "GR5/105 - Low load, humid climate grass (Dynamic)" + "GR6/106 - Moderate load, humid climate grass (Dynamic)" + "GR7/107 - High load, dry climate grass (Dynamic)" + "GR8/108 - High load, very coarse, humid climate grass (Dynamic)" + "GR9/109 - Very high load, humid climate grass (Dynamic)" + "FB11/11 - Light logging slash (Static)" + "V-Ha/111 - Tall Grass, > 0.5 m (Dynamic)" + "FB12/12 - Medium logging slash (Static)" + "GS1/121 - Low load, dry climate grass-shrub (Dynamic)" + "GS2/122 - Moderate load, dry climate grass-shrub (Dynamic)" + "GS3/123 - Moderate load, humid climate grass-shrub (Dynamic)" + "GS4/124 - High load, humid climate grass-shrub (Dynamic)" + "FB13/13 - Heavy logging slash (Static)" + "SH1/141 - Low load, dry climate shrub (Dynamic)" + "SH2/142 - Moderate load, dry climate shrub (Static)" + "SH3/143 - Moderate load, humid climate shrub (Static)" + "SH4/144 - Low load, humid climate timber-shrub (Static)" + "SH5/145 - High load, dry climate shrub (Static)" + "SH6/146 - Low load, humid climate shrub (Static)" + "SH7/147 - Very high load, dry climate shrub (Static)" + "SH8/148 - High load, humid climate shrub (Static)" + "SH9/149 - Very high load, humid climate shrub (Dynamic)" + "SCAL17/150 - Chamise with Moderate Load Grass, 4 feet (Static)" + "SCAL15/151 - Chamise with Low Load Grass, 3 feet (Static)" + "SCAL16/152 - North Slope Ceanothus with Moderate Load Grass (Static)" + "SCAL14/153 - Manzanita/Scrub Oak with Low Load Grass (Static)" + "SCAL18/154 - Coastal Sage/Buckwheat Scrub with Low Load Grass (Static)" + "V-MH/155 - Short Green Shrub < 1 m With Grass, Discontinuous (< 1 m) often discontinuous and with grass (Dynamic)" + "V-MMb/156 - Short Shrub < 1 m, Low Dead Fraction and/or Thick Foliage (Static)" + "V-MAb/157 - Short Shrub < 1 m, High Dead Fraction and/or Thin Fuel (Static)" + "V-MMa/158 - Tall Shrub > 1 m, Low Dead Fraction and/or Thick Foliage (Static)" + "V-MAa/159 - Tall Shrub > 1 m, High Dead Fraction and/or Thin Fuel (Static)" + "TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic)" + "TU2/162 - Moderate load, humid climate timber-shrub (Static)" + "TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic)" + "TU4/164 - Dwarf conifer understory (Static)" + "TU5/165 - Very high load, dry climate timber-shrub (Static)" + "M-EUCd/166 - Discontinuous Litter Eucalyptus Plantation, With or Without Shrub Understory (Static)" + "M-H/167 - Deciduous or Conifer Litter, Shrub and Herb Understory" + "M-F/168 - Deciduous or Conifer Litter, Shrub and Fern Understory (Dynamic)" + "M-CAD/169 - Deciduous Litter, Shrub Understory (Static)" + "M-ESC/170 - Sclerophyll Broadleaf Litter, Shrub Understory (Static)" + "M-PIN/171 - Medium-Long Needle Pine Litter, Shrub Understory (Static)" + "M-EUC/172 - Eucalyptus Litter, Shrub Understory (Static)" + "TL1/181 - Low load, compact conifer litter (Static)" + "TL2/182 - Low load broadleaf litter (Static)" + "TL3/183 - Moderate load conifer litter (Static)" + "TL4/184 - Small downed logs (Static)" + "TL5/185 - High load conifer litter (Static)" + "TL6/186 - Moderate load broadleaf litter (Static)" + "TL7/187 - Large downed logs (Static)" + "TL8/188 - Long-needle litter (Static)" + "TL9/189 - Very high load broadleaf litter (Static)" + "F-RAC/190 - Very Compact Litter, Short Needle Conifers (Static)" + "F-FOL/191 - Compact Litter, Deciduous or Evergreen Foliage (Static)" + "F-PIN/192 - Litter from Medium-Long Needle Pine Trees (Static)" + "F-EUC/193 - Pure Eucalyptus Litter, No Understory (Static)" + "FB2/2 - Timber grass and understory (Static)" + "SB1/201 - Low load activity fuel (Static)" + "SB2/202 - Moderate load activity or low load blowdown (Static)" + "SB3/203 - High load activity fuel or moderate load blowdown (Static)" + "SB4/204 - High load blowdown (Static)" + "FB3/3 - Tall grass (Static)" + "FB4/4 - Chaparral (Static)" + "FB5/5 - Brush (Static)" + "FB6/6 - Dormant brush, hardwood slash (Static)" + "FB7/7 - Southern rough (Static)" + "FB8/8 - Short needle litter (Static)" + "FB9/9 - Long needle or hardwood litter (Static)"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key + "behaveplus:surface:input:fuel_models:standard:fuel_model"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuel Model Code", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:output:spot"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:surface:output:spot:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? false, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Wind-Driven Surface Fire (Grass Only)", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? false}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spread Directions", + :key "behaveplus:surface:input:directions_of_surface_spread__wind"} + :input] + {:submodule/name "Spread Directions", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Direction of Interest", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? true}}], + :conditionals-operator :or}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", :key "behaveplus:crown:input:spotting"} + :input] + {:submodule/name "Spot", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", + :key "behaveplus:crown:output:spotting_active_crown_fire"} + :output + {:name "Flame Height above Canopy", + :key + "behaveplus:crown:output:spotting_active_crown_fire:flame_height_above_canopy"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame height above Canopy", + :group-variable/order 0, + :submodule/order 6, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", + :key "behaveplus:crown:output:spotting_active_crown_fire"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:crown:output:spotting_active_crown_fire:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Crown Fire", + :group-variable/order 1, + :submodule/order 6, + :group/single-select? false}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", + :key "behaveplus:crown:output:spotting_active_crown_fire"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:crown:output:spotting_active_crown_fire:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Torching Trees", + :group-variable/order 0, + :submodule/order 6, + :group/single-select? false}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:input:spot"} + :input] + {:submodule/name "Spot", + :submodule/io :input, + :submodule/research? false, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:output:spot"} + :output + {:name "Burning Pile", + :key "behaveplus:surface:output:spot:burning_pile"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? true, + :group-variable/translated-name + "Firebrand Height from a Burning Pile", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:output:spot"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:surface:output:spot:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? false, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Burning Pile", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? false}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:output:spot"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:surface:output:spot:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? false, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Wind-Driven Surface Fire (Grass Only)", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? false}}], + :conditionals-operator :or}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Weather", :key "behaveplus:crown:input:weather"} + :input + {:name "Wind Adjustment Factor", + :key "behaveplus:crown:input:weather:wind_adjustment_factor"} + {:name "Wind Adjustment Factor", + :key + "behaveplus:crown:input:weather:wind_adjustment_factor:wind-adjustment-factor"}] + {:group/translated-name "Wind Adjustment Factor", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 4, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["crown"]} + {:type :group-variable, + :operator :equal, + :values ["User Input"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Weather", :key "behaveplus:crown:input:weather"} + :input + {:name "Wind Adjustment Factor", + :key + "behaveplus:crown:input:weather:wind_adjustment_factor"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Wind Adjustment Factor Calculation Method", + :group-variable/order 0, + :submodule/order 4, + :group/single-select? nil}}], + :conditionals-operator :and}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Special Case", + :key "behaveplus:surface:input:fuel_models:special_case"}] + {:group/translated-name "Special Case", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 0, + :submodule/order 0, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Leaves", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Fine: 0 to 0.25 inches", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Medium: 0.25 to 1 inches", + :group-variable/order 2, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Foliage: On Stem", + :group-variable/order 3, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Fuelbed", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:fuelbed"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuelbed Depth", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Fine: 0 to 0.25 inches", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Foliage: On Stem", + :group-variable/order 2, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Medium: 0.25 to 1 inches", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Leaves", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Stems less than 0.25 inches", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Stems 0.25 Inches to 0.50 Inches", + :group-variable/order 2, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Stems 0.50 Inches to 1.0 inches", + :group-variable/order 3, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Stems 1.0 to 3.0 inches", + :group-variable/order 4, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Less than: 0.25 Inches", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "From 0.25 Inches to 0.50 inches", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "From 0.50 Inches to 1.0 inches", + :group-variable/order 2, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "From 1.0 Inches to 3.0 Inches", + :group-variable/order 3, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Total Dead Fuel Load", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Total Live Fuel Load", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Western Aspen", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen"} + {:name "Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen:fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "1-h Fuel Load", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Western Aspen", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen"} + {:name "Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen:fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Woody Fuel Load", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Western Aspen", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen"} + {:name "Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen:fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Herbaceous Fuel Load", + :group-variable/order 2, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Western Aspen", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen"} + {:name "Surface Area-to-Volume Ratio (SA/V)", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen:surface_area_to_volume_ratio_sav"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "1-h SA/V", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Western Aspen", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen"} + {:name "Surface Area-to-Volume Ratio (SA/V)", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen:surface_area_to_volume_ratio_sav"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Woody SA/V", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Crown Fire Method", + :key "behaveplus:crown:input:calculation_options"} + :input] + {:submodule/name "Crown Fire Method", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Length-to-Width Ratio", + :group-variable/order 2, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Fire Type", + :key "behaveplus:crown:output:fire_type:fire_type"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? true, + :group-variable/translated-name "Fire Type", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Transition Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Surface Flame Length", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Rate of Spread", + :group-variable/order 2, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Fireline Intensity", + :group-variable/order 3, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Crown Rate of Spread", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:input:size"} + :input] + {:submodule/name "Size", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 1, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 0, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Shape Diagram", + :group-variable/order 4, + :submodule/order 2, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", :key "behaveplus:surface:input:wind_speed"} + :input + {:name "10-Meter Wind Speed", + :key "behaveplus:surface:input:wind_speed:10_meter_wind_speed"}] + {:group/translated-name "10-Meter Wind Speed", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 2, + :submodule/order 6, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["10-Meter"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", + :key "behaveplus:surface:input:wind_speed"} + :input + {:name "Wind Measured at:", + :key "behaveplus:surface:input:wind_speed:wind_height"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Wind Measured at:", + :group-variable/order 0, + :submodule/order 6, + :group/single-select? nil}}], + :conditionals-operator nil}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:input:spot"} + :input + {:name "Burning Pile", + :key "behaveplus:surface:input:spot:burning-pile"}] + {:group/translated-name "Burning Pile", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 0, + :submodule/order 10, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:output:spot"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:surface:output:spot:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? false, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Burning Pile", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? false}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:output:spot"} + :output + {:name "Burning Pile", + :key "behaveplus:surface:output:spot:burning_pile"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? true, + :group-variable/translated-name + "Firebrand Height from a Burning Pile", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", :key "behaveplus:crown:input:spotting"} + :input + {:name "Downwind Canopy Fuel", + :key "behaveplus:crown:input:spotting:canopy_fuel"}] + {:group/translated-name "Downwind Canopy Fuel", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 3, + :submodule/order 8, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", + :key "behaveplus:crown:output:spotting_active_crown_fire"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:crown:output:spotting_active_crown_fire:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Crown Fire", + :group-variable/order 1, + :submodule/order 6, + :group/single-select? false}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Crown Rate of Spread", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Fireline Intensity", + :group-variable/order 3, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Surface Flame Length", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Rate of Spread", + :group-variable/order 2, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Transition Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}}], + :conditionals-operator :and}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", :key "behaveplus:crown:input:spotting"} + :input + {:name "Linked Inputs (hidden)", + :key "behaveplus:crown:input:spotting:linked_inputs"}] + {:group/translated-name "Linked Inputs (hidden)", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 5, + :submodule/order 8, + :conditionals + {:conditionals + [{:type :module, + :operator :equal, + :values ["contain" "crown" "mortality" "surface"]}], + :conditionals-operator :and}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output] + {:submodule/name "Fire Behavior", + :submodule/io :output, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["surface"]} + {:type :module, :operator :equal, :values ["contain" "surface"]} + {:type :module, + :operator :equal, + :values ["mortality" "surface"]}], + :conditionals-operator :or}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Foliar Moisture", + :key "behaveplus:crown:input:fuel_moisture"} + :input + {:name "Live Woody Fuel Moisture", + :key + "behaveplus:crown:input:fuel_moisture:live-woody-fuel-moisture"}] + {:group/translated-name "Live Woody Fuel Moisture", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 6, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["crown"]}], + :conditionals-operator :and}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models:standard:fuel_model"}] + {:group/translated-name "Fuel Model", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 0, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:output:spot"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:surface:output:spot:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? false, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Wind-Driven Surface Fire (Grass Only)", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? false}}], + :conditionals-operator nil}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output] + {:submodule/name "Size", + :submodule/io :output, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["surface"]}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Special Case", + :key "behaveplus:surface:input:fuel_models:special_case"} + {:name "Chaparral (Upland)", + :key + "behaveplus:surface:input:fuel_models:special_case:chaparral_upland"}] + {:group/translated-name "Chaparral (Upland)", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 0, + :submodule/order 0, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Leaves", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Stems less than 0.25 inches", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Stems 0.25 Inches to 0.50 Inches", + :group-variable/order 2, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Stems 0.50 Inches to 1.0 inches", + :group-variable/order 3, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Stems 1.0 to 3.0 inches", + :group-variable/order 4, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Less than: 0.25 Inches", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "From 0.25 Inches to 0.50 inches", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "From 0.50 Inches to 1.0 inches", + :group-variable/order 2, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "From 1.0 Inches to 3.0 Inches", + :group-variable/order 3, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Total Dead Fuel Load", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Chaparral", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral"} + {:name "Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:chaparral:fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Total Live Fuel Load", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Weather", :key "behaveplus:surface:input:weather"} + :input + {:name "1-h Fuel Moisture", + :key "behaveplus:surface:input:weather:1_h_fuel_moisture"}] + {:group/translated-name "1-h Fuel Moisture", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 0, + :submodule/order 11, + :conditionals + {:conditionals + [{:type :module, + :operator :equal, + :values ["contain" "crown" "mortality" "surface"]}], + :conditionals-operator nil}}, + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Scorch", :key "behaveplus:mortality:input:scorch"} + :input + {:name "Fire", :key "behaveplus:mortality:input:scorch:fire"} + {:name "Surface Fire Flame Length", + :key + "behaveplus:mortality:input:scorch:fire:surface_fire_flame_length"}] + {:group/translated-name "Surface Fire Flame Length", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 0, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["mortality"]} + {:type :group-variable, + :operator :equal, + :values ["Flame Length"], + :group-variable + {:path + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Scorch", :key "behaveplus:mortality:input:scorch"} + :input + {:name "Fire", :key "behaveplus:mortality:input:scorch:fire"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "ScorchHeightOrFlameLength", + :group-variable/order 0, + :submodule/order 2, + :group/single-select? nil}}], + :conditionals-operator :and}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "By Size Class", + :key "behaveplus:surface:input:fuel_moisture:by-size-class"} + {:name "10-h Fuel Moisture", + :key + "behaveplus:surface:input:fuel_moisture:by-size-class:10-h-fuel-moisture"}] + {:group/translated-name "10-h Fuel Moisture", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 3, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :in, + :values + ["FB10/10 - Timber litter & understory (Static)" + "GR3/103 - Low load, very coarse, humid climate grass (Dynamic)" + "GR8/108 - High load, very coarse, humid climate grass (Dynamic)" + "GR9/109 - Very high load, humid climate grass (Dynamic)" + "FB11/11 - Light logging slash (Static)" + "V-Hb/110 - Short Grass, < 0.5 m (Dynamic)" + "V-Ha/111 - Tall Grass, > 0.5 m (Dynamic)" + "FB12/12 - Medium logging slash (Static)" + "GS2/122 - Moderate load, dry climate grass-shrub (Dynamic)" + "GS3/123 - Moderate load, humid climate grass-shrub (Dynamic)" + "GS4/124 - High load, humid climate grass-shrub (Dynamic)" + "FB13/13 - Heavy logging slash (Static)" + "SH1/141 - Low load, dry climate shrub (Dynamic)" + "SH2/142 - Moderate load, dry climate shrub (Static)" + "SH3/143 - Moderate load, humid climate shrub (Static)" + "SH4/144 - Low load, humid climate timber-shrub (Static)" + "SH5/145 - High load, dry climate shrub (Static)" + "SH6/146 - Low load, humid climate shrub (Static)" + "SH7/147 - Very high load, dry climate shrub (Static)" + "SH8/148 - High load, humid climate shrub (Static)" + "SH9/149 - Very high load, humid climate shrub (Dynamic)" + "SCAL17/150 - Chamise with Moderate Load Grass, 4 feet (Static)" + "SCAL15/151 - Chamise with Low Load Grass, 3 feet (Static)" + "SCAL16/152 - North Slope Ceanothus with Moderate Load Grass (Static)" + "SCAL14/153 - Manzanita/Scrub Oak with Low Load Grass (Static)" + "SCAL18/154 - Coastal Sage/Buckwheat Scrub with Low Load Grass (Static)" + "V-MH/155 - Short Green Shrub < 1 m With Grass, Discontinuous (< 1 m) often discontinuous and with grass (Dynamic)" + "V-MMb/156 - Short Shrub < 1 m, Low Dead Fraction and/or Thick Foliage (Static)" + "V-MAb/157 - Short Shrub < 1 m, High Dead Fraction and/or Thin Fuel (Static)" + "V-MMa/158 - Tall Shrub > 1 m, Low Dead Fraction and/or Thick Foliage (Static)" + "V-MAa/159 - Tall Shrub > 1 m, High Dead Fraction and/or Thin Fuel (Static)" + "TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic)" + "TU2/162 - Moderate load, humid climate timber-shrub (Static)" + "TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic)" + "TU5/165 - Very high load, dry climate timber-shrub (Static)" + "M-EUCd/166 - Discontinuous Litter Eucalyptus Plantation, With or Without Shrub Understory (Static)" + "M-H/167 - Deciduous or Conifer Litter, Shrub and Herb Understory" + "M-F/168 - Deciduous or Conifer Litter, Shrub and Fern Understory (Dynamic)" + "M-CAD/169 - Deciduous Litter, Shrub Understory (Static)" + "M-ESC/170 - Sclerophyll Broadleaf Litter, Shrub Understory (Static)" + "M-PIN/171 - Medium-Long Needle Pine Litter, Shrub Understory (Static)" + "M-EUC/172 - Eucalyptus Litter, Shrub Understory (Static)" + "TL1/181 - Low load, compact conifer litter (Static)" + "TL2/182 - Low load broadleaf litter (Static)" + "TL3/183 - Moderate load conifer litter (Static)" + "TL4/184 - Small downed logs (Static)" + "TL5/185 - High load conifer litter (Static)" + "TL6/186 - Moderate load broadleaf litter (Static)" + "TL7/187 - Large downed logs (Static)" + "TL8/188 - Long-needle litter (Static)" + "TL9/189 - Very high load broadleaf litter (Static)" + "F-RAC/190 - Very Compact Litter, Short Needle Conifers (Static)" + "F-FOL/191 - Compact Litter, Deciduous or Evergreen Foliage (Static)" + "F-PIN/192 - Litter from Medium-Long Needle Pine Trees (Static)" + "F-EUC/193 - Pure Eucalyptus Litter, No Understory (Static)" + "FB2/2 - Timber grass and understory (Static)" + "SB1/201 - Low load activity fuel (Static)" + "SB2/202 - Moderate load activity or low load blowdown (Static)" + "SB3/203 - High load activity fuel or moderate load blowdown (Static)" + "SB4/204 - High load blowdown (Static)" + "FB4/4 - Chaparral (Static)" + "FB5/5 - Brush (Static)" + "FB6/6 - Dormant brush, hardwood slash (Static)" + "FB7/7 - Southern rough (Static)" + "FB8/8 - Short needle litter (Static)" + "FB9/9 - Long needle or hardwood litter (Static)"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key + "behaveplus:surface:input:fuel_models:standard:fuel_model"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuel Model Code", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Crown Rate of Spread", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Fireline Intensity", + :group-variable/order 3, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Surface Flame Length", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Rate of Spread", + :group-variable/order 2, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Transition Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :in, + :values + ["GR3/103 - Low load, very coarse, humid climate grass (Dynamic)" + "GR8/108 - High load, very coarse, humid climate grass (Dynamic)" + "GR9/109 - Very high load, humid climate grass (Dynamic)"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key + "behaveplus:surface:input:fuel_models:standard:wind-driven-fuel-model"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuel Model", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Tree Characteristics", + :key "behaveplus:mortality:input:fuelvegetation_overstory"} + :input + {:name "Crown Ratio", + :key + "behaveplus:mortality:input:fuelvegetation_overstory:crown_ratio"}] + {:group/translated-name "Crown Ratio", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 2, + :submodule/order 0, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :in, + :values + ["Abies amabilis / ABAM (Pacific silver fir)" + "Abies balsamea / ABBA (Balsam fir)" + "Abies concolor / ABCO (White fir)" + "Abies grandis / ABGR (Grand fir)" + "Abies lasiocarpa / ABLA (Subalpine fir)" + "Abies magnifica / ABMA (Red Fir)" + "Abies procera / ABPR (Noble Fir)" + "Acer barbatum / ACBA3 (Southern sugar maple)" + "Acer macrophyllum / ACMA3 (Bigleaf maple)" + "Acer negundo / ACNE2 (Boxelder)" + "Acer nigrum / ACNI5 (Black maple)" + "Acer pensylvanicum / ACPE (Striped maple)" + "Acer saccharinum / ACSA2 (Silver maple)" + "Acer saccharum / ACSA3 (Sugar maple)" + "Acer spicatum / ACSP2 (Mountain maple)" + "Aesculus flava / AEFL (Yellow buckeye)" + "Aesculus glabra / AEGL (Ohio buckeye)" + "Ailanthus altissima / AIAL (Ailanthus)" + "Alnus rhombifolia / ALRH2 (White alder)" + "Alnus rubra / ALRU2 (Red alder)" + "Amelanchier arborea / AMAR3 (Common serviceberry)" + "Arbutus menziesii / ARME (Pacific madrone)" + "Betula alleghaniensis / BEAL2 (Yellow birch)" + "Betula lenta / BELE (Sweet birch)" + "Betula nigra / BENI (River Birch)" + "Betula occidentalis / BEOC2 (Water birch)" + "Betula papyrifera / BEPA (Paper birch)" + "Betula species / BETSPP (Birches)" + "Carya alba / CAAL27 (Mockernut hickory)" + "Carpinus caroliniana / CACA18 (American hornbeam)" + "Carya cordiformis / CACOL3 (Bitternut hickory)" + "Castanea dentata / CADE12 (American chestnut)" + "Calocedrus decurrens / CADE27 (Incense - cedar)" + "Carya glabra / CAGL8 (Pignut hickory)" + "Carya illinoinensis / CAIL2 (Pecan)" + "Carya laciniosa / CALA21 (Shellbark hickory)" + "Carya ovata / CAOV2 (Shagbark hickory)" + "Carya species / CARSPP (Hickories)" + "Carya texana / CATE9 (Black hickory)" + "Cercis canadensis / CECA4 (Eastern redbud)" + "Celtis laevigata / CELA (Sugarberry)" + "Celtis occidentalis / CEOC (Common hackberry)" + "Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin)" + "Chamaecyparis lawsoniana / CHLA (PortOrford - cedar)" + "Chamaecyparis nootkatensis / CHNO (Alaska - cedar)" + "Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar)" + "Cornus nuttallii / CONU4 (Pacific dogwood)" + "Crataegus species / CRASPP (Hawthorns)" + "Diospyros virginiana / DIVI5 (Persimmon)" + "Fagus grandifolia / FAGR (American beech)" + "Fraxinus americana / FRAM2 (White ash)" + "Fraxinus species / FRASPP (Ashes)" + "Fraxinus nigra / FRNI (Black ash)" + "Fraxinus pennsylvanica / FRPE (Green ash)" + "Fraxinus profunda / FRPR (Pumpkin ash)" + "Fraxinus quadrangulata / FRQU (Blue ash)" + "Gleditsia triacanthos / GLTR (Honeylocust)" + "Gordonia lasianthus / GOLA (Loblolly bay)" + "Gymnocladus dioicus / GYDI (Kentucky coffeetree)" + "Halesia species / HALSPP (Silverbells)" + "Ilex opaca / ILOP (American holly)" + "Juglans cinerea / JUCI (Butternut)" + "Juglans nigra / JUNI (Black walnut)" + "Juniperus occidentalis / JUOC (Western juniper)" + "Juniperus virginiana / JUVI (Eastern redcedar)" + "Larix laricina / LALA (Tamarack)" + "Larix lyallii / LALY (Subalpine Larch)" + "Larix occidentalis / LAOC (Western Larch)" + "Lithocarpus densiflorus / LIDE3 (Tanoak)" + "Liquidambar styraciflua / LIST2 (Sweetgum)" + "Liriodendron tulipifera / LITU (Tuliptree)" + "Magnolia acuminata / MAAC (Cucumber - tree)" + "Magnolia grandiflora / MAGR4 (Southern magnolia)" + "Magnolia species / MAGSPP (Magnolias)" + "Prunus species / MALPRU (cherry and plum species)" + "Malus species / MALSPP (Apples)" + "Magnolia macrophylla / MAMA2 (Bigleaf magnolia)" + "Maclura pomifera / MAPO (Osage - orange)" + "Magnolia virginiana / MAVI2 (Sweetbay)" + "Morus alba / MOAL (White mulberry)" + "Morus species / MORSPP (Mulberries)" + "Morus rubra / MORU2 (Red mulberry)" + "Nyssa aquatica / NYAQ2 (Water tupelo)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa ogeche / NYOG (Ogeechee tupelo)" + "Ostrya virginiana / OSVI (Hophornbeam)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Paulownia tomentosa / PATO2 (Princesstree)" + "Persea borbonia / PEBO (Redbay)" + "Picea abies / PIAB (Norway spruce)" + "Pinus albicaulis / PIAL (Whitebark pine)" + "Pinus attenuata / PIAT (Knobcone pine)" + "Pinus banksiana / PIBA2 (Jack pine)" + "Pinus clausa / PICL (Sand pine)" + "Pinus contorta / PICO (Lodgepole pine)" + "Pinus echinata / PIEC2 (Shortleaf pine)" + "Pinus elliottii / PIEL (Slash pine)" + "Picea engelmannii / PIEN (Engelmann spruce)" + "Pinus flexilis / PIFL2 (Limber pine)" + "Picea glauca / PIGL (White spruce)" + "Pinus glabra / PIGL2 (Spruce pine)" + "Pinus jeffreyi / PIJE (Jeffrey pine)" + "Pinus lambertiana / PILA (Sugar pine)" + "Picea mariana / PIMA (Black spruce)" + "Pinus monticola / PIMO3 (Western white pine)" + "Pinus palustris / PIPA2 (Longleaf pine)" + "Pinus ponderosa / PIPO (Ponderosa pine)" + "Picea pungens / PIPU (Blue spruce)" + "Pinus pungens / PIPU5 (Table mountain pine)" + "Pinus resinosa / PIRE (Red pine)" + "Pinus rigida / PIRI (Pitch pine)" + "Picea rubens / PIRU (Red spruce)" + "Pinus sabiniana / PISA2 (Gray pine)" + "Pinus serotina / PISE (Pond pine)" + "Picea sitchensis / PISI (Sitka spruce)" + "Pinus strobus / PIST (Eastern white pine)" + "Pinus sylvestris / PISY (Scots pine)" + "Pinus taeda / PITA (Loblolly pine)" + "Pinus virginiana / PIVI2 (Virginia pine)" + "Platanus occidentalis / PLOC (American sycamore)" + "Populus balsamifera / POBA2 (Balsam poplar)" + "Populus grandidentata / POGR4 (Bigtooth aspen)" + "Populus heterophylla / POHE4 (Swamp cottonwood)" + "Populus tremuloides / POTR12 (Quaking aspen)" + "Prunus americana / PRAM (American plum)" + "Prunus emarginata / PREM (Bitter cherry)" + "Prunus pensylvanica / PRPE2 (Pin cherry)" + "Prunus serotina / PRSE2 (Black cherry)" + "Prunus virginiana / PRVI (Chokecherry)" + "Pseudotsuga menziesii / PSME (Douglas - fir)" + "Quercus agrifolia / QUAG (California live oak)" + "Quercus chrysolepis / QUCH2 (Canyon live oak)" + "Quercus douglasii / QUDU (Blue oak)" + "Quercus ellipsoidalis / QUEL (Northern pin oak)" + "Quercus species / QUESPP (Oaks)" + "Quercus falcata / QUFA (Southern red oak)" + "Quercus imbricaria / QUIM (Shingle oak)" + "Quercus incana / QUIN (Bluejack oak)" + "Quercus laevis / QULA2 (Turkey oak)" + "Quercus laurifolia / QULA3 (Laurel oak)" + "Quercus lobata / QULO (Valley oak)" + "Quercus lyrata / QULY (Overcup oak)" + "Quercus macrocarpa / QUMA2 (Bur oak)" + "Quercus michauxii / QUMI (Swamp chestnut oak)" + "Quercus muehlenbergii / QUMU (Chinkapin oak)" + "Quercus nigra / QUNI (Water oak)" + "Quercus palustris / QUPA2 (Pin oak)" + "Quercus phellos / QUPH (Willow oak)" + "Quercus rubra / QURU (Northern red oak)" + "Quercus shumardii / QUSH (Shumard oak)" + "Quercus stellata / QUST (Post oak)" + "Quercus texana / QUTE (Texas red oak)" + "Quercus virginiana / QUVI (Live oak)" + "Quercus wislizeni / QUWI2 (Interior live oak)" + "Robinia pseudoacacia / ROPS (Black locust)" + "Salix bebbiana / SABE2 (Bebb willow)" + "Salix species / SALSPP (Willows)" + "Salix nigra / SANI (Black willow)" + "Sorbus americana / SOAM3 (American mountain - ash)" + "Taxodium ascendens / TAAS (Pond cypress)" + "Taxus brevifolia / TABR2 (Pacific yew)" + "Taxodium distichum / TADI2 (Bald cypress)" + "Thuja occidentalis / THOC2 (arborvitae)" + "Thuja plicata / THPL (Western redcedar)" + "Tilia americana / TIAM (American basswood)" + "Tsuga canadensis / TSCA (Eastern hemlock)" + "Tsuga heterophylla / TSHE (Western hemlock)" + "Tsuga mertensiana / TSME (Mountain hemlock)" + "Ulmus alata / ULAL (Winged elm)" + "Ulmus americana / ULAM (American elm)" + "Ulmus species / ULMSPP (Elms)" + "Ulmus pumila / ULPU (Siberian elm)" + "Ulmus rubra / ULRU (Slippery elm)" + "Ulmus thomasii / ULTH (Rock elm)" + "Umbellularia californica / UMCA (California - laurel)"], + :group-variable + {:path + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Tree Characteristics", + :key "behaveplus:mortality:input:fuelvegetation_overstory"} + :input + {:name "Mortality Tree Species", + :key + "behaveplus:mortality:input:fuelvegetation_overstory:mortality_tree_species"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Mortality Tree Species", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}}], + :conditionals-operator nil}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "All Aggregate", + :key "behaveplus:surface:input:fuel_moisture:all-aggregate"}] + {:group/translated-name "All Aggregate", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 2, + :submodule/order 3, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["All Aggregate"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "Moisture Input Mode", + :key + "behaveplus:surface:input:fuel_moisture:moisture_input_mode"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Moisture Input Mode", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}}], + :conditionals-operator nil}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input] + {:submodule/name "Fuel Moisture", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Surface Fire", + :key "behaveplus:surface:output:fire_behavior:surface_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Surface Fire", + :key "behaveplus:surface:output:fire_behavior:surface_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Surface Fire", + :key "behaveplus:surface:output:fire_behavior:surface_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 1, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 0, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Length-to-Width Ratio", + :group-variable/order 2, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Length-to-Width Ratio", + :group-variable/order 2, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Fire Type", + :key "behaveplus:crown:output:fire_type:fire_type"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? true, + :group-variable/translated-name "Fire Type", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Transition Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Surface Flame Length", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Rate of Spread", + :group-variable/order 2, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Fireline Intensity", + :group-variable/order 3, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Crown Rate of Spread", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :module, :operator :equal, :values ["mortality" "surface"]} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Ignition", + :key "behaveplus:surface:output:fire_behavior:ignition"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Probability of Ignition", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Ignition", :key "behaveplus:crown:output:ignition"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Probability of Ignition", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", :key "behaveplus:surface:input:wind_speed"} + :input + {:name "Wind Adjustment Factor", + :key "behaveplus:surface:input:wind_speed:wind-adjustment-factor"}] + {:group/translated-name "Wind Adjustment Factor", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 4, + :submodule/order 6, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :in, + :values ["20-Foot" "10-Meter"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", + :key "behaveplus:surface:input:wind_speed"} + :input + {:name "Wind Measured at:", + :key "behaveplus:surface:input:wind_speed:wind_height"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Wind Measured at:", + :group-variable/order 0, + :submodule/order 6, + :group/single-select? nil}, + :sub-conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Heading", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Heading, Flanking, Backing", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Direction of Interest", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", + :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", + :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", + :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Crown Rate of Spread", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Fireline Intensity", + :group-variable/order 3, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Flame Length", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Rate of Spread", + :group-variable/order 2, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Transition Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Length-to-Width Ratio", + :group-variable/order 2, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Fuel", + :key "behaveplus:surface:output:wind-and-fuel"} + :output + {:name "Wind", + :key "behaveplus:surface:output:wind-and-fuel:wind"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Midflame Wind Speed", + :group-variable/order 0, + :submodule/order 12, + :group/single-select? nil}}], + :sub-conditional-operator :or}], + :conditionals-operator :and}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Foliar Moisture", + :key "behaveplus:crown:input:fuel_moisture"} + :input] + {:submodule/name "Foliar Moisture", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Length-to-Width Ratio", + :group-variable/order 2, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Fire Type", + :key "behaveplus:crown:output:fire_type:fire_type"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? true, + :group-variable/translated-name "Fire Type", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Transition Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Surface Flame Length", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Rate of Spread", + :group-variable/order 2, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Fireline Intensity", + :group-variable/order 3, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Crown Rate of Spread", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Foliar Moisture", + :key "behaveplus:crown:input:fuel_moisture"} + :input + {:name "Fuel Model Number", + :key "behaveplus:crown:input:fuel_moisture:fuel-model-number"}] + {:group/translated-name "Fuel Model Number", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 7, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["crown"]}], + :conditionals-operator :and}}, + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Scorch", :key "behaveplus:mortality:input:scorch"} + :input + {:name "Fire", :key "behaveplus:mortality:input:scorch:fire"}] + {:group/translated-name "Fire", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 1, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["mortality"]}], + :conditionals-operator nil}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", :key "behaveplus:surface:input:wind_speed"} + :input + {:name "Slope", :key "behaveplus:surface:input:wind_speed:slope"}] + {:group/translated-name "Slope", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 6, + :submodule/order 6, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Heading", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Heading, Flanking, Backing", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Direction of Interest", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 1, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 0, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Length-to-Width Ratio", + :group-variable/order 2, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Length-to-Width Ratio", + :group-variable/order 2, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Rate of Spread", + :group-variable/order 2, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Fireline Intensity", + :group-variable/order 3, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Transition Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Surface Flame Length", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Crown Rate of Spread", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "Dead, Live Herb, and Live Woody Categories", + :key + "behaveplus:surface:input:fuel_moisture:dead-live-herb-and-live-woody-categories"}] + {:group/translated-name "Dead, Live Herb, and Live Woody Categories", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 4, + :submodule/order 3, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["Dead, Live Herb, and Live Woody Categories"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "Moisture Input Mode", + :key + "behaveplus:surface:input:fuel_moisture:moisture_input_mode"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Moisture Input Mode", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}}], + :conditionals-operator :and}}, + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Mortality", + :key "behaveplus:mortality:output:tree_mortality"} + :output] + {:submodule/name "Mortality", + :submodule/io :output, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["mortality"]}], + :conditionals-operator nil}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", :key "behaveplus:crown:input:spotting"} + :input + {:name "Fire Behavior", + :key "behaveplus:crown:input:spotting:fire_behavior"} + {:name "Active Crown Flame Length (Hidden)", + :key + "behaveplus:crown:input:spotting:fire_behavior:active_crown_flame_length_hidden"}] + {:group/translated-name "Active Crown Flame Length (Hidden)", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 8, + :conditionals + {:conditionals + [{:type :module, + :operator :equal, + :values ["contain" "crown" "mortality" "surface"]}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Special Case", + :key "behaveplus:surface:input:fuel_models:special_case"} + {:name "Chaparral (Upland)", + :key + "behaveplus:surface:input:fuel_models:special_case:chaparral_upland"} + {:name "Calculated from fuel depth and type", + :key + "behaveplus:surface:input:fuel_models:special_case:chaparral_upland:calculated_from_fuel_depth_and_type"}] + {:group/translated-name "Calculated from fuel depth and type", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 1, + :submodule/order 0, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["Fuel Load from Depth & Chaparral Type"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Special Case", + :key "behaveplus:surface:input:fuel_models:special_case"} + {:name "Chaparral (Upland)", + :key + "behaveplus:surface:input:fuel_models:special_case:chaparral_upland"} + {:name "Total Fuel Load is...", + :key + "behaveplus:surface:input:fuel_models:special_case:chaparral_upland:total_fuel_load_is"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Chaparral Fuel Load Input Mode", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}}], + :conditionals-operator nil}}, + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Scorch", :key "behaveplus:mortality:input:scorch"} + :input + {:name "Surface Fire Fireline Intensity", + :key + "behaveplus:mortality:input:scorch:fire:surface-fire-fireline-intensity"}] + {:group/translated-name "Surface Fire Fireline Intensity", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 2, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["mortality"]}], + :conditionals-operator nil}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Topography", :key "behaveplus:crown:topography"} + :input] + {:submodule/name "Topography", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["crown"]}], + :conditionals-operator :and}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Foliar Moisture", + :key "behaveplus:crown:input:fuel_moisture"} + :input + {:name "Moisture Input Mode", + :key "behaveplus:crown:input:fuel_moisture:moisture-input-mode"}] + {:group/translated-name "Moisture Input Mode", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 8, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["crown"]}], + :conditionals-operator :and}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Weather", :key "behaveplus:crown:input:weather"} + :input] + {:submodule/name "Weather", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["crown"]}], + :conditionals-operator :and}}, + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Scorch", :key "behaveplus:mortality:input:scorch"} + :input] + {:submodule/name "Scorch", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :in, + :values + ["Abies amabilis / ABAM (Pacific silver fir)" + "Abies balsamea / ABBA (Balsam fir)" + "Abies concolor / ABCO (White fir)" + "Abies grandis / ABGR (Grand fir)" + "Abies lasiocarpa / ABLA (Subalpine fir)" + "Abies magnifica / ABMA (Red Fir)" + "Abies procera / ABPR (Noble Fir)" + "Acer barbatum / ACBA3 (Southern sugar maple)" + "Acer macrophyllum / ACMA3 (Bigleaf maple)" + "Acer negundo / ACNE2 (Boxelder)" + "Acer nigrum / ACNI5 (Black maple)" + "Acer pensylvanicum / ACPE (Striped maple)" + "Acer saccharinum / ACSA2 (Silver maple)" + "Acer saccharum / ACSA3 (Sugar maple)" + "Acer spicatum / ACSP2 (Mountain maple)" + "Aesculus flava / AEFL (Yellow buckeye)" + "Aesculus glabra / AEGL (Ohio buckeye)" + "Ailanthus altissima / AIAL (Ailanthus)" + "Alnus rhombifolia / ALRH2 (White alder)" + "Alnus rubra / ALRU2 (Red alder)" + "Amelanchier arborea / AMAR3 (Common serviceberry)" + "Arbutus menziesii / ARME (Pacific madrone)" + "Betula alleghaniensis / BEAL2 (Yellow birch)" + "Betula lenta / BELE (Sweet birch)" + "Betula nigra / BENI (River Birch)" + "Betula occidentalis / BEOC2 (Water birch)" + "Betula papyrifera / BEPA (Paper birch)" + "Betula species / BETSPP (Birches)" + "Carya alba / CAAL27 (Mockernut hickory)" + "Carpinus caroliniana / CACA18 (American hornbeam)" + "Carya cordiformis / CACOL3 (Bitternut hickory)" + "Castanea dentata / CADE12 (American chestnut)" + "Calocedrus decurrens / CADE27 (Incense - cedar)" + "Carya glabra / CAGL8 (Pignut hickory)" + "Carya illinoinensis / CAIL2 (Pecan)" + "Carya laciniosa / CALA21 (Shellbark hickory)" + "Carya ovata / CAOV2 (Shagbark hickory)" + "Carya species / CARSPP (Hickories)" + "Carya texana / CATE9 (Black hickory)" + "Cercis canadensis / CECA4 (Eastern redbud)" + "Celtis laevigata / CELA (Sugarberry)" + "Celtis occidentalis / CEOC (Common hackberry)" + "Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin)" + "Chamaecyparis lawsoniana / CHLA (PortOrford - cedar)" + "Chamaecyparis nootkatensis / CHNO (Alaska - cedar)" + "Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar)" + "Cornus nuttallii / CONU4 (Pacific dogwood)" + "Crataegus species / CRASPP (Hawthorns)" + "Diospyros virginiana / DIVI5 (Persimmon)" + "Fagus grandifolia / FAGR (American beech)" + "Fraxinus americana / FRAM2 (White ash)" + "Fraxinus species / FRASPP (Ashes)" + "Fraxinus nigra / FRNI (Black ash)" + "Fraxinus pennsylvanica / FRPE (Green ash)" + "Fraxinus profunda / FRPR (Pumpkin ash)" + "Fraxinus quadrangulata / FRQU (Blue ash)" + "Gleditsia triacanthos / GLTR (Honeylocust)" + "Gordonia lasianthus / GOLA (Loblolly bay)" + "Gymnocladus dioicus / GYDI (Kentucky coffeetree)" + "Halesia species / HALSPP (Silverbells)" + "Ilex opaca / ILOP (American holly)" + "Juglans cinerea / JUCI (Butternut)" + "Juglans nigra / JUNI (Black walnut)" + "Juniperus occidentalis / JUOC (Western juniper)" + "Juniperus virginiana / JUVI (Eastern redcedar)" + "Larix laricina / LALA (Tamarack)" + "Larix lyallii / LALY (Subalpine Larch)" + "Larix occidentalis / LAOC (Western Larch)" + "Lithocarpus densiflorus / LIDE3 (Tanoak)" + "Liquidambar styraciflua / LIST2 (Sweetgum)" + "Liriodendron tulipifera / LITU (Tuliptree)" + "Magnolia acuminata / MAAC (Cucumber - tree)" + "Magnolia grandiflora / MAGR4 (Southern magnolia)" + "Magnolia species / MAGSPP (Magnolias)" + "Prunus species / MALPRU (cherry and plum species)" + "Malus species / MALSPP (Apples)" + "Magnolia macrophylla / MAMA2 (Bigleaf magnolia)" + "Maclura pomifera / MAPO (Osage - orange)" + "Magnolia virginiana / MAVI2 (Sweetbay)" + "Morus alba / MOAL (White mulberry)" + "Morus species / MORSPP (Mulberries)" + "Morus rubra / MORU2 (Red mulberry)" + "Nyssa aquatica / NYAQ2 (Water tupelo)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa ogeche / NYOG (Ogeechee tupelo)" + "Ostrya virginiana / OSVI (Hophornbeam)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Paulownia tomentosa / PATO2 (Princesstree)" + "Persea borbonia / PEBO (Redbay)" + "Picea abies / PIAB (Norway spruce)" + "Pinus albicaulis / PIAL (Whitebark pine)" + "Pinus attenuata / PIAT (Knobcone pine)" + "Pinus banksiana / PIBA2 (Jack pine)" + "Pinus clausa / PICL (Sand pine)" + "Pinus contorta / PICO (Lodgepole pine)" + "Pinus echinata / PIEC2 (Shortleaf pine)" + "Pinus elliottii / PIEL (Slash pine)" + "Picea engelmannii / PIEN (Engelmann spruce)" + "Pinus flexilis / PIFL2 (Limber pine)" + "Picea glauca / PIGL (White spruce)" + "Pinus glabra / PIGL2 (Spruce pine)" + "Pinus jeffreyi / PIJE (Jeffrey pine)" + "Pinus lambertiana / PILA (Sugar pine)" + "Picea mariana / PIMA (Black spruce)" + "Pinus monticola / PIMO3 (Western white pine)" + "Pinus palustris / PIPA2 (Longleaf pine)" + "Pinus ponderosa / PIPO (Ponderosa pine)" + "Picea pungens / PIPU (Blue spruce)" + "Pinus pungens / PIPU5 (Table mountain pine)" + "Pinus resinosa / PIRE (Red pine)" + "Pinus rigida / PIRI (Pitch pine)" + "Picea rubens / PIRU (Red spruce)" + "Pinus sabiniana / PISA2 (Gray pine)" + "Pinus serotina / PISE (Pond pine)" + "Picea sitchensis / PISI (Sitka spruce)" + "Pinus strobus / PIST (Eastern white pine)" + "Pinus sylvestris / PISY (Scots pine)" + "Pinus taeda / PITA (Loblolly pine)" + "Pinus virginiana / PIVI2 (Virginia pine)" + "Platanus occidentalis / PLOC (American sycamore)" + "Populus balsamifera / POBA2 (Balsam poplar)" + "Populus grandidentata / POGR4 (Bigtooth aspen)" + "Populus heterophylla / POHE4 (Swamp cottonwood)" + "Populus tremuloides / POTR12 (Quaking aspen)" + "Prunus americana / PRAM (American plum)" + "Prunus emarginata / PREM (Bitter cherry)" + "Prunus pensylvanica / PRPE2 (Pin cherry)" + "Prunus serotina / PRSE2 (Black cherry)" + "Prunus virginiana / PRVI (Chokecherry)" + "Pseudotsuga menziesii / PSME (Douglas - fir)" + "Quercus agrifolia / QUAG (California live oak)" + "Quercus chrysolepis / QUCH2 (Canyon live oak)" + "Quercus douglasii / QUDU (Blue oak)" + "Quercus ellipsoidalis / QUEL (Northern pin oak)" + "Quercus species / QUESPP (Oaks)" + "Quercus falcata / QUFA (Southern red oak)" + "Quercus imbricaria / QUIM (Shingle oak)" + "Quercus incana / QUIN (Bluejack oak)" + "Quercus laevis / QULA2 (Turkey oak)" + "Quercus laurifolia / QULA3 (Laurel oak)" + "Quercus lobata / QULO (Valley oak)" + "Quercus lyrata / QULY (Overcup oak)" + "Quercus macrocarpa / QUMA2 (Bur oak)" + "Quercus michauxii / QUMI (Swamp chestnut oak)" + "Quercus muehlenbergii / QUMU (Chinkapin oak)" + "Quercus nigra / QUNI (Water oak)" + "Quercus palustris / QUPA2 (Pin oak)" + "Quercus phellos / QUPH (Willow oak)" + "Quercus rubra / QURU (Northern red oak)" + "Quercus shumardii / QUSH (Shumard oak)" + "Quercus stellata / QUST (Post oak)" + "Quercus texana / QUTE (Texas red oak)" + "Quercus virginiana / QUVI (Live oak)" + "Quercus wislizeni / QUWI2 (Interior live oak)" + "Robinia pseudoacacia / ROPS (Black locust)" + "Salix bebbiana / SABE2 (Bebb willow)" + "Salix species / SALSPP (Willows)" + "Salix nigra / SANI (Black willow)" + "Sorbus americana / SOAM3 (American mountain - ash)" + "Taxodium ascendens / TAAS (Pond cypress)" + "Taxus brevifolia / TABR2 (Pacific yew)" + "Taxodium distichum / TADI2 (Bald cypress)" + "Thuja occidentalis / THOC2 (arborvitae)" + "Thuja plicata / THPL (Western redcedar)" + "Tilia americana / TIAM (American basswood)" + "Tsuga canadensis / TSCA (Eastern hemlock)" + "Tsuga heterophylla / TSHE (Western hemlock)" + "Tsuga mertensiana / TSME (Mountain hemlock)" + "Ulmus alata / ULAL (Winged elm)" + "Ulmus americana / ULAM (American elm)" + "Ulmus species / ULMSPP (Elms)" + "Ulmus pumila / ULPU (Siberian elm)" + "Ulmus rubra / ULRU (Slippery elm)" + "Ulmus thomasii / ULTH (Rock elm)" + "Umbellularia californica / UMCA (California - laurel)"], + :group-variable + {:path + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Tree Characteristics", + :key "behaveplus:mortality:input:fuelvegetation_overstory"} + :input + {:name "Mortality Tree Species", + :key + "behaveplus:mortality:input:fuelvegetation_overstory:mortality_tree_species"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Mortality Tree Species", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Scorch", :key "behaveplus:mortality:input:scorch"} + :input + {:name "Midflame Wind Speed", + :key + "behaveplus:mortality:input:scorch:fire:surface-fire-midflame-wind-speed"}] + {:group/translated-name "Midflame Wind Speed", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 5, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["mortality"]}], + :conditionals-operator nil}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", :key "behaveplus:surface:input:wind_speed"} + :input + {:name "Wind Speed", + :key "behaveplus:surface:input:wind_speed:midflame-wind-speed"}] + {:group/translated-name "Wind Speed", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 3, + :submodule/order 6, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["Midflame (Eye Level)"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", + :key "behaveplus:surface:input:wind_speed"} + :input + {:name "Wind Measured at:", + :key "behaveplus:surface:input:wind_speed:wind_height"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Wind Measured at:", + :group-variable/order 0, + :submodule/order 6, + :group/single-select? nil}}], + :conditionals-operator nil}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", :key "behaveplus:surface:input:wind_speed"} + :input + {:name "20-Foot Wind Speed", + :key "behaveplus:surface:input:wind_speed:wind_speed"}] + {:group/translated-name "20-Foot Wind Speed", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 1, + :submodule/order 6, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["20-Foot"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", + :key "behaveplus:surface:input:wind_speed"} + :input + {:name "Wind Measured at:", + :key "behaveplus:surface:input:wind_speed:wind_height"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Wind Measured at:", + :group-variable/order 0, + :submodule/order 6, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", :key "behaveplus:surface:input:wind_speed"} + :input] + {:submodule/name "Wind and Slope", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Heading", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Direction of Interest", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Heading, Flanking, Backing", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Surface Fire", + :key "behaveplus:surface:output:fire_behavior:surface_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Surface Fire", + :key "behaveplus:surface:output:fire_behavior:surface_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Surface Fire", + :key "behaveplus:surface:output:fire_behavior:surface_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:output:spot"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:surface:output:spot:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? false, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Burning Pile", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? false}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:output:spot"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:surface:output:spot:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? false, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Wind-Driven Surface Fire (Grass Only)", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? false}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 1, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 0, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Length-to-Width Ratio", + :group-variable/order 2, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Crown Rate of Spread", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Fireline Intensity", + :group-variable/order 3, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Surface Flame Length", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Rate of Spread", + :group-variable/order 2, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Transition Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", + :key "behaveplus:crown:output:spotting_active_crown_fire"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:crown:output:spotting_active_crown_fire:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Torching Trees", + :group-variable/order 0, + :submodule/order 6, + :group/single-select? false}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", + :key "behaveplus:crown:output:spotting_active_crown_fire"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:crown:output:spotting_active_crown_fire:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Crown Fire", + :group-variable/order 1, + :submodule/order 6, + :group/single-select? false}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Fuel", + :key "behaveplus:surface:output:wind-and-fuel"} + :output + {:name "Wind", + :key "behaveplus:surface:output:wind-and-fuel:wind"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Midflame Wind Speed", + :group-variable/order 0, + :submodule/order 12, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", :key "behaveplus:crown:input:spotting"} + :input + {:name "Fire Behavior", + :key "behaveplus:crown:input:spotting:fire_behavior"}] + {:group/translated-name "Fire Behavior", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 2, + :submodule/order 8, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", + :key "behaveplus:crown:output:spotting_active_crown_fire"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:crown:output:spotting_active_crown_fire:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Crown Fire", + :group-variable/order 1, + :submodule/order 6, + :group/single-select? false}}], + :conditionals-operator :and}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Foliar Moisture", + :key "behaveplus:crown:input:fuel_moisture"} + :input + {:name "Moisture Scenario", + :key "behaveplus:crown:input:fuel_moisture:moisture_scenario"}] + {:group/translated-name "Moisture Scenario", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 0, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["crown"]}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:input:spot"} + :input + {:name "Surface Fire Flame Length", + :key "behaveplus:surface:input:spot:surface-fire-flame-length"}] + {:group/translated-name "Surface Fire Flame Length", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 1, + :submodule/order 10, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Heading", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Heading, Flanking, Backing", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["false"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Direction of Interest", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:output:spot"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:surface:output:spot:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? false, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Wind-Driven Surface Fire (Grass Only)", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? false}}], + :conditionals-operator :and}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key + "behaveplus:surface:input:fuel_models:standard:wind-driven-fuel-model"}] + {:group/translated-name "Fuel Model", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 0, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spot", :key "behaveplus:surface:output:spot"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:surface:output:spot:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? false, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Wind-Driven Surface Fire (Grass Only)", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? false}}], + :conditionals-operator :or}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:size"} + :input] + {:submodule/name "Size", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["crown"]}], + :conditionals-operator nil}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "Dead, Live Herb, and Live Woody Categories", + :key + "behaveplus:surface:input:fuel_moisture:dead-live-herb-and-live-woody-categories"} + {:name "Live Herbaceous Fuel Moisture", + :key + "behaveplus:surface:input:fuel_moisture:dead-live-herb-and-live-woody-categories:live-herbaceous-fuel-moisture"}] + {:group/translated-name "Live Herbaceous Fuel Moisture", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 3, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :in, + :values + ["GR1/101 - Short, sparse, dry climate grass (Dynamic)" + "GR2/102 - Low load, dry climate grass (Dynamic)" + "GR3/103 - Low load, very coarse, humid climate grass (Dynamic)" + "GR4/104 - Moderate load, dry climate grass (Dynamic)" + "GR5/105 - Low load, humid climate grass (Dynamic)" + "GR6/106 - Moderate load, humid climate grass (Dynamic)" + "GR7/107 - High load, dry climate grass (Dynamic)" + "GR8/108 - High load, very coarse, humid climate grass (Dynamic)" + "GR9/109 - Very high load, humid climate grass (Dynamic)" + "V-Ha/111 - Tall Grass, > 0.5 m (Dynamic)" + "GS1/121 - Low load, dry climate grass-shrub (Dynamic)" + "GS2/122 - Moderate load, dry climate grass-shrub (Dynamic)" + "GS3/123 - Moderate load, humid climate grass-shrub (Dynamic)" + "GS4/124 - High load, humid climate grass-shrub (Dynamic)" + "SH1/141 - Low load, dry climate shrub (Dynamic)" + "SH9/149 - Very high load, humid climate shrub (Dynamic)" + "SCAL17/150 - Chamise with Moderate Load Grass, 4 feet (Static)" + "SCAL15/151 - Chamise with Low Load Grass, 3 feet (Static)" + "SCAL16/152 - North Slope Ceanothus with Moderate Load Grass (Static)" + "SCAL14/153 - Manzanita/Scrub Oak with Low Load Grass (Static)" + "SCAL18/154 - Coastal Sage/Buckwheat Scrub with Low Load Grass (Static)" + "V-MH/155 - Short Green Shrub < 1 m With Grass, Discontinuous (< 1 m) often discontinuous and with grass (Dynamic)" + "V-MMb/156 - Short Shrub < 1 m, Low Dead Fraction and/or Thick Foliage (Static)" + "V-MAb/157 - Short Shrub < 1 m, High Dead Fraction and/or Thin Fuel (Static)" + "V-MMa/158 - Tall Shrub > 1 m, Low Dead Fraction and/or Thick Foliage (Static)" + "V-MAa/159 - Tall Shrub > 1 m, High Dead Fraction and/or Thin Fuel (Static)" + "TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic)" + "TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic)" + "M-EUCd/166 - Discontinuous Litter Eucalyptus Plantation, With or Without Shrub Understory (Static)" + "M-H/167 - Deciduous or Conifer Litter, Shrub and Herb Understory" + "M-F/168 - Deciduous or Conifer Litter, Shrub and Fern Understory (Dynamic)" + "M-CAD/169 - Deciduous Litter, Shrub Understory (Static)" + "M-ESC/170 - Sclerophyll Broadleaf Litter, Shrub Understory (Static)" + "M-PIN/171 - Medium-Long Needle Pine Litter, Shrub Understory (Static)" + "M-EUC/172 - Eucalyptus Litter, Shrub Understory (Static)" + "F-RAC/190 - Very Compact Litter, Short Needle Conifers (Static)" + "F-FOL/191 - Compact Litter, Deciduous or Evergreen Foliage (Static)" + "F-EUC/193 - Pure Eucalyptus Litter, No Understory (Static)" + "FB2/2 - Timber grass and understory (Static)"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key + "behaveplus:surface:input:fuel_models:standard:fuel_model"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuel Model Code", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}} + {:type :group-variable, + :operator :in, + :values + ["GR1/101 - Short, sparse, dry climate grass (Dynamic)" + "GR2/102 - Low load, dry climate grass (Dynamic)" + "GR3/103 - Low load, very coarse, humid climate grass (Dynamic)" + "GR4/104 - Moderate load, dry climate grass (Dynamic)" + "GR5/105 - Low load, humid climate grass (Dynamic)" + "GR6/106 - Moderate load, humid climate grass (Dynamic)" + "GR7/107 - High load, dry climate grass (Dynamic)" + "GR8/108 - High load, very coarse, humid climate grass (Dynamic)" + "GR9/109 - Very high load, humid climate grass (Dynamic)" + "GS1/121 - Low load, dry climate grass-shrub (Dynamic)"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key + "behaveplus:surface:input:fuel_models:standard:wind-driven-fuel-model"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuel Model", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "By Size Class", + :key "behaveplus:surface:input:fuel_moisture:by-size-class"} + {:name "Live Herbaceous Fuel Moisture", + :key + "behaveplus:surface:input:fuel_moisture:by-size-class:live-herbaceous-fuel-moisture"}] + {:group/translated-name "Live Herbaceous Fuel Moisture", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 3, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :in, + :values + ["GR1/101 - Short, sparse, dry climate grass (Dynamic)" + "GR2/102 - Low load, dry climate grass (Dynamic)" + "GR3/103 - Low load, very coarse, humid climate grass (Dynamic)" + "GR4/104 - Moderate load, dry climate grass (Dynamic)" + "GR5/105 - Low load, humid climate grass (Dynamic)" + "GR6/106 - Moderate load, humid climate grass (Dynamic)" + "GR7/107 - High load, dry climate grass (Dynamic)" + "GR8/108 - High load, very coarse, humid climate grass (Dynamic)" + "GR9/109 - Very high load, humid climate grass (Dynamic)" + "V-Hb/110 - Short Grass, < 0.5 m (Dynamic)" + "V-Ha/111 - Tall Grass, > 0.5 m (Dynamic)" + "GS1/121 - Low load, dry climate grass-shrub (Dynamic)" + "GS2/122 - Moderate load, dry climate grass-shrub (Dynamic)" + "GS3/123 - Moderate load, humid climate grass-shrub (Dynamic)" + "GS4/124 - High load, humid climate grass-shrub (Dynamic)" + "SH1/141 - Low load, dry climate shrub (Dynamic)" + "SH9/149 - Very high load, humid climate shrub (Dynamic)" + "SCAL17/150 - Chamise with Moderate Load Grass, 4 feet (Static)" + "SCAL15/151 - Chamise with Low Load Grass, 3 feet (Static)" + "SCAL16/152 - North Slope Ceanothus with Moderate Load Grass (Static)" + "SCAL14/153 - Manzanita/Scrub Oak with Low Load Grass (Static)" + "SCAL18/154 - Coastal Sage/Buckwheat Scrub with Low Load Grass (Static)" + "V-MH/155 - Short Green Shrub < 1 m With Grass, Discontinuous (< 1 m) often discontinuous and with grass (Dynamic)" + "TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic)" + "TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic)" + "M-H/167 - Deciduous or Conifer Litter, Shrub and Herb Understory" + "M-F/168 - Deciduous or Conifer Litter, Shrub and Fern Understory (Dynamic)" + "FB2/2 - Timber grass and understory (Static)"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key + "behaveplus:surface:input:fuel_models:standard:fuel_model"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuel Model Code", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}} + {:type :group-variable, + :operator :in, + :values + ["GR1/101 - Short, sparse, dry climate grass (Dynamic)" + "GR2/102 - Low load, dry climate grass (Dynamic)" + "GR3/103 - Low load, very coarse, humid climate grass (Dynamic)" + "GR4/104 - Moderate load, dry climate grass (Dynamic)" + "GR5/105 - Low load, humid climate grass (Dynamic)" + "GR6/106 - Moderate load, humid climate grass (Dynamic)" + "GR7/107 - High load, dry climate grass (Dynamic)" + "GR8/108 - High load, very coarse, humid climate grass (Dynamic)" + "GR9/109 - Very high load, humid climate grass (Dynamic)" + "GS1/121 - Low load, dry climate grass-shrub (Dynamic)"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key + "behaveplus:surface:input:fuel_models:standard:wind-driven-fuel-model"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuel Model", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "By Size Class", + :key "behaveplus:surface:input:fuel_moisture:by-size-class"} + {:name "100-h Fuel Moisture", + :key + "behaveplus:surface:input:fuel_moisture:by-size-class:100-h-fuel-moisture"}] + {:group/translated-name "100-h Fuel Moisture", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 3, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :in, + :values + ["FB10/10 - Timber litter & understory (Static)" + "FB11/11 - Light logging slash (Static)" + "FB12/12 - Medium logging slash (Static)" + "GS4/124 - High load, humid climate grass-shrub (Dynamic)" + "FB13/13 - Heavy logging slash (Static)" + "SH2/142 - Moderate load, dry climate shrub (Static)" + "SH4/144 - Low load, humid climate timber-shrub (Static)" + "SH7/147 - Very high load, dry climate shrub (Static)" + "SH8/148 - High load, humid climate shrub (Static)" + "SCAL17/150 - Chamise with Moderate Load Grass, 4 feet (Static)" + "SCAL15/151 - Chamise with Low Load Grass, 3 feet (Static)" + "SCAL16/152 - North Slope Ceanothus with Moderate Load Grass (Static)" + "SCAL14/153 - Manzanita/Scrub Oak with Low Load Grass (Static)" + "SCAL18/154 - Coastal Sage/Buckwheat Scrub with Low Load Grass (Static)" + "TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic)" + "TU2/162 - Moderate load, humid climate timber-shrub (Static)" + "TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic)" + "TU5/165 - Very high load, dry climate timber-shrub (Static)" + "M-EUCd/166 - Discontinuous Litter Eucalyptus Plantation, With or Without Shrub Understory (Static)" + "M-F/168 - Deciduous or Conifer Litter, Shrub and Fern Understory (Dynamic)" + "M-CAD/169 - Deciduous Litter, Shrub Understory (Static)" + "M-ESC/170 - Sclerophyll Broadleaf Litter, Shrub Understory (Static)" + "TL1/181 - Low load, compact conifer litter (Static)" + "TL2/182 - Low load broadleaf litter (Static)" + "TL3/183 - Moderate load conifer litter (Static)" + "TL4/184 - Small downed logs (Static)" + "TL5/185 - High load conifer litter (Static)" + "TL6/186 - Moderate load broadleaf litter (Static)" + "TL7/187 - Large downed logs (Static)" + "TL8/188 - Long-needle litter (Static)" + "TL9/189 - Very high load broadleaf litter (Static)" + "F-RAC/190 - Very Compact Litter, Short Needle Conifers (Static)" + "F-FOL/191 - Compact Litter, Deciduous or Evergreen Foliage (Static)" + "F-EUC/193 - Pure Eucalyptus Litter, No Understory (Static)" + "FB2/2 - Timber grass and understory (Static)" + "SB1/201 - Low load activity fuel (Static)" + "SB2/202 - Moderate load activity or low load blowdown (Static)" + "SB3/203 - High load activity fuel or moderate load blowdown (Static)" + "SB4/204 - High load blowdown (Static)" + "FB4/4 - Chaparral (Static)" + "FB6/6 - Dormant brush, hardwood slash (Static)" + "FB7/7 - Southern rough (Static)" + "FB8/8 - Short needle litter (Static)" + "FB9/9 - Long needle or hardwood litter (Static)"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key + "behaveplus:surface:input:fuel_models:standard:fuel_model"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuel Model Code", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Crown Rate of Spread", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Fireline Intensity", + :group-variable/order 3, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Surface Flame Length", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Rate of Spread", + :group-variable/order 2, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Transition Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", :key "behaveplus:surface:input:fuel_models"} + :input] + {:submodule/name "Fuel Model", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Surface Fire", + :key "behaveplus:surface:output:fire_behavior:surface_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Surface Fire", + :key "behaveplus:surface:output:fire_behavior:surface_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Surface Fire", + :key "behaveplus:surface:output:fire_behavior:surface_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 1, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 0, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Length-to-Width Ratio", + :group-variable/order 2, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Length-to-Width Ratio", + :group-variable/order 2, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Fire Type", + :key "behaveplus:crown:output:fire_type:fire_type"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? true, + :group-variable/translated-name "Fire Type", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Transition Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Surface Flame Length", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Rate of Spread", + :group-variable/order 2, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Fireline Intensity", + :group-variable/order 3, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Crown Rate of Spread", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :module, + :operator :equal, + :values ["mortality" "surface"]}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Special Case", + :key "behaveplus:surface:input:fuel_models:special_case"} + {:name "Western Aspen", + :key + "behaveplus:surface:input:fuel_models:special_case:western_aspen"}] + {:group/translated-name "Western Aspen", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 1, + :submodule/order 0, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Western Aspen", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen"} + {:name "Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen:fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "1-h Fuel Load", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Western Aspen", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen"} + {:name "Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen:fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Woody Fuel Load", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Western Aspen", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen"} + {:name "Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen:fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Herbaceous Fuel Load", + :group-variable/order 2, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Western Aspen", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen"} + {:name "Surface Area-to-Volume Ratio (SA/V)", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen:surface_area_to_volume_ratio_sav"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "1-h SA/V", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Western Aspen", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen"} + {:name "Surface Area-to-Volume Ratio (SA/V)", + :key + "behaveplus:surface:output:special_case_fuel_models:western_aspen:surface_area_to_volume_ratio_sav"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Woody SA/V", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", :key "behaveplus:surface:input:wind_speed"} + :input + {:name "Wind and slope are", + :key "behaveplus:surface:input:wind_speed:wind_and_slope_are"}] + {:group/translated-name "Wind and slope are", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 5, + :submodule/order 6, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Heading, Flanking, Backing", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Direction of Interest", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Heading", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? true}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 1, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 0, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Size", :key "behaveplus:surface:output:size"} + :output + {:name "Surface - Fire Size", + :key "behaveplus:surface:output:size:surface___fire_size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Length-to-Width Ratio", + :group-variable/order 2, + :submodule/order 2, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Length-to-Width Ratio", + :group-variable/order 2, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Rate of Spread", + :group-variable/order 2, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Fireline Intensity", + :group-variable/order 3, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Transition Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Surface Flame Length", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Crown Rate of Spread", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "By Size Class", + :key "behaveplus:surface:input:fuel_moisture:by-size-class"}] + {:group/translated-name "By Size Class", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 1, + :submodule/order 3, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["Individual Size Class"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "Moisture Input Mode", + :key + "behaveplus:surface:input:fuel_moisture:moisture_input_mode"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Moisture Input Mode", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}}], + :conditionals-operator nil}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "Dead, Live Herb, and Live Woody Categories", + :key + "behaveplus:surface:input:fuel_moisture:dead-live-herb-and-live-woody-categories"} + {:name "Live Woody Fuel Moisture", + :key + "behaveplus:surface:input:fuel_moisture:dead-live-herb-and-live-woody-categories:live-woody-fuel-moisture"}] + {:group/translated-name "Live Woody Fuel Moisture", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 3, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :in, + :values + ["FB10/10 - Timber litter & understory (Static)" + "GS1/121 - Low load, dry climate grass-shrub (Dynamic)" + "GS2/122 - Moderate load, dry climate grass-shrub (Dynamic)" + "GS3/123 - Moderate load, humid climate grass-shrub (Dynamic)" + "GS4/124 - High load, humid climate grass-shrub (Dynamic)" + "SH1/141 - Low load, dry climate shrub (Dynamic)" + "SH2/142 - Moderate load, dry climate shrub (Static)" + "SH3/143 - Moderate load, humid climate shrub (Static)" + "SH4/144 - Low load, humid climate timber-shrub (Static)" + "SH5/145 - High load, dry climate shrub (Static)" + "SH6/146 - Low load, humid climate shrub (Static)" + "SH7/147 - Very high load, dry climate shrub (Static)" + "SH8/148 - High load, humid climate shrub (Static)" + "SH9/149 - Very high load, humid climate shrub (Dynamic)" + "TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic)" + "TU2/162 - Moderate load, humid climate timber-shrub (Static)" + "TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic)" + "TU4/164 - Dwarf conifer understory (Static)" + "TU5/165 - Very high load, dry climate timber-shrub (Static)" + "FB4/4 - Chaparral (Static)" + "FB5/5 - Brush (Static)" + "FB7/7 - Southern rough (Static)"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key + "behaveplus:surface:input:fuel_models:standard:fuel_model"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuel Model Code", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}} + {:type :module, :operator :equal, :values ["crown" "surface"]} + {:type :group-variable, + :operator :in, + :values + ["GS1/121 - Low load, dry climate grass-shrub (Dynamic)"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key + "behaveplus:surface:input:fuel_models:standard:wind-driven-fuel-model"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuel Model", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Spread Directions", + :key "behaveplus:surface:input:directions_of_surface_spread__wind"} + :input + {:name "Direction of Interest", + :key + "behaveplus:surface:input:directions_of_surface_spread__wind:surface_fire_wind__spread:direction-of-interest"}] + {:group/translated-name "Direction of Interest", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 1, + :submodule/order 4, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Direction Mode", + :key + "behaveplus:surface:output:fire_behavior:surface_fire:direction_mode"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Direction of Interest", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? true}}], + :conditionals-operator nil}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Weather", :key "behaveplus:crown:input:weather"} + :input + {:name "Wind and slope are", + :key "behaveplus:crown:input:weather:wind-and-slope-are"} + {:name "Wind Direction", + :key + "behaveplus:crown:input:weather:wind-and-slope-are:wind-direction"}] + {:group/translated-name "Wind Direction", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 4, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["Not Aligned (Wind is >30° from upslope)."], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Weather", :key "behaveplus:crown:input:weather"} + :input + {:name "Wind and slope are", + :key "behaveplus:crown:input:weather:wind-and-slope-are"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 4, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Wind and Slope Alignment Mode", + :group-variable/order 0, + :submodule/order 4, + :group/single-select? nil}}], + :conditionals-operator :and}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", :key "behaveplus:crown:input:spotting"} + :input + {:name "Torching Trees", + :key "behaveplus:crown:input:spotting:torching_trees"}] + {:group/translated-name "Torching Trees", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 0, + :submodule/order 8, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Spot", + :key "behaveplus:crown:output:spotting_active_crown_fire"} + :output + {:name "Maximum Spotting Distance", + :key + "behaveplus:crown:output:spotting_active_crown_fire:maximum_spotting_distance"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Torching Trees", + :group-variable/order 0, + :submodule/order 6, + :group/single-select? false}}], + :conditionals-operator :or}}, + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Tree Characteristics", + :key "behaveplus:mortality:input:fuelvegetation_overstory"} + :input + {:name "Canopy Height", + :key + "behaveplus:mortality:input:fuelvegetation_overstory:canopy_height"}] + {:group/translated-name "Canopy Height", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 1, + :submodule/order 0, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :in, + :values + ["Abies amabilis / ABAM (Pacific silver fir)" + "Abies balsamea / ABBA (Balsam fir)" + "Abies concolor / ABCO (White fir)" + "Abies grandis / ABGR (Grand fir)" + "Abies lasiocarpa / ABLA (Subalpine fir)" + "Abies magnifica / ABMA (Red Fir)" + "Abies procera / ABPR (Noble Fir)" + "Acer barbatum / ACBA3 (Southern sugar maple)" + "Acer macrophyllum / ACMA3 (Bigleaf maple)" + "Acer negundo / ACNE2 (Boxelder)" + "Acer nigrum / ACNI5 (Black maple)" + "Acer pensylvanicum / ACPE (Striped maple)" + "Acer saccharinum / ACSA2 (Silver maple)" + "Acer saccharum / ACSA3 (Sugar maple)" + "Acer spicatum / ACSP2 (Mountain maple)" + "Aesculus flava / AEFL (Yellow buckeye)" + "Aesculus glabra / AEGL (Ohio buckeye)" + "Ailanthus altissima / AIAL (Ailanthus)" + "Alnus rhombifolia / ALRH2 (White alder)" + "Alnus rubra / ALRU2 (Red alder)" + "Amelanchier arborea / AMAR3 (Common serviceberry)" + "Arbutus menziesii / ARME (Pacific madrone)" + "Betula alleghaniensis / BEAL2 (Yellow birch)" + "Betula lenta / BELE (Sweet birch)" + "Betula nigra / BENI (River Birch)" + "Betula occidentalis / BEOC2 (Water birch)" + "Betula papyrifera / BEPA (Paper birch)" + "Betula species / BETSPP (Birches)" + "Carya alba / CAAL27 (Mockernut hickory)" + "Carpinus caroliniana / CACA18 (American hornbeam)" + "Carya cordiformis / CACOL3 (Bitternut hickory)" + "Castanea dentata / CADE12 (American chestnut)" + "Calocedrus decurrens / CADE27 (Incense - cedar)" + "Carya glabra / CAGL8 (Pignut hickory)" + "Carya illinoinensis / CAIL2 (Pecan)" + "Carya laciniosa / CALA21 (Shellbark hickory)" + "Carya ovata / CAOV2 (Shagbark hickory)" + "Carya species / CARSPP (Hickories)" + "Carya texana / CATE9 (Black hickory)" + "Cercis canadensis / CECA4 (Eastern redbud)" + "Celtis laevigata / CELA (Sugarberry)" + "Celtis occidentalis / CEOC (Common hackberry)" + "Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin)" + "Chamaecyparis lawsoniana / CHLA (PortOrford - cedar)" + "Chamaecyparis nootkatensis / CHNO (Alaska - cedar)" + "Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar)" + "Cornus nuttallii / CONU4 (Pacific dogwood)" + "Crataegus species / CRASPP (Hawthorns)" + "Diospyros virginiana / DIVI5 (Persimmon)" + "Fagus grandifolia / FAGR (American beech)" + "Fraxinus americana / FRAM2 (White ash)" + "Fraxinus species / FRASPP (Ashes)" + "Fraxinus nigra / FRNI (Black ash)" + "Fraxinus pennsylvanica / FRPE (Green ash)" + "Fraxinus profunda / FRPR (Pumpkin ash)" + "Fraxinus quadrangulata / FRQU (Blue ash)" + "Gleditsia triacanthos / GLTR (Honeylocust)" + "Gordonia lasianthus / GOLA (Loblolly bay)" + "Gymnocladus dioicus / GYDI (Kentucky coffeetree)" + "Halesia species / HALSPP (Silverbells)" + "Ilex opaca / ILOP (American holly)" + "Juglans cinerea / JUCI (Butternut)" + "Juglans nigra / JUNI (Black walnut)" + "Juniperus occidentalis / JUOC (Western juniper)" + "Juniperus virginiana / JUVI (Eastern redcedar)" + "Larix laricina / LALA (Tamarack)" + "Larix lyallii / LALY (Subalpine Larch)" + "Larix occidentalis / LAOC (Western Larch)" + "Lithocarpus densiflorus / LIDE3 (Tanoak)" + "Liquidambar styraciflua / LIST2 (Sweetgum)" + "Liriodendron tulipifera / LITU (Tuliptree)" + "Magnolia acuminata / MAAC (Cucumber - tree)" + "Magnolia grandiflora / MAGR4 (Southern magnolia)" + "Magnolia species / MAGSPP (Magnolias)" + "Prunus species / MALPRU (cherry and plum species)" + "Malus species / MALSPP (Apples)" + "Magnolia macrophylla / MAMA2 (Bigleaf magnolia)" + "Maclura pomifera / MAPO (Osage - orange)" + "Magnolia virginiana / MAVI2 (Sweetbay)" + "Morus alba / MOAL (White mulberry)" + "Morus species / MORSPP (Mulberries)" + "Morus rubra / MORU2 (Red mulberry)" + "Nyssa aquatica / NYAQ2 (Water tupelo)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa ogeche / NYOG (Ogeechee tupelo)" + "Ostrya virginiana / OSVI (Hophornbeam)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Paulownia tomentosa / PATO2 (Princesstree)" + "Persea borbonia / PEBO (Redbay)" + "Picea abies / PIAB (Norway spruce)" + "Pinus albicaulis / PIAL (Whitebark pine)" + "Pinus attenuata / PIAT (Knobcone pine)" + "Pinus banksiana / PIBA2 (Jack pine)" + "Pinus clausa / PICL (Sand pine)" + "Pinus contorta / PICO (Lodgepole pine)" + "Pinus echinata / PIEC2 (Shortleaf pine)" + "Pinus elliottii / PIEL (Slash pine)" + "Picea engelmannii / PIEN (Engelmann spruce)" + "Pinus flexilis / PIFL2 (Limber pine)" + "Picea glauca / PIGL (White spruce)" + "Pinus glabra / PIGL2 (Spruce pine)" + "Pinus jeffreyi / PIJE (Jeffrey pine)" + "Pinus lambertiana / PILA (Sugar pine)" + "Picea mariana / PIMA (Black spruce)" + "Pinus monticola / PIMO3 (Western white pine)" + "Pinus palustris / PIPA2 (Longleaf pine)" + "Pinus ponderosa / PIPO (Ponderosa pine)" + "Picea pungens / PIPU (Blue spruce)" + "Pinus pungens / PIPU5 (Table mountain pine)" + "Pinus resinosa / PIRE (Red pine)" + "Pinus rigida / PIRI (Pitch pine)" + "Picea rubens / PIRU (Red spruce)" + "Pinus sabiniana / PISA2 (Gray pine)" + "Pinus serotina / PISE (Pond pine)" + "Picea sitchensis / PISI (Sitka spruce)" + "Pinus strobus / PIST (Eastern white pine)" + "Pinus sylvestris / PISY (Scots pine)" + "Pinus taeda / PITA (Loblolly pine)" + "Pinus virginiana / PIVI2 (Virginia pine)" + "Platanus occidentalis / PLOC (American sycamore)" + "Populus balsamifera / POBA2 (Balsam poplar)" + "Populus grandidentata / POGR4 (Bigtooth aspen)" + "Populus heterophylla / POHE4 (Swamp cottonwood)" + "Populus tremuloides / POTR12 (Quaking aspen)" + "Prunus americana / PRAM (American plum)" + "Prunus emarginata / PREM (Bitter cherry)" + "Prunus pensylvanica / PRPE2 (Pin cherry)" + "Prunus serotina / PRSE2 (Black cherry)" + "Prunus virginiana / PRVI (Chokecherry)" + "Pseudotsuga menziesii / PSME (Douglas - fir)" + "Quercus agrifolia / QUAG (California live oak)" + "Quercus chrysolepis / QUCH2 (Canyon live oak)" + "Quercus douglasii / QUDU (Blue oak)" + "Quercus ellipsoidalis / QUEL (Northern pin oak)" + "Quercus species / QUESPP (Oaks)" + "Quercus falcata / QUFA (Southern red oak)" + "Quercus imbricaria / QUIM (Shingle oak)" + "Quercus incana / QUIN (Bluejack oak)" + "Quercus laevis / QULA2 (Turkey oak)" + "Quercus laurifolia / QULA3 (Laurel oak)" + "Quercus lobata / QULO (Valley oak)" + "Quercus lyrata / QULY (Overcup oak)" + "Quercus macrocarpa / QUMA2 (Bur oak)" + "Quercus michauxii / QUMI (Swamp chestnut oak)" + "Quercus muehlenbergii / QUMU (Chinkapin oak)" + "Quercus nigra / QUNI (Water oak)" + "Quercus palustris / QUPA2 (Pin oak)" + "Quercus phellos / QUPH (Willow oak)" + "Quercus rubra / QURU (Northern red oak)" + "Quercus shumardii / QUSH (Shumard oak)" + "Quercus stellata / QUST (Post oak)" + "Quercus texana / QUTE (Texas red oak)" + "Quercus virginiana / QUVI (Live oak)" + "Quercus wislizeni / QUWI2 (Interior live oak)" + "Robinia pseudoacacia / ROPS (Black locust)" + "Salix bebbiana / SABE2 (Bebb willow)" + "Salix species / SALSPP (Willows)" + "Salix nigra / SANI (Black willow)" + "Sorbus americana / SOAM3 (American mountain - ash)" + "Taxodium ascendens / TAAS (Pond cypress)" + "Taxus brevifolia / TABR2 (Pacific yew)" + "Taxodium distichum / TADI2 (Bald cypress)" + "Thuja occidentalis / THOC2 (arborvitae)" + "Thuja plicata / THPL (Western redcedar)" + "Tilia americana / TIAM (American basswood)" + "Tsuga canadensis / TSCA (Eastern hemlock)" + "Tsuga heterophylla / TSHE (Western hemlock)" + "Tsuga mertensiana / TSME (Mountain hemlock)" + "Ulmus alata / ULAL (Winged elm)" + "Ulmus americana / ULAM (American elm)" + "Ulmus species / ULMSPP (Elms)" + "Ulmus pumila / ULPU (Siberian elm)" + "Ulmus rubra / ULRU (Slippery elm)" + "Ulmus thomasii / ULTH (Rock elm)" + "Umbellularia californica / UMCA (California - laurel)"], + :group-variable + {:path + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Tree Characteristics", + :key "behaveplus:mortality:input:fuelvegetation_overstory"} + :input + {:name "Mortality Tree Species", + :key + "behaveplus:mortality:input:fuelvegetation_overstory:mortality_tree_species"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Mortality Tree Species", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}}], + :conditionals-operator nil}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", :key "behaveplus:surface:input:wind_speed"} + :input + {:name "Wind Adjustment Factor", + :key "behaveplus:surface:input:wind_speed:wind-adjustment-factor"} + {:name "Wind Adjustment Factor - User Input", + :key + "behaveplus:surface:input:wind_speed:wind-adjustment-factor:wind-adjustment-factor---user-input"}] + {:group/translated-name "Wind Adjustment Factor - User Input", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 6, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["User Input"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", + :key "behaveplus:surface:input:wind_speed"} + :input + {:name "Wind Adjustment Factor", + :key + "behaveplus:surface:input:wind_speed:wind-adjustment-factor"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 4, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Wind Adjustment Factor Calculation Method", + :group-variable/order 0, + :submodule/order 6, + :group/single-select? nil}}], + :conditionals-operator :and}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Weather", :key "behaveplus:surface:input:weather"} + :input] + {:submodule/name "Weather", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fire Behavior", + :key "behaveplus:surface:output:fire_behavior"} + :output + {:name "Ignition", + :key "behaveplus:surface:output:fire_behavior:ignition"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Probability of Ignition", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Ignition", :key "behaveplus:crown:output:ignition"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Probability of Ignition", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Contain", :key "behaveplus:contain"} + {:name "Suppression", :key "behaveplus:contain:input:suppression"} + :input + {:name "Resources", + :key "behaveplus:contain:input:suppression:resources"}] + {:group/translated-name "Resources", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 4, + :submodule/order 1, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["Add Resources"], + :group-variable + {:path + [{:name "Contain", :key "behaveplus:contain"} + {:name "Suppression", + :key "behaveplus:contain:input:suppression"} + :input + {:name "Contain Mode", + :key "behaveplus:contain:input:suppression:contain_mode"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "behaveplus:contain:input:suppression:contain_mode:contain_mode", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}}], + :conditionals-operator nil}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Moisture", + :key "behaveplus:surface:input:fuel_moisture"} + :input + {:name "By Size Class", + :key "behaveplus:surface:input:fuel_moisture:by-size-class"} + {:name "Live Woody Fuel Moisture", + :key + "behaveplus:surface:input:fuel_moisture:by-size-class:live-woody-fuel-moisture"}] + {:group/translated-name "Live Woody Fuel Moisture", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 3, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :in, + :values + ["FB10/10 - Timber litter & understory (Static)" + "V-Ha/111 - Tall Grass, > 0.5 m (Dynamic)" + "GS1/121 - Low load, dry climate grass-shrub (Dynamic)" + "GS2/122 - Moderate load, dry climate grass-shrub (Dynamic)" + "GS3/123 - Moderate load, humid climate grass-shrub (Dynamic)" + "GS4/124 - High load, humid climate grass-shrub (Dynamic)" + "SH1/141 - Low load, dry climate shrub (Dynamic)" + "SH2/142 - Moderate load, dry climate shrub (Static)" + "SH3/143 - Moderate load, humid climate shrub (Static)" + "SH4/144 - Low load, humid climate timber-shrub (Static)" + "SH5/145 - High load, dry climate shrub (Static)" + "SH6/146 - Low load, humid climate shrub (Static)" + "SH7/147 - Very high load, dry climate shrub (Static)" + "SH8/148 - High load, humid climate shrub (Static)" + "SH9/149 - Very high load, humid climate shrub (Dynamic)" + "SCAL17/150 - Chamise with Moderate Load Grass, 4 feet (Static)" + "SCAL15/151 - Chamise with Low Load Grass, 3 feet (Static)" + "SCAL16/152 - North Slope Ceanothus with Moderate Load Grass (Static)" + "SCAL14/153 - Manzanita/Scrub Oak with Low Load Grass (Static)" + "SCAL18/154 - Coastal Sage/Buckwheat Scrub with Low Load Grass (Static)" + "V-MH/155 - Short Green Shrub < 1 m With Grass, Discontinuous (< 1 m) often discontinuous and with grass (Dynamic)" + "V-MMb/156 - Short Shrub < 1 m, Low Dead Fraction and/or Thick Foliage (Static)" + "V-MAb/157 - Short Shrub < 1 m, High Dead Fraction and/or Thin Fuel (Static)" + "V-MMa/158 - Tall Shrub > 1 m, Low Dead Fraction and/or Thick Foliage (Static)" + "V-MAa/159 - Tall Shrub > 1 m, High Dead Fraction and/or Thin Fuel (Static)" + "TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic)" + "TU2/162 - Moderate load, humid climate timber-shrub (Static)" + "TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic)" + "TU4/164 - Dwarf conifer understory (Static)" + "TU5/165 - Very high load, dry climate timber-shrub (Static)" + "M-EUCd/166 - Discontinuous Litter Eucalyptus Plantation, With or Without Shrub Understory (Static)" + "M-H/167 - Deciduous or Conifer Litter, Shrub and Herb Understory" + "M-F/168 - Deciduous or Conifer Litter, Shrub and Fern Understory (Dynamic)" + "M-CAD/169 - Deciduous Litter, Shrub Understory (Static)" + "M-ESC/170 - Sclerophyll Broadleaf Litter, Shrub Understory (Static)" + "M-PIN/171 - Medium-Long Needle Pine Litter, Shrub Understory (Static)" + "M-EUC/172 - Eucalyptus Litter, Shrub Understory (Static)" + "F-RAC/190 - Very Compact Litter, Short Needle Conifers (Static)" + "F-FOL/191 - Compact Litter, Deciduous or Evergreen Foliage (Static)" + "F-EUC/193 - Pure Eucalyptus Litter, No Understory (Static)" + "FB4/4 - Chaparral (Static)" + "FB5/5 - Brush (Static)" + "FB7/7 - Southern rough (Static)"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key + "behaveplus:surface:input:fuel_models:standard:fuel_model"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuel Model Code", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Crown Rate of Spread", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Fireline Intensity", + :group-variable/order 3, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Surface Flame Length", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Rate of Spread", + :group-variable/order 2, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Transition Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :in, + :values + ["GS1/121 - Low load, dry climate grass-shrub (Dynamic)"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Standard", + :key "behaveplus:surface:input:fuel_models:standard"} + {:name "Fuel Model", + :key + "behaveplus:surface:input:fuel_models:standard:wind-driven-fuel-model"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuel Model", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Special Case", + :key "behaveplus:surface:input:fuel_models:special_case"} + {:name "Palmetto-Gallberry", + :key + "behaveplus:surface:input:fuel_models:special_case:palmetto_gallberry"}] + {:group/translated-name "Palmetto-Gallberry", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 2, + :submodule/order 0, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Leaves", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Fine: 0 to 0.25 inches", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Medium: 0.25 to 1 inches", + :group-variable/order 2, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Live Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:live_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Foliage: On Stem", + :group-variable/order 3, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Fuelbed", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:fuelbed"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fuelbed Depth", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Fine: 0 to 0.25 inches", + :group-variable/order 0, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Medium: 0.25 to 1 inches", + :group-variable/order 1, + :submodule/order 8, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Special Case Fuel Models", + :key "behaveplus:surface:output:special_case_fuel_models"} + :output + {:name "Palmetto-Galberry", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry"} + {:name "Dead Fuel Load", + :key + "behaveplus:surface:output:special_case_fuel_models:palmetto_galberry:dead_fuel_load"}], + :io :output, + :submodule/research? true, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Live Foliage: On Stem", + :group-variable/order 2, + :submodule/order 8, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Foliar Moisture", + :key "behaveplus:crown:input:fuel_moisture"} + :input + {:name "1-h Fuel Moisture", + :key "behaveplus:crown:input:fuel_moisture:1-h-fuel-moisture"}] + {:group/translated-name "1-h Fuel Moisture", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 2, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["crown"]}], + :conditionals-operator :and}}, + [{:name "Contain", :key "behaveplus:contain"} + {:name "Fire", :key "behaveplus:contain:input:fire"} + :input + {:name "Length-to-Width Ratio", + :key "behaveplus:contain:input:fire:length_to_width_ratio"}] + {:group/translated-name "Length-to-Width Ratio", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 2, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["contain"]}], + :conditionals-operator nil}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Canopy Fuel", :key "behaveplus:crown:input:canopy_fuel"} + :input] + {:submodule/name "Canopy Fuel", + :submodule/io :input, + :submodule/research? nil, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Rate of Spread", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Flame Length", + :group-variable/order 1, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Behavior", :key "behaveplus:crown:fire-behavior"} + :output + {:name "Fire Behavior", + :key "behaveplus:crown:output:fire_type:fire_behavior"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fireline Intensity", + :group-variable/order 2, + :submodule/order 1, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Area", + :group-variable/order 0, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Fire Perimeter", + :group-variable/order 1, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Length-to-Width Ratio", + :group-variable/order 2, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Size", :key "behaveplus:crown:output:size"} + :output + {:name "Crown - Fire Size", + :key "behaveplus:crown:output:size:crown-fire-size"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Spread Distance", + :group-variable/order 3, + :submodule/order 5, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Fire Type", + :key "behaveplus:crown:output:fire_type:fire_type"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 2, + :group-variable/conditionally-set? true, + :group-variable/translated-name "Fire Type", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Transition Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Surface Flame Length", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? true, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Rate of Spread", + :group-variable/order 2, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Transition to Crown Fire", + :key + "behaveplus:crown:output:fire_type:transition_to_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Critical Surface Fireline Intensity", + :group-variable/order 3, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Active Ratio", + :group-variable/order 0, + :submodule/order 3, + :group/single-select? nil}} + {:type :group-variable, + :operator :equal, + :values ["true"], + :group-variable + {:path + [{:name "Crown", :key "behaveplus:crown"} + {:name "Fire Type", :key "behaveplus:crown:output:fire_type"} + :output + {:name "Active Crown Fire", + :key + "behaveplus:crown:output:fire_type:active_or_independent_crown_fire"}], + :io :output, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Critical Crown Rate of Spread", + :group-variable/order 1, + :submodule/order 3, + :group/single-select? nil}}], + :conditionals-operator :or}}, + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Scorch", :key "behaveplus:mortality:input:scorch"} + :input + {:name "Fire", :key "behaveplus:mortality:input:scorch:fire"} + {:name "Scorch Height", + :key "behaveplus:mortality:input:scorch:fire:scorch_height"}] + {:group/translated-name "Scorch Height", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 1, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["mortality"]} + {:type :group-variable, + :operator :equal, + :values ["Scorch Height"], + :group-variable + {:path + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Scorch", :key "behaveplus:mortality:input:scorch"} + :input + {:name "Fire", :key "behaveplus:mortality:input:scorch:fire"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 1, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "ScorchHeightOrFlameLength", + :group-variable/order 0, + :submodule/order 2, + :group/single-select? nil}}], + :conditionals-operator :and}}, + [{:name "Contain", :key "behaveplus:contain"} + {:name "Suppression", :key "behaveplus:contain:input:suppression"} + :input + {:name "Estimated Resource Arrival Time and Duration", + :key "behaveplus:contain:input:suppression:resource"}] + {:group/translated-name + "Estimated Resource Arrival Time and Duration", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 5, + :submodule/order 1, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["Calculate Minimum Production Rate Only"], + :group-variable + {:path + [{:name "Contain", :key "behaveplus:contain"} + {:name "Suppression", + :key "behaveplus:contain:input:suppression"} + :input + {:name "Contain Mode", + :key "behaveplus:contain:input:suppression:contain_mode"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 0, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "behaveplus:contain:input:suppression:contain_mode:contain_mode", + :group-variable/order 0, + :submodule/order 1, + :group/single-select? nil}}], + :conditionals-operator nil}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Foliar Moisture", + :key "behaveplus:crown:input:fuel_moisture"} + :input + {:name "Live Herbaceous Fuel Moisture", + :key + "behaveplus:crown:input:fuel_moisture:live-herbaceous-fuel-moisture"}] + {:group/translated-name "Live Herbaceous Fuel Moisture", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 5, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["crown"]}], + :conditionals-operator :and}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Special Case", + :key "behaveplus:surface:input:fuel_models:special_case"} + {:name "Chaparral (Upland)", + :key + "behaveplus:surface:input:fuel_models:special_case:chaparral_upland"} + {:name "Direct Fuel Load", + :key + "behaveplus:surface:input:fuel_models:special_case:chaparral_upland:direct_fuel_load"}] + {:group/translated-name "Direct Fuel Load", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 3, + :submodule/order 0, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["Direct Fuel Load"], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Fuel Model", + :key "behaveplus:surface:input:fuel_models"} + :input + {:name "Special Case", + :key "behaveplus:surface:input:fuel_models:special_case"} + {:name "Chaparral (Upland)", + :key + "behaveplus:surface:input:fuel_models:special_case:chaparral_upland"} + {:name "Total Fuel Load is...", + :key + "behaveplus:surface:input:fuel_models:special_case:chaparral_upland:total_fuel_load_is"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order nil, + :group-variable/conditionally-set? nil, + :group-variable/translated-name + "Chaparral Fuel Load Input Mode", + :group-variable/order 0, + :submodule/order 0, + :group/single-select? nil}}], + :conditionals-operator nil}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Foliar Moisture", + :key "behaveplus:crown:input:fuel_moisture"} + :input + {:name "100-h Fuel Moisture", + :key "behaveplus:crown:input:fuel_moisture:100-h-fuel-moisture"}] + {:group/translated-name "100-h Fuel Moisture", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 4, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["crown"]}], + :conditionals-operator nil}}, + [{:name "Crown", :key "behaveplus:crown"} + {:name "Foliar Moisture", + :key "behaveplus:crown:input:fuel_moisture"} + :input + {:name "10-h Fuel Moisture", + :key "behaveplus:crown:input:fuel_moisture:10-h-fuel-moisture"}] + {:group/translated-name "10-h Fuel Moisture", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 3, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["crown"]}], + :conditionals-operator nil}}, + [{:name "Contain", :key "behaveplus:contain"} + {:name "Fire", :key "behaveplus:contain:input:fire"} + :input + {:name "Surface Rate of Spread (maximum)", + :key + "behaveplus:contain:input:fire:surface_rate_of_spread_maximum"}] + {:group/translated-name "Surface Rate of Spread (maximum)", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 0, + :submodule/order 2, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["contain"]}], + :conditionals-operator nil}}, + [{:name "Mortality", :key "behaveplus:mortality"} + {:name "Tree Characteristics", + :key "behaveplus:mortality:input:fuelvegetation_overstory"} + :input + {:name "Bole Char Height", + :key + "behaveplus:mortality:input:fuelvegetation_overstory:bole-char-height"}] + {:group/translated-name "Bole Char Height", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order 4, + :submodule/order 0, + :conditionals + {:conditionals + [{:type :module, :operator :equal, :values ["mortality"]}], + :conditionals-operator nil}}, + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", :key "behaveplus:surface:input:wind_speed"} + :input + {:name "Wind and slope are", + :key "behaveplus:surface:input:wind_speed:wind_and_slope_are"} + {:name "Wind Direction (from upslope)", + :key + "behaveplus:surface:input:wind_speed:wind_and_slope_are:wind-direction"}] + {:group/translated-name "Wind Direction (from upslope)", + :group/research? nil, + :group/hidden? nil, + :parent-submodule/io :input, + :group/order nil, + :submodule/order 6, + :conditionals + {:conditionals + [{:type :group-variable, + :operator :equal, + :values ["Not Aligned (Wind is >30° from upslope)."], + :group-variable + {:path + [{:name "Surface", :key "behaveplus:surface"} + {:name "Wind and Slope", + :key "behaveplus:surface:input:wind_speed"} + :input + {:name "Wind and slope are", + :key + "behaveplus:surface:input:wind_speed:wind_and_slope_are"}], + :io :input, + :submodule/research? nil, + :group-variable/research? nil, + :group/order 5, + :group-variable/conditionally-set? nil, + :group-variable/translated-name "Wind and Slope Alignment Mode", + :group-variable/order 0, + :submodule/order 6, + :group/single-select? nil}}], + :conditionals-operator nil}}}, + :results-visibility + {"64a75ef0-4f4a-47b9-b27d-c353cb648a52" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Flanking Flame Length", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Flame Length", + :module "Surface", + :submodule/order 1, + :group/order 1, + :group-variable/order 1, + :group "Surface Fire"} + {:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "66aa7ec1-a085-4389-8add-4e77f30533a1" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Bark Char Height Flanking", + :required-outputs-operator :and, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules ["mortality" "surface"], + :required-inputs + [{:submodule "Tree Characteristics", + :value "Acer rubrum / ACRU (Red maple)", + :module "Mortality", + :submodule/order 0, + :group/order 0, + :group-variable/order 0, + :group "Mortality Tree Species", + :values + ["Acer rubrum / ACRU (Red maple)" + "Cornus florida / COFL2 (Flowering dogwood)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa sylvatica / NYSY (Blackgum)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Quercus alba / QUAL (White oak)" + "Quercus bicolor / QUBI (Swamp white oak)" + "Quercus coccinea / QUCO2 (Scarlet oak)" + "Quercus garryana / QUGA4 (Oregon white oak)" + "Quercus kelloggii / QUKE (Califonia black oak)" + "Quercus marilandica / QUMA3 (Blackjack oak)" + "Quercus velutina / QUVE (Black oak)" + "Sassafras albidum / SAAL5 (Sassafras)"]}], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "66a7f28a-2f76-4f2e-8898-74b0738ab725" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Probability of Mortality Backing", + :required-outputs-operator :and, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "66a7f9a1-c63a-452b-9816-d31296d11622" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Scorch Height Flanking", + :required-outputs-operator :and, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules ["mortality" "surface"], + :required-inputs + [{:submodule "Tree Characteristics", + :value "Abies amabilis / ABAM (Pacific silver fir)", + :module "Mortality", + :submodule/order 0, + :group/order 0, + :group-variable/order 0, + :group "Mortality Tree Species", + :values + ["Abies amabilis / ABAM (Pacific silver fir)" + "Abies balsamea / ABBA (Balsam fir)" + "Abies concolor / ABCO (White fir)" + "Abies grandis / ABGR (Grand fir)" + "Abies lasiocarpa / ABLA (Subalpine fir)" + "Abies magnifica / ABMA (Red Fir)" + "Abies procera / ABPR (Noble Fir)" + "Acer barbatum / ACBA3 (Southern sugar maple)" + "Acer macrophyllum / ACMA3 (Bigleaf maple)" + "Acer negundo / ACNE2 (Boxelder)" + "Acer nigrum / ACNI5 (Black maple)" + "Acer pensylvanicum / ACPE (Striped maple)" + "Acer saccharinum / ACSA2 (Silver maple)" + "Acer saccharum / ACSA3 (Sugar maple)" + "Acer spicatum / ACSP2 (Mountain maple)" + "Aesculus flava / AEFL (Yellow buckeye)" + "Aesculus glabra / AEGL (Ohio buckeye)" + "Ailanthus altissima / AIAL (Ailanthus)" + "Alnus rhombifolia / ALRH2 (White alder)" + "Alnus rubra / ALRU2 (Red alder)" + "Amelanchier arborea / AMAR3 (Common serviceberry)" + "Arbutus menziesii / ARME (Pacific madrone)" + "Betula alleghaniensis / BEAL2 (Yellow birch)" + "Betula lenta / BELE (Sweet birch)" + "Betula nigra / BENI (River Birch)" + "Betula occidentalis / BEOC2 (Water birch)" + "Betula papyrifera / BEPA (Paper birch)" + "Betula species / BETSPP (Birches)" + "Carya alba / CAAL27 (Mockernut hickory)" + "Carpinus caroliniana / CACA18 (American hornbeam)" + "Carya cordiformis / CACOL3 (Bitternut hickory)" + "Castanea dentata / CADE12 (American chestnut)" + "Calocedrus decurrens / CADE27 (Incense - cedar)" + "Carya glabra / CAGL8 (Pignut hickory)" + "Carya illinoinensis / CAIL2 (Pecan)" + "Carya laciniosa / CALA21 (Shellbark hickory)" + "Carya ovata / CAOV2 (Shagbark hickory)" + "Carya species / CARSPP (Hickories)" + "Carya texana / CATE9 (Black hickory)" + "Cercis canadensis / CECA4 (Eastern redbud)" + "Celtis laevigata / CELA (Sugarberry)" + "Celtis occidentalis / CEOC (Common hackberry)" + "Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin)" + "Chamaecyparis lawsoniana / CHLA (PortOrford - cedar)" + "Chamaecyparis nootkatensis / CHNO (Alaska - cedar)" + "Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar)" + "Cornus nuttallii / CONU4 (Pacific dogwood)" + "Crataegus species / CRASPP (Hawthorns)" + "Diospyros virginiana / DIVI5 (Persimmon)" + "Fagus grandifolia / FAGR (American beech)" + "Fraxinus americana / FRAM2 (White ash)" + "Fraxinus species / FRASPP (Ashes)" + "Fraxinus nigra / FRNI (Black ash)" + "Fraxinus pennsylvanica / FRPE (Green ash)" + "Fraxinus profunda / FRPR (Pumpkin ash)" + "Fraxinus quadrangulata / FRQU (Blue ash)" + "Gleditsia triacanthos / GLTR (Honeylocust)" + "Gordonia lasianthus / GOLA (Loblolly bay)" + "Gymnocladus dioicus / GYDI (Kentucky coffeetree)" + "Halesia species / HALSPP (Silverbells)" + "Ilex opaca / ILOP (American holly)" + "Juglans cinerea / JUCI (Butternut)" + "Juglans nigra / JUNI (Black walnut)" + "Juniperus occidentalis / JUOC (Western juniper)" + "Juniperus virginiana / JUVI (Eastern redcedar)" + "Larix laricina / LALA (Tamarack)" + "Larix lyallii / LALY (Subalpine Larch)" + "Larix occidentalis / LAOC (Western Larch)" + "Lithocarpus densiflorus / LIDE3 (Tanoak)" + "Liquidambar styraciflua / LIST2 (Sweetgum)" + "Liriodendron tulipifera / LITU (Tuliptree)" + "Magnolia acuminata / MAAC (Cucumber - tree)" + "Magnolia grandiflora / MAGR4 (Southern magnolia)" + "Magnolia species / MAGSPP (Magnolias)" + "Prunus species / MALPRU (cherry and plum species)" + "Malus species / MALSPP (Apples)" + "Magnolia macrophylla / MAMA2 (Bigleaf magnolia)" + "Maclura pomifera / MAPO (Osage - orange)" + "Magnolia virginiana / MAVI2 (Sweetbay)" + "Morus alba / MOAL (White mulberry)" + "Morus species / MORSPP (Mulberries)" + "Morus rubra / MORU2 (Red mulberry)" + "Nyssa aquatica / NYAQ2 (Water tupelo)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa ogeche / NYOG (Ogeechee tupelo)" + "Ostrya virginiana / OSVI (Hophornbeam)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Paulownia tomentosa / PATO2 (Princesstree)" + "Persea borbonia / PEBO (Redbay)" + "Picea abies / PIAB (Norway spruce)" + "Pinus albicaulis / PIAL (Whitebark pine)" + "Pinus attenuata / PIAT (Knobcone pine)" + "Pinus banksiana / PIBA2 (Jack pine)" + "Pinus clausa / PICL (Sand pine)" + "Pinus contorta / PICO (Lodgepole pine)" + "Pinus echinata / PIEC2 (Shortleaf pine)" + "Pinus elliottii / PIEL (Slash pine)" + "Picea engelmannii / PIEN (Engelmann spruce)" + "Pinus flexilis / PIFL2 (Limber pine)" + "Picea glauca / PIGL (White spruce)" + "Pinus glabra / PIGL2 (Spruce pine)" + "Pinus jeffreyi / PIJE (Jeffrey pine)" + "Pinus lambertiana / PILA (Sugar pine)" + "Picea mariana / PIMA (Black spruce)" + "Pinus monticola / PIMO3 (Western white pine)" + "Pinus palustris / PIPA2 (Longleaf pine)" + "Pinus ponderosa / PIPO (Ponderosa pine)" + "Picea pungens / PIPU (Blue spruce)" + "Pinus pungens / PIPU5 (Table mountain pine)" + "Pinus resinosa / PIRE (Red pine)" + "Pinus rigida / PIRI (Pitch pine)" + "Picea rubens / PIRU (Red spruce)" + "Pinus sabiniana / PISA2 (Gray pine)" + "Pinus serotina / PISE (Pond pine)" + "Picea sitchensis / PISI (Sitka spruce)" + "Pinus strobus / PIST (Eastern white pine)" + "Pinus sylvestris / PISY (Scots pine)" + "Pinus taeda / PITA (Loblolly pine)" + "Pinus virginiana / PIVI2 (Virginia pine)" + "Platanus occidentalis / PLOC (American sycamore)" + "Populus balsamifera / POBA2 (Balsam poplar)" + "Populus grandidentata / POGR4 (Bigtooth aspen)" + "Populus heterophylla / POHE4 (Swamp cottonwood)" + "Populus tremuloides / POTR12 (Quaking aspen)" + "Prunus americana / PRAM (American plum)" + "Prunus emarginata / PREM (Bitter cherry)" + "Prunus pensylvanica / PRPE2 (Pin cherry)" + "Prunus serotina / PRSE2 (Black cherry)" + "Prunus virginiana / PRVI (Chokecherry)" + "Pseudotsuga menziesii / PSME (Douglas - fir)" + "Quercus agrifolia / QUAG (California live oak)" + "Quercus chrysolepis / QUCH2 (Canyon live oak)" + "Quercus douglasii / QUDU (Blue oak)" + "Quercus ellipsoidalis / QUEL (Northern pin oak)" + "Quercus species / QUESPP (Oaks)" + "Quercus falcata / QUFA (Southern red oak)" + "Quercus imbricaria / QUIM (Shingle oak)" + "Quercus incana / QUIN (Bluejack oak)" + "Quercus laevis / QULA2 (Turkey oak)" + "Quercus laurifolia / QULA3 (Laurel oak)" + "Quercus lobata / QULO (Valley oak)" + "Quercus lyrata / QULY (Overcup oak)" + "Quercus macrocarpa / QUMA2 (Bur oak)" + "Quercus michauxii / QUMI (Swamp chestnut oak)" + "Quercus muehlenbergii / QUMU (Chinkapin oak)" + "Quercus nigra / QUNI (Water oak)" + "Quercus palustris / QUPA2 (Pin oak)" + "Quercus phellos / QUPH (Willow oak)" + "Quercus rubra / QURU (Northern red oak)" + "Quercus shumardii / QUSH (Shumard oak)" + "Quercus stellata / QUST (Post oak)" + "Quercus texana / QUTE (Texas red oak)" + "Quercus virginiana / QUVI (Live oak)" + "Quercus wislizeni / QUWI2 (Interior live oak)" + "Robinia pseudoacacia / ROPS (Black locust)" + "Salix bebbiana / SABE2 (Bebb willow)" + "Salix species / SALSPP (Willows)" + "Salix nigra / SANI (Black willow)" + "Sorbus americana / SOAM3 (American mountain - ash)" + "Taxodium ascendens / TAAS (Pond cypress)" + "Taxus brevifolia / TABR2 (Pacific yew)" + "Taxodium distichum / TADI2 (Bald cypress)" + "Thuja occidentalis / THOC2 (arborvitae)" + "Thuja plicata / THPL (Western redcedar)" + "Tilia americana / TIAM (American basswood)" + "Tsuga canadensis / TSCA (Eastern hemlock)" + "Tsuga heterophylla / TSHE (Western hemlock)" + "Tsuga mertensiana / TSME (Mountain hemlock)" + "Ulmus alata / ULAL (Winged elm)" + "Ulmus americana / ULAM (American elm)" + "Ulmus species / ULMSPP (Elms)" + "Ulmus pumila / ULPU (Siberian elm)" + "Ulmus rubra / ULRU (Slippery elm)" + "Ulmus thomasii / ULTH (Rock elm)" + "Umbellularia californica / UMCA (California - laurel)"]}], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "65205161-258e-4664-83aa-e180083ccbe1" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Flanking Fireline Intensity", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Fireline Intensity", + :module "Surface", + :submodule/order 1, + :group/order 1, + :group-variable/order 2, + :group "Surface Fire"} + {:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "660c3d6d-d81b-4225-a4bf-3cddfd4961aa" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Direction of Interest from Upslope"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "DOI Spread Distance", + :required-outputs-operator nil, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Size", + :value "Spread Distance", + :module "Surface", + :submodule/order 2, + :group/order 0, + :group-variable/order 3, + :group "Surface - Fire Size"} + {:submodule "Fire Behavior", + :value "Direction of Interest", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 2, + :group "Direction Mode", + :group/single-select? true}]}, + "64a75ef0-b9eb-4f69-ab96-d8f6050518e9" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Backing Flame Length", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Flame Length", + :module "Surface", + :submodule/order 1, + :group/order 1, + :group-variable/order 1, + :group "Surface Fire"} + {:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "660c397a-2630-48a3-8381-7dee7c5edba1" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Heading Spread Distance", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Size", + :value "Spread Distance", + :module "Surface", + :submodule/order 2, + :group/order 0, + :group-variable/order 3, + :group "Surface - Fire Size"} + {:submodule "Fire Behavior", + :value "Heading", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 0, + :group "Direction Mode", + :group/single-select? true} + {:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "660c397f-8eed-4870-ac12-3ae2922d0987" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Flanking Spread Distance", + :required-outputs-operator nil, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true} + {:submodule "Size", + :value "Spread Distance", + :module "Surface", + :submodule/order 2, + :group/order 0, + :group-variable/order 3, + :group "Surface - Fire Size"}]}, + "66a7f9e4-85be-4b53-81c4-932048bdf5ea" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Crown Length Scorched Backing", + :required-outputs-operator :and, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules ["mortality" "surface"], + :required-inputs + [{:submodule "Tree Characteristics", + :value "Abies amabilis / ABAM (Pacific silver fir)", + :module "Mortality", + :submodule/order 0, + :group/order 0, + :group-variable/order 0, + :group "Mortality Tree Species", + :values + ["Abies amabilis / ABAM (Pacific silver fir)" + "Abies balsamea / ABBA (Balsam fir)" + "Abies concolor / ABCO (White fir)" + "Abies grandis / ABGR (Grand fir)" + "Abies lasiocarpa / ABLA (Subalpine fir)" + "Abies magnifica / ABMA (Red Fir)" + "Abies procera / ABPR (Noble Fir)" + "Acer barbatum / ACBA3 (Southern sugar maple)" + "Acer macrophyllum / ACMA3 (Bigleaf maple)" + "Acer negundo / ACNE2 (Boxelder)" + "Acer nigrum / ACNI5 (Black maple)" + "Acer pensylvanicum / ACPE (Striped maple)" + "Acer saccharinum / ACSA2 (Silver maple)" + "Acer saccharum / ACSA3 (Sugar maple)" + "Acer spicatum / ACSP2 (Mountain maple)" + "Aesculus flava / AEFL (Yellow buckeye)" + "Aesculus glabra / AEGL (Ohio buckeye)" + "Ailanthus altissima / AIAL (Ailanthus)" + "Alnus rhombifolia / ALRH2 (White alder)" + "Alnus rubra / ALRU2 (Red alder)" + "Amelanchier arborea / AMAR3 (Common serviceberry)" + "Arbutus menziesii / ARME (Pacific madrone)" + "Betula alleghaniensis / BEAL2 (Yellow birch)" + "Betula lenta / BELE (Sweet birch)" + "Betula nigra / BENI (River Birch)" + "Betula occidentalis / BEOC2 (Water birch)" + "Betula papyrifera / BEPA (Paper birch)" + "Betula species / BETSPP (Birches)" + "Carya alba / CAAL27 (Mockernut hickory)" + "Carpinus caroliniana / CACA18 (American hornbeam)" + "Carya cordiformis / CACOL3 (Bitternut hickory)" + "Castanea dentata / CADE12 (American chestnut)" + "Calocedrus decurrens / CADE27 (Incense - cedar)" + "Carya glabra / CAGL8 (Pignut hickory)" + "Carya illinoinensis / CAIL2 (Pecan)" + "Carya laciniosa / CALA21 (Shellbark hickory)" + "Carya ovata / CAOV2 (Shagbark hickory)" + "Carya species / CARSPP (Hickories)" + "Carya texana / CATE9 (Black hickory)" + "Cercis canadensis / CECA4 (Eastern redbud)" + "Celtis laevigata / CELA (Sugarberry)" + "Celtis occidentalis / CEOC (Common hackberry)" + "Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin)" + "Chamaecyparis lawsoniana / CHLA (PortOrford - cedar)" + "Chamaecyparis nootkatensis / CHNO (Alaska - cedar)" + "Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar)" + "Cornus nuttallii / CONU4 (Pacific dogwood)" + "Crataegus species / CRASPP (Hawthorns)" + "Diospyros virginiana / DIVI5 (Persimmon)" + "Fagus grandifolia / FAGR (American beech)" + "Fraxinus americana / FRAM2 (White ash)" + "Fraxinus species / FRASPP (Ashes)" + "Fraxinus nigra / FRNI (Black ash)" + "Fraxinus pennsylvanica / FRPE (Green ash)" + "Fraxinus profunda / FRPR (Pumpkin ash)" + "Fraxinus quadrangulata / FRQU (Blue ash)" + "Gleditsia triacanthos / GLTR (Honeylocust)" + "Gordonia lasianthus / GOLA (Loblolly bay)" + "Gymnocladus dioicus / GYDI (Kentucky coffeetree)" + "Halesia species / HALSPP (Silverbells)" + "Ilex opaca / ILOP (American holly)" + "Juglans cinerea / JUCI (Butternut)" + "Juglans nigra / JUNI (Black walnut)" + "Juniperus occidentalis / JUOC (Western juniper)" + "Juniperus virginiana / JUVI (Eastern redcedar)" + "Larix laricina / LALA (Tamarack)" + "Larix lyallii / LALY (Subalpine Larch)" + "Larix occidentalis / LAOC (Western Larch)" + "Lithocarpus densiflorus / LIDE3 (Tanoak)" + "Liquidambar styraciflua / LIST2 (Sweetgum)" + "Liriodendron tulipifera / LITU (Tuliptree)" + "Magnolia acuminata / MAAC (Cucumber - tree)" + "Magnolia grandiflora / MAGR4 (Southern magnolia)" + "Magnolia species / MAGSPP (Magnolias)" + "Prunus species / MALPRU (cherry and plum species)" + "Malus species / MALSPP (Apples)" + "Magnolia macrophylla / MAMA2 (Bigleaf magnolia)" + "Maclura pomifera / MAPO (Osage - orange)" + "Magnolia virginiana / MAVI2 (Sweetbay)" + "Morus alba / MOAL (White mulberry)" + "Morus species / MORSPP (Mulberries)" + "Morus rubra / MORU2 (Red mulberry)" + "Nyssa aquatica / NYAQ2 (Water tupelo)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa ogeche / NYOG (Ogeechee tupelo)" + "Ostrya virginiana / OSVI (Hophornbeam)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Paulownia tomentosa / PATO2 (Princesstree)" + "Persea borbonia / PEBO (Redbay)" + "Picea abies / PIAB (Norway spruce)" + "Pinus albicaulis / PIAL (Whitebark pine)" + "Pinus attenuata / PIAT (Knobcone pine)" + "Pinus banksiana / PIBA2 (Jack pine)" + "Pinus clausa / PICL (Sand pine)" + "Pinus contorta / PICO (Lodgepole pine)" + "Pinus echinata / PIEC2 (Shortleaf pine)" + "Pinus elliottii / PIEL (Slash pine)" + "Picea engelmannii / PIEN (Engelmann spruce)" + "Pinus flexilis / PIFL2 (Limber pine)" + "Picea glauca / PIGL (White spruce)" + "Pinus glabra / PIGL2 (Spruce pine)" + "Pinus jeffreyi / PIJE (Jeffrey pine)" + "Pinus lambertiana / PILA (Sugar pine)" + "Picea mariana / PIMA (Black spruce)" + "Pinus monticola / PIMO3 (Western white pine)" + "Pinus palustris / PIPA2 (Longleaf pine)" + "Pinus ponderosa / PIPO (Ponderosa pine)" + "Picea pungens / PIPU (Blue spruce)" + "Pinus pungens / PIPU5 (Table mountain pine)" + "Pinus resinosa / PIRE (Red pine)" + "Pinus rigida / PIRI (Pitch pine)" + "Picea rubens / PIRU (Red spruce)" + "Pinus sabiniana / PISA2 (Gray pine)" + "Pinus serotina / PISE (Pond pine)" + "Picea sitchensis / PISI (Sitka spruce)" + "Pinus strobus / PIST (Eastern white pine)" + "Pinus sylvestris / PISY (Scots pine)" + "Pinus taeda / PITA (Loblolly pine)" + "Pinus virginiana / PIVI2 (Virginia pine)" + "Platanus occidentalis / PLOC (American sycamore)" + "Populus balsamifera / POBA2 (Balsam poplar)" + "Populus grandidentata / POGR4 (Bigtooth aspen)" + "Populus heterophylla / POHE4 (Swamp cottonwood)" + "Populus tremuloides / POTR12 (Quaking aspen)" + "Prunus americana / PRAM (American plum)" + "Prunus emarginata / PREM (Bitter cherry)" + "Prunus pensylvanica / PRPE2 (Pin cherry)" + "Prunus serotina / PRSE2 (Black cherry)" + "Prunus virginiana / PRVI (Chokecherry)" + "Pseudotsuga menziesii / PSME (Douglas - fir)" + "Quercus agrifolia / QUAG (California live oak)" + "Quercus chrysolepis / QUCH2 (Canyon live oak)" + "Quercus douglasii / QUDU (Blue oak)" + "Quercus ellipsoidalis / QUEL (Northern pin oak)" + "Quercus species / QUESPP (Oaks)" + "Quercus falcata / QUFA (Southern red oak)" + "Quercus imbricaria / QUIM (Shingle oak)" + "Quercus incana / QUIN (Bluejack oak)" + "Quercus laevis / QULA2 (Turkey oak)" + "Quercus laurifolia / QULA3 (Laurel oak)" + "Quercus lobata / QULO (Valley oak)" + "Quercus lyrata / QULY (Overcup oak)" + "Quercus macrocarpa / QUMA2 (Bur oak)" + "Quercus michauxii / QUMI (Swamp chestnut oak)" + "Quercus muehlenbergii / QUMU (Chinkapin oak)" + "Quercus nigra / QUNI (Water oak)" + "Quercus palustris / QUPA2 (Pin oak)" + "Quercus phellos / QUPH (Willow oak)" + "Quercus rubra / QURU (Northern red oak)" + "Quercus shumardii / QUSH (Shumard oak)" + "Quercus stellata / QUST (Post oak)" + "Quercus texana / QUTE (Texas red oak)" + "Quercus virginiana / QUVI (Live oak)" + "Quercus wislizeni / QUWI2 (Interior live oak)" + "Robinia pseudoacacia / ROPS (Black locust)" + "Salix bebbiana / SABE2 (Bebb willow)" + "Salix species / SALSPP (Willows)" + "Salix nigra / SANI (Black willow)" + "Sorbus americana / SOAM3 (American mountain - ash)" + "Taxodium ascendens / TAAS (Pond cypress)" + "Taxus brevifolia / TABR2 (Pacific yew)" + "Taxodium distichum / TADI2 (Bald cypress)" + "Thuja occidentalis / THOC2 (arborvitae)" + "Thuja plicata / THPL (Western redcedar)" + "Tilia americana / TIAM (American basswood)" + "Tsuga canadensis / TSCA (Eastern hemlock)" + "Tsuga heterophylla / TSHE (Western hemlock)" + "Tsuga mertensiana / TSME (Mountain hemlock)" + "Ulmus alata / ULAL (Winged elm)" + "Ulmus americana / ULAM (American elm)" + "Ulmus species / ULMSPP (Elms)" + "Ulmus pumila / ULPU (Siberian elm)" + "Ulmus rubra / ULRU (Slippery elm)" + "Ulmus thomasii / ULTH (Rock elm)" + "Umbellularia californica / UMCA (California - laurel)"]}], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "66aa7ec1-a052-412b-88e3-b731871a4701" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Bark Char Height Backing", + :required-outputs-operator :and, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules ["mortality" "surface"], + :required-inputs + [{:submodule "Tree Characteristics", + :value "Acer rubrum / ACRU (Red maple)", + :module "Mortality", + :submodule/order 0, + :group/order 0, + :group-variable/order 0, + :group "Mortality Tree Species", + :values + ["Acer rubrum / ACRU (Red maple)" + "Cornus florida / COFL2 (Flowering dogwood)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa sylvatica / NYSY (Blackgum)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Quercus alba / QUAL (White oak)" + "Quercus bicolor / QUBI (Swamp white oak)" + "Quercus coccinea / QUCO2 (Scarlet oak)" + "Quercus garryana / QUGA4 (Oregon white oak)" + "Quercus kelloggii / QUKE (Califonia black oak)" + "Quercus marilandica / QUMA3 (Blackjack oak)" + "Quercus velutina / QUVE (Black oak)" + "Sassafras albidum / SAAL5 (Sassafras)"]}], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "66a7f9e4-b140-4c8a-a7a5-6ce005b0e43c" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Crown Volume Scorched Backing", + :required-outputs-operator :and, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules ["mortality" "surface"], + :required-inputs + [{:submodule "Tree Characteristics", + :value "Abies amabilis / ABAM (Pacific silver fir)", + :module "Mortality", + :submodule/order 0, + :group/order 0, + :group-variable/order 0, + :group "Mortality Tree Species", + :values + ["Abies amabilis / ABAM (Pacific silver fir)" + "Abies balsamea / ABBA (Balsam fir)" + "Abies concolor / ABCO (White fir)" + "Abies grandis / ABGR (Grand fir)" + "Abies lasiocarpa / ABLA (Subalpine fir)" + "Abies magnifica / ABMA (Red Fir)" + "Abies procera / ABPR (Noble Fir)" + "Acer barbatum / ACBA3 (Southern sugar maple)" + "Acer macrophyllum / ACMA3 (Bigleaf maple)" + "Acer negundo / ACNE2 (Boxelder)" + "Acer nigrum / ACNI5 (Black maple)" + "Acer pensylvanicum / ACPE (Striped maple)" + "Acer saccharinum / ACSA2 (Silver maple)" + "Acer saccharum / ACSA3 (Sugar maple)" + "Acer spicatum / ACSP2 (Mountain maple)" + "Aesculus flava / AEFL (Yellow buckeye)" + "Aesculus glabra / AEGL (Ohio buckeye)" + "Ailanthus altissima / AIAL (Ailanthus)" + "Alnus rhombifolia / ALRH2 (White alder)" + "Alnus rubra / ALRU2 (Red alder)" + "Amelanchier arborea / AMAR3 (Common serviceberry)" + "Arbutus menziesii / ARME (Pacific madrone)" + "Betula alleghaniensis / BEAL2 (Yellow birch)" + "Betula lenta / BELE (Sweet birch)" + "Betula nigra / BENI (River Birch)" + "Betula occidentalis / BEOC2 (Water birch)" + "Betula papyrifera / BEPA (Paper birch)" + "Betula species / BETSPP (Birches)" + "Carya alba / CAAL27 (Mockernut hickory)" + "Carpinus caroliniana / CACA18 (American hornbeam)" + "Carya cordiformis / CACOL3 (Bitternut hickory)" + "Castanea dentata / CADE12 (American chestnut)" + "Calocedrus decurrens / CADE27 (Incense - cedar)" + "Carya glabra / CAGL8 (Pignut hickory)" + "Carya illinoinensis / CAIL2 (Pecan)" + "Carya laciniosa / CALA21 (Shellbark hickory)" + "Carya ovata / CAOV2 (Shagbark hickory)" + "Carya species / CARSPP (Hickories)" + "Carya texana / CATE9 (Black hickory)" + "Cercis canadensis / CECA4 (Eastern redbud)" + "Celtis laevigata / CELA (Sugarberry)" + "Celtis occidentalis / CEOC (Common hackberry)" + "Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin)" + "Chamaecyparis lawsoniana / CHLA (PortOrford - cedar)" + "Chamaecyparis nootkatensis / CHNO (Alaska - cedar)" + "Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar)" + "Cornus nuttallii / CONU4 (Pacific dogwood)" + "Crataegus species / CRASPP (Hawthorns)" + "Diospyros virginiana / DIVI5 (Persimmon)" + "Fagus grandifolia / FAGR (American beech)" + "Fraxinus americana / FRAM2 (White ash)" + "Fraxinus species / FRASPP (Ashes)" + "Fraxinus nigra / FRNI (Black ash)" + "Fraxinus pennsylvanica / FRPE (Green ash)" + "Fraxinus profunda / FRPR (Pumpkin ash)" + "Fraxinus quadrangulata / FRQU (Blue ash)" + "Gleditsia triacanthos / GLTR (Honeylocust)" + "Gordonia lasianthus / GOLA (Loblolly bay)" + "Gymnocladus dioicus / GYDI (Kentucky coffeetree)" + "Halesia species / HALSPP (Silverbells)" + "Ilex opaca / ILOP (American holly)" + "Juglans cinerea / JUCI (Butternut)" + "Juglans nigra / JUNI (Black walnut)" + "Juniperus occidentalis / JUOC (Western juniper)" + "Juniperus virginiana / JUVI (Eastern redcedar)" + "Larix laricina / LALA (Tamarack)" + "Larix lyallii / LALY (Subalpine Larch)" + "Larix occidentalis / LAOC (Western Larch)" + "Lithocarpus densiflorus / LIDE3 (Tanoak)" + "Liquidambar styraciflua / LIST2 (Sweetgum)" + "Liriodendron tulipifera / LITU (Tuliptree)" + "Magnolia acuminata / MAAC (Cucumber - tree)" + "Magnolia grandiflora / MAGR4 (Southern magnolia)" + "Magnolia species / MAGSPP (Magnolias)" + "Prunus species / MALPRU (cherry and plum species)" + "Malus species / MALSPP (Apples)" + "Magnolia macrophylla / MAMA2 (Bigleaf magnolia)" + "Maclura pomifera / MAPO (Osage - orange)" + "Magnolia virginiana / MAVI2 (Sweetbay)" + "Morus alba / MOAL (White mulberry)" + "Morus species / MORSPP (Mulberries)" + "Morus rubra / MORU2 (Red mulberry)" + "Nyssa aquatica / NYAQ2 (Water tupelo)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa ogeche / NYOG (Ogeechee tupelo)" + "Ostrya virginiana / OSVI (Hophornbeam)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Paulownia tomentosa / PATO2 (Princesstree)" + "Persea borbonia / PEBO (Redbay)" + "Picea abies / PIAB (Norway spruce)" + "Pinus albicaulis / PIAL (Whitebark pine)" + "Pinus attenuata / PIAT (Knobcone pine)" + "Pinus banksiana / PIBA2 (Jack pine)" + "Pinus clausa / PICL (Sand pine)" + "Pinus contorta / PICO (Lodgepole pine)" + "Pinus echinata / PIEC2 (Shortleaf pine)" + "Pinus elliottii / PIEL (Slash pine)" + "Picea engelmannii / PIEN (Engelmann spruce)" + "Pinus flexilis / PIFL2 (Limber pine)" + "Picea glauca / PIGL (White spruce)" + "Pinus glabra / PIGL2 (Spruce pine)" + "Pinus jeffreyi / PIJE (Jeffrey pine)" + "Pinus lambertiana / PILA (Sugar pine)" + "Picea mariana / PIMA (Black spruce)" + "Pinus monticola / PIMO3 (Western white pine)" + "Pinus palustris / PIPA2 (Longleaf pine)" + "Pinus ponderosa / PIPO (Ponderosa pine)" + "Picea pungens / PIPU (Blue spruce)" + "Pinus pungens / PIPU5 (Table mountain pine)" + "Pinus resinosa / PIRE (Red pine)" + "Pinus rigida / PIRI (Pitch pine)" + "Picea rubens / PIRU (Red spruce)" + "Pinus sabiniana / PISA2 (Gray pine)" + "Pinus serotina / PISE (Pond pine)" + "Picea sitchensis / PISI (Sitka spruce)" + "Pinus strobus / PIST (Eastern white pine)" + "Pinus sylvestris / PISY (Scots pine)" + "Pinus taeda / PITA (Loblolly pine)" + "Pinus virginiana / PIVI2 (Virginia pine)" + "Platanus occidentalis / PLOC (American sycamore)" + "Populus balsamifera / POBA2 (Balsam poplar)" + "Populus grandidentata / POGR4 (Bigtooth aspen)" + "Populus heterophylla / POHE4 (Swamp cottonwood)" + "Populus tremuloides / POTR12 (Quaking aspen)" + "Prunus americana / PRAM (American plum)" + "Prunus emarginata / PREM (Bitter cherry)" + "Prunus pensylvanica / PRPE2 (Pin cherry)" + "Prunus serotina / PRSE2 (Black cherry)" + "Prunus virginiana / PRVI (Chokecherry)" + "Pseudotsuga menziesii / PSME (Douglas - fir)" + "Quercus agrifolia / QUAG (California live oak)" + "Quercus chrysolepis / QUCH2 (Canyon live oak)" + "Quercus douglasii / QUDU (Blue oak)" + "Quercus ellipsoidalis / QUEL (Northern pin oak)" + "Quercus species / QUESPP (Oaks)" + "Quercus falcata / QUFA (Southern red oak)" + "Quercus imbricaria / QUIM (Shingle oak)" + "Quercus incana / QUIN (Bluejack oak)" + "Quercus laevis / QULA2 (Turkey oak)" + "Quercus laurifolia / QULA3 (Laurel oak)" + "Quercus lobata / QULO (Valley oak)" + "Quercus lyrata / QULY (Overcup oak)" + "Quercus macrocarpa / QUMA2 (Bur oak)" + "Quercus michauxii / QUMI (Swamp chestnut oak)" + "Quercus muehlenbergii / QUMU (Chinkapin oak)" + "Quercus nigra / QUNI (Water oak)" + "Quercus palustris / QUPA2 (Pin oak)" + "Quercus phellos / QUPH (Willow oak)" + "Quercus rubra / QURU (Northern red oak)" + "Quercus shumardii / QUSH (Shumard oak)" + "Quercus stellata / QUST (Post oak)" + "Quercus texana / QUTE (Texas red oak)" + "Quercus virginiana / QUVI (Live oak)" + "Quercus wislizeni / QUWI2 (Interior live oak)" + "Robinia pseudoacacia / ROPS (Black locust)" + "Salix bebbiana / SABE2 (Bebb willow)" + "Salix species / SALSPP (Willows)" + "Salix nigra / SANI (Black willow)" + "Sorbus americana / SOAM3 (American mountain - ash)" + "Taxodium ascendens / TAAS (Pond cypress)" + "Taxus brevifolia / TABR2 (Pacific yew)" + "Taxodium distichum / TADI2 (Bald cypress)" + "Thuja occidentalis / THOC2 (arborvitae)" + "Thuja plicata / THPL (Western redcedar)" + "Tilia americana / TIAM (American basswood)" + "Tsuga canadensis / TSCA (Eastern hemlock)" + "Tsuga heterophylla / TSHE (Western hemlock)" + "Tsuga mertensiana / TSME (Mountain hemlock)" + "Ulmus alata / ULAL (Winged elm)" + "Ulmus americana / ULAM (American elm)" + "Ulmus species / ULMSPP (Elms)" + "Ulmus pumila / ULPU (Siberian elm)" + "Ulmus rubra / ULRU (Slippery elm)" + "Ulmus thomasii / ULTH (Rock elm)" + "Umbellularia californica / UMCA (California - laurel)"]}], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "66a7f9a1-1013-4c52-a7e7-ed4918206dbd" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Scorch Height", + :required-outputs-operator nil, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules [], + :required-inputs + [{:submodule "Tree Characteristics", + :value "Abies amabilis / ABAM (Pacific silver fir)", + :module "Mortality", + :submodule/order 0, + :group/order 0, + :group-variable/order 0, + :group "Mortality Tree Species", + :values + ["Abies amabilis / ABAM (Pacific silver fir)" + "Abies balsamea / ABBA (Balsam fir)" + "Abies concolor / ABCO (White fir)" + "Abies grandis / ABGR (Grand fir)" + "Abies lasiocarpa / ABLA (Subalpine fir)" + "Abies magnifica / ABMA (Red Fir)" + "Abies procera / ABPR (Noble Fir)" + "Acer barbatum / ACBA3 (Southern sugar maple)" + "Acer macrophyllum / ACMA3 (Bigleaf maple)" + "Acer negundo / ACNE2 (Boxelder)" + "Acer nigrum / ACNI5 (Black maple)" + "Acer pensylvanicum / ACPE (Striped maple)" + "Acer saccharinum / ACSA2 (Silver maple)" + "Acer saccharum / ACSA3 (Sugar maple)" + "Acer spicatum / ACSP2 (Mountain maple)" + "Aesculus flava / AEFL (Yellow buckeye)" + "Aesculus glabra / AEGL (Ohio buckeye)" + "Ailanthus altissima / AIAL (Ailanthus)" + "Alnus rhombifolia / ALRH2 (White alder)" + "Alnus rubra / ALRU2 (Red alder)" + "Amelanchier arborea / AMAR3 (Common serviceberry)" + "Arbutus menziesii / ARME (Pacific madrone)" + "Betula alleghaniensis / BEAL2 (Yellow birch)" + "Betula lenta / BELE (Sweet birch)" + "Betula nigra / BENI (River Birch)" + "Betula occidentalis / BEOC2 (Water birch)" + "Betula papyrifera / BEPA (Paper birch)" + "Betula species / BETSPP (Birches)" + "Carya alba / CAAL27 (Mockernut hickory)" + "Carpinus caroliniana / CACA18 (American hornbeam)" + "Carya cordiformis / CACOL3 (Bitternut hickory)" + "Castanea dentata / CADE12 (American chestnut)" + "Calocedrus decurrens / CADE27 (Incense - cedar)" + "Carya glabra / CAGL8 (Pignut hickory)" + "Carya illinoinensis / CAIL2 (Pecan)" + "Carya laciniosa / CALA21 (Shellbark hickory)" + "Carya ovata / CAOV2 (Shagbark hickory)" + "Carya species / CARSPP (Hickories)" + "Carya texana / CATE9 (Black hickory)" + "Cercis canadensis / CECA4 (Eastern redbud)" + "Celtis laevigata / CELA (Sugarberry)" + "Celtis occidentalis / CEOC (Common hackberry)" + "Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin)" + "Chamaecyparis lawsoniana / CHLA (PortOrford - cedar)" + "Chamaecyparis nootkatensis / CHNO (Alaska - cedar)" + "Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar)" + "Cornus nuttallii / CONU4 (Pacific dogwood)" + "Crataegus species / CRASPP (Hawthorns)" + "Diospyros virginiana / DIVI5 (Persimmon)" + "Fagus grandifolia / FAGR (American beech)" + "Fraxinus americana / FRAM2 (White ash)" + "Fraxinus species / FRASPP (Ashes)" + "Fraxinus nigra / FRNI (Black ash)" + "Fraxinus pennsylvanica / FRPE (Green ash)" + "Fraxinus profunda / FRPR (Pumpkin ash)" + "Fraxinus quadrangulata / FRQU (Blue ash)" + "Gleditsia triacanthos / GLTR (Honeylocust)" + "Gordonia lasianthus / GOLA (Loblolly bay)" + "Gymnocladus dioicus / GYDI (Kentucky coffeetree)" + "Halesia species / HALSPP (Silverbells)" + "Ilex opaca / ILOP (American holly)" + "Juglans cinerea / JUCI (Butternut)" + "Juglans nigra / JUNI (Black walnut)" + "Juniperus occidentalis / JUOC (Western juniper)" + "Juniperus virginiana / JUVI (Eastern redcedar)" + "Larix laricina / LALA (Tamarack)" + "Larix lyallii / LALY (Subalpine Larch)" + "Larix occidentalis / LAOC (Western Larch)" + "Lithocarpus densiflorus / LIDE3 (Tanoak)" + "Liquidambar styraciflua / LIST2 (Sweetgum)" + "Liriodendron tulipifera / LITU (Tuliptree)" + "Magnolia acuminata / MAAC (Cucumber - tree)" + "Magnolia grandiflora / MAGR4 (Southern magnolia)" + "Magnolia species / MAGSPP (Magnolias)" + "Prunus species / MALPRU (cherry and plum species)" + "Malus species / MALSPP (Apples)" + "Magnolia macrophylla / MAMA2 (Bigleaf magnolia)" + "Maclura pomifera / MAPO (Osage - orange)" + "Magnolia virginiana / MAVI2 (Sweetbay)" + "Morus alba / MOAL (White mulberry)" + "Morus species / MORSPP (Mulberries)" + "Morus rubra / MORU2 (Red mulberry)" + "Nyssa aquatica / NYAQ2 (Water tupelo)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa ogeche / NYOG (Ogeechee tupelo)" + "Ostrya virginiana / OSVI (Hophornbeam)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Paulownia tomentosa / PATO2 (Princesstree)" + "Persea borbonia / PEBO (Redbay)" + "Picea abies / PIAB (Norway spruce)" + "Pinus albicaulis / PIAL (Whitebark pine)" + "Pinus attenuata / PIAT (Knobcone pine)" + "Pinus banksiana / PIBA2 (Jack pine)" + "Pinus clausa / PICL (Sand pine)" + "Pinus contorta / PICO (Lodgepole pine)" + "Pinus echinata / PIEC2 (Shortleaf pine)" + "Pinus elliottii / PIEL (Slash pine)" + "Picea engelmannii / PIEN (Engelmann spruce)" + "Pinus flexilis / PIFL2 (Limber pine)" + "Picea glauca / PIGL (White spruce)" + "Pinus glabra / PIGL2 (Spruce pine)" + "Pinus jeffreyi / PIJE (Jeffrey pine)" + "Pinus lambertiana / PILA (Sugar pine)" + "Picea mariana / PIMA (Black spruce)" + "Pinus monticola / PIMO3 (Western white pine)" + "Pinus palustris / PIPA2 (Longleaf pine)" + "Pinus ponderosa / PIPO (Ponderosa pine)" + "Picea pungens / PIPU (Blue spruce)" + "Pinus pungens / PIPU5 (Table mountain pine)" + "Pinus resinosa / PIRE (Red pine)" + "Pinus rigida / PIRI (Pitch pine)" + "Picea rubens / PIRU (Red spruce)" + "Pinus sabiniana / PISA2 (Gray pine)" + "Pinus serotina / PISE (Pond pine)" + "Picea sitchensis / PISI (Sitka spruce)" + "Pinus strobus / PIST (Eastern white pine)" + "Pinus sylvestris / PISY (Scots pine)" + "Pinus taeda / PITA (Loblolly pine)" + "Pinus virginiana / PIVI2 (Virginia pine)" + "Platanus occidentalis / PLOC (American sycamore)" + "Populus balsamifera / POBA2 (Balsam poplar)" + "Populus grandidentata / POGR4 (Bigtooth aspen)" + "Populus heterophylla / POHE4 (Swamp cottonwood)" + "Populus tremuloides / POTR12 (Quaking aspen)" + "Prunus americana / PRAM (American plum)" + "Prunus emarginata / PREM (Bitter cherry)" + "Prunus pensylvanica / PRPE2 (Pin cherry)" + "Prunus serotina / PRSE2 (Black cherry)" + "Prunus virginiana / PRVI (Chokecherry)" + "Pseudotsuga menziesii / PSME (Douglas - fir)" + "Quercus agrifolia / QUAG (California live oak)" + "Quercus chrysolepis / QUCH2 (Canyon live oak)" + "Quercus douglasii / QUDU (Blue oak)" + "Quercus ellipsoidalis / QUEL (Northern pin oak)" + "Quercus species / QUESPP (Oaks)" + "Quercus falcata / QUFA (Southern red oak)" + "Quercus imbricaria / QUIM (Shingle oak)" + "Quercus incana / QUIN (Bluejack oak)" + "Quercus laevis / QULA2 (Turkey oak)" + "Quercus laurifolia / QULA3 (Laurel oak)" + "Quercus lobata / QULO (Valley oak)" + "Quercus lyrata / QULY (Overcup oak)" + "Quercus macrocarpa / QUMA2 (Bur oak)" + "Quercus michauxii / QUMI (Swamp chestnut oak)" + "Quercus muehlenbergii / QUMU (Chinkapin oak)" + "Quercus nigra / QUNI (Water oak)" + "Quercus palustris / QUPA2 (Pin oak)" + "Quercus phellos / QUPH (Willow oak)" + "Quercus rubra / QURU (Northern red oak)" + "Quercus shumardii / QUSH (Shumard oak)" + "Quercus stellata / QUST (Post oak)" + "Quercus texana / QUTE (Texas red oak)" + "Quercus virginiana / QUVI (Live oak)" + "Quercus wislizeni / QUWI2 (Interior live oak)" + "Robinia pseudoacacia / ROPS (Black locust)" + "Salix bebbiana / SABE2 (Bebb willow)" + "Salix species / SALSPP (Willows)" + "Salix nigra / SANI (Black willow)" + "Sorbus americana / SOAM3 (American mountain - ash)" + "Taxodium ascendens / TAAS (Pond cypress)" + "Taxus brevifolia / TABR2 (Pacific yew)" + "Taxodium distichum / TADI2 (Bald cypress)" + "Thuja occidentalis / THOC2 (arborvitae)" + "Thuja plicata / THPL (Western redcedar)" + "Tilia americana / TIAM (American basswood)" + "Tsuga canadensis / TSCA (Eastern hemlock)" + "Tsuga heterophylla / TSHE (Western hemlock)" + "Tsuga mertensiana / TSME (Mountain hemlock)" + "Ulmus alata / ULAL (Winged elm)" + "Ulmus americana / ULAM (American elm)" + "Ulmus species / ULMSPP (Elms)" + "Ulmus pumila / ULPU (Siberian elm)" + "Ulmus rubra / ULRU (Slippery elm)" + "Ulmus thomasii / ULTH (Rock elm)" + "Umbellularia californica / UMCA (California - laurel)"]}], + :disabling-outputs [], + :required-outputs []}, + "66a7f9e4-1f07-465f-84d2-cf98fca430af" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Crown Volume Scorched Flanking", + :required-outputs-operator :and, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules ["mortality" "surface"], + :required-inputs + [{:submodule "Tree Characteristics", + :value "Abies amabilis / ABAM (Pacific silver fir)", + :module "Mortality", + :submodule/order 0, + :group/order 0, + :group-variable/order 0, + :group "Mortality Tree Species", + :values + ["Abies amabilis / ABAM (Pacific silver fir)" + "Abies balsamea / ABBA (Balsam fir)" + "Abies concolor / ABCO (White fir)" + "Abies grandis / ABGR (Grand fir)" + "Abies lasiocarpa / ABLA (Subalpine fir)" + "Abies magnifica / ABMA (Red Fir)" + "Abies procera / ABPR (Noble Fir)" + "Acer barbatum / ACBA3 (Southern sugar maple)" + "Acer macrophyllum / ACMA3 (Bigleaf maple)" + "Acer negundo / ACNE2 (Boxelder)" + "Acer nigrum / ACNI5 (Black maple)" + "Acer pensylvanicum / ACPE (Striped maple)" + "Acer saccharinum / ACSA2 (Silver maple)" + "Acer saccharum / ACSA3 (Sugar maple)" + "Acer spicatum / ACSP2 (Mountain maple)" + "Aesculus flava / AEFL (Yellow buckeye)" + "Aesculus glabra / AEGL (Ohio buckeye)" + "Ailanthus altissima / AIAL (Ailanthus)" + "Alnus rhombifolia / ALRH2 (White alder)" + "Alnus rubra / ALRU2 (Red alder)" + "Amelanchier arborea / AMAR3 (Common serviceberry)" + "Arbutus menziesii / ARME (Pacific madrone)" + "Betula alleghaniensis / BEAL2 (Yellow birch)" + "Betula lenta / BELE (Sweet birch)" + "Betula nigra / BENI (River Birch)" + "Betula occidentalis / BEOC2 (Water birch)" + "Betula papyrifera / BEPA (Paper birch)" + "Betula species / BETSPP (Birches)" + "Carya alba / CAAL27 (Mockernut hickory)" + "Carpinus caroliniana / CACA18 (American hornbeam)" + "Carya cordiformis / CACOL3 (Bitternut hickory)" + "Castanea dentata / CADE12 (American chestnut)" + "Calocedrus decurrens / CADE27 (Incense - cedar)" + "Carya glabra / CAGL8 (Pignut hickory)" + "Carya illinoinensis / CAIL2 (Pecan)" + "Carya laciniosa / CALA21 (Shellbark hickory)" + "Carya ovata / CAOV2 (Shagbark hickory)" + "Carya species / CARSPP (Hickories)" + "Carya texana / CATE9 (Black hickory)" + "Cercis canadensis / CECA4 (Eastern redbud)" + "Celtis laevigata / CELA (Sugarberry)" + "Celtis occidentalis / CEOC (Common hackberry)" + "Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin)" + "Chamaecyparis lawsoniana / CHLA (PortOrford - cedar)" + "Chamaecyparis nootkatensis / CHNO (Alaska - cedar)" + "Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar)" + "Cornus nuttallii / CONU4 (Pacific dogwood)" + "Crataegus species / CRASPP (Hawthorns)" + "Diospyros virginiana / DIVI5 (Persimmon)" + "Fagus grandifolia / FAGR (American beech)" + "Fraxinus americana / FRAM2 (White ash)" + "Fraxinus species / FRASPP (Ashes)" + "Fraxinus nigra / FRNI (Black ash)" + "Fraxinus pennsylvanica / FRPE (Green ash)" + "Fraxinus profunda / FRPR (Pumpkin ash)" + "Fraxinus quadrangulata / FRQU (Blue ash)" + "Gleditsia triacanthos / GLTR (Honeylocust)" + "Gordonia lasianthus / GOLA (Loblolly bay)" + "Gymnocladus dioicus / GYDI (Kentucky coffeetree)" + "Halesia species / HALSPP (Silverbells)" + "Ilex opaca / ILOP (American holly)" + "Juglans cinerea / JUCI (Butternut)" + "Juglans nigra / JUNI (Black walnut)" + "Juniperus occidentalis / JUOC (Western juniper)" + "Juniperus virginiana / JUVI (Eastern redcedar)" + "Larix laricina / LALA (Tamarack)" + "Larix lyallii / LALY (Subalpine Larch)" + "Larix occidentalis / LAOC (Western Larch)" + "Lithocarpus densiflorus / LIDE3 (Tanoak)" + "Liquidambar styraciflua / LIST2 (Sweetgum)" + "Liriodendron tulipifera / LITU (Tuliptree)" + "Magnolia acuminata / MAAC (Cucumber - tree)" + "Magnolia grandiflora / MAGR4 (Southern magnolia)" + "Magnolia species / MAGSPP (Magnolias)" + "Prunus species / MALPRU (cherry and plum species)" + "Malus species / MALSPP (Apples)" + "Magnolia macrophylla / MAMA2 (Bigleaf magnolia)" + "Maclura pomifera / MAPO (Osage - orange)" + "Magnolia virginiana / MAVI2 (Sweetbay)" + "Morus alba / MOAL (White mulberry)" + "Morus species / MORSPP (Mulberries)" + "Morus rubra / MORU2 (Red mulberry)" + "Nyssa aquatica / NYAQ2 (Water tupelo)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa ogeche / NYOG (Ogeechee tupelo)" + "Ostrya virginiana / OSVI (Hophornbeam)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Paulownia tomentosa / PATO2 (Princesstree)" + "Persea borbonia / PEBO (Redbay)" + "Picea abies / PIAB (Norway spruce)" + "Pinus albicaulis / PIAL (Whitebark pine)" + "Pinus attenuata / PIAT (Knobcone pine)" + "Pinus banksiana / PIBA2 (Jack pine)" + "Pinus clausa / PICL (Sand pine)" + "Pinus contorta / PICO (Lodgepole pine)" + "Pinus echinata / PIEC2 (Shortleaf pine)" + "Pinus elliottii / PIEL (Slash pine)" + "Picea engelmannii / PIEN (Engelmann spruce)" + "Pinus flexilis / PIFL2 (Limber pine)" + "Picea glauca / PIGL (White spruce)" + "Pinus glabra / PIGL2 (Spruce pine)" + "Pinus jeffreyi / PIJE (Jeffrey pine)" + "Pinus lambertiana / PILA (Sugar pine)" + "Picea mariana / PIMA (Black spruce)" + "Pinus monticola / PIMO3 (Western white pine)" + "Pinus palustris / PIPA2 (Longleaf pine)" + "Pinus ponderosa / PIPO (Ponderosa pine)" + "Picea pungens / PIPU (Blue spruce)" + "Pinus pungens / PIPU5 (Table mountain pine)" + "Pinus resinosa / PIRE (Red pine)" + "Pinus rigida / PIRI (Pitch pine)" + "Picea rubens / PIRU (Red spruce)" + "Pinus sabiniana / PISA2 (Gray pine)" + "Pinus serotina / PISE (Pond pine)" + "Picea sitchensis / PISI (Sitka spruce)" + "Pinus strobus / PIST (Eastern white pine)" + "Pinus sylvestris / PISY (Scots pine)" + "Pinus taeda / PITA (Loblolly pine)" + "Pinus virginiana / PIVI2 (Virginia pine)" + "Platanus occidentalis / PLOC (American sycamore)" + "Populus balsamifera / POBA2 (Balsam poplar)" + "Populus grandidentata / POGR4 (Bigtooth aspen)" + "Populus heterophylla / POHE4 (Swamp cottonwood)" + "Populus tremuloides / POTR12 (Quaking aspen)" + "Prunus americana / PRAM (American plum)" + "Prunus emarginata / PREM (Bitter cherry)" + "Prunus pensylvanica / PRPE2 (Pin cherry)" + "Prunus serotina / PRSE2 (Black cherry)" + "Prunus virginiana / PRVI (Chokecherry)" + "Pseudotsuga menziesii / PSME (Douglas - fir)" + "Quercus agrifolia / QUAG (California live oak)" + "Quercus chrysolepis / QUCH2 (Canyon live oak)" + "Quercus douglasii / QUDU (Blue oak)" + "Quercus ellipsoidalis / QUEL (Northern pin oak)" + "Quercus species / QUESPP (Oaks)" + "Quercus falcata / QUFA (Southern red oak)" + "Quercus imbricaria / QUIM (Shingle oak)" + "Quercus incana / QUIN (Bluejack oak)" + "Quercus laevis / QULA2 (Turkey oak)" + "Quercus laurifolia / QULA3 (Laurel oak)" + "Quercus lobata / QULO (Valley oak)" + "Quercus lyrata / QULY (Overcup oak)" + "Quercus macrocarpa / QUMA2 (Bur oak)" + "Quercus michauxii / QUMI (Swamp chestnut oak)" + "Quercus muehlenbergii / QUMU (Chinkapin oak)" + "Quercus nigra / QUNI (Water oak)" + "Quercus palustris / QUPA2 (Pin oak)" + "Quercus phellos / QUPH (Willow oak)" + "Quercus rubra / QURU (Northern red oak)" + "Quercus shumardii / QUSH (Shumard oak)" + "Quercus stellata / QUST (Post oak)" + "Quercus texana / QUTE (Texas red oak)" + "Quercus virginiana / QUVI (Live oak)" + "Quercus wislizeni / QUWI2 (Interior live oak)" + "Robinia pseudoacacia / ROPS (Black locust)" + "Salix bebbiana / SABE2 (Bebb willow)" + "Salix species / SALSPP (Willows)" + "Salix nigra / SANI (Black willow)" + "Sorbus americana / SOAM3 (American mountain - ash)" + "Taxodium ascendens / TAAS (Pond cypress)" + "Taxus brevifolia / TABR2 (Pacific yew)" + "Taxodium distichum / TADI2 (Bald cypress)" + "Thuja occidentalis / THOC2 (arborvitae)" + "Thuja plicata / THPL (Western redcedar)" + "Tilia americana / TIAM (American basswood)" + "Tsuga canadensis / TSCA (Eastern hemlock)" + "Tsuga heterophylla / TSHE (Western hemlock)" + "Tsuga mertensiana / TSME (Mountain hemlock)" + "Ulmus alata / ULAL (Winged elm)" + "Ulmus americana / ULAM (American elm)" + "Ulmus species / ULMSPP (Elms)" + "Ulmus pumila / ULPU (Siberian elm)" + "Ulmus rubra / ULRU (Slippery elm)" + "Ulmus thomasii / ULTH (Rock elm)" + "Umbellularia californica / UMCA (California - laurel)"]}], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "66aa7ec1-475c-4e6d-9a55-6a47675b92ea" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Bark Char Height", + :required-outputs-operator nil, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules ["mortality" "surface"], + :required-inputs + [{:submodule "Tree Characteristics", + :value "Acer rubrum / ACRU (Red maple)", + :module "Mortality", + :submodule/order 0, + :group/order 0, + :group-variable/order 0, + :group "Mortality Tree Species", + :values + ["Acer rubrum / ACRU (Red maple)" + "Cornus florida / COFL2 (Flowering dogwood)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa sylvatica / NYSY (Blackgum)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Quercus alba / QUAL (White oak)" + "Quercus bicolor / QUBI (Swamp white oak)" + "Quercus coccinea / QUCO2 (Scarlet oak)" + "Quercus garryana / QUGA4 (Oregon white oak)" + "Quercus kelloggii / QUKE (Califonia black oak)" + "Quercus marilandica / QUMA3 (Blackjack oak)" + "Quercus velutina / QUVE (Black oak)" + "Sassafras albidum / SAAL5 (Sassafras)"]}], + :disabling-outputs [], + :required-outputs []}, + "66f1e3a8-e3c6-4634-84bc-2887383fc892" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Direction of Interest from Upslope"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Direction of Interest Rate of Spread", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Direction of Interest", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 2, + :group "Direction Mode", + :group/single-select? true} + {:submodule "Fire Behavior", + :value "Rate of Spread", + :module "Surface", + :submodule/order 1, + :group/order 1, + :group-variable/order 0, + :group "Surface Fire"}]}, + "6520512a-5c55-4986-9aca-5ce023083294" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Backing Fireline Intensity", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Fireline Intensity", + :module "Surface", + :submodule/order 1, + :group/order 1, + :group-variable/order 2, + :group "Surface Fire"} + {:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "64a75ef0-6963-430c-beb7-60e0a271b340" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Wind and Slope", + :group "Wind Measured at:", + :value "20-Foot"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Firebrand Height from a Burning Pile", + :required-outputs-operator nil, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Heat Source", + :value "Wind Factor"} + {:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Heat Sink", + :value "Heat Sink"} + {:module "Surface", + :submodule "Size", + :group "Surface - Fire Size", + :value "Spread Distance"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Chaparral", + :value "Stems 0.25 Inches to 0.50 Inches"} + {:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Fuel Characteristics", + :value "Packing Ratio"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Chaparral", + :value "Leaves"} + {:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Heat Sink", + :value "Flame Residence Time"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Palmetto-Galberry", + :value "Live Medium: 0.25 to 1 inches"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Western Aspen", + :value "1-h Fuel Load"} + {:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Fuel Moisture", + :value "Characteristic Dead Moisture"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Chaparral", + :value "Stems 0.50 Inches to 1.0 inches"} + {:module "Surface", + :submodule "Fire Behavior", + :group "Surface Fire", + :value "Flame Length"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Palmetto-Galberry", + :value "Live Fine: 0 to 0.25 inches"} + {:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Fuel Characteristics", + :value "Relative Packing Ratio"} + {:module "Surface", + :submodule "Size", + :group "Surface - Fire Size", + :value "Fire Perimeter"} + {:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Fuel Moisture", + :value "Characteristic Live Moisture"} + {:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Heat Source", + :value "Slope Factor"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Western Aspen", + :value "Live Woody Fuel Load"} + {:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Fuel Characteristics", + :value "Characteristic SA/V"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Chaparral", + :value "From 0.50 Inches to 1.0 inches"} + {:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Heat Source", + :value "Heat Source"} + {:module "Surface", + :submodule "Size", + :group "Surface - Fire Size", + :value "Length-to-Width Ratio"} + {:module "Surface", + :submodule "Fire Behavior", + :group "Surface Fire", + :value "Rate of Spread"} + {:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Fuel Moisture", + :value "Live Fuel Moisture of Extinction"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Western Aspen", + :value "1-h SA/V"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Western Aspen", + :value "Live Herbaceous Fuel Load"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Chaparral", + :value "From 1.0 Inches to 3.0 Inches"} + {:module "Surface", + :submodule "Fire Behavior", + :group "Surface Fire", + :value "Fireline Intensity"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Palmetto-Galberry", + :value "Live Foliage: On Stem"} + {:module "Surface", + :submodule "Fire Behavior", + :group "Direction Mode", + :value "Heading"} + {:module "Surface", + :submodule "Fire Behavior", + :group "Direction Mode", + :value "Direction of Interest"} + {:module "Surface", + :submodule "Fire Behavior", + :group "Direction Mode", + :value "Heading, Flanking, Backing"} + {:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Heat Source", + :value "Dead Fuel Reaction Intensity"} + {:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Heat Source", + :value "Live Fuel Reaction Intensity"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Chaparral", + :value "Less than: 0.25 Inches"} + {:module "Surface", + :submodule "Intermediates (ROS Model)", + :group "Fuel Characteristics", + :value "Bulk Density"} + {:module "Surface", + :submodule "Size", + :group "Surface - Fire Size", + :value "Fire Area"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Western Aspen", + :value "Live Woody SA/V"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Chaparral", + :value "Total Live Fuel Load"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Chaparral", + :value "Total Dead Fuel Load"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Palmetto-Galberry", + :value "Fuelbed Depth"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Chaparral", + :value "From 0.25 Inches to 0.50 inches"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Chaparral", + :value "Stems 1.0 to 3.0 inches"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Chaparral", + :value "Stems less than 0.25 inches"} + {:module "Surface", + :submodule "Special Case Fuel Models", + :group "Palmetto-Galberry", + :value "Leaves"} + {:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Wind-Driven Surface Fire (Grass Only)"}], + :required-outputs + [{:submodule "Spot", + :value "Burning Pile", + :module "Surface", + :submodule/order 5, + :group/order 0, + :group-variable/order 0, + :group "Maximum Spotting Distance"}]}, + "64a75ef0-1a04-49fd-82eb-200c59a361cb" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Direction of Interest from Upslope"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Heading Flame Length", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Flame Length", + :module "Surface", + :submodule/order 1, + :group/order 1, + :group-variable/order 1, + :group "Surface Fire"} + {:submodule "Fire Behavior", + :value "Heading", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 0, + :group "Direction Mode", + :group/single-select? true} + {:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true} + {:submodule "Fire Behavior", + :value "Direction of Interest", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 2, + :group "Direction Mode", + :group/single-select? true}]}, + "64a75ef0-f0fe-42e9-8854-78d06047a870" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Tree Crown Volume Scorched", + :required-outputs-operator nil, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules [], + :required-inputs + [{:submodule "Tree Characteristics", + :value "Abies amabilis / ABAM (Pacific silver fir)", + :module "Mortality", + :submodule/order 0, + :group/order 0, + :group-variable/order 0, + :group "Mortality Tree Species", + :values + ["Abies amabilis / ABAM (Pacific silver fir)" + "Abies balsamea / ABBA (Balsam fir)" + "Abies concolor / ABCO (White fir)" + "Abies grandis / ABGR (Grand fir)" + "Abies lasiocarpa / ABLA (Subalpine fir)" + "Abies magnifica / ABMA (Red Fir)" + "Abies procera / ABPR (Noble Fir)" + "Acer barbatum / ACBA3 (Southern sugar maple)" + "Acer macrophyllum / ACMA3 (Bigleaf maple)" + "Acer negundo / ACNE2 (Boxelder)" + "Acer nigrum / ACNI5 (Black maple)" + "Acer pensylvanicum / ACPE (Striped maple)" + "Acer saccharinum / ACSA2 (Silver maple)" + "Acer saccharum / ACSA3 (Sugar maple)" + "Acer spicatum / ACSP2 (Mountain maple)" + "Aesculus flava / AEFL (Yellow buckeye)" + "Aesculus glabra / AEGL (Ohio buckeye)" + "Ailanthus altissima / AIAL (Ailanthus)" + "Alnus rhombifolia / ALRH2 (White alder)" + "Alnus rubra / ALRU2 (Red alder)" + "Amelanchier arborea / AMAR3 (Common serviceberry)" + "Arbutus menziesii / ARME (Pacific madrone)" + "Betula alleghaniensis / BEAL2 (Yellow birch)" + "Betula lenta / BELE (Sweet birch)" + "Betula nigra / BENI (River Birch)" + "Betula occidentalis / BEOC2 (Water birch)" + "Betula papyrifera / BEPA (Paper birch)" + "Betula species / BETSPP (Birches)" + "Carya alba / CAAL27 (Mockernut hickory)" + "Carpinus caroliniana / CACA18 (American hornbeam)" + "Carya cordiformis / CACOL3 (Bitternut hickory)" + "Castanea dentata / CADE12 (American chestnut)" + "Calocedrus decurrens / CADE27 (Incense - cedar)" + "Carya glabra / CAGL8 (Pignut hickory)" + "Carya illinoinensis / CAIL2 (Pecan)" + "Carya laciniosa / CALA21 (Shellbark hickory)" + "Carya ovata / CAOV2 (Shagbark hickory)" + "Carya species / CARSPP (Hickories)" + "Carya texana / CATE9 (Black hickory)" + "Cercis canadensis / CECA4 (Eastern redbud)" + "Celtis laevigata / CELA (Sugarberry)" + "Celtis occidentalis / CEOC (Common hackberry)" + "Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin)" + "Chamaecyparis lawsoniana / CHLA (PortOrford - cedar)" + "Chamaecyparis nootkatensis / CHNO (Alaska - cedar)" + "Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar)" + "Cornus nuttallii / CONU4 (Pacific dogwood)" + "Crataegus species / CRASPP (Hawthorns)" + "Diospyros virginiana / DIVI5 (Persimmon)" + "Fagus grandifolia / FAGR (American beech)" + "Fraxinus americana / FRAM2 (White ash)" + "Fraxinus species / FRASPP (Ashes)" + "Fraxinus nigra / FRNI (Black ash)" + "Fraxinus pennsylvanica / FRPE (Green ash)" + "Fraxinus profunda / FRPR (Pumpkin ash)" + "Fraxinus quadrangulata / FRQU (Blue ash)" + "Gleditsia triacanthos / GLTR (Honeylocust)" + "Gordonia lasianthus / GOLA (Loblolly bay)" + "Gymnocladus dioicus / GYDI (Kentucky coffeetree)" + "Halesia species / HALSPP (Silverbells)" + "Ilex opaca / ILOP (American holly)" + "Juglans cinerea / JUCI (Butternut)" + "Juglans nigra / JUNI (Black walnut)" + "Juniperus occidentalis / JUOC (Western juniper)" + "Juniperus virginiana / JUVI (Eastern redcedar)" + "Larix laricina / LALA (Tamarack)" + "Larix lyallii / LALY (Subalpine Larch)" + "Larix occidentalis / LAOC (Western Larch)" + "Lithocarpus densiflorus / LIDE3 (Tanoak)" + "Liquidambar styraciflua / LIST2 (Sweetgum)" + "Liriodendron tulipifera / LITU (Tuliptree)" + "Magnolia acuminata / MAAC (Cucumber - tree)" + "Magnolia grandiflora / MAGR4 (Southern magnolia)" + "Magnolia species / MAGSPP (Magnolias)" + "Prunus species / MALPRU (cherry and plum species)" + "Malus species / MALSPP (Apples)" + "Magnolia macrophylla / MAMA2 (Bigleaf magnolia)" + "Maclura pomifera / MAPO (Osage - orange)" + "Magnolia virginiana / MAVI2 (Sweetbay)" + "Morus alba / MOAL (White mulberry)" + "Morus species / MORSPP (Mulberries)" + "Morus rubra / MORU2 (Red mulberry)" + "Nyssa aquatica / NYAQ2 (Water tupelo)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa ogeche / NYOG (Ogeechee tupelo)" + "Ostrya virginiana / OSVI (Hophornbeam)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Paulownia tomentosa / PATO2 (Princesstree)" + "Persea borbonia / PEBO (Redbay)" + "Picea abies / PIAB (Norway spruce)" + "Pinus albicaulis / PIAL (Whitebark pine)" + "Pinus attenuata / PIAT (Knobcone pine)" + "Pinus banksiana / PIBA2 (Jack pine)" + "Pinus clausa / PICL (Sand pine)" + "Pinus contorta / PICO (Lodgepole pine)" + "Pinus echinata / PIEC2 (Shortleaf pine)" + "Pinus elliottii / PIEL (Slash pine)" + "Picea engelmannii / PIEN (Engelmann spruce)" + "Pinus flexilis / PIFL2 (Limber pine)" + "Picea glauca / PIGL (White spruce)" + "Pinus glabra / PIGL2 (Spruce pine)" + "Pinus jeffreyi / PIJE (Jeffrey pine)" + "Pinus lambertiana / PILA (Sugar pine)" + "Picea mariana / PIMA (Black spruce)" + "Pinus monticola / PIMO3 (Western white pine)" + "Pinus palustris / PIPA2 (Longleaf pine)" + "Pinus ponderosa / PIPO (Ponderosa pine)" + "Picea pungens / PIPU (Blue spruce)" + "Pinus pungens / PIPU5 (Table mountain pine)" + "Pinus resinosa / PIRE (Red pine)" + "Pinus rigida / PIRI (Pitch pine)" + "Picea rubens / PIRU (Red spruce)" + "Pinus sabiniana / PISA2 (Gray pine)" + "Pinus serotina / PISE (Pond pine)" + "Picea sitchensis / PISI (Sitka spruce)" + "Pinus strobus / PIST (Eastern white pine)" + "Pinus sylvestris / PISY (Scots pine)" + "Pinus taeda / PITA (Loblolly pine)" + "Pinus virginiana / PIVI2 (Virginia pine)" + "Platanus occidentalis / PLOC (American sycamore)" + "Populus balsamifera / POBA2 (Balsam poplar)" + "Populus grandidentata / POGR4 (Bigtooth aspen)" + "Populus heterophylla / POHE4 (Swamp cottonwood)" + "Populus tremuloides / POTR12 (Quaking aspen)" + "Prunus americana / PRAM (American plum)" + "Prunus emarginata / PREM (Bitter cherry)" + "Prunus pensylvanica / PRPE2 (Pin cherry)" + "Prunus serotina / PRSE2 (Black cherry)" + "Prunus virginiana / PRVI (Chokecherry)" + "Pseudotsuga menziesii / PSME (Douglas - fir)" + "Quercus agrifolia / QUAG (California live oak)" + "Quercus chrysolepis / QUCH2 (Canyon live oak)" + "Quercus douglasii / QUDU (Blue oak)" + "Quercus ellipsoidalis / QUEL (Northern pin oak)" + "Quercus species / QUESPP (Oaks)" + "Quercus falcata / QUFA (Southern red oak)" + "Quercus imbricaria / QUIM (Shingle oak)" + "Quercus incana / QUIN (Bluejack oak)" + "Quercus laevis / QULA2 (Turkey oak)" + "Quercus laurifolia / QULA3 (Laurel oak)" + "Quercus lobata / QULO (Valley oak)" + "Quercus lyrata / QULY (Overcup oak)" + "Quercus macrocarpa / QUMA2 (Bur oak)" + "Quercus michauxii / QUMI (Swamp chestnut oak)" + "Quercus muehlenbergii / QUMU (Chinkapin oak)" + "Quercus nigra / QUNI (Water oak)" + "Quercus palustris / QUPA2 (Pin oak)" + "Quercus phellos / QUPH (Willow oak)" + "Quercus rubra / QURU (Northern red oak)" + "Quercus shumardii / QUSH (Shumard oak)" + "Quercus stellata / QUST (Post oak)" + "Quercus texana / QUTE (Texas red oak)" + "Quercus virginiana / QUVI (Live oak)" + "Quercus wislizeni / QUWI2 (Interior live oak)" + "Robinia pseudoacacia / ROPS (Black locust)" + "Salix bebbiana / SABE2 (Bebb willow)" + "Salix species / SALSPP (Willows)" + "Salix nigra / SANI (Black willow)" + "Sorbus americana / SOAM3 (American mountain - ash)" + "Taxodium ascendens / TAAS (Pond cypress)" + "Taxus brevifolia / TABR2 (Pacific yew)" + "Taxodium distichum / TADI2 (Bald cypress)" + "Thuja occidentalis / THOC2 (arborvitae)" + "Thuja plicata / THPL (Western redcedar)" + "Tilia americana / TIAM (American basswood)" + "Tsuga canadensis / TSCA (Eastern hemlock)" + "Tsuga heterophylla / TSHE (Western hemlock)" + "Tsuga mertensiana / TSME (Mountain hemlock)" + "Ulmus alata / ULAL (Winged elm)" + "Ulmus americana / ULAM (American elm)" + "Ulmus species / ULMSPP (Elms)" + "Ulmus pumila / ULPU (Siberian elm)" + "Ulmus rubra / ULRU (Slippery elm)" + "Ulmus thomasii / ULTH (Rock elm)" + "Umbellularia californica / UMCA (California - laurel)"]}], + :disabling-outputs [], + :required-outputs []}, + "66f1e3a8-8a36-4e16-ac73-b2906c1e609b" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Direction of Interest from Upslope"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Direction of Interest Fireline Intensity", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Direction of Interest", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 2, + :group "Direction Mode", + :group/single-select? true} + {:submodule "Fire Behavior", + :value "Fireline Intensity", + :module "Surface", + :submodule/order 1, + :group/order 1, + :group-variable/order 2, + :group "Surface Fire"}]}, + "66f1e3a8-4756-4b6d-8df4-89aab6f6564b" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Direction of Interest from Upslope"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Direction of Interest Flame Length", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Flame Length", + :module "Surface", + :submodule/order 1, + :group/order 1, + :group-variable/order 1, + :group "Surface Fire"} + {:submodule "Fire Behavior", + :value "Direction of Interest", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 2, + :group "Direction Mode", + :group/single-select? true}]}, + "64a75ef0-78d6-4932-a701-0c57065c241d" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Backing Rate of Spread", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Rate of Spread", + :module "Surface", + :submodule/order 1, + :group/order 1, + :group-variable/order 0, + :group "Surface Fire"} + {:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "660c32c0-e416-4026-b490-567e4e4be42f" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Direction of Backing", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs + [{:submodule "Wind and Slope", + :value "Not Aligned (Wind is >30° from upslope).", + :module "Surface", + :submodule/order 6, + :group/order 5, + :group-variable/order 0, + :group "Wind and slope are"}], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "64a75ef0-0fde-4850-a090-553701d254a8" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Flanking Rate of Spread", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Rate of Spread", + :module "Surface", + :submodule/order 1, + :group/order 1, + :group-variable/order 0, + :group "Surface Fire"} + {:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "660c32c0-9ff5-4720-9b72-f71b308c0651" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Direction of Heading", + :required-outputs-operator nil, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs + [{:submodule "Wind and Slope", + :value "Not Aligned (Wind is >30° from upslope).", + :module "Surface", + :submodule/order 6, + :group/order 5, + :group-variable/order 0, + :group "Wind and slope are"}], + :disabling-outputs [], + :required-outputs []}, + "64a75ef0-a04e-4b80-b2a8-45b60d7875b8" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Tree Crown Length Scorched", + :required-outputs-operator nil, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules [], + :required-inputs + [{:submodule "Tree Characteristics", + :value "Abies amabilis / ABAM (Pacific silver fir)", + :module "Mortality", + :submodule/order 0, + :group/order 0, + :group-variable/order 0, + :group "Mortality Tree Species", + :values + ["Abies amabilis / ABAM (Pacific silver fir)" + "Abies balsamea / ABBA (Balsam fir)" + "Abies concolor / ABCO (White fir)" + "Abies grandis / ABGR (Grand fir)" + "Abies lasiocarpa / ABLA (Subalpine fir)" + "Abies magnifica / ABMA (Red Fir)" + "Abies procera / ABPR (Noble Fir)" + "Acer barbatum / ACBA3 (Southern sugar maple)" + "Acer macrophyllum / ACMA3 (Bigleaf maple)" + "Acer negundo / ACNE2 (Boxelder)" + "Acer nigrum / ACNI5 (Black maple)" + "Acer pensylvanicum / ACPE (Striped maple)" + "Acer saccharinum / ACSA2 (Silver maple)" + "Acer saccharum / ACSA3 (Sugar maple)" + "Acer spicatum / ACSP2 (Mountain maple)" + "Aesculus flava / AEFL (Yellow buckeye)" + "Aesculus glabra / AEGL (Ohio buckeye)" + "Ailanthus altissima / AIAL (Ailanthus)" + "Alnus rhombifolia / ALRH2 (White alder)" + "Alnus rubra / ALRU2 (Red alder)" + "Amelanchier arborea / AMAR3 (Common serviceberry)" + "Arbutus menziesii / ARME (Pacific madrone)" + "Betula alleghaniensis / BEAL2 (Yellow birch)" + "Betula lenta / BELE (Sweet birch)" + "Betula nigra / BENI (River Birch)" + "Betula occidentalis / BEOC2 (Water birch)" + "Betula papyrifera / BEPA (Paper birch)" + "Betula species / BETSPP (Birches)" + "Carya alba / CAAL27 (Mockernut hickory)" + "Carpinus caroliniana / CACA18 (American hornbeam)" + "Carya cordiformis / CACOL3 (Bitternut hickory)" + "Castanea dentata / CADE12 (American chestnut)" + "Calocedrus decurrens / CADE27 (Incense - cedar)" + "Carya glabra / CAGL8 (Pignut hickory)" + "Carya illinoinensis / CAIL2 (Pecan)" + "Carya laciniosa / CALA21 (Shellbark hickory)" + "Carya ovata / CAOV2 (Shagbark hickory)" + "Carya species / CARSPP (Hickories)" + "Carya texana / CATE9 (Black hickory)" + "Cercis canadensis / CECA4 (Eastern redbud)" + "Celtis laevigata / CELA (Sugarberry)" + "Celtis occidentalis / CEOC (Common hackberry)" + "Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin)" + "Chamaecyparis lawsoniana / CHLA (PortOrford - cedar)" + "Chamaecyparis nootkatensis / CHNO (Alaska - cedar)" + "Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar)" + "Cornus nuttallii / CONU4 (Pacific dogwood)" + "Crataegus species / CRASPP (Hawthorns)" + "Diospyros virginiana / DIVI5 (Persimmon)" + "Fagus grandifolia / FAGR (American beech)" + "Fraxinus americana / FRAM2 (White ash)" + "Fraxinus species / FRASPP (Ashes)" + "Fraxinus nigra / FRNI (Black ash)" + "Fraxinus pennsylvanica / FRPE (Green ash)" + "Fraxinus profunda / FRPR (Pumpkin ash)" + "Fraxinus quadrangulata / FRQU (Blue ash)" + "Gleditsia triacanthos / GLTR (Honeylocust)" + "Gordonia lasianthus / GOLA (Loblolly bay)" + "Gymnocladus dioicus / GYDI (Kentucky coffeetree)" + "Halesia species / HALSPP (Silverbells)" + "Ilex opaca / ILOP (American holly)" + "Juglans cinerea / JUCI (Butternut)" + "Juglans nigra / JUNI (Black walnut)" + "Juniperus occidentalis / JUOC (Western juniper)" + "Juniperus virginiana / JUVI (Eastern redcedar)" + "Larix laricina / LALA (Tamarack)" + "Larix lyallii / LALY (Subalpine Larch)" + "Larix occidentalis / LAOC (Western Larch)" + "Lithocarpus densiflorus / LIDE3 (Tanoak)" + "Liquidambar styraciflua / LIST2 (Sweetgum)" + "Liriodendron tulipifera / LITU (Tuliptree)" + "Magnolia acuminata / MAAC (Cucumber - tree)" + "Magnolia grandiflora / MAGR4 (Southern magnolia)" + "Magnolia species / MAGSPP (Magnolias)" + "Prunus species / MALPRU (cherry and plum species)" + "Malus species / MALSPP (Apples)" + "Magnolia macrophylla / MAMA2 (Bigleaf magnolia)" + "Maclura pomifera / MAPO (Osage - orange)" + "Magnolia virginiana / MAVI2 (Sweetbay)" + "Morus alba / MOAL (White mulberry)" + "Morus species / MORSPP (Mulberries)" + "Morus rubra / MORU2 (Red mulberry)" + "Nyssa aquatica / NYAQ2 (Water tupelo)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa ogeche / NYOG (Ogeechee tupelo)" + "Ostrya virginiana / OSVI (Hophornbeam)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Paulownia tomentosa / PATO2 (Princesstree)" + "Persea borbonia / PEBO (Redbay)" + "Picea abies / PIAB (Norway spruce)" + "Pinus albicaulis / PIAL (Whitebark pine)" + "Pinus attenuata / PIAT (Knobcone pine)" + "Pinus banksiana / PIBA2 (Jack pine)" + "Pinus clausa / PICL (Sand pine)" + "Pinus contorta / PICO (Lodgepole pine)" + "Pinus echinata / PIEC2 (Shortleaf pine)" + "Pinus elliottii / PIEL (Slash pine)" + "Picea engelmannii / PIEN (Engelmann spruce)" + "Pinus flexilis / PIFL2 (Limber pine)" + "Picea glauca / PIGL (White spruce)" + "Pinus glabra / PIGL2 (Spruce pine)" + "Pinus jeffreyi / PIJE (Jeffrey pine)" + "Pinus lambertiana / PILA (Sugar pine)" + "Picea mariana / PIMA (Black spruce)" + "Pinus monticola / PIMO3 (Western white pine)" + "Pinus palustris / PIPA2 (Longleaf pine)" + "Pinus ponderosa / PIPO (Ponderosa pine)" + "Picea pungens / PIPU (Blue spruce)" + "Pinus pungens / PIPU5 (Table mountain pine)" + "Pinus resinosa / PIRE (Red pine)" + "Pinus rigida / PIRI (Pitch pine)" + "Picea rubens / PIRU (Red spruce)" + "Pinus sabiniana / PISA2 (Gray pine)" + "Pinus serotina / PISE (Pond pine)" + "Picea sitchensis / PISI (Sitka spruce)" + "Pinus strobus / PIST (Eastern white pine)" + "Pinus sylvestris / PISY (Scots pine)" + "Pinus taeda / PITA (Loblolly pine)" + "Pinus virginiana / PIVI2 (Virginia pine)" + "Platanus occidentalis / PLOC (American sycamore)" + "Populus balsamifera / POBA2 (Balsam poplar)" + "Populus grandidentata / POGR4 (Bigtooth aspen)" + "Populus heterophylla / POHE4 (Swamp cottonwood)" + "Populus tremuloides / POTR12 (Quaking aspen)" + "Prunus americana / PRAM (American plum)" + "Prunus emarginata / PREM (Bitter cherry)" + "Prunus pensylvanica / PRPE2 (Pin cherry)" + "Prunus serotina / PRSE2 (Black cherry)" + "Prunus virginiana / PRVI (Chokecherry)" + "Pseudotsuga menziesii / PSME (Douglas - fir)" + "Quercus agrifolia / QUAG (California live oak)" + "Quercus chrysolepis / QUCH2 (Canyon live oak)" + "Quercus douglasii / QUDU (Blue oak)" + "Quercus ellipsoidalis / QUEL (Northern pin oak)" + "Quercus species / QUESPP (Oaks)" + "Quercus falcata / QUFA (Southern red oak)" + "Quercus imbricaria / QUIM (Shingle oak)" + "Quercus incana / QUIN (Bluejack oak)" + "Quercus laevis / QULA2 (Turkey oak)" + "Quercus laurifolia / QULA3 (Laurel oak)" + "Quercus lobata / QULO (Valley oak)" + "Quercus lyrata / QULY (Overcup oak)" + "Quercus macrocarpa / QUMA2 (Bur oak)" + "Quercus michauxii / QUMI (Swamp chestnut oak)" + "Quercus muehlenbergii / QUMU (Chinkapin oak)" + "Quercus nigra / QUNI (Water oak)" + "Quercus palustris / QUPA2 (Pin oak)" + "Quercus phellos / QUPH (Willow oak)" + "Quercus rubra / QURU (Northern red oak)" + "Quercus shumardii / QUSH (Shumard oak)" + "Quercus stellata / QUST (Post oak)" + "Quercus texana / QUTE (Texas red oak)" + "Quercus virginiana / QUVI (Live oak)" + "Quercus wislizeni / QUWI2 (Interior live oak)" + "Robinia pseudoacacia / ROPS (Black locust)" + "Salix bebbiana / SABE2 (Bebb willow)" + "Salix species / SALSPP (Willows)" + "Salix nigra / SANI (Black willow)" + "Sorbus americana / SOAM3 (American mountain - ash)" + "Taxodium ascendens / TAAS (Pond cypress)" + "Taxus brevifolia / TABR2 (Pacific yew)" + "Taxodium distichum / TADI2 (Bald cypress)" + "Thuja occidentalis / THOC2 (arborvitae)" + "Thuja plicata / THPL (Western redcedar)" + "Tilia americana / TIAM (American basswood)" + "Tsuga canadensis / TSCA (Eastern hemlock)" + "Tsuga heterophylla / TSHE (Western hemlock)" + "Tsuga mertensiana / TSME (Mountain hemlock)" + "Ulmus alata / ULAL (Winged elm)" + "Ulmus americana / ULAM (American elm)" + "Ulmus species / ULMSPP (Elms)" + "Ulmus pumila / ULPU (Siberian elm)" + "Ulmus rubra / ULRU (Slippery elm)" + "Ulmus thomasii / ULTH (Rock elm)" + "Umbellularia californica / UMCA (California - laurel)"]}], + :disabling-outputs [], + :required-outputs []}, + "65205189-9791-424a-b86b-9c134b6ac9e9" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Direction of Interest from Upslope"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Heading Fireline Intensity", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Fireline Intensity", + :module "Surface", + :submodule/order 1, + :group/order 1, + :group-variable/order 2, + :group "Surface Fire"} + {:submodule "Fire Behavior", + :value "Heading", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 0, + :group "Direction Mode", + :group/single-select? true} + {:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true} + {:submodule "Fire Behavior", + :value "Direction of Interest", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 2, + :group "Direction Mode", + :group/single-select? true}]}, + "660c397e-7b47-4df6-985c-208d90c89e03" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Backing Spread Distance", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Size", + :value "Spread Distance", + :module "Surface", + :submodule/order 2, + :group/order 0, + :group-variable/order 3, + :group "Surface - Fire Size"} + {:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "64a75ef0-ca01-47f3-a716-4a88d8f0bfbe" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Direction of Interest from Upslope"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Heading Rate of Spread", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Rate of Spread", + :module "Surface", + :submodule/order 1, + :group/order 1, + :group-variable/order 0, + :group "Surface Fire"} + {:submodule "Fire Behavior", + :value "Heading", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 0, + :group "Direction Mode", + :group/single-select? true} + {:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true} + {:submodule "Fire Behavior", + :value "Direction of Interest", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 2, + :group "Direction Mode", + :group/single-select? true}]}, + "669ea283-f980-41c3-84ef-77fd85fae6bd" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Equation Type", + :required-outputs-operator nil, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules ["mortality" "surface"], + :required-inputs [], + :disabling-outputs [], + :required-outputs []}, + "66a7f9a1-4bc1-49ac-8c2e-3ec36ca912bd" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Scorch Height Backing", + :required-outputs-operator :and, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules ["mortality" "surface"], + :required-inputs + [{:submodule "Tree Characteristics", + :value "Abies amabilis / ABAM (Pacific silver fir)", + :module "Mortality", + :submodule/order 0, + :group/order 0, + :group-variable/order 0, + :group "Mortality Tree Species", + :values + ["Abies amabilis / ABAM (Pacific silver fir)" + "Abies balsamea / ABBA (Balsam fir)" + "Abies concolor / ABCO (White fir)" + "Abies grandis / ABGR (Grand fir)" + "Abies lasiocarpa / ABLA (Subalpine fir)" + "Abies magnifica / ABMA (Red Fir)" + "Abies procera / ABPR (Noble Fir)" + "Acer barbatum / ACBA3 (Southern sugar maple)" + "Acer macrophyllum / ACMA3 (Bigleaf maple)" + "Acer negundo / ACNE2 (Boxelder)" + "Acer nigrum / ACNI5 (Black maple)" + "Acer pensylvanicum / ACPE (Striped maple)" + "Acer saccharinum / ACSA2 (Silver maple)" + "Acer saccharum / ACSA3 (Sugar maple)" + "Acer spicatum / ACSP2 (Mountain maple)" + "Aesculus flava / AEFL (Yellow buckeye)" + "Aesculus glabra / AEGL (Ohio buckeye)" + "Ailanthus altissima / AIAL (Ailanthus)" + "Alnus rhombifolia / ALRH2 (White alder)" + "Alnus rubra / ALRU2 (Red alder)" + "Amelanchier arborea / AMAR3 (Common serviceberry)" + "Arbutus menziesii / ARME (Pacific madrone)" + "Betula alleghaniensis / BEAL2 (Yellow birch)" + "Betula lenta / BELE (Sweet birch)" + "Betula nigra / BENI (River Birch)" + "Betula occidentalis / BEOC2 (Water birch)" + "Betula papyrifera / BEPA (Paper birch)" + "Betula species / BETSPP (Birches)" + "Carya alba / CAAL27 (Mockernut hickory)" + "Carpinus caroliniana / CACA18 (American hornbeam)" + "Carya cordiformis / CACOL3 (Bitternut hickory)" + "Castanea dentata / CADE12 (American chestnut)" + "Calocedrus decurrens / CADE27 (Incense - cedar)" + "Carya glabra / CAGL8 (Pignut hickory)" + "Carya illinoinensis / CAIL2 (Pecan)" + "Carya laciniosa / CALA21 (Shellbark hickory)" + "Carya ovata / CAOV2 (Shagbark hickory)" + "Carya species / CARSPP (Hickories)" + "Carya texana / CATE9 (Black hickory)" + "Cercis canadensis / CECA4 (Eastern redbud)" + "Celtis laevigata / CELA (Sugarberry)" + "Celtis occidentalis / CEOC (Common hackberry)" + "Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin)" + "Chamaecyparis lawsoniana / CHLA (PortOrford - cedar)" + "Chamaecyparis nootkatensis / CHNO (Alaska - cedar)" + "Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar)" + "Cornus nuttallii / CONU4 (Pacific dogwood)" + "Crataegus species / CRASPP (Hawthorns)" + "Diospyros virginiana / DIVI5 (Persimmon)" + "Fagus grandifolia / FAGR (American beech)" + "Fraxinus americana / FRAM2 (White ash)" + "Fraxinus species / FRASPP (Ashes)" + "Fraxinus nigra / FRNI (Black ash)" + "Fraxinus pennsylvanica / FRPE (Green ash)" + "Fraxinus profunda / FRPR (Pumpkin ash)" + "Fraxinus quadrangulata / FRQU (Blue ash)" + "Gleditsia triacanthos / GLTR (Honeylocust)" + "Gordonia lasianthus / GOLA (Loblolly bay)" + "Gymnocladus dioicus / GYDI (Kentucky coffeetree)" + "Halesia species / HALSPP (Silverbells)" + "Ilex opaca / ILOP (American holly)" + "Juglans cinerea / JUCI (Butternut)" + "Juglans nigra / JUNI (Black walnut)" + "Juniperus occidentalis / JUOC (Western juniper)" + "Juniperus virginiana / JUVI (Eastern redcedar)" + "Larix laricina / LALA (Tamarack)" + "Larix lyallii / LALY (Subalpine Larch)" + "Larix occidentalis / LAOC (Western Larch)" + "Lithocarpus densiflorus / LIDE3 (Tanoak)" + "Liquidambar styraciflua / LIST2 (Sweetgum)" + "Liriodendron tulipifera / LITU (Tuliptree)" + "Magnolia acuminata / MAAC (Cucumber - tree)" + "Magnolia grandiflora / MAGR4 (Southern magnolia)" + "Magnolia species / MAGSPP (Magnolias)" + "Prunus species / MALPRU (cherry and plum species)" + "Malus species / MALSPP (Apples)" + "Magnolia macrophylla / MAMA2 (Bigleaf magnolia)" + "Maclura pomifera / MAPO (Osage - orange)" + "Magnolia virginiana / MAVI2 (Sweetbay)" + "Morus alba / MOAL (White mulberry)" + "Morus species / MORSPP (Mulberries)" + "Morus rubra / MORU2 (Red mulberry)" + "Nyssa aquatica / NYAQ2 (Water tupelo)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa ogeche / NYOG (Ogeechee tupelo)" + "Ostrya virginiana / OSVI (Hophornbeam)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Paulownia tomentosa / PATO2 (Princesstree)" + "Persea borbonia / PEBO (Redbay)" + "Picea abies / PIAB (Norway spruce)" + "Pinus albicaulis / PIAL (Whitebark pine)" + "Pinus attenuata / PIAT (Knobcone pine)" + "Pinus banksiana / PIBA2 (Jack pine)" + "Pinus clausa / PICL (Sand pine)" + "Pinus contorta / PICO (Lodgepole pine)" + "Pinus echinata / PIEC2 (Shortleaf pine)" + "Pinus elliottii / PIEL (Slash pine)" + "Picea engelmannii / PIEN (Engelmann spruce)" + "Pinus flexilis / PIFL2 (Limber pine)" + "Picea glauca / PIGL (White spruce)" + "Pinus glabra / PIGL2 (Spruce pine)" + "Pinus jeffreyi / PIJE (Jeffrey pine)" + "Pinus lambertiana / PILA (Sugar pine)" + "Picea mariana / PIMA (Black spruce)" + "Pinus monticola / PIMO3 (Western white pine)" + "Pinus palustris / PIPA2 (Longleaf pine)" + "Pinus ponderosa / PIPO (Ponderosa pine)" + "Picea pungens / PIPU (Blue spruce)" + "Pinus pungens / PIPU5 (Table mountain pine)" + "Pinus resinosa / PIRE (Red pine)" + "Pinus rigida / PIRI (Pitch pine)" + "Picea rubens / PIRU (Red spruce)" + "Pinus sabiniana / PISA2 (Gray pine)" + "Pinus serotina / PISE (Pond pine)" + "Picea sitchensis / PISI (Sitka spruce)" + "Pinus strobus / PIST (Eastern white pine)" + "Pinus sylvestris / PISY (Scots pine)" + "Pinus taeda / PITA (Loblolly pine)" + "Pinus virginiana / PIVI2 (Virginia pine)" + "Platanus occidentalis / PLOC (American sycamore)" + "Populus balsamifera / POBA2 (Balsam poplar)" + "Populus grandidentata / POGR4 (Bigtooth aspen)" + "Populus heterophylla / POHE4 (Swamp cottonwood)" + "Populus tremuloides / POTR12 (Quaking aspen)" + "Prunus americana / PRAM (American plum)" + "Prunus emarginata / PREM (Bitter cherry)" + "Prunus pensylvanica / PRPE2 (Pin cherry)" + "Prunus serotina / PRSE2 (Black cherry)" + "Prunus virginiana / PRVI (Chokecherry)" + "Pseudotsuga menziesii / PSME (Douglas - fir)" + "Quercus agrifolia / QUAG (California live oak)" + "Quercus chrysolepis / QUCH2 (Canyon live oak)" + "Quercus douglasii / QUDU (Blue oak)" + "Quercus ellipsoidalis / QUEL (Northern pin oak)" + "Quercus species / QUESPP (Oaks)" + "Quercus falcata / QUFA (Southern red oak)" + "Quercus imbricaria / QUIM (Shingle oak)" + "Quercus incana / QUIN (Bluejack oak)" + "Quercus laevis / QULA2 (Turkey oak)" + "Quercus laurifolia / QULA3 (Laurel oak)" + "Quercus lobata / QULO (Valley oak)" + "Quercus lyrata / QULY (Overcup oak)" + "Quercus macrocarpa / QUMA2 (Bur oak)" + "Quercus michauxii / QUMI (Swamp chestnut oak)" + "Quercus muehlenbergii / QUMU (Chinkapin oak)" + "Quercus nigra / QUNI (Water oak)" + "Quercus palustris / QUPA2 (Pin oak)" + "Quercus phellos / QUPH (Willow oak)" + "Quercus rubra / QURU (Northern red oak)" + "Quercus shumardii / QUSH (Shumard oak)" + "Quercus stellata / QUST (Post oak)" + "Quercus texana / QUTE (Texas red oak)" + "Quercus virginiana / QUVI (Live oak)" + "Quercus wislizeni / QUWI2 (Interior live oak)" + "Robinia pseudoacacia / ROPS (Black locust)" + "Salix bebbiana / SABE2 (Bebb willow)" + "Salix species / SALSPP (Willows)" + "Salix nigra / SANI (Black willow)" + "Sorbus americana / SOAM3 (American mountain - ash)" + "Taxodium ascendens / TAAS (Pond cypress)" + "Taxus brevifolia / TABR2 (Pacific yew)" + "Taxodium distichum / TADI2 (Bald cypress)" + "Thuja occidentalis / THOC2 (arborvitae)" + "Thuja plicata / THPL (Western redcedar)" + "Tilia americana / TIAM (American basswood)" + "Tsuga canadensis / TSCA (Eastern hemlock)" + "Tsuga heterophylla / TSHE (Western hemlock)" + "Tsuga mertensiana / TSME (Mountain hemlock)" + "Ulmus alata / ULAL (Winged elm)" + "Ulmus americana / ULAM (American elm)" + "Ulmus species / ULMSPP (Elms)" + "Ulmus pumila / ULPU (Siberian elm)" + "Ulmus rubra / ULRU (Slippery elm)" + "Ulmus thomasii / ULTH (Rock elm)" + "Umbellularia californica / UMCA (California - laurel)"]}], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "660c32c0-2eba-40af-93ec-4bc0c816e1e2" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Direction of Flanking", + :required-outputs-operator :and, + :default-outputs [], + :module "Surface", + :required-modules [], + :required-inputs + [{:submodule "Wind and Slope", + :value "Not Aligned (Wind is >30° from upslope).", + :module "Surface", + :submodule/order 6, + :group/order 5, + :group-variable/order 0, + :group "Wind and slope are"}], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "66a7f9e4-4ac1-4524-b6d3-f1db04eceec1" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Crown Length Scorched Flanking", + :required-outputs-operator :and, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules ["mortality" "surface"], + :required-inputs + [{:submodule "Tree Characteristics", + :value "Abies amabilis / ABAM (Pacific silver fir)", + :module "Mortality", + :submodule/order 0, + :group/order 0, + :group-variable/order 0, + :group "Mortality Tree Species", + :values + ["Abies amabilis / ABAM (Pacific silver fir)" + "Abies balsamea / ABBA (Balsam fir)" + "Abies concolor / ABCO (White fir)" + "Abies grandis / ABGR (Grand fir)" + "Abies lasiocarpa / ABLA (Subalpine fir)" + "Abies magnifica / ABMA (Red Fir)" + "Abies procera / ABPR (Noble Fir)" + "Acer barbatum / ACBA3 (Southern sugar maple)" + "Acer macrophyllum / ACMA3 (Bigleaf maple)" + "Acer negundo / ACNE2 (Boxelder)" + "Acer nigrum / ACNI5 (Black maple)" + "Acer pensylvanicum / ACPE (Striped maple)" + "Acer saccharinum / ACSA2 (Silver maple)" + "Acer saccharum / ACSA3 (Sugar maple)" + "Acer spicatum / ACSP2 (Mountain maple)" + "Aesculus flava / AEFL (Yellow buckeye)" + "Aesculus glabra / AEGL (Ohio buckeye)" + "Ailanthus altissima / AIAL (Ailanthus)" + "Alnus rhombifolia / ALRH2 (White alder)" + "Alnus rubra / ALRU2 (Red alder)" + "Amelanchier arborea / AMAR3 (Common serviceberry)" + "Arbutus menziesii / ARME (Pacific madrone)" + "Betula alleghaniensis / BEAL2 (Yellow birch)" + "Betula lenta / BELE (Sweet birch)" + "Betula nigra / BENI (River Birch)" + "Betula occidentalis / BEOC2 (Water birch)" + "Betula papyrifera / BEPA (Paper birch)" + "Betula species / BETSPP (Birches)" + "Carya alba / CAAL27 (Mockernut hickory)" + "Carpinus caroliniana / CACA18 (American hornbeam)" + "Carya cordiformis / CACOL3 (Bitternut hickory)" + "Castanea dentata / CADE12 (American chestnut)" + "Calocedrus decurrens / CADE27 (Incense - cedar)" + "Carya glabra / CAGL8 (Pignut hickory)" + "Carya illinoinensis / CAIL2 (Pecan)" + "Carya laciniosa / CALA21 (Shellbark hickory)" + "Carya ovata / CAOV2 (Shagbark hickory)" + "Carya species / CARSPP (Hickories)" + "Carya texana / CATE9 (Black hickory)" + "Cercis canadensis / CECA4 (Eastern redbud)" + "Celtis laevigata / CELA (Sugarberry)" + "Celtis occidentalis / CEOC (Common hackberry)" + "Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin)" + "Chamaecyparis lawsoniana / CHLA (PortOrford - cedar)" + "Chamaecyparis nootkatensis / CHNO (Alaska - cedar)" + "Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar)" + "Cornus nuttallii / CONU4 (Pacific dogwood)" + "Crataegus species / CRASPP (Hawthorns)" + "Diospyros virginiana / DIVI5 (Persimmon)" + "Fagus grandifolia / FAGR (American beech)" + "Fraxinus americana / FRAM2 (White ash)" + "Fraxinus species / FRASPP (Ashes)" + "Fraxinus nigra / FRNI (Black ash)" + "Fraxinus pennsylvanica / FRPE (Green ash)" + "Fraxinus profunda / FRPR (Pumpkin ash)" + "Fraxinus quadrangulata / FRQU (Blue ash)" + "Gleditsia triacanthos / GLTR (Honeylocust)" + "Gordonia lasianthus / GOLA (Loblolly bay)" + "Gymnocladus dioicus / GYDI (Kentucky coffeetree)" + "Halesia species / HALSPP (Silverbells)" + "Ilex opaca / ILOP (American holly)" + "Juglans cinerea / JUCI (Butternut)" + "Juglans nigra / JUNI (Black walnut)" + "Juniperus occidentalis / JUOC (Western juniper)" + "Juniperus virginiana / JUVI (Eastern redcedar)" + "Larix laricina / LALA (Tamarack)" + "Larix lyallii / LALY (Subalpine Larch)" + "Larix occidentalis / LAOC (Western Larch)" + "Lithocarpus densiflorus / LIDE3 (Tanoak)" + "Liquidambar styraciflua / LIST2 (Sweetgum)" + "Liriodendron tulipifera / LITU (Tuliptree)" + "Magnolia acuminata / MAAC (Cucumber - tree)" + "Magnolia grandiflora / MAGR4 (Southern magnolia)" + "Magnolia species / MAGSPP (Magnolias)" + "Prunus species / MALPRU (cherry and plum species)" + "Malus species / MALSPP (Apples)" + "Magnolia macrophylla / MAMA2 (Bigleaf magnolia)" + "Maclura pomifera / MAPO (Osage - orange)" + "Magnolia virginiana / MAVI2 (Sweetbay)" + "Morus alba / MOAL (White mulberry)" + "Morus species / MORSPP (Mulberries)" + "Morus rubra / MORU2 (Red mulberry)" + "Nyssa aquatica / NYAQ2 (Water tupelo)" + "Nyssa sylvatica / NYBI (Blackgum)" + "Nyssa ogeche / NYOG (Ogeechee tupelo)" + "Ostrya virginiana / OSVI (Hophornbeam)" + "Oxydendrum arboreum / OXAR (Sourwood)" + "Paulownia tomentosa / PATO2 (Princesstree)" + "Persea borbonia / PEBO (Redbay)" + "Picea abies / PIAB (Norway spruce)" + "Pinus albicaulis / PIAL (Whitebark pine)" + "Pinus attenuata / PIAT (Knobcone pine)" + "Pinus banksiana / PIBA2 (Jack pine)" + "Pinus clausa / PICL (Sand pine)" + "Pinus contorta / PICO (Lodgepole pine)" + "Pinus echinata / PIEC2 (Shortleaf pine)" + "Pinus elliottii / PIEL (Slash pine)" + "Picea engelmannii / PIEN (Engelmann spruce)" + "Pinus flexilis / PIFL2 (Limber pine)" + "Picea glauca / PIGL (White spruce)" + "Pinus glabra / PIGL2 (Spruce pine)" + "Pinus jeffreyi / PIJE (Jeffrey pine)" + "Pinus lambertiana / PILA (Sugar pine)" + "Picea mariana / PIMA (Black spruce)" + "Pinus monticola / PIMO3 (Western white pine)" + "Pinus palustris / PIPA2 (Longleaf pine)" + "Pinus ponderosa / PIPO (Ponderosa pine)" + "Picea pungens / PIPU (Blue spruce)" + "Pinus pungens / PIPU5 (Table mountain pine)" + "Pinus resinosa / PIRE (Red pine)" + "Pinus rigida / PIRI (Pitch pine)" + "Picea rubens / PIRU (Red spruce)" + "Pinus sabiniana / PISA2 (Gray pine)" + "Pinus serotina / PISE (Pond pine)" + "Picea sitchensis / PISI (Sitka spruce)" + "Pinus strobus / PIST (Eastern white pine)" + "Pinus sylvestris / PISY (Scots pine)" + "Pinus taeda / PITA (Loblolly pine)" + "Pinus virginiana / PIVI2 (Virginia pine)" + "Platanus occidentalis / PLOC (American sycamore)" + "Populus balsamifera / POBA2 (Balsam poplar)" + "Populus grandidentata / POGR4 (Bigtooth aspen)" + "Populus heterophylla / POHE4 (Swamp cottonwood)" + "Populus tremuloides / POTR12 (Quaking aspen)" + "Prunus americana / PRAM (American plum)" + "Prunus emarginata / PREM (Bitter cherry)" + "Prunus pensylvanica / PRPE2 (Pin cherry)" + "Prunus serotina / PRSE2 (Black cherry)" + "Prunus virginiana / PRVI (Chokecherry)" + "Pseudotsuga menziesii / PSME (Douglas - fir)" + "Quercus agrifolia / QUAG (California live oak)" + "Quercus chrysolepis / QUCH2 (Canyon live oak)" + "Quercus douglasii / QUDU (Blue oak)" + "Quercus ellipsoidalis / QUEL (Northern pin oak)" + "Quercus species / QUESPP (Oaks)" + "Quercus falcata / QUFA (Southern red oak)" + "Quercus imbricaria / QUIM (Shingle oak)" + "Quercus incana / QUIN (Bluejack oak)" + "Quercus laevis / QULA2 (Turkey oak)" + "Quercus laurifolia / QULA3 (Laurel oak)" + "Quercus lobata / QULO (Valley oak)" + "Quercus lyrata / QULY (Overcup oak)" + "Quercus macrocarpa / QUMA2 (Bur oak)" + "Quercus michauxii / QUMI (Swamp chestnut oak)" + "Quercus muehlenbergii / QUMU (Chinkapin oak)" + "Quercus nigra / QUNI (Water oak)" + "Quercus palustris / QUPA2 (Pin oak)" + "Quercus phellos / QUPH (Willow oak)" + "Quercus rubra / QURU (Northern red oak)" + "Quercus shumardii / QUSH (Shumard oak)" + "Quercus stellata / QUST (Post oak)" + "Quercus texana / QUTE (Texas red oak)" + "Quercus virginiana / QUVI (Live oak)" + "Quercus wislizeni / QUWI2 (Interior live oak)" + "Robinia pseudoacacia / ROPS (Black locust)" + "Salix bebbiana / SABE2 (Bebb willow)" + "Salix species / SALSPP (Willows)" + "Salix nigra / SANI (Black willow)" + "Sorbus americana / SOAM3 (American mountain - ash)" + "Taxodium ascendens / TAAS (Pond cypress)" + "Taxus brevifolia / TABR2 (Pacific yew)" + "Taxodium distichum / TADI2 (Bald cypress)" + "Thuja occidentalis / THOC2 (arborvitae)" + "Thuja plicata / THPL (Western redcedar)" + "Tilia americana / TIAM (American basswood)" + "Tsuga canadensis / TSCA (Eastern hemlock)" + "Tsuga heterophylla / TSHE (Western hemlock)" + "Tsuga mertensiana / TSME (Mountain hemlock)" + "Ulmus alata / ULAL (Winged elm)" + "Ulmus americana / ULAM (American elm)" + "Ulmus species / ULMSPP (Elms)" + "Ulmus pumila / ULPU (Siberian elm)" + "Ulmus rubra / ULRU (Slippery elm)" + "Ulmus thomasii / ULTH (Rock elm)" + "Umbellularia californica / UMCA (California - laurel)"]}], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "64a75ef0-a289-479b-a829-9681e113dfd8" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Probability Of Mortality", + :required-outputs-operator nil, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules ["mortality" "surface"], + :required-inputs [], + :disabling-outputs [], + :required-outputs []}, + "66a7fa54-81b5-420e-9e73-49107410021b" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "CVS or CLS", + :required-outputs-operator nil, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules ["mortality" "surface"], + :required-inputs [], + :disabling-outputs [], + :required-outputs []}, + "66a7f28a-f65a-4b86-8b21-73c1ba5219c8" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Surface Spread Directions", + :value "Heading-Flanking-Backing"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Probability of Mortality Flanking", + :required-outputs-operator :and, + :default-outputs + [{:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability Of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Equation Type"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "Probability of Mortality"} + {:module "Mortality", + :submodule "Mortality", + :group "Tree Mortality", + :value "CVS or CLS"}], + :module "Mortality", + :required-modules [], + :required-inputs [], + :disabling-outputs + [{:module "Surface", + :submodule "Spot", + :group "Maximum Spotting Distance", + :value "Burning Pile"}], + :required-outputs + [{:submodule "Fire Behavior", + :value "Heading, Flanking, Backing", + :module "Surface", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Direction Mode", + :group/single-select? true}]}, + "64a75ef0-aeee-4ccc-bdf8-3a05cfb882b9" + {:input-value-overrides + [{:submodule "Wind and Slope", + :group "Wind Adjustment Factor", + :value "User Input"} + {:submodule "Spread Directions", + :group "Wind and Spread Directions", + :value "Degrees Clockwise From Upslope"} + {:submodule "Spread Directions", + :group "Surface Spread Direction Mode", + :value "From Perimeter"}], + :output-name "Fire Type", + :required-outputs-operator :or, + :default-outputs + [{:module "Surface", + :submodule "Fire Behavior", + :group "Direction Mode", + :value "Heading"}], + :module "Crown", + :required-modules [], + :required-inputs [], + :disabling-outputs [], + :required-outputs + [{:submodule "Fire Behavior", + :value "Rate of Spread", + :module "Crown", + :submodule/order 1, + :group/order 0, + :group-variable/order 0, + :group "Fire Behavior"} + {:submodule "Fire Behavior", + :value "Flame Length", + :module "Crown", + :submodule/order 1, + :group/order 0, + :group-variable/order 1, + :group "Fire Behavior"} + {:submodule "Fire Behavior", + :value "Fireline Intensity", + :module "Crown", + :submodule/order 1, + :group/order 0, + :group-variable/order 2, + :group "Fire Behavior"} + {:submodule "Fire Type", + :value "Active Ratio", + :module "Crown", + :submodule/order 3, + :group/order 0, + :group-variable/order 0, + :group "Active Crown Fire"} + {:submodule "Fire Type", + :value "Critical Crown Rate of Spread", + :module "Crown", + :submodule/order 3, + :group/order 0, + :group-variable/order 1, + :group "Active Crown Fire"} + {:submodule "Fire Type", + :value "Critical Surface Fireline Intensity", + :module "Crown", + :submodule/order 3, + :group/order 1, + :group-variable/order 3, + :group "Transition to Crown Fire"} + {:submodule "Fire Type", + :value "Critical Surface Flame Length", + :module "Crown", + :submodule/order 3, + :group/order 1, + :group-variable/order 1, + :group "Transition to Crown Fire"} + {:submodule "Fire Type", + :value "Transition Ratio", + :module "Crown", + :submodule/order 3, + :group/order 1, + :group-variable/order 0, + :group "Transition to Crown Fire"} + {:submodule "Size", + :value "Fire Area", + :module "Crown", + :submodule/order 5, + :group/order 0, + :group-variable/order 0, + :group "Crown - Fire Size"} + {:submodule "Size", + :value "Fire Perimeter", + :module "Crown", + :submodule/order 5, + :group/order 0, + :group-variable/order 1, + :group "Crown - Fire Size"} + {:submodule "Size", + :value "Spread Distance", + :module "Crown", + :submodule/order 5, + :group/order 0, + :group-variable/order 3, + :group "Crown - Fire Size"}]}}} diff --git a/development/user.clj b/development/user.clj index 83ad96dce..80a37c0e0 100644 --- a/development/user.clj +++ b/development/user.clj @@ -1,12 +1,41 @@ (ns user) (comment - (require '[behave.server :as server] - '[behave.handlers :refer [vms-sync!]] - '[config.interface :refer [get-config load-config]]) - (server/init-config!) - (server/init-db! (get-config :database :config)) + (require '[cucumber.runner :refer [run-cucumber-tests]]) + + ;; Takes 3 hr to complete + (time + (run-cucumber-tests + {:debug? false + :headless? true + :features "features" + :steps "steps" + :stop true + :browser :chrome + :url "http://localhost:8081/worksheets"})) + + ;; Takes 30 min to complete + (time + (run-cucumber-tests + {:debug? false + :headless? true + :features "features" + :steps "steps" + :stop true + :query-string '(and "core" (not "extended")) + :browser :chrome + :url "http://localhost:8081/worksheets"})) + ) + +(comment + (do + (require '[behave.server :as server] + '[behave.handlers :refer [vms-sync!]] + '[config.interface :refer [get-config load-config]]) + + (server/init-config!) + (server/init-db! (get-config :database :config))) (vms-sync!) @@ -80,11 +109,11 @@ (def module-help-pages (map (partial get-module-help-pages db) modules)) - (def DOCTYPES {:map "" + (def DOCTYPES {:map "" :topic ""}) (defn insert-doctype [doctype xml] - (let [lines (str/split-lines xml) + (let [lines (str/split-lines xml) result (concat (take 1 lines) [(get DOCTYPES doctype)] (drop 1 lines))] (str/join "\n" result))) @@ -93,7 +122,7 @@ (defn generate-snippet [title help-key body-as-hiccup] (let [body (if (empty? body-as-hiccup) nil body-as-hiccup)] - (insert-topic-doctype + (insert-topic-doctype (xml/indent-str (xml/sexp-as-element [:topic {:id title} @@ -133,14 +162,13 @@ [:map (map gen-topic-ref dita-topics)])))) - (gen-ditamap [{:href "Content/Modules/Modules.dita" - :title "Modules" - :topics [{:href "Content/Modules/Surface.dita" - :title "Surface"}]}]) - + (gen-ditamap [{:href "Content/Modules/Modules.dita" + :title "Modules" + :topics [{:href "Content/Modules/Surface.dita" + :title "Surface"}]}]) ;; Markdown to Hiccup - + db ;; Generate DITA Project Layout @@ -163,8 +191,6 @@ ;; - Mortality ;; - Outputs ;; - Inputs - - module-help-pages (map #(let [submodule %] @@ -206,19 +232,39 @@ [snippet-name help-key]))] (spit submodule-topic-file - (generate-topic - (str/replace submodule #" " "_") - submodule - (->snake submodule) - - (concat - '([:h1 submodule]) - (map #(let [[snippet-name help-key] % - ref (str "../../../../Resources/Snippets/Variables/" snippet-name ".dita#" )] - [:p {:conref %}]))) - [] - [:h1 "Hello World"]) - - - ))))))) - ) + (generate-topic + (str/replace submodule #" " "_") + submodule + (->snake submodule) + + (concat + '([:h1 submodule]) + (map #(let [[snippet-name help-key] % + ref (str "../../../../Resources/Snippets/Variables/" snippet-name ".dita#")] + [:p {:conref %}]))) + [] + [:h1 "Hello World"]))))))))) + +;; =========================================================================================================== +;; Test Matrix Generator +;; =========================================================================================================== +;; Generate comprehensive test matrix report for all :group/conditionals in the schema +;; This helps identify which conditionals need Cucumber tests + +(comment + ;; Initialize CMS database first + (require '[behave-cms.server :as cms]) + (cms/init-db!) + + ;; Load test matrix generator + (require '[test-matrix-generator :as tmg] :reload) + + ;; Print quick summary + (tmg/print-summary) + + ;; Generate full test matrix report (Markdown + EDN) + ;; Creates: development/test_matrix_report.md and development/test_matrix_data.edn + (tmg/generate-test-matrix!) + + ;; Generate with custom paths + (tmg/generate-test-matrix! "custom-report.md" "custom-data.edn")) diff --git a/features/contain-input_suppression_estimated-resource-arrival-time-and-duration.feature b/features/contain-input_suppression_estimated-resource-arrival-time-and-duration.feature new file mode 100644 index 000000000..17bf93436 --- /dev/null +++ b/features/contain-input_suppression_estimated-resource-arrival-time-and-duration.feature @@ -0,0 +1,12 @@ +@core +Feature: Surface & Contain Input - Suppression -> Estimated Resource Arrival Time and Duration + + @core + Scenario: Estimated Resource Arrival Time and Duration is displayed + Given I have started a new Surface & Contain Worksheet in Guided Mode + When these input paths are entered + | submodule | group | value | + | Suppression | Contain Mode | Calculate Minimum Production Rate Only | + Then the following input paths are displayed: + | submodule | group | + | Suppression | Estimated Resource Arrival Time and Duration | \ No newline at end of file diff --git a/features/contain-input_suppression_resources.feature b/features/contain-input_suppression_resources.feature new file mode 100644 index 000000000..b926ff68c --- /dev/null +++ b/features/contain-input_suppression_resources.feature @@ -0,0 +1,12 @@ +@core +Feature: Surface & Contain Input - Suppression -> Resources + + @core + Scenario: Resources is displayed + Given I have started a new Surface & Contain Worksheet in Guided Mode + When these input paths are entered + | submodule | group | value | + | Suppression | Contain Mode | Add Resources | + Then the following input paths are displayed: + | submodule | group | + | Suppression | Resources | \ No newline at end of file diff --git a/features/crown-input_canopy-fuel.feature b/features/crown-input_canopy-fuel.feature new file mode 100644 index 000000000..4843ccd29 --- /dev/null +++ b/features/crown-input_canopy-fuel.feature @@ -0,0 +1,25 @@ +@core +Feature: Surface & Crown Input - Canopy Fuel + + @core + Scenario Outline: Canopy Fuel is displayed + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Canopy Fuel | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + | Fire Behavior | Fire Behavior | Flame Length | + | Fire Behavior | Fire Behavior | Fireline Intensity | + | Size | Crown - Fire Size | Fire Area | + | Size | Crown - Fire Size | Fire Perimeter | + | Size | Crown - Fire Size | Length-to-Width Ratio | + | Size | Crown - Fire Size | Spread Distance | + | Fire Type | Transition to Crown Fire | Transition Ratio | + | Fire Type | Transition to Crown Fire | Critical Surface Flame Length | + | Fire Type | Transition to Crown Fire | Critical Surface Fireline Intensity | + | Fire Type | Active Crown Fire | Active Ratio | + | Fire Type | Active Crown Fire | Critical Crown Rate of Spread | \ No newline at end of file diff --git a/features/crown-input_crown-fire-method.feature b/features/crown-input_crown-fire-method.feature new file mode 100644 index 000000000..1612bfce2 --- /dev/null +++ b/features/crown-input_crown-fire-method.feature @@ -0,0 +1,25 @@ +@core +Feature: Surface & Crown Input - Crown Fire Method + + @core + Scenario Outline: Crown Fire Method is displayed + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Crown Fire Method | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + | Fire Behavior | Fire Behavior | Flame Length | + | Fire Behavior | Fire Behavior | Fireline Intensity | + | Size | Crown - Fire Size | Fire Area | + | Size | Crown - Fire Size | Fire Perimeter | + | Size | Crown - Fire Size | Length-to-Width Ratio | + | Size | Crown - Fire Size | Spread Distance | + | Fire Type | Transition to Crown Fire | Transition Ratio | + | Fire Type | Transition to Crown Fire | Critical Surface Flame Length | + | Fire Type | Transition to Crown Fire | Critical Surface Fireline Intensity | + | Fire Type | Active Crown Fire | Active Ratio | + | Fire Type | Active Crown Fire | Critical Crown Rate of Spread | \ No newline at end of file diff --git a/features/crown-input_foliar-moisture.feature b/features/crown-input_foliar-moisture.feature new file mode 100644 index 000000000..6b306dfe0 --- /dev/null +++ b/features/crown-input_foliar-moisture.feature @@ -0,0 +1,25 @@ +@core +Feature: Surface & Crown Input - Foliar Moisture + + @core + Scenario Outline: Foliar Moisture is displayed + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Foliar Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + | Fire Behavior | Fire Behavior | Flame Length | + | Fire Behavior | Fire Behavior | Fireline Intensity | + | Size | Crown - Fire Size | Fire Area | + | Size | Crown - Fire Size | Fire Perimeter | + | Size | Crown - Fire Size | Length-to-Width Ratio | + | Size | Crown - Fire Size | Spread Distance | + | Fire Type | Transition to Crown Fire | Transition Ratio | + | Fire Type | Transition to Crown Fire | Critical Surface Flame Length | + | Fire Type | Transition to Crown Fire | Critical Surface Fireline Intensity | + | Fire Type | Active Crown Fire | Active Ratio | + | Fire Type | Active Crown Fire | Critical Crown Rate of Spread | \ No newline at end of file diff --git a/features/crown-input_spot.feature b/features/crown-input_spot.feature new file mode 100644 index 000000000..e5f74ddc2 --- /dev/null +++ b/features/crown-input_spot.feature @@ -0,0 +1,15 @@ +@core +Feature: Surface & Crown Input - Spot + + @core + Scenario Outline: Spot is displayed + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Spot | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Spot | Maximum Spotting Distance | Active Crown Fire | + | Spot | Maximum Spotting Distance | Torching Trees | \ No newline at end of file diff --git a/features/crown-input_spot_downwind-canopy-fuel.feature b/features/crown-input_spot_downwind-canopy-fuel.feature new file mode 100644 index 000000000..88ffe68da --- /dev/null +++ b/features/crown-input_spot_downwind-canopy-fuel.feature @@ -0,0 +1,25 @@ +@core +Feature: Surface & Crown Input - Spot -> Downwind Canopy Fuel + + @core + Scenario: Downwind Canopy Fuel is displayed when Active Crown Fire is selected + Given I have started a new Surface & Crown Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Active Crown Fire | + When these output paths are NOT selected + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + | Fire Behavior | Fire Behavior | Flame Length | + | Fire Behavior | Fire Behavior | Fireline Intensity | + | Fire Type | Active Crown Fire | Active Ratio | + | Fire Type | Active Crown Fire | Critical Crown Rate of Spread | + | Fire Type | Transition to Crown Fire | Transition Ratio | + | Fire Type | Transition to Crown Fire | Critical Surface Flame Length | + | Fire Type | Transition to Crown Fire | Critical Surface Fireline Intensity | + | Size | Crown - Fire Size | Fire Area | + | Size | Crown - Fire Size | Fire Perimeter | + | Size | Crown - Fire Size | Spread Distance | + Then the following input paths are displayed: + | submodule | group | + | Spot | Downwind Canopy Fuel | \ No newline at end of file diff --git a/features/crown-input_spot_fire-behavior.feature b/features/crown-input_spot_fire-behavior.feature new file mode 100644 index 000000000..dedff30d6 --- /dev/null +++ b/features/crown-input_spot_fire-behavior.feature @@ -0,0 +1,17 @@ +@core +Feature: Surface & Crown Input - Spot -> Fire Behavior + + @core + Scenario: Fire Behavior is displayed when Active Crown Fire is selected + Given I have started a new Surface & Crown Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Active Crown Fire | + When these output paths are NOT selected + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + | Fire Behavior | Fire Behavior | Flame Length | + | Fire Behavior | Fire Behavior | Fireline Intensity | + Then the following input paths are displayed: + | submodule | group | + | Spot | Fire Behavior | \ No newline at end of file diff --git a/features/crown-input_spot_torching-trees.feature b/features/crown-input_spot_torching-trees.feature new file mode 100644 index 000000000..ec81be427 --- /dev/null +++ b/features/crown-input_spot_torching-trees.feature @@ -0,0 +1,12 @@ +@core +Feature: Surface & Crown Input - Spot -> Torching Trees + + @core + Scenario: Torching Trees is displayed when Torching Trees is selected + Given I have started a new Surface & Crown Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Torching Trees | + Then the following input paths are displayed: + | submodule | group | + | Spot | Torching Trees | \ No newline at end of file diff --git a/features/ignite_only.feature b/features/ignite_only.feature deleted file mode 100644 index ed28b160e..000000000 --- a/features/ignite_only.feature +++ /dev/null @@ -1,14 +0,0 @@ -Feature: Ignite Only Worksheets - - Scenario: Fire Behavior Output Selected - Given I have started a Surface Worksheet - When I select these outputs Submodule > Group > Output: - """ - - Fire Behavior > Ignition > Probability of Ignition - """ - Then the following input Submodule > Groups are displayed: - """ - - Fuel Moisture > Moisture Input Mode - - Weather > Air Temperature - - Weather > Fuel Shading From the Sun - """ diff --git a/features/mortality-input_scorch.feature b/features/mortality-input_scorch.feature new file mode 100644 index 000000000..2070d019c --- /dev/null +++ b/features/mortality-input_scorch.feature @@ -0,0 +1,200 @@ +@core +Feature: Surface & Mortality Input - Scorch + + @core + Scenario Outline: Scorch is displayed with these Mortality Tree Species + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When this input path is entered : : + Then the following input paths are displayed: + | submodule | + | Scorch | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + + @extended + Scenario Outline: Scorch is displayed with these Mortality Tree Species (Extended) + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When this input path is entered : : + Then the following input paths are displayed: + | submodule | + | Scorch | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Mortality Tree Species | Abies balsamea / ABBA (Balsam fir) | + | Tree Characteristics | Mortality Tree Species | Abies concolor / ABCO (White fir) | + | Tree Characteristics | Mortality Tree Species | Abies grandis / ABGR (Grand fir) | + | Tree Characteristics | Mortality Tree Species | Abies lasiocarpa / ABLA (Subalpine fir) | + | Tree Characteristics | Mortality Tree Species | Abies magnifica / ABMA (Red Fir) | + | Tree Characteristics | Mortality Tree Species | Abies procera / ABPR (Noble Fir) | + | Tree Characteristics | Mortality Tree Species | Acer barbatum / ACBA3 (Southern sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer macrophyllum / ACMA3 (Bigleaf maple) | + | Tree Characteristics | Mortality Tree Species | Acer negundo / ACNE2 (Boxelder) | + | Tree Characteristics | Mortality Tree Species | Acer nigrum / ACNI5 (Black maple) | + | Tree Characteristics | Mortality Tree Species | Acer pensylvanicum / ACPE (Striped maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharinum / ACSA2 (Silver maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharum / ACSA3 (Sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer spicatum / ACSP2 (Mountain maple) | + | Tree Characteristics | Mortality Tree Species | Aesculus flava / AEFL (Yellow buckeye) | + | Tree Characteristics | Mortality Tree Species | Aesculus glabra / AEGL (Ohio buckeye) | + | Tree Characteristics | Mortality Tree Species | Ailanthus altissima / AIAL (Ailanthus) | + | Tree Characteristics | Mortality Tree Species | Alnus rhombifolia / ALRH2 (White alder) | + | Tree Characteristics | Mortality Tree Species | Alnus rubra / ALRU2 (Red alder) | + | Tree Characteristics | Mortality Tree Species | Amelanchier arborea / AMAR3 (Common serviceberry) | + | Tree Characteristics | Mortality Tree Species | Arbutus menziesii / ARME (Pacific madrone) | + | Tree Characteristics | Mortality Tree Species | Betula alleghaniensis / BEAL2 (Yellow birch) | + | Tree Characteristics | Mortality Tree Species | Betula lenta / BELE (Sweet birch) | + | Tree Characteristics | Mortality Tree Species | Betula nigra / BENI (River Birch) | + | Tree Characteristics | Mortality Tree Species | Betula occidentalis / BEOC2 (Water birch) | + | Tree Characteristics | Mortality Tree Species | Betula papyrifera / BEPA (Paper birch) | + | Tree Characteristics | Mortality Tree Species | Betula species / BETSPP (Birches) | + | Tree Characteristics | Mortality Tree Species | Carya alba / CAAL27 (Mockernut hickory) | + | Tree Characteristics | Mortality Tree Species | Carpinus caroliniana / CACA18 (American hornbeam) | + | Tree Characteristics | Mortality Tree Species | Carya cordiformis / CACOL3 (Bitternut hickory) | + | Tree Characteristics | Mortality Tree Species | Castanea dentata / CADE12 (American chestnut) | + | Tree Characteristics | Mortality Tree Species | Calocedrus decurrens / CADE27 (Incense - cedar) | + | Tree Characteristics | Mortality Tree Species | Carya glabra / CAGL8 (Pignut hickory) | + | Tree Characteristics | Mortality Tree Species | Carya illinoinensis / CAIL2 (Pecan) | + | Tree Characteristics | Mortality Tree Species | Carya laciniosa / CALA21 (Shellbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya ovata / CAOV2 (Shagbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya species / CARSPP (Hickories) | + | Tree Characteristics | Mortality Tree Species | Carya texana / CATE9 (Black hickory) | + | Tree Characteristics | Mortality Tree Species | Cercis canadensis / CECA4 (Eastern redbud) | + | Tree Characteristics | Mortality Tree Species | Celtis laevigata / CELA (Sugarberry) | + | Tree Characteristics | Mortality Tree Species | Celtis occidentalis / CEOC (Common hackberry) | + | Tree Characteristics | Mortality Tree Species | Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis lawsoniana / CHLA (PortOrford - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis nootkatensis / CHNO (Alaska - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar) | + | Tree Characteristics | Mortality Tree Species | Cornus nuttallii / CONU4 (Pacific dogwood) | + | Tree Characteristics | Mortality Tree Species | Crataegus species / CRASPP (Hawthorns) | + | Tree Characteristics | Mortality Tree Species | Diospyros virginiana / DIVI5 (Persimmon) | + | Tree Characteristics | Mortality Tree Species | Fagus grandifolia / FAGR (American beech) | + | Tree Characteristics | Mortality Tree Species | Fraxinus americana / FRAM2 (White ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus species / FRASPP (Ashes) | + | Tree Characteristics | Mortality Tree Species | Fraxinus nigra / FRNI (Black ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus pennsylvanica / FRPE (Green ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus profunda / FRPR (Pumpkin ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus quadrangulata / FRQU (Blue ash) | + | Tree Characteristics | Mortality Tree Species | Gleditsia triacanthos / GLTR (Honeylocust) | + | Tree Characteristics | Mortality Tree Species | Gordonia lasianthus / GOLA (Loblolly bay) | + | Tree Characteristics | Mortality Tree Species | Gymnocladus dioicus / GYDI (Kentucky coffeetree) | + | Tree Characteristics | Mortality Tree Species | Halesia species / HALSPP (Silverbells) | + | Tree Characteristics | Mortality Tree Species | Ilex opaca / ILOP (American holly) | + | Tree Characteristics | Mortality Tree Species | Juglans cinerea / JUCI (Butternut) | + | Tree Characteristics | Mortality Tree Species | Juglans nigra / JUNI (Black walnut) | + | Tree Characteristics | Mortality Tree Species | Juniperus occidentalis / JUOC (Western juniper) | + | Tree Characteristics | Mortality Tree Species | Juniperus virginiana / JUVI (Eastern redcedar) | + | Tree Characteristics | Mortality Tree Species | Larix laricina / LALA (Tamarack) | + | Tree Characteristics | Mortality Tree Species | Larix lyallii / LALY (Subalpine Larch) | + | Tree Characteristics | Mortality Tree Species | Larix occidentalis / LAOC (Western Larch) | + | Tree Characteristics | Mortality Tree Species | Lithocarpus densiflorus / LIDE3 (Tanoak) | + | Tree Characteristics | Mortality Tree Species | Liquidambar styraciflua / LIST2 (Sweetgum) | + | Tree Characteristics | Mortality Tree Species | Liriodendron tulipifera / LITU (Tuliptree) | + | Tree Characteristics | Mortality Tree Species | Magnolia acuminata / MAAC (Cucumber - tree) | + | Tree Characteristics | Mortality Tree Species | Magnolia grandiflora / MAGR4 (Southern magnolia) | + | Tree Characteristics | Mortality Tree Species | Magnolia species / MAGSPP (Magnolias) | + | Tree Characteristics | Mortality Tree Species | Prunus species / MALPRU (cherry and plum species) | + | Tree Characteristics | Mortality Tree Species | Malus species / MALSPP (Apples) | + | Tree Characteristics | Mortality Tree Species | Magnolia macrophylla / MAMA2 (Bigleaf magnolia) | + | Tree Characteristics | Mortality Tree Species | Maclura pomifera / MAPO (Osage - orange) | + | Tree Characteristics | Mortality Tree Species | Magnolia virginiana / MAVI2 (Sweetbay) | + | Tree Characteristics | Mortality Tree Species | Morus alba / MOAL (White mulberry) | + | Tree Characteristics | Mortality Tree Species | Morus species / MORSPP (Mulberries) | + | Tree Characteristics | Mortality Tree Species | Morus rubra / MORU2 (Red mulberry) | + | Tree Characteristics | Mortality Tree Species | Nyssa aquatica / NYAQ2 (Water tupelo) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Nyssa ogeche / NYOG (Ogeechee tupelo) | + | Tree Characteristics | Mortality Tree Species | Ostrya virginiana / OSVI (Hophornbeam) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | + | Tree Characteristics | Mortality Tree Species | Paulownia tomentosa / PATO2 (Princesstree) | + | Tree Characteristics | Mortality Tree Species | Persea borbonia / PEBO (Redbay) | + | Tree Characteristics | Mortality Tree Species | Picea abies / PIAB (Norway spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus albicaulis / PIAL (Whitebark pine) | + | Tree Characteristics | Mortality Tree Species | Pinus attenuata / PIAT (Knobcone pine) | + | Tree Characteristics | Mortality Tree Species | Pinus banksiana / PIBA2 (Jack pine) | + | Tree Characteristics | Mortality Tree Species | Pinus clausa / PICL (Sand pine) | + | Tree Characteristics | Mortality Tree Species | Pinus contorta / PICO (Lodgepole pine) | + | Tree Characteristics | Mortality Tree Species | Pinus echinata / PIEC2 (Shortleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus elliottii / PIEL (Slash pine) | + | Tree Characteristics | Mortality Tree Species | Picea engelmannii / PIEN (Engelmann spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus flexilis / PIFL2 (Limber pine) | + | Tree Characteristics | Mortality Tree Species | Picea glauca / PIGL (White spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus glabra / PIGL2 (Spruce pine) | + | Tree Characteristics | Mortality Tree Species | Pinus jeffreyi / PIJE (Jeffrey pine) | + | Tree Characteristics | Mortality Tree Species | Pinus lambertiana / PILA (Sugar pine) | + | Tree Characteristics | Mortality Tree Species | Picea mariana / PIMA (Black spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus monticola / PIMO3 (Western white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus palustris / PIPA2 (Longleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus ponderosa / PIPO (Ponderosa pine) | + | Tree Characteristics | Mortality Tree Species | Picea pungens / PIPU (Blue spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus pungens / PIPU5 (Table mountain pine) | + | Tree Characteristics | Mortality Tree Species | Pinus resinosa / PIRE (Red pine) | + | Tree Characteristics | Mortality Tree Species | Pinus rigida / PIRI (Pitch pine) | + | Tree Characteristics | Mortality Tree Species | Picea rubens / PIRU (Red spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus sabiniana / PISA2 (Gray pine) | + | Tree Characteristics | Mortality Tree Species | Pinus serotina / PISE (Pond pine) | + | Tree Characteristics | Mortality Tree Species | Picea sitchensis / PISI (Sitka spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus strobus / PIST (Eastern white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus sylvestris / PISY (Scots pine) | + | Tree Characteristics | Mortality Tree Species | Pinus taeda / PITA (Loblolly pine) | + | Tree Characteristics | Mortality Tree Species | Pinus virginiana / PIVI2 (Virginia pine) | + | Tree Characteristics | Mortality Tree Species | Platanus occidentalis / PLOC (American sycamore) | + | Tree Characteristics | Mortality Tree Species | Populus balsamifera / POBA2 (Balsam poplar) | + | Tree Characteristics | Mortality Tree Species | Populus grandidentata / POGR4 (Bigtooth aspen) | + | Tree Characteristics | Mortality Tree Species | Populus heterophylla / POHE4 (Swamp cottonwood) | + | Tree Characteristics | Mortality Tree Species | Populus tremuloides / POTR12 (Quaking aspen) | + | Tree Characteristics | Mortality Tree Species | Prunus americana / PRAM (American plum) | + | Tree Characteristics | Mortality Tree Species | Prunus emarginata / PREM (Bitter cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus pensylvanica / PRPE2 (Pin cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus serotina / PRSE2 (Black cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus virginiana / PRVI (Chokecherry) | + | Tree Characteristics | Mortality Tree Species | Pseudotsuga menziesii / PSME (Douglas - fir) | + | Tree Characteristics | Mortality Tree Species | Quercus agrifolia / QUAG (California live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus chrysolepis / QUCH2 (Canyon live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus douglasii / QUDU (Blue oak) | + | Tree Characteristics | Mortality Tree Species | Quercus ellipsoidalis / QUEL (Northern pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus species / QUESPP (Oaks) | + | Tree Characteristics | Mortality Tree Species | Quercus falcata / QUFA (Southern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus imbricaria / QUIM (Shingle oak) | + | Tree Characteristics | Mortality Tree Species | Quercus incana / QUIN (Bluejack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laevis / QULA2 (Turkey oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laurifolia / QULA3 (Laurel oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lobata / QULO (Valley oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lyrata / QULY (Overcup oak) | + | Tree Characteristics | Mortality Tree Species | Quercus macrocarpa / QUMA2 (Bur oak) | + | Tree Characteristics | Mortality Tree Species | Quercus michauxii / QUMI (Swamp chestnut oak) | + | Tree Characteristics | Mortality Tree Species | Quercus muehlenbergii / QUMU (Chinkapin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus nigra / QUNI (Water oak) | + | Tree Characteristics | Mortality Tree Species | Quercus palustris / QUPA2 (Pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus phellos / QUPH (Willow oak) | + | Tree Characteristics | Mortality Tree Species | Quercus rubra / QURU (Northern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus shumardii / QUSH (Shumard oak) | + | Tree Characteristics | Mortality Tree Species | Quercus stellata / QUST (Post oak) | + | Tree Characteristics | Mortality Tree Species | Quercus texana / QUTE (Texas red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus virginiana / QUVI (Live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus wislizeni / QUWI2 (Interior live oak) | + | Tree Characteristics | Mortality Tree Species | Robinia pseudoacacia / ROPS (Black locust) | + | Tree Characteristics | Mortality Tree Species | Salix bebbiana / SABE2 (Bebb willow) | + | Tree Characteristics | Mortality Tree Species | Salix species / SALSPP (Willows) | + | Tree Characteristics | Mortality Tree Species | Salix nigra / SANI (Black willow) | + | Tree Characteristics | Mortality Tree Species | Sorbus americana / SOAM3 (American mountain - ash) | + | Tree Characteristics | Mortality Tree Species | Taxodium ascendens / TAAS (Pond cypress) | + | Tree Characteristics | Mortality Tree Species | Taxus brevifolia / TABR2 (Pacific yew) | + | Tree Characteristics | Mortality Tree Species | Taxodium distichum / TADI2 (Bald cypress) | + | Tree Characteristics | Mortality Tree Species | Thuja occidentalis / THOC2 (arborvitae) | + | Tree Characteristics | Mortality Tree Species | Thuja plicata / THPL (Western redcedar) | + | Tree Characteristics | Mortality Tree Species | Tilia americana / TIAM (American basswood) | + | Tree Characteristics | Mortality Tree Species | Tsuga canadensis / TSCA (Eastern hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga heterophylla / TSHE (Western hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga mertensiana / TSME (Mountain hemlock) | + | Tree Characteristics | Mortality Tree Species | Ulmus alata / ULAL (Winged elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus americana / ULAM (American elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus species / ULMSPP (Elms) | + | Tree Characteristics | Mortality Tree Species | Ulmus pumila / ULPU (Siberian elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus rubra / ULRU (Slippery elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus thomasii / ULTH (Rock elm) | + | Tree Characteristics | Mortality Tree Species | Umbellularia californica / UMCA (California - laurel) | \ No newline at end of file diff --git a/features/mortality-input_tree-characteristics_canopy-height.feature b/features/mortality-input_tree-characteristics_canopy-height.feature new file mode 100644 index 000000000..916e88d22 --- /dev/null +++ b/features/mortality-input_tree-characteristics_canopy-height.feature @@ -0,0 +1,200 @@ +@core +Feature: Surface & Mortality Input - Tree Characteristics -> Canopy Height + + @core + Scenario Outline: Canopy Height is displayed with these Mortality Tree Species + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When this input path is entered : : + Then the following input paths are displayed: + | submodule | group | + | Tree Characteristics | Canopy Height | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + + @extended + Scenario Outline: Canopy Height is displayed with these Mortality Tree Species (Extended) + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When this input path is entered : : + Then the following input paths are displayed: + | submodule | group | + | Tree Characteristics | Canopy Height | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Mortality Tree Species | Abies balsamea / ABBA (Balsam fir) | + | Tree Characteristics | Mortality Tree Species | Abies concolor / ABCO (White fir) | + | Tree Characteristics | Mortality Tree Species | Abies grandis / ABGR (Grand fir) | + | Tree Characteristics | Mortality Tree Species | Abies lasiocarpa / ABLA (Subalpine fir) | + | Tree Characteristics | Mortality Tree Species | Abies magnifica / ABMA (Red Fir) | + | Tree Characteristics | Mortality Tree Species | Abies procera / ABPR (Noble Fir) | + | Tree Characteristics | Mortality Tree Species | Acer barbatum / ACBA3 (Southern sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer macrophyllum / ACMA3 (Bigleaf maple) | + | Tree Characteristics | Mortality Tree Species | Acer negundo / ACNE2 (Boxelder) | + | Tree Characteristics | Mortality Tree Species | Acer nigrum / ACNI5 (Black maple) | + | Tree Characteristics | Mortality Tree Species | Acer pensylvanicum / ACPE (Striped maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharinum / ACSA2 (Silver maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharum / ACSA3 (Sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer spicatum / ACSP2 (Mountain maple) | + | Tree Characteristics | Mortality Tree Species | Aesculus flava / AEFL (Yellow buckeye) | + | Tree Characteristics | Mortality Tree Species | Aesculus glabra / AEGL (Ohio buckeye) | + | Tree Characteristics | Mortality Tree Species | Ailanthus altissima / AIAL (Ailanthus) | + | Tree Characteristics | Mortality Tree Species | Alnus rhombifolia / ALRH2 (White alder) | + | Tree Characteristics | Mortality Tree Species | Alnus rubra / ALRU2 (Red alder) | + | Tree Characteristics | Mortality Tree Species | Amelanchier arborea / AMAR3 (Common serviceberry) | + | Tree Characteristics | Mortality Tree Species | Arbutus menziesii / ARME (Pacific madrone) | + | Tree Characteristics | Mortality Tree Species | Betula alleghaniensis / BEAL2 (Yellow birch) | + | Tree Characteristics | Mortality Tree Species | Betula lenta / BELE (Sweet birch) | + | Tree Characteristics | Mortality Tree Species | Betula nigra / BENI (River Birch) | + | Tree Characteristics | Mortality Tree Species | Betula occidentalis / BEOC2 (Water birch) | + | Tree Characteristics | Mortality Tree Species | Betula papyrifera / BEPA (Paper birch) | + | Tree Characteristics | Mortality Tree Species | Betula species / BETSPP (Birches) | + | Tree Characteristics | Mortality Tree Species | Carya alba / CAAL27 (Mockernut hickory) | + | Tree Characteristics | Mortality Tree Species | Carpinus caroliniana / CACA18 (American hornbeam) | + | Tree Characteristics | Mortality Tree Species | Carya cordiformis / CACOL3 (Bitternut hickory) | + | Tree Characteristics | Mortality Tree Species | Castanea dentata / CADE12 (American chestnut) | + | Tree Characteristics | Mortality Tree Species | Calocedrus decurrens / CADE27 (Incense - cedar) | + | Tree Characteristics | Mortality Tree Species | Carya glabra / CAGL8 (Pignut hickory) | + | Tree Characteristics | Mortality Tree Species | Carya illinoinensis / CAIL2 (Pecan) | + | Tree Characteristics | Mortality Tree Species | Carya laciniosa / CALA21 (Shellbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya ovata / CAOV2 (Shagbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya species / CARSPP (Hickories) | + | Tree Characteristics | Mortality Tree Species | Carya texana / CATE9 (Black hickory) | + | Tree Characteristics | Mortality Tree Species | Cercis canadensis / CECA4 (Eastern redbud) | + | Tree Characteristics | Mortality Tree Species | Celtis laevigata / CELA (Sugarberry) | + | Tree Characteristics | Mortality Tree Species | Celtis occidentalis / CEOC (Common hackberry) | + | Tree Characteristics | Mortality Tree Species | Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis lawsoniana / CHLA (PortOrford - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis nootkatensis / CHNO (Alaska - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar) | + | Tree Characteristics | Mortality Tree Species | Cornus nuttallii / CONU4 (Pacific dogwood) | + | Tree Characteristics | Mortality Tree Species | Crataegus species / CRASPP (Hawthorns) | + | Tree Characteristics | Mortality Tree Species | Diospyros virginiana / DIVI5 (Persimmon) | + | Tree Characteristics | Mortality Tree Species | Fagus grandifolia / FAGR (American beech) | + | Tree Characteristics | Mortality Tree Species | Fraxinus americana / FRAM2 (White ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus species / FRASPP (Ashes) | + | Tree Characteristics | Mortality Tree Species | Fraxinus nigra / FRNI (Black ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus pennsylvanica / FRPE (Green ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus profunda / FRPR (Pumpkin ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus quadrangulata / FRQU (Blue ash) | + | Tree Characteristics | Mortality Tree Species | Gleditsia triacanthos / GLTR (Honeylocust) | + | Tree Characteristics | Mortality Tree Species | Gordonia lasianthus / GOLA (Loblolly bay) | + | Tree Characteristics | Mortality Tree Species | Gymnocladus dioicus / GYDI (Kentucky coffeetree) | + | Tree Characteristics | Mortality Tree Species | Halesia species / HALSPP (Silverbells) | + | Tree Characteristics | Mortality Tree Species | Ilex opaca / ILOP (American holly) | + | Tree Characteristics | Mortality Tree Species | Juglans cinerea / JUCI (Butternut) | + | Tree Characteristics | Mortality Tree Species | Juglans nigra / JUNI (Black walnut) | + | Tree Characteristics | Mortality Tree Species | Juniperus occidentalis / JUOC (Western juniper) | + | Tree Characteristics | Mortality Tree Species | Juniperus virginiana / JUVI (Eastern redcedar) | + | Tree Characteristics | Mortality Tree Species | Larix laricina / LALA (Tamarack) | + | Tree Characteristics | Mortality Tree Species | Larix lyallii / LALY (Subalpine Larch) | + | Tree Characteristics | Mortality Tree Species | Larix occidentalis / LAOC (Western Larch) | + | Tree Characteristics | Mortality Tree Species | Lithocarpus densiflorus / LIDE3 (Tanoak) | + | Tree Characteristics | Mortality Tree Species | Liquidambar styraciflua / LIST2 (Sweetgum) | + | Tree Characteristics | Mortality Tree Species | Liriodendron tulipifera / LITU (Tuliptree) | + | Tree Characteristics | Mortality Tree Species | Magnolia acuminata / MAAC (Cucumber - tree) | + | Tree Characteristics | Mortality Tree Species | Magnolia grandiflora / MAGR4 (Southern magnolia) | + | Tree Characteristics | Mortality Tree Species | Magnolia species / MAGSPP (Magnolias) | + | Tree Characteristics | Mortality Tree Species | Prunus species / MALPRU (cherry and plum species) | + | Tree Characteristics | Mortality Tree Species | Malus species / MALSPP (Apples) | + | Tree Characteristics | Mortality Tree Species | Magnolia macrophylla / MAMA2 (Bigleaf magnolia) | + | Tree Characteristics | Mortality Tree Species | Maclura pomifera / MAPO (Osage - orange) | + | Tree Characteristics | Mortality Tree Species | Magnolia virginiana / MAVI2 (Sweetbay) | + | Tree Characteristics | Mortality Tree Species | Morus alba / MOAL (White mulberry) | + | Tree Characteristics | Mortality Tree Species | Morus species / MORSPP (Mulberries) | + | Tree Characteristics | Mortality Tree Species | Morus rubra / MORU2 (Red mulberry) | + | Tree Characteristics | Mortality Tree Species | Nyssa aquatica / NYAQ2 (Water tupelo) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Nyssa ogeche / NYOG (Ogeechee tupelo) | + | Tree Characteristics | Mortality Tree Species | Ostrya virginiana / OSVI (Hophornbeam) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | + | Tree Characteristics | Mortality Tree Species | Paulownia tomentosa / PATO2 (Princesstree) | + | Tree Characteristics | Mortality Tree Species | Persea borbonia / PEBO (Redbay) | + | Tree Characteristics | Mortality Tree Species | Picea abies / PIAB (Norway spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus albicaulis / PIAL (Whitebark pine) | + | Tree Characteristics | Mortality Tree Species | Pinus attenuata / PIAT (Knobcone pine) | + | Tree Characteristics | Mortality Tree Species | Pinus banksiana / PIBA2 (Jack pine) | + | Tree Characteristics | Mortality Tree Species | Pinus clausa / PICL (Sand pine) | + | Tree Characteristics | Mortality Tree Species | Pinus contorta / PICO (Lodgepole pine) | + | Tree Characteristics | Mortality Tree Species | Pinus echinata / PIEC2 (Shortleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus elliottii / PIEL (Slash pine) | + | Tree Characteristics | Mortality Tree Species | Picea engelmannii / PIEN (Engelmann spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus flexilis / PIFL2 (Limber pine) | + | Tree Characteristics | Mortality Tree Species | Picea glauca / PIGL (White spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus glabra / PIGL2 (Spruce pine) | + | Tree Characteristics | Mortality Tree Species | Pinus jeffreyi / PIJE (Jeffrey pine) | + | Tree Characteristics | Mortality Tree Species | Pinus lambertiana / PILA (Sugar pine) | + | Tree Characteristics | Mortality Tree Species | Picea mariana / PIMA (Black spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus monticola / PIMO3 (Western white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus palustris / PIPA2 (Longleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus ponderosa / PIPO (Ponderosa pine) | + | Tree Characteristics | Mortality Tree Species | Picea pungens / PIPU (Blue spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus pungens / PIPU5 (Table mountain pine) | + | Tree Characteristics | Mortality Tree Species | Pinus resinosa / PIRE (Red pine) | + | Tree Characteristics | Mortality Tree Species | Pinus rigida / PIRI (Pitch pine) | + | Tree Characteristics | Mortality Tree Species | Picea rubens / PIRU (Red spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus sabiniana / PISA2 (Gray pine) | + | Tree Characteristics | Mortality Tree Species | Pinus serotina / PISE (Pond pine) | + | Tree Characteristics | Mortality Tree Species | Picea sitchensis / PISI (Sitka spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus strobus / PIST (Eastern white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus sylvestris / PISY (Scots pine) | + | Tree Characteristics | Mortality Tree Species | Pinus taeda / PITA (Loblolly pine) | + | Tree Characteristics | Mortality Tree Species | Pinus virginiana / PIVI2 (Virginia pine) | + | Tree Characteristics | Mortality Tree Species | Platanus occidentalis / PLOC (American sycamore) | + | Tree Characteristics | Mortality Tree Species | Populus balsamifera / POBA2 (Balsam poplar) | + | Tree Characteristics | Mortality Tree Species | Populus grandidentata / POGR4 (Bigtooth aspen) | + | Tree Characteristics | Mortality Tree Species | Populus heterophylla / POHE4 (Swamp cottonwood) | + | Tree Characteristics | Mortality Tree Species | Populus tremuloides / POTR12 (Quaking aspen) | + | Tree Characteristics | Mortality Tree Species | Prunus americana / PRAM (American plum) | + | Tree Characteristics | Mortality Tree Species | Prunus emarginata / PREM (Bitter cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus pensylvanica / PRPE2 (Pin cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus serotina / PRSE2 (Black cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus virginiana / PRVI (Chokecherry) | + | Tree Characteristics | Mortality Tree Species | Pseudotsuga menziesii / PSME (Douglas - fir) | + | Tree Characteristics | Mortality Tree Species | Quercus agrifolia / QUAG (California live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus chrysolepis / QUCH2 (Canyon live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus douglasii / QUDU (Blue oak) | + | Tree Characteristics | Mortality Tree Species | Quercus ellipsoidalis / QUEL (Northern pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus species / QUESPP (Oaks) | + | Tree Characteristics | Mortality Tree Species | Quercus falcata / QUFA (Southern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus imbricaria / QUIM (Shingle oak) | + | Tree Characteristics | Mortality Tree Species | Quercus incana / QUIN (Bluejack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laevis / QULA2 (Turkey oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laurifolia / QULA3 (Laurel oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lobata / QULO (Valley oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lyrata / QULY (Overcup oak) | + | Tree Characteristics | Mortality Tree Species | Quercus macrocarpa / QUMA2 (Bur oak) | + | Tree Characteristics | Mortality Tree Species | Quercus michauxii / QUMI (Swamp chestnut oak) | + | Tree Characteristics | Mortality Tree Species | Quercus muehlenbergii / QUMU (Chinkapin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus nigra / QUNI (Water oak) | + | Tree Characteristics | Mortality Tree Species | Quercus palustris / QUPA2 (Pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus phellos / QUPH (Willow oak) | + | Tree Characteristics | Mortality Tree Species | Quercus rubra / QURU (Northern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus shumardii / QUSH (Shumard oak) | + | Tree Characteristics | Mortality Tree Species | Quercus stellata / QUST (Post oak) | + | Tree Characteristics | Mortality Tree Species | Quercus texana / QUTE (Texas red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus virginiana / QUVI (Live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus wislizeni / QUWI2 (Interior live oak) | + | Tree Characteristics | Mortality Tree Species | Robinia pseudoacacia / ROPS (Black locust) | + | Tree Characteristics | Mortality Tree Species | Salix bebbiana / SABE2 (Bebb willow) | + | Tree Characteristics | Mortality Tree Species | Salix species / SALSPP (Willows) | + | Tree Characteristics | Mortality Tree Species | Salix nigra / SANI (Black willow) | + | Tree Characteristics | Mortality Tree Species | Sorbus americana / SOAM3 (American mountain - ash) | + | Tree Characteristics | Mortality Tree Species | Taxodium ascendens / TAAS (Pond cypress) | + | Tree Characteristics | Mortality Tree Species | Taxus brevifolia / TABR2 (Pacific yew) | + | Tree Characteristics | Mortality Tree Species | Taxodium distichum / TADI2 (Bald cypress) | + | Tree Characteristics | Mortality Tree Species | Thuja occidentalis / THOC2 (arborvitae) | + | Tree Characteristics | Mortality Tree Species | Thuja plicata / THPL (Western redcedar) | + | Tree Characteristics | Mortality Tree Species | Tilia americana / TIAM (American basswood) | + | Tree Characteristics | Mortality Tree Species | Tsuga canadensis / TSCA (Eastern hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga heterophylla / TSHE (Western hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga mertensiana / TSME (Mountain hemlock) | + | Tree Characteristics | Mortality Tree Species | Ulmus alata / ULAL (Winged elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus americana / ULAM (American elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus species / ULMSPP (Elms) | + | Tree Characteristics | Mortality Tree Species | Ulmus pumila / ULPU (Siberian elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus rubra / ULRU (Slippery elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus thomasii / ULTH (Rock elm) | + | Tree Characteristics | Mortality Tree Species | Umbellularia californica / UMCA (California - laurel) | \ No newline at end of file diff --git a/features/mortality-input_tree-characteristics_crown-ratio.feature b/features/mortality-input_tree-characteristics_crown-ratio.feature new file mode 100644 index 000000000..3a6c78382 --- /dev/null +++ b/features/mortality-input_tree-characteristics_crown-ratio.feature @@ -0,0 +1,200 @@ +@core +Feature: Surface & Mortality Input - Tree Characteristics -> Crown Ratio + + @core + Scenario Outline: Crown Ratio is displayed with these Mortality Tree Species + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When this input path is entered : : + Then the following input paths are displayed: + | submodule | group | + | Tree Characteristics | Crown Ratio | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + + @extended + Scenario Outline: Crown Ratio is displayed with these Mortality Tree Species (Extended) + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When this input path is entered : : + Then the following input paths are displayed: + | submodule | group | + | Tree Characteristics | Crown Ratio | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Mortality Tree Species | Abies balsamea / ABBA (Balsam fir) | + | Tree Characteristics | Mortality Tree Species | Abies concolor / ABCO (White fir) | + | Tree Characteristics | Mortality Tree Species | Abies grandis / ABGR (Grand fir) | + | Tree Characteristics | Mortality Tree Species | Abies lasiocarpa / ABLA (Subalpine fir) | + | Tree Characteristics | Mortality Tree Species | Abies magnifica / ABMA (Red Fir) | + | Tree Characteristics | Mortality Tree Species | Abies procera / ABPR (Noble Fir) | + | Tree Characteristics | Mortality Tree Species | Acer barbatum / ACBA3 (Southern sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer macrophyllum / ACMA3 (Bigleaf maple) | + | Tree Characteristics | Mortality Tree Species | Acer negundo / ACNE2 (Boxelder) | + | Tree Characteristics | Mortality Tree Species | Acer nigrum / ACNI5 (Black maple) | + | Tree Characteristics | Mortality Tree Species | Acer pensylvanicum / ACPE (Striped maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharinum / ACSA2 (Silver maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharum / ACSA3 (Sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer spicatum / ACSP2 (Mountain maple) | + | Tree Characteristics | Mortality Tree Species | Aesculus flava / AEFL (Yellow buckeye) | + | Tree Characteristics | Mortality Tree Species | Aesculus glabra / AEGL (Ohio buckeye) | + | Tree Characteristics | Mortality Tree Species | Ailanthus altissima / AIAL (Ailanthus) | + | Tree Characteristics | Mortality Tree Species | Alnus rhombifolia / ALRH2 (White alder) | + | Tree Characteristics | Mortality Tree Species | Alnus rubra / ALRU2 (Red alder) | + | Tree Characteristics | Mortality Tree Species | Amelanchier arborea / AMAR3 (Common serviceberry) | + | Tree Characteristics | Mortality Tree Species | Arbutus menziesii / ARME (Pacific madrone) | + | Tree Characteristics | Mortality Tree Species | Betula alleghaniensis / BEAL2 (Yellow birch) | + | Tree Characteristics | Mortality Tree Species | Betula lenta / BELE (Sweet birch) | + | Tree Characteristics | Mortality Tree Species | Betula nigra / BENI (River Birch) | + | Tree Characteristics | Mortality Tree Species | Betula occidentalis / BEOC2 (Water birch) | + | Tree Characteristics | Mortality Tree Species | Betula papyrifera / BEPA (Paper birch) | + | Tree Characteristics | Mortality Tree Species | Betula species / BETSPP (Birches) | + | Tree Characteristics | Mortality Tree Species | Carya alba / CAAL27 (Mockernut hickory) | + | Tree Characteristics | Mortality Tree Species | Carpinus caroliniana / CACA18 (American hornbeam) | + | Tree Characteristics | Mortality Tree Species | Carya cordiformis / CACOL3 (Bitternut hickory) | + | Tree Characteristics | Mortality Tree Species | Castanea dentata / CADE12 (American chestnut) | + | Tree Characteristics | Mortality Tree Species | Calocedrus decurrens / CADE27 (Incense - cedar) | + | Tree Characteristics | Mortality Tree Species | Carya glabra / CAGL8 (Pignut hickory) | + | Tree Characteristics | Mortality Tree Species | Carya illinoinensis / CAIL2 (Pecan) | + | Tree Characteristics | Mortality Tree Species | Carya laciniosa / CALA21 (Shellbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya ovata / CAOV2 (Shagbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya species / CARSPP (Hickories) | + | Tree Characteristics | Mortality Tree Species | Carya texana / CATE9 (Black hickory) | + | Tree Characteristics | Mortality Tree Species | Cercis canadensis / CECA4 (Eastern redbud) | + | Tree Characteristics | Mortality Tree Species | Celtis laevigata / CELA (Sugarberry) | + | Tree Characteristics | Mortality Tree Species | Celtis occidentalis / CEOC (Common hackberry) | + | Tree Characteristics | Mortality Tree Species | Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis lawsoniana / CHLA (PortOrford - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis nootkatensis / CHNO (Alaska - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar) | + | Tree Characteristics | Mortality Tree Species | Cornus nuttallii / CONU4 (Pacific dogwood) | + | Tree Characteristics | Mortality Tree Species | Crataegus species / CRASPP (Hawthorns) | + | Tree Characteristics | Mortality Tree Species | Diospyros virginiana / DIVI5 (Persimmon) | + | Tree Characteristics | Mortality Tree Species | Fagus grandifolia / FAGR (American beech) | + | Tree Characteristics | Mortality Tree Species | Fraxinus americana / FRAM2 (White ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus species / FRASPP (Ashes) | + | Tree Characteristics | Mortality Tree Species | Fraxinus nigra / FRNI (Black ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus pennsylvanica / FRPE (Green ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus profunda / FRPR (Pumpkin ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus quadrangulata / FRQU (Blue ash) | + | Tree Characteristics | Mortality Tree Species | Gleditsia triacanthos / GLTR (Honeylocust) | + | Tree Characteristics | Mortality Tree Species | Gordonia lasianthus / GOLA (Loblolly bay) | + | Tree Characteristics | Mortality Tree Species | Gymnocladus dioicus / GYDI (Kentucky coffeetree) | + | Tree Characteristics | Mortality Tree Species | Halesia species / HALSPP (Silverbells) | + | Tree Characteristics | Mortality Tree Species | Ilex opaca / ILOP (American holly) | + | Tree Characteristics | Mortality Tree Species | Juglans cinerea / JUCI (Butternut) | + | Tree Characteristics | Mortality Tree Species | Juglans nigra / JUNI (Black walnut) | + | Tree Characteristics | Mortality Tree Species | Juniperus occidentalis / JUOC (Western juniper) | + | Tree Characteristics | Mortality Tree Species | Juniperus virginiana / JUVI (Eastern redcedar) | + | Tree Characteristics | Mortality Tree Species | Larix laricina / LALA (Tamarack) | + | Tree Characteristics | Mortality Tree Species | Larix lyallii / LALY (Subalpine Larch) | + | Tree Characteristics | Mortality Tree Species | Larix occidentalis / LAOC (Western Larch) | + | Tree Characteristics | Mortality Tree Species | Lithocarpus densiflorus / LIDE3 (Tanoak) | + | Tree Characteristics | Mortality Tree Species | Liquidambar styraciflua / LIST2 (Sweetgum) | + | Tree Characteristics | Mortality Tree Species | Liriodendron tulipifera / LITU (Tuliptree) | + | Tree Characteristics | Mortality Tree Species | Magnolia acuminata / MAAC (Cucumber - tree) | + | Tree Characteristics | Mortality Tree Species | Magnolia grandiflora / MAGR4 (Southern magnolia) | + | Tree Characteristics | Mortality Tree Species | Magnolia species / MAGSPP (Magnolias) | + | Tree Characteristics | Mortality Tree Species | Prunus species / MALPRU (cherry and plum species) | + | Tree Characteristics | Mortality Tree Species | Malus species / MALSPP (Apples) | + | Tree Characteristics | Mortality Tree Species | Magnolia macrophylla / MAMA2 (Bigleaf magnolia) | + | Tree Characteristics | Mortality Tree Species | Maclura pomifera / MAPO (Osage - orange) | + | Tree Characteristics | Mortality Tree Species | Magnolia virginiana / MAVI2 (Sweetbay) | + | Tree Characteristics | Mortality Tree Species | Morus alba / MOAL (White mulberry) | + | Tree Characteristics | Mortality Tree Species | Morus species / MORSPP (Mulberries) | + | Tree Characteristics | Mortality Tree Species | Morus rubra / MORU2 (Red mulberry) | + | Tree Characteristics | Mortality Tree Species | Nyssa aquatica / NYAQ2 (Water tupelo) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Nyssa ogeche / NYOG (Ogeechee tupelo) | + | Tree Characteristics | Mortality Tree Species | Ostrya virginiana / OSVI (Hophornbeam) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | + | Tree Characteristics | Mortality Tree Species | Paulownia tomentosa / PATO2 (Princesstree) | + | Tree Characteristics | Mortality Tree Species | Persea borbonia / PEBO (Redbay) | + | Tree Characteristics | Mortality Tree Species | Picea abies / PIAB (Norway spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus albicaulis / PIAL (Whitebark pine) | + | Tree Characteristics | Mortality Tree Species | Pinus attenuata / PIAT (Knobcone pine) | + | Tree Characteristics | Mortality Tree Species | Pinus banksiana / PIBA2 (Jack pine) | + | Tree Characteristics | Mortality Tree Species | Pinus clausa / PICL (Sand pine) | + | Tree Characteristics | Mortality Tree Species | Pinus contorta / PICO (Lodgepole pine) | + | Tree Characteristics | Mortality Tree Species | Pinus echinata / PIEC2 (Shortleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus elliottii / PIEL (Slash pine) | + | Tree Characteristics | Mortality Tree Species | Picea engelmannii / PIEN (Engelmann spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus flexilis / PIFL2 (Limber pine) | + | Tree Characteristics | Mortality Tree Species | Picea glauca / PIGL (White spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus glabra / PIGL2 (Spruce pine) | + | Tree Characteristics | Mortality Tree Species | Pinus jeffreyi / PIJE (Jeffrey pine) | + | Tree Characteristics | Mortality Tree Species | Pinus lambertiana / PILA (Sugar pine) | + | Tree Characteristics | Mortality Tree Species | Picea mariana / PIMA (Black spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus monticola / PIMO3 (Western white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus palustris / PIPA2 (Longleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus ponderosa / PIPO (Ponderosa pine) | + | Tree Characteristics | Mortality Tree Species | Picea pungens / PIPU (Blue spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus pungens / PIPU5 (Table mountain pine) | + | Tree Characteristics | Mortality Tree Species | Pinus resinosa / PIRE (Red pine) | + | Tree Characteristics | Mortality Tree Species | Pinus rigida / PIRI (Pitch pine) | + | Tree Characteristics | Mortality Tree Species | Picea rubens / PIRU (Red spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus sabiniana / PISA2 (Gray pine) | + | Tree Characteristics | Mortality Tree Species | Pinus serotina / PISE (Pond pine) | + | Tree Characteristics | Mortality Tree Species | Picea sitchensis / PISI (Sitka spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus strobus / PIST (Eastern white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus sylvestris / PISY (Scots pine) | + | Tree Characteristics | Mortality Tree Species | Pinus taeda / PITA (Loblolly pine) | + | Tree Characteristics | Mortality Tree Species | Pinus virginiana / PIVI2 (Virginia pine) | + | Tree Characteristics | Mortality Tree Species | Platanus occidentalis / PLOC (American sycamore) | + | Tree Characteristics | Mortality Tree Species | Populus balsamifera / POBA2 (Balsam poplar) | + | Tree Characteristics | Mortality Tree Species | Populus grandidentata / POGR4 (Bigtooth aspen) | + | Tree Characteristics | Mortality Tree Species | Populus heterophylla / POHE4 (Swamp cottonwood) | + | Tree Characteristics | Mortality Tree Species | Populus tremuloides / POTR12 (Quaking aspen) | + | Tree Characteristics | Mortality Tree Species | Prunus americana / PRAM (American plum) | + | Tree Characteristics | Mortality Tree Species | Prunus emarginata / PREM (Bitter cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus pensylvanica / PRPE2 (Pin cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus serotina / PRSE2 (Black cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus virginiana / PRVI (Chokecherry) | + | Tree Characteristics | Mortality Tree Species | Pseudotsuga menziesii / PSME (Douglas - fir) | + | Tree Characteristics | Mortality Tree Species | Quercus agrifolia / QUAG (California live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus chrysolepis / QUCH2 (Canyon live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus douglasii / QUDU (Blue oak) | + | Tree Characteristics | Mortality Tree Species | Quercus ellipsoidalis / QUEL (Northern pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus species / QUESPP (Oaks) | + | Tree Characteristics | Mortality Tree Species | Quercus falcata / QUFA (Southern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus imbricaria / QUIM (Shingle oak) | + | Tree Characteristics | Mortality Tree Species | Quercus incana / QUIN (Bluejack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laevis / QULA2 (Turkey oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laurifolia / QULA3 (Laurel oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lobata / QULO (Valley oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lyrata / QULY (Overcup oak) | + | Tree Characteristics | Mortality Tree Species | Quercus macrocarpa / QUMA2 (Bur oak) | + | Tree Characteristics | Mortality Tree Species | Quercus michauxii / QUMI (Swamp chestnut oak) | + | Tree Characteristics | Mortality Tree Species | Quercus muehlenbergii / QUMU (Chinkapin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus nigra / QUNI (Water oak) | + | Tree Characteristics | Mortality Tree Species | Quercus palustris / QUPA2 (Pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus phellos / QUPH (Willow oak) | + | Tree Characteristics | Mortality Tree Species | Quercus rubra / QURU (Northern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus shumardii / QUSH (Shumard oak) | + | Tree Characteristics | Mortality Tree Species | Quercus stellata / QUST (Post oak) | + | Tree Characteristics | Mortality Tree Species | Quercus texana / QUTE (Texas red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus virginiana / QUVI (Live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus wislizeni / QUWI2 (Interior live oak) | + | Tree Characteristics | Mortality Tree Species | Robinia pseudoacacia / ROPS (Black locust) | + | Tree Characteristics | Mortality Tree Species | Salix bebbiana / SABE2 (Bebb willow) | + | Tree Characteristics | Mortality Tree Species | Salix species / SALSPP (Willows) | + | Tree Characteristics | Mortality Tree Species | Salix nigra / SANI (Black willow) | + | Tree Characteristics | Mortality Tree Species | Sorbus americana / SOAM3 (American mountain - ash) | + | Tree Characteristics | Mortality Tree Species | Taxodium ascendens / TAAS (Pond cypress) | + | Tree Characteristics | Mortality Tree Species | Taxus brevifolia / TABR2 (Pacific yew) | + | Tree Characteristics | Mortality Tree Species | Taxodium distichum / TADI2 (Bald cypress) | + | Tree Characteristics | Mortality Tree Species | Thuja occidentalis / THOC2 (arborvitae) | + | Tree Characteristics | Mortality Tree Species | Thuja plicata / THPL (Western redcedar) | + | Tree Characteristics | Mortality Tree Species | Tilia americana / TIAM (American basswood) | + | Tree Characteristics | Mortality Tree Species | Tsuga canadensis / TSCA (Eastern hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga heterophylla / TSHE (Western hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga mertensiana / TSME (Mountain hemlock) | + | Tree Characteristics | Mortality Tree Species | Ulmus alata / ULAL (Winged elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus americana / ULAM (American elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus species / ULMSPP (Elms) | + | Tree Characteristics | Mortality Tree Species | Ulmus pumila / ULPU (Siberian elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus rubra / ULRU (Slippery elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus thomasii / ULTH (Rock elm) | + | Tree Characteristics | Mortality Tree Species | Umbellularia californica / UMCA (California - laurel) | \ No newline at end of file diff --git a/features/results-page/results-page_crown_fire-type.feature b/features/results-page/results-page_crown_fire-type.feature new file mode 100644 index 000000000..78a832512 --- /dev/null +++ b/features/results-page/results-page_crown_fire-type.feature @@ -0,0 +1,105 @@ +@core +Feature: Crown Results - Fire Type + + @core + Scenario Outline: Fire Type is displayed in results when inputs are set + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Fuel Moisture | By Size Class | 10-h Fuel Moisture | 1 | + | Fuel Moisture | By Size Class | 100-h Fuel Moisture | 1 | + | Fuel Moisture | By Size Class | Live Woody Fuel Moisture | 60 | + | Wind and Slope | Wind Measured at: | | 20-Foot | + | Wind and Slope | 20-Foot Wind Speed | | 1 | + | Wind and Slope | Wind Adjustment Factor | | User Input | + | Wind and Slope | Wind Adjustment Factor | Wind Adjustment Factor - User Input | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + | Crown Fire Method | Calculate Crown Fire Using: | | Finney | + | Foliar Moisture | Foliar Moisture | | 30 | + | Canopy Fuel | Canopy Height | | 10 | + | Canopy Fuel | Canopy Base Height | | 10 | + | Canopy Fuel | Canopy Bulk Density | | 0.5 | + Then "the following outputs are displayed in the results page" + | output | + | Fire Type | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + + @extended + Scenario Outline: Fire Type is displayed in results when inputs are set (Extended) — Group 1 + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Fuel Moisture | By Size Class | 10-h Fuel Moisture | 1 | + | Fuel Moisture | By Size Class | 100-h Fuel Moisture | 1 | + | Fuel Moisture | By Size Class | Live Woody Fuel Moisture | 60 | + | Wind and Slope | Wind Measured at: | | 20-Foot | + | Wind and Slope | 20-Foot Wind Speed | | 1 | + | Wind and Slope | Wind Adjustment Factor | | User Input | + | Wind and Slope | Wind Adjustment Factor | Wind Adjustment Factor - User Input | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + | Crown Fire Method | Calculate Crown Fire Using: | | Finney | + | Foliar Moisture | Foliar Moisture | | 30 | + | Canopy Fuel | Canopy Height | | 10 | + | Canopy Fuel | Canopy Base Height | | 10 | + | Canopy Fuel | Canopy Bulk Density | | 0.5 | + Then "the following outputs are displayed in the results page" + | output | + | Fire Type | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + | Fire Behavior | Fire Behavior | Flame Length | + | Fire Behavior | Fire Behavior | Fireline Intensity | + | Fire Type | Active Crown Fire | Active Ratio | + | Fire Type | Active Crown Fire | Critical Crown Rate of Spread | + | Fire Type | Transition to Crown Fire | Transition Ratio | + | Fire Type | Transition to Crown Fire | Critical Surface Flame Length | + | Fire Type | Transition to Crown Fire | Critical Surface Fireline Intensity | + + @extended + Scenario Outline: Fire Type is displayed in results when inputs are set (Extended) — Group 2 + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Fuel Moisture | By Size Class | 10-h Fuel Moisture | 1 | + | Fuel Moisture | By Size Class | 100-h Fuel Moisture | 1 | + | Fuel Moisture | By Size Class | Live Woody Fuel Moisture | 60 | + | Wind and Slope | Wind Measured at: | | 20-Foot | + | Wind and Slope | 20-Foot Wind Speed | | 1 | + | Wind and Slope | Wind Adjustment Factor | | User Input | + | Wind and Slope | Wind Adjustment Factor | Wind Adjustment Factor - User Input | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + | Size | Elapsed Time | | 1 | + | Crown Fire Method | Calculate Crown Fire Using: | | Finney | + | Foliar Moisture | Foliar Moisture | | 30 | + | Canopy Fuel | Canopy Height | | 10 | + | Canopy Fuel | Canopy Base Height | | 10 | + | Canopy Fuel | Canopy Bulk Density | | 0.5 | + Then "the following outputs are displayed in the results page" + | output | + | Fire Type | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Size | Crown - Fire Size | Fire Area | + | Size | Crown - Fire Size | Fire Perimeter | + | Size | Crown - Fire Size | Spread Distance | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_bark-char-height-backing.feature b/features/results-page/results-page_mortality_bark-char-height-backing.feature new file mode 100644 index 000000000..b4f605748 --- /dev/null +++ b/features/results-page/results-page_mortality_bark-char-height-backing.feature @@ -0,0 +1,100 @@ +@core +Feature: Mortality Results - Bark Char Height Backing + + @core + Scenario Outline: Bark Char Height Backing is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + Then "the following outputs are displayed in the results page" + | output | + | Bark Char Height Backing | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Acer rubrum / ACRU (Red maple) | + + @extended + Scenario Outline: Bark Char Height Backing is displayed in results when inputs are set (Extended) — Group 1 + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + Then "the following outputs are displayed in the results page" + | output | + | Bark Char Height Backing | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Acer rubrum / ACRU (Red maple) | + | Tree Characteristics | Mortality Tree Species | Cornus florida / COFL2 (Flowering dogwood) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYSY (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Quercus alba / QUAL (White oak) | + | Tree Characteristics | Mortality Tree Species | Quercus bicolor / QUBI (Swamp white oak) | + | Tree Characteristics | Mortality Tree Species | Quercus coccinea / QUCO2 (Scarlet oak) | + | Tree Characteristics | Mortality Tree Species | Quercus garryana / QUGA4 (Oregon white oak) | + | Tree Characteristics | Mortality Tree Species | Quercus kelloggii / QUKE (Califonia black oak) | + | Tree Characteristics | Mortality Tree Species | Quercus marilandica / QUMA3 (Blackjack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus velutina / QUVE (Black oak) | + | Tree Characteristics | Mortality Tree Species | Sassafras albidum / SAAL5 (Sassafras) | + + @extended + Scenario Outline: Bark Char Height Backing is displayed in results when inputs are set (Extended) — Group 2 + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Bark Char Height Backing | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_bark-char-height-flanking.feature b/features/results-page/results-page_mortality_bark-char-height-flanking.feature new file mode 100644 index 000000000..7aaffbff1 --- /dev/null +++ b/features/results-page/results-page_mortality_bark-char-height-flanking.feature @@ -0,0 +1,100 @@ +@core +Feature: Mortality Results - Bark Char Height Flanking + + @core + Scenario Outline: Bark Char Height Flanking is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + Then "the following outputs are displayed in the results page" + | output | + | Bark Char Height Flanking | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Acer rubrum / ACRU (Red maple) | + + @extended + Scenario Outline: Bark Char Height Flanking is displayed in results when inputs are set (Extended) — Group 1 + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + Then "the following outputs are displayed in the results page" + | output | + | Bark Char Height Flanking | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Acer rubrum / ACRU (Red maple) | + | Tree Characteristics | Mortality Tree Species | Cornus florida / COFL2 (Flowering dogwood) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYSY (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Quercus alba / QUAL (White oak) | + | Tree Characteristics | Mortality Tree Species | Quercus bicolor / QUBI (Swamp white oak) | + | Tree Characteristics | Mortality Tree Species | Quercus coccinea / QUCO2 (Scarlet oak) | + | Tree Characteristics | Mortality Tree Species | Quercus garryana / QUGA4 (Oregon white oak) | + | Tree Characteristics | Mortality Tree Species | Quercus kelloggii / QUKE (Califonia black oak) | + | Tree Characteristics | Mortality Tree Species | Quercus marilandica / QUMA3 (Blackjack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus velutina / QUVE (Black oak) | + | Tree Characteristics | Mortality Tree Species | Sassafras albidum / SAAL5 (Sassafras) | + + @extended + Scenario Outline: Bark Char Height Flanking is displayed in results when inputs are set (Extended) — Group 2 + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Bark Char Height Flanking | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_bark-char-height.feature b/features/results-page/results-page_mortality_bark-char-height.feature new file mode 100644 index 000000000..ace699df2 --- /dev/null +++ b/features/results-page/results-page_mortality_bark-char-height.feature @@ -0,0 +1,100 @@ +@core +Feature: Mortality Results - Bark Char Height + + @core + Scenario Outline: Bark Char Height is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + Then "the following outputs are displayed in the results page" + | output | + | Bark Char Height | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Acer rubrum / ACRU (Red maple) | + + @extended + Scenario Outline: Bark Char Height is displayed in results when inputs are set (Extended) — Group 1 + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + Then "the following outputs are displayed in the results page" + | output | + | Bark Char Height | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Acer rubrum / ACRU (Red maple) | + | Tree Characteristics | Mortality Tree Species | Cornus florida / COFL2 (Flowering dogwood) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYSY (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Quercus alba / QUAL (White oak) | + | Tree Characteristics | Mortality Tree Species | Quercus bicolor / QUBI (Swamp white oak) | + | Tree Characteristics | Mortality Tree Species | Quercus coccinea / QUCO2 (Scarlet oak) | + | Tree Characteristics | Mortality Tree Species | Quercus garryana / QUGA4 (Oregon white oak) | + | Tree Characteristics | Mortality Tree Species | Quercus kelloggii / QUKE (Califonia black oak) | + | Tree Characteristics | Mortality Tree Species | Quercus marilandica / QUMA3 (Blackjack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus velutina / QUVE (Black oak) | + | Tree Characteristics | Mortality Tree Species | Sassafras albidum / SAAL5 (Sassafras) | + + @extended + Scenario Outline: Bark Char Height is displayed in results when inputs are set (Extended) — Group 2 + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Bark Char Height | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_crown-length-scorched-backing.feature b/features/results-page/results-page_mortality_crown-length-scorched-backing.feature new file mode 100644 index 000000000..5e1e15a91 --- /dev/null +++ b/features/results-page/results-page_mortality_crown-length-scorched-backing.feature @@ -0,0 +1,238 @@ +@core +Feature: Mortality Results - Crown Length Scorched Backing + + @core + Scenario Outline: Crown Length Scorched Backing is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Crown Length Scorched Backing | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + + @extended + Scenario Outline: Crown Length Scorched Backing is displayed in results when inputs are set (Extended) + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Crown Length Scorched Backing | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Mortality Tree Species | Abies balsamea / ABBA (Balsam fir) | + | Tree Characteristics | Mortality Tree Species | Abies concolor / ABCO (White fir) | + | Tree Characteristics | Mortality Tree Species | Abies grandis / ABGR (Grand fir) | + | Tree Characteristics | Mortality Tree Species | Abies lasiocarpa / ABLA (Subalpine fir) | + | Tree Characteristics | Mortality Tree Species | Abies magnifica / ABMA (Red Fir) | + | Tree Characteristics | Mortality Tree Species | Abies procera / ABPR (Noble Fir) | + | Tree Characteristics | Mortality Tree Species | Acer barbatum / ACBA3 (Southern sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer macrophyllum / ACMA3 (Bigleaf maple) | + | Tree Characteristics | Mortality Tree Species | Acer negundo / ACNE2 (Boxelder) | + | Tree Characteristics | Mortality Tree Species | Acer nigrum / ACNI5 (Black maple) | + | Tree Characteristics | Mortality Tree Species | Acer pensylvanicum / ACPE (Striped maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharinum / ACSA2 (Silver maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharum / ACSA3 (Sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer spicatum / ACSP2 (Mountain maple) | + | Tree Characteristics | Mortality Tree Species | Aesculus flava / AEFL (Yellow buckeye) | + | Tree Characteristics | Mortality Tree Species | Aesculus glabra / AEGL (Ohio buckeye) | + | Tree Characteristics | Mortality Tree Species | Ailanthus altissima / AIAL (Ailanthus) | + | Tree Characteristics | Mortality Tree Species | Alnus rhombifolia / ALRH2 (White alder) | + | Tree Characteristics | Mortality Tree Species | Alnus rubra / ALRU2 (Red alder) | + | Tree Characteristics | Mortality Tree Species | Amelanchier arborea / AMAR3 (Common serviceberry) | + | Tree Characteristics | Mortality Tree Species | Arbutus menziesii / ARME (Pacific madrone) | + | Tree Characteristics | Mortality Tree Species | Betula alleghaniensis / BEAL2 (Yellow birch) | + | Tree Characteristics | Mortality Tree Species | Betula lenta / BELE (Sweet birch) | + | Tree Characteristics | Mortality Tree Species | Betula nigra / BENI (River Birch) | + | Tree Characteristics | Mortality Tree Species | Betula occidentalis / BEOC2 (Water birch) | + | Tree Characteristics | Mortality Tree Species | Betula papyrifera / BEPA (Paper birch) | + | Tree Characteristics | Mortality Tree Species | Betula species / BETSPP (Birches) | + | Tree Characteristics | Mortality Tree Species | Carya alba / CAAL27 (Mockernut hickory) | + | Tree Characteristics | Mortality Tree Species | Carpinus caroliniana / CACA18 (American hornbeam) | + | Tree Characteristics | Mortality Tree Species | Carya cordiformis / CACOL3 (Bitternut hickory) | + | Tree Characteristics | Mortality Tree Species | Castanea dentata / CADE12 (American chestnut) | + | Tree Characteristics | Mortality Tree Species | Calocedrus decurrens / CADE27 (Incense - cedar) | + | Tree Characteristics | Mortality Tree Species | Carya glabra / CAGL8 (Pignut hickory) | + | Tree Characteristics | Mortality Tree Species | Carya illinoinensis / CAIL2 (Pecan) | + | Tree Characteristics | Mortality Tree Species | Carya laciniosa / CALA21 (Shellbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya ovata / CAOV2 (Shagbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya species / CARSPP (Hickories) | + | Tree Characteristics | Mortality Tree Species | Carya texana / CATE9 (Black hickory) | + | Tree Characteristics | Mortality Tree Species | Cercis canadensis / CECA4 (Eastern redbud) | + | Tree Characteristics | Mortality Tree Species | Celtis laevigata / CELA (Sugarberry) | + | Tree Characteristics | Mortality Tree Species | Celtis occidentalis / CEOC (Common hackberry) | + | Tree Characteristics | Mortality Tree Species | Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis lawsoniana / CHLA (PortOrford - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis nootkatensis / CHNO (Alaska - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar) | + | Tree Characteristics | Mortality Tree Species | Cornus nuttallii / CONU4 (Pacific dogwood) | + | Tree Characteristics | Mortality Tree Species | Crataegus species / CRASPP (Hawthorns) | + | Tree Characteristics | Mortality Tree Species | Diospyros virginiana / DIVI5 (Persimmon) | + | Tree Characteristics | Mortality Tree Species | Fagus grandifolia / FAGR (American beech) | + | Tree Characteristics | Mortality Tree Species | Fraxinus americana / FRAM2 (White ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus species / FRASPP (Ashes) | + | Tree Characteristics | Mortality Tree Species | Fraxinus nigra / FRNI (Black ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus pennsylvanica / FRPE (Green ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus profunda / FRPR (Pumpkin ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus quadrangulata / FRQU (Blue ash) | + | Tree Characteristics | Mortality Tree Species | Gleditsia triacanthos / GLTR (Honeylocust) | + | Tree Characteristics | Mortality Tree Species | Gordonia lasianthus / GOLA (Loblolly bay) | + | Tree Characteristics | Mortality Tree Species | Gymnocladus dioicus / GYDI (Kentucky coffeetree) | + | Tree Characteristics | Mortality Tree Species | Halesia species / HALSPP (Silverbells) | + | Tree Characteristics | Mortality Tree Species | Ilex opaca / ILOP (American holly) | + | Tree Characteristics | Mortality Tree Species | Juglans cinerea / JUCI (Butternut) | + | Tree Characteristics | Mortality Tree Species | Juglans nigra / JUNI (Black walnut) | + | Tree Characteristics | Mortality Tree Species | Juniperus occidentalis / JUOC (Western juniper) | + | Tree Characteristics | Mortality Tree Species | Juniperus virginiana / JUVI (Eastern redcedar) | + | Tree Characteristics | Mortality Tree Species | Larix laricina / LALA (Tamarack) | + | Tree Characteristics | Mortality Tree Species | Larix lyallii / LALY (Subalpine Larch) | + | Tree Characteristics | Mortality Tree Species | Larix occidentalis / LAOC (Western Larch) | + | Tree Characteristics | Mortality Tree Species | Lithocarpus densiflorus / LIDE3 (Tanoak) | + | Tree Characteristics | Mortality Tree Species | Liquidambar styraciflua / LIST2 (Sweetgum) | + | Tree Characteristics | Mortality Tree Species | Liriodendron tulipifera / LITU (Tuliptree) | + | Tree Characteristics | Mortality Tree Species | Magnolia acuminata / MAAC (Cucumber - tree) | + | Tree Characteristics | Mortality Tree Species | Magnolia grandiflora / MAGR4 (Southern magnolia) | + | Tree Characteristics | Mortality Tree Species | Magnolia species / MAGSPP (Magnolias) | + | Tree Characteristics | Mortality Tree Species | Prunus species / MALPRU (cherry and plum species) | + | Tree Characteristics | Mortality Tree Species | Malus species / MALSPP (Apples) | + | Tree Characteristics | Mortality Tree Species | Magnolia macrophylla / MAMA2 (Bigleaf magnolia) | + | Tree Characteristics | Mortality Tree Species | Maclura pomifera / MAPO (Osage - orange) | + | Tree Characteristics | Mortality Tree Species | Magnolia virginiana / MAVI2 (Sweetbay) | + | Tree Characteristics | Mortality Tree Species | Morus alba / MOAL (White mulberry) | + | Tree Characteristics | Mortality Tree Species | Morus species / MORSPP (Mulberries) | + | Tree Characteristics | Mortality Tree Species | Morus rubra / MORU2 (Red mulberry) | + | Tree Characteristics | Mortality Tree Species | Nyssa aquatica / NYAQ2 (Water tupelo) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Nyssa ogeche / NYOG (Ogeechee tupelo) | + | Tree Characteristics | Mortality Tree Species | Ostrya virginiana / OSVI (Hophornbeam) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | + | Tree Characteristics | Mortality Tree Species | Paulownia tomentosa / PATO2 (Princesstree) | + | Tree Characteristics | Mortality Tree Species | Persea borbonia / PEBO (Redbay) | + | Tree Characteristics | Mortality Tree Species | Picea abies / PIAB (Norway spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus albicaulis / PIAL (Whitebark pine) | + | Tree Characteristics | Mortality Tree Species | Pinus attenuata / PIAT (Knobcone pine) | + | Tree Characteristics | Mortality Tree Species | Pinus banksiana / PIBA2 (Jack pine) | + | Tree Characteristics | Mortality Tree Species | Pinus clausa / PICL (Sand pine) | + | Tree Characteristics | Mortality Tree Species | Pinus contorta / PICO (Lodgepole pine) | + | Tree Characteristics | Mortality Tree Species | Pinus echinata / PIEC2 (Shortleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus elliottii / PIEL (Slash pine) | + | Tree Characteristics | Mortality Tree Species | Picea engelmannii / PIEN (Engelmann spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus flexilis / PIFL2 (Limber pine) | + | Tree Characteristics | Mortality Tree Species | Picea glauca / PIGL (White spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus glabra / PIGL2 (Spruce pine) | + | Tree Characteristics | Mortality Tree Species | Pinus jeffreyi / PIJE (Jeffrey pine) | + | Tree Characteristics | Mortality Tree Species | Pinus lambertiana / PILA (Sugar pine) | + | Tree Characteristics | Mortality Tree Species | Picea mariana / PIMA (Black spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus monticola / PIMO3 (Western white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus palustris / PIPA2 (Longleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus ponderosa / PIPO (Ponderosa pine) | + | Tree Characteristics | Mortality Tree Species | Picea pungens / PIPU (Blue spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus pungens / PIPU5 (Table mountain pine) | + | Tree Characteristics | Mortality Tree Species | Pinus resinosa / PIRE (Red pine) | + | Tree Characteristics | Mortality Tree Species | Pinus rigida / PIRI (Pitch pine) | + | Tree Characteristics | Mortality Tree Species | Picea rubens / PIRU (Red spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus sabiniana / PISA2 (Gray pine) | + | Tree Characteristics | Mortality Tree Species | Pinus serotina / PISE (Pond pine) | + | Tree Characteristics | Mortality Tree Species | Picea sitchensis / PISI (Sitka spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus strobus / PIST (Eastern white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus sylvestris / PISY (Scots pine) | + | Tree Characteristics | Mortality Tree Species | Pinus taeda / PITA (Loblolly pine) | + | Tree Characteristics | Mortality Tree Species | Pinus virginiana / PIVI2 (Virginia pine) | + | Tree Characteristics | Mortality Tree Species | Platanus occidentalis / PLOC (American sycamore) | + | Tree Characteristics | Mortality Tree Species | Populus balsamifera / POBA2 (Balsam poplar) | + | Tree Characteristics | Mortality Tree Species | Populus grandidentata / POGR4 (Bigtooth aspen) | + | Tree Characteristics | Mortality Tree Species | Populus heterophylla / POHE4 (Swamp cottonwood) | + | Tree Characteristics | Mortality Tree Species | Populus tremuloides / POTR12 (Quaking aspen) | + | Tree Characteristics | Mortality Tree Species | Prunus americana / PRAM (American plum) | + | Tree Characteristics | Mortality Tree Species | Prunus emarginata / PREM (Bitter cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus pensylvanica / PRPE2 (Pin cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus serotina / PRSE2 (Black cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus virginiana / PRVI (Chokecherry) | + | Tree Characteristics | Mortality Tree Species | Pseudotsuga menziesii / PSME (Douglas - fir) | + | Tree Characteristics | Mortality Tree Species | Quercus agrifolia / QUAG (California live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus chrysolepis / QUCH2 (Canyon live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus douglasii / QUDU (Blue oak) | + | Tree Characteristics | Mortality Tree Species | Quercus ellipsoidalis / QUEL (Northern pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus species / QUESPP (Oaks) | + | Tree Characteristics | Mortality Tree Species | Quercus falcata / QUFA (Southern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus imbricaria / QUIM (Shingle oak) | + | Tree Characteristics | Mortality Tree Species | Quercus incana / QUIN (Bluejack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laevis / QULA2 (Turkey oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laurifolia / QULA3 (Laurel oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lobata / QULO (Valley oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lyrata / QULY (Overcup oak) | + | Tree Characteristics | Mortality Tree Species | Quercus macrocarpa / QUMA2 (Bur oak) | + | Tree Characteristics | Mortality Tree Species | Quercus michauxii / QUMI (Swamp chestnut oak) | + | Tree Characteristics | Mortality Tree Species | Quercus muehlenbergii / QUMU (Chinkapin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus nigra / QUNI (Water oak) | + | Tree Characteristics | Mortality Tree Species | Quercus palustris / QUPA2 (Pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus phellos / QUPH (Willow oak) | + | Tree Characteristics | Mortality Tree Species | Quercus rubra / QURU (Northern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus shumardii / QUSH (Shumard oak) | + | Tree Characteristics | Mortality Tree Species | Quercus stellata / QUST (Post oak) | + | Tree Characteristics | Mortality Tree Species | Quercus texana / QUTE (Texas red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus virginiana / QUVI (Live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus wislizeni / QUWI2 (Interior live oak) | + | Tree Characteristics | Mortality Tree Species | Robinia pseudoacacia / ROPS (Black locust) | + | Tree Characteristics | Mortality Tree Species | Salix bebbiana / SABE2 (Bebb willow) | + | Tree Characteristics | Mortality Tree Species | Salix species / SALSPP (Willows) | + | Tree Characteristics | Mortality Tree Species | Salix nigra / SANI (Black willow) | + | Tree Characteristics | Mortality Tree Species | Sorbus americana / SOAM3 (American mountain - ash) | + | Tree Characteristics | Mortality Tree Species | Taxodium ascendens / TAAS (Pond cypress) | + | Tree Characteristics | Mortality Tree Species | Taxus brevifolia / TABR2 (Pacific yew) | + | Tree Characteristics | Mortality Tree Species | Taxodium distichum / TADI2 (Bald cypress) | + | Tree Characteristics | Mortality Tree Species | Thuja occidentalis / THOC2 (arborvitae) | + | Tree Characteristics | Mortality Tree Species | Thuja plicata / THPL (Western redcedar) | + | Tree Characteristics | Mortality Tree Species | Tilia americana / TIAM (American basswood) | + | Tree Characteristics | Mortality Tree Species | Tsuga canadensis / TSCA (Eastern hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga heterophylla / TSHE (Western hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga mertensiana / TSME (Mountain hemlock) | + | Tree Characteristics | Mortality Tree Species | Ulmus alata / ULAL (Winged elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus americana / ULAM (American elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus species / ULMSPP (Elms) | + | Tree Characteristics | Mortality Tree Species | Ulmus pumila / ULPU (Siberian elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus rubra / ULRU (Slippery elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus thomasii / ULTH (Rock elm) | + | Tree Characteristics | Mortality Tree Species | Umbellularia californica / UMCA (California - laurel) | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_crown-length-scorched-flanking.feature b/features/results-page/results-page_mortality_crown-length-scorched-flanking.feature new file mode 100644 index 000000000..c4081a535 --- /dev/null +++ b/features/results-page/results-page_mortality_crown-length-scorched-flanking.feature @@ -0,0 +1,238 @@ +@core +Feature: Mortality Results - Crown Length Scorched Flanking + + @core + Scenario Outline: Crown Length Scorched Flanking is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Crown Length Scorched Flanking | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + + @extended + Scenario Outline: Crown Length Scorched Flanking is displayed in results when inputs are set (Extended) + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Crown Length Scorched Flanking | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Mortality Tree Species | Abies balsamea / ABBA (Balsam fir) | + | Tree Characteristics | Mortality Tree Species | Abies concolor / ABCO (White fir) | + | Tree Characteristics | Mortality Tree Species | Abies grandis / ABGR (Grand fir) | + | Tree Characteristics | Mortality Tree Species | Abies lasiocarpa / ABLA (Subalpine fir) | + | Tree Characteristics | Mortality Tree Species | Abies magnifica / ABMA (Red Fir) | + | Tree Characteristics | Mortality Tree Species | Abies procera / ABPR (Noble Fir) | + | Tree Characteristics | Mortality Tree Species | Acer barbatum / ACBA3 (Southern sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer macrophyllum / ACMA3 (Bigleaf maple) | + | Tree Characteristics | Mortality Tree Species | Acer negundo / ACNE2 (Boxelder) | + | Tree Characteristics | Mortality Tree Species | Acer nigrum / ACNI5 (Black maple) | + | Tree Characteristics | Mortality Tree Species | Acer pensylvanicum / ACPE (Striped maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharinum / ACSA2 (Silver maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharum / ACSA3 (Sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer spicatum / ACSP2 (Mountain maple) | + | Tree Characteristics | Mortality Tree Species | Aesculus flava / AEFL (Yellow buckeye) | + | Tree Characteristics | Mortality Tree Species | Aesculus glabra / AEGL (Ohio buckeye) | + | Tree Characteristics | Mortality Tree Species | Ailanthus altissima / AIAL (Ailanthus) | + | Tree Characteristics | Mortality Tree Species | Alnus rhombifolia / ALRH2 (White alder) | + | Tree Characteristics | Mortality Tree Species | Alnus rubra / ALRU2 (Red alder) | + | Tree Characteristics | Mortality Tree Species | Amelanchier arborea / AMAR3 (Common serviceberry) | + | Tree Characteristics | Mortality Tree Species | Arbutus menziesii / ARME (Pacific madrone) | + | Tree Characteristics | Mortality Tree Species | Betula alleghaniensis / BEAL2 (Yellow birch) | + | Tree Characteristics | Mortality Tree Species | Betula lenta / BELE (Sweet birch) | + | Tree Characteristics | Mortality Tree Species | Betula nigra / BENI (River Birch) | + | Tree Characteristics | Mortality Tree Species | Betula occidentalis / BEOC2 (Water birch) | + | Tree Characteristics | Mortality Tree Species | Betula papyrifera / BEPA (Paper birch) | + | Tree Characteristics | Mortality Tree Species | Betula species / BETSPP (Birches) | + | Tree Characteristics | Mortality Tree Species | Carya alba / CAAL27 (Mockernut hickory) | + | Tree Characteristics | Mortality Tree Species | Carpinus caroliniana / CACA18 (American hornbeam) | + | Tree Characteristics | Mortality Tree Species | Carya cordiformis / CACOL3 (Bitternut hickory) | + | Tree Characteristics | Mortality Tree Species | Castanea dentata / CADE12 (American chestnut) | + | Tree Characteristics | Mortality Tree Species | Calocedrus decurrens / CADE27 (Incense - cedar) | + | Tree Characteristics | Mortality Tree Species | Carya glabra / CAGL8 (Pignut hickory) | + | Tree Characteristics | Mortality Tree Species | Carya illinoinensis / CAIL2 (Pecan) | + | Tree Characteristics | Mortality Tree Species | Carya laciniosa / CALA21 (Shellbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya ovata / CAOV2 (Shagbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya species / CARSPP (Hickories) | + | Tree Characteristics | Mortality Tree Species | Carya texana / CATE9 (Black hickory) | + | Tree Characteristics | Mortality Tree Species | Cercis canadensis / CECA4 (Eastern redbud) | + | Tree Characteristics | Mortality Tree Species | Celtis laevigata / CELA (Sugarberry) | + | Tree Characteristics | Mortality Tree Species | Celtis occidentalis / CEOC (Common hackberry) | + | Tree Characteristics | Mortality Tree Species | Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis lawsoniana / CHLA (PortOrford - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis nootkatensis / CHNO (Alaska - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar) | + | Tree Characteristics | Mortality Tree Species | Cornus nuttallii / CONU4 (Pacific dogwood) | + | Tree Characteristics | Mortality Tree Species | Crataegus species / CRASPP (Hawthorns) | + | Tree Characteristics | Mortality Tree Species | Diospyros virginiana / DIVI5 (Persimmon) | + | Tree Characteristics | Mortality Tree Species | Fagus grandifolia / FAGR (American beech) | + | Tree Characteristics | Mortality Tree Species | Fraxinus americana / FRAM2 (White ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus species / FRASPP (Ashes) | + | Tree Characteristics | Mortality Tree Species | Fraxinus nigra / FRNI (Black ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus pennsylvanica / FRPE (Green ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus profunda / FRPR (Pumpkin ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus quadrangulata / FRQU (Blue ash) | + | Tree Characteristics | Mortality Tree Species | Gleditsia triacanthos / GLTR (Honeylocust) | + | Tree Characteristics | Mortality Tree Species | Gordonia lasianthus / GOLA (Loblolly bay) | + | Tree Characteristics | Mortality Tree Species | Gymnocladus dioicus / GYDI (Kentucky coffeetree) | + | Tree Characteristics | Mortality Tree Species | Halesia species / HALSPP (Silverbells) | + | Tree Characteristics | Mortality Tree Species | Ilex opaca / ILOP (American holly) | + | Tree Characteristics | Mortality Tree Species | Juglans cinerea / JUCI (Butternut) | + | Tree Characteristics | Mortality Tree Species | Juglans nigra / JUNI (Black walnut) | + | Tree Characteristics | Mortality Tree Species | Juniperus occidentalis / JUOC (Western juniper) | + | Tree Characteristics | Mortality Tree Species | Juniperus virginiana / JUVI (Eastern redcedar) | + | Tree Characteristics | Mortality Tree Species | Larix laricina / LALA (Tamarack) | + | Tree Characteristics | Mortality Tree Species | Larix lyallii / LALY (Subalpine Larch) | + | Tree Characteristics | Mortality Tree Species | Larix occidentalis / LAOC (Western Larch) | + | Tree Characteristics | Mortality Tree Species | Lithocarpus densiflorus / LIDE3 (Tanoak) | + | Tree Characteristics | Mortality Tree Species | Liquidambar styraciflua / LIST2 (Sweetgum) | + | Tree Characteristics | Mortality Tree Species | Liriodendron tulipifera / LITU (Tuliptree) | + | Tree Characteristics | Mortality Tree Species | Magnolia acuminata / MAAC (Cucumber - tree) | + | Tree Characteristics | Mortality Tree Species | Magnolia grandiflora / MAGR4 (Southern magnolia) | + | Tree Characteristics | Mortality Tree Species | Magnolia species / MAGSPP (Magnolias) | + | Tree Characteristics | Mortality Tree Species | Prunus species / MALPRU (cherry and plum species) | + | Tree Characteristics | Mortality Tree Species | Malus species / MALSPP (Apples) | + | Tree Characteristics | Mortality Tree Species | Magnolia macrophylla / MAMA2 (Bigleaf magnolia) | + | Tree Characteristics | Mortality Tree Species | Maclura pomifera / MAPO (Osage - orange) | + | Tree Characteristics | Mortality Tree Species | Magnolia virginiana / MAVI2 (Sweetbay) | + | Tree Characteristics | Mortality Tree Species | Morus alba / MOAL (White mulberry) | + | Tree Characteristics | Mortality Tree Species | Morus species / MORSPP (Mulberries) | + | Tree Characteristics | Mortality Tree Species | Morus rubra / MORU2 (Red mulberry) | + | Tree Characteristics | Mortality Tree Species | Nyssa aquatica / NYAQ2 (Water tupelo) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Nyssa ogeche / NYOG (Ogeechee tupelo) | + | Tree Characteristics | Mortality Tree Species | Ostrya virginiana / OSVI (Hophornbeam) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | + | Tree Characteristics | Mortality Tree Species | Paulownia tomentosa / PATO2 (Princesstree) | + | Tree Characteristics | Mortality Tree Species | Persea borbonia / PEBO (Redbay) | + | Tree Characteristics | Mortality Tree Species | Picea abies / PIAB (Norway spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus albicaulis / PIAL (Whitebark pine) | + | Tree Characteristics | Mortality Tree Species | Pinus attenuata / PIAT (Knobcone pine) | + | Tree Characteristics | Mortality Tree Species | Pinus banksiana / PIBA2 (Jack pine) | + | Tree Characteristics | Mortality Tree Species | Pinus clausa / PICL (Sand pine) | + | Tree Characteristics | Mortality Tree Species | Pinus contorta / PICO (Lodgepole pine) | + | Tree Characteristics | Mortality Tree Species | Pinus echinata / PIEC2 (Shortleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus elliottii / PIEL (Slash pine) | + | Tree Characteristics | Mortality Tree Species | Picea engelmannii / PIEN (Engelmann spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus flexilis / PIFL2 (Limber pine) | + | Tree Characteristics | Mortality Tree Species | Picea glauca / PIGL (White spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus glabra / PIGL2 (Spruce pine) | + | Tree Characteristics | Mortality Tree Species | Pinus jeffreyi / PIJE (Jeffrey pine) | + | Tree Characteristics | Mortality Tree Species | Pinus lambertiana / PILA (Sugar pine) | + | Tree Characteristics | Mortality Tree Species | Picea mariana / PIMA (Black spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus monticola / PIMO3 (Western white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus palustris / PIPA2 (Longleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus ponderosa / PIPO (Ponderosa pine) | + | Tree Characteristics | Mortality Tree Species | Picea pungens / PIPU (Blue spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus pungens / PIPU5 (Table mountain pine) | + | Tree Characteristics | Mortality Tree Species | Pinus resinosa / PIRE (Red pine) | + | Tree Characteristics | Mortality Tree Species | Pinus rigida / PIRI (Pitch pine) | + | Tree Characteristics | Mortality Tree Species | Picea rubens / PIRU (Red spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus sabiniana / PISA2 (Gray pine) | + | Tree Characteristics | Mortality Tree Species | Pinus serotina / PISE (Pond pine) | + | Tree Characteristics | Mortality Tree Species | Picea sitchensis / PISI (Sitka spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus strobus / PIST (Eastern white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus sylvestris / PISY (Scots pine) | + | Tree Characteristics | Mortality Tree Species | Pinus taeda / PITA (Loblolly pine) | + | Tree Characteristics | Mortality Tree Species | Pinus virginiana / PIVI2 (Virginia pine) | + | Tree Characteristics | Mortality Tree Species | Platanus occidentalis / PLOC (American sycamore) | + | Tree Characteristics | Mortality Tree Species | Populus balsamifera / POBA2 (Balsam poplar) | + | Tree Characteristics | Mortality Tree Species | Populus grandidentata / POGR4 (Bigtooth aspen) | + | Tree Characteristics | Mortality Tree Species | Populus heterophylla / POHE4 (Swamp cottonwood) | + | Tree Characteristics | Mortality Tree Species | Populus tremuloides / POTR12 (Quaking aspen) | + | Tree Characteristics | Mortality Tree Species | Prunus americana / PRAM (American plum) | + | Tree Characteristics | Mortality Tree Species | Prunus emarginata / PREM (Bitter cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus pensylvanica / PRPE2 (Pin cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus serotina / PRSE2 (Black cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus virginiana / PRVI (Chokecherry) | + | Tree Characteristics | Mortality Tree Species | Pseudotsuga menziesii / PSME (Douglas - fir) | + | Tree Characteristics | Mortality Tree Species | Quercus agrifolia / QUAG (California live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus chrysolepis / QUCH2 (Canyon live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus douglasii / QUDU (Blue oak) | + | Tree Characteristics | Mortality Tree Species | Quercus ellipsoidalis / QUEL (Northern pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus species / QUESPP (Oaks) | + | Tree Characteristics | Mortality Tree Species | Quercus falcata / QUFA (Southern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus imbricaria / QUIM (Shingle oak) | + | Tree Characteristics | Mortality Tree Species | Quercus incana / QUIN (Bluejack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laevis / QULA2 (Turkey oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laurifolia / QULA3 (Laurel oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lobata / QULO (Valley oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lyrata / QULY (Overcup oak) | + | Tree Characteristics | Mortality Tree Species | Quercus macrocarpa / QUMA2 (Bur oak) | + | Tree Characteristics | Mortality Tree Species | Quercus michauxii / QUMI (Swamp chestnut oak) | + | Tree Characteristics | Mortality Tree Species | Quercus muehlenbergii / QUMU (Chinkapin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus nigra / QUNI (Water oak) | + | Tree Characteristics | Mortality Tree Species | Quercus palustris / QUPA2 (Pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus phellos / QUPH (Willow oak) | + | Tree Characteristics | Mortality Tree Species | Quercus rubra / QURU (Northern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus shumardii / QUSH (Shumard oak) | + | Tree Characteristics | Mortality Tree Species | Quercus stellata / QUST (Post oak) | + | Tree Characteristics | Mortality Tree Species | Quercus texana / QUTE (Texas red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus virginiana / QUVI (Live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus wislizeni / QUWI2 (Interior live oak) | + | Tree Characteristics | Mortality Tree Species | Robinia pseudoacacia / ROPS (Black locust) | + | Tree Characteristics | Mortality Tree Species | Salix bebbiana / SABE2 (Bebb willow) | + | Tree Characteristics | Mortality Tree Species | Salix species / SALSPP (Willows) | + | Tree Characteristics | Mortality Tree Species | Salix nigra / SANI (Black willow) | + | Tree Characteristics | Mortality Tree Species | Sorbus americana / SOAM3 (American mountain - ash) | + | Tree Characteristics | Mortality Tree Species | Taxodium ascendens / TAAS (Pond cypress) | + | Tree Characteristics | Mortality Tree Species | Taxus brevifolia / TABR2 (Pacific yew) | + | Tree Characteristics | Mortality Tree Species | Taxodium distichum / TADI2 (Bald cypress) | + | Tree Characteristics | Mortality Tree Species | Thuja occidentalis / THOC2 (arborvitae) | + | Tree Characteristics | Mortality Tree Species | Thuja plicata / THPL (Western redcedar) | + | Tree Characteristics | Mortality Tree Species | Tilia americana / TIAM (American basswood) | + | Tree Characteristics | Mortality Tree Species | Tsuga canadensis / TSCA (Eastern hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga heterophylla / TSHE (Western hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga mertensiana / TSME (Mountain hemlock) | + | Tree Characteristics | Mortality Tree Species | Ulmus alata / ULAL (Winged elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus americana / ULAM (American elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus species / ULMSPP (Elms) | + | Tree Characteristics | Mortality Tree Species | Ulmus pumila / ULPU (Siberian elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus rubra / ULRU (Slippery elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus thomasii / ULTH (Rock elm) | + | Tree Characteristics | Mortality Tree Species | Umbellularia californica / UMCA (California - laurel) | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_crown-volume-scorched-backing.feature b/features/results-page/results-page_mortality_crown-volume-scorched-backing.feature new file mode 100644 index 000000000..a1df808f7 --- /dev/null +++ b/features/results-page/results-page_mortality_crown-volume-scorched-backing.feature @@ -0,0 +1,238 @@ +@core +Feature: Mortality Results - Crown Volume Scorched Backing + + @core + Scenario Outline: Crown Volume Scorched Backing is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Crown Volume Scorched Backing | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + + @extended + Scenario Outline: Crown Volume Scorched Backing is displayed in results when inputs are set (Extended) + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Crown Volume Scorched Backing | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Mortality Tree Species | Abies balsamea / ABBA (Balsam fir) | + | Tree Characteristics | Mortality Tree Species | Abies concolor / ABCO (White fir) | + | Tree Characteristics | Mortality Tree Species | Abies grandis / ABGR (Grand fir) | + | Tree Characteristics | Mortality Tree Species | Abies lasiocarpa / ABLA (Subalpine fir) | + | Tree Characteristics | Mortality Tree Species | Abies magnifica / ABMA (Red Fir) | + | Tree Characteristics | Mortality Tree Species | Abies procera / ABPR (Noble Fir) | + | Tree Characteristics | Mortality Tree Species | Acer barbatum / ACBA3 (Southern sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer macrophyllum / ACMA3 (Bigleaf maple) | + | Tree Characteristics | Mortality Tree Species | Acer negundo / ACNE2 (Boxelder) | + | Tree Characteristics | Mortality Tree Species | Acer nigrum / ACNI5 (Black maple) | + | Tree Characteristics | Mortality Tree Species | Acer pensylvanicum / ACPE (Striped maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharinum / ACSA2 (Silver maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharum / ACSA3 (Sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer spicatum / ACSP2 (Mountain maple) | + | Tree Characteristics | Mortality Tree Species | Aesculus flava / AEFL (Yellow buckeye) | + | Tree Characteristics | Mortality Tree Species | Aesculus glabra / AEGL (Ohio buckeye) | + | Tree Characteristics | Mortality Tree Species | Ailanthus altissima / AIAL (Ailanthus) | + | Tree Characteristics | Mortality Tree Species | Alnus rhombifolia / ALRH2 (White alder) | + | Tree Characteristics | Mortality Tree Species | Alnus rubra / ALRU2 (Red alder) | + | Tree Characteristics | Mortality Tree Species | Amelanchier arborea / AMAR3 (Common serviceberry) | + | Tree Characteristics | Mortality Tree Species | Arbutus menziesii / ARME (Pacific madrone) | + | Tree Characteristics | Mortality Tree Species | Betula alleghaniensis / BEAL2 (Yellow birch) | + | Tree Characteristics | Mortality Tree Species | Betula lenta / BELE (Sweet birch) | + | Tree Characteristics | Mortality Tree Species | Betula nigra / BENI (River Birch) | + | Tree Characteristics | Mortality Tree Species | Betula occidentalis / BEOC2 (Water birch) | + | Tree Characteristics | Mortality Tree Species | Betula papyrifera / BEPA (Paper birch) | + | Tree Characteristics | Mortality Tree Species | Betula species / BETSPP (Birches) | + | Tree Characteristics | Mortality Tree Species | Carya alba / CAAL27 (Mockernut hickory) | + | Tree Characteristics | Mortality Tree Species | Carpinus caroliniana / CACA18 (American hornbeam) | + | Tree Characteristics | Mortality Tree Species | Carya cordiformis / CACOL3 (Bitternut hickory) | + | Tree Characteristics | Mortality Tree Species | Castanea dentata / CADE12 (American chestnut) | + | Tree Characteristics | Mortality Tree Species | Calocedrus decurrens / CADE27 (Incense - cedar) | + | Tree Characteristics | Mortality Tree Species | Carya glabra / CAGL8 (Pignut hickory) | + | Tree Characteristics | Mortality Tree Species | Carya illinoinensis / CAIL2 (Pecan) | + | Tree Characteristics | Mortality Tree Species | Carya laciniosa / CALA21 (Shellbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya ovata / CAOV2 (Shagbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya species / CARSPP (Hickories) | + | Tree Characteristics | Mortality Tree Species | Carya texana / CATE9 (Black hickory) | + | Tree Characteristics | Mortality Tree Species | Cercis canadensis / CECA4 (Eastern redbud) | + | Tree Characteristics | Mortality Tree Species | Celtis laevigata / CELA (Sugarberry) | + | Tree Characteristics | Mortality Tree Species | Celtis occidentalis / CEOC (Common hackberry) | + | Tree Characteristics | Mortality Tree Species | Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis lawsoniana / CHLA (PortOrford - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis nootkatensis / CHNO (Alaska - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar) | + | Tree Characteristics | Mortality Tree Species | Cornus nuttallii / CONU4 (Pacific dogwood) | + | Tree Characteristics | Mortality Tree Species | Crataegus species / CRASPP (Hawthorns) | + | Tree Characteristics | Mortality Tree Species | Diospyros virginiana / DIVI5 (Persimmon) | + | Tree Characteristics | Mortality Tree Species | Fagus grandifolia / FAGR (American beech) | + | Tree Characteristics | Mortality Tree Species | Fraxinus americana / FRAM2 (White ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus species / FRASPP (Ashes) | + | Tree Characteristics | Mortality Tree Species | Fraxinus nigra / FRNI (Black ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus pennsylvanica / FRPE (Green ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus profunda / FRPR (Pumpkin ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus quadrangulata / FRQU (Blue ash) | + | Tree Characteristics | Mortality Tree Species | Gleditsia triacanthos / GLTR (Honeylocust) | + | Tree Characteristics | Mortality Tree Species | Gordonia lasianthus / GOLA (Loblolly bay) | + | Tree Characteristics | Mortality Tree Species | Gymnocladus dioicus / GYDI (Kentucky coffeetree) | + | Tree Characteristics | Mortality Tree Species | Halesia species / HALSPP (Silverbells) | + | Tree Characteristics | Mortality Tree Species | Ilex opaca / ILOP (American holly) | + | Tree Characteristics | Mortality Tree Species | Juglans cinerea / JUCI (Butternut) | + | Tree Characteristics | Mortality Tree Species | Juglans nigra / JUNI (Black walnut) | + | Tree Characteristics | Mortality Tree Species | Juniperus occidentalis / JUOC (Western juniper) | + | Tree Characteristics | Mortality Tree Species | Juniperus virginiana / JUVI (Eastern redcedar) | + | Tree Characteristics | Mortality Tree Species | Larix laricina / LALA (Tamarack) | + | Tree Characteristics | Mortality Tree Species | Larix lyallii / LALY (Subalpine Larch) | + | Tree Characteristics | Mortality Tree Species | Larix occidentalis / LAOC (Western Larch) | + | Tree Characteristics | Mortality Tree Species | Lithocarpus densiflorus / LIDE3 (Tanoak) | + | Tree Characteristics | Mortality Tree Species | Liquidambar styraciflua / LIST2 (Sweetgum) | + | Tree Characteristics | Mortality Tree Species | Liriodendron tulipifera / LITU (Tuliptree) | + | Tree Characteristics | Mortality Tree Species | Magnolia acuminata / MAAC (Cucumber - tree) | + | Tree Characteristics | Mortality Tree Species | Magnolia grandiflora / MAGR4 (Southern magnolia) | + | Tree Characteristics | Mortality Tree Species | Magnolia species / MAGSPP (Magnolias) | + | Tree Characteristics | Mortality Tree Species | Prunus species / MALPRU (cherry and plum species) | + | Tree Characteristics | Mortality Tree Species | Malus species / MALSPP (Apples) | + | Tree Characteristics | Mortality Tree Species | Magnolia macrophylla / MAMA2 (Bigleaf magnolia) | + | Tree Characteristics | Mortality Tree Species | Maclura pomifera / MAPO (Osage - orange) | + | Tree Characteristics | Mortality Tree Species | Magnolia virginiana / MAVI2 (Sweetbay) | + | Tree Characteristics | Mortality Tree Species | Morus alba / MOAL (White mulberry) | + | Tree Characteristics | Mortality Tree Species | Morus species / MORSPP (Mulberries) | + | Tree Characteristics | Mortality Tree Species | Morus rubra / MORU2 (Red mulberry) | + | Tree Characteristics | Mortality Tree Species | Nyssa aquatica / NYAQ2 (Water tupelo) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Nyssa ogeche / NYOG (Ogeechee tupelo) | + | Tree Characteristics | Mortality Tree Species | Ostrya virginiana / OSVI (Hophornbeam) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | + | Tree Characteristics | Mortality Tree Species | Paulownia tomentosa / PATO2 (Princesstree) | + | Tree Characteristics | Mortality Tree Species | Persea borbonia / PEBO (Redbay) | + | Tree Characteristics | Mortality Tree Species | Picea abies / PIAB (Norway spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus albicaulis / PIAL (Whitebark pine) | + | Tree Characteristics | Mortality Tree Species | Pinus attenuata / PIAT (Knobcone pine) | + | Tree Characteristics | Mortality Tree Species | Pinus banksiana / PIBA2 (Jack pine) | + | Tree Characteristics | Mortality Tree Species | Pinus clausa / PICL (Sand pine) | + | Tree Characteristics | Mortality Tree Species | Pinus contorta / PICO (Lodgepole pine) | + | Tree Characteristics | Mortality Tree Species | Pinus echinata / PIEC2 (Shortleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus elliottii / PIEL (Slash pine) | + | Tree Characteristics | Mortality Tree Species | Picea engelmannii / PIEN (Engelmann spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus flexilis / PIFL2 (Limber pine) | + | Tree Characteristics | Mortality Tree Species | Picea glauca / PIGL (White spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus glabra / PIGL2 (Spruce pine) | + | Tree Characteristics | Mortality Tree Species | Pinus jeffreyi / PIJE (Jeffrey pine) | + | Tree Characteristics | Mortality Tree Species | Pinus lambertiana / PILA (Sugar pine) | + | Tree Characteristics | Mortality Tree Species | Picea mariana / PIMA (Black spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus monticola / PIMO3 (Western white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus palustris / PIPA2 (Longleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus ponderosa / PIPO (Ponderosa pine) | + | Tree Characteristics | Mortality Tree Species | Picea pungens / PIPU (Blue spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus pungens / PIPU5 (Table mountain pine) | + | Tree Characteristics | Mortality Tree Species | Pinus resinosa / PIRE (Red pine) | + | Tree Characteristics | Mortality Tree Species | Pinus rigida / PIRI (Pitch pine) | + | Tree Characteristics | Mortality Tree Species | Picea rubens / PIRU (Red spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus sabiniana / PISA2 (Gray pine) | + | Tree Characteristics | Mortality Tree Species | Pinus serotina / PISE (Pond pine) | + | Tree Characteristics | Mortality Tree Species | Picea sitchensis / PISI (Sitka spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus strobus / PIST (Eastern white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus sylvestris / PISY (Scots pine) | + | Tree Characteristics | Mortality Tree Species | Pinus taeda / PITA (Loblolly pine) | + | Tree Characteristics | Mortality Tree Species | Pinus virginiana / PIVI2 (Virginia pine) | + | Tree Characteristics | Mortality Tree Species | Platanus occidentalis / PLOC (American sycamore) | + | Tree Characteristics | Mortality Tree Species | Populus balsamifera / POBA2 (Balsam poplar) | + | Tree Characteristics | Mortality Tree Species | Populus grandidentata / POGR4 (Bigtooth aspen) | + | Tree Characteristics | Mortality Tree Species | Populus heterophylla / POHE4 (Swamp cottonwood) | + | Tree Characteristics | Mortality Tree Species | Populus tremuloides / POTR12 (Quaking aspen) | + | Tree Characteristics | Mortality Tree Species | Prunus americana / PRAM (American plum) | + | Tree Characteristics | Mortality Tree Species | Prunus emarginata / PREM (Bitter cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus pensylvanica / PRPE2 (Pin cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus serotina / PRSE2 (Black cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus virginiana / PRVI (Chokecherry) | + | Tree Characteristics | Mortality Tree Species | Pseudotsuga menziesii / PSME (Douglas - fir) | + | Tree Characteristics | Mortality Tree Species | Quercus agrifolia / QUAG (California live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus chrysolepis / QUCH2 (Canyon live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus douglasii / QUDU (Blue oak) | + | Tree Characteristics | Mortality Tree Species | Quercus ellipsoidalis / QUEL (Northern pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus species / QUESPP (Oaks) | + | Tree Characteristics | Mortality Tree Species | Quercus falcata / QUFA (Southern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus imbricaria / QUIM (Shingle oak) | + | Tree Characteristics | Mortality Tree Species | Quercus incana / QUIN (Bluejack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laevis / QULA2 (Turkey oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laurifolia / QULA3 (Laurel oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lobata / QULO (Valley oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lyrata / QULY (Overcup oak) | + | Tree Characteristics | Mortality Tree Species | Quercus macrocarpa / QUMA2 (Bur oak) | + | Tree Characteristics | Mortality Tree Species | Quercus michauxii / QUMI (Swamp chestnut oak) | + | Tree Characteristics | Mortality Tree Species | Quercus muehlenbergii / QUMU (Chinkapin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus nigra / QUNI (Water oak) | + | Tree Characteristics | Mortality Tree Species | Quercus palustris / QUPA2 (Pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus phellos / QUPH (Willow oak) | + | Tree Characteristics | Mortality Tree Species | Quercus rubra / QURU (Northern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus shumardii / QUSH (Shumard oak) | + | Tree Characteristics | Mortality Tree Species | Quercus stellata / QUST (Post oak) | + | Tree Characteristics | Mortality Tree Species | Quercus texana / QUTE (Texas red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus virginiana / QUVI (Live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus wislizeni / QUWI2 (Interior live oak) | + | Tree Characteristics | Mortality Tree Species | Robinia pseudoacacia / ROPS (Black locust) | + | Tree Characteristics | Mortality Tree Species | Salix bebbiana / SABE2 (Bebb willow) | + | Tree Characteristics | Mortality Tree Species | Salix species / SALSPP (Willows) | + | Tree Characteristics | Mortality Tree Species | Salix nigra / SANI (Black willow) | + | Tree Characteristics | Mortality Tree Species | Sorbus americana / SOAM3 (American mountain - ash) | + | Tree Characteristics | Mortality Tree Species | Taxodium ascendens / TAAS (Pond cypress) | + | Tree Characteristics | Mortality Tree Species | Taxus brevifolia / TABR2 (Pacific yew) | + | Tree Characteristics | Mortality Tree Species | Taxodium distichum / TADI2 (Bald cypress) | + | Tree Characteristics | Mortality Tree Species | Thuja occidentalis / THOC2 (arborvitae) | + | Tree Characteristics | Mortality Tree Species | Thuja plicata / THPL (Western redcedar) | + | Tree Characteristics | Mortality Tree Species | Tilia americana / TIAM (American basswood) | + | Tree Characteristics | Mortality Tree Species | Tsuga canadensis / TSCA (Eastern hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga heterophylla / TSHE (Western hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga mertensiana / TSME (Mountain hemlock) | + | Tree Characteristics | Mortality Tree Species | Ulmus alata / ULAL (Winged elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus americana / ULAM (American elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus species / ULMSPP (Elms) | + | Tree Characteristics | Mortality Tree Species | Ulmus pumila / ULPU (Siberian elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus rubra / ULRU (Slippery elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus thomasii / ULTH (Rock elm) | + | Tree Characteristics | Mortality Tree Species | Umbellularia californica / UMCA (California - laurel) | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_crown-volume-scorched-flanking.feature b/features/results-page/results-page_mortality_crown-volume-scorched-flanking.feature new file mode 100644 index 000000000..5c3d1640f --- /dev/null +++ b/features/results-page/results-page_mortality_crown-volume-scorched-flanking.feature @@ -0,0 +1,238 @@ +@core +Feature: Mortality Results - Crown Volume Scorched Flanking + + @core + Scenario Outline: Crown Volume Scorched Flanking is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Crown Volume Scorched Flanking | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + + @extended + Scenario Outline: Crown Volume Scorched Flanking is displayed in results when inputs are set (Extended) + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Crown Volume Scorched Flanking | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Mortality Tree Species | Abies balsamea / ABBA (Balsam fir) | + | Tree Characteristics | Mortality Tree Species | Abies concolor / ABCO (White fir) | + | Tree Characteristics | Mortality Tree Species | Abies grandis / ABGR (Grand fir) | + | Tree Characteristics | Mortality Tree Species | Abies lasiocarpa / ABLA (Subalpine fir) | + | Tree Characteristics | Mortality Tree Species | Abies magnifica / ABMA (Red Fir) | + | Tree Characteristics | Mortality Tree Species | Abies procera / ABPR (Noble Fir) | + | Tree Characteristics | Mortality Tree Species | Acer barbatum / ACBA3 (Southern sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer macrophyllum / ACMA3 (Bigleaf maple) | + | Tree Characteristics | Mortality Tree Species | Acer negundo / ACNE2 (Boxelder) | + | Tree Characteristics | Mortality Tree Species | Acer nigrum / ACNI5 (Black maple) | + | Tree Characteristics | Mortality Tree Species | Acer pensylvanicum / ACPE (Striped maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharinum / ACSA2 (Silver maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharum / ACSA3 (Sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer spicatum / ACSP2 (Mountain maple) | + | Tree Characteristics | Mortality Tree Species | Aesculus flava / AEFL (Yellow buckeye) | + | Tree Characteristics | Mortality Tree Species | Aesculus glabra / AEGL (Ohio buckeye) | + | Tree Characteristics | Mortality Tree Species | Ailanthus altissima / AIAL (Ailanthus) | + | Tree Characteristics | Mortality Tree Species | Alnus rhombifolia / ALRH2 (White alder) | + | Tree Characteristics | Mortality Tree Species | Alnus rubra / ALRU2 (Red alder) | + | Tree Characteristics | Mortality Tree Species | Amelanchier arborea / AMAR3 (Common serviceberry) | + | Tree Characteristics | Mortality Tree Species | Arbutus menziesii / ARME (Pacific madrone) | + | Tree Characteristics | Mortality Tree Species | Betula alleghaniensis / BEAL2 (Yellow birch) | + | Tree Characteristics | Mortality Tree Species | Betula lenta / BELE (Sweet birch) | + | Tree Characteristics | Mortality Tree Species | Betula nigra / BENI (River Birch) | + | Tree Characteristics | Mortality Tree Species | Betula occidentalis / BEOC2 (Water birch) | + | Tree Characteristics | Mortality Tree Species | Betula papyrifera / BEPA (Paper birch) | + | Tree Characteristics | Mortality Tree Species | Betula species / BETSPP (Birches) | + | Tree Characteristics | Mortality Tree Species | Carya alba / CAAL27 (Mockernut hickory) | + | Tree Characteristics | Mortality Tree Species | Carpinus caroliniana / CACA18 (American hornbeam) | + | Tree Characteristics | Mortality Tree Species | Carya cordiformis / CACOL3 (Bitternut hickory) | + | Tree Characteristics | Mortality Tree Species | Castanea dentata / CADE12 (American chestnut) | + | Tree Characteristics | Mortality Tree Species | Calocedrus decurrens / CADE27 (Incense - cedar) | + | Tree Characteristics | Mortality Tree Species | Carya glabra / CAGL8 (Pignut hickory) | + | Tree Characteristics | Mortality Tree Species | Carya illinoinensis / CAIL2 (Pecan) | + | Tree Characteristics | Mortality Tree Species | Carya laciniosa / CALA21 (Shellbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya ovata / CAOV2 (Shagbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya species / CARSPP (Hickories) | + | Tree Characteristics | Mortality Tree Species | Carya texana / CATE9 (Black hickory) | + | Tree Characteristics | Mortality Tree Species | Cercis canadensis / CECA4 (Eastern redbud) | + | Tree Characteristics | Mortality Tree Species | Celtis laevigata / CELA (Sugarberry) | + | Tree Characteristics | Mortality Tree Species | Celtis occidentalis / CEOC (Common hackberry) | + | Tree Characteristics | Mortality Tree Species | Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis lawsoniana / CHLA (PortOrford - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis nootkatensis / CHNO (Alaska - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar) | + | Tree Characteristics | Mortality Tree Species | Cornus nuttallii / CONU4 (Pacific dogwood) | + | Tree Characteristics | Mortality Tree Species | Crataegus species / CRASPP (Hawthorns) | + | Tree Characteristics | Mortality Tree Species | Diospyros virginiana / DIVI5 (Persimmon) | + | Tree Characteristics | Mortality Tree Species | Fagus grandifolia / FAGR (American beech) | + | Tree Characteristics | Mortality Tree Species | Fraxinus americana / FRAM2 (White ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus species / FRASPP (Ashes) | + | Tree Characteristics | Mortality Tree Species | Fraxinus nigra / FRNI (Black ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus pennsylvanica / FRPE (Green ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus profunda / FRPR (Pumpkin ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus quadrangulata / FRQU (Blue ash) | + | Tree Characteristics | Mortality Tree Species | Gleditsia triacanthos / GLTR (Honeylocust) | + | Tree Characteristics | Mortality Tree Species | Gordonia lasianthus / GOLA (Loblolly bay) | + | Tree Characteristics | Mortality Tree Species | Gymnocladus dioicus / GYDI (Kentucky coffeetree) | + | Tree Characteristics | Mortality Tree Species | Halesia species / HALSPP (Silverbells) | + | Tree Characteristics | Mortality Tree Species | Ilex opaca / ILOP (American holly) | + | Tree Characteristics | Mortality Tree Species | Juglans cinerea / JUCI (Butternut) | + | Tree Characteristics | Mortality Tree Species | Juglans nigra / JUNI (Black walnut) | + | Tree Characteristics | Mortality Tree Species | Juniperus occidentalis / JUOC (Western juniper) | + | Tree Characteristics | Mortality Tree Species | Juniperus virginiana / JUVI (Eastern redcedar) | + | Tree Characteristics | Mortality Tree Species | Larix laricina / LALA (Tamarack) | + | Tree Characteristics | Mortality Tree Species | Larix lyallii / LALY (Subalpine Larch) | + | Tree Characteristics | Mortality Tree Species | Larix occidentalis / LAOC (Western Larch) | + | Tree Characteristics | Mortality Tree Species | Lithocarpus densiflorus / LIDE3 (Tanoak) | + | Tree Characteristics | Mortality Tree Species | Liquidambar styraciflua / LIST2 (Sweetgum) | + | Tree Characteristics | Mortality Tree Species | Liriodendron tulipifera / LITU (Tuliptree) | + | Tree Characteristics | Mortality Tree Species | Magnolia acuminata / MAAC (Cucumber - tree) | + | Tree Characteristics | Mortality Tree Species | Magnolia grandiflora / MAGR4 (Southern magnolia) | + | Tree Characteristics | Mortality Tree Species | Magnolia species / MAGSPP (Magnolias) | + | Tree Characteristics | Mortality Tree Species | Prunus species / MALPRU (cherry and plum species) | + | Tree Characteristics | Mortality Tree Species | Malus species / MALSPP (Apples) | + | Tree Characteristics | Mortality Tree Species | Magnolia macrophylla / MAMA2 (Bigleaf magnolia) | + | Tree Characteristics | Mortality Tree Species | Maclura pomifera / MAPO (Osage - orange) | + | Tree Characteristics | Mortality Tree Species | Magnolia virginiana / MAVI2 (Sweetbay) | + | Tree Characteristics | Mortality Tree Species | Morus alba / MOAL (White mulberry) | + | Tree Characteristics | Mortality Tree Species | Morus species / MORSPP (Mulberries) | + | Tree Characteristics | Mortality Tree Species | Morus rubra / MORU2 (Red mulberry) | + | Tree Characteristics | Mortality Tree Species | Nyssa aquatica / NYAQ2 (Water tupelo) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Nyssa ogeche / NYOG (Ogeechee tupelo) | + | Tree Characteristics | Mortality Tree Species | Ostrya virginiana / OSVI (Hophornbeam) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | + | Tree Characteristics | Mortality Tree Species | Paulownia tomentosa / PATO2 (Princesstree) | + | Tree Characteristics | Mortality Tree Species | Persea borbonia / PEBO (Redbay) | + | Tree Characteristics | Mortality Tree Species | Picea abies / PIAB (Norway spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus albicaulis / PIAL (Whitebark pine) | + | Tree Characteristics | Mortality Tree Species | Pinus attenuata / PIAT (Knobcone pine) | + | Tree Characteristics | Mortality Tree Species | Pinus banksiana / PIBA2 (Jack pine) | + | Tree Characteristics | Mortality Tree Species | Pinus clausa / PICL (Sand pine) | + | Tree Characteristics | Mortality Tree Species | Pinus contorta / PICO (Lodgepole pine) | + | Tree Characteristics | Mortality Tree Species | Pinus echinata / PIEC2 (Shortleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus elliottii / PIEL (Slash pine) | + | Tree Characteristics | Mortality Tree Species | Picea engelmannii / PIEN (Engelmann spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus flexilis / PIFL2 (Limber pine) | + | Tree Characteristics | Mortality Tree Species | Picea glauca / PIGL (White spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus glabra / PIGL2 (Spruce pine) | + | Tree Characteristics | Mortality Tree Species | Pinus jeffreyi / PIJE (Jeffrey pine) | + | Tree Characteristics | Mortality Tree Species | Pinus lambertiana / PILA (Sugar pine) | + | Tree Characteristics | Mortality Tree Species | Picea mariana / PIMA (Black spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus monticola / PIMO3 (Western white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus palustris / PIPA2 (Longleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus ponderosa / PIPO (Ponderosa pine) | + | Tree Characteristics | Mortality Tree Species | Picea pungens / PIPU (Blue spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus pungens / PIPU5 (Table mountain pine) | + | Tree Characteristics | Mortality Tree Species | Pinus resinosa / PIRE (Red pine) | + | Tree Characteristics | Mortality Tree Species | Pinus rigida / PIRI (Pitch pine) | + | Tree Characteristics | Mortality Tree Species | Picea rubens / PIRU (Red spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus sabiniana / PISA2 (Gray pine) | + | Tree Characteristics | Mortality Tree Species | Pinus serotina / PISE (Pond pine) | + | Tree Characteristics | Mortality Tree Species | Picea sitchensis / PISI (Sitka spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus strobus / PIST (Eastern white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus sylvestris / PISY (Scots pine) | + | Tree Characteristics | Mortality Tree Species | Pinus taeda / PITA (Loblolly pine) | + | Tree Characteristics | Mortality Tree Species | Pinus virginiana / PIVI2 (Virginia pine) | + | Tree Characteristics | Mortality Tree Species | Platanus occidentalis / PLOC (American sycamore) | + | Tree Characteristics | Mortality Tree Species | Populus balsamifera / POBA2 (Balsam poplar) | + | Tree Characteristics | Mortality Tree Species | Populus grandidentata / POGR4 (Bigtooth aspen) | + | Tree Characteristics | Mortality Tree Species | Populus heterophylla / POHE4 (Swamp cottonwood) | + | Tree Characteristics | Mortality Tree Species | Populus tremuloides / POTR12 (Quaking aspen) | + | Tree Characteristics | Mortality Tree Species | Prunus americana / PRAM (American plum) | + | Tree Characteristics | Mortality Tree Species | Prunus emarginata / PREM (Bitter cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus pensylvanica / PRPE2 (Pin cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus serotina / PRSE2 (Black cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus virginiana / PRVI (Chokecherry) | + | Tree Characteristics | Mortality Tree Species | Pseudotsuga menziesii / PSME (Douglas - fir) | + | Tree Characteristics | Mortality Tree Species | Quercus agrifolia / QUAG (California live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus chrysolepis / QUCH2 (Canyon live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus douglasii / QUDU (Blue oak) | + | Tree Characteristics | Mortality Tree Species | Quercus ellipsoidalis / QUEL (Northern pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus species / QUESPP (Oaks) | + | Tree Characteristics | Mortality Tree Species | Quercus falcata / QUFA (Southern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus imbricaria / QUIM (Shingle oak) | + | Tree Characteristics | Mortality Tree Species | Quercus incana / QUIN (Bluejack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laevis / QULA2 (Turkey oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laurifolia / QULA3 (Laurel oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lobata / QULO (Valley oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lyrata / QULY (Overcup oak) | + | Tree Characteristics | Mortality Tree Species | Quercus macrocarpa / QUMA2 (Bur oak) | + | Tree Characteristics | Mortality Tree Species | Quercus michauxii / QUMI (Swamp chestnut oak) | + | Tree Characteristics | Mortality Tree Species | Quercus muehlenbergii / QUMU (Chinkapin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus nigra / QUNI (Water oak) | + | Tree Characteristics | Mortality Tree Species | Quercus palustris / QUPA2 (Pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus phellos / QUPH (Willow oak) | + | Tree Characteristics | Mortality Tree Species | Quercus rubra / QURU (Northern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus shumardii / QUSH (Shumard oak) | + | Tree Characteristics | Mortality Tree Species | Quercus stellata / QUST (Post oak) | + | Tree Characteristics | Mortality Tree Species | Quercus texana / QUTE (Texas red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus virginiana / QUVI (Live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus wislizeni / QUWI2 (Interior live oak) | + | Tree Characteristics | Mortality Tree Species | Robinia pseudoacacia / ROPS (Black locust) | + | Tree Characteristics | Mortality Tree Species | Salix bebbiana / SABE2 (Bebb willow) | + | Tree Characteristics | Mortality Tree Species | Salix species / SALSPP (Willows) | + | Tree Characteristics | Mortality Tree Species | Salix nigra / SANI (Black willow) | + | Tree Characteristics | Mortality Tree Species | Sorbus americana / SOAM3 (American mountain - ash) | + | Tree Characteristics | Mortality Tree Species | Taxodium ascendens / TAAS (Pond cypress) | + | Tree Characteristics | Mortality Tree Species | Taxus brevifolia / TABR2 (Pacific yew) | + | Tree Characteristics | Mortality Tree Species | Taxodium distichum / TADI2 (Bald cypress) | + | Tree Characteristics | Mortality Tree Species | Thuja occidentalis / THOC2 (arborvitae) | + | Tree Characteristics | Mortality Tree Species | Thuja plicata / THPL (Western redcedar) | + | Tree Characteristics | Mortality Tree Species | Tilia americana / TIAM (American basswood) | + | Tree Characteristics | Mortality Tree Species | Tsuga canadensis / TSCA (Eastern hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga heterophylla / TSHE (Western hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga mertensiana / TSME (Mountain hemlock) | + | Tree Characteristics | Mortality Tree Species | Ulmus alata / ULAL (Winged elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus americana / ULAM (American elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus species / ULMSPP (Elms) | + | Tree Characteristics | Mortality Tree Species | Ulmus pumila / ULPU (Siberian elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus rubra / ULRU (Slippery elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus thomasii / ULTH (Rock elm) | + | Tree Characteristics | Mortality Tree Species | Umbellularia californica / UMCA (California - laurel) | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_cvs-or-cls.feature b/features/results-page/results-page_mortality_cvs-or-cls.feature new file mode 100644 index 000000000..077b7d5d3 --- /dev/null +++ b/features/results-page/results-page_mortality_cvs-or-cls.feature @@ -0,0 +1,27 @@ +@core +Feature: Mortality Results - CVS or CLS + + @core + Scenario: CVS or CLS is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + | Tree Characteristics | Mortality Tree Species | | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Canopy Height | | 10 | + | Tree Characteristics | Crown Ratio | | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | | 10 | + | Scorch | Air Temperature | | 70 | + Then "the following outputs are displayed in the results page" + | output | + | CVS or CLS | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_equation-type.feature b/features/results-page/results-page_mortality_equation-type.feature new file mode 100644 index 000000000..709c2ca18 --- /dev/null +++ b/features/results-page/results-page_mortality_equation-type.feature @@ -0,0 +1,27 @@ +@core +Feature: Mortality Results - Equation Type + + @core + Scenario: Equation Type is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + | Tree Characteristics | Mortality Tree Species | | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Canopy Height | | 10 | + | Tree Characteristics | Crown Ratio | | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | | 10 | + | Scorch | Air Temperature | | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Equation Type | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_probability-of-mortality-backing.feature b/features/results-page/results-page_mortality_probability-of-mortality-backing.feature new file mode 100644 index 000000000..84e0158b1 --- /dev/null +++ b/features/results-page/results-page_mortality_probability-of-mortality-backing.feature @@ -0,0 +1,27 @@ +@core +Feature: Mortality Results - Probability of Mortality Backing + + @core + Scenario: Probability of Mortality Backing is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + | Tree Characteristics | Mortality Tree Species | | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Canopy Height | | 10 | + | Tree Characteristics | Crown Ratio | | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | | 10 | + | Scorch | Air Temperature | | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Probability of Mortality Backing | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_probability-of-mortality-flanking.feature b/features/results-page/results-page_mortality_probability-of-mortality-flanking.feature new file mode 100644 index 000000000..4434bd921 --- /dev/null +++ b/features/results-page/results-page_mortality_probability-of-mortality-flanking.feature @@ -0,0 +1,27 @@ +@core +Feature: Mortality Results - Probability of Mortality Flanking + + @core + Scenario: Probability of Mortality Flanking is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + | Tree Characteristics | Mortality Tree Species | | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Canopy Height | | 10 | + | Tree Characteristics | Crown Ratio | | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | | 10 | + | Scorch | Air Temperature | | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Probability of Mortality Flanking | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_probability-of-mortality.feature b/features/results-page/results-page_mortality_probability-of-mortality.feature new file mode 100644 index 000000000..13bcb10dc --- /dev/null +++ b/features/results-page/results-page_mortality_probability-of-mortality.feature @@ -0,0 +1,27 @@ +@core +Feature: Mortality Results - Probability Of Mortality + + @core + Scenario: Probability Of Mortality is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + | Tree Characteristics | Mortality Tree Species | | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Canopy Height | | 10 | + | Tree Characteristics | Crown Ratio | | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | | 10 | + | Scorch | Air Temperature | | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Probability Of Mortality | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_scorch-height-backing.feature b/features/results-page/results-page_mortality_scorch-height-backing.feature new file mode 100644 index 000000000..4a6656ba6 --- /dev/null +++ b/features/results-page/results-page_mortality_scorch-height-backing.feature @@ -0,0 +1,238 @@ +@core +Feature: Mortality Results - Scorch Height Backing + + @core + Scenario Outline: Scorch Height Backing is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Scorch Height Backing | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + + @extended + Scenario Outline: Scorch Height Backing is displayed in results when inputs are set (Extended) + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Scorch Height Backing | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Mortality Tree Species | Abies balsamea / ABBA (Balsam fir) | + | Tree Characteristics | Mortality Tree Species | Abies concolor / ABCO (White fir) | + | Tree Characteristics | Mortality Tree Species | Abies grandis / ABGR (Grand fir) | + | Tree Characteristics | Mortality Tree Species | Abies lasiocarpa / ABLA (Subalpine fir) | + | Tree Characteristics | Mortality Tree Species | Abies magnifica / ABMA (Red Fir) | + | Tree Characteristics | Mortality Tree Species | Abies procera / ABPR (Noble Fir) | + | Tree Characteristics | Mortality Tree Species | Acer barbatum / ACBA3 (Southern sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer macrophyllum / ACMA3 (Bigleaf maple) | + | Tree Characteristics | Mortality Tree Species | Acer negundo / ACNE2 (Boxelder) | + | Tree Characteristics | Mortality Tree Species | Acer nigrum / ACNI5 (Black maple) | + | Tree Characteristics | Mortality Tree Species | Acer pensylvanicum / ACPE (Striped maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharinum / ACSA2 (Silver maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharum / ACSA3 (Sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer spicatum / ACSP2 (Mountain maple) | + | Tree Characteristics | Mortality Tree Species | Aesculus flava / AEFL (Yellow buckeye) | + | Tree Characteristics | Mortality Tree Species | Aesculus glabra / AEGL (Ohio buckeye) | + | Tree Characteristics | Mortality Tree Species | Ailanthus altissima / AIAL (Ailanthus) | + | Tree Characteristics | Mortality Tree Species | Alnus rhombifolia / ALRH2 (White alder) | + | Tree Characteristics | Mortality Tree Species | Alnus rubra / ALRU2 (Red alder) | + | Tree Characteristics | Mortality Tree Species | Amelanchier arborea / AMAR3 (Common serviceberry) | + | Tree Characteristics | Mortality Tree Species | Arbutus menziesii / ARME (Pacific madrone) | + | Tree Characteristics | Mortality Tree Species | Betula alleghaniensis / BEAL2 (Yellow birch) | + | Tree Characteristics | Mortality Tree Species | Betula lenta / BELE (Sweet birch) | + | Tree Characteristics | Mortality Tree Species | Betula nigra / BENI (River Birch) | + | Tree Characteristics | Mortality Tree Species | Betula occidentalis / BEOC2 (Water birch) | + | Tree Characteristics | Mortality Tree Species | Betula papyrifera / BEPA (Paper birch) | + | Tree Characteristics | Mortality Tree Species | Betula species / BETSPP (Birches) | + | Tree Characteristics | Mortality Tree Species | Carya alba / CAAL27 (Mockernut hickory) | + | Tree Characteristics | Mortality Tree Species | Carpinus caroliniana / CACA18 (American hornbeam) | + | Tree Characteristics | Mortality Tree Species | Carya cordiformis / CACOL3 (Bitternut hickory) | + | Tree Characteristics | Mortality Tree Species | Castanea dentata / CADE12 (American chestnut) | + | Tree Characteristics | Mortality Tree Species | Calocedrus decurrens / CADE27 (Incense - cedar) | + | Tree Characteristics | Mortality Tree Species | Carya glabra / CAGL8 (Pignut hickory) | + | Tree Characteristics | Mortality Tree Species | Carya illinoinensis / CAIL2 (Pecan) | + | Tree Characteristics | Mortality Tree Species | Carya laciniosa / CALA21 (Shellbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya ovata / CAOV2 (Shagbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya species / CARSPP (Hickories) | + | Tree Characteristics | Mortality Tree Species | Carya texana / CATE9 (Black hickory) | + | Tree Characteristics | Mortality Tree Species | Cercis canadensis / CECA4 (Eastern redbud) | + | Tree Characteristics | Mortality Tree Species | Celtis laevigata / CELA (Sugarberry) | + | Tree Characteristics | Mortality Tree Species | Celtis occidentalis / CEOC (Common hackberry) | + | Tree Characteristics | Mortality Tree Species | Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis lawsoniana / CHLA (PortOrford - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis nootkatensis / CHNO (Alaska - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar) | + | Tree Characteristics | Mortality Tree Species | Cornus nuttallii / CONU4 (Pacific dogwood) | + | Tree Characteristics | Mortality Tree Species | Crataegus species / CRASPP (Hawthorns) | + | Tree Characteristics | Mortality Tree Species | Diospyros virginiana / DIVI5 (Persimmon) | + | Tree Characteristics | Mortality Tree Species | Fagus grandifolia / FAGR (American beech) | + | Tree Characteristics | Mortality Tree Species | Fraxinus americana / FRAM2 (White ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus species / FRASPP (Ashes) | + | Tree Characteristics | Mortality Tree Species | Fraxinus nigra / FRNI (Black ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus pennsylvanica / FRPE (Green ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus profunda / FRPR (Pumpkin ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus quadrangulata / FRQU (Blue ash) | + | Tree Characteristics | Mortality Tree Species | Gleditsia triacanthos / GLTR (Honeylocust) | + | Tree Characteristics | Mortality Tree Species | Gordonia lasianthus / GOLA (Loblolly bay) | + | Tree Characteristics | Mortality Tree Species | Gymnocladus dioicus / GYDI (Kentucky coffeetree) | + | Tree Characteristics | Mortality Tree Species | Halesia species / HALSPP (Silverbells) | + | Tree Characteristics | Mortality Tree Species | Ilex opaca / ILOP (American holly) | + | Tree Characteristics | Mortality Tree Species | Juglans cinerea / JUCI (Butternut) | + | Tree Characteristics | Mortality Tree Species | Juglans nigra / JUNI (Black walnut) | + | Tree Characteristics | Mortality Tree Species | Juniperus occidentalis / JUOC (Western juniper) | + | Tree Characteristics | Mortality Tree Species | Juniperus virginiana / JUVI (Eastern redcedar) | + | Tree Characteristics | Mortality Tree Species | Larix laricina / LALA (Tamarack) | + | Tree Characteristics | Mortality Tree Species | Larix lyallii / LALY (Subalpine Larch) | + | Tree Characteristics | Mortality Tree Species | Larix occidentalis / LAOC (Western Larch) | + | Tree Characteristics | Mortality Tree Species | Lithocarpus densiflorus / LIDE3 (Tanoak) | + | Tree Characteristics | Mortality Tree Species | Liquidambar styraciflua / LIST2 (Sweetgum) | + | Tree Characteristics | Mortality Tree Species | Liriodendron tulipifera / LITU (Tuliptree) | + | Tree Characteristics | Mortality Tree Species | Magnolia acuminata / MAAC (Cucumber - tree) | + | Tree Characteristics | Mortality Tree Species | Magnolia grandiflora / MAGR4 (Southern magnolia) | + | Tree Characteristics | Mortality Tree Species | Magnolia species / MAGSPP (Magnolias) | + | Tree Characteristics | Mortality Tree Species | Prunus species / MALPRU (cherry and plum species) | + | Tree Characteristics | Mortality Tree Species | Malus species / MALSPP (Apples) | + | Tree Characteristics | Mortality Tree Species | Magnolia macrophylla / MAMA2 (Bigleaf magnolia) | + | Tree Characteristics | Mortality Tree Species | Maclura pomifera / MAPO (Osage - orange) | + | Tree Characteristics | Mortality Tree Species | Magnolia virginiana / MAVI2 (Sweetbay) | + | Tree Characteristics | Mortality Tree Species | Morus alba / MOAL (White mulberry) | + | Tree Characteristics | Mortality Tree Species | Morus species / MORSPP (Mulberries) | + | Tree Characteristics | Mortality Tree Species | Morus rubra / MORU2 (Red mulberry) | + | Tree Characteristics | Mortality Tree Species | Nyssa aquatica / NYAQ2 (Water tupelo) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Nyssa ogeche / NYOG (Ogeechee tupelo) | + | Tree Characteristics | Mortality Tree Species | Ostrya virginiana / OSVI (Hophornbeam) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | + | Tree Characteristics | Mortality Tree Species | Paulownia tomentosa / PATO2 (Princesstree) | + | Tree Characteristics | Mortality Tree Species | Persea borbonia / PEBO (Redbay) | + | Tree Characteristics | Mortality Tree Species | Picea abies / PIAB (Norway spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus albicaulis / PIAL (Whitebark pine) | + | Tree Characteristics | Mortality Tree Species | Pinus attenuata / PIAT (Knobcone pine) | + | Tree Characteristics | Mortality Tree Species | Pinus banksiana / PIBA2 (Jack pine) | + | Tree Characteristics | Mortality Tree Species | Pinus clausa / PICL (Sand pine) | + | Tree Characteristics | Mortality Tree Species | Pinus contorta / PICO (Lodgepole pine) | + | Tree Characteristics | Mortality Tree Species | Pinus echinata / PIEC2 (Shortleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus elliottii / PIEL (Slash pine) | + | Tree Characteristics | Mortality Tree Species | Picea engelmannii / PIEN (Engelmann spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus flexilis / PIFL2 (Limber pine) | + | Tree Characteristics | Mortality Tree Species | Picea glauca / PIGL (White spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus glabra / PIGL2 (Spruce pine) | + | Tree Characteristics | Mortality Tree Species | Pinus jeffreyi / PIJE (Jeffrey pine) | + | Tree Characteristics | Mortality Tree Species | Pinus lambertiana / PILA (Sugar pine) | + | Tree Characteristics | Mortality Tree Species | Picea mariana / PIMA (Black spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus monticola / PIMO3 (Western white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus palustris / PIPA2 (Longleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus ponderosa / PIPO (Ponderosa pine) | + | Tree Characteristics | Mortality Tree Species | Picea pungens / PIPU (Blue spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus pungens / PIPU5 (Table mountain pine) | + | Tree Characteristics | Mortality Tree Species | Pinus resinosa / PIRE (Red pine) | + | Tree Characteristics | Mortality Tree Species | Pinus rigida / PIRI (Pitch pine) | + | Tree Characteristics | Mortality Tree Species | Picea rubens / PIRU (Red spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus sabiniana / PISA2 (Gray pine) | + | Tree Characteristics | Mortality Tree Species | Pinus serotina / PISE (Pond pine) | + | Tree Characteristics | Mortality Tree Species | Picea sitchensis / PISI (Sitka spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus strobus / PIST (Eastern white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus sylvestris / PISY (Scots pine) | + | Tree Characteristics | Mortality Tree Species | Pinus taeda / PITA (Loblolly pine) | + | Tree Characteristics | Mortality Tree Species | Pinus virginiana / PIVI2 (Virginia pine) | + | Tree Characteristics | Mortality Tree Species | Platanus occidentalis / PLOC (American sycamore) | + | Tree Characteristics | Mortality Tree Species | Populus balsamifera / POBA2 (Balsam poplar) | + | Tree Characteristics | Mortality Tree Species | Populus grandidentata / POGR4 (Bigtooth aspen) | + | Tree Characteristics | Mortality Tree Species | Populus heterophylla / POHE4 (Swamp cottonwood) | + | Tree Characteristics | Mortality Tree Species | Populus tremuloides / POTR12 (Quaking aspen) | + | Tree Characteristics | Mortality Tree Species | Prunus americana / PRAM (American plum) | + | Tree Characteristics | Mortality Tree Species | Prunus emarginata / PREM (Bitter cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus pensylvanica / PRPE2 (Pin cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus serotina / PRSE2 (Black cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus virginiana / PRVI (Chokecherry) | + | Tree Characteristics | Mortality Tree Species | Pseudotsuga menziesii / PSME (Douglas - fir) | + | Tree Characteristics | Mortality Tree Species | Quercus agrifolia / QUAG (California live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus chrysolepis / QUCH2 (Canyon live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus douglasii / QUDU (Blue oak) | + | Tree Characteristics | Mortality Tree Species | Quercus ellipsoidalis / QUEL (Northern pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus species / QUESPP (Oaks) | + | Tree Characteristics | Mortality Tree Species | Quercus falcata / QUFA (Southern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus imbricaria / QUIM (Shingle oak) | + | Tree Characteristics | Mortality Tree Species | Quercus incana / QUIN (Bluejack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laevis / QULA2 (Turkey oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laurifolia / QULA3 (Laurel oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lobata / QULO (Valley oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lyrata / QULY (Overcup oak) | + | Tree Characteristics | Mortality Tree Species | Quercus macrocarpa / QUMA2 (Bur oak) | + | Tree Characteristics | Mortality Tree Species | Quercus michauxii / QUMI (Swamp chestnut oak) | + | Tree Characteristics | Mortality Tree Species | Quercus muehlenbergii / QUMU (Chinkapin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus nigra / QUNI (Water oak) | + | Tree Characteristics | Mortality Tree Species | Quercus palustris / QUPA2 (Pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus phellos / QUPH (Willow oak) | + | Tree Characteristics | Mortality Tree Species | Quercus rubra / QURU (Northern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus shumardii / QUSH (Shumard oak) | + | Tree Characteristics | Mortality Tree Species | Quercus stellata / QUST (Post oak) | + | Tree Characteristics | Mortality Tree Species | Quercus texana / QUTE (Texas red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus virginiana / QUVI (Live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus wislizeni / QUWI2 (Interior live oak) | + | Tree Characteristics | Mortality Tree Species | Robinia pseudoacacia / ROPS (Black locust) | + | Tree Characteristics | Mortality Tree Species | Salix bebbiana / SABE2 (Bebb willow) | + | Tree Characteristics | Mortality Tree Species | Salix species / SALSPP (Willows) | + | Tree Characteristics | Mortality Tree Species | Salix nigra / SANI (Black willow) | + | Tree Characteristics | Mortality Tree Species | Sorbus americana / SOAM3 (American mountain - ash) | + | Tree Characteristics | Mortality Tree Species | Taxodium ascendens / TAAS (Pond cypress) | + | Tree Characteristics | Mortality Tree Species | Taxus brevifolia / TABR2 (Pacific yew) | + | Tree Characteristics | Mortality Tree Species | Taxodium distichum / TADI2 (Bald cypress) | + | Tree Characteristics | Mortality Tree Species | Thuja occidentalis / THOC2 (arborvitae) | + | Tree Characteristics | Mortality Tree Species | Thuja plicata / THPL (Western redcedar) | + | Tree Characteristics | Mortality Tree Species | Tilia americana / TIAM (American basswood) | + | Tree Characteristics | Mortality Tree Species | Tsuga canadensis / TSCA (Eastern hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga heterophylla / TSHE (Western hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga mertensiana / TSME (Mountain hemlock) | + | Tree Characteristics | Mortality Tree Species | Ulmus alata / ULAL (Winged elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus americana / ULAM (American elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus species / ULMSPP (Elms) | + | Tree Characteristics | Mortality Tree Species | Ulmus pumila / ULPU (Siberian elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus rubra / ULRU (Slippery elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus thomasii / ULTH (Rock elm) | + | Tree Characteristics | Mortality Tree Species | Umbellularia californica / UMCA (California - laurel) | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_scorch-height-flanking.feature b/features/results-page/results-page_mortality_scorch-height-flanking.feature new file mode 100644 index 000000000..402043741 --- /dev/null +++ b/features/results-page/results-page_mortality_scorch-height-flanking.feature @@ -0,0 +1,238 @@ +@core +Feature: Mortality Results - Scorch Height Flanking + + @core + Scenario Outline: Scorch Height Flanking is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Scorch Height Flanking | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + + @extended + Scenario Outline: Scorch Height Flanking is displayed in results when inputs are set (Extended) + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Scorch Height Flanking | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Mortality Tree Species | Abies balsamea / ABBA (Balsam fir) | + | Tree Characteristics | Mortality Tree Species | Abies concolor / ABCO (White fir) | + | Tree Characteristics | Mortality Tree Species | Abies grandis / ABGR (Grand fir) | + | Tree Characteristics | Mortality Tree Species | Abies lasiocarpa / ABLA (Subalpine fir) | + | Tree Characteristics | Mortality Tree Species | Abies magnifica / ABMA (Red Fir) | + | Tree Characteristics | Mortality Tree Species | Abies procera / ABPR (Noble Fir) | + | Tree Characteristics | Mortality Tree Species | Acer barbatum / ACBA3 (Southern sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer macrophyllum / ACMA3 (Bigleaf maple) | + | Tree Characteristics | Mortality Tree Species | Acer negundo / ACNE2 (Boxelder) | + | Tree Characteristics | Mortality Tree Species | Acer nigrum / ACNI5 (Black maple) | + | Tree Characteristics | Mortality Tree Species | Acer pensylvanicum / ACPE (Striped maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharinum / ACSA2 (Silver maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharum / ACSA3 (Sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer spicatum / ACSP2 (Mountain maple) | + | Tree Characteristics | Mortality Tree Species | Aesculus flava / AEFL (Yellow buckeye) | + | Tree Characteristics | Mortality Tree Species | Aesculus glabra / AEGL (Ohio buckeye) | + | Tree Characteristics | Mortality Tree Species | Ailanthus altissima / AIAL (Ailanthus) | + | Tree Characteristics | Mortality Tree Species | Alnus rhombifolia / ALRH2 (White alder) | + | Tree Characteristics | Mortality Tree Species | Alnus rubra / ALRU2 (Red alder) | + | Tree Characteristics | Mortality Tree Species | Amelanchier arborea / AMAR3 (Common serviceberry) | + | Tree Characteristics | Mortality Tree Species | Arbutus menziesii / ARME (Pacific madrone) | + | Tree Characteristics | Mortality Tree Species | Betula alleghaniensis / BEAL2 (Yellow birch) | + | Tree Characteristics | Mortality Tree Species | Betula lenta / BELE (Sweet birch) | + | Tree Characteristics | Mortality Tree Species | Betula nigra / BENI (River Birch) | + | Tree Characteristics | Mortality Tree Species | Betula occidentalis / BEOC2 (Water birch) | + | Tree Characteristics | Mortality Tree Species | Betula papyrifera / BEPA (Paper birch) | + | Tree Characteristics | Mortality Tree Species | Betula species / BETSPP (Birches) | + | Tree Characteristics | Mortality Tree Species | Carya alba / CAAL27 (Mockernut hickory) | + | Tree Characteristics | Mortality Tree Species | Carpinus caroliniana / CACA18 (American hornbeam) | + | Tree Characteristics | Mortality Tree Species | Carya cordiformis / CACOL3 (Bitternut hickory) | + | Tree Characteristics | Mortality Tree Species | Castanea dentata / CADE12 (American chestnut) | + | Tree Characteristics | Mortality Tree Species | Calocedrus decurrens / CADE27 (Incense - cedar) | + | Tree Characteristics | Mortality Tree Species | Carya glabra / CAGL8 (Pignut hickory) | + | Tree Characteristics | Mortality Tree Species | Carya illinoinensis / CAIL2 (Pecan) | + | Tree Characteristics | Mortality Tree Species | Carya laciniosa / CALA21 (Shellbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya ovata / CAOV2 (Shagbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya species / CARSPP (Hickories) | + | Tree Characteristics | Mortality Tree Species | Carya texana / CATE9 (Black hickory) | + | Tree Characteristics | Mortality Tree Species | Cercis canadensis / CECA4 (Eastern redbud) | + | Tree Characteristics | Mortality Tree Species | Celtis laevigata / CELA (Sugarberry) | + | Tree Characteristics | Mortality Tree Species | Celtis occidentalis / CEOC (Common hackberry) | + | Tree Characteristics | Mortality Tree Species | Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis lawsoniana / CHLA (PortOrford - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis nootkatensis / CHNO (Alaska - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar) | + | Tree Characteristics | Mortality Tree Species | Cornus nuttallii / CONU4 (Pacific dogwood) | + | Tree Characteristics | Mortality Tree Species | Crataegus species / CRASPP (Hawthorns) | + | Tree Characteristics | Mortality Tree Species | Diospyros virginiana / DIVI5 (Persimmon) | + | Tree Characteristics | Mortality Tree Species | Fagus grandifolia / FAGR (American beech) | + | Tree Characteristics | Mortality Tree Species | Fraxinus americana / FRAM2 (White ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus species / FRASPP (Ashes) | + | Tree Characteristics | Mortality Tree Species | Fraxinus nigra / FRNI (Black ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus pennsylvanica / FRPE (Green ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus profunda / FRPR (Pumpkin ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus quadrangulata / FRQU (Blue ash) | + | Tree Characteristics | Mortality Tree Species | Gleditsia triacanthos / GLTR (Honeylocust) | + | Tree Characteristics | Mortality Tree Species | Gordonia lasianthus / GOLA (Loblolly bay) | + | Tree Characteristics | Mortality Tree Species | Gymnocladus dioicus / GYDI (Kentucky coffeetree) | + | Tree Characteristics | Mortality Tree Species | Halesia species / HALSPP (Silverbells) | + | Tree Characteristics | Mortality Tree Species | Ilex opaca / ILOP (American holly) | + | Tree Characteristics | Mortality Tree Species | Juglans cinerea / JUCI (Butternut) | + | Tree Characteristics | Mortality Tree Species | Juglans nigra / JUNI (Black walnut) | + | Tree Characteristics | Mortality Tree Species | Juniperus occidentalis / JUOC (Western juniper) | + | Tree Characteristics | Mortality Tree Species | Juniperus virginiana / JUVI (Eastern redcedar) | + | Tree Characteristics | Mortality Tree Species | Larix laricina / LALA (Tamarack) | + | Tree Characteristics | Mortality Tree Species | Larix lyallii / LALY (Subalpine Larch) | + | Tree Characteristics | Mortality Tree Species | Larix occidentalis / LAOC (Western Larch) | + | Tree Characteristics | Mortality Tree Species | Lithocarpus densiflorus / LIDE3 (Tanoak) | + | Tree Characteristics | Mortality Tree Species | Liquidambar styraciflua / LIST2 (Sweetgum) | + | Tree Characteristics | Mortality Tree Species | Liriodendron tulipifera / LITU (Tuliptree) | + | Tree Characteristics | Mortality Tree Species | Magnolia acuminata / MAAC (Cucumber - tree) | + | Tree Characteristics | Mortality Tree Species | Magnolia grandiflora / MAGR4 (Southern magnolia) | + | Tree Characteristics | Mortality Tree Species | Magnolia species / MAGSPP (Magnolias) | + | Tree Characteristics | Mortality Tree Species | Prunus species / MALPRU (cherry and plum species) | + | Tree Characteristics | Mortality Tree Species | Malus species / MALSPP (Apples) | + | Tree Characteristics | Mortality Tree Species | Magnolia macrophylla / MAMA2 (Bigleaf magnolia) | + | Tree Characteristics | Mortality Tree Species | Maclura pomifera / MAPO (Osage - orange) | + | Tree Characteristics | Mortality Tree Species | Magnolia virginiana / MAVI2 (Sweetbay) | + | Tree Characteristics | Mortality Tree Species | Morus alba / MOAL (White mulberry) | + | Tree Characteristics | Mortality Tree Species | Morus species / MORSPP (Mulberries) | + | Tree Characteristics | Mortality Tree Species | Morus rubra / MORU2 (Red mulberry) | + | Tree Characteristics | Mortality Tree Species | Nyssa aquatica / NYAQ2 (Water tupelo) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Nyssa ogeche / NYOG (Ogeechee tupelo) | + | Tree Characteristics | Mortality Tree Species | Ostrya virginiana / OSVI (Hophornbeam) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | + | Tree Characteristics | Mortality Tree Species | Paulownia tomentosa / PATO2 (Princesstree) | + | Tree Characteristics | Mortality Tree Species | Persea borbonia / PEBO (Redbay) | + | Tree Characteristics | Mortality Tree Species | Picea abies / PIAB (Norway spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus albicaulis / PIAL (Whitebark pine) | + | Tree Characteristics | Mortality Tree Species | Pinus attenuata / PIAT (Knobcone pine) | + | Tree Characteristics | Mortality Tree Species | Pinus banksiana / PIBA2 (Jack pine) | + | Tree Characteristics | Mortality Tree Species | Pinus clausa / PICL (Sand pine) | + | Tree Characteristics | Mortality Tree Species | Pinus contorta / PICO (Lodgepole pine) | + | Tree Characteristics | Mortality Tree Species | Pinus echinata / PIEC2 (Shortleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus elliottii / PIEL (Slash pine) | + | Tree Characteristics | Mortality Tree Species | Picea engelmannii / PIEN (Engelmann spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus flexilis / PIFL2 (Limber pine) | + | Tree Characteristics | Mortality Tree Species | Picea glauca / PIGL (White spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus glabra / PIGL2 (Spruce pine) | + | Tree Characteristics | Mortality Tree Species | Pinus jeffreyi / PIJE (Jeffrey pine) | + | Tree Characteristics | Mortality Tree Species | Pinus lambertiana / PILA (Sugar pine) | + | Tree Characteristics | Mortality Tree Species | Picea mariana / PIMA (Black spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus monticola / PIMO3 (Western white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus palustris / PIPA2 (Longleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus ponderosa / PIPO (Ponderosa pine) | + | Tree Characteristics | Mortality Tree Species | Picea pungens / PIPU (Blue spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus pungens / PIPU5 (Table mountain pine) | + | Tree Characteristics | Mortality Tree Species | Pinus resinosa / PIRE (Red pine) | + | Tree Characteristics | Mortality Tree Species | Pinus rigida / PIRI (Pitch pine) | + | Tree Characteristics | Mortality Tree Species | Picea rubens / PIRU (Red spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus sabiniana / PISA2 (Gray pine) | + | Tree Characteristics | Mortality Tree Species | Pinus serotina / PISE (Pond pine) | + | Tree Characteristics | Mortality Tree Species | Picea sitchensis / PISI (Sitka spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus strobus / PIST (Eastern white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus sylvestris / PISY (Scots pine) | + | Tree Characteristics | Mortality Tree Species | Pinus taeda / PITA (Loblolly pine) | + | Tree Characteristics | Mortality Tree Species | Pinus virginiana / PIVI2 (Virginia pine) | + | Tree Characteristics | Mortality Tree Species | Platanus occidentalis / PLOC (American sycamore) | + | Tree Characteristics | Mortality Tree Species | Populus balsamifera / POBA2 (Balsam poplar) | + | Tree Characteristics | Mortality Tree Species | Populus grandidentata / POGR4 (Bigtooth aspen) | + | Tree Characteristics | Mortality Tree Species | Populus heterophylla / POHE4 (Swamp cottonwood) | + | Tree Characteristics | Mortality Tree Species | Populus tremuloides / POTR12 (Quaking aspen) | + | Tree Characteristics | Mortality Tree Species | Prunus americana / PRAM (American plum) | + | Tree Characteristics | Mortality Tree Species | Prunus emarginata / PREM (Bitter cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus pensylvanica / PRPE2 (Pin cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus serotina / PRSE2 (Black cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus virginiana / PRVI (Chokecherry) | + | Tree Characteristics | Mortality Tree Species | Pseudotsuga menziesii / PSME (Douglas - fir) | + | Tree Characteristics | Mortality Tree Species | Quercus agrifolia / QUAG (California live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus chrysolepis / QUCH2 (Canyon live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus douglasii / QUDU (Blue oak) | + | Tree Characteristics | Mortality Tree Species | Quercus ellipsoidalis / QUEL (Northern pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus species / QUESPP (Oaks) | + | Tree Characteristics | Mortality Tree Species | Quercus falcata / QUFA (Southern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus imbricaria / QUIM (Shingle oak) | + | Tree Characteristics | Mortality Tree Species | Quercus incana / QUIN (Bluejack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laevis / QULA2 (Turkey oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laurifolia / QULA3 (Laurel oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lobata / QULO (Valley oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lyrata / QULY (Overcup oak) | + | Tree Characteristics | Mortality Tree Species | Quercus macrocarpa / QUMA2 (Bur oak) | + | Tree Characteristics | Mortality Tree Species | Quercus michauxii / QUMI (Swamp chestnut oak) | + | Tree Characteristics | Mortality Tree Species | Quercus muehlenbergii / QUMU (Chinkapin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus nigra / QUNI (Water oak) | + | Tree Characteristics | Mortality Tree Species | Quercus palustris / QUPA2 (Pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus phellos / QUPH (Willow oak) | + | Tree Characteristics | Mortality Tree Species | Quercus rubra / QURU (Northern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus shumardii / QUSH (Shumard oak) | + | Tree Characteristics | Mortality Tree Species | Quercus stellata / QUST (Post oak) | + | Tree Characteristics | Mortality Tree Species | Quercus texana / QUTE (Texas red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus virginiana / QUVI (Live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus wislizeni / QUWI2 (Interior live oak) | + | Tree Characteristics | Mortality Tree Species | Robinia pseudoacacia / ROPS (Black locust) | + | Tree Characteristics | Mortality Tree Species | Salix bebbiana / SABE2 (Bebb willow) | + | Tree Characteristics | Mortality Tree Species | Salix species / SALSPP (Willows) | + | Tree Characteristics | Mortality Tree Species | Salix nigra / SANI (Black willow) | + | Tree Characteristics | Mortality Tree Species | Sorbus americana / SOAM3 (American mountain - ash) | + | Tree Characteristics | Mortality Tree Species | Taxodium ascendens / TAAS (Pond cypress) | + | Tree Characteristics | Mortality Tree Species | Taxus brevifolia / TABR2 (Pacific yew) | + | Tree Characteristics | Mortality Tree Species | Taxodium distichum / TADI2 (Bald cypress) | + | Tree Characteristics | Mortality Tree Species | Thuja occidentalis / THOC2 (arborvitae) | + | Tree Characteristics | Mortality Tree Species | Thuja plicata / THPL (Western redcedar) | + | Tree Characteristics | Mortality Tree Species | Tilia americana / TIAM (American basswood) | + | Tree Characteristics | Mortality Tree Species | Tsuga canadensis / TSCA (Eastern hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga heterophylla / TSHE (Western hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga mertensiana / TSME (Mountain hemlock) | + | Tree Characteristics | Mortality Tree Species | Ulmus alata / ULAL (Winged elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus americana / ULAM (American elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus species / ULMSPP (Elms) | + | Tree Characteristics | Mortality Tree Species | Ulmus pumila / ULPU (Siberian elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus rubra / ULRU (Slippery elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus thomasii / ULTH (Rock elm) | + | Tree Characteristics | Mortality Tree Species | Umbellularia californica / UMCA (California - laurel) | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_scorch-height.feature b/features/results-page/results-page_mortality_scorch-height.feature new file mode 100644 index 000000000..be578a0fd --- /dev/null +++ b/features/results-page/results-page_mortality_scorch-height.feature @@ -0,0 +1,238 @@ +@core +Feature: Mortality Results - Scorch Height + + @core + Scenario Outline: Scorch Height is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Scorch Height | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + + @extended + Scenario Outline: Scorch Height is displayed in results when inputs are set (Extended) + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Scorch Height | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Mortality Tree Species | Abies balsamea / ABBA (Balsam fir) | + | Tree Characteristics | Mortality Tree Species | Abies concolor / ABCO (White fir) | + | Tree Characteristics | Mortality Tree Species | Abies grandis / ABGR (Grand fir) | + | Tree Characteristics | Mortality Tree Species | Abies lasiocarpa / ABLA (Subalpine fir) | + | Tree Characteristics | Mortality Tree Species | Abies magnifica / ABMA (Red Fir) | + | Tree Characteristics | Mortality Tree Species | Abies procera / ABPR (Noble Fir) | + | Tree Characteristics | Mortality Tree Species | Acer barbatum / ACBA3 (Southern sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer macrophyllum / ACMA3 (Bigleaf maple) | + | Tree Characteristics | Mortality Tree Species | Acer negundo / ACNE2 (Boxelder) | + | Tree Characteristics | Mortality Tree Species | Acer nigrum / ACNI5 (Black maple) | + | Tree Characteristics | Mortality Tree Species | Acer pensylvanicum / ACPE (Striped maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharinum / ACSA2 (Silver maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharum / ACSA3 (Sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer spicatum / ACSP2 (Mountain maple) | + | Tree Characteristics | Mortality Tree Species | Aesculus flava / AEFL (Yellow buckeye) | + | Tree Characteristics | Mortality Tree Species | Aesculus glabra / AEGL (Ohio buckeye) | + | Tree Characteristics | Mortality Tree Species | Ailanthus altissima / AIAL (Ailanthus) | + | Tree Characteristics | Mortality Tree Species | Alnus rhombifolia / ALRH2 (White alder) | + | Tree Characteristics | Mortality Tree Species | Alnus rubra / ALRU2 (Red alder) | + | Tree Characteristics | Mortality Tree Species | Amelanchier arborea / AMAR3 (Common serviceberry) | + | Tree Characteristics | Mortality Tree Species | Arbutus menziesii / ARME (Pacific madrone) | + | Tree Characteristics | Mortality Tree Species | Betula alleghaniensis / BEAL2 (Yellow birch) | + | Tree Characteristics | Mortality Tree Species | Betula lenta / BELE (Sweet birch) | + | Tree Characteristics | Mortality Tree Species | Betula nigra / BENI (River Birch) | + | Tree Characteristics | Mortality Tree Species | Betula occidentalis / BEOC2 (Water birch) | + | Tree Characteristics | Mortality Tree Species | Betula papyrifera / BEPA (Paper birch) | + | Tree Characteristics | Mortality Tree Species | Betula species / BETSPP (Birches) | + | Tree Characteristics | Mortality Tree Species | Carya alba / CAAL27 (Mockernut hickory) | + | Tree Characteristics | Mortality Tree Species | Carpinus caroliniana / CACA18 (American hornbeam) | + | Tree Characteristics | Mortality Tree Species | Carya cordiformis / CACOL3 (Bitternut hickory) | + | Tree Characteristics | Mortality Tree Species | Castanea dentata / CADE12 (American chestnut) | + | Tree Characteristics | Mortality Tree Species | Calocedrus decurrens / CADE27 (Incense - cedar) | + | Tree Characteristics | Mortality Tree Species | Carya glabra / CAGL8 (Pignut hickory) | + | Tree Characteristics | Mortality Tree Species | Carya illinoinensis / CAIL2 (Pecan) | + | Tree Characteristics | Mortality Tree Species | Carya laciniosa / CALA21 (Shellbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya ovata / CAOV2 (Shagbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya species / CARSPP (Hickories) | + | Tree Characteristics | Mortality Tree Species | Carya texana / CATE9 (Black hickory) | + | Tree Characteristics | Mortality Tree Species | Cercis canadensis / CECA4 (Eastern redbud) | + | Tree Characteristics | Mortality Tree Species | Celtis laevigata / CELA (Sugarberry) | + | Tree Characteristics | Mortality Tree Species | Celtis occidentalis / CEOC (Common hackberry) | + | Tree Characteristics | Mortality Tree Species | Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis lawsoniana / CHLA (PortOrford - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis nootkatensis / CHNO (Alaska - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar) | + | Tree Characteristics | Mortality Tree Species | Cornus nuttallii / CONU4 (Pacific dogwood) | + | Tree Characteristics | Mortality Tree Species | Crataegus species / CRASPP (Hawthorns) | + | Tree Characteristics | Mortality Tree Species | Diospyros virginiana / DIVI5 (Persimmon) | + | Tree Characteristics | Mortality Tree Species | Fagus grandifolia / FAGR (American beech) | + | Tree Characteristics | Mortality Tree Species | Fraxinus americana / FRAM2 (White ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus species / FRASPP (Ashes) | + | Tree Characteristics | Mortality Tree Species | Fraxinus nigra / FRNI (Black ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus pennsylvanica / FRPE (Green ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus profunda / FRPR (Pumpkin ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus quadrangulata / FRQU (Blue ash) | + | Tree Characteristics | Mortality Tree Species | Gleditsia triacanthos / GLTR (Honeylocust) | + | Tree Characteristics | Mortality Tree Species | Gordonia lasianthus / GOLA (Loblolly bay) | + | Tree Characteristics | Mortality Tree Species | Gymnocladus dioicus / GYDI (Kentucky coffeetree) | + | Tree Characteristics | Mortality Tree Species | Halesia species / HALSPP (Silverbells) | + | Tree Characteristics | Mortality Tree Species | Ilex opaca / ILOP (American holly) | + | Tree Characteristics | Mortality Tree Species | Juglans cinerea / JUCI (Butternut) | + | Tree Characteristics | Mortality Tree Species | Juglans nigra / JUNI (Black walnut) | + | Tree Characteristics | Mortality Tree Species | Juniperus occidentalis / JUOC (Western juniper) | + | Tree Characteristics | Mortality Tree Species | Juniperus virginiana / JUVI (Eastern redcedar) | + | Tree Characteristics | Mortality Tree Species | Larix laricina / LALA (Tamarack) | + | Tree Characteristics | Mortality Tree Species | Larix lyallii / LALY (Subalpine Larch) | + | Tree Characteristics | Mortality Tree Species | Larix occidentalis / LAOC (Western Larch) | + | Tree Characteristics | Mortality Tree Species | Lithocarpus densiflorus / LIDE3 (Tanoak) | + | Tree Characteristics | Mortality Tree Species | Liquidambar styraciflua / LIST2 (Sweetgum) | + | Tree Characteristics | Mortality Tree Species | Liriodendron tulipifera / LITU (Tuliptree) | + | Tree Characteristics | Mortality Tree Species | Magnolia acuminata / MAAC (Cucumber - tree) | + | Tree Characteristics | Mortality Tree Species | Magnolia grandiflora / MAGR4 (Southern magnolia) | + | Tree Characteristics | Mortality Tree Species | Magnolia species / MAGSPP (Magnolias) | + | Tree Characteristics | Mortality Tree Species | Prunus species / MALPRU (cherry and plum species) | + | Tree Characteristics | Mortality Tree Species | Malus species / MALSPP (Apples) | + | Tree Characteristics | Mortality Tree Species | Magnolia macrophylla / MAMA2 (Bigleaf magnolia) | + | Tree Characteristics | Mortality Tree Species | Maclura pomifera / MAPO (Osage - orange) | + | Tree Characteristics | Mortality Tree Species | Magnolia virginiana / MAVI2 (Sweetbay) | + | Tree Characteristics | Mortality Tree Species | Morus alba / MOAL (White mulberry) | + | Tree Characteristics | Mortality Tree Species | Morus species / MORSPP (Mulberries) | + | Tree Characteristics | Mortality Tree Species | Morus rubra / MORU2 (Red mulberry) | + | Tree Characteristics | Mortality Tree Species | Nyssa aquatica / NYAQ2 (Water tupelo) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Nyssa ogeche / NYOG (Ogeechee tupelo) | + | Tree Characteristics | Mortality Tree Species | Ostrya virginiana / OSVI (Hophornbeam) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | + | Tree Characteristics | Mortality Tree Species | Paulownia tomentosa / PATO2 (Princesstree) | + | Tree Characteristics | Mortality Tree Species | Persea borbonia / PEBO (Redbay) | + | Tree Characteristics | Mortality Tree Species | Picea abies / PIAB (Norway spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus albicaulis / PIAL (Whitebark pine) | + | Tree Characteristics | Mortality Tree Species | Pinus attenuata / PIAT (Knobcone pine) | + | Tree Characteristics | Mortality Tree Species | Pinus banksiana / PIBA2 (Jack pine) | + | Tree Characteristics | Mortality Tree Species | Pinus clausa / PICL (Sand pine) | + | Tree Characteristics | Mortality Tree Species | Pinus contorta / PICO (Lodgepole pine) | + | Tree Characteristics | Mortality Tree Species | Pinus echinata / PIEC2 (Shortleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus elliottii / PIEL (Slash pine) | + | Tree Characteristics | Mortality Tree Species | Picea engelmannii / PIEN (Engelmann spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus flexilis / PIFL2 (Limber pine) | + | Tree Characteristics | Mortality Tree Species | Picea glauca / PIGL (White spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus glabra / PIGL2 (Spruce pine) | + | Tree Characteristics | Mortality Tree Species | Pinus jeffreyi / PIJE (Jeffrey pine) | + | Tree Characteristics | Mortality Tree Species | Pinus lambertiana / PILA (Sugar pine) | + | Tree Characteristics | Mortality Tree Species | Picea mariana / PIMA (Black spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus monticola / PIMO3 (Western white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus palustris / PIPA2 (Longleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus ponderosa / PIPO (Ponderosa pine) | + | Tree Characteristics | Mortality Tree Species | Picea pungens / PIPU (Blue spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus pungens / PIPU5 (Table mountain pine) | + | Tree Characteristics | Mortality Tree Species | Pinus resinosa / PIRE (Red pine) | + | Tree Characteristics | Mortality Tree Species | Pinus rigida / PIRI (Pitch pine) | + | Tree Characteristics | Mortality Tree Species | Picea rubens / PIRU (Red spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus sabiniana / PISA2 (Gray pine) | + | Tree Characteristics | Mortality Tree Species | Pinus serotina / PISE (Pond pine) | + | Tree Characteristics | Mortality Tree Species | Picea sitchensis / PISI (Sitka spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus strobus / PIST (Eastern white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus sylvestris / PISY (Scots pine) | + | Tree Characteristics | Mortality Tree Species | Pinus taeda / PITA (Loblolly pine) | + | Tree Characteristics | Mortality Tree Species | Pinus virginiana / PIVI2 (Virginia pine) | + | Tree Characteristics | Mortality Tree Species | Platanus occidentalis / PLOC (American sycamore) | + | Tree Characteristics | Mortality Tree Species | Populus balsamifera / POBA2 (Balsam poplar) | + | Tree Characteristics | Mortality Tree Species | Populus grandidentata / POGR4 (Bigtooth aspen) | + | Tree Characteristics | Mortality Tree Species | Populus heterophylla / POHE4 (Swamp cottonwood) | + | Tree Characteristics | Mortality Tree Species | Populus tremuloides / POTR12 (Quaking aspen) | + | Tree Characteristics | Mortality Tree Species | Prunus americana / PRAM (American plum) | + | Tree Characteristics | Mortality Tree Species | Prunus emarginata / PREM (Bitter cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus pensylvanica / PRPE2 (Pin cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus serotina / PRSE2 (Black cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus virginiana / PRVI (Chokecherry) | + | Tree Characteristics | Mortality Tree Species | Pseudotsuga menziesii / PSME (Douglas - fir) | + | Tree Characteristics | Mortality Tree Species | Quercus agrifolia / QUAG (California live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus chrysolepis / QUCH2 (Canyon live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus douglasii / QUDU (Blue oak) | + | Tree Characteristics | Mortality Tree Species | Quercus ellipsoidalis / QUEL (Northern pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus species / QUESPP (Oaks) | + | Tree Characteristics | Mortality Tree Species | Quercus falcata / QUFA (Southern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus imbricaria / QUIM (Shingle oak) | + | Tree Characteristics | Mortality Tree Species | Quercus incana / QUIN (Bluejack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laevis / QULA2 (Turkey oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laurifolia / QULA3 (Laurel oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lobata / QULO (Valley oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lyrata / QULY (Overcup oak) | + | Tree Characteristics | Mortality Tree Species | Quercus macrocarpa / QUMA2 (Bur oak) | + | Tree Characteristics | Mortality Tree Species | Quercus michauxii / QUMI (Swamp chestnut oak) | + | Tree Characteristics | Mortality Tree Species | Quercus muehlenbergii / QUMU (Chinkapin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus nigra / QUNI (Water oak) | + | Tree Characteristics | Mortality Tree Species | Quercus palustris / QUPA2 (Pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus phellos / QUPH (Willow oak) | + | Tree Characteristics | Mortality Tree Species | Quercus rubra / QURU (Northern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus shumardii / QUSH (Shumard oak) | + | Tree Characteristics | Mortality Tree Species | Quercus stellata / QUST (Post oak) | + | Tree Characteristics | Mortality Tree Species | Quercus texana / QUTE (Texas red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus virginiana / QUVI (Live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus wislizeni / QUWI2 (Interior live oak) | + | Tree Characteristics | Mortality Tree Species | Robinia pseudoacacia / ROPS (Black locust) | + | Tree Characteristics | Mortality Tree Species | Salix bebbiana / SABE2 (Bebb willow) | + | Tree Characteristics | Mortality Tree Species | Salix species / SALSPP (Willows) | + | Tree Characteristics | Mortality Tree Species | Salix nigra / SANI (Black willow) | + | Tree Characteristics | Mortality Tree Species | Sorbus americana / SOAM3 (American mountain - ash) | + | Tree Characteristics | Mortality Tree Species | Taxodium ascendens / TAAS (Pond cypress) | + | Tree Characteristics | Mortality Tree Species | Taxus brevifolia / TABR2 (Pacific yew) | + | Tree Characteristics | Mortality Tree Species | Taxodium distichum / TADI2 (Bald cypress) | + | Tree Characteristics | Mortality Tree Species | Thuja occidentalis / THOC2 (arborvitae) | + | Tree Characteristics | Mortality Tree Species | Thuja plicata / THPL (Western redcedar) | + | Tree Characteristics | Mortality Tree Species | Tilia americana / TIAM (American basswood) | + | Tree Characteristics | Mortality Tree Species | Tsuga canadensis / TSCA (Eastern hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga heterophylla / TSHE (Western hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga mertensiana / TSME (Mountain hemlock) | + | Tree Characteristics | Mortality Tree Species | Ulmus alata / ULAL (Winged elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus americana / ULAM (American elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus species / ULMSPP (Elms) | + | Tree Characteristics | Mortality Tree Species | Ulmus pumila / ULPU (Siberian elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus rubra / ULRU (Slippery elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus thomasii / ULTH (Rock elm) | + | Tree Characteristics | Mortality Tree Species | Umbellularia californica / UMCA (California - laurel) | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_tree-crown-length-scorched.feature b/features/results-page/results-page_mortality_tree-crown-length-scorched.feature new file mode 100644 index 000000000..451791c68 --- /dev/null +++ b/features/results-page/results-page_mortality_tree-crown-length-scorched.feature @@ -0,0 +1,238 @@ +@core +Feature: Mortality Results - Tree Crown Length Scorched + + @core + Scenario Outline: Tree Crown Length Scorched is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Tree Crown Length Scorched | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + + @extended + Scenario Outline: Tree Crown Length Scorched is displayed in results when inputs are set (Extended) + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Tree Crown Length Scorched | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Mortality Tree Species | Abies balsamea / ABBA (Balsam fir) | + | Tree Characteristics | Mortality Tree Species | Abies concolor / ABCO (White fir) | + | Tree Characteristics | Mortality Tree Species | Abies grandis / ABGR (Grand fir) | + | Tree Characteristics | Mortality Tree Species | Abies lasiocarpa / ABLA (Subalpine fir) | + | Tree Characteristics | Mortality Tree Species | Abies magnifica / ABMA (Red Fir) | + | Tree Characteristics | Mortality Tree Species | Abies procera / ABPR (Noble Fir) | + | Tree Characteristics | Mortality Tree Species | Acer barbatum / ACBA3 (Southern sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer macrophyllum / ACMA3 (Bigleaf maple) | + | Tree Characteristics | Mortality Tree Species | Acer negundo / ACNE2 (Boxelder) | + | Tree Characteristics | Mortality Tree Species | Acer nigrum / ACNI5 (Black maple) | + | Tree Characteristics | Mortality Tree Species | Acer pensylvanicum / ACPE (Striped maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharinum / ACSA2 (Silver maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharum / ACSA3 (Sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer spicatum / ACSP2 (Mountain maple) | + | Tree Characteristics | Mortality Tree Species | Aesculus flava / AEFL (Yellow buckeye) | + | Tree Characteristics | Mortality Tree Species | Aesculus glabra / AEGL (Ohio buckeye) | + | Tree Characteristics | Mortality Tree Species | Ailanthus altissima / AIAL (Ailanthus) | + | Tree Characteristics | Mortality Tree Species | Alnus rhombifolia / ALRH2 (White alder) | + | Tree Characteristics | Mortality Tree Species | Alnus rubra / ALRU2 (Red alder) | + | Tree Characteristics | Mortality Tree Species | Amelanchier arborea / AMAR3 (Common serviceberry) | + | Tree Characteristics | Mortality Tree Species | Arbutus menziesii / ARME (Pacific madrone) | + | Tree Characteristics | Mortality Tree Species | Betula alleghaniensis / BEAL2 (Yellow birch) | + | Tree Characteristics | Mortality Tree Species | Betula lenta / BELE (Sweet birch) | + | Tree Characteristics | Mortality Tree Species | Betula nigra / BENI (River Birch) | + | Tree Characteristics | Mortality Tree Species | Betula occidentalis / BEOC2 (Water birch) | + | Tree Characteristics | Mortality Tree Species | Betula papyrifera / BEPA (Paper birch) | + | Tree Characteristics | Mortality Tree Species | Betula species / BETSPP (Birches) | + | Tree Characteristics | Mortality Tree Species | Carya alba / CAAL27 (Mockernut hickory) | + | Tree Characteristics | Mortality Tree Species | Carpinus caroliniana / CACA18 (American hornbeam) | + | Tree Characteristics | Mortality Tree Species | Carya cordiformis / CACOL3 (Bitternut hickory) | + | Tree Characteristics | Mortality Tree Species | Castanea dentata / CADE12 (American chestnut) | + | Tree Characteristics | Mortality Tree Species | Calocedrus decurrens / CADE27 (Incense - cedar) | + | Tree Characteristics | Mortality Tree Species | Carya glabra / CAGL8 (Pignut hickory) | + | Tree Characteristics | Mortality Tree Species | Carya illinoinensis / CAIL2 (Pecan) | + | Tree Characteristics | Mortality Tree Species | Carya laciniosa / CALA21 (Shellbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya ovata / CAOV2 (Shagbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya species / CARSPP (Hickories) | + | Tree Characteristics | Mortality Tree Species | Carya texana / CATE9 (Black hickory) | + | Tree Characteristics | Mortality Tree Species | Cercis canadensis / CECA4 (Eastern redbud) | + | Tree Characteristics | Mortality Tree Species | Celtis laevigata / CELA (Sugarberry) | + | Tree Characteristics | Mortality Tree Species | Celtis occidentalis / CEOC (Common hackberry) | + | Tree Characteristics | Mortality Tree Species | Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis lawsoniana / CHLA (PortOrford - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis nootkatensis / CHNO (Alaska - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar) | + | Tree Characteristics | Mortality Tree Species | Cornus nuttallii / CONU4 (Pacific dogwood) | + | Tree Characteristics | Mortality Tree Species | Crataegus species / CRASPP (Hawthorns) | + | Tree Characteristics | Mortality Tree Species | Diospyros virginiana / DIVI5 (Persimmon) | + | Tree Characteristics | Mortality Tree Species | Fagus grandifolia / FAGR (American beech) | + | Tree Characteristics | Mortality Tree Species | Fraxinus americana / FRAM2 (White ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus species / FRASPP (Ashes) | + | Tree Characteristics | Mortality Tree Species | Fraxinus nigra / FRNI (Black ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus pennsylvanica / FRPE (Green ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus profunda / FRPR (Pumpkin ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus quadrangulata / FRQU (Blue ash) | + | Tree Characteristics | Mortality Tree Species | Gleditsia triacanthos / GLTR (Honeylocust) | + | Tree Characteristics | Mortality Tree Species | Gordonia lasianthus / GOLA (Loblolly bay) | + | Tree Characteristics | Mortality Tree Species | Gymnocladus dioicus / GYDI (Kentucky coffeetree) | + | Tree Characteristics | Mortality Tree Species | Halesia species / HALSPP (Silverbells) | + | Tree Characteristics | Mortality Tree Species | Ilex opaca / ILOP (American holly) | + | Tree Characteristics | Mortality Tree Species | Juglans cinerea / JUCI (Butternut) | + | Tree Characteristics | Mortality Tree Species | Juglans nigra / JUNI (Black walnut) | + | Tree Characteristics | Mortality Tree Species | Juniperus occidentalis / JUOC (Western juniper) | + | Tree Characteristics | Mortality Tree Species | Juniperus virginiana / JUVI (Eastern redcedar) | + | Tree Characteristics | Mortality Tree Species | Larix laricina / LALA (Tamarack) | + | Tree Characteristics | Mortality Tree Species | Larix lyallii / LALY (Subalpine Larch) | + | Tree Characteristics | Mortality Tree Species | Larix occidentalis / LAOC (Western Larch) | + | Tree Characteristics | Mortality Tree Species | Lithocarpus densiflorus / LIDE3 (Tanoak) | + | Tree Characteristics | Mortality Tree Species | Liquidambar styraciflua / LIST2 (Sweetgum) | + | Tree Characteristics | Mortality Tree Species | Liriodendron tulipifera / LITU (Tuliptree) | + | Tree Characteristics | Mortality Tree Species | Magnolia acuminata / MAAC (Cucumber - tree) | + | Tree Characteristics | Mortality Tree Species | Magnolia grandiflora / MAGR4 (Southern magnolia) | + | Tree Characteristics | Mortality Tree Species | Magnolia species / MAGSPP (Magnolias) | + | Tree Characteristics | Mortality Tree Species | Prunus species / MALPRU (cherry and plum species) | + | Tree Characteristics | Mortality Tree Species | Malus species / MALSPP (Apples) | + | Tree Characteristics | Mortality Tree Species | Magnolia macrophylla / MAMA2 (Bigleaf magnolia) | + | Tree Characteristics | Mortality Tree Species | Maclura pomifera / MAPO (Osage - orange) | + | Tree Characteristics | Mortality Tree Species | Magnolia virginiana / MAVI2 (Sweetbay) | + | Tree Characteristics | Mortality Tree Species | Morus alba / MOAL (White mulberry) | + | Tree Characteristics | Mortality Tree Species | Morus species / MORSPP (Mulberries) | + | Tree Characteristics | Mortality Tree Species | Morus rubra / MORU2 (Red mulberry) | + | Tree Characteristics | Mortality Tree Species | Nyssa aquatica / NYAQ2 (Water tupelo) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Nyssa ogeche / NYOG (Ogeechee tupelo) | + | Tree Characteristics | Mortality Tree Species | Ostrya virginiana / OSVI (Hophornbeam) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | + | Tree Characteristics | Mortality Tree Species | Paulownia tomentosa / PATO2 (Princesstree) | + | Tree Characteristics | Mortality Tree Species | Persea borbonia / PEBO (Redbay) | + | Tree Characteristics | Mortality Tree Species | Picea abies / PIAB (Norway spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus albicaulis / PIAL (Whitebark pine) | + | Tree Characteristics | Mortality Tree Species | Pinus attenuata / PIAT (Knobcone pine) | + | Tree Characteristics | Mortality Tree Species | Pinus banksiana / PIBA2 (Jack pine) | + | Tree Characteristics | Mortality Tree Species | Pinus clausa / PICL (Sand pine) | + | Tree Characteristics | Mortality Tree Species | Pinus contorta / PICO (Lodgepole pine) | + | Tree Characteristics | Mortality Tree Species | Pinus echinata / PIEC2 (Shortleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus elliottii / PIEL (Slash pine) | + | Tree Characteristics | Mortality Tree Species | Picea engelmannii / PIEN (Engelmann spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus flexilis / PIFL2 (Limber pine) | + | Tree Characteristics | Mortality Tree Species | Picea glauca / PIGL (White spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus glabra / PIGL2 (Spruce pine) | + | Tree Characteristics | Mortality Tree Species | Pinus jeffreyi / PIJE (Jeffrey pine) | + | Tree Characteristics | Mortality Tree Species | Pinus lambertiana / PILA (Sugar pine) | + | Tree Characteristics | Mortality Tree Species | Picea mariana / PIMA (Black spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus monticola / PIMO3 (Western white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus palustris / PIPA2 (Longleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus ponderosa / PIPO (Ponderosa pine) | + | Tree Characteristics | Mortality Tree Species | Picea pungens / PIPU (Blue spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus pungens / PIPU5 (Table mountain pine) | + | Tree Characteristics | Mortality Tree Species | Pinus resinosa / PIRE (Red pine) | + | Tree Characteristics | Mortality Tree Species | Pinus rigida / PIRI (Pitch pine) | + | Tree Characteristics | Mortality Tree Species | Picea rubens / PIRU (Red spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus sabiniana / PISA2 (Gray pine) | + | Tree Characteristics | Mortality Tree Species | Pinus serotina / PISE (Pond pine) | + | Tree Characteristics | Mortality Tree Species | Picea sitchensis / PISI (Sitka spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus strobus / PIST (Eastern white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus sylvestris / PISY (Scots pine) | + | Tree Characteristics | Mortality Tree Species | Pinus taeda / PITA (Loblolly pine) | + | Tree Characteristics | Mortality Tree Species | Pinus virginiana / PIVI2 (Virginia pine) | + | Tree Characteristics | Mortality Tree Species | Platanus occidentalis / PLOC (American sycamore) | + | Tree Characteristics | Mortality Tree Species | Populus balsamifera / POBA2 (Balsam poplar) | + | Tree Characteristics | Mortality Tree Species | Populus grandidentata / POGR4 (Bigtooth aspen) | + | Tree Characteristics | Mortality Tree Species | Populus heterophylla / POHE4 (Swamp cottonwood) | + | Tree Characteristics | Mortality Tree Species | Populus tremuloides / POTR12 (Quaking aspen) | + | Tree Characteristics | Mortality Tree Species | Prunus americana / PRAM (American plum) | + | Tree Characteristics | Mortality Tree Species | Prunus emarginata / PREM (Bitter cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus pensylvanica / PRPE2 (Pin cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus serotina / PRSE2 (Black cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus virginiana / PRVI (Chokecherry) | + | Tree Characteristics | Mortality Tree Species | Pseudotsuga menziesii / PSME (Douglas - fir) | + | Tree Characteristics | Mortality Tree Species | Quercus agrifolia / QUAG (California live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus chrysolepis / QUCH2 (Canyon live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus douglasii / QUDU (Blue oak) | + | Tree Characteristics | Mortality Tree Species | Quercus ellipsoidalis / QUEL (Northern pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus species / QUESPP (Oaks) | + | Tree Characteristics | Mortality Tree Species | Quercus falcata / QUFA (Southern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus imbricaria / QUIM (Shingle oak) | + | Tree Characteristics | Mortality Tree Species | Quercus incana / QUIN (Bluejack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laevis / QULA2 (Turkey oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laurifolia / QULA3 (Laurel oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lobata / QULO (Valley oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lyrata / QULY (Overcup oak) | + | Tree Characteristics | Mortality Tree Species | Quercus macrocarpa / QUMA2 (Bur oak) | + | Tree Characteristics | Mortality Tree Species | Quercus michauxii / QUMI (Swamp chestnut oak) | + | Tree Characteristics | Mortality Tree Species | Quercus muehlenbergii / QUMU (Chinkapin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus nigra / QUNI (Water oak) | + | Tree Characteristics | Mortality Tree Species | Quercus palustris / QUPA2 (Pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus phellos / QUPH (Willow oak) | + | Tree Characteristics | Mortality Tree Species | Quercus rubra / QURU (Northern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus shumardii / QUSH (Shumard oak) | + | Tree Characteristics | Mortality Tree Species | Quercus stellata / QUST (Post oak) | + | Tree Characteristics | Mortality Tree Species | Quercus texana / QUTE (Texas red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus virginiana / QUVI (Live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus wislizeni / QUWI2 (Interior live oak) | + | Tree Characteristics | Mortality Tree Species | Robinia pseudoacacia / ROPS (Black locust) | + | Tree Characteristics | Mortality Tree Species | Salix bebbiana / SABE2 (Bebb willow) | + | Tree Characteristics | Mortality Tree Species | Salix species / SALSPP (Willows) | + | Tree Characteristics | Mortality Tree Species | Salix nigra / SANI (Black willow) | + | Tree Characteristics | Mortality Tree Species | Sorbus americana / SOAM3 (American mountain - ash) | + | Tree Characteristics | Mortality Tree Species | Taxodium ascendens / TAAS (Pond cypress) | + | Tree Characteristics | Mortality Tree Species | Taxus brevifolia / TABR2 (Pacific yew) | + | Tree Characteristics | Mortality Tree Species | Taxodium distichum / TADI2 (Bald cypress) | + | Tree Characteristics | Mortality Tree Species | Thuja occidentalis / THOC2 (arborvitae) | + | Tree Characteristics | Mortality Tree Species | Thuja plicata / THPL (Western redcedar) | + | Tree Characteristics | Mortality Tree Species | Tilia americana / TIAM (American basswood) | + | Tree Characteristics | Mortality Tree Species | Tsuga canadensis / TSCA (Eastern hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga heterophylla / TSHE (Western hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga mertensiana / TSME (Mountain hemlock) | + | Tree Characteristics | Mortality Tree Species | Ulmus alata / ULAL (Winged elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus americana / ULAM (American elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus species / ULMSPP (Elms) | + | Tree Characteristics | Mortality Tree Species | Ulmus pumila / ULPU (Siberian elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus rubra / ULRU (Slippery elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus thomasii / ULTH (Rock elm) | + | Tree Characteristics | Mortality Tree Species | Umbellularia californica / UMCA (California - laurel) | \ No newline at end of file diff --git a/features/results-page/results-page_mortality_tree-crown-volume-scorched.feature b/features/results-page/results-page_mortality_tree-crown-volume-scorched.feature new file mode 100644 index 000000000..d23aa68b3 --- /dev/null +++ b/features/results-page/results-page_mortality_tree-crown-volume-scorched.feature @@ -0,0 +1,238 @@ +@core +Feature: Mortality Results - Tree Crown Volume Scorched + + @core + Scenario Outline: Tree Crown Volume Scorched is displayed in results when inputs are set + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Tree Crown Volume Scorched | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + + @extended + Scenario Outline: Tree Crown Volume Scorched is displayed in results when inputs are set (Extended) + Given I have started a new Surface & Mortality Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + When this input path is entered : : + When these input paths are selected + | submodule | group | value | + | Tree Characteristics | Canopy Height | 10 | + | Tree Characteristics | Crown Ratio | 0.5 | + | Tree Characteristics | DBH (Diameter at Breast Height) | 10 | + | Scorch | Air Temperature | 70 | + Then "the following outputs are displayed in the results page" + | output | + | Tree Crown Volume Scorched | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Tree Characteristics | Mortality Tree Species | Abies amabilis / ABAM (Pacific silver fir) | + | Tree Characteristics | Mortality Tree Species | Abies balsamea / ABBA (Balsam fir) | + | Tree Characteristics | Mortality Tree Species | Abies concolor / ABCO (White fir) | + | Tree Characteristics | Mortality Tree Species | Abies grandis / ABGR (Grand fir) | + | Tree Characteristics | Mortality Tree Species | Abies lasiocarpa / ABLA (Subalpine fir) | + | Tree Characteristics | Mortality Tree Species | Abies magnifica / ABMA (Red Fir) | + | Tree Characteristics | Mortality Tree Species | Abies procera / ABPR (Noble Fir) | + | Tree Characteristics | Mortality Tree Species | Acer barbatum / ACBA3 (Southern sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer macrophyllum / ACMA3 (Bigleaf maple) | + | Tree Characteristics | Mortality Tree Species | Acer negundo / ACNE2 (Boxelder) | + | Tree Characteristics | Mortality Tree Species | Acer nigrum / ACNI5 (Black maple) | + | Tree Characteristics | Mortality Tree Species | Acer pensylvanicum / ACPE (Striped maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharinum / ACSA2 (Silver maple) | + | Tree Characteristics | Mortality Tree Species | Acer saccharum / ACSA3 (Sugar maple) | + | Tree Characteristics | Mortality Tree Species | Acer spicatum / ACSP2 (Mountain maple) | + | Tree Characteristics | Mortality Tree Species | Aesculus flava / AEFL (Yellow buckeye) | + | Tree Characteristics | Mortality Tree Species | Aesculus glabra / AEGL (Ohio buckeye) | + | Tree Characteristics | Mortality Tree Species | Ailanthus altissima / AIAL (Ailanthus) | + | Tree Characteristics | Mortality Tree Species | Alnus rhombifolia / ALRH2 (White alder) | + | Tree Characteristics | Mortality Tree Species | Alnus rubra / ALRU2 (Red alder) | + | Tree Characteristics | Mortality Tree Species | Amelanchier arborea / AMAR3 (Common serviceberry) | + | Tree Characteristics | Mortality Tree Species | Arbutus menziesii / ARME (Pacific madrone) | + | Tree Characteristics | Mortality Tree Species | Betula alleghaniensis / BEAL2 (Yellow birch) | + | Tree Characteristics | Mortality Tree Species | Betula lenta / BELE (Sweet birch) | + | Tree Characteristics | Mortality Tree Species | Betula nigra / BENI (River Birch) | + | Tree Characteristics | Mortality Tree Species | Betula occidentalis / BEOC2 (Water birch) | + | Tree Characteristics | Mortality Tree Species | Betula papyrifera / BEPA (Paper birch) | + | Tree Characteristics | Mortality Tree Species | Betula species / BETSPP (Birches) | + | Tree Characteristics | Mortality Tree Species | Carya alba / CAAL27 (Mockernut hickory) | + | Tree Characteristics | Mortality Tree Species | Carpinus caroliniana / CACA18 (American hornbeam) | + | Tree Characteristics | Mortality Tree Species | Carya cordiformis / CACOL3 (Bitternut hickory) | + | Tree Characteristics | Mortality Tree Species | Castanea dentata / CADE12 (American chestnut) | + | Tree Characteristics | Mortality Tree Species | Calocedrus decurrens / CADE27 (Incense - cedar) | + | Tree Characteristics | Mortality Tree Species | Carya glabra / CAGL8 (Pignut hickory) | + | Tree Characteristics | Mortality Tree Species | Carya illinoinensis / CAIL2 (Pecan) | + | Tree Characteristics | Mortality Tree Species | Carya laciniosa / CALA21 (Shellbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya ovata / CAOV2 (Shagbark hickory) | + | Tree Characteristics | Mortality Tree Species | Carya species / CARSPP (Hickories) | + | Tree Characteristics | Mortality Tree Species | Carya texana / CATE9 (Black hickory) | + | Tree Characteristics | Mortality Tree Species | Cercis canadensis / CECA4 (Eastern redbud) | + | Tree Characteristics | Mortality Tree Species | Celtis laevigata / CELA (Sugarberry) | + | Tree Characteristics | Mortality Tree Species | Celtis occidentalis / CEOC (Common hackberry) | + | Tree Characteristics | Mortality Tree Species | Chrysolepis chrysophylla / CHCHC4 (Giant chinkapin) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis lawsoniana / CHLA (PortOrford - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis nootkatensis / CHNO (Alaska - cedar) | + | Tree Characteristics | Mortality Tree Species | Chamaecyparis thyoides / CHTH2 (Atlantic white - cedar) | + | Tree Characteristics | Mortality Tree Species | Cornus nuttallii / CONU4 (Pacific dogwood) | + | Tree Characteristics | Mortality Tree Species | Crataegus species / CRASPP (Hawthorns) | + | Tree Characteristics | Mortality Tree Species | Diospyros virginiana / DIVI5 (Persimmon) | + | Tree Characteristics | Mortality Tree Species | Fagus grandifolia / FAGR (American beech) | + | Tree Characteristics | Mortality Tree Species | Fraxinus americana / FRAM2 (White ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus species / FRASPP (Ashes) | + | Tree Characteristics | Mortality Tree Species | Fraxinus nigra / FRNI (Black ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus pennsylvanica / FRPE (Green ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus profunda / FRPR (Pumpkin ash) | + | Tree Characteristics | Mortality Tree Species | Fraxinus quadrangulata / FRQU (Blue ash) | + | Tree Characteristics | Mortality Tree Species | Gleditsia triacanthos / GLTR (Honeylocust) | + | Tree Characteristics | Mortality Tree Species | Gordonia lasianthus / GOLA (Loblolly bay) | + | Tree Characteristics | Mortality Tree Species | Gymnocladus dioicus / GYDI (Kentucky coffeetree) | + | Tree Characteristics | Mortality Tree Species | Halesia species / HALSPP (Silverbells) | + | Tree Characteristics | Mortality Tree Species | Ilex opaca / ILOP (American holly) | + | Tree Characteristics | Mortality Tree Species | Juglans cinerea / JUCI (Butternut) | + | Tree Characteristics | Mortality Tree Species | Juglans nigra / JUNI (Black walnut) | + | Tree Characteristics | Mortality Tree Species | Juniperus occidentalis / JUOC (Western juniper) | + | Tree Characteristics | Mortality Tree Species | Juniperus virginiana / JUVI (Eastern redcedar) | + | Tree Characteristics | Mortality Tree Species | Larix laricina / LALA (Tamarack) | + | Tree Characteristics | Mortality Tree Species | Larix lyallii / LALY (Subalpine Larch) | + | Tree Characteristics | Mortality Tree Species | Larix occidentalis / LAOC (Western Larch) | + | Tree Characteristics | Mortality Tree Species | Lithocarpus densiflorus / LIDE3 (Tanoak) | + | Tree Characteristics | Mortality Tree Species | Liquidambar styraciflua / LIST2 (Sweetgum) | + | Tree Characteristics | Mortality Tree Species | Liriodendron tulipifera / LITU (Tuliptree) | + | Tree Characteristics | Mortality Tree Species | Magnolia acuminata / MAAC (Cucumber - tree) | + | Tree Characteristics | Mortality Tree Species | Magnolia grandiflora / MAGR4 (Southern magnolia) | + | Tree Characteristics | Mortality Tree Species | Magnolia species / MAGSPP (Magnolias) | + | Tree Characteristics | Mortality Tree Species | Prunus species / MALPRU (cherry and plum species) | + | Tree Characteristics | Mortality Tree Species | Malus species / MALSPP (Apples) | + | Tree Characteristics | Mortality Tree Species | Magnolia macrophylla / MAMA2 (Bigleaf magnolia) | + | Tree Characteristics | Mortality Tree Species | Maclura pomifera / MAPO (Osage - orange) | + | Tree Characteristics | Mortality Tree Species | Magnolia virginiana / MAVI2 (Sweetbay) | + | Tree Characteristics | Mortality Tree Species | Morus alba / MOAL (White mulberry) | + | Tree Characteristics | Mortality Tree Species | Morus species / MORSPP (Mulberries) | + | Tree Characteristics | Mortality Tree Species | Morus rubra / MORU2 (Red mulberry) | + | Tree Characteristics | Mortality Tree Species | Nyssa aquatica / NYAQ2 (Water tupelo) | + | Tree Characteristics | Mortality Tree Species | Nyssa sylvatica / NYBI (Blackgum) | + | Tree Characteristics | Mortality Tree Species | Nyssa ogeche / NYOG (Ogeechee tupelo) | + | Tree Characteristics | Mortality Tree Species | Ostrya virginiana / OSVI (Hophornbeam) | + | Tree Characteristics | Mortality Tree Species | Oxydendrum arboreum / OXAR (Sourwood) | + | Tree Characteristics | Mortality Tree Species | Paulownia tomentosa / PATO2 (Princesstree) | + | Tree Characteristics | Mortality Tree Species | Persea borbonia / PEBO (Redbay) | + | Tree Characteristics | Mortality Tree Species | Picea abies / PIAB (Norway spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus albicaulis / PIAL (Whitebark pine) | + | Tree Characteristics | Mortality Tree Species | Pinus attenuata / PIAT (Knobcone pine) | + | Tree Characteristics | Mortality Tree Species | Pinus banksiana / PIBA2 (Jack pine) | + | Tree Characteristics | Mortality Tree Species | Pinus clausa / PICL (Sand pine) | + | Tree Characteristics | Mortality Tree Species | Pinus contorta / PICO (Lodgepole pine) | + | Tree Characteristics | Mortality Tree Species | Pinus echinata / PIEC2 (Shortleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus elliottii / PIEL (Slash pine) | + | Tree Characteristics | Mortality Tree Species | Picea engelmannii / PIEN (Engelmann spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus flexilis / PIFL2 (Limber pine) | + | Tree Characteristics | Mortality Tree Species | Picea glauca / PIGL (White spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus glabra / PIGL2 (Spruce pine) | + | Tree Characteristics | Mortality Tree Species | Pinus jeffreyi / PIJE (Jeffrey pine) | + | Tree Characteristics | Mortality Tree Species | Pinus lambertiana / PILA (Sugar pine) | + | Tree Characteristics | Mortality Tree Species | Picea mariana / PIMA (Black spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus monticola / PIMO3 (Western white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus palustris / PIPA2 (Longleaf pine) | + | Tree Characteristics | Mortality Tree Species | Pinus ponderosa / PIPO (Ponderosa pine) | + | Tree Characteristics | Mortality Tree Species | Picea pungens / PIPU (Blue spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus pungens / PIPU5 (Table mountain pine) | + | Tree Characteristics | Mortality Tree Species | Pinus resinosa / PIRE (Red pine) | + | Tree Characteristics | Mortality Tree Species | Pinus rigida / PIRI (Pitch pine) | + | Tree Characteristics | Mortality Tree Species | Picea rubens / PIRU (Red spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus sabiniana / PISA2 (Gray pine) | + | Tree Characteristics | Mortality Tree Species | Pinus serotina / PISE (Pond pine) | + | Tree Characteristics | Mortality Tree Species | Picea sitchensis / PISI (Sitka spruce) | + | Tree Characteristics | Mortality Tree Species | Pinus strobus / PIST (Eastern white pine) | + | Tree Characteristics | Mortality Tree Species | Pinus sylvestris / PISY (Scots pine) | + | Tree Characteristics | Mortality Tree Species | Pinus taeda / PITA (Loblolly pine) | + | Tree Characteristics | Mortality Tree Species | Pinus virginiana / PIVI2 (Virginia pine) | + | Tree Characteristics | Mortality Tree Species | Platanus occidentalis / PLOC (American sycamore) | + | Tree Characteristics | Mortality Tree Species | Populus balsamifera / POBA2 (Balsam poplar) | + | Tree Characteristics | Mortality Tree Species | Populus grandidentata / POGR4 (Bigtooth aspen) | + | Tree Characteristics | Mortality Tree Species | Populus heterophylla / POHE4 (Swamp cottonwood) | + | Tree Characteristics | Mortality Tree Species | Populus tremuloides / POTR12 (Quaking aspen) | + | Tree Characteristics | Mortality Tree Species | Prunus americana / PRAM (American plum) | + | Tree Characteristics | Mortality Tree Species | Prunus emarginata / PREM (Bitter cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus pensylvanica / PRPE2 (Pin cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus serotina / PRSE2 (Black cherry) | + | Tree Characteristics | Mortality Tree Species | Prunus virginiana / PRVI (Chokecherry) | + | Tree Characteristics | Mortality Tree Species | Pseudotsuga menziesii / PSME (Douglas - fir) | + | Tree Characteristics | Mortality Tree Species | Quercus agrifolia / QUAG (California live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus chrysolepis / QUCH2 (Canyon live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus douglasii / QUDU (Blue oak) | + | Tree Characteristics | Mortality Tree Species | Quercus ellipsoidalis / QUEL (Northern pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus species / QUESPP (Oaks) | + | Tree Characteristics | Mortality Tree Species | Quercus falcata / QUFA (Southern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus imbricaria / QUIM (Shingle oak) | + | Tree Characteristics | Mortality Tree Species | Quercus incana / QUIN (Bluejack oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laevis / QULA2 (Turkey oak) | + | Tree Characteristics | Mortality Tree Species | Quercus laurifolia / QULA3 (Laurel oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lobata / QULO (Valley oak) | + | Tree Characteristics | Mortality Tree Species | Quercus lyrata / QULY (Overcup oak) | + | Tree Characteristics | Mortality Tree Species | Quercus macrocarpa / QUMA2 (Bur oak) | + | Tree Characteristics | Mortality Tree Species | Quercus michauxii / QUMI (Swamp chestnut oak) | + | Tree Characteristics | Mortality Tree Species | Quercus muehlenbergii / QUMU (Chinkapin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus nigra / QUNI (Water oak) | + | Tree Characteristics | Mortality Tree Species | Quercus palustris / QUPA2 (Pin oak) | + | Tree Characteristics | Mortality Tree Species | Quercus phellos / QUPH (Willow oak) | + | Tree Characteristics | Mortality Tree Species | Quercus rubra / QURU (Northern red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus shumardii / QUSH (Shumard oak) | + | Tree Characteristics | Mortality Tree Species | Quercus stellata / QUST (Post oak) | + | Tree Characteristics | Mortality Tree Species | Quercus texana / QUTE (Texas red oak) | + | Tree Characteristics | Mortality Tree Species | Quercus virginiana / QUVI (Live oak) | + | Tree Characteristics | Mortality Tree Species | Quercus wislizeni / QUWI2 (Interior live oak) | + | Tree Characteristics | Mortality Tree Species | Robinia pseudoacacia / ROPS (Black locust) | + | Tree Characteristics | Mortality Tree Species | Salix bebbiana / SABE2 (Bebb willow) | + | Tree Characteristics | Mortality Tree Species | Salix species / SALSPP (Willows) | + | Tree Characteristics | Mortality Tree Species | Salix nigra / SANI (Black willow) | + | Tree Characteristics | Mortality Tree Species | Sorbus americana / SOAM3 (American mountain - ash) | + | Tree Characteristics | Mortality Tree Species | Taxodium ascendens / TAAS (Pond cypress) | + | Tree Characteristics | Mortality Tree Species | Taxus brevifolia / TABR2 (Pacific yew) | + | Tree Characteristics | Mortality Tree Species | Taxodium distichum / TADI2 (Bald cypress) | + | Tree Characteristics | Mortality Tree Species | Thuja occidentalis / THOC2 (arborvitae) | + | Tree Characteristics | Mortality Tree Species | Thuja plicata / THPL (Western redcedar) | + | Tree Characteristics | Mortality Tree Species | Tilia americana / TIAM (American basswood) | + | Tree Characteristics | Mortality Tree Species | Tsuga canadensis / TSCA (Eastern hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga heterophylla / TSHE (Western hemlock) | + | Tree Characteristics | Mortality Tree Species | Tsuga mertensiana / TSME (Mountain hemlock) | + | Tree Characteristics | Mortality Tree Species | Ulmus alata / ULAL (Winged elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus americana / ULAM (American elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus species / ULMSPP (Elms) | + | Tree Characteristics | Mortality Tree Species | Ulmus pumila / ULPU (Siberian elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus rubra / ULRU (Slippery elm) | + | Tree Characteristics | Mortality Tree Species | Ulmus thomasii / ULTH (Rock elm) | + | Tree Characteristics | Mortality Tree Species | Umbellularia californica / UMCA (California - laurel) | \ No newline at end of file diff --git a/features/results-page/results-page_surface_backing-fireline-intensity.feature b/features/results-page/results-page_surface_backing-fireline-intensity.feature new file mode 100644 index 000000000..f7270131f --- /dev/null +++ b/features/results-page/results-page_surface_backing-fireline-intensity.feature @@ -0,0 +1,22 @@ +@core +Feature: Surface Results - Backing Fireline Intensity + + @core + Scenario: Backing Fireline Intensity is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Fireline Intensity | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Backing Fireline Intensity | \ No newline at end of file diff --git a/features/results-page/results-page_surface_backing-flame-length.feature b/features/results-page/results-page_surface_backing-flame-length.feature new file mode 100644 index 000000000..1d7aae7fc --- /dev/null +++ b/features/results-page/results-page_surface_backing-flame-length.feature @@ -0,0 +1,22 @@ +@core +Feature: Surface Results - Backing Flame Length + + @core + Scenario: Backing Flame Length is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Flame Length | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Backing Flame Length | \ No newline at end of file diff --git a/features/results-page/results-page_surface_backing-rate-of-spread.feature b/features/results-page/results-page_surface_backing-rate-of-spread.feature new file mode 100644 index 000000000..f5753ce1f --- /dev/null +++ b/features/results-page/results-page_surface_backing-rate-of-spread.feature @@ -0,0 +1,22 @@ +@core +Feature: Surface Results - Backing Rate of Spread + + @core + Scenario: Backing Rate of Spread is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Backing Rate of Spread | \ No newline at end of file diff --git a/features/results-page/results-page_surface_backing-spread-distance.feature b/features/results-page/results-page_surface_backing-spread-distance.feature new file mode 100644 index 000000000..ede36b796 --- /dev/null +++ b/features/results-page/results-page_surface_backing-spread-distance.feature @@ -0,0 +1,24 @@ +@core +Feature: Surface Results - Backing Spread Distance + + @core + Scenario: Backing Spread Distance is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + | Size | Surface - Fire Size | Spread Distance | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + | Size | Elapsed Time | | 1 | + Then "the following outputs are displayed in the results page" + | output | + | Backing Spread Distance | \ No newline at end of file diff --git a/features/results-page/results-page_surface_direction-of-backing.feature b/features/results-page/results-page_surface_direction-of-backing.feature new file mode 100644 index 000000000..19f06615c --- /dev/null +++ b/features/results-page/results-page_surface_direction-of-backing.feature @@ -0,0 +1,23 @@ +@core +Feature: Surface Results - Direction of Backing + + @core + Scenario: Direction of Backing is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Not Aligned (Wind is >30° from upslope). | + | Wind and Slope | Wind and slope are | Wind Direction (from upslope) | 45 | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Direction of Backing | \ No newline at end of file diff --git a/features/results-page/results-page_surface_direction-of-flanking.feature b/features/results-page/results-page_surface_direction-of-flanking.feature new file mode 100644 index 000000000..c1e6a2e49 --- /dev/null +++ b/features/results-page/results-page_surface_direction-of-flanking.feature @@ -0,0 +1,23 @@ +@core +Feature: Surface Results - Direction of Flanking + + @core + Scenario: Direction of Flanking is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Not Aligned (Wind is >30° from upslope). | + | Wind and Slope | Wind and slope are | Wind Direction (from upslope) | 45 | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Direction of Flanking | \ No newline at end of file diff --git a/features/results-page/results-page_surface_direction-of-heading.feature b/features/results-page/results-page_surface_direction-of-heading.feature new file mode 100644 index 000000000..803c83569 --- /dev/null +++ b/features/results-page/results-page_surface_direction-of-heading.feature @@ -0,0 +1,23 @@ +@core +Feature: Surface Results - Direction of Heading + + @core + Scenario: Direction of Heading is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Not Aligned (Wind is >30° from upslope). | + | Wind and Slope | Wind and slope are | Wind Direction (from upslope) | 45 | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Direction of Heading | \ No newline at end of file diff --git a/features/results-page/results-page_surface_direction-of-interest-fireline-intensity.feature b/features/results-page/results-page_surface_direction-of-interest-fireline-intensity.feature new file mode 100644 index 000000000..b6e8691b2 --- /dev/null +++ b/features/results-page/results-page_surface_direction-of-interest-fireline-intensity.feature @@ -0,0 +1,23 @@ +@core +Feature: Surface Results - Direction of Interest Fireline Intensity + + @core + Scenario: Direction of Interest Fireline Intensity is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Direction of Interest | + | Fire Behavior | Surface Fire | Fireline Intensity | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Spread Directions | Direction of Interest | | 90 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Direction of Interest Fireline Intensity | \ No newline at end of file diff --git a/features/results-page/results-page_surface_direction-of-interest-flame-length.feature b/features/results-page/results-page_surface_direction-of-interest-flame-length.feature new file mode 100644 index 000000000..5ff5bfa89 --- /dev/null +++ b/features/results-page/results-page_surface_direction-of-interest-flame-length.feature @@ -0,0 +1,23 @@ +@core +Feature: Surface Results - Direction of Interest Flame Length + + @core + Scenario: Direction of Interest Flame Length is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Direction of Interest | + | Fire Behavior | Surface Fire | Flame Length | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Spread Directions | Direction of Interest | | 90 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Direction of Interest Flame Length | \ No newline at end of file diff --git a/features/results-page/results-page_surface_direction-of-interest-rate-of-spread.feature b/features/results-page/results-page_surface_direction-of-interest-rate-of-spread.feature new file mode 100644 index 000000000..84997e131 --- /dev/null +++ b/features/results-page/results-page_surface_direction-of-interest-rate-of-spread.feature @@ -0,0 +1,23 @@ +@core +Feature: Surface Results - Direction of Interest Rate of Spread + + @core + Scenario: Direction of Interest Rate of Spread is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Direction of Interest | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Spread Directions | Direction of Interest | | 90 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Direction of Interest Rate of Spread | \ No newline at end of file diff --git a/features/results-page/results-page_surface_doi-spread-distance.feature b/features/results-page/results-page_surface_doi-spread-distance.feature new file mode 100644 index 000000000..4b45cba68 --- /dev/null +++ b/features/results-page/results-page_surface_doi-spread-distance.feature @@ -0,0 +1,25 @@ +@core +Feature: Surface Results - DOI Spread Distance + + @core + Scenario: DOI Spread Distance is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Direction of Interest | + | Fire Behavior | Surface Fire | Rate of Spread | + | Size | Surface - Fire Size | Spread Distance | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Spread Directions | Direction of Interest | | 90 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + | Size | Elapsed Time | | 1 | + Then "the following outputs are displayed in the results page" + | output | + | DOI Spread Distance | \ No newline at end of file diff --git a/features/results-page/results-page_surface_firebrand-height-from-a-burning-pile.feature b/features/results-page/results-page_surface_firebrand-height-from-a-burning-pile.feature new file mode 100644 index 000000000..13f2d2bdd --- /dev/null +++ b/features/results-page/results-page_surface_firebrand-height-from-a-burning-pile.feature @@ -0,0 +1,22 @@ +@core +Feature: Surface Results - Firebrand Height from a Burning Pile + + @core + Scenario: Firebrand Height from a Burning Pile is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Burning Pile | + When these input paths are selected + | submodule | group | subgroup | value | + | Wind and Slope | Wind Measured at: | | 20-Foot | + | Wind and Slope | 20-Foot Wind Speed | | 1 | + | Spot | Burning Pile | Flame Height from a Burning Pile | 1 | + | Spot | Downwind Canopy Fuel | Downwind Canopy Height | 1 | + | Spot | Downwind Canopy Fuel | Downwind Canopy Cover | Closed | + | Spot | Topography | Ridge-to-Valley Elevation Difference | 1000 | + | Spot | Topography | Ridge-to-Valley Horizontal Distance | 1 | + | Spot | Topography | Spotting Source Location | RT (Ridge Top) | + Then "the following outputs are displayed in the results page" + | output | + | Firebrand Height from a Burning Pile | \ No newline at end of file diff --git a/features/results-page/results-page_surface_flanking-fireline-intensity.feature b/features/results-page/results-page_surface_flanking-fireline-intensity.feature new file mode 100644 index 000000000..c3894afc7 --- /dev/null +++ b/features/results-page/results-page_surface_flanking-fireline-intensity.feature @@ -0,0 +1,22 @@ +@core +Feature: Surface Results - Flanking Fireline Intensity + + @core + Scenario: Flanking Fireline Intensity is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Fireline Intensity | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Flanking Fireline Intensity | \ No newline at end of file diff --git a/features/results-page/results-page_surface_flanking-flame-length.feature b/features/results-page/results-page_surface_flanking-flame-length.feature new file mode 100644 index 000000000..ffb04e9d3 --- /dev/null +++ b/features/results-page/results-page_surface_flanking-flame-length.feature @@ -0,0 +1,22 @@ +@core +Feature: Surface Results - Flanking Flame Length + + @core + Scenario: Flanking Flame Length is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Flame Length | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Flanking Flame Length | \ No newline at end of file diff --git a/features/results-page/results-page_surface_flanking-rate-of-spread.feature b/features/results-page/results-page_surface_flanking-rate-of-spread.feature new file mode 100644 index 000000000..06cca5ca2 --- /dev/null +++ b/features/results-page/results-page_surface_flanking-rate-of-spread.feature @@ -0,0 +1,22 @@ +@core +Feature: Surface Results - Flanking Rate of Spread + + @core + Scenario: Flanking Rate of Spread is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Flanking Rate of Spread | \ No newline at end of file diff --git a/features/results-page/results-page_surface_flanking-spread-distance.feature b/features/results-page/results-page_surface_flanking-spread-distance.feature new file mode 100644 index 000000000..4eadc3126 --- /dev/null +++ b/features/results-page/results-page_surface_flanking-spread-distance.feature @@ -0,0 +1,24 @@ +@core +Feature: Surface Results - Flanking Spread Distance + + @core + Scenario: Flanking Spread Distance is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + | Size | Surface - Fire Size | Spread Distance | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + | Size | Elapsed Time | | 1 | + Then "the following outputs are displayed in the results page" + | output | + | Flanking Spread Distance | \ No newline at end of file diff --git a/features/results-page/results-page_surface_heading-fireline-intensity.feature b/features/results-page/results-page_surface_heading-fireline-intensity.feature new file mode 100644 index 000000000..9e75c594d --- /dev/null +++ b/features/results-page/results-page_surface_heading-fireline-intensity.feature @@ -0,0 +1,25 @@ +@core +Feature: Surface Results - Heading Fireline Intensity + + @core + Scenario: Heading Fireline Intensity is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Direction Mode | Direction of Interest | + | Fire Behavior | Surface Fire | Fireline Intensity | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Spread Directions | Direction of Interest | | 90 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Heading Fireline Intensity | \ No newline at end of file diff --git a/features/results-page/results-page_surface_heading-flame-length.feature b/features/results-page/results-page_surface_heading-flame-length.feature new file mode 100644 index 000000000..77546f741 --- /dev/null +++ b/features/results-page/results-page_surface_heading-flame-length.feature @@ -0,0 +1,25 @@ +@core +Feature: Surface Results - Heading Flame Length + + @core + Scenario: Heading Flame Length is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Direction Mode | Direction of Interest | + | Fire Behavior | Surface Fire | Flame Length | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Spread Directions | Direction of Interest | | 90 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Heading Flame Length | \ No newline at end of file diff --git a/features/results-page/results-page_surface_heading-rate-of-spread.feature b/features/results-page/results-page_surface_heading-rate-of-spread.feature new file mode 100644 index 000000000..d88390dd0 --- /dev/null +++ b/features/results-page/results-page_surface_heading-rate-of-spread.feature @@ -0,0 +1,25 @@ +@core +Feature: Surface Results - Heading Rate of Spread + + @core + Scenario: Heading Rate of Spread is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Direction Mode | Direction of Interest | + | Fire Behavior | Surface Fire | Rate of Spread | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Spread Directions | Direction of Interest | | 90 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + Then "the following outputs are displayed in the results page" + | output | + | Heading Rate of Spread | \ No newline at end of file diff --git a/features/results-page/results-page_surface_heading-spread-distance.feature b/features/results-page/results-page_surface_heading-spread-distance.feature new file mode 100644 index 000000000..3376c42c3 --- /dev/null +++ b/features/results-page/results-page_surface_heading-spread-distance.feature @@ -0,0 +1,25 @@ +@core +Feature: Surface Results - Heading Spread Distance + + @core + Scenario: Heading Spread Distance is displayed in results when inputs are set + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + | Size | Surface - Fire Size | Spread Distance | + When these input paths are selected + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Moisture | Moisture Input Mode | | Individual Size Class | + | Fuel Moisture | By Size Class | 1-h Fuel Moisture | 1 | + | Wind and Slope | Wind Measured at: | | Midflame (Eye Level) | + | Wind and Slope | Wind Speed | | 1 | + | Wind and Slope | Wind and slope are | | Aligned (Wind is ≤30° from upslope). | + | Wind and Slope | Slope | | 0 | + | Size | Elapsed Time | | 1 | + Then "the following outputs are displayed in the results page" + | output | + | Heading Spread Distance | \ No newline at end of file diff --git a/features/surface-input_fuel-model.feature b/features/surface-input_fuel-model.feature new file mode 100644 index 000000000..6a1d1de39 --- /dev/null +++ b/features/surface-input_fuel-model.feature @@ -0,0 +1,43 @@ +@core +Feature: Surface Input - Fuel Model + + @core + Scenario Outline: Fuel Model is displayed with Surface outputs + Given I have started a new Surface Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Fuel Model | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + | Fire Behavior | Surface Fire | Fireline Intensity | + | Fire Behavior | Surface Fire | Rate of Spread | + | Size | Surface - Fire Size | Spread Distance | + | Size | Surface - Fire Size | Fire Area | + | Size | Surface - Fire Size | Fire Perimeter | + | Size | Surface - Fire Size | Length-to-Width Ratio | + + @core + Scenario Outline: Fuel Model is displayed with Surface & Crown outputs + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Fuel Model | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + | Fire Behavior | Fire Behavior | Flame Length | + | Fire Behavior | Fire Behavior | Fireline Intensity | + | Size | Crown - Fire Size | Fire Area | + | Size | Crown - Fire Size | Fire Perimeter | + | Size | Crown - Fire Size | Length-to-Width Ratio | + | Size | Crown - Fire Size | Spread Distance | + | Fire Type | Transition to Crown Fire | Transition Ratio | + | Fire Type | Transition to Crown Fire | Critical Surface Flame Length | + | Fire Type | Transition to Crown Fire | Critical Surface Fireline Intensity | + | Fire Type | Active Crown Fire | Active Ratio | + | Fire Type | Active Crown Fire | Critical Crown Rate of Spread | \ No newline at end of file diff --git a/features/surface-input_fuel-model_standard_fuel-model.feature b/features/surface-input_fuel-model_standard_fuel-model.feature new file mode 100644 index 000000000..fd8561614 --- /dev/null +++ b/features/surface-input_fuel-model_standard_fuel-model.feature @@ -0,0 +1,26 @@ +@core +Feature: Surface Input - Fuel Model -> Standard -> Fuel Model + + @core + Scenario: Fuel Model is displayed + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Model | Standard | Fuel Model | + + @core + Scenario: Fuel Model is displayed when Wind-Driven Surface Fire (Grass Only) is selected + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Model | Standard | Fuel Model | \ No newline at end of file diff --git a/features/surface-input_fuel-moisture.feature b/features/surface-input_fuel-moisture.feature new file mode 100644 index 000000000..b4aa8b81a --- /dev/null +++ b/features/surface-input_fuel-moisture.feature @@ -0,0 +1,45 @@ +@core +Feature: Surface Input - Fuel Moisture + + @core + Scenario Outline: Fuel Moisture is displayed with Surface outputs + Given I have started a new Surface Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + | Fire Behavior | Surface Fire | Fireline Intensity | + | Fire Behavior | Surface Fire | Rate of Spread | + | Size | Surface - Fire Size | Spread Distance | + | Size | Surface - Fire Size | Fire Area | + | Size | Surface - Fire Size | Fire Perimeter | + | Size | Surface - Fire Size | Length-to-Width Ratio | + | Fire Behavior | Ignition | Probability of Ignition | + + @core + Scenario Outline: Fuel Moisture is displayed with Surface & Crown outputs + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + | Fire Behavior | Fire Behavior | Flame Length | + | Fire Behavior | Fire Behavior | Fireline Intensity | + | Size | Crown - Fire Size | Fire Area | + | Size | Crown - Fire Size | Fire Perimeter | + | Size | Crown - Fire Size | Length-to-Width Ratio | + | Size | Crown - Fire Size | Spread Distance | + | Fire Type | Transition to Crown Fire | Transition Ratio | + | Fire Type | Transition to Crown Fire | Critical Surface Flame Length | + | Fire Type | Transition to Crown Fire | Critical Surface Fireline Intensity | + | Fire Type | Active Crown Fire | Active Ratio | + | Fire Type | Active Crown Fire | Critical Crown Rate of Spread | + | Fire Behavior | Ignition | Probability of Ignition | \ No newline at end of file diff --git a/features/surface-input_fuel-moisture_by-size-class.feature b/features/surface-input_fuel-moisture_by-size-class.feature new file mode 100644 index 000000000..30ecce745 --- /dev/null +++ b/features/surface-input_fuel-moisture_by-size-class.feature @@ -0,0 +1,15 @@ +@core +Feature: Surface Input - Fuel Moisture -> By Size Class + + @core + Scenario: By Size Class is displayed + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Individual Size Class | + Then the following input paths are displayed: + | submodule | group | + | Fuel Moisture | By Size Class | \ No newline at end of file diff --git a/features/surface-input_fuel-moisture_by-size-class_10-h-fuel-moisture.feature b/features/surface-input_fuel-moisture_by-size-class_10-h-fuel-moisture.feature new file mode 100644 index 000000000..5891eec8c --- /dev/null +++ b/features/surface-input_fuel-moisture_by-size-class_10-h-fuel-moisture.feature @@ -0,0 +1,109 @@ +@core +Feature: Surface Input - Fuel Moisture -> By Size Class -> 10-h Fuel Moisture + + @core + Scenario Outline: 10-h Fuel Moisture is displayed with these Fuel Model Code + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Individual Size Class | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | By Size Class | 10-h Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB10/10 - Timber litter & understory (Static) | + + @extended + Scenario Outline: 10-h Fuel Moisture is displayed with these Fuel Model Code (Extended) + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Individual Size Class | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | By Size Class | 10-h Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB10/10 - Timber litter & understory (Static) | + | Fuel Model | Standard | Fuel Model | GR3/103 - Low load, very coarse, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR8/108 - High load, very coarse, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR9/109 - Very high load, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | FB11/11 - Light logging slash (Static) | + | Fuel Model | Standard | Fuel Model | V-Hb/110 - Short Grass, < 0.5 m (Dynamic) | + | Fuel Model | Standard | Fuel Model | V-Ha/111 - Tall Grass, > 0.5 m (Dynamic) | + | Fuel Model | Standard | Fuel Model | FB12/12 - Medium logging slash (Static) | + | Fuel Model | Standard | Fuel Model | GS2/122 - Moderate load, dry climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS3/123 - Moderate load, humid climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS4/124 - High load, humid climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | FB13/13 - Heavy logging slash (Static) | + | Fuel Model | Standard | Fuel Model | SH1/141 - Low load, dry climate shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SH2/142 - Moderate load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH3/143 - Moderate load, humid climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH4/144 - Low load, humid climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH5/145 - High load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH6/146 - Low load, humid climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH7/147 - Very high load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH8/148 - High load, humid climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH9/149 - Very high load, humid climate shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SCAL17/150 - Chamise with Moderate Load Grass, 4 feet (Static) | + | Fuel Model | Standard | Fuel Model | SCAL15/151 - Chamise with Low Load Grass, 3 feet (Static) | + | Fuel Model | Standard | Fuel Model | SCAL16/152 - North Slope Ceanothus with Moderate Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | SCAL14/153 - Manzanita/Scrub Oak with Low Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | SCAL18/154 - Coastal Sage/Buckwheat Scrub with Low Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | V-MH/155 - Short Green Shrub < 1 m With Grass, Discontinuous (< 1 m) often discontinuous and with grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | V-MMb/156 - Short Shrub < 1 m, Low Dead Fraction and/or Thick Foliage (Static) | + | Fuel Model | Standard | Fuel Model | V-MAb/157 - Short Shrub < 1 m, High Dead Fraction and/or Thin Fuel (Static) | + | Fuel Model | Standard | Fuel Model | V-MMa/158 - Tall Shrub > 1 m, Low Dead Fraction and/or Thick Foliage (Static) | + | Fuel Model | Standard | Fuel Model | V-MAa/159 - Tall Shrub > 1 m, High Dead Fraction and/or Thin Fuel (Static) | + | Fuel Model | Standard | Fuel Model | TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU2/162 - Moderate load, humid climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU5/165 - Very high load, dry climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | M-EUCd/166 - Discontinuous Litter Eucalyptus Plantation, With or Without Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-H/167 - Deciduous or Conifer Litter, Shrub and Herb Understory | + | Fuel Model | Standard | Fuel Model | M-F/168 - Deciduous or Conifer Litter, Shrub and Fern Understory (Dynamic) | + | Fuel Model | Standard | Fuel Model | M-CAD/169 - Deciduous Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-ESC/170 - Sclerophyll Broadleaf Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-PIN/171 - Medium-Long Needle Pine Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-EUC/172 - Eucalyptus Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | TL1/181 - Low load, compact conifer litter (Static) | + | Fuel Model | Standard | Fuel Model | TL2/182 - Low load broadleaf litter (Static) | + | Fuel Model | Standard | Fuel Model | TL3/183 - Moderate load conifer litter (Static) | + | Fuel Model | Standard | Fuel Model | TL4/184 - Small downed logs (Static) | + | Fuel Model | Standard | Fuel Model | TL5/185 - High load conifer litter (Static) | + | Fuel Model | Standard | Fuel Model | TL6/186 - Moderate load broadleaf litter (Static) | + | Fuel Model | Standard | Fuel Model | TL7/187 - Large downed logs (Static) | + | Fuel Model | Standard | Fuel Model | TL8/188 - Long-needle litter (Static) | + | Fuel Model | Standard | Fuel Model | TL9/189 - Very high load broadleaf litter (Static) | + | Fuel Model | Standard | Fuel Model | F-RAC/190 - Very Compact Litter, Short Needle Conifers (Static) | + | Fuel Model | Standard | Fuel Model | F-FOL/191 - Compact Litter, Deciduous or Evergreen Foliage (Static) | + | Fuel Model | Standard | Fuel Model | F-PIN/192 - Litter from Medium-Long Needle Pine Trees (Static) | + | Fuel Model | Standard | Fuel Model | F-EUC/193 - Pure Eucalyptus Litter, No Understory (Static) | + | Fuel Model | Standard | Fuel Model | FB2/2 - Timber grass and understory (Static) | + | Fuel Model | Standard | Fuel Model | SB1/201 - Low load activity fuel (Static) | + | Fuel Model | Standard | Fuel Model | SB2/202 - Moderate load activity or low load blowdown (Static) | + | Fuel Model | Standard | Fuel Model | SB3/203 - High load activity fuel or moderate load blowdown (Static) | + | Fuel Model | Standard | Fuel Model | SB4/204 - High load blowdown (Static) | + | Fuel Model | Standard | Fuel Model | FB4/4 - Chaparral (Static) | + | Fuel Model | Standard | Fuel Model | FB5/5 - Brush (Static) | + | Fuel Model | Standard | Fuel Model | FB6/6 - Dormant brush, hardwood slash (Static) | + | Fuel Model | Standard | Fuel Model | FB7/7 - Southern rough (Static) | + | Fuel Model | Standard | Fuel Model | FB8/8 - Short needle litter (Static) | + | Fuel Model | Standard | Fuel Model | FB9/9 - Long needle or hardwood litter (Static) | \ No newline at end of file diff --git a/features/surface-input_fuel-moisture_by-size-class_100-h-fuel-moisture.feature b/features/surface-input_fuel-moisture_by-size-class_100-h-fuel-moisture.feature new file mode 100644 index 000000000..532da8d72 --- /dev/null +++ b/features/surface-input_fuel-moisture_by-size-class_100-h-fuel-moisture.feature @@ -0,0 +1,87 @@ +@core +Feature: Surface Input - Fuel Moisture -> By Size Class -> 100-h Fuel Moisture + + @core + Scenario Outline: 100-h Fuel Moisture is displayed with these Fuel Model Code + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Individual Size Class | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | By Size Class | 100-h Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB10/10 - Timber litter & understory (Static) | + + @extended + Scenario Outline: 100-h Fuel Moisture is displayed with these Fuel Model Code (Extended) + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Individual Size Class | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | By Size Class | 100-h Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB10/10 - Timber litter & understory (Static) | + | Fuel Model | Standard | Fuel Model | FB11/11 - Light logging slash (Static) | + | Fuel Model | Standard | Fuel Model | FB12/12 - Medium logging slash (Static) | + | Fuel Model | Standard | Fuel Model | GS4/124 - High load, humid climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | FB13/13 - Heavy logging slash (Static) | + | Fuel Model | Standard | Fuel Model | SH2/142 - Moderate load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH4/144 - Low load, humid climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH7/147 - Very high load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH8/148 - High load, humid climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SCAL17/150 - Chamise with Moderate Load Grass, 4 feet (Static) | + | Fuel Model | Standard | Fuel Model | SCAL15/151 - Chamise with Low Load Grass, 3 feet (Static) | + | Fuel Model | Standard | Fuel Model | SCAL16/152 - North Slope Ceanothus with Moderate Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | SCAL14/153 - Manzanita/Scrub Oak with Low Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | SCAL18/154 - Coastal Sage/Buckwheat Scrub with Low Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU2/162 - Moderate load, humid climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU5/165 - Very high load, dry climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | M-EUCd/166 - Discontinuous Litter Eucalyptus Plantation, With or Without Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-F/168 - Deciduous or Conifer Litter, Shrub and Fern Understory (Dynamic) | + | Fuel Model | Standard | Fuel Model | M-CAD/169 - Deciduous Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-ESC/170 - Sclerophyll Broadleaf Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | TL1/181 - Low load, compact conifer litter (Static) | + | Fuel Model | Standard | Fuel Model | TL2/182 - Low load broadleaf litter (Static) | + | Fuel Model | Standard | Fuel Model | TL3/183 - Moderate load conifer litter (Static) | + | Fuel Model | Standard | Fuel Model | TL4/184 - Small downed logs (Static) | + | Fuel Model | Standard | Fuel Model | TL5/185 - High load conifer litter (Static) | + | Fuel Model | Standard | Fuel Model | TL6/186 - Moderate load broadleaf litter (Static) | + | Fuel Model | Standard | Fuel Model | TL7/187 - Large downed logs (Static) | + | Fuel Model | Standard | Fuel Model | TL8/188 - Long-needle litter (Static) | + | Fuel Model | Standard | Fuel Model | TL9/189 - Very high load broadleaf litter (Static) | + | Fuel Model | Standard | Fuel Model | F-RAC/190 - Very Compact Litter, Short Needle Conifers (Static) | + | Fuel Model | Standard | Fuel Model | F-FOL/191 - Compact Litter, Deciduous or Evergreen Foliage (Static) | + | Fuel Model | Standard | Fuel Model | F-EUC/193 - Pure Eucalyptus Litter, No Understory (Static) | + | Fuel Model | Standard | Fuel Model | FB2/2 - Timber grass and understory (Static) | + | Fuel Model | Standard | Fuel Model | SB1/201 - Low load activity fuel (Static) | + | Fuel Model | Standard | Fuel Model | SB2/202 - Moderate load activity or low load blowdown (Static) | + | Fuel Model | Standard | Fuel Model | SB3/203 - High load activity fuel or moderate load blowdown (Static) | + | Fuel Model | Standard | Fuel Model | SB4/204 - High load blowdown (Static) | + | Fuel Model | Standard | Fuel Model | FB4/4 - Chaparral (Static) | + | Fuel Model | Standard | Fuel Model | FB6/6 - Dormant brush, hardwood slash (Static) | + | Fuel Model | Standard | Fuel Model | FB7/7 - Southern rough (Static) | + | Fuel Model | Standard | Fuel Model | FB8/8 - Short needle litter (Static) | + | Fuel Model | Standard | Fuel Model | FB9/9 - Long needle or hardwood litter (Static) | \ No newline at end of file diff --git a/features/surface-input_fuel-moisture_by-size-class_live-herbaceous-fuel-moisture.feature b/features/surface-input_fuel-moisture_by-size-class_live-herbaceous-fuel-moisture.feature new file mode 100644 index 000000000..521456e05 --- /dev/null +++ b/features/surface-input_fuel-moisture_by-size-class_live-herbaceous-fuel-moisture.feature @@ -0,0 +1,71 @@ +@core +Feature: Surface Input - Fuel Moisture -> By Size Class -> Live Herbaceous Fuel Moisture + + @core + Scenario Outline: Live Herbaceous Fuel Moisture is displayed with these Fuel Model Code + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Individual Size Class | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | By Size Class | Live Herbaceous Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | GR1/101 - Short, sparse, dry climate grass (Dynamic) | + + @extended + Scenario Outline: Live Herbaceous Fuel Moisture is displayed with these Fuel Model Code (Extended) + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Individual Size Class | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | By Size Class | Live Herbaceous Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | GR1/101 - Short, sparse, dry climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR2/102 - Low load, dry climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR3/103 - Low load, very coarse, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR4/104 - Moderate load, dry climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR5/105 - Low load, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR6/106 - Moderate load, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR7/107 - High load, dry climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR8/108 - High load, very coarse, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR9/109 - Very high load, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | V-Hb/110 - Short Grass, < 0.5 m (Dynamic) | + | Fuel Model | Standard | Fuel Model | V-Ha/111 - Tall Grass, > 0.5 m (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS1/121 - Low load, dry climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS2/122 - Moderate load, dry climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS3/123 - Moderate load, humid climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS4/124 - High load, humid climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SH1/141 - Low load, dry climate shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SH9/149 - Very high load, humid climate shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SCAL17/150 - Chamise with Moderate Load Grass, 4 feet (Static) | + | Fuel Model | Standard | Fuel Model | SCAL15/151 - Chamise with Low Load Grass, 3 feet (Static) | + | Fuel Model | Standard | Fuel Model | SCAL16/152 - North Slope Ceanothus with Moderate Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | SCAL14/153 - Manzanita/Scrub Oak with Low Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | SCAL18/154 - Coastal Sage/Buckwheat Scrub with Low Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | V-MH/155 - Short Green Shrub < 1 m With Grass, Discontinuous (< 1 m) often discontinuous and with grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | M-H/167 - Deciduous or Conifer Litter, Shrub and Herb Understory | + | Fuel Model | Standard | Fuel Model | M-F/168 - Deciduous or Conifer Litter, Shrub and Fern Understory (Dynamic) | + | Fuel Model | Standard | Fuel Model | FB2/2 - Timber grass and understory (Static) | \ No newline at end of file diff --git a/features/surface-input_fuel-moisture_by-size-class_live-woody-fuel-moisture.feature b/features/surface-input_fuel-moisture_by-size-class_live-woody-fuel-moisture.feature new file mode 100644 index 000000000..a5128adb0 --- /dev/null +++ b/features/surface-input_fuel-moisture_by-size-class_live-woody-fuel-moisture.feature @@ -0,0 +1,86 @@ +@core +Feature: Surface Input - Fuel Moisture -> By Size Class -> Live Woody Fuel Moisture + + @core + Scenario Outline: Live Woody Fuel Moisture is displayed with these Fuel Model Code + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Individual Size Class | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | By Size Class | Live Woody Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB10/10 - Timber litter & understory (Static) | + + @extended + Scenario Outline: Live Woody Fuel Moisture is displayed with these Fuel Model Code (Extended) + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Individual Size Class | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | By Size Class | Live Woody Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB10/10 - Timber litter & understory (Static) | + | Fuel Model | Standard | Fuel Model | V-Ha/111 - Tall Grass, > 0.5 m (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS1/121 - Low load, dry climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS2/122 - Moderate load, dry climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS3/123 - Moderate load, humid climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS4/124 - High load, humid climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SH1/141 - Low load, dry climate shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SH2/142 - Moderate load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH3/143 - Moderate load, humid climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH4/144 - Low load, humid climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH5/145 - High load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH6/146 - Low load, humid climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH7/147 - Very high load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH8/148 - High load, humid climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH9/149 - Very high load, humid climate shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SCAL17/150 - Chamise with Moderate Load Grass, 4 feet (Static) | + | Fuel Model | Standard | Fuel Model | SCAL15/151 - Chamise with Low Load Grass, 3 feet (Static) | + | Fuel Model | Standard | Fuel Model | SCAL16/152 - North Slope Ceanothus with Moderate Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | SCAL14/153 - Manzanita/Scrub Oak with Low Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | SCAL18/154 - Coastal Sage/Buckwheat Scrub with Low Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | V-MH/155 - Short Green Shrub < 1 m With Grass, Discontinuous (< 1 m) often discontinuous and with grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | V-MMb/156 - Short Shrub < 1 m, Low Dead Fraction and/or Thick Foliage (Static) | + | Fuel Model | Standard | Fuel Model | V-MAb/157 - Short Shrub < 1 m, High Dead Fraction and/or Thin Fuel (Static) | + | Fuel Model | Standard | Fuel Model | V-MMa/158 - Tall Shrub > 1 m, Low Dead Fraction and/or Thick Foliage (Static) | + | Fuel Model | Standard | Fuel Model | V-MAa/159 - Tall Shrub > 1 m, High Dead Fraction and/or Thin Fuel (Static) | + | Fuel Model | Standard | Fuel Model | TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU2/162 - Moderate load, humid climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU4/164 - Dwarf conifer understory (Static) | + | Fuel Model | Standard | Fuel Model | TU5/165 - Very high load, dry climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | M-EUCd/166 - Discontinuous Litter Eucalyptus Plantation, With or Without Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-H/167 - Deciduous or Conifer Litter, Shrub and Herb Understory | + | Fuel Model | Standard | Fuel Model | M-F/168 - Deciduous or Conifer Litter, Shrub and Fern Understory (Dynamic) | + | Fuel Model | Standard | Fuel Model | M-CAD/169 - Deciduous Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-ESC/170 - Sclerophyll Broadleaf Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-PIN/171 - Medium-Long Needle Pine Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-EUC/172 - Eucalyptus Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | F-RAC/190 - Very Compact Litter, Short Needle Conifers (Static) | + | Fuel Model | Standard | Fuel Model | F-FOL/191 - Compact Litter, Deciduous or Evergreen Foliage (Static) | + | Fuel Model | Standard | Fuel Model | F-EUC/193 - Pure Eucalyptus Litter, No Understory (Static) | + | Fuel Model | Standard | Fuel Model | FB4/4 - Chaparral (Static) | + | Fuel Model | Standard | Fuel Model | FB5/5 - Brush (Static) | + | Fuel Model | Standard | Fuel Model | FB7/7 - Southern rough (Static) | \ No newline at end of file diff --git a/features/surface-input_fuel-moisture_dead-live-herb-and-live-woody-categories.feature b/features/surface-input_fuel-moisture_dead-live-herb-and-live-woody-categories.feature new file mode 100644 index 000000000..ba16b48ee --- /dev/null +++ b/features/surface-input_fuel-moisture_dead-live-herb-and-live-woody-categories.feature @@ -0,0 +1,15 @@ +@core +Feature: Surface Input - Fuel Moisture -> Dead, Live Herb, and Live Woody Categories + + @core + Scenario: Dead, Live Herb, and Live Woody Categories is displayed + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Dead, Live Herb, and Live Woody Categories | + Then the following input paths are displayed: + | submodule | group | + | Fuel Moisture | Dead, Live Herb, and Live Woody Categories | \ No newline at end of file diff --git a/features/surface-input_fuel-moisture_dead-live-herb-and-live-woody-categories_dead-fuel-moisture.feature b/features/surface-input_fuel-moisture_dead-live-herb-and-live-woody-categories_dead-fuel-moisture.feature new file mode 100644 index 000000000..87c4510db --- /dev/null +++ b/features/surface-input_fuel-moisture_dead-live-herb-and-live-woody-categories_dead-fuel-moisture.feature @@ -0,0 +1,118 @@ +@core +Feature: Surface Input - Fuel Moisture -> Dead, Live Herb, and Live Woody Categories -> Dead Fuel Moisture + + @core + Scenario Outline: Dead Fuel Moisture is displayed with these Fuel Model Code + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Dead, Live Herb, and Live Woody Categories | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | Dead, Live Herb, and Live Woody Categories | Dead Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + + @extended + Scenario Outline: Dead Fuel Moisture is displayed with these Fuel Model Code (Extended) + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Dead, Live Herb, and Live Woody Categories | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | Dead, Live Herb, and Live Woody Categories | Dead Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB1/1 - Short grass (Static) | + | Fuel Model | Standard | Fuel Model | FB10/10 - Timber litter & understory (Static) | + | Fuel Model | Standard | Fuel Model | GR1/101 - Short, sparse, dry climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR2/102 - Low load, dry climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR3/103 - Low load, very coarse, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR4/104 - Moderate load, dry climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR5/105 - Low load, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR6/106 - Moderate load, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR7/107 - High load, dry climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR8/108 - High load, very coarse, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR9/109 - Very high load, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | FB11/11 - Light logging slash (Static) | + | Fuel Model | Standard | Fuel Model | V-Ha/111 - Tall Grass, > 0.5 m (Dynamic) | + | Fuel Model | Standard | Fuel Model | FB12/12 - Medium logging slash (Static) | + | Fuel Model | Standard | Fuel Model | GS1/121 - Low load, dry climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS2/122 - Moderate load, dry climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS3/123 - Moderate load, humid climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS4/124 - High load, humid climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | FB13/13 - Heavy logging slash (Static) | + | Fuel Model | Standard | Fuel Model | SH1/141 - Low load, dry climate shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SH2/142 - Moderate load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH3/143 - Moderate load, humid climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH4/144 - Low load, humid climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH5/145 - High load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH6/146 - Low load, humid climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH7/147 - Very high load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH8/148 - High load, humid climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH9/149 - Very high load, humid climate shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SCAL17/150 - Chamise with Moderate Load Grass, 4 feet (Static) | + | Fuel Model | Standard | Fuel Model | SCAL15/151 - Chamise with Low Load Grass, 3 feet (Static) | + | Fuel Model | Standard | Fuel Model | SCAL16/152 - North Slope Ceanothus with Moderate Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | SCAL14/153 - Manzanita/Scrub Oak with Low Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | SCAL18/154 - Coastal Sage/Buckwheat Scrub with Low Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | V-MH/155 - Short Green Shrub < 1 m With Grass, Discontinuous (< 1 m) often discontinuous and with grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | V-MMb/156 - Short Shrub < 1 m, Low Dead Fraction and/or Thick Foliage (Static) | + | Fuel Model | Standard | Fuel Model | V-MAb/157 - Short Shrub < 1 m, High Dead Fraction and/or Thin Fuel (Static) | + | Fuel Model | Standard | Fuel Model | V-MMa/158 - Tall Shrub > 1 m, Low Dead Fraction and/or Thick Foliage (Static) | + | Fuel Model | Standard | Fuel Model | V-MAa/159 - Tall Shrub > 1 m, High Dead Fraction and/or Thin Fuel (Static) | + | Fuel Model | Standard | Fuel Model | TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU2/162 - Moderate load, humid climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU4/164 - Dwarf conifer understory (Static) | + | Fuel Model | Standard | Fuel Model | TU5/165 - Very high load, dry climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | M-EUCd/166 - Discontinuous Litter Eucalyptus Plantation, With or Without Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-H/167 - Deciduous or Conifer Litter, Shrub and Herb Understory | + | Fuel Model | Standard | Fuel Model | M-F/168 - Deciduous or Conifer Litter, Shrub and Fern Understory (Dynamic) | + | Fuel Model | Standard | Fuel Model | M-CAD/169 - Deciduous Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-ESC/170 - Sclerophyll Broadleaf Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-PIN/171 - Medium-Long Needle Pine Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-EUC/172 - Eucalyptus Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | TL1/181 - Low load, compact conifer litter (Static) | + | Fuel Model | Standard | Fuel Model | TL2/182 - Low load broadleaf litter (Static) | + | Fuel Model | Standard | Fuel Model | TL3/183 - Moderate load conifer litter (Static) | + | Fuel Model | Standard | Fuel Model | TL4/184 - Small downed logs (Static) | + | Fuel Model | Standard | Fuel Model | TL5/185 - High load conifer litter (Static) | + | Fuel Model | Standard | Fuel Model | TL6/186 - Moderate load broadleaf litter (Static) | + | Fuel Model | Standard | Fuel Model | TL7/187 - Large downed logs (Static) | + | Fuel Model | Standard | Fuel Model | TL8/188 - Long-needle litter (Static) | + | Fuel Model | Standard | Fuel Model | TL9/189 - Very high load broadleaf litter (Static) | + | Fuel Model | Standard | Fuel Model | F-RAC/190 - Very Compact Litter, Short Needle Conifers (Static) | + | Fuel Model | Standard | Fuel Model | F-FOL/191 - Compact Litter, Deciduous or Evergreen Foliage (Static) | + | Fuel Model | Standard | Fuel Model | F-PIN/192 - Litter from Medium-Long Needle Pine Trees (Static) | + | Fuel Model | Standard | Fuel Model | F-EUC/193 - Pure Eucalyptus Litter, No Understory (Static) | + | Fuel Model | Standard | Fuel Model | FB2/2 - Timber grass and understory (Static) | + | Fuel Model | Standard | Fuel Model | SB1/201 - Low load activity fuel (Static) | + | Fuel Model | Standard | Fuel Model | SB2/202 - Moderate load activity or low load blowdown (Static) | + | Fuel Model | Standard | Fuel Model | SB3/203 - High load activity fuel or moderate load blowdown (Static) | + | Fuel Model | Standard | Fuel Model | SB4/204 - High load blowdown (Static) | + | Fuel Model | Standard | Fuel Model | FB3/3 - Tall grass (Static) | + | Fuel Model | Standard | Fuel Model | FB4/4 - Chaparral (Static) | + | Fuel Model | Standard | Fuel Model | FB5/5 - Brush (Static) | + | Fuel Model | Standard | Fuel Model | FB6/6 - Dormant brush, hardwood slash (Static) | + | Fuel Model | Standard | Fuel Model | FB7/7 - Southern rough (Static) | + | Fuel Model | Standard | Fuel Model | FB8/8 - Short needle litter (Static) | + | Fuel Model | Standard | Fuel Model | FB9/9 - Long needle or hardwood litter (Static) | \ No newline at end of file diff --git a/features/surface-input_fuel-moisture_dead-live-herb-and-live-woody-categories_live-herbaceous-fuel-moisture.feature b/features/surface-input_fuel-moisture_dead-live-herb-and-live-woody-categories_live-herbaceous-fuel-moisture.feature new file mode 100644 index 000000000..e15baf51e --- /dev/null +++ b/features/surface-input_fuel-moisture_dead-live-herb-and-live-woody-categories_live-herbaceous-fuel-moisture.feature @@ -0,0 +1,82 @@ +@core +Feature: Surface Input - Fuel Moisture -> Dead, Live Herb, and Live Woody Categories -> Live Herbaceous Fuel Moisture + + @core + Scenario Outline: Live Herbaceous Fuel Moisture is displayed with these Fuel Model Code + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Dead, Live Herb, and Live Woody Categories | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | Dead, Live Herb, and Live Woody Categories | Live Herbaceous Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | GR1/101 - Short, sparse, dry climate grass (Dynamic) | + + @extended + Scenario Outline: Live Herbaceous Fuel Moisture is displayed with these Fuel Model Code (Extended) + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Dead, Live Herb, and Live Woody Categories | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | Dead, Live Herb, and Live Woody Categories | Live Herbaceous Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | GR1/101 - Short, sparse, dry climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR2/102 - Low load, dry climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR3/103 - Low load, very coarse, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR4/104 - Moderate load, dry climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR5/105 - Low load, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR6/106 - Moderate load, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR7/107 - High load, dry climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR8/108 - High load, very coarse, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | GR9/109 - Very high load, humid climate grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | V-Ha/111 - Tall Grass, > 0.5 m (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS1/121 - Low load, dry climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS2/122 - Moderate load, dry climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS3/123 - Moderate load, humid climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS4/124 - High load, humid climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SH1/141 - Low load, dry climate shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SH9/149 - Very high load, humid climate shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SCAL17/150 - Chamise with Moderate Load Grass, 4 feet (Static) | + | Fuel Model | Standard | Fuel Model | SCAL15/151 - Chamise with Low Load Grass, 3 feet (Static) | + | Fuel Model | Standard | Fuel Model | SCAL16/152 - North Slope Ceanothus with Moderate Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | SCAL14/153 - Manzanita/Scrub Oak with Low Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | SCAL18/154 - Coastal Sage/Buckwheat Scrub with Low Load Grass (Static) | + | Fuel Model | Standard | Fuel Model | V-MH/155 - Short Green Shrub < 1 m With Grass, Discontinuous (< 1 m) often discontinuous and with grass (Dynamic) | + | Fuel Model | Standard | Fuel Model | V-MMb/156 - Short Shrub < 1 m, Low Dead Fraction and/or Thick Foliage (Static) | + | Fuel Model | Standard | Fuel Model | V-MAb/157 - Short Shrub < 1 m, High Dead Fraction and/or Thin Fuel (Static) | + | Fuel Model | Standard | Fuel Model | V-MMa/158 - Tall Shrub > 1 m, Low Dead Fraction and/or Thick Foliage (Static) | + | Fuel Model | Standard | Fuel Model | V-MAa/159 - Tall Shrub > 1 m, High Dead Fraction and/or Thin Fuel (Static) | + | Fuel Model | Standard | Fuel Model | TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | M-EUCd/166 - Discontinuous Litter Eucalyptus Plantation, With or Without Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-H/167 - Deciduous or Conifer Litter, Shrub and Herb Understory | + | Fuel Model | Standard | Fuel Model | M-F/168 - Deciduous or Conifer Litter, Shrub and Fern Understory (Dynamic) | + | Fuel Model | Standard | Fuel Model | M-CAD/169 - Deciduous Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-ESC/170 - Sclerophyll Broadleaf Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-PIN/171 - Medium-Long Needle Pine Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | M-EUC/172 - Eucalyptus Litter, Shrub Understory (Static) | + | Fuel Model | Standard | Fuel Model | F-RAC/190 - Very Compact Litter, Short Needle Conifers (Static) | + | Fuel Model | Standard | Fuel Model | F-FOL/191 - Compact Litter, Deciduous or Evergreen Foliage (Static) | + | Fuel Model | Standard | Fuel Model | F-EUC/193 - Pure Eucalyptus Litter, No Understory (Static) | + | Fuel Model | Standard | Fuel Model | FB2/2 - Timber grass and understory (Static) | \ No newline at end of file diff --git a/features/surface-input_fuel-moisture_dead-live-herb-and-live-woody-categories_live-woody-fuel-moisture.feature b/features/surface-input_fuel-moisture_dead-live-herb-and-live-woody-categories_live-woody-fuel-moisture.feature new file mode 100644 index 000000000..0f23561d7 --- /dev/null +++ b/features/surface-input_fuel-moisture_dead-live-herb-and-live-woody-categories_live-woody-fuel-moisture.feature @@ -0,0 +1,65 @@ +@core +Feature: Surface Input - Fuel Moisture -> Dead, Live Herb, and Live Woody Categories -> Live Woody Fuel Moisture + + @core + Scenario Outline: Live Woody Fuel Moisture is displayed with these Fuel Model Code + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Dead, Live Herb, and Live Woody Categories | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | Dead, Live Herb, and Live Woody Categories | Live Woody Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB10/10 - Timber litter & understory (Static) | + + @extended + Scenario Outline: Live Woody Fuel Moisture is displayed with these Fuel Model Code (Extended) + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these output paths are NOT selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Dead, Live Herb, and Live Woody Categories | + When this input path is entered : : : + Then the following input paths are displayed: + | submodule | group | value | + | Fuel Moisture | Dead, Live Herb, and Live Woody Categories | Live Woody Fuel Moisture | + + Examples: This scenario is repeated for each of these rows + | submodule | group | subgroup | value | + | Fuel Model | Standard | Fuel Model | FB10/10 - Timber litter & understory (Static) | + | Fuel Model | Standard | Fuel Model | GS1/121 - Low load, dry climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS2/122 - Moderate load, dry climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS3/123 - Moderate load, humid climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | GS4/124 - High load, humid climate grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SH1/141 - Low load, dry climate shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | SH2/142 - Moderate load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH3/143 - Moderate load, humid climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH4/144 - Low load, humid climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH5/145 - High load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH6/146 - Low load, humid climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH7/147 - Very high load, dry climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH8/148 - High load, humid climate shrub (Static) | + | Fuel Model | Standard | Fuel Model | SH9/149 - Very high load, humid climate shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU1/161 - Light load, dry climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU2/162 - Moderate load, humid climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | TU3/163 - Moderate load, humid climate timber-grass-shrub (Dynamic) | + | Fuel Model | Standard | Fuel Model | TU4/164 - Dwarf conifer understory (Static) | + | Fuel Model | Standard | Fuel Model | TU5/165 - Very high load, dry climate timber-shrub (Static) | + | Fuel Model | Standard | Fuel Model | FB4/4 - Chaparral (Static) | + | Fuel Model | Standard | Fuel Model | FB5/5 - Brush (Static) | + | Fuel Model | Standard | Fuel Model | FB7/7 - Southern rough (Static) | \ No newline at end of file diff --git a/features/surface-input_fuel-moisture_moisture-scenario.feature b/features/surface-input_fuel-moisture_moisture-scenario.feature new file mode 100644 index 000000000..7e0824834 --- /dev/null +++ b/features/surface-input_fuel-moisture_moisture-scenario.feature @@ -0,0 +1,15 @@ +@core +Feature: Surface Input - Fuel Moisture -> Moisture Scenario + + @core + Scenario: Moisture Scenario is displayed + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Surface Fire | Flame Length | + When these input paths are entered + | submodule | group | value | + | Fuel Moisture | Moisture Input Mode | Moisture Scenario | + Then the following input paths are displayed: + | submodule | group | + | Fuel Moisture | Moisture Scenario | \ No newline at end of file diff --git a/features/surface-input_size.feature b/features/surface-input_size.feature new file mode 100644 index 000000000..51b43d1ac --- /dev/null +++ b/features/surface-input_size.feature @@ -0,0 +1,31 @@ +@core +Feature: Surface Input - Size + + @core + Scenario Outline: Size is displayed with Surface outputs + Given I have started a new Surface Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Size | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Size | Surface - Fire Size | Fire Area | + | Size | Surface - Fire Size | Fire Perimeter | + | Size | Surface - Fire Size | Spread Distance | + | Size | Surface - Fire Size | Fire Shape Diagram | + + @core + Scenario Outline: Size is displayed with Surface & Crown outputs + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Size | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Size | Crown - Fire Size | Fire Perimeter | + | Size | Crown - Fire Size | Fire Area | + | Size | Crown - Fire Size | Spread Distance | \ No newline at end of file diff --git a/features/surface-input_spot.feature b/features/surface-input_spot.feature new file mode 100644 index 000000000..5ec3ce2c0 --- /dev/null +++ b/features/surface-input_spot.feature @@ -0,0 +1,15 @@ +@core +Feature: Surface Input - Spot + + @core + Scenario Outline: Spot is displayed + Given I have started a new Surface Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Spot | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Spot | Maximum Spotting Distance | Burning Pile | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | \ No newline at end of file diff --git a/features/surface-input_spot_burning-pile.feature b/features/surface-input_spot_burning-pile.feature new file mode 100644 index 000000000..98db534e5 --- /dev/null +++ b/features/surface-input_spot_burning-pile.feature @@ -0,0 +1,12 @@ +@core +Feature: Surface Input - Spot -> Burning Pile + + @core + Scenario: Burning Pile is displayed when Burning Pile is selected + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Burning Pile | + Then the following input paths are displayed: + | submodule | group | + | Spot | Burning Pile | \ No newline at end of file diff --git a/features/surface-input_spot_surface-fire-flame-length.feature b/features/surface-input_spot_surface-fire-flame-length.feature new file mode 100644 index 000000000..a1352d0e8 --- /dev/null +++ b/features/surface-input_spot_surface-fire-flame-length.feature @@ -0,0 +1,17 @@ +@core +Feature: Surface Input - Spot -> Surface Fire Flame Length + + @core + Scenario: Surface Fire Flame Length is displayed when Wind-Driven Surface Fire (Grass Only) is selected + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + When these output paths are NOT selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Direction Mode | Direction of Interest | + Then the following input paths are displayed: + | submodule | group | + | Spot | Surface Fire Flame Length | \ No newline at end of file diff --git a/features/surface-input_spread-directions.feature b/features/surface-input_spread-directions.feature new file mode 100644 index 000000000..bd3e7fdb4 --- /dev/null +++ b/features/surface-input_spread-directions.feature @@ -0,0 +1,12 @@ +@core +Feature: Surface Input - Spread Directions + + @core + Scenario: Spread Directions is displayed when Direction of Interest is selected + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Direction of Interest | + Then the following input paths are displayed: + | submodule | + | Spread Directions | \ No newline at end of file diff --git a/features/surface-input_spread-directions_direction-of-interest.feature b/features/surface-input_spread-directions_direction-of-interest.feature new file mode 100644 index 000000000..65a085d74 --- /dev/null +++ b/features/surface-input_spread-directions_direction-of-interest.feature @@ -0,0 +1,12 @@ +@core +Feature: Surface Input - Spread Directions -> Direction of Interest + + @core + Scenario: Direction of Interest is displayed when Direction of Interest is selected + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Direction of Interest | + Then the following input paths are displayed: + | submodule | group | + | Spread Directions | Direction of Interest | \ No newline at end of file diff --git a/features/surface-input_weather.feature b/features/surface-input_weather.feature new file mode 100644 index 000000000..1f3036c7c --- /dev/null +++ b/features/surface-input_weather.feature @@ -0,0 +1,26 @@ +@core +Feature: Surface Input - Weather + + @core + Scenario Outline: Weather is displayed with Surface outputs + Given I have started a new Surface Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Weather | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Ignition | Probability of Ignition | + + @core + Scenario Outline: Weather is displayed with Surface & Crown outputs + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Weather | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Ignition | Probability of Ignition | \ No newline at end of file diff --git a/features/surface-input_wind-and-slope.feature b/features/surface-input_wind-and-slope.feature new file mode 100644 index 000000000..96d278140 --- /dev/null +++ b/features/surface-input_wind-and-slope.feature @@ -0,0 +1,50 @@ +@core +Feature: Surface Input - Wind and Slope + + @core + Scenario Outline: Wind and Slope is displayed with Surface outputs + Given I have started a new Surface Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Wind and Slope | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Direction Mode | Direction of Interest | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Surface Fire | Rate of Spread | + | Fire Behavior | Surface Fire | Flame Length | + | Fire Behavior | Surface Fire | Fireline Intensity | + | Spot | Maximum Spotting Distance | Burning Pile | + | Spot | Maximum Spotting Distance | Wind-Driven Surface Fire (Grass Only) | + | Size | Surface - Fire Size | Fire Area | + | Size | Surface - Fire Size | Fire Perimeter | + | Size | Surface - Fire Size | Length-to-Width Ratio | + | Size | Surface - Fire Size | Spread Distance | + | Wind and Fuel | Wind | Midflame Wind Speed | + + @core + Scenario Outline: Wind and Slope is displayed with Surface & Crown outputs + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | + | Wind and Slope | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + | Fire Behavior | Fire Behavior | Flame Length | + | Fire Behavior | Fire Behavior | Fireline Intensity | + | Fire Type | Active Crown Fire | Active Ratio | + | Fire Type | Active Crown Fire | Critical Crown Rate of Spread | + | Fire Type | Transition to Crown Fire | Critical Surface Fireline Intensity | + | Fire Type | Transition to Crown Fire | Critical Surface Flame Length | + | Fire Type | Transition to Crown Fire | Transition Ratio | + | Size | Crown - Fire Size | Fire Area | + | Size | Crown - Fire Size | Fire Perimeter | + | Size | Crown - Fire Size | Spread Distance | + | Spot | Maximum Spotting Distance | Torching Trees | + | Spot | Maximum Spotting Distance | Active Crown Fire | \ No newline at end of file diff --git a/features/surface-input_wind-and-slope_10-meter-wind-speed.feature b/features/surface-input_wind-and-slope_10-meter-wind-speed.feature new file mode 100644 index 000000000..0ce506011 --- /dev/null +++ b/features/surface-input_wind-and-slope_10-meter-wind-speed.feature @@ -0,0 +1,15 @@ +@core +Feature: Surface Input - Wind and Slope -> 10-Meter Wind Speed + + @core + Scenario: 10-Meter Wind Speed is displayed + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + When these input paths are entered + | submodule | group | value | + | Wind and Slope | Wind Measured at: | 10-Meter | + Then the following input paths are displayed: + | submodule | group | + | Wind and Slope | 10-Meter Wind Speed | \ No newline at end of file diff --git a/features/surface-input_wind-and-slope_20-foot-wind-speed.feature b/features/surface-input_wind-and-slope_20-foot-wind-speed.feature new file mode 100644 index 000000000..56ef961ed --- /dev/null +++ b/features/surface-input_wind-and-slope_20-foot-wind-speed.feature @@ -0,0 +1,15 @@ +@core +Feature: Surface Input - Wind and Slope -> 20-Foot Wind Speed + + @core + Scenario: 20-Foot Wind Speed is displayed + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + When these input paths are entered + | submodule | group | value | + | Wind and Slope | Wind Measured at: | 20-Foot | + Then the following input paths are displayed: + | submodule | group | + | Wind and Slope | 20-Foot Wind Speed | \ No newline at end of file diff --git a/features/surface-input_wind-and-slope_slope.feature b/features/surface-input_wind-and-slope_slope.feature new file mode 100644 index 000000000..453d73e8d --- /dev/null +++ b/features/surface-input_wind-and-slope_slope.feature @@ -0,0 +1,43 @@ +@core +Feature: Surface Input - Wind and Slope -> Slope + + @core + Scenario Outline: Slope is displayed with Surface outputs + Given I have started a new Surface Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | group | + | Wind and Slope | Slope | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Direction Mode | Direction of Interest | + | Size | Surface - Fire Size | Spread Distance | + | Size | Surface - Fire Size | Fire Area | + | Size | Surface - Fire Size | Fire Perimeter | + | Size | Surface - Fire Size | Length-to-Width Ratio | + + @core + Scenario Outline: Slope is displayed with Surface & Crown outputs + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | group | + | Wind and Slope | Slope | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + | Fire Behavior | Fire Behavior | Flame Length | + | Fire Behavior | Fire Behavior | Fireline Intensity | + | Size | Crown - Fire Size | Fire Area | + | Size | Crown - Fire Size | Fire Perimeter | + | Size | Crown - Fire Size | Length-to-Width Ratio | + | Size | Crown - Fire Size | Spread Distance | + | Fire Type | Transition to Crown Fire | Critical Surface Fireline Intensity | + | Fire Type | Transition to Crown Fire | Transition Ratio | + | Fire Type | Transition to Crown Fire | Critical Surface Flame Length | + | Fire Type | Active Crown Fire | Critical Crown Rate of Spread | + | Fire Type | Active Crown Fire | Active Ratio | \ No newline at end of file diff --git a/features/surface-input_wind-and-slope_wind-adjustment-factor.feature b/features/surface-input_wind-and-slope_wind-adjustment-factor.feature new file mode 100644 index 000000000..b742685aa --- /dev/null +++ b/features/surface-input_wind-and-slope_wind-adjustment-factor.feature @@ -0,0 +1,90 @@ +@core +Feature: Surface Input - Wind and Slope -> Wind Adjustment Factor + + @core + Scenario Outline: Wind Adjustment Factor is displayed with Surface outputs (Wind Measured at: 20-Foot) + Given I have started a new Surface Worksheet in Guided Mode + When this output path is selected : : + When these input paths are entered + | submodule | group | value | + | Wind and Slope | Wind Measured at: | 20-Foot | + Then the following input paths are displayed: + | submodule | group | + | Wind and Slope | Wind Adjustment Factor | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Direction Mode | Direction of Interest | + | Wind and Fuel | Wind | Midflame Wind Speed | + + @core + Scenario Outline: Wind Adjustment Factor is displayed with Surface outputs (Wind Measured at: 10-Meter) + Given I have started a new Surface Worksheet in Guided Mode + When this output path is selected : : + When these input paths are entered + | submodule | group | value | + | Wind and Slope | Wind Measured at: | 10-Meter | + Then the following input paths are displayed: + | submodule | group | + | Wind and Slope | Wind Adjustment Factor | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Direction Mode | Direction of Interest | + | Wind and Fuel | Wind | Midflame Wind Speed | + + @core + Scenario Outline: Wind Adjustment Factor is displayed with Surface & Crown outputs (Wind Measured at: 20-Foot) + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + When these input paths are entered + | submodule | group | value | + | Wind and Slope | Wind Measured at: | 20-Foot | + Then the following input paths are displayed: + | submodule | group | + | Wind and Slope | Wind Adjustment Factor | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + | Fire Behavior | Fire Behavior | Flame Length | + | Fire Behavior | Fire Behavior | Fireline Intensity | + | Fire Type | Active Crown Fire | Active Ratio | + | Fire Type | Active Crown Fire | Critical Crown Rate of Spread | + | Fire Type | Transition to Crown Fire | Critical Surface Fireline Intensity | + | Fire Type | Transition to Crown Fire | Critical Surface Flame Length | + | Fire Type | Transition to Crown Fire | Transition Ratio | + | Size | Crown - Fire Size | Fire Area | + | Size | Crown - Fire Size | Fire Perimeter | + | Size | Crown - Fire Size | Length-to-Width Ratio | + | Size | Crown - Fire Size | Spread Distance | + + @core + Scenario Outline: Wind Adjustment Factor is displayed with Surface & Crown outputs (Wind Measured at: 10-Meter) + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + When these input paths are entered + | submodule | group | value | + | Wind and Slope | Wind Measured at: | 10-Meter | + Then the following input paths are displayed: + | submodule | group | + | Wind and Slope | Wind Adjustment Factor | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + | Fire Behavior | Fire Behavior | Flame Length | + | Fire Behavior | Fire Behavior | Fireline Intensity | + | Fire Type | Active Crown Fire | Active Ratio | + | Fire Type | Active Crown Fire | Critical Crown Rate of Spread | + | Fire Type | Transition to Crown Fire | Critical Surface Fireline Intensity | + | Fire Type | Transition to Crown Fire | Critical Surface Flame Length | + | Fire Type | Transition to Crown Fire | Transition Ratio | + | Size | Crown - Fire Size | Fire Area | + | Size | Crown - Fire Size | Fire Perimeter | + | Size | Crown - Fire Size | Length-to-Width Ratio | + | Size | Crown - Fire Size | Spread Distance | \ No newline at end of file diff --git a/features/surface-input_wind-and-slope_wind-adjustment-factor_wind-adjustment-factor---user-input.feature b/features/surface-input_wind-and-slope_wind-adjustment-factor_wind-adjustment-factor---user-input.feature new file mode 100644 index 000000000..a1e205264 --- /dev/null +++ b/features/surface-input_wind-and-slope_wind-adjustment-factor_wind-adjustment-factor---user-input.feature @@ -0,0 +1,16 @@ +@core +Feature: Surface Input - Wind and Slope -> Wind Adjustment Factor -> Wind Adjustment Factor - User Input + + @core + Scenario: Wind Adjustment Factor - User Input is displayed + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + When these input paths are entered + | submodule | group | value | + | Wind and Slope | Wind Measured at: | 20-Foot | + | Wind and Slope | Wind Adjustment Factor | User Input | + Then the following input paths are displayed: + | submodule | group | value | + | Wind and Slope | Wind Adjustment Factor | Wind Adjustment Factor - User Input | \ No newline at end of file diff --git a/features/surface-input_wind-and-slope_wind-and-slope-are.feature b/features/surface-input_wind-and-slope_wind-and-slope-are.feature new file mode 100644 index 000000000..876837540 --- /dev/null +++ b/features/surface-input_wind-and-slope_wind-and-slope-are.feature @@ -0,0 +1,43 @@ +@core +Feature: Surface Input - Wind and Slope -> Wind and slope are + + @core + Scenario Outline: Wind and slope are is displayed with Surface outputs + Given I have started a new Surface Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | group | + | Wind and Slope | Wind and slope are | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + | Fire Behavior | Direction Mode | Direction of Interest | + | Fire Behavior | Direction Mode | Heading | + | Size | Surface - Fire Size | Spread Distance | + | Size | Surface - Fire Size | Fire Area | + | Size | Surface - Fire Size | Fire Perimeter | + | Size | Surface - Fire Size | Length-to-Width Ratio | + + @core + Scenario Outline: Wind and slope are is displayed with Surface & Crown outputs + Given I have started a new Surface & Crown Worksheet in Guided Mode + When this output path is selected : : + Then the following input paths are displayed: + | submodule | group | + | Wind and Slope | Wind and slope are | + + Examples: This scenario is repeated for each of these rows + | submodule | group | value | + | Fire Behavior | Fire Behavior | Rate of Spread | + | Fire Behavior | Fire Behavior | Flame Length | + | Fire Behavior | Fire Behavior | Fireline Intensity | + | Size | Crown - Fire Size | Fire Area | + | Size | Crown - Fire Size | Fire Perimeter | + | Size | Crown - Fire Size | Length-to-Width Ratio | + | Size | Crown - Fire Size | Spread Distance | + | Fire Type | Transition to Crown Fire | Critical Surface Fireline Intensity | + | Fire Type | Transition to Crown Fire | Transition Ratio | + | Fire Type | Transition to Crown Fire | Critical Surface Flame Length | + | Fire Type | Active Crown Fire | Critical Crown Rate of Spread | + | Fire Type | Active Crown Fire | Active Ratio | \ No newline at end of file diff --git a/features/surface-input_wind-and-slope_wind-and-slope-are_wind-direction-from-upslope.feature b/features/surface-input_wind-and-slope_wind-and-slope-are_wind-direction-from-upslope.feature new file mode 100644 index 000000000..9aad4f6ae --- /dev/null +++ b/features/surface-input_wind-and-slope_wind-and-slope-are_wind-direction-from-upslope.feature @@ -0,0 +1,16 @@ +@core +Feature: Surface Input - Wind and Slope -> Wind and slope are -> Wind Direction (from upslope) + + @core + Scenario: Wind Direction (from upslope) is displayed + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + | Fire Behavior | Direction Mode | Heading, Flanking, Backing | + When these input paths are entered + | submodule | group | value | + | Wind and Slope | Wind and slope are | Not Aligned (Wind is >30° from upslope). | + Then the following input paths are displayed: + | submodule | group | value | + | Wind and Slope | Wind and slope are | Wind Direction (from upslope) | \ No newline at end of file diff --git a/features/surface-input_wind-and-slope_wind-speed.feature b/features/surface-input_wind-and-slope_wind-speed.feature new file mode 100644 index 000000000..4a5330982 --- /dev/null +++ b/features/surface-input_wind-and-slope_wind-speed.feature @@ -0,0 +1,15 @@ +@core +Feature: Surface Input - Wind and Slope -> Wind Speed + + @core + Scenario: Wind Speed is displayed + Given I have started a new Surface Worksheet in Guided Mode + When these output paths are selected + | submodule | group | value | + | Fire Behavior | Direction Mode | Heading | + When these input paths are entered + | submodule | group | value | + | Wind and Slope | Wind Measured at: | Midflame (Eye Level) | + Then the following input paths are displayed: + | submodule | group | + | Wind and Slope | Wind Speed | \ No newline at end of file diff --git a/features/surface_and_crown.feature b/features/surface_and_crown.feature deleted file mode 100644 index b25260393..000000000 --- a/features/surface_and_crown.feature +++ /dev/null @@ -1,15 +0,0 @@ -Feature: Surface and Crown Worksheets - - Scenario: Probability of Ignition Output Selected - Given I have started a Surface & Crown Worksheet - When I select these outputs Submodule > Group > Output: - """ - - Fire Behavior > Ignition > Probability of Ignition - """ - Then the following input Submodule > Groups are displayed: - """ - - Fuel Moisture > Moisture Input Mode - - Weather > Air Temperature - - Weather > Fuel Shading From the Sun - """ - diff --git a/features/surface_only.feature b/features/surface_only.feature deleted file mode 100644 index f26594df2..000000000 --- a/features/surface_only.feature +++ /dev/null @@ -1,389 +0,0 @@ -Feature: Surface Only Worksheets - - Scenario: Fire Behavior Output Selected - Given I have started a Surface Worksheet - When I select these outputs Submodule > Group > Output: - """ - - Fire Behavior > Direction Mode > Heading - - Fire Behavior > Surface Fire > Rate of Spread - """ - Then the following input Submodule > Groups are displayed: - """ - - Fuel Model > Standard > Fuel Model - - Fuel Moisture > Moisture Input Mode - - Wind and Slope > Wind Speed - - Wind and Slope > Wind and slope are - - Wind and Slope > Slope - """ - - # - Wind and Slope > Wind measured at: @kenny this fails because Wind measured at: has a - # - trailing space in the dom and (extract-submodule-groups) trims this. - -# Feature: Mortality Only -# Scenario: Mortality Only Test -# Given I have started a Mortality Worksheet -# When I select the output "Rate of Spread" in the "Fire Behavior" submodule -# Then the following input Submodule > Groups are displayed: -# """ -# - Fuel Model -# - Fuel Moisture > Moisture Input Mode -# - Wind and Slope > Wind Measured at: -# - Wind and Slope > Wind Speed -# - Wind and Slope > Wind and Slope are: -# - Wind and Slope > Slope - # """ -# Scenario: Length-to-Width Output Selected -# Given I have started a Surface Worksheet -# When I select the output "Length-to-Width Ratio" in the "Size" submodule -# Then the following input Submodule > Groups are displayed: -# """ -# - Fuel Model -# - Fuel Moisture > Moisture Input Mode -# - Wind and Slope > Wind Measured at: -# - Wind and Slope > Wind Speed -# - Wind and Slope > Wind and Slope are: -# - Wind and Slope > Slope -# """ - -# Scenario: Size Outputs Selected -# Given I have started a Surface Worksheet -# When The size outputs below are selected: -# - Size > Fire Area -# - Size > Fire Perimeter -# - Size > Spread Distance -# Then the following input Submodule > Groups are displayed: -# """ -# - Fuel Model -# - Fuel Moisture > Moisture Input Mode -# - Wind and Slope > Wind Measured at: -# - Wind and Slope > Wind Speed -# - Wind and Slope > Wind and Slope are: -# - Wind and Slope > Slope -# - Size > Elapsed Time -# """ -# -# Scenario: Size Outputs Selected -# Given I have started a Surface Worksheet -# Then the following outputs are displayed: -# """ -# - Spot -> Burning Pile -# - Spot -> Wind-Driven Surface Fire -# """ -# Then and should be the only two options under Maximum Spotting Distance -# -# Given I have started a Surface Worksheet -# When Any outputs are selected, other than Burning Pile -# Then Maximum Spotting Distance: Burning Pile should be deactivated -# -# Given I have started a Surface Worksheet -# When Burning Pile is selected from Maximum Spotting Distance -# Then All other outputs should be deactivated and the ONLY inputs should -# be: -# - Wind and Slope -# - Wind Measured at: -# - Midflame should be deactivate and 20-Foot autoselected -# - Wind Speed -# - *No WAF* -# - *No Wind and Slope are* -# - *No Slope* -# - Spot -# - Downwind Canopy Cover -# - Downwind Canopy Height -# - Flame Height (from a Burning Bile) -# - Topography -# - Ridge-to-Valley Elevation Difference -# - Ridge-to-Valley Horizontal Distance (Dependent on Elevation -# Difference) -# - Spotting Source Location (Dependent on Elevation Difference) -# -# Given I have started a Surface Worksheet -# When Fire Behavior or Size is selected with Wind-Driven Surface Fire -# from Spot -# Then Fuel Model should be replaced with Wind Driven Fuel Models which -# only contain grass fuel models -# -# Given I have started a Surface Worksheet -# When Fire Behavior or Size is selected with Wind-Driven Surface Fire -# from Spot -# Then Surface Fire Flame Length should come from Surface and should not -# be an input -# -# Given I have started a Surface Worksheet -# When When Wind-Drive Surface fire is not run with Fire Behavior -# Then Only the inputs below are required -# - Wind and Slope -# - Wind Measured at: -# - Midflame should be deactivate and 20-Foot auto-selected -# - Wind Speed -# - *No WAF* -# - *No Wind and Slope are* -# - *No Slope* -# - Spot -# - Downwind Canopy Cover -# - Downwind Canopy Height -# - Topography -# - Ridge-to-Valley Elevation Difference -# - Ridge-to-Valley Horizontal Distance (Dependent on Elevation -# Difference) -# - Spotting Source Location (Dependent on Elevation Difference) -# - *Surface Fire Flame Length* -# -# Given I have started a Surface Worksheet -# When 0 is entered into Ridge-to-Valley Elevation Difference -# Then Ridge-to-Valley Horizontal Distance and Spotting Source Location -# should not be available inputs -# -# Given I have started a Surface Worksheet -# When A value greater than 0 is entered into Ridge-to-Valley Elevation -# Difference -# Then Ridge-to-Valley Horizontal Distance and Spotting Source Location -# should be required inputs -# -# Given I have started a Surface Worksheet -# When Direction of Interest is selected from Direction Mode -# Then The Wind/Slope/Spread Diagram should be automatically output on -# the Run Results -# -# Given I have started a Surface Worksheet -# When Direction of Interest is selected from Direction Mode -# Then The Direction of Spread should be automatically output on the Run -# Results. The Direction of Spread should be consisted with the Direction -# Mode selected (Heading or Heading Flanking Backing) -# -# Given I have started a Surface Worksheet -# When Heading OR Heading, Backing, Flanking, AND Wind and Slope are not -# aligned -# Then The Wind/Slope/Spread Diagram should be automatically output on -# the Run Results -# -# Given I have started a Surface Worksheet -# When Heading OR Heading, Backing, Flanking, AND Wind and Slope are not -# aligned -# Then The Direction of Spread should be automatically ouput on the Run -# Results. The Direction of Spread should be consisted with the Direction -# Mode selected (Heading or Heading Flanking Backing) -# -# Given I have started a Surface Worksheet -# When Maximum Spotting DIstance from a Burning Pile is run -# Then Firebrand Height from a Burning Pile should be automatically -# output -# * Surface and Crown -# -# Given I have started a Surface and Crown Worksheet -# When Surface and Crown are run together -# Then Heading should be automatically run for Direction Mode. *It should not be automatically selected because the user may not run Fire Behavior.* -# -# Given I have started a Surface and Crown Worksheet -# When Any output is selected, other than a Spot model -# Then Fire Type should be automatically selected as an output but it -# should not shown on the worksheet -# -# Given I have started a Surface and Crown Worksheet -# When Fire behavior has a selected output (RoS, FL, or FI) -# Then The following Submodules w/inputs are the ONLY required inputs -# - Fuel Model -# - Fuel Moisture -# - Moisture Input Mode -# - Appropriate Moisture Inputs -# - Wind and Slope -# - Wind Measured at: -# - Midflame should be deactivate and 20-Foot autoselected -# - Wind Speed -# - WAF -# - Wind and Slope are: -# - Slope -# - Calculations Options -# - Fuel Moisture -# - Foliar Moisture -# - Canopy Fuel -# - Canopy Base Height -# - Canopy Bulk Density -# - Canopy Height -# -# Given I have started a Surface and Crown Worksheet -# When Length-to-Width Ratio output in the Size submodule is selected -# Then The following Submodules w/inputs are the ONLY required inputs -# - Fuel Model -# - Fuel Moisture -# - Moisture Input Mode -# - Appropriate Moisture Inputs -# - Wind and Slope -# - Wind Measured at: -# - Midflame should be deactivate and 20-Foot autoselected -# - Wind Speed -# - WAF -# - WAF(if applicable) -# - Wind and Slope are: -# - Slope -# - Fuel Moisture -# - Foliar Moisture -# - Calculations Options -# - Canopy Fuel -# - Canopy Base Height -# - Canopy Bulk Density -# - Canopy Height -# -# Given I have started a Surface and Crown Worksheet -# When Any Fire Type output are selected -# Then The following Submodules w/inputs are the ONLY required inputs -# - Fuel Model -# - Fuel Moisture -# - Moisture Input Mode -# - Appropriate Moisture Inputs -# - Wind and Slope -# - Wind Measured at: -# - Midflame should be deactivate and 20-Foot autoselected -# - Wind Speed -# - WAF -# - WAF(if applicable) -# - Wind and Slope are: -# - Slope -# - Fuel Moisture -# - Foliar Moisture -# - Calculations Options -# - Canopy Fuel -# - Canopy Base Height -# - Canopy Bulk Density -# - Canopy Height -# -# Given I have started a Surface and Crown Worksheet -# When The size outputs below are selected: -# - Fire Area -# - Fire Perimeter -# - Spread Distance -# - (**Exclude Length-to-Width Ratio) -# Then The following Submodules w/inputs are the ONLY required inputs -# - Fuel Model -# - Fuel Moisture -# - Moisture Input Mode -# - Appropriate Moisture Inputs -# - Wind and Slope -# - Wind Measured at: -# - Wind Speed -# - WAF(if applicable) -# - Wind and Slope are: -# - Slope -# - Size -# - Elapsed Time -# -# Given I have started a Surface and Crown Worksheet -# When Surface and Crown are run together -# Then Only Torching Trees and Active Crown fire should be available options under Maximum Spotting Distance -# -# Given I have started a Surface and Crown Worksheet -# When Surface and Crown are run together -# Then Torching Tree and Active Crown fire should be able to both be run under Maximum Spotting Distance -# -# Given I have started a Surface and Crown Worksheet -# When Active Crown Fire is selected as an out, *WITHOUT Fire Behavior* -# Then The inputs below are required -# - Canopy Fuel -# - Canopy Height -# - Wind and Slope -# - Wind Measured at: -# - Midflame should be deactivate and 20-Foot auto-selected -# - Wind Speed -# - *No WAF* -# - *No Wind and Slope are* -# - *No Slope* -# - Spot -# - Topography -# - Ridge-to-Valley Elevation Difference -# - Ridge-to-Valley Horizontal Distance (Dependent on Elevation -# Difference) -# - Spotting Source Location (Dependent on Elevation Difference) -# - *Active Crown Fire Flame Length* -# -# Given I have started a Surface and Crown Worksheet -# When Active Crown Fire is selected as an output with Fire Behavior -# Then The inputs below are required -# - Canopy Fuel -# - Canopy Height -# - Wind and Slope -# - Wind Measured at: -# - Midflame should be deactivate and 20-Foot auto-selected -# - Wind Speed -# - *No WAF* -# - *No Wind and Slope are* -# - *No Slope* -# - Spot -# - Topography -# - Ridge-to-Valley Elevation Difference -# - Ridge-to-Valley Horizontal Distance (Dependent on Elevation -# Difference) -# - Spotting Source Location (Dependent on Elevation Difference) -# - *Active Crown Fire Flame Length* -# -# Given I have started a Surface and Crown Worksheet -# When Fire Behavior or Size is selected with Active Crown Fire from Spot -# Then Active Crown Fire Flame Length should come from Crown and should not be an input -# * Surface and Contain -# -# Given I have started a Surface and Contain Worksheet -# Then Spot should not be on worksheet -# -# Given I have started a Surface and Contain Worksheet -# Then Surface Fire Behavior and Size conditionals should be treated the same as Surface being run alone -# -# Given I have started a Surface and Contain Worksheet -# Then Heading in Fire Behavior's Direction Mode should be the only option available. Heading, Backing, and Flanking, and DIrection of Interest should be deactivated -# * Surface and Mortality -# -# Given I have started a Surface and Mortality Worksheet -# Then Heading and Heading Flanking, Backing in Fire Behavior's Direction Mode should be the only options available. -# And: Direction of Interest should be deactivated -# -# Given I have started a Surface and Mortality Worksheet -# Then There should be no Size output module -# And: There should be no Size input submodules -# -# Given I have started a Surface and Mortality Worksheet -# Then There should be no mortality output submodules because all outputs are automated based on species selected and their PoM equation -# -# Given I have started a Surface and Mortality Worksheet -# Then There should be no mortality output submodules because all outputs are automated based on species selected and their PoM equation -# -# Given I have started a Surface and Mortality Worksheet -# Then There should be no mortality output submodules because all outputs are automated based on species selected and their PoM equation -# -# Given I have started a Surface and Mortality Worksheet -# Then Flame Length is needed to calculate PoM so Surface Fire Behavior conditionals should be used to calculate Flame Length -# -# Given I have started a Surface and Mortality Worksheet -# Then PoM equation used should be based on the Mortality tree species used, see [[https://sig-gis.atlassian.net/browse/BHP1-839?atlOrigin=eyJpIjoiZTdjZDg4MDNhYTBlNDE2NDljZTRhZTEzNThlNDI5NzgiLCJwIjoiaiJ9][BHP1-839]] -# -# Given I have started a Surface and Mortality Worksheet -# Then DBH and Mortality Tree species are both required user inputs, regardless of PoM equation -# -# Given I have started a Surface and Mortality Worksheet -# Then Probability of Mortality is automatically calculated -# -# Given I have started a Surface and Mortality Worksheet -# Then Mortality Outputs should match the format in [[https://sig-gis.atlassian.net/browse/BHP1-926?atlOrigin=eyJpIjoiYTQwNWFjMmExZDE5NGNjYWI3NDYxNTNjY2MwMmIwMTAiLCJwIjoiaiJ9][ticket]] and [[https://usfs.box.com/s/u6uknqwzt751top5awzn0am4u4s8dkj3][table]] -# -# Given I have started a Surface and Crown Worksheet -# When The PoM equation used is Crown Scorch -# Then The user inputs below are required -# - Air Temp -# - MidFlame Windspeed or (20ft or 10m x WAF = Midflame Windspeed) -# - Canopy Height -# - Crown Ratio -# -# Given I have started a Surface and Crown Worksheet -# When The PoM equation used is Crown Scorch -# Then The calculated Flame Length needs to be used to calculate Scorch Height -# -# Given I have started a Surface and Crown Worksheet -# When The PoM equation used is Bark Char -# Then The calculated Flame Length is used to calculate Bark Char Height, Flame Length/1.8 -# -# Given I have started a Surface and Crown Worksheet -# When The PoM equation used is Crown Scorch -# Then Automated outputs that should be calculated including: -# - Crown Length Scorched -# - Crown Volume Scorched -# - Scorch Height -# -# Given I have started a Surface and Crown Worksheet -# When The PoM equation used is Bark Char -# Then Bark Char Height is an automated output that should be calculated include diff --git a/projects/behave/bb.edn b/projects/behave/bb.edn index bf4f554b3..dbe388968 100644 --- a/projects/behave/bb.edn +++ b/projects/behave/bb.edn @@ -1,25 +1,28 @@ -{:tasks +{:paths ["../../scripts"] + :tasks {:requires ([clojure.string :as str] - [babashka.fs :as fs]) - :init (defn find-browser - "Headless-capable Chrome/Chromium path: $CHROME_BIN, else per-OS defaults." - [] - (or (System/getenv "CHROME_BIN") - (let [os (str/lower-case (System/getProperty "os.name")) - cands (cond - (str/includes? os "mac") - ["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" - "/Applications/Chromium.app/Contents/MacOS/Chromium"] - (str/includes? os "win") - ["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" - "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"] - :else - ["google-chrome" "google-chrome-stable" "chromium" "chromium-browser"])] - (or (some (fn [c] - (cond (fs/exists? c) c - (fs/which c) (str (fs/which c)))) - cands) - (throw (ex-info "No Chrome/Chromium found. Set CHROME_BIN." {:tried cands})))))) + [babashka.fs :as fs] + [babashka.cli :as cli] + [browser :as browser]) + :init (do + (defn uber-stale? + "True when target/behave7.jar is missing or older than any source file." + [] + (let [jar "target/behave7.jar"] + (or (not (fs/exists? jar)) + (let [jar-ms (.toMillis (fs/last-modified-time jar)) + root (fs/path (fs/cwd) "../..") + sources (concat (fs/glob root "components/*/src/**") + (fs/glob root "bases/*/src/**") + (fs/glob root "projects/behave/src/**") + (fs/glob root "projects/behave/resources/**") + (filter fs/exists? + [(fs/path root "deps.edn") + (fs/path (fs/cwd) "deps.edn")]))] + (boolean (some (fn [p] + (and (fs/regular-file? p) + (> (.toMillis (fs/last-modified-time p)) jar-ms))) + sources))))))) -project "cljweb-behave" reload (shell "systemctl --user daemon-reload") status {:depends [-project] @@ -34,7 +37,7 @@ test:ci {:doc "Run the browser test suite headless (Chrome) and exit with a pass/fail code." :task (clojure "-M:test-ci" "-m" "figwheel.main" - "-fwo" (pr-str {:launch-js [(find-browser) "--headless=new" "--disable-gpu" "--repl" :open-url] + "-fwo" (pr-str {:launch-js [(browser/find-browser) "--headless=new" "--disable-gpu" "--repl" :open-url] :ring-server-options {:port 9500} :open-url "http://localhost:9500/api/test-headless"}) "-co" "test-headless.cljs.edn" @@ -64,13 +67,38 @@ (str/join "\n") (spit "classpath.conf"))) - conveyor (do - (when (fs/exists? "target/behave7.jar") - (fs/delete "target/behave7.jar")) - (run 'build-js) - (run 'uber) - (run 'rename-jar) - (shell "conveyor -Kapp.machines=mac.aarch64 make notarized-mac-zip -o output/mac-aarch64/ --overwrite") - (shell "conveyor -Kapp.machines=mac.amd64 make notarized-mac-zip -o output/mac-amd64/ --overwrite") - (shell "conveyor make windows-zip -o output/windows --overwrite") - (shell "conveyor make debian-package -o output/deb --overwrite"))}} + uber-prep {:doc "Build JS + uberjar when sources have changed. Skips if target/behave7.jar is up-to-date." + :task (if (uber-stale?) + (do + (when (fs/exists? "target/behave7.jar") + (fs/delete "target/behave7.jar")) + (run 'build-js) + (run 'uber) + (run 'rename-jar)) + (println "target/behave7.jar is up-to-date, skipping uber-prep."))} + + conveyor {:doc "Build Conveyor packages. Use -t (mac, windows, linux) or omit for all. + Comma-separate for multiple: -t mac,windows. Use -f to force rebuild." + :task (let [{:keys [target force]} (cli/parse-opts *command-line-args* + {:spec {:target {:alias :t} + :force {:alias :f :coerce :boolean}}}) + targets (if target + (into #{} (map (comp keyword str/trim)) + (str/split target (re-pattern ","))) + #{:mac :windows :linux})] + (when force + (when (fs/exists? "target/behave7.jar") + (fs/delete "target/behave7.jar"))) + (run 'uber-prep) + (when (:mac targets) + (shell "conveyor -f conveyor.macos-ci.conf make app -o output/osx/ --overwrite")) + (when (:windows targets) + (shell "conveyor -f conveyor.windows-ci.conf make windows-zip -o output/windows --overwrite")) + (when (:linux targets) + (shell "conveyor -f conveyor.linux-ci.conf make debian-package -o output/deb --overwrite")))} + + azure-sign {:doc "Sign a built Windows zip with Azure Trusted Signing (via az-cli). + Optional arg: path to zip; defaults to newest unsigned in output/windows. + Requires `az login` and az-cli's direnv env." + :task (apply shell "bash" "scripts/sign-windows-zip.sh" + *command-line-args*)}}} diff --git a/projects/behave/conveyor.base.conf b/projects/behave/conveyor.base.conf index 6a293d504..cbcfb5b85 100644 --- a/projects/behave/conveyor.base.conf +++ b/projects/behave/conveyor.base.conf @@ -7,14 +7,14 @@ conveyor.compatibility-level = 21 # Java Chrome Embedded Framework (JCEF) Binaries jcef { - ver = "135.0.20" - commit-hash = "ge7de5c3" + ver = "146.0.10" + commit-hash = "g8219561" releases = "https://github.com/jcefmaven/jcefmaven/releases/download/" - cef-commit = "ca49ada" - cef-ver = "135.0.7049.85" + cef-commit = "d3de827" + cef-ver = "146.0.7680.179" cef-bundle-id = "jcef-"${jcef.cef-commit}"+cef-"${jcef.ver}"+"${jcef.commit-hash}"+chromium-"${jcef.cef-ver} -# https://github.com/jcefmaven/jcefmaven/releases/download/135.0.20/jcef-natives-macosx-arm64-jcef-ca49ada+cef-135.0.20+ge7de5c3+chromium-135.0.7049.85.jar +# https://github.com/jcefmaven/jcefmaven/releases/download/146.0.10/jcef-natives-macosx-arm64-jcef-d3de827+cef-146.0.10+g8219561+chromium-146.0.7680.179.jar windows.amd64 = "zip:"${jcef.releases}${jcef.ver}"/jcef-natives-windows-amd64-"${jcef.cef-bundle-id}".jar!/jcef-natives-windows-amd64-"${jcef.cef-bundle-id}".tar.gz" mac.amd64 = "zip:"${jcef.releases}${jcef.ver}"/jcef-natives-macosx-amd64-"${jcef.cef-bundle-id}".jar!/jcef-natives-macosx-amd64-"${jcef.cef-bundle-id}".tar.gz" @@ -26,7 +26,7 @@ jcef { app { # Windows gets square icons, macOS and Linux icons with rounded corners. - version = 7.1.4 + version = 7.1.5 icons = "resources/public/images/logo.svg" # url-schemes = [ bp ] file-associations = [ .bp7 ] diff --git a/projects/behave/conveyor.linux.conf b/projects/behave/conveyor.linux.conf index a4245941b..aeea27d2f 100644 --- a/projects/behave/conveyor.linux.conf +++ b/projects/behave/conveyor.linux.conf @@ -4,6 +4,8 @@ app { machines += linux.amd64.glibc linux { + icons = "resources/public/images/logo.svg" + amd64.glibc.inputs += ${jcef.linux.amd64.glibc} -> jcef inputs += { diff --git a/projects/behave/conveyor.macos.conf b/projects/behave/conveyor.macos.conf index 328727dbe..ef5455fb4 100644 --- a/projects/behave/conveyor.macos.conf +++ b/projects/behave/conveyor.macos.conf @@ -5,6 +5,8 @@ app { machines += mac.aarch64 mac { + icons = "resources/public/images/logo.svg" + amd64.bundle-extras += { from = ${jcef.mac.amd64} to = Frameworks @@ -27,7 +29,7 @@ app { NSHighResolutionCapable = true NSQuitAlwaysKeepsWindows = false - LSMinimumSystemVersion = 11.0 + LSMinimumSystemVersion = 12.0 LSEnvironment { MallocNanoZone = "0" diff --git a/projects/behave/conveyor.windows.conf b/projects/behave/conveyor.windows.conf index 542f21055..7d19f3e61 100644 --- a/projects/behave/conveyor.windows.conf +++ b/projects/behave/conveyor.windows.conf @@ -10,6 +10,8 @@ app { windows { amd64.inputs += ${jcef.windows.amd64} -> jcef + icons = "resources/public/images/logo.svg" + inputs += { content = "." to = jcef/install.lock @@ -17,7 +19,7 @@ app { package-extras += "zip-extras/Behave7_License.pdf" package-extras += "zip-extras/Behave7_FAQs.pdf" - package-extras += "zip-extras/Behave7.lnk" + package-extras += "zip-extras/Behave7.exe" sign = false override-icon = false diff --git a/projects/behave/resources/config.ci.edn b/projects/behave/resources/config.ci.edn new file mode 100644 index 000000000..73d406435 --- /dev/null +++ b/projects/behave/resources/config.ci.edn @@ -0,0 +1,36 @@ +;; CI / headless-cucumber config for `bb cucumber:ci`. +;; +;; The real config.edn is gitignored (dev-local, holds secrets), so it is absent on a +;; fresh checkout / CI. This tracked file mirrors config.edn's STRUCTURE so the client +;; wizard renders (the minimal config.dev.edn does not), with every credential blanked. +;; The DB :store :path is overridden at runtime via `--db-path`; :mail and :vms are +;; unused by the suite (vms-sync! is skipped) and kept only as inert dummies. +{:database {:host "localhost" + :port 5432 + :dbname "behave" + :user "behave" + :password "" + ;; Reset the store on every /api/init (behave.init/init!) so each scenario + ;; starts empty — keeps the app fast (no O(N) export-datoms accumulation). + ;; Test-only; real dev/prod configs omit it so worksheets persist. + :reset-on-init? true + :config {:store {:backend :file + ;; created fresh & empty on connect; resolved from + ;; figwheel's CWD (projects/behave). Gitignored. + :path "resources/ci-db.sqlite"}}} + :client {:jar-local? false} + :site {:title "BehavePlus" + :description "Wildfire Analysis toolkit."} + :server {:http-port 8002 + :mode "dev"} + :logging {:log-dir "logs" + :log-memory-interval 5} + :mail {:host "localhost" + :user "" + :pass "" + :tls false + :port 587 + :site-url "http://localhost"} + :secret-token "" + :vms {:url "http://localhost" + :secret-token ""}} diff --git a/projects/behave/resources/public/css/app-style.css b/projects/behave/resources/public/css/app-style.css index 558f917e4..67ce19ba4 100644 --- a/projects/behave/resources/public/css/app-style.css +++ b/projects/behave/resources/public/css/app-style.css @@ -80,7 +80,6 @@ body { .page__main { display: flex; flex: 1; - height: 825px; padding: 170px 0px 50px; } @@ -422,6 +421,7 @@ body { overflow-x: hidden; overflow-y: auto; padding-top: 15px; + padding-bottom: 15px; background-color: var(--white); } @@ -606,14 +606,45 @@ body { overflow-x: auto; overflow-y: auto; width: 100%; - max-height: 575px; + max-height: calc(100vh - 520px); } .review-wizard-page__body { overflow-x: auto; overflow-y: auto; width: 100%; - max-height: 495px; + max-height: calc(100vh - 600px); +} + +.page:has(.review-wizard-page__body) { + height: 100vh; + overflow: hidden; +} + +.page__main:has(.review-wizard-page__body), +.working-area:has(.review-wizard-page__body), +.wizard:has(.review-wizard-page__body), +.wizard-page:has(.review-wizard-page__body) { + min-height: 0; +} + +.working-area:has(.review-wizard-page__body), +.wizard:has(.review-wizard-page__body), +.wizard-page:has(.review-wizard-page__body) { + display: flex; + flex-direction: column; +} + +.working-area:has(.review-wizard-page__body) { + overflow: hidden; +} + +.working-area:has(.review-wizard-page__body) > .accordion, +.accordion:has(.review-wizard-page__body) > .wizard, +.wizard:has(.review-wizard-page__body) > .wizard-page, +.wizard-page > .review-wizard-page__body { + flex: 1 1 auto; + min-height: 0; } /* .wizard-io { */ @@ -766,7 +797,7 @@ body { .wizard-review__submodule-header { padding: 10px 0px 0px 0px; border-bottom: 2px solid var(--gray-4); - font-size: var(--font-size-22); + font-size: var(--font-size-16); font-weight: var(--font-weight-bold); background-color: var(--themed-header-background-color); } @@ -790,10 +821,19 @@ body { margin: 5px; } +.wizard-review__input > .button { + margin-left: auto; +} + .wizard-review__input--discrete { display: flex; flex-direction: row; align-items: center; + flex: 1; +} + +.wizard-review__input--discrete > .button { + margin-left: auto; } .wizard-review__input--multi-discrete { @@ -1003,7 +1043,7 @@ body { .help-area__content { overflow-x: hidden; overflow-y: scroll; - max-height: 730px; + max-height: calc(100vh - 270px); background: var(--white); } diff --git a/projects/behave/resources/public/js/behave-min.js b/projects/behave/resources/public/js/behave-min.js index 85bf32e4c..0d9e8ec89 100644 --- a/projects/behave/resources/public/js/behave-min.js +++ b/projects/behave/resources/public/js/behave-min.js @@ -1,733 +1,469 @@ - -var createModule = (() => { - var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; - - return ( -function(createModule = {}) { - -var b;b||(b=typeof createModule !== 'undefined' ? createModule : {});var aa,ba;b.ready=new Promise(function(a,c){aa=a;ba=c});b.onRuntimeInitialized=window.Hv;var ca=Object.assign({},b),da="";"undefined"!=typeof document&&document.currentScript&&(da=document.currentScript.src);_scriptDir&&(da=_scriptDir);0!==da.indexOf("blob:")?da=da.substr(0,da.replace(/[?#].*/,"").lastIndexOf("/")+1):da="";var ea=b.print||console.log.bind(console),fa=b.printErr||console.warn.bind(console);Object.assign(b,ca); -ca=null;var ha;b.wasmBinary&&(ha=b.wasmBinary);var noExitRuntime=b.noExitRuntime||!0;"object"!=typeof WebAssembly&&ia("no native wasm support detected");var ja,ka=!1,la="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0; -function ma(a,c,d){var e=c+d;for(d=c;a[d]&&!(d>=e);)++d;if(16f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}return e}function g(a,c){return a?ma(na,a,c):""} -function oa(a,c,d,e){if(!(0=k){var l=a.charCodeAt(++h);k=65536+((k&1023)<<10)|l&1023}if(127>=k){if(d>=e)break;c[d++]=k}else{if(2047>=k){if(d+1>=e)break;c[d++]=192|k>>6}else{if(65535>=k){if(d+2>=e)break;c[d++]=224|k>>12}else{if(d+3>=e)break;c[d++]=240|k>>18;c[d++]=128|k>>12&63}c[d++]=128|k>>6&63}c[d++]=128|k&63}}c[d]=0;return d-f} -function pa(a){for(var c=0,d=0;d=e?c++:2047>=e?c+=2:55296<=e&&57343>=e?(c+=4,++d):c+=3}return c}var qa,na,sa,ta,ua;function va(){var a=ja.buffer;b.HEAP8=qa=new Int8Array(a);b.HEAP16=sa=new Int16Array(a);b.HEAP32=ta=new Int32Array(a);b.HEAPU8=na=new Uint8Array(a);b.HEAPU16=new Uint16Array(a);b.HEAPU32=ua=new Uint32Array(a);b.HEAPF32=new Float32Array(a);b.HEAPF64=new Float64Array(a)}var wa,xa=[],ya=[],za=[],Aa=!1; -function Ba(){var a=b.preRun.shift();xa.unshift(a)}var Ca=0,Da=null,Ea=null;function ia(a){if(b.onAbort)b.onAbort(a);a="Aborted("+a+")";fa(a);ka=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ba(a);throw a;}function Fa(a){return a.startsWith("data:application/octet-stream;base64,")}var Ga;Ga="behave-min.wasm";if(!Fa(Ga)){var Ha=Ga;Ga=b.locateFile?b.locateFile(Ha,da):da+Ha} -function Ia(a){try{if(a==Ga&&ha)return new Uint8Array(ha);throw"both async and sync fetching of the wasm failed";}catch(c){ia(c)}}function Ja(a){return ha||"function"!=typeof fetch?Promise.resolve().then(function(){return Ia(a)}):fetch(a,{credentials:"same-origin"}).then(function(c){if(!c.ok)throw"failed to load wasm binary file at '"+a+"'";return c.arrayBuffer()}).catch(function(){return Ia(a)})} -function Ka(a,c,d){return Ja(a).then(function(e){return WebAssembly.instantiate(e,c)}).then(function(e){return e}).then(d,function(e){fa("failed to asynchronously prepare wasm: "+e);ia(e)})} -function La(a,c){var d=Ga;return ha||"function"!=typeof WebAssembly.instantiateStreaming||Fa(d)||"function"!=typeof fetch?Ka(d,a,c):fetch(d,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,a).then(c,function(f){fa("wasm streaming compile failed: "+f);fa("falling back to ArrayBuffer instantiation");return Ka(d,a,c)})})}var Ma,Na;function Oa(a){for(;0=Sa.length&&(Sa.length=a+1),Sa[a]=c=wa.get(a));return c} -function Ta(a){this.Lv=a;this.tv=a-24;this.ow=function(c){ua[this.tv+4>>2]=c};this.Hv=function(){return ua[this.tv+4>>2]};this.mw=function(c){ua[this.tv+8>>2]=c};this.qw=function(){return ua[this.tv+8>>2]};this.nw=function(){ta[this.tv>>2]=0};this.Wv=function(c){qa[this.tv+12>>0]=c?1:0};this.Aw=function(){return 0!=qa[this.tv+12>>0]};this.Xv=function(c){qa[this.tv+13>>0]=c?1:0};this.dw=function(){return 0!=qa[this.tv+13>>0]};this.Cw=function(c,d){this.lw(0);this.ow(c);this.mw(d);this.nw();this.Wv(!1); -this.Xv(!1)};this.yw=function(){ta[this.tv>>2]+=1};this.uw=function(){var c=ta[this.tv>>2];ta[this.tv>>2]=c-1;return 1===c};this.lw=function(c){ua[this.tv+16>>2]=c};this.zw=function(){return ua[this.tv+16>>2]};this.Bw=function(){if(Ua(this.Hv()))return ua[this.Lv>>2];var c=this.zw();return 0!==c?c:this.Lv}} -function Va(){var a=Ra;if(!a)return Wa(0),0;var c=new Ta(a);c.lw(a);var d=c.Hv();if(!d)return Wa(0),a;for(var e=0;e{for(var d=0,e=a.length-1;0<=e;e--){var f=a[e];"."===f?a.splice(e,1):".."===f?(a.splice(e,1),d++):d&&(a.splice(e,1),d--)}if(c)for(;d;d--)a.unshift("..");return a},Za=a=>{var c="/"===a.charAt(0),d="/"===a.substr(-1);(a=Ya(a.split("/").filter(e=>!!e),!c).join("/"))||c||(a=".");a&&d&&(a+="/");return(c?"/":"")+a},$a=a=>{var c=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=c[0];c=c[1];if(!a&&!c)return".";c&&(c=c.substr(0,c.length-1));return a+c},ab=a=> -{if("/"===a)return"/";a=Za(a);a=a.replace(/\/$/,"");var c=a.lastIndexOf("/");return-1===c?a:a.substr(c+1)};function bb(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var a=new Uint8Array(1);return()=>{crypto.getRandomValues(a);return a[0]}}return()=>ia("randomDevice")} -function cb(){for(var a="",c=!1,d=arguments.length-1;-1<=d&&!c;d--){c=0<=d?arguments[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";a=c+"/"+a;c="/"===c.charAt(0)}a=Ya(a.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+a||"."}function db(a,c){var d=Array(pa(a)+1);a=oa(a,d,0,d.length);c&&(d.length=a);return d}var eb=[];function fb(a,c){eb[a]={input:[],Bv:[],Kv:c};gb(a,hb)} -var hb={open:function(a){var c=eb[a.node.Rv];if(!c)throw new p(43);a.Av=c;a.seekable=!1},close:function(a){a.Av.Kv.Ov(a.Av)},Ov:function(a){a.Av.Kv.Ov(a.Av)},read:function(a,c,d,e){if(!a.Av||!a.Av.Kv.cw)throw new p(60);for(var f=0,h=0;h=c||(c=Math.max(c,d*(1048576>d?2:1.125)>>>0),0!=d&&(c=Math.max(c,256)),d=a.wv,a.wv=new Uint8Array(c),0=a.node.zv)return 0;a=Math.min(a.node.zv-f,e);if(8c)throw new p(28);return c},Yv:function(a,c,d){w.$v(a.node,c+d);a.node.zv=Math.max(a.node.zv,c+d)},ew:function(a,c,d,e,f){if(32768!==(a.node.mode&61440))throw new p(43); -a=a.node.wv;if(f&2||a.buffer!==qa.buffer){if(0{a=cb(a);if(!a)return{path:"",node:null};c=Object.assign({bw:!0,Vv:0},c);if(8!!k);for(var d=ob,e="/",f= -0;f{for(var c;;){if(a===a.parent)return a=a.Ev.fw,c?"/"!==a[a.length-1]?a+"/"+c:a+c:a;c=c?a.name+"/"+c:a.name;a=a.parent}},xb=(a,c)=>{for(var d=0,e=0;e>>0)%sb.length},nb=(a,c)=>{var d; -if(d=(d=yb(a,"x"))?d:a.xv.Mv?0:2)throw new p(d,a);for(d=sb[xb(a.id,c)];d;d=d.tw){var e=d.name;if(d.parent.id===a.id&&e===c)return d}return a.xv.Mv(a,c)},lb=(a,c,d,e)=>{a=new zb(a,c,d,e);c=xb(a.parent.id,a.name);a.tw=sb[c];return sb[c]=a},Ab={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},Bb=a=>{var c=["r","w","rw"][a&3];a&512&&(c+="w");return c},yb=(a,c)=>{if(tb)return 0;if(!c.includes("r")||a.mode&292){if(c.includes("w")&&!(a.mode&146)||c.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}, -Cb=(a,c)=>{try{return nb(a,c),20}catch(d){}return yb(a,"wx")},Db=(a=0)=>{for(;4096>=a;a++)if(!qb[a])return a;throw new p(33);},Fb=(a,c)=>{Eb||(Eb=function(){this.Hv={}},Eb.prototype={},Object.defineProperties(Eb.prototype,{object:{get:function(){return this.node},set:function(d){this.node=d}},flags:{get:function(){return this.Hv.flags},set:function(d){this.Hv.flags=d}},position:{get:function(){return this.Hv.position},set:function(d){this.Hv.position=d}}}));a=Object.assign(new Eb,a);c=Db(c);a.Fv= -c;return qb[c]=a},kb={open:a=>{a.yv=pb[a.node.Rv].yv;a.yv.open&&a.yv.open(a)},Jv:()=>{throw new p(70);}},gb=(a,c)=>{pb[a]={yv:c}},Gb=(a,c)=>{var d="/"===c,e=!c;if(d&&ob)throw new p(10);if(!d&&!e){var f=vb(c,{bw:!1});c=f.path;f=f.node;if(f.Qv)throw new p(10);if(16384!==(f.mode&61440))throw new p(54);}c={type:a,Nw:{},fw:c,sw:[]};a=a.Ev(c);a.Ev=c;c.root=a;d?ob=a:f&&(f.Qv=c,f.Ev&&f.Ev.sw.push(c))},Hb=(a,c,d)=>{var e=vb(a,{parent:!0}).node;a=ab(a);if(!a||"."===a||".."===a)throw new p(28);var f=Cb(e,a); -if(f)throw new p(f);if(!e.xv.Pv)throw new p(63);return e.xv.Pv(e,a,c,d)},Ib=(a,c,d)=>{"undefined"==typeof d&&(d=c,c=438);Hb(a,c|8192,d)},Jb=(a,c)=>{if(!cb(a))throw new p(44);var d=vb(c,{parent:!0}).node;if(!d)throw new p(44);c=ab(c);var e=Cb(d,c);if(e)throw new p(e);if(!d.xv.Sv)throw new p(63);d.xv.Sv(d,c,a)},ub=a=>{a=vb(a).node;if(!a)throw new p(44);if(!a.xv.Nv)throw new p(28);return cb(wb(a.parent),a.xv.Nv(a))},Lb=(a,c,d)=>{if(""===a)throw new p(44);if("string"==typeof c){var e=Ab[c];if("undefined"== -typeof e)throw Error("Unknown file open mode: "+c);c=e}d=c&64?("undefined"==typeof d?438:d)&4095|32768:0;if("object"==typeof a)var f=a;else{a=Za(a);try{f=vb(a,{aw:!(c&131072)}).node}catch(h){}}e=!1;if(c&64)if(f){if(c&128)throw new p(20);}else f=Hb(a,d,0),e=!0;if(!f)throw new p(44);8192===(f.mode&61440)&&(c&=-513);if(c&65536&&16384!==(f.mode&61440))throw new p(54);if(!e&&(d=f?40960===(f.mode&61440)?32:16384===(f.mode&61440)&&("r"!==Bb(c)||c&512)?31:yb(f,Bb(c)):44))throw new p(d);if(c&512&&!e){d=f; -d="string"==typeof d?vb(d,{aw:!0}).node:d;if(!d.xv.Dv)throw new p(63);if(16384===(d.mode&61440))throw new p(31);if(32768!==(d.mode&61440))throw new p(28);if(e=yb(d,"w"))throw new p(e);d.xv.Dv(d,{size:0,timestamp:Date.now()})}c&=-131713;f=Fb({node:f,path:wb(f),flags:c,seekable:!0,position:0,yv:f.yv,xw:[],error:!1});f.yv.open&&f.yv.open(f);!b.logReadFiles||c&1||(Kb||(Kb={}),a in Kb||(Kb[a]=1));return f},Mb=(a,c,d)=>{if(null===a.Fv)throw new p(8);if(!a.seekable||!a.yv.Jv)throw new p(70);if(0!=d&&1!= -d&&2!=d)throw new p(28);a.position=a.yv.Jv(a,c,d);a.xw=[]},Nb=()=>{p||(p=function(a,c){this.name="ErrnoError";this.node=c;this.ww=function(d){this.Iv=d};this.ww(a);this.message="FS error"},p.prototype=Error(),p.prototype.constructor=p,[44].forEach(a=>{mb[a]=new p(a);mb[a].stack=""}))},Ob,Pb=(a,c)=>{var d=0;a&&(d|=365);c&&(d|=146);return d},Rb=(a,c,d)=>{a=Za("/dev/"+a);var e=Pb(!!c,!!d);Qb||(Qb=64);var f=Qb++<<8|0;gb(f,{open:h=>{h.seekable=!1},close:()=>{d&&d.buffer&&d.buffer.length&& -d(10)},read:(h,k,l,q)=>{for(var m=0,r=0;r{for(var m=0;m>2]}function Vb(a){a=qb[a];if(!a)throw new p(8);return a}var Wb=void 0,Xb=[]; -function Yb(a,c,d,e){var f={string:m=>{var r=0;if(null!==m&&void 0!==m&&0!==m){var t=(m.length<<2)+1;r=Zb(t);oa(m,na,r,t)}return r},array:m=>{var r=Zb(m.length);qa.set(m,r);return r}};a=b["_"+a];var h=[],k=0;if(e)for(var l=0;l{Hb("/dev",16895,0);gb(259,{read:()=>0,write:(c,d,e,f)=>f});Ib("/dev/null",259);fb(1280,ib);fb(1536,jb);Ib("/dev/tty",1280);Ib("/dev/tty1",1536);var a=bb();Rb("random",a);Rb("urandom",a);Hb("/dev/shm",16895,0);Hb("/dev/shm/tmp",16895,0)})(); -(()=>{Hb("/proc",16895,0);var a=Hb("/proc/self",16895,0);Hb("/proc/self/fd",16895,0);Gb({Ev:()=>{var c=lb(a,"fd",16895,73);c.xv={Mv:(d,e)=>{var f=qb[+e];if(!f)throw new p(8);d={parent:null,Ev:{fw:"fake"},xv:{Nv:()=>f.path}};return d.parent=d}};return c}},"/proc/self/fd")})(); -var vc={q:function(a){a=new Ta(a);a.Aw()||(a.Wv(!0),Qa--);a.Xv(!1);Pa.push(a);a.yw();return a.Bw()},E:function(){$b(0);var a=Pa.pop();if(a.uw()&&!a.dw()){var c=a.qw();c&&n(c)(a.Lv);ac(a.Lv)}Ra=0},a:Va,m:Va,F:function(){var a=Pa.pop();a||ia("no exception to throw");var c=a.Lv;a.dw()||(Pa.push(a),a.Xv(!0),a.Wv(!1),Qa++);Ra=c;throw c;},r:function(a,c,d){(new Ta(a)).Cw(c,d);Ra=a;Qa++;throw a;},c:function(a){Ra||(Ra=a);throw a;},u:function(a,c,d){Tb=d;try{var e=Vb(a);switch(c){case 0:var f=Ub();return 0> -f?-28:Fb(e,f).Fv;case 1:case 2:return 0;case 3:return e.flags;case 4:return f=Ub(),e.flags|=f,0;case 5:return f=Ub(),sa[f+0>>1]=2,0;case 6:case 7:return 0;case 16:case 8:return-28;case 9:return ta[bc()>>2]=28,-1;default:return-28}}catch(h){if("undefined"==typeof Sb||"ErrnoError"!==h.name)throw h;return-h.Iv}},B:function(a,c,d){Tb=d;try{var e=Vb(a);switch(c){case 21509:case 21505:return e.Av?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return e.Av?0:-59;case 21519:if(!e.Av)return-59; -var f=Ub();return ta[f>>2]=0;case 21520:return e.Av?-28:-59;case 21531:a=f=Ub();if(!e.yv.rw)throw new p(59);return e.yv.rw(e,c,a);case 21523:return e.Av?0:-59;case 21524:return e.Av?0:-59;default:return-28}}catch(h){if("undefined"==typeof Sb||"ErrnoError"!==h.name)throw h;return-h.Iv}},C:function(a,c,d,e){Tb=e;try{c=g(c);var f=c;if("/"===f.charAt(0))c=f;else{var h=-100===a?"/":Vb(a).path;if(0==f.length)throw new p(44);c=Za(h+"/"+f)}var k=e?Ub():0;return Lb(c,d,k).Fv}catch(l){if("undefined"==typeof Sb|| -"ErrnoError"!==l.name)throw l;return-l.Iv}},x:function(){ia("")},D:function(a,c,d){na.copyWithin(a,c,c+d)},z:function(a){var c=na.length;a>>>=0;if(2147483648=d;d*=2){var e=c*(1+.2/d);e=Math.min(e,a+100663296);var f=Math,h=f.min;e=Math.max(a,e);e+=(65536-e%65536)%65536;a:{var k=ja.buffer;try{ja.grow(h.call(f,2147483648,e)-k.byteLength+65535>>>16);va();var l=1;break a}catch(q){}l=void 0}if(l)return!0}return!1},s:function(a){try{var c=Vb(a);if(null===c.Fv)throw new p(8);c.Tv&& -(c.Tv=null);try{c.yv.close&&c.yv.close(c)}catch(d){throw d;}finally{qb[c.Fv]=null}c.Fv=null;return 0}catch(d){if("undefined"==typeof Sb||"ErrnoError"!==d.name)throw d;return d.Iv}},A:function(a,c,d,e){try{a:{var f=Vb(a);a=c;for(var h,k=c=0;k>2],q=ua[a+4>>2];a+=8;var m=f,r=l,t=q,u=h,y=qa;if(0>t||0>u)throw new p(28);if(null===m.Fv)throw new p(8);if(1===(m.flags&2097155))throw new p(8);if(16384===(m.node.mode&61440))throw new p(31);if(!m.yv.read)throw new p(28);var v="undefined"!= -typeof u;if(!v)u=m.position;else if(!m.seekable)throw new p(70);var z=m.yv.read(m,y,r,t,u);v||(m.position+=z);var x=z;if(0>x){var B=-1;break a}c+=x;if(x>2]=B;return 0}catch(C){if("undefined"==typeof Sb||"ErrnoError"!==C.name)throw C;return C.Iv}},y:function(a,c,d,e,f){try{c=d+2097152>>>0<4194305-!!c?(c>>>0)+4294967296*d:NaN;if(isNaN(c))return 61;var h=Vb(a);Mb(h,c,e);Na=[h.position>>>0,(Ma=h.position,1<=+Math.abs(Ma)?0>>0:~~+Math.ceil((Ma-+(~~Ma>>>0))/4294967296)>>>0:0)];ta[f>>2]=Na[0];ta[f+4>>2]=Na[1];h.Tv&&0===c&&0===e&&(h.Tv=null);return 0}catch(k){if("undefined"==typeof Sb||"ErrnoError"!==k.name)throw k;return k.Iv}},t:function(a,c,d,e){try{a:{var f=Vb(a);a=c;for(var h,k=c=0;k>2],q=ua[a+4>>2];a+=8;var m=f,r=l,t=q,u=h,y=qa;if(0>t||0>u)throw new p(28);if(null===m.Fv)throw new p(8);if(0===(m.flags&2097155))throw new p(8);if(16384===(m.node.mode&61440))throw new p(31);if(!m.yv.write)throw new p(28); -m.seekable&&m.flags&1024&&Mb(m,0,2);var v="undefined"!=typeof u;if(!v)u=m.position;else if(!m.seekable)throw new p(70);var z=m.yv.write(m,y,r,t,u,void 0);v||(m.position+=z);var x=z;if(0>x){var B=-1;break a}c+=x;"undefined"!==typeof h&&(h+=x)}B=c}ua[e>>2]=B;return 0}catch(C){if("undefined"==typeof Sb||"ErrnoError"!==C.name)throw C;return C.Iv}},l:cc,J:dc,b:ec,v:fc,H:gc,w:hc,h:ic,j:jc,p:kc,I:lc,e:mc,d:nc,i:oc,f:pc,n:qc,k:rc,g:sc,o:tc,G:uc}; -(function(){function a(d){d=d.exports;b.asm=d;ja=b.asm.K;va();wa=b.asm.iv;ya.unshift(b.asm.L);Ca--;b.monitorRunDependencies&&b.monitorRunDependencies(Ca);if(0==Ca&&(null!==Da&&(clearInterval(Da),Da=null),Ea)){var e=Ea;Ea=null;e()}return d}var c={a:vc};Ca++;b.monitorRunDependencies&&b.monitorRunDependencies(Ca);if(b.instantiateWasm)try{return b.instantiateWasm(c,a)}catch(d){fa("Module.instantiateWasm callback failed with error: "+d),ba(d)}La(c,function(d){a(d.instance)}).catch(ba);return{}})(); -var wc=b._emscripten_bind_VoidPtr___destroy___0=function(){return(wc=b._emscripten_bind_VoidPtr___destroy___0=b.asm.M).apply(null,arguments)},xc=b._emscripten_bind_DoublePtr___destroy___0=function(){return(xc=b._emscripten_bind_DoublePtr___destroy___0=b.asm.N).apply(null,arguments)},yc=b._emscripten_bind_BoolVector_BoolVector_0=function(){return(yc=b._emscripten_bind_BoolVector_BoolVector_0=b.asm.O).apply(null,arguments)},zc=b._emscripten_bind_BoolVector_BoolVector_1=function(){return(zc=b._emscripten_bind_BoolVector_BoolVector_1= -b.asm.P).apply(null,arguments)},Ac=b._emscripten_bind_BoolVector_resize_1=function(){return(Ac=b._emscripten_bind_BoolVector_resize_1=b.asm.Q).apply(null,arguments)},Bc=b._emscripten_bind_BoolVector_get_1=function(){return(Bc=b._emscripten_bind_BoolVector_get_1=b.asm.R).apply(null,arguments)},Cc=b._emscripten_bind_BoolVector_set_2=function(){return(Cc=b._emscripten_bind_BoolVector_set_2=b.asm.S).apply(null,arguments)},Dc=b._emscripten_bind_BoolVector_size_0=function(){return(Dc=b._emscripten_bind_BoolVector_size_0= -b.asm.T).apply(null,arguments)},Ec=b._emscripten_bind_BoolVector___destroy___0=function(){return(Ec=b._emscripten_bind_BoolVector___destroy___0=b.asm.U).apply(null,arguments)},Fc=b._emscripten_bind_CharVector_CharVector_0=function(){return(Fc=b._emscripten_bind_CharVector_CharVector_0=b.asm.V).apply(null,arguments)},Gc=b._emscripten_bind_CharVector_CharVector_1=function(){return(Gc=b._emscripten_bind_CharVector_CharVector_1=b.asm.W).apply(null,arguments)},Hc=b._emscripten_bind_CharVector_resize_1= -function(){return(Hc=b._emscripten_bind_CharVector_resize_1=b.asm.X).apply(null,arguments)},Ic=b._emscripten_bind_CharVector_get_1=function(){return(Ic=b._emscripten_bind_CharVector_get_1=b.asm.Y).apply(null,arguments)},Jc=b._emscripten_bind_CharVector_set_2=function(){return(Jc=b._emscripten_bind_CharVector_set_2=b.asm.Z).apply(null,arguments)},Kc=b._emscripten_bind_CharVector_size_0=function(){return(Kc=b._emscripten_bind_CharVector_size_0=b.asm._).apply(null,arguments)},Lc=b._emscripten_bind_CharVector___destroy___0= -function(){return(Lc=b._emscripten_bind_CharVector___destroy___0=b.asm.$).apply(null,arguments)},Mc=b._emscripten_bind_IntVector_IntVector_0=function(){return(Mc=b._emscripten_bind_IntVector_IntVector_0=b.asm.aa).apply(null,arguments)},Nc=b._emscripten_bind_IntVector_IntVector_1=function(){return(Nc=b._emscripten_bind_IntVector_IntVector_1=b.asm.ba).apply(null,arguments)},Oc=b._emscripten_bind_IntVector_resize_1=function(){return(Oc=b._emscripten_bind_IntVector_resize_1=b.asm.ca).apply(null,arguments)}, -Pc=b._emscripten_bind_IntVector_get_1=function(){return(Pc=b._emscripten_bind_IntVector_get_1=b.asm.da).apply(null,arguments)},Qc=b._emscripten_bind_IntVector_set_2=function(){return(Qc=b._emscripten_bind_IntVector_set_2=b.asm.ea).apply(null,arguments)},Rc=b._emscripten_bind_IntVector_size_0=function(){return(Rc=b._emscripten_bind_IntVector_size_0=b.asm.fa).apply(null,arguments)},Sc=b._emscripten_bind_IntVector___destroy___0=function(){return(Sc=b._emscripten_bind_IntVector___destroy___0=b.asm.ga).apply(null, -arguments)},Tc=b._emscripten_bind_DoubleVector_DoubleVector_0=function(){return(Tc=b._emscripten_bind_DoubleVector_DoubleVector_0=b.asm.ha).apply(null,arguments)},Uc=b._emscripten_bind_DoubleVector_DoubleVector_1=function(){return(Uc=b._emscripten_bind_DoubleVector_DoubleVector_1=b.asm.ia).apply(null,arguments)},Vc=b._emscripten_bind_DoubleVector_resize_1=function(){return(Vc=b._emscripten_bind_DoubleVector_resize_1=b.asm.ja).apply(null,arguments)},Wc=b._emscripten_bind_DoubleVector_get_1=function(){return(Wc= -b._emscripten_bind_DoubleVector_get_1=b.asm.ka).apply(null,arguments)},Xc=b._emscripten_bind_DoubleVector_set_2=function(){return(Xc=b._emscripten_bind_DoubleVector_set_2=b.asm.la).apply(null,arguments)},Yc=b._emscripten_bind_DoubleVector_size_0=function(){return(Yc=b._emscripten_bind_DoubleVector_size_0=b.asm.ma).apply(null,arguments)},Zc=b._emscripten_bind_DoubleVector___destroy___0=function(){return(Zc=b._emscripten_bind_DoubleVector___destroy___0=b.asm.na).apply(null,arguments)},$c=b._emscripten_bind_SpeciesMasterTableRecordVector_SpeciesMasterTableRecordVector_0= -function(){return($c=b._emscripten_bind_SpeciesMasterTableRecordVector_SpeciesMasterTableRecordVector_0=b.asm.oa).apply(null,arguments)},ad=b._emscripten_bind_SpeciesMasterTableRecordVector_SpeciesMasterTableRecordVector_1=function(){return(ad=b._emscripten_bind_SpeciesMasterTableRecordVector_SpeciesMasterTableRecordVector_1=b.asm.pa).apply(null,arguments)},bd=b._emscripten_bind_SpeciesMasterTableRecordVector_resize_1=function(){return(bd=b._emscripten_bind_SpeciesMasterTableRecordVector_resize_1= -b.asm.qa).apply(null,arguments)},cd=b._emscripten_bind_SpeciesMasterTableRecordVector_get_1=function(){return(cd=b._emscripten_bind_SpeciesMasterTableRecordVector_get_1=b.asm.ra).apply(null,arguments)},dd=b._emscripten_bind_SpeciesMasterTableRecordVector_set_2=function(){return(dd=b._emscripten_bind_SpeciesMasterTableRecordVector_set_2=b.asm.sa).apply(null,arguments)},ed=b._emscripten_bind_SpeciesMasterTableRecordVector_size_0=function(){return(ed=b._emscripten_bind_SpeciesMasterTableRecordVector_size_0= -b.asm.ta).apply(null,arguments)},fd=b._emscripten_bind_SpeciesMasterTableRecordVector___destroy___0=function(){return(fd=b._emscripten_bind_SpeciesMasterTableRecordVector___destroy___0=b.asm.ua).apply(null,arguments)},gd=b._emscripten_bind_AreaUnits_toBaseUnits_2=function(){return(gd=b._emscripten_bind_AreaUnits_toBaseUnits_2=b.asm.va).apply(null,arguments)},hd=b._emscripten_bind_AreaUnits_fromBaseUnits_2=function(){return(hd=b._emscripten_bind_AreaUnits_fromBaseUnits_2=b.asm.wa).apply(null,arguments)}, -jd=b._emscripten_bind_AreaUnits___destroy___0=function(){return(jd=b._emscripten_bind_AreaUnits___destroy___0=b.asm.xa).apply(null,arguments)},kd=b._emscripten_bind_BasalAreaUnits_toBaseUnits_2=function(){return(kd=b._emscripten_bind_BasalAreaUnits_toBaseUnits_2=b.asm.ya).apply(null,arguments)},ld=b._emscripten_bind_BasalAreaUnits_fromBaseUnits_2=function(){return(ld=b._emscripten_bind_BasalAreaUnits_fromBaseUnits_2=b.asm.za).apply(null,arguments)},md=b._emscripten_bind_BasalAreaUnits___destroy___0= -function(){return(md=b._emscripten_bind_BasalAreaUnits___destroy___0=b.asm.Aa).apply(null,arguments)},nd=b._emscripten_bind_FractionUnits_toBaseUnits_2=function(){return(nd=b._emscripten_bind_FractionUnits_toBaseUnits_2=b.asm.Ba).apply(null,arguments)},od=b._emscripten_bind_FractionUnits_fromBaseUnits_2=function(){return(od=b._emscripten_bind_FractionUnits_fromBaseUnits_2=b.asm.Ca).apply(null,arguments)},pd=b._emscripten_bind_FractionUnits___destroy___0=function(){return(pd=b._emscripten_bind_FractionUnits___destroy___0= -b.asm.Da).apply(null,arguments)},qd=b._emscripten_bind_LengthUnits_toBaseUnits_2=function(){return(qd=b._emscripten_bind_LengthUnits_toBaseUnits_2=b.asm.Ea).apply(null,arguments)},rd=b._emscripten_bind_LengthUnits_fromBaseUnits_2=function(){return(rd=b._emscripten_bind_LengthUnits_fromBaseUnits_2=b.asm.Fa).apply(null,arguments)},sd=b._emscripten_bind_LengthUnits___destroy___0=function(){return(sd=b._emscripten_bind_LengthUnits___destroy___0=b.asm.Ga).apply(null,arguments)},td=b._emscripten_bind_LoadingUnits_toBaseUnits_2= -function(){return(td=b._emscripten_bind_LoadingUnits_toBaseUnits_2=b.asm.Ha).apply(null,arguments)},ud=b._emscripten_bind_LoadingUnits_fromBaseUnits_2=function(){return(ud=b._emscripten_bind_LoadingUnits_fromBaseUnits_2=b.asm.Ia).apply(null,arguments)},vd=b._emscripten_bind_LoadingUnits___destroy___0=function(){return(vd=b._emscripten_bind_LoadingUnits___destroy___0=b.asm.Ja).apply(null,arguments)},wd=b._emscripten_bind_SurfaceAreaToVolumeUnits_toBaseUnits_2=function(){return(wd=b._emscripten_bind_SurfaceAreaToVolumeUnits_toBaseUnits_2= -b.asm.Ka).apply(null,arguments)},xd=b._emscripten_bind_SurfaceAreaToVolumeUnits_fromBaseUnits_2=function(){return(xd=b._emscripten_bind_SurfaceAreaToVolumeUnits_fromBaseUnits_2=b.asm.La).apply(null,arguments)},yd=b._emscripten_bind_SurfaceAreaToVolumeUnits___destroy___0=function(){return(yd=b._emscripten_bind_SurfaceAreaToVolumeUnits___destroy___0=b.asm.Ma).apply(null,arguments)},zd=b._emscripten_bind_SpeedUnits_toBaseUnits_2=function(){return(zd=b._emscripten_bind_SpeedUnits_toBaseUnits_2=b.asm.Na).apply(null, -arguments)},Ad=b._emscripten_bind_SpeedUnits_fromBaseUnits_2=function(){return(Ad=b._emscripten_bind_SpeedUnits_fromBaseUnits_2=b.asm.Oa).apply(null,arguments)},Bd=b._emscripten_bind_SpeedUnits___destroy___0=function(){return(Bd=b._emscripten_bind_SpeedUnits___destroy___0=b.asm.Pa).apply(null,arguments)},Cd=b._emscripten_bind_PressureUnits_toBaseUnits_2=function(){return(Cd=b._emscripten_bind_PressureUnits_toBaseUnits_2=b.asm.Qa).apply(null,arguments)},Dd=b._emscripten_bind_PressureUnits_fromBaseUnits_2= -function(){return(Dd=b._emscripten_bind_PressureUnits_fromBaseUnits_2=b.asm.Ra).apply(null,arguments)},Ed=b._emscripten_bind_PressureUnits___destroy___0=function(){return(Ed=b._emscripten_bind_PressureUnits___destroy___0=b.asm.Sa).apply(null,arguments)},Fd=b._emscripten_bind_SlopeUnits_toBaseUnits_2=function(){return(Fd=b._emscripten_bind_SlopeUnits_toBaseUnits_2=b.asm.Ta).apply(null,arguments)},Gd=b._emscripten_bind_SlopeUnits_fromBaseUnits_2=function(){return(Gd=b._emscripten_bind_SlopeUnits_fromBaseUnits_2= -b.asm.Ua).apply(null,arguments)},Hd=b._emscripten_bind_SlopeUnits___destroy___0=function(){return(Hd=b._emscripten_bind_SlopeUnits___destroy___0=b.asm.Va).apply(null,arguments)},Id=b._emscripten_bind_DensityUnits_toBaseUnits_2=function(){return(Id=b._emscripten_bind_DensityUnits_toBaseUnits_2=b.asm.Wa).apply(null,arguments)},Jd=b._emscripten_bind_DensityUnits_fromBaseUnits_2=function(){return(Jd=b._emscripten_bind_DensityUnits_fromBaseUnits_2=b.asm.Xa).apply(null,arguments)},Kd=b._emscripten_bind_DensityUnits___destroy___0= -function(){return(Kd=b._emscripten_bind_DensityUnits___destroy___0=b.asm.Ya).apply(null,arguments)},Ld=b._emscripten_bind_HeatOfCombustionUnits_toBaseUnits_2=function(){return(Ld=b._emscripten_bind_HeatOfCombustionUnits_toBaseUnits_2=b.asm.Za).apply(null,arguments)},Md=b._emscripten_bind_HeatOfCombustionUnits_fromBaseUnits_2=function(){return(Md=b._emscripten_bind_HeatOfCombustionUnits_fromBaseUnits_2=b.asm._a).apply(null,arguments)},Nd=b._emscripten_bind_HeatOfCombustionUnits___destroy___0=function(){return(Nd= -b._emscripten_bind_HeatOfCombustionUnits___destroy___0=b.asm.$a).apply(null,arguments)},Od=b._emscripten_bind_HeatSinkUnits_toBaseUnits_2=function(){return(Od=b._emscripten_bind_HeatSinkUnits_toBaseUnits_2=b.asm.ab).apply(null,arguments)},Pd=b._emscripten_bind_HeatSinkUnits_fromBaseUnits_2=function(){return(Pd=b._emscripten_bind_HeatSinkUnits_fromBaseUnits_2=b.asm.bb).apply(null,arguments)},Qd=b._emscripten_bind_HeatSinkUnits___destroy___0=function(){return(Qd=b._emscripten_bind_HeatSinkUnits___destroy___0= -b.asm.cb).apply(null,arguments)},Rd=b._emscripten_bind_HeatPerUnitAreaUnits_toBaseUnits_2=function(){return(Rd=b._emscripten_bind_HeatPerUnitAreaUnits_toBaseUnits_2=b.asm.db).apply(null,arguments)},Sd=b._emscripten_bind_HeatPerUnitAreaUnits_fromBaseUnits_2=function(){return(Sd=b._emscripten_bind_HeatPerUnitAreaUnits_fromBaseUnits_2=b.asm.eb).apply(null,arguments)},Td=b._emscripten_bind_HeatPerUnitAreaUnits___destroy___0=function(){return(Td=b._emscripten_bind_HeatPerUnitAreaUnits___destroy___0=b.asm.fb).apply(null, -arguments)},Ud=b._emscripten_bind_HeatSourceAndReactionIntensityUnits_toBaseUnits_2=function(){return(Ud=b._emscripten_bind_HeatSourceAndReactionIntensityUnits_toBaseUnits_2=b.asm.gb).apply(null,arguments)},Vd=b._emscripten_bind_HeatSourceAndReactionIntensityUnits_fromBaseUnits_2=function(){return(Vd=b._emscripten_bind_HeatSourceAndReactionIntensityUnits_fromBaseUnits_2=b.asm.hb).apply(null,arguments)},Wd=b._emscripten_bind_HeatSourceAndReactionIntensityUnits___destroy___0=function(){return(Wd=b._emscripten_bind_HeatSourceAndReactionIntensityUnits___destroy___0= -b.asm.ib).apply(null,arguments)},Xd=b._emscripten_bind_FirelineIntensityUnits_toBaseUnits_2=function(){return(Xd=b._emscripten_bind_FirelineIntensityUnits_toBaseUnits_2=b.asm.jb).apply(null,arguments)},Yd=b._emscripten_bind_FirelineIntensityUnits_fromBaseUnits_2=function(){return(Yd=b._emscripten_bind_FirelineIntensityUnits_fromBaseUnits_2=b.asm.kb).apply(null,arguments)},Zd=b._emscripten_bind_FirelineIntensityUnits___destroy___0=function(){return(Zd=b._emscripten_bind_FirelineIntensityUnits___destroy___0= -b.asm.lb).apply(null,arguments)},$d=b._emscripten_bind_TemperatureUnits_toBaseUnits_2=function(){return($d=b._emscripten_bind_TemperatureUnits_toBaseUnits_2=b.asm.mb).apply(null,arguments)},ae=b._emscripten_bind_TemperatureUnits_fromBaseUnits_2=function(){return(ae=b._emscripten_bind_TemperatureUnits_fromBaseUnits_2=b.asm.nb).apply(null,arguments)},be=b._emscripten_bind_TemperatureUnits___destroy___0=function(){return(be=b._emscripten_bind_TemperatureUnits___destroy___0=b.asm.ob).apply(null,arguments)}, -ce=b._emscripten_bind_TimeUnits_toBaseUnits_2=function(){return(ce=b._emscripten_bind_TimeUnits_toBaseUnits_2=b.asm.pb).apply(null,arguments)},de=b._emscripten_bind_TimeUnits_fromBaseUnits_2=function(){return(de=b._emscripten_bind_TimeUnits_fromBaseUnits_2=b.asm.qb).apply(null,arguments)},ee=b._emscripten_bind_TimeUnits___destroy___0=function(){return(ee=b._emscripten_bind_TimeUnits___destroy___0=b.asm.rb).apply(null,arguments)},fe=b._emscripten_bind_FireSize_getBackingSpreadRate_1=function(){return(fe= -b._emscripten_bind_FireSize_getBackingSpreadRate_1=b.asm.sb).apply(null,arguments)},ge=b._emscripten_bind_FireSize_getEccentricity_0=function(){return(ge=b._emscripten_bind_FireSize_getEccentricity_0=b.asm.tb).apply(null,arguments)},he=b._emscripten_bind_FireSize_getEllipticalA_3=function(){return(he=b._emscripten_bind_FireSize_getEllipticalA_3=b.asm.ub).apply(null,arguments)},ie=b._emscripten_bind_FireSize_getEllipticalB_3=function(){return(ie=b._emscripten_bind_FireSize_getEllipticalB_3=b.asm.vb).apply(null, -arguments)},je=b._emscripten_bind_FireSize_getEllipticalC_3=function(){return(je=b._emscripten_bind_FireSize_getEllipticalC_3=b.asm.wb).apply(null,arguments)},ke=b._emscripten_bind_FireSize_getFireArea_4=function(){return(ke=b._emscripten_bind_FireSize_getFireArea_4=b.asm.xb).apply(null,arguments)},le=b._emscripten_bind_FireSize_getFireLength_3=function(){return(le=b._emscripten_bind_FireSize_getFireLength_3=b.asm.yb).apply(null,arguments)},me=b._emscripten_bind_FireSize_getFireLengthToWidthRatio_0= -function(){return(me=b._emscripten_bind_FireSize_getFireLengthToWidthRatio_0=b.asm.zb).apply(null,arguments)},ne=b._emscripten_bind_FireSize_getFirePerimeter_4=function(){return(ne=b._emscripten_bind_FireSize_getFirePerimeter_4=b.asm.Ab).apply(null,arguments)},oe=b._emscripten_bind_FireSize_getFlankingSpreadRate_1=function(){return(oe=b._emscripten_bind_FireSize_getFlankingSpreadRate_1=b.asm.Bb).apply(null,arguments)},pe=b._emscripten_bind_FireSize_getHeadingToBackingRatio_0=function(){return(pe= -b._emscripten_bind_FireSize_getHeadingToBackingRatio_0=b.asm.Cb).apply(null,arguments)},qe=b._emscripten_bind_FireSize_getMaxFireWidth_3=function(){return(qe=b._emscripten_bind_FireSize_getMaxFireWidth_3=b.asm.Db).apply(null,arguments)},re=b._emscripten_bind_FireSize_calculateFireBasicDimensions_5=function(){return(re=b._emscripten_bind_FireSize_calculateFireBasicDimensions_5=b.asm.Eb).apply(null,arguments)},se=b._emscripten_bind_FireSize___destroy___0=function(){return(se=b._emscripten_bind_FireSize___destroy___0= -b.asm.Fb).apply(null,arguments)},te=b._emscripten_bind_SIGContainAdapter_SIGContainAdapter_0=function(){return(te=b._emscripten_bind_SIGContainAdapter_SIGContainAdapter_0=b.asm.Gb).apply(null,arguments)},ue=b._emscripten_bind_SIGContainAdapter_getContainmentStatus_0=function(){return(ue=b._emscripten_bind_SIGContainAdapter_getContainmentStatus_0=b.asm.Hb).apply(null,arguments)},ve=b._emscripten_bind_SIGContainAdapter_getFirePerimeterX_0=function(){return(ve=b._emscripten_bind_SIGContainAdapter_getFirePerimeterX_0= -b.asm.Ib).apply(null,arguments)},we=b._emscripten_bind_SIGContainAdapter_getFirePerimeterY_0=function(){return(we=b._emscripten_bind_SIGContainAdapter_getFirePerimeterY_0=b.asm.Jb).apply(null,arguments)},xe=b._emscripten_bind_SIGContainAdapter_getOptimizedContainProductionRates_0=function(){return(xe=b._emscripten_bind_SIGContainAdapter_getOptimizedContainProductionRates_0=b.asm.Kb).apply(null,arguments)},ye=b._emscripten_bind_SIGContainAdapter_getOptimizedContainAreas_0=function(){return(ye=b._emscripten_bind_SIGContainAdapter_getOptimizedContainAreas_0= -b.asm.Lb).apply(null,arguments)},ze=b._emscripten_bind_SIGContainAdapter_getOptimizedContainPointCount_0=function(){return(ze=b._emscripten_bind_SIGContainAdapter_getOptimizedContainPointCount_0=b.asm.Mb).apply(null,arguments)},Ae=b._emscripten_bind_SIGContainAdapter_getAttackDistance_1=function(){return(Ae=b._emscripten_bind_SIGContainAdapter_getAttackDistance_1=b.asm.Nb).apply(null,arguments)},Be=b._emscripten_bind_SIGContainAdapter_getFinalContainmentArea_1=function(){return(Be=b._emscripten_bind_SIGContainAdapter_getFinalContainmentArea_1= -b.asm.Ob).apply(null,arguments)},Ce=b._emscripten_bind_SIGContainAdapter_getFinalCost_0=function(){return(Ce=b._emscripten_bind_SIGContainAdapter_getFinalCost_0=b.asm.Pb).apply(null,arguments)},De=b._emscripten_bind_SIGContainAdapter_getFinalFireLineLength_1=function(){return(De=b._emscripten_bind_SIGContainAdapter_getFinalFireLineLength_1=b.asm.Qb).apply(null,arguments)},Ee=b._emscripten_bind_SIGContainAdapter_getFinalFireSize_1=function(){return(Ee=b._emscripten_bind_SIGContainAdapter_getFinalFireSize_1= -b.asm.Rb).apply(null,arguments)},Fe=b._emscripten_bind_SIGContainAdapter_getFinalTimeSinceReport_1=function(){return(Fe=b._emscripten_bind_SIGContainAdapter_getFinalTimeSinceReport_1=b.asm.Sb).apply(null,arguments)},Ge=b._emscripten_bind_SIGContainAdapter_getFinalProductionRate_1=function(){return(Ge=b._emscripten_bind_SIGContainAdapter_getFinalProductionRate_1=b.asm.Tb).apply(null,arguments)},He=b._emscripten_bind_SIGContainAdapter_getFireBackAtAttack_0=function(){return(He=b._emscripten_bind_SIGContainAdapter_getFireBackAtAttack_0= -b.asm.Ub).apply(null,arguments)},Ie=b._emscripten_bind_SIGContainAdapter_getFireBackAtReport_0=function(){return(Ie=b._emscripten_bind_SIGContainAdapter_getFireBackAtReport_0=b.asm.Vb).apply(null,arguments)},Je=b._emscripten_bind_SIGContainAdapter_getFireHeadAtAttack_0=function(){return(Je=b._emscripten_bind_SIGContainAdapter_getFireHeadAtAttack_0=b.asm.Wb).apply(null,arguments)},Ke=b._emscripten_bind_SIGContainAdapter_getFireHeadAtReport_0=function(){return(Ke=b._emscripten_bind_SIGContainAdapter_getFireHeadAtReport_0= -b.asm.Xb).apply(null,arguments)},Le=b._emscripten_bind_SIGContainAdapter_getFireSizeAtInitialAttack_1=function(){return(Le=b._emscripten_bind_SIGContainAdapter_getFireSizeAtInitialAttack_1=b.asm.Yb).apply(null,arguments)},Me=b._emscripten_bind_SIGContainAdapter_getLengthToWidthRatio_0=function(){return(Me=b._emscripten_bind_SIGContainAdapter_getLengthToWidthRatio_0=b.asm.Zb).apply(null,arguments)},Ne=b._emscripten_bind_SIGContainAdapter_getPerimeterAtContainment_1=function(){return(Ne=b._emscripten_bind_SIGContainAdapter_getPerimeterAtContainment_1= -b.asm._b).apply(null,arguments)},Oe=b._emscripten_bind_SIGContainAdapter_getPerimeterAtInitialAttack_1=function(){return(Oe=b._emscripten_bind_SIGContainAdapter_getPerimeterAtInitialAttack_1=b.asm.$b).apply(null,arguments)},Pe=b._emscripten_bind_SIGContainAdapter_getReportSize_1=function(){return(Pe=b._emscripten_bind_SIGContainAdapter_getReportSize_1=b.asm.ac).apply(null,arguments)},Qe=b._emscripten_bind_SIGContainAdapter_getReportRate_1=function(){return(Qe=b._emscripten_bind_SIGContainAdapter_getReportRate_1= -b.asm.bc).apply(null,arguments)},Re=b._emscripten_bind_SIGContainAdapter_getAutoComputedResourceProductionRate_1=function(){return(Re=b._emscripten_bind_SIGContainAdapter_getAutoComputedResourceProductionRate_1=b.asm.cc).apply(null,arguments)},Se=b._emscripten_bind_SIGContainAdapter_getTactic_0=function(){return(Se=b._emscripten_bind_SIGContainAdapter_getTactic_0=b.asm.dc).apply(null,arguments)},Te=b._emscripten_bind_SIGContainAdapter_getFirePerimeterPointCount_0=function(){return(Te=b._emscripten_bind_SIGContainAdapter_getFirePerimeterPointCount_0= -b.asm.ec).apply(null,arguments)},Ue=b._emscripten_bind_SIGContainAdapter_removeAllResourcesWithThisDesc_1=function(){return(Ue=b._emscripten_bind_SIGContainAdapter_removeAllResourcesWithThisDesc_1=b.asm.fc).apply(null,arguments)},Ve=b._emscripten_bind_SIGContainAdapter_removeResourceAt_1=function(){return(Ve=b._emscripten_bind_SIGContainAdapter_removeResourceAt_1=b.asm.gc).apply(null,arguments)},We=b._emscripten_bind_SIGContainAdapter_removeResourceWithThisDesc_1=function(){return(We=b._emscripten_bind_SIGContainAdapter_removeResourceWithThisDesc_1= -b.asm.hc).apply(null,arguments)},Xe=b._emscripten_bind_SIGContainAdapter_addResource_9=function(){return(Xe=b._emscripten_bind_SIGContainAdapter_addResource_9=b.asm.ic).apply(null,arguments)},Ye=b._emscripten_bind_SIGContainAdapter_doContainRun_0=function(){return(Ye=b._emscripten_bind_SIGContainAdapter_doContainRun_0=b.asm.jc).apply(null,arguments)},Ze=b._emscripten_bind_SIGContainAdapter_removeAllResources_0=function(){return(Ze=b._emscripten_bind_SIGContainAdapter_removeAllResources_0=b.asm.kc).apply(null, -arguments)},$e=b._emscripten_bind_SIGContainAdapter_setAttackDistance_2=function(){return($e=b._emscripten_bind_SIGContainAdapter_setAttackDistance_2=b.asm.lc).apply(null,arguments)},af=b._emscripten_bind_SIGContainAdapter_setContainMode_1=function(){return(af=b._emscripten_bind_SIGContainAdapter_setContainMode_1=b.asm.mc).apply(null,arguments)},bf=b._emscripten_bind_SIGContainAdapter_setFireStartTime_1=function(){return(bf=b._emscripten_bind_SIGContainAdapter_setFireStartTime_1=b.asm.nc).apply(null, -arguments)},cf=b._emscripten_bind_SIGContainAdapter_setLwRatio_1=function(){return(cf=b._emscripten_bind_SIGContainAdapter_setLwRatio_1=b.asm.oc).apply(null,arguments)},df=b._emscripten_bind_SIGContainAdapter_setMaxFireSize_1=function(){return(df=b._emscripten_bind_SIGContainAdapter_setMaxFireSize_1=b.asm.pc).apply(null,arguments)},ef=b._emscripten_bind_SIGContainAdapter_setMaxFireTime_1=function(){return(ef=b._emscripten_bind_SIGContainAdapter_setMaxFireTime_1=b.asm.qc).apply(null,arguments)},ff= -b._emscripten_bind_SIGContainAdapter_setMaxSteps_1=function(){return(ff=b._emscripten_bind_SIGContainAdapter_setMaxSteps_1=b.asm.rc).apply(null,arguments)},gf=b._emscripten_bind_SIGContainAdapter_setMinSteps_1=function(){return(gf=b._emscripten_bind_SIGContainAdapter_setMinSteps_1=b.asm.sc).apply(null,arguments)},hf=b._emscripten_bind_SIGContainAdapter_setReportRate_2=function(){return(hf=b._emscripten_bind_SIGContainAdapter_setReportRate_2=b.asm.tc).apply(null,arguments)},jf=b._emscripten_bind_SIGContainAdapter_setReportSize_2= -function(){return(jf=b._emscripten_bind_SIGContainAdapter_setReportSize_2=b.asm.uc).apply(null,arguments)},kf=b._emscripten_bind_SIGContainAdapter_setResourceArrivalTime_2=function(){return(kf=b._emscripten_bind_SIGContainAdapter_setResourceArrivalTime_2=b.asm.vc).apply(null,arguments)},lf=b._emscripten_bind_SIGContainAdapter_setResourceDuration_2=function(){return(lf=b._emscripten_bind_SIGContainAdapter_setResourceDuration_2=b.asm.wc).apply(null,arguments)},mf=b._emscripten_bind_SIGContainAdapter_setRetry_1= -function(){return(mf=b._emscripten_bind_SIGContainAdapter_setRetry_1=b.asm.xc).apply(null,arguments)},nf=b._emscripten_bind_SIGContainAdapter_setTactic_1=function(){return(nf=b._emscripten_bind_SIGContainAdapter_setTactic_1=b.asm.yc).apply(null,arguments)},of=b._emscripten_bind_SIGContainAdapter___destroy___0=function(){return(of=b._emscripten_bind_SIGContainAdapter___destroy___0=b.asm.zc).apply(null,arguments)},pf=b._emscripten_bind_SIGIgnite_SIGIgnite_0=function(){return(pf=b._emscripten_bind_SIGIgnite_SIGIgnite_0= -b.asm.Ac).apply(null,arguments)},qf=b._emscripten_bind_SIGIgnite_initializeMembers_0=function(){return(qf=b._emscripten_bind_SIGIgnite_initializeMembers_0=b.asm.Bc).apply(null,arguments)},rf=b._emscripten_bind_SIGIgnite_getFuelBedType_0=function(){return(rf=b._emscripten_bind_SIGIgnite_getFuelBedType_0=b.asm.Cc).apply(null,arguments)},sf=b._emscripten_bind_SIGIgnite_getLightningChargeType_0=function(){return(sf=b._emscripten_bind_SIGIgnite_getLightningChargeType_0=b.asm.Dc).apply(null,arguments)}, -tf=b._emscripten_bind_SIGIgnite_calculateFirebrandIgnitionProbability_0=function(){return(tf=b._emscripten_bind_SIGIgnite_calculateFirebrandIgnitionProbability_0=b.asm.Ec).apply(null,arguments)},uf=b._emscripten_bind_SIGIgnite_calculateLightningIgnitionProbability_1=function(){return(uf=b._emscripten_bind_SIGIgnite_calculateLightningIgnitionProbability_1=b.asm.Fc).apply(null,arguments)},vf=b._emscripten_bind_SIGIgnite_setAirTemperature_2=function(){return(vf=b._emscripten_bind_SIGIgnite_setAirTemperature_2= -b.asm.Gc).apply(null,arguments)},wf=b._emscripten_bind_SIGIgnite_setDuffDepth_2=function(){return(wf=b._emscripten_bind_SIGIgnite_setDuffDepth_2=b.asm.Hc).apply(null,arguments)},xf=b._emscripten_bind_SIGIgnite_setIgnitionFuelBedType_1=function(){return(xf=b._emscripten_bind_SIGIgnite_setIgnitionFuelBedType_1=b.asm.Ic).apply(null,arguments)},yf=b._emscripten_bind_SIGIgnite_setLightningChargeType_1=function(){return(yf=b._emscripten_bind_SIGIgnite_setLightningChargeType_1=b.asm.Jc).apply(null,arguments)}, -zf=b._emscripten_bind_SIGIgnite_setMoistureHundredHour_2=function(){return(zf=b._emscripten_bind_SIGIgnite_setMoistureHundredHour_2=b.asm.Kc).apply(null,arguments)},Af=b._emscripten_bind_SIGIgnite_setMoistureOneHour_2=function(){return(Af=b._emscripten_bind_SIGIgnite_setMoistureOneHour_2=b.asm.Lc).apply(null,arguments)},Bf=b._emscripten_bind_SIGIgnite_setSunShade_2=function(){return(Bf=b._emscripten_bind_SIGIgnite_setSunShade_2=b.asm.Mc).apply(null,arguments)},Cf=b._emscripten_bind_SIGIgnite_updateIgniteInputs_11= -function(){return(Cf=b._emscripten_bind_SIGIgnite_updateIgniteInputs_11=b.asm.Nc).apply(null,arguments)},Df=b._emscripten_bind_SIGIgnite_getAirTemperature_1=function(){return(Df=b._emscripten_bind_SIGIgnite_getAirTemperature_1=b.asm.Oc).apply(null,arguments)},Ef=b._emscripten_bind_SIGIgnite_getDuffDepth_1=function(){return(Ef=b._emscripten_bind_SIGIgnite_getDuffDepth_1=b.asm.Pc).apply(null,arguments)},Ff=b._emscripten_bind_SIGIgnite_getFirebrandIgnitionProbability_1=function(){return(Ff=b._emscripten_bind_SIGIgnite_getFirebrandIgnitionProbability_1= -b.asm.Qc).apply(null,arguments)},Gf=b._emscripten_bind_SIGIgnite_getFuelTemperature_1=function(){return(Gf=b._emscripten_bind_SIGIgnite_getFuelTemperature_1=b.asm.Rc).apply(null,arguments)},Hf=b._emscripten_bind_SIGIgnite_getMoistureHundredHour_1=function(){return(Hf=b._emscripten_bind_SIGIgnite_getMoistureHundredHour_1=b.asm.Sc).apply(null,arguments)},If=b._emscripten_bind_SIGIgnite_getMoistureOneHour_1=function(){return(If=b._emscripten_bind_SIGIgnite_getMoistureOneHour_1=b.asm.Tc).apply(null,arguments)}, -Jf=b._emscripten_bind_SIGIgnite_getSunShade_1=function(){return(Jf=b._emscripten_bind_SIGIgnite_getSunShade_1=b.asm.Uc).apply(null,arguments)},Kf=b._emscripten_bind_SIGIgnite_isFuelDepthNeeded_0=function(){return(Kf=b._emscripten_bind_SIGIgnite_isFuelDepthNeeded_0=b.asm.Vc).apply(null,arguments)},Lf=b._emscripten_bind_SIGIgnite___destroy___0=function(){return(Lf=b._emscripten_bind_SIGIgnite___destroy___0=b.asm.Wc).apply(null,arguments)},Mf=b._emscripten_bind_SIGMoistureScenarios_SIGMoistureScenarios_0= -function(){return(Mf=b._emscripten_bind_SIGMoistureScenarios_SIGMoistureScenarios_0=b.asm.Xc).apply(null,arguments)},Nf=b._emscripten_bind_SIGMoistureScenarios_getIsMoistureScenarioDefinedByIndex_1=function(){return(Nf=b._emscripten_bind_SIGMoistureScenarios_getIsMoistureScenarioDefinedByIndex_1=b.asm.Yc).apply(null,arguments)},Of=b._emscripten_bind_SIGMoistureScenarios_getIsMoistureScenarioDefinedByName_1=function(){return(Of=b._emscripten_bind_SIGMoistureScenarios_getIsMoistureScenarioDefinedByName_1= -b.asm.Zc).apply(null,arguments)},Pf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioHundredHourByIndex_2=function(){return(Pf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioHundredHourByIndex_2=b.asm._c).apply(null,arguments)},Qf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioHundredHourByName_2=function(){return(Qf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioHundredHourByName_2=b.asm.$c).apply(null,arguments)},Rf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveHerbaceousByIndex_2= -function(){return(Rf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveHerbaceousByIndex_2=b.asm.ad).apply(null,arguments)},Sf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveHerbaceousByName_2=function(){return(Sf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveHerbaceousByName_2=b.asm.bd).apply(null,arguments)},Tf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveWoodyByIndex_2=function(){return(Tf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveWoodyByIndex_2= -b.asm.cd).apply(null,arguments)},Uf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveWoodyByName_2=function(){return(Uf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveWoodyByName_2=b.asm.dd).apply(null,arguments)},Vf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioOneHourByIndex_2=function(){return(Vf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioOneHourByIndex_2=b.asm.ed).apply(null,arguments)},Wf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioOneHourByName_2= -function(){return(Wf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioOneHourByName_2=b.asm.fd).apply(null,arguments)},Xf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioTenHourByIndex_2=function(){return(Xf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioTenHourByIndex_2=b.asm.gd).apply(null,arguments)},Yf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioTenHourByName_2=function(){return(Yf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioTenHourByName_2= -b.asm.hd).apply(null,arguments)},Zf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioIndexByName_1=function(){return(Zf=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioIndexByName_1=b.asm.id).apply(null,arguments)},$f=b._emscripten_bind_SIGMoistureScenarios_getNumberOfMoistureScenarios_0=function(){return($f=b._emscripten_bind_SIGMoistureScenarios_getNumberOfMoistureScenarios_0=b.asm.jd).apply(null,arguments)},ag=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioDescriptionByIndex_1= -function(){return(ag=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioDescriptionByIndex_1=b.asm.kd).apply(null,arguments)},bg=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioDescriptionByName_1=function(){return(bg=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioDescriptionByName_1=b.asm.ld).apply(null,arguments)},cg=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioNameByIndex_1=function(){return(cg=b._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioNameByIndex_1= -b.asm.md).apply(null,arguments)},dg=b._emscripten_bind_SIGMoistureScenarios___destroy___0=function(){return(dg=b._emscripten_bind_SIGMoistureScenarios___destroy___0=b.asm.nd).apply(null,arguments)},eg=b._emscripten_bind_SIGSpot_SIGSpot_0=function(){return(eg=b._emscripten_bind_SIGSpot_SIGSpot_0=b.asm.od).apply(null,arguments)},fg=b._emscripten_bind_SIGSpot_getDownwindCanopyMode_0=function(){return(fg=b._emscripten_bind_SIGSpot_getDownwindCanopyMode_0=b.asm.pd).apply(null,arguments)},gg=b._emscripten_bind_SIGSpot_getLocation_0= -function(){return(gg=b._emscripten_bind_SIGSpot_getLocation_0=b.asm.qd).apply(null,arguments)},hg=b._emscripten_bind_SIGSpot_getTreeSpecies_0=function(){return(hg=b._emscripten_bind_SIGSpot_getTreeSpecies_0=b.asm.rd).apply(null,arguments)},ig=b._emscripten_bind_SIGSpot_getBurningPileFlameHeight_1=function(){return(ig=b._emscripten_bind_SIGSpot_getBurningPileFlameHeight_1=b.asm.sd).apply(null,arguments)},jg=b._emscripten_bind_SIGSpot_getCoverHeightUsedForBurningPile_1=function(){return(jg=b._emscripten_bind_SIGSpot_getCoverHeightUsedForBurningPile_1= -b.asm.td).apply(null,arguments)},kg=b._emscripten_bind_SIGSpot_getCoverHeightUsedForSurfaceFire_1=function(){return(kg=b._emscripten_bind_SIGSpot_getCoverHeightUsedForSurfaceFire_1=b.asm.ud).apply(null,arguments)},lg=b._emscripten_bind_SIGSpot_getCoverHeightUsedForTorchingTrees_1=function(){return(lg=b._emscripten_bind_SIGSpot_getCoverHeightUsedForTorchingTrees_1=b.asm.vd).apply(null,arguments)},mg=b._emscripten_bind_SIGSpot_getDBH_1=function(){return(mg=b._emscripten_bind_SIGSpot_getDBH_1=b.asm.wd).apply(null, -arguments)},ng=b._emscripten_bind_SIGSpot_getDownwindCoverHeight_1=function(){return(ng=b._emscripten_bind_SIGSpot_getDownwindCoverHeight_1=b.asm.xd).apply(null,arguments)},og=b._emscripten_bind_SIGSpot_getFlameDurationForTorchingTrees_1=function(){return(og=b._emscripten_bind_SIGSpot_getFlameDurationForTorchingTrees_1=b.asm.yd).apply(null,arguments)},pg=b._emscripten_bind_SIGSpot_getFlameHeightForTorchingTrees_1=function(){return(pg=b._emscripten_bind_SIGSpot_getFlameHeightForTorchingTrees_1=b.asm.zd).apply(null, -arguments)},qg=b._emscripten_bind_SIGSpot_getFlameRatioForTorchingTrees_0=function(){return(qg=b._emscripten_bind_SIGSpot_getFlameRatioForTorchingTrees_0=b.asm.Ad).apply(null,arguments)},rg=b._emscripten_bind_SIGSpot_getMaxFirebrandHeightFromBurningPile_1=function(){return(rg=b._emscripten_bind_SIGSpot_getMaxFirebrandHeightFromBurningPile_1=b.asm.Bd).apply(null,arguments)},sg=b._emscripten_bind_SIGSpot_getMaxFirebrandHeightFromSurfaceFire_1=function(){return(sg=b._emscripten_bind_SIGSpot_getMaxFirebrandHeightFromSurfaceFire_1= -b.asm.Cd).apply(null,arguments)},tg=b._emscripten_bind_SIGSpot_getMaxFirebrandHeightFromTorchingTrees_1=function(){return(tg=b._emscripten_bind_SIGSpot_getMaxFirebrandHeightFromTorchingTrees_1=b.asm.Dd).apply(null,arguments)},ug=b._emscripten_bind_SIGSpot_getMaxFlatTerrainSpottingDistanceFromBurningPile_1=function(){return(ug=b._emscripten_bind_SIGSpot_getMaxFlatTerrainSpottingDistanceFromBurningPile_1=b.asm.Ed).apply(null,arguments)},vg=b._emscripten_bind_SIGSpot_getMaxFlatTerrainSpottingDistanceFromSurfaceFire_1= -function(){return(vg=b._emscripten_bind_SIGSpot_getMaxFlatTerrainSpottingDistanceFromSurfaceFire_1=b.asm.Fd).apply(null,arguments)},wg=b._emscripten_bind_SIGSpot_getMaxFlatTerrainSpottingDistanceFromTorchingTrees_1=function(){return(wg=b._emscripten_bind_SIGSpot_getMaxFlatTerrainSpottingDistanceFromTorchingTrees_1=b.asm.Gd).apply(null,arguments)},xg=b._emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromBurningPile_1=function(){return(xg=b._emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromBurningPile_1= -b.asm.Hd).apply(null,arguments)},yg=b._emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromSurfaceFire_1=function(){return(yg=b._emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromSurfaceFire_1=b.asm.Id).apply(null,arguments)},zg=b._emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromTorchingTrees_1=function(){return(zg=b._emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromTorchingTrees_1=b.asm.Jd).apply(null,arguments)},Ag=b._emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromActiveCrown_1= -function(){return(Ag=b._emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromActiveCrown_1=b.asm.Kd).apply(null,arguments)},Bg=b._emscripten_bind_SIGSpot_getRidgeToValleyDistance_1=function(){return(Bg=b._emscripten_bind_SIGSpot_getRidgeToValleyDistance_1=b.asm.Ld).apply(null,arguments)},Cg=b._emscripten_bind_SIGSpot_getRidgeToValleyElevation_1=function(){return(Cg=b._emscripten_bind_SIGSpot_getRidgeToValleyElevation_1=b.asm.Md).apply(null,arguments)},Dg=b._emscripten_bind_SIGSpot_getSurfaceFlameLength_1= -function(){return(Dg=b._emscripten_bind_SIGSpot_getSurfaceFlameLength_1=b.asm.Nd).apply(null,arguments)},Eg=b._emscripten_bind_SIGSpot_getTreeHeight_1=function(){return(Eg=b._emscripten_bind_SIGSpot_getTreeHeight_1=b.asm.Od).apply(null,arguments)},Fg=b._emscripten_bind_SIGSpot_getWindSpeedAtTwentyFeet_1=function(){return(Fg=b._emscripten_bind_SIGSpot_getWindSpeedAtTwentyFeet_1=b.asm.Pd).apply(null,arguments)},Gg=b._emscripten_bind_SIGSpot_getTorchingTrees_0=function(){return(Gg=b._emscripten_bind_SIGSpot_getTorchingTrees_0= -b.asm.Qd).apply(null,arguments)},Hg=b._emscripten_bind_SIGSpot_calculateAll_0=function(){return(Hg=b._emscripten_bind_SIGSpot_calculateAll_0=b.asm.Rd).apply(null,arguments)},Ig=b._emscripten_bind_SIGSpot_calculateSpottingDistanceFromBurningPile_0=function(){return(Ig=b._emscripten_bind_SIGSpot_calculateSpottingDistanceFromBurningPile_0=b.asm.Sd).apply(null,arguments)},Jg=b._emscripten_bind_SIGSpot_calculateSpottingDistanceFromSurfaceFire_0=function(){return(Jg=b._emscripten_bind_SIGSpot_calculateSpottingDistanceFromSurfaceFire_0= -b.asm.Td).apply(null,arguments)},Kg=b._emscripten_bind_SIGSpot_calculateSpottingDistanceFromTorchingTrees_0=function(){return(Kg=b._emscripten_bind_SIGSpot_calculateSpottingDistanceFromTorchingTrees_0=b.asm.Ud).apply(null,arguments)},Lg=b._emscripten_bind_SIGSpot_initializeMembers_0=function(){return(Lg=b._emscripten_bind_SIGSpot_initializeMembers_0=b.asm.Vd).apply(null,arguments)},Mg=b._emscripten_bind_SIGSpot_setActiveCrownFlameLength_2=function(){return(Mg=b._emscripten_bind_SIGSpot_setActiveCrownFlameLength_2= -b.asm.Wd).apply(null,arguments)},Ng=b._emscripten_bind_SIGSpot_setBurningPileFlameHeight_2=function(){return(Ng=b._emscripten_bind_SIGSpot_setBurningPileFlameHeight_2=b.asm.Xd).apply(null,arguments)},Og=b._emscripten_bind_SIGSpot_setDBH_2=function(){return(Og=b._emscripten_bind_SIGSpot_setDBH_2=b.asm.Yd).apply(null,arguments)},Pg=b._emscripten_bind_SIGSpot_setDownwindCanopyMode_1=function(){return(Pg=b._emscripten_bind_SIGSpot_setDownwindCanopyMode_1=b.asm.Zd).apply(null,arguments)},Qg=b._emscripten_bind_SIGSpot_setDownwindCoverHeight_2= -function(){return(Qg=b._emscripten_bind_SIGSpot_setDownwindCoverHeight_2=b.asm._d).apply(null,arguments)},Rg=b._emscripten_bind_SIGSpot_setFireType_1=function(){return(Rg=b._emscripten_bind_SIGSpot_setFireType_1=b.asm.$d).apply(null,arguments)},Sg=b._emscripten_bind_SIGSpot_setFlameLength_2=function(){return(Sg=b._emscripten_bind_SIGSpot_setFlameLength_2=b.asm.ae).apply(null,arguments)},Tg=b._emscripten_bind_SIGSpot_setFirelineIntensity_2=function(){return(Tg=b._emscripten_bind_SIGSpot_setFirelineIntensity_2= -b.asm.be).apply(null,arguments)},Ug=b._emscripten_bind_SIGSpot_setLocation_1=function(){return(Ug=b._emscripten_bind_SIGSpot_setLocation_1=b.asm.ce).apply(null,arguments)},Vg=b._emscripten_bind_SIGSpot_setRidgeToValleyDistance_2=function(){return(Vg=b._emscripten_bind_SIGSpot_setRidgeToValleyDistance_2=b.asm.de).apply(null,arguments)},Wg=b._emscripten_bind_SIGSpot_setRidgeToValleyElevation_2=function(){return(Wg=b._emscripten_bind_SIGSpot_setRidgeToValleyElevation_2=b.asm.ee).apply(null,arguments)}, -Xg=b._emscripten_bind_SIGSpot_setTorchingTrees_1=function(){return(Xg=b._emscripten_bind_SIGSpot_setTorchingTrees_1=b.asm.fe).apply(null,arguments)},Yg=b._emscripten_bind_SIGSpot_setTreeHeight_2=function(){return(Yg=b._emscripten_bind_SIGSpot_setTreeHeight_2=b.asm.ge).apply(null,arguments)},Zg=b._emscripten_bind_SIGSpot_setTreeSpecies_1=function(){return(Zg=b._emscripten_bind_SIGSpot_setTreeSpecies_1=b.asm.he).apply(null,arguments)},$g=b._emscripten_bind_SIGSpot_setWindSpeedAtTwentyFeet_2=function(){return($g= -b._emscripten_bind_SIGSpot_setWindSpeedAtTwentyFeet_2=b.asm.ie).apply(null,arguments)},ah=b._emscripten_bind_SIGSpot_setWindSpeed_2=function(){return(ah=b._emscripten_bind_SIGSpot_setWindSpeed_2=b.asm.je).apply(null,arguments)},bh=b._emscripten_bind_SIGSpot_setWindSpeedAndWindHeightInputMode_3=function(){return(bh=b._emscripten_bind_SIGSpot_setWindSpeedAndWindHeightInputMode_3=b.asm.ke).apply(null,arguments)},ch=b._emscripten_bind_SIGSpot_setWindHeightInputMode_1=function(){return(ch=b._emscripten_bind_SIGSpot_setWindHeightInputMode_1= -b.asm.le).apply(null,arguments)},dh=b._emscripten_bind_SIGSpot_updateSpotInputsForBurningPile_12=function(){return(dh=b._emscripten_bind_SIGSpot_updateSpotInputsForBurningPile_12=b.asm.me).apply(null,arguments)},eh=b._emscripten_bind_SIGSpot_updateSpotInputsForSurfaceFire_12=function(){return(eh=b._emscripten_bind_SIGSpot_updateSpotInputsForSurfaceFire_12=b.asm.ne).apply(null,arguments)},fh=b._emscripten_bind_SIGSpot_updateSpotInputsForTorchingTrees_16=function(){return(fh=b._emscripten_bind_SIGSpot_updateSpotInputsForTorchingTrees_16= -b.asm.oe).apply(null,arguments)},gh=b._emscripten_bind_SIGSpot___destroy___0=function(){return(gh=b._emscripten_bind_SIGSpot___destroy___0=b.asm.pe).apply(null,arguments)},hh=b._emscripten_bind_SIGFuelModels_SIGFuelModels_0=function(){return(hh=b._emscripten_bind_SIGFuelModels_SIGFuelModels_0=b.asm.qe).apply(null,arguments)},ih=b._emscripten_bind_SIGFuelModels_SIGFuelModels_1=function(){return(ih=b._emscripten_bind_SIGFuelModels_SIGFuelModels_1=b.asm.re).apply(null,arguments)},jh=b._emscripten_bind_SIGFuelModels_equal_1= -function(){return(jh=b._emscripten_bind_SIGFuelModels_equal_1=b.asm.se).apply(null,arguments)},kh=b._emscripten_bind_SIGFuelModels_clearCustomFuelModel_1=function(){return(kh=b._emscripten_bind_SIGFuelModels_clearCustomFuelModel_1=b.asm.te).apply(null,arguments)},lh=b._emscripten_bind_SIGFuelModels_getIsDynamic_1=function(){return(lh=b._emscripten_bind_SIGFuelModels_getIsDynamic_1=b.asm.ue).apply(null,arguments)},mh=b._emscripten_bind_SIGFuelModels_isAllFuelLoadZero_1=function(){return(mh=b._emscripten_bind_SIGFuelModels_isAllFuelLoadZero_1= -b.asm.ve).apply(null,arguments)},nh=b._emscripten_bind_SIGFuelModels_isFuelModelDefined_1=function(){return(nh=b._emscripten_bind_SIGFuelModels_isFuelModelDefined_1=b.asm.we).apply(null,arguments)},oh=b._emscripten_bind_SIGFuelModels_isFuelModelReserved_1=function(){return(oh=b._emscripten_bind_SIGFuelModels_isFuelModelReserved_1=b.asm.xe).apply(null,arguments)},ph=b._emscripten_bind_SIGFuelModels_setCustomFuelModel_21=function(){return(ph=b._emscripten_bind_SIGFuelModels_setCustomFuelModel_21=b.asm.ye).apply(null, -arguments)},qh=b._emscripten_bind_SIGFuelModels_getFuelCode_1=function(){return(qh=b._emscripten_bind_SIGFuelModels_getFuelCode_1=b.asm.ze).apply(null,arguments)},rh=b._emscripten_bind_SIGFuelModels_getFuelName_1=function(){return(rh=b._emscripten_bind_SIGFuelModels_getFuelName_1=b.asm.Ae).apply(null,arguments)},sh=b._emscripten_bind_SIGFuelModels_getFuelLoadHundredHour_2=function(){return(sh=b._emscripten_bind_SIGFuelModels_getFuelLoadHundredHour_2=b.asm.Be).apply(null,arguments)},th=b._emscripten_bind_SIGFuelModels_getFuelLoadLiveHerbaceous_2= -function(){return(th=b._emscripten_bind_SIGFuelModels_getFuelLoadLiveHerbaceous_2=b.asm.Ce).apply(null,arguments)},uh=b._emscripten_bind_SIGFuelModels_getFuelLoadLiveWoody_2=function(){return(uh=b._emscripten_bind_SIGFuelModels_getFuelLoadLiveWoody_2=b.asm.De).apply(null,arguments)},vh=b._emscripten_bind_SIGFuelModels_getFuelLoadOneHour_2=function(){return(vh=b._emscripten_bind_SIGFuelModels_getFuelLoadOneHour_2=b.asm.Ee).apply(null,arguments)},wh=b._emscripten_bind_SIGFuelModels_getFuelLoadTenHour_2= -function(){return(wh=b._emscripten_bind_SIGFuelModels_getFuelLoadTenHour_2=b.asm.Fe).apply(null,arguments)},xh=b._emscripten_bind_SIGFuelModels_getFuelbedDepth_2=function(){return(xh=b._emscripten_bind_SIGFuelModels_getFuelbedDepth_2=b.asm.Ge).apply(null,arguments)},yh=b._emscripten_bind_SIGFuelModels_getHeatOfCombustionDead_2=function(){return(yh=b._emscripten_bind_SIGFuelModels_getHeatOfCombustionDead_2=b.asm.He).apply(null,arguments)},zh=b._emscripten_bind_SIGFuelModels_getMoistureOfExtinctionDead_2= -function(){return(zh=b._emscripten_bind_SIGFuelModels_getMoistureOfExtinctionDead_2=b.asm.Ie).apply(null,arguments)},Ah=b._emscripten_bind_SIGFuelModels_getSavrLiveHerbaceous_2=function(){return(Ah=b._emscripten_bind_SIGFuelModels_getSavrLiveHerbaceous_2=b.asm.Je).apply(null,arguments)},Bh=b._emscripten_bind_SIGFuelModels_getSavrLiveWoody_2=function(){return(Bh=b._emscripten_bind_SIGFuelModels_getSavrLiveWoody_2=b.asm.Ke).apply(null,arguments)},Ch=b._emscripten_bind_SIGFuelModels_getSavrOneHour_2= -function(){return(Ch=b._emscripten_bind_SIGFuelModels_getSavrOneHour_2=b.asm.Le).apply(null,arguments)},Dh=b._emscripten_bind_SIGFuelModels_getHeatOfCombustionLive_2=function(){return(Dh=b._emscripten_bind_SIGFuelModels_getHeatOfCombustionLive_2=b.asm.Me).apply(null,arguments)},Eh=b._emscripten_bind_SIGFuelModels___destroy___0=function(){return(Eh=b._emscripten_bind_SIGFuelModels___destroy___0=b.asm.Ne).apply(null,arguments)},Fh=b._emscripten_bind_SIGSurface_SIGSurface_1=function(){return(Fh=b._emscripten_bind_SIGSurface_SIGSurface_1= -b.asm.Oe).apply(null,arguments)},Gh=b._emscripten_bind_SIGSurface_getAspenFireSeverity_0=function(){return(Gh=b._emscripten_bind_SIGSurface_getAspenFireSeverity_0=b.asm.Pe).apply(null,arguments)},Hh=b._emscripten_bind_SIGSurface_getChaparralFuelType_0=function(){return(Hh=b._emscripten_bind_SIGSurface_getChaparralFuelType_0=b.asm.Qe).apply(null,arguments)},Ih=b._emscripten_bind_SIGSurface_getMoistureInputMode_0=function(){return(Ih=b._emscripten_bind_SIGSurface_getMoistureInputMode_0=b.asm.Re).apply(null, -arguments)},Jh=b._emscripten_bind_SIGSurface_getWindAdjustmentFactorCalculationMethod_0=function(){return(Jh=b._emscripten_bind_SIGSurface_getWindAdjustmentFactorCalculationMethod_0=b.asm.Se).apply(null,arguments)},Kh=b._emscripten_bind_SIGSurface_getWindAndSpreadOrientationMode_0=function(){return(Kh=b._emscripten_bind_SIGSurface_getWindAndSpreadOrientationMode_0=b.asm.Te).apply(null,arguments)},Lh=b._emscripten_bind_SIGSurface_getWindHeightInputMode_0=function(){return(Lh=b._emscripten_bind_SIGSurface_getWindHeightInputMode_0= -b.asm.Ue).apply(null,arguments)},Mh=b._emscripten_bind_SIGSurface_getWindUpslopeAlignmentMode_0=function(){return(Mh=b._emscripten_bind_SIGSurface_getWindUpslopeAlignmentMode_0=b.asm.Ve).apply(null,arguments)},Nh=b._emscripten_bind_SIGSurface_getSurfaceRunInDirectionOf_0=function(){return(Nh=b._emscripten_bind_SIGSurface_getSurfaceRunInDirectionOf_0=b.asm.We).apply(null,arguments)},Oh=b._emscripten_bind_SIGSurface_getIsMoistureScenarioDefinedByIndex_1=function(){return(Oh=b._emscripten_bind_SIGSurface_getIsMoistureScenarioDefinedByIndex_1= -b.asm.Xe).apply(null,arguments)},Ph=b._emscripten_bind_SIGSurface_getIsMoistureScenarioDefinedByName_1=function(){return(Ph=b._emscripten_bind_SIGSurface_getIsMoistureScenarioDefinedByName_1=b.asm.Ye).apply(null,arguments)},Qh=b._emscripten_bind_SIGSurface_getIsUsingChaparral_0=function(){return(Qh=b._emscripten_bind_SIGSurface_getIsUsingChaparral_0=b.asm.Ze).apply(null,arguments)},Rh=b._emscripten_bind_SIGSurface_getIsUsingPalmettoGallberry_0=function(){return(Rh=b._emscripten_bind_SIGSurface_getIsUsingPalmettoGallberry_0= -b.asm._e).apply(null,arguments)},Sh=b._emscripten_bind_SIGSurface_getIsUsingWesternAspen_0=function(){return(Sh=b._emscripten_bind_SIGSurface_getIsUsingWesternAspen_0=b.asm.$e).apply(null,arguments)},Th=b._emscripten_bind_SIGSurface_isAllFuelLoadZero_1=function(){return(Th=b._emscripten_bind_SIGSurface_isAllFuelLoadZero_1=b.asm.af).apply(null,arguments)},Uh=b._emscripten_bind_SIGSurface_isFuelDynamic_1=function(){return(Uh=b._emscripten_bind_SIGSurface_isFuelDynamic_1=b.asm.bf).apply(null,arguments)}, -Vh=b._emscripten_bind_SIGSurface_isFuelModelDefined_1=function(){return(Vh=b._emscripten_bind_SIGSurface_isFuelModelDefined_1=b.asm.cf).apply(null,arguments)},Wh=b._emscripten_bind_SIGSurface_isFuelModelReserved_1=function(){return(Wh=b._emscripten_bind_SIGSurface_isFuelModelReserved_1=b.asm.df).apply(null,arguments)},Xh=b._emscripten_bind_SIGSurface_isMoistureClassInputNeededForCurrentFuelModel_1=function(){return(Xh=b._emscripten_bind_SIGSurface_isMoistureClassInputNeededForCurrentFuelModel_1=b.asm.ef).apply(null, -arguments)},Yh=b._emscripten_bind_SIGSurface_isUsingTwoFuelModels_0=function(){return(Yh=b._emscripten_bind_SIGSurface_isUsingTwoFuelModels_0=b.asm.ff).apply(null,arguments)},Zh=b._emscripten_bind_SIGSurface_setCurrentMoistureScenarioByIndex_1=function(){return(Zh=b._emscripten_bind_SIGSurface_setCurrentMoistureScenarioByIndex_1=b.asm.gf).apply(null,arguments)},$h=b._emscripten_bind_SIGSurface_setCurrentMoistureScenarioByName_1=function(){return($h=b._emscripten_bind_SIGSurface_setCurrentMoistureScenarioByName_1= -b.asm.hf).apply(null,arguments)},ai=b._emscripten_bind_SIGSurface_calculateFlameLength_3=function(){return(ai=b._emscripten_bind_SIGSurface_calculateFlameLength_3=b.asm.jf).apply(null,arguments)},bi=b._emscripten_bind_SIGSurface_getAgeOfRough_0=function(){return(bi=b._emscripten_bind_SIGSurface_getAgeOfRough_0=b.asm.kf).apply(null,arguments)},ci=b._emscripten_bind_SIGSurface_getAspect_0=function(){return(ci=b._emscripten_bind_SIGSurface_getAspect_0=b.asm.lf).apply(null,arguments)},di=b._emscripten_bind_SIGSurface_getAspenCuringLevel_1= -function(){return(di=b._emscripten_bind_SIGSurface_getAspenCuringLevel_1=b.asm.mf).apply(null,arguments)},ei=b._emscripten_bind_SIGSurface_getAspenDBH_1=function(){return(ei=b._emscripten_bind_SIGSurface_getAspenDBH_1=b.asm.nf).apply(null,arguments)},fi=b._emscripten_bind_SIGSurface_getAspenLoadDeadOneHour_1=function(){return(fi=b._emscripten_bind_SIGSurface_getAspenLoadDeadOneHour_1=b.asm.of).apply(null,arguments)},gi=b._emscripten_bind_SIGSurface_getAspenLoadDeadTenHour_1=function(){return(gi=b._emscripten_bind_SIGSurface_getAspenLoadDeadTenHour_1= -b.asm.pf).apply(null,arguments)},hi=b._emscripten_bind_SIGSurface_getAspenLoadLiveHerbaceous_1=function(){return(hi=b._emscripten_bind_SIGSurface_getAspenLoadLiveHerbaceous_1=b.asm.qf).apply(null,arguments)},ii=b._emscripten_bind_SIGSurface_getAspenLoadLiveWoody_1=function(){return(ii=b._emscripten_bind_SIGSurface_getAspenLoadLiveWoody_1=b.asm.rf).apply(null,arguments)},ji=b._emscripten_bind_SIGSurface_getAspenSavrDeadOneHour_1=function(){return(ji=b._emscripten_bind_SIGSurface_getAspenSavrDeadOneHour_1= -b.asm.sf).apply(null,arguments)},ki=b._emscripten_bind_SIGSurface_getAspenSavrDeadTenHour_1=function(){return(ki=b._emscripten_bind_SIGSurface_getAspenSavrDeadTenHour_1=b.asm.tf).apply(null,arguments)},li=b._emscripten_bind_SIGSurface_getAspenSavrLiveHerbaceous_1=function(){return(li=b._emscripten_bind_SIGSurface_getAspenSavrLiveHerbaceous_1=b.asm.uf).apply(null,arguments)},mi=b._emscripten_bind_SIGSurface_getAspenSavrLiveWoody_1=function(){return(mi=b._emscripten_bind_SIGSurface_getAspenSavrLiveWoody_1= -b.asm.vf).apply(null,arguments)},ni=b._emscripten_bind_SIGSurface_getBackingFirelineIntensity_1=function(){return(ni=b._emscripten_bind_SIGSurface_getBackingFirelineIntensity_1=b.asm.wf).apply(null,arguments)},oi=b._emscripten_bind_SIGSurface_getBackingFlameLength_1=function(){return(oi=b._emscripten_bind_SIGSurface_getBackingFlameLength_1=b.asm.xf).apply(null,arguments)},pi=b._emscripten_bind_SIGSurface_getBackingSpreadDistance_1=function(){return(pi=b._emscripten_bind_SIGSurface_getBackingSpreadDistance_1= -b.asm.yf).apply(null,arguments)},qi=b._emscripten_bind_SIGSurface_getBackingSpreadRate_1=function(){return(qi=b._emscripten_bind_SIGSurface_getBackingSpreadRate_1=b.asm.zf).apply(null,arguments)},ri=b._emscripten_bind_SIGSurface_getBulkDensity_1=function(){return(ri=b._emscripten_bind_SIGSurface_getBulkDensity_1=b.asm.Af).apply(null,arguments)},si=b._emscripten_bind_SIGSurface_getCanopyCover_1=function(){return(si=b._emscripten_bind_SIGSurface_getCanopyCover_1=b.asm.Bf).apply(null,arguments)},ti= -b._emscripten_bind_SIGSurface_getCanopyHeight_1=function(){return(ti=b._emscripten_bind_SIGSurface_getCanopyHeight_1=b.asm.Cf).apply(null,arguments)},ui=b._emscripten_bind_SIGSurface_getChaparralAge_1=function(){return(ui=b._emscripten_bind_SIGSurface_getChaparralAge_1=b.asm.Df).apply(null,arguments)},vi=b._emscripten_bind_SIGSurface_getChaparralDaysSinceMayFirst_0=function(){return(vi=b._emscripten_bind_SIGSurface_getChaparralDaysSinceMayFirst_0=b.asm.Ef).apply(null,arguments)},wi=b._emscripten_bind_SIGSurface_getChaparralDeadFuelFraction_0= -function(){return(wi=b._emscripten_bind_SIGSurface_getChaparralDeadFuelFraction_0=b.asm.Ff).apply(null,arguments)},xi=b._emscripten_bind_SIGSurface_getChaparralDeadMoistureOfExtinction_1=function(){return(xi=b._emscripten_bind_SIGSurface_getChaparralDeadMoistureOfExtinction_1=b.asm.Gf).apply(null,arguments)},yi=b._emscripten_bind_SIGSurface_getChaparralDensity_3=function(){return(yi=b._emscripten_bind_SIGSurface_getChaparralDensity_3=b.asm.Hf).apply(null,arguments)},zi=b._emscripten_bind_SIGSurface_getChaparralFuelBedDepth_1= -function(){return(zi=b._emscripten_bind_SIGSurface_getChaparralFuelBedDepth_1=b.asm.If).apply(null,arguments)},Ai=b._emscripten_bind_SIGSurface_getChaparralFuelDeadLoadFraction_0=function(){return(Ai=b._emscripten_bind_SIGSurface_getChaparralFuelDeadLoadFraction_0=b.asm.Jf).apply(null,arguments)},Bi=b._emscripten_bind_SIGSurface_getChaparralHeatOfCombustion_3=function(){return(Bi=b._emscripten_bind_SIGSurface_getChaparralHeatOfCombustion_3=b.asm.Kf).apply(null,arguments)},Ci=b._emscripten_bind_SIGSurface_getChaparralLiveMoistureOfExtinction_1= -function(){return(Ci=b._emscripten_bind_SIGSurface_getChaparralLiveMoistureOfExtinction_1=b.asm.Lf).apply(null,arguments)},Di=b._emscripten_bind_SIGSurface_getChaparralLoadDeadHalfInchToLessThanOneInch_1=function(){return(Di=b._emscripten_bind_SIGSurface_getChaparralLoadDeadHalfInchToLessThanOneInch_1=b.asm.Mf).apply(null,arguments)},Ei=b._emscripten_bind_SIGSurface_getChaparralLoadDeadLessThanQuarterInch_1=function(){return(Ei=b._emscripten_bind_SIGSurface_getChaparralLoadDeadLessThanQuarterInch_1= -b.asm.Nf).apply(null,arguments)},Fi=b._emscripten_bind_SIGSurface_getChaparralLoadDeadOneInchToThreeInch_1=function(){return(Fi=b._emscripten_bind_SIGSurface_getChaparralLoadDeadOneInchToThreeInch_1=b.asm.Of).apply(null,arguments)},Gi=b._emscripten_bind_SIGSurface_getChaparralLoadDeadQuarterInchToLessThanHalfInch_1=function(){return(Gi=b._emscripten_bind_SIGSurface_getChaparralLoadDeadQuarterInchToLessThanHalfInch_1=b.asm.Pf).apply(null,arguments)},Hi=b._emscripten_bind_SIGSurface_getChaparralLoadLiveHalfInchToLessThanOneInch_1= -function(){return(Hi=b._emscripten_bind_SIGSurface_getChaparralLoadLiveHalfInchToLessThanOneInch_1=b.asm.Qf).apply(null,arguments)},Ii=b._emscripten_bind_SIGSurface_getChaparralLoadLiveLeaves_1=function(){return(Ii=b._emscripten_bind_SIGSurface_getChaparralLoadLiveLeaves_1=b.asm.Rf).apply(null,arguments)},Ji=b._emscripten_bind_SIGSurface_getChaparralLoadLiveOneInchToThreeInch_1=function(){return(Ji=b._emscripten_bind_SIGSurface_getChaparralLoadLiveOneInchToThreeInch_1=b.asm.Sf).apply(null,arguments)}, -Ki=b._emscripten_bind_SIGSurface_getChaparralLoadLiveQuarterInchToLessThanHalfInch_1=function(){return(Ki=b._emscripten_bind_SIGSurface_getChaparralLoadLiveQuarterInchToLessThanHalfInch_1=b.asm.Tf).apply(null,arguments)},Li=b._emscripten_bind_SIGSurface_getChaparralLoadLiveStemsLessThanQuaterInch_1=function(){return(Li=b._emscripten_bind_SIGSurface_getChaparralLoadLiveStemsLessThanQuaterInch_1=b.asm.Uf).apply(null,arguments)},Mi=b._emscripten_bind_SIGSurface_getChaparralMoisture_3=function(){return(Mi= -b._emscripten_bind_SIGSurface_getChaparralMoisture_3=b.asm.Vf).apply(null,arguments)},Ni=b._emscripten_bind_SIGSurface_getChaparralTotalDeadFuelLoad_1=function(){return(Ni=b._emscripten_bind_SIGSurface_getChaparralTotalDeadFuelLoad_1=b.asm.Wf).apply(null,arguments)},Oi=b._emscripten_bind_SIGSurface_getChaparralTotalFuelLoad_1=function(){return(Oi=b._emscripten_bind_SIGSurface_getChaparralTotalFuelLoad_1=b.asm.Xf).apply(null,arguments)},Pi=b._emscripten_bind_SIGSurface_getChaparralTotalLiveFuelLoad_1= -function(){return(Pi=b._emscripten_bind_SIGSurface_getChaparralTotalLiveFuelLoad_1=b.asm.Yf).apply(null,arguments)},Qi=b._emscripten_bind_SIGSurface_getCharacteristicMoistureByLifeState_2=function(){return(Qi=b._emscripten_bind_SIGSurface_getCharacteristicMoistureByLifeState_2=b.asm.Zf).apply(null,arguments)},Ri=b._emscripten_bind_SIGSurface_getCharacteristicMoistureDead_1=function(){return(Ri=b._emscripten_bind_SIGSurface_getCharacteristicMoistureDead_1=b.asm._f).apply(null,arguments)},Si=b._emscripten_bind_SIGSurface_getCharacteristicMoistureLive_1= -function(){return(Si=b._emscripten_bind_SIGSurface_getCharacteristicMoistureLive_1=b.asm.$f).apply(null,arguments)},Ti=b._emscripten_bind_SIGSurface_getCharacteristicSAVR_1=function(){return(Ti=b._emscripten_bind_SIGSurface_getCharacteristicSAVR_1=b.asm.ag).apply(null,arguments)},Ui=b._emscripten_bind_SIGSurface_getCrownRatio_1=function(){return(Ui=b._emscripten_bind_SIGSurface_getCrownRatio_1=b.asm.bg).apply(null,arguments)},Vi=b._emscripten_bind_SIGSurface_getDirectionOfMaxSpread_0=function(){return(Vi= -b._emscripten_bind_SIGSurface_getDirectionOfMaxSpread_0=b.asm.cg).apply(null,arguments)},Wi=b._emscripten_bind_SIGSurface_getDirectionOfInterest_0=function(){return(Wi=b._emscripten_bind_SIGSurface_getDirectionOfInterest_0=b.asm.dg).apply(null,arguments)},Xi=b._emscripten_bind_SIGSurface_getDirectionOfBacking_0=function(){return(Xi=b._emscripten_bind_SIGSurface_getDirectionOfBacking_0=b.asm.eg).apply(null,arguments)},Yi=b._emscripten_bind_SIGSurface_getDirectionOfFlanking_0=function(){return(Yi=b._emscripten_bind_SIGSurface_getDirectionOfFlanking_0= -b.asm.fg).apply(null,arguments)},Zi=b._emscripten_bind_SIGSurface_getElapsedTime_1=function(){return(Zi=b._emscripten_bind_SIGSurface_getElapsedTime_1=b.asm.gg).apply(null,arguments)},$i=b._emscripten_bind_SIGSurface_getEllipticalA_1=function(){return($i=b._emscripten_bind_SIGSurface_getEllipticalA_1=b.asm.hg).apply(null,arguments)},aj=b._emscripten_bind_SIGSurface_getEllipticalB_1=function(){return(aj=b._emscripten_bind_SIGSurface_getEllipticalB_1=b.asm.ig).apply(null,arguments)},bj=b._emscripten_bind_SIGSurface_getEllipticalC_1= -function(){return(bj=b._emscripten_bind_SIGSurface_getEllipticalC_1=b.asm.jg).apply(null,arguments)},cj=b._emscripten_bind_SIGSurface_getFireLength_1=function(){return(cj=b._emscripten_bind_SIGSurface_getFireLength_1=b.asm.kg).apply(null,arguments)},dj=b._emscripten_bind_SIGSurface_getMaxFireWidth_1=function(){return(dj=b._emscripten_bind_SIGSurface_getMaxFireWidth_1=b.asm.lg).apply(null,arguments)},ej=b._emscripten_bind_SIGSurface_getFireArea_1=function(){return(ej=b._emscripten_bind_SIGSurface_getFireArea_1= -b.asm.mg).apply(null,arguments)},fj=b._emscripten_bind_SIGSurface_getFireEccentricity_0=function(){return(fj=b._emscripten_bind_SIGSurface_getFireEccentricity_0=b.asm.ng).apply(null,arguments)},gj=b._emscripten_bind_SIGSurface_getFireLengthToWidthRatio_0=function(){return(gj=b._emscripten_bind_SIGSurface_getFireLengthToWidthRatio_0=b.asm.og).apply(null,arguments)},hj=b._emscripten_bind_SIGSurface_getFirePerimeter_1=function(){return(hj=b._emscripten_bind_SIGSurface_getFirePerimeter_1=b.asm.pg).apply(null, -arguments)},ij=b._emscripten_bind_SIGSurface_getFirelineIntensity_1=function(){return(ij=b._emscripten_bind_SIGSurface_getFirelineIntensity_1=b.asm.qg).apply(null,arguments)},jj=b._emscripten_bind_SIGSurface_getFirelineIntensityInDirectionOfInterest_1=function(){return(jj=b._emscripten_bind_SIGSurface_getFirelineIntensityInDirectionOfInterest_1=b.asm.rg).apply(null,arguments)},kj=b._emscripten_bind_SIGSurface_getFlameLength_1=function(){return(kj=b._emscripten_bind_SIGSurface_getFlameLength_1=b.asm.sg).apply(null, -arguments)},lj=b._emscripten_bind_SIGSurface_getFlameLengthInDirectionOfInterest_1=function(){return(lj=b._emscripten_bind_SIGSurface_getFlameLengthInDirectionOfInterest_1=b.asm.tg).apply(null,arguments)},mj=b._emscripten_bind_SIGSurface_getFlankingFirelineIntensity_1=function(){return(mj=b._emscripten_bind_SIGSurface_getFlankingFirelineIntensity_1=b.asm.ug).apply(null,arguments)},nj=b._emscripten_bind_SIGSurface_getFlankingFlameLength_1=function(){return(nj=b._emscripten_bind_SIGSurface_getFlankingFlameLength_1= -b.asm.vg).apply(null,arguments)},oj=b._emscripten_bind_SIGSurface_getFlankingSpreadRate_1=function(){return(oj=b._emscripten_bind_SIGSurface_getFlankingSpreadRate_1=b.asm.wg).apply(null,arguments)},pj=b._emscripten_bind_SIGSurface_getFlankingSpreadDistance_1=function(){return(pj=b._emscripten_bind_SIGSurface_getFlankingSpreadDistance_1=b.asm.xg).apply(null,arguments)},qj=b._emscripten_bind_SIGSurface_getFuelHeatOfCombustionDead_2=function(){return(qj=b._emscripten_bind_SIGSurface_getFuelHeatOfCombustionDead_2= -b.asm.yg).apply(null,arguments)},rj=b._emscripten_bind_SIGSurface_getFuelHeatOfCombustionLive_2=function(){return(rj=b._emscripten_bind_SIGSurface_getFuelHeatOfCombustionLive_2=b.asm.zg).apply(null,arguments)},sj=b._emscripten_bind_SIGSurface_getFuelLoadHundredHour_2=function(){return(sj=b._emscripten_bind_SIGSurface_getFuelLoadHundredHour_2=b.asm.Ag).apply(null,arguments)},tj=b._emscripten_bind_SIGSurface_getFuelLoadLiveHerbaceous_2=function(){return(tj=b._emscripten_bind_SIGSurface_getFuelLoadLiveHerbaceous_2= -b.asm.Bg).apply(null,arguments)},uj=b._emscripten_bind_SIGSurface_getFuelLoadLiveWoody_2=function(){return(uj=b._emscripten_bind_SIGSurface_getFuelLoadLiveWoody_2=b.asm.Cg).apply(null,arguments)},vj=b._emscripten_bind_SIGSurface_getFuelLoadOneHour_2=function(){return(vj=b._emscripten_bind_SIGSurface_getFuelLoadOneHour_2=b.asm.Dg).apply(null,arguments)},wj=b._emscripten_bind_SIGSurface_getFuelLoadTenHour_2=function(){return(wj=b._emscripten_bind_SIGSurface_getFuelLoadTenHour_2=b.asm.Eg).apply(null, -arguments)},xj=b._emscripten_bind_SIGSurface_getFuelMoistureOfExtinctionDead_2=function(){return(xj=b._emscripten_bind_SIGSurface_getFuelMoistureOfExtinctionDead_2=b.asm.Fg).apply(null,arguments)},yj=b._emscripten_bind_SIGSurface_getFuelSavrLiveHerbaceous_2=function(){return(yj=b._emscripten_bind_SIGSurface_getFuelSavrLiveHerbaceous_2=b.asm.Gg).apply(null,arguments)},zj=b._emscripten_bind_SIGSurface_getFuelSavrLiveWoody_2=function(){return(zj=b._emscripten_bind_SIGSurface_getFuelSavrLiveWoody_2=b.asm.Hg).apply(null, -arguments)},Aj=b._emscripten_bind_SIGSurface_getFuelSavrOneHour_2=function(){return(Aj=b._emscripten_bind_SIGSurface_getFuelSavrOneHour_2=b.asm.Ig).apply(null,arguments)},Bj=b._emscripten_bind_SIGSurface_getFuelbedDepth_2=function(){return(Bj=b._emscripten_bind_SIGSurface_getFuelbedDepth_2=b.asm.Jg).apply(null,arguments)},Cj=b._emscripten_bind_SIGSurface_getHeadingSpreadRate_1=function(){return(Cj=b._emscripten_bind_SIGSurface_getHeadingSpreadRate_1=b.asm.Kg).apply(null,arguments)},Dj=b._emscripten_bind_SIGSurface_getHeadingToBackingRatio_0= -function(){return(Dj=b._emscripten_bind_SIGSurface_getHeadingToBackingRatio_0=b.asm.Lg).apply(null,arguments)},Ej=b._emscripten_bind_SIGSurface_getHeatPerUnitArea_1=function(){return(Ej=b._emscripten_bind_SIGSurface_getHeatPerUnitArea_1=b.asm.Mg).apply(null,arguments)},Fj=b._emscripten_bind_SIGSurface_getHeatSink_1=function(){return(Fj=b._emscripten_bind_SIGSurface_getHeatSink_1=b.asm.Ng).apply(null,arguments)},Gj=b._emscripten_bind_SIGSurface_getHeatSource_1=function(){return(Gj=b._emscripten_bind_SIGSurface_getHeatSource_1= -b.asm.Og).apply(null,arguments)},Hj=b._emscripten_bind_SIGSurface_getHeightOfUnderstory_1=function(){return(Hj=b._emscripten_bind_SIGSurface_getHeightOfUnderstory_1=b.asm.Pg).apply(null,arguments)},Ij=b._emscripten_bind_SIGSurface_getLiveFuelMoistureOfExtinction_1=function(){return(Ij=b._emscripten_bind_SIGSurface_getLiveFuelMoistureOfExtinction_1=b.asm.Qg).apply(null,arguments)},Jj=b._emscripten_bind_SIGSurface_getMidflameWindspeed_1=function(){return(Jj=b._emscripten_bind_SIGSurface_getMidflameWindspeed_1= -b.asm.Rg).apply(null,arguments)},Kj=b._emscripten_bind_SIGSurface_getMoistureDeadAggregateValue_1=function(){return(Kj=b._emscripten_bind_SIGSurface_getMoistureDeadAggregateValue_1=b.asm.Sg).apply(null,arguments)},Lj=b._emscripten_bind_SIGSurface_getMoistureHundredHour_1=function(){return(Lj=b._emscripten_bind_SIGSurface_getMoistureHundredHour_1=b.asm.Tg).apply(null,arguments)},Mj=b._emscripten_bind_SIGSurface_getMoistureLiveAggregateValue_1=function(){return(Mj=b._emscripten_bind_SIGSurface_getMoistureLiveAggregateValue_1= -b.asm.Ug).apply(null,arguments)},Nj=b._emscripten_bind_SIGSurface_getMoistureLiveHerbaceous_1=function(){return(Nj=b._emscripten_bind_SIGSurface_getMoistureLiveHerbaceous_1=b.asm.Vg).apply(null,arguments)},Oj=b._emscripten_bind_SIGSurface_getMoistureLiveWoody_1=function(){return(Oj=b._emscripten_bind_SIGSurface_getMoistureLiveWoody_1=b.asm.Wg).apply(null,arguments)},Pj=b._emscripten_bind_SIGSurface_getMoistureOneHour_1=function(){return(Pj=b._emscripten_bind_SIGSurface_getMoistureOneHour_1=b.asm.Xg).apply(null, -arguments)},Qj=b._emscripten_bind_SIGSurface_getMoistureScenarioHundredHourByIndex_2=function(){return(Qj=b._emscripten_bind_SIGSurface_getMoistureScenarioHundredHourByIndex_2=b.asm.Yg).apply(null,arguments)},Rj=b._emscripten_bind_SIGSurface_getMoistureScenarioHundredHourByName_2=function(){return(Rj=b._emscripten_bind_SIGSurface_getMoistureScenarioHundredHourByName_2=b.asm.Zg).apply(null,arguments)},Sj=b._emscripten_bind_SIGSurface_getMoistureScenarioLiveHerbaceousByIndex_2=function(){return(Sj= -b._emscripten_bind_SIGSurface_getMoistureScenarioLiveHerbaceousByIndex_2=b.asm._g).apply(null,arguments)},Tj=b._emscripten_bind_SIGSurface_getMoistureScenarioLiveHerbaceousByName_2=function(){return(Tj=b._emscripten_bind_SIGSurface_getMoistureScenarioLiveHerbaceousByName_2=b.asm.$g).apply(null,arguments)},Uj=b._emscripten_bind_SIGSurface_getMoistureScenarioLiveWoodyByIndex_2=function(){return(Uj=b._emscripten_bind_SIGSurface_getMoistureScenarioLiveWoodyByIndex_2=b.asm.ah).apply(null,arguments)},Vj= -b._emscripten_bind_SIGSurface_getMoistureScenarioLiveWoodyByName_2=function(){return(Vj=b._emscripten_bind_SIGSurface_getMoistureScenarioLiveWoodyByName_2=b.asm.bh).apply(null,arguments)},Wj=b._emscripten_bind_SIGSurface_getMoistureScenarioOneHourByIndex_2=function(){return(Wj=b._emscripten_bind_SIGSurface_getMoistureScenarioOneHourByIndex_2=b.asm.ch).apply(null,arguments)},Xj=b._emscripten_bind_SIGSurface_getMoistureScenarioOneHourByName_2=function(){return(Xj=b._emscripten_bind_SIGSurface_getMoistureScenarioOneHourByName_2= -b.asm.dh).apply(null,arguments)},Yj=b._emscripten_bind_SIGSurface_getMoistureScenarioTenHourByIndex_2=function(){return(Yj=b._emscripten_bind_SIGSurface_getMoistureScenarioTenHourByIndex_2=b.asm.eh).apply(null,arguments)},Zj=b._emscripten_bind_SIGSurface_getMoistureScenarioTenHourByName_2=function(){return(Zj=b._emscripten_bind_SIGSurface_getMoistureScenarioTenHourByName_2=b.asm.fh).apply(null,arguments)},ak=b._emscripten_bind_SIGSurface_getMoistureTenHour_1=function(){return(ak=b._emscripten_bind_SIGSurface_getMoistureTenHour_1= -b.asm.gh).apply(null,arguments)},bk=b._emscripten_bind_SIGSurface_getOverstoryBasalArea_1=function(){return(bk=b._emscripten_bind_SIGSurface_getOverstoryBasalArea_1=b.asm.hh).apply(null,arguments)},ck=b._emscripten_bind_SIGSurface_getPalmettoGallberryCoverage_1=function(){return(ck=b._emscripten_bind_SIGSurface_getPalmettoGallberryCoverage_1=b.asm.ih).apply(null,arguments)},dk=b._emscripten_bind_SIGSurface_getPalmettoGallberryHeatOfCombustionDead_1=function(){return(dk=b._emscripten_bind_SIGSurface_getPalmettoGallberryHeatOfCombustionDead_1= -b.asm.jh).apply(null,arguments)},ek=b._emscripten_bind_SIGSurface_getPalmettoGallberryHeatOfCombustionLive_1=function(){return(ek=b._emscripten_bind_SIGSurface_getPalmettoGallberryHeatOfCombustionLive_1=b.asm.kh).apply(null,arguments)},fk=b._emscripten_bind_SIGSurface_getPalmettoGallberryMoistureOfExtinctionDead_1=function(){return(fk=b._emscripten_bind_SIGSurface_getPalmettoGallberryMoistureOfExtinctionDead_1=b.asm.lh).apply(null,arguments)},gk=b._emscripten_bind_SIGSurface_getPalmettoGallberyDeadFineFuelLoad_1= -function(){return(gk=b._emscripten_bind_SIGSurface_getPalmettoGallberyDeadFineFuelLoad_1=b.asm.mh).apply(null,arguments)},hk=b._emscripten_bind_SIGSurface_getPalmettoGallberyDeadFoliageLoad_1=function(){return(hk=b._emscripten_bind_SIGSurface_getPalmettoGallberyDeadFoliageLoad_1=b.asm.nh).apply(null,arguments)},ik=b._emscripten_bind_SIGSurface_getPalmettoGallberyDeadMediumFuelLoad_1=function(){return(ik=b._emscripten_bind_SIGSurface_getPalmettoGallberyDeadMediumFuelLoad_1=b.asm.oh).apply(null,arguments)}, -jk=b._emscripten_bind_SIGSurface_getPalmettoGallberyFuelBedDepth_1=function(){return(jk=b._emscripten_bind_SIGSurface_getPalmettoGallberyFuelBedDepth_1=b.asm.ph).apply(null,arguments)},kk=b._emscripten_bind_SIGSurface_getPalmettoGallberyLitterLoad_1=function(){return(kk=b._emscripten_bind_SIGSurface_getPalmettoGallberyLitterLoad_1=b.asm.qh).apply(null,arguments)},lk=b._emscripten_bind_SIGSurface_getPalmettoGallberyLiveFineFuelLoad_1=function(){return(lk=b._emscripten_bind_SIGSurface_getPalmettoGallberyLiveFineFuelLoad_1= -b.asm.rh).apply(null,arguments)},mk=b._emscripten_bind_SIGSurface_getPalmettoGallberyLiveFoliageLoad_1=function(){return(mk=b._emscripten_bind_SIGSurface_getPalmettoGallberyLiveFoliageLoad_1=b.asm.sh).apply(null,arguments)},nk=b._emscripten_bind_SIGSurface_getPalmettoGallberyLiveMediumFuelLoad_1=function(){return(nk=b._emscripten_bind_SIGSurface_getPalmettoGallberyLiveMediumFuelLoad_1=b.asm.th).apply(null,arguments)},ok=b._emscripten_bind_SIGSurface_getReactionIntensity_1=function(){return(ok=b._emscripten_bind_SIGSurface_getReactionIntensity_1= -b.asm.uh).apply(null,arguments)},pk=b._emscripten_bind_SIGSurface_getResidenceTime_1=function(){return(pk=b._emscripten_bind_SIGSurface_getResidenceTime_1=b.asm.vh).apply(null,arguments)},qk=b._emscripten_bind_SIGSurface_getSlope_1=function(){return(qk=b._emscripten_bind_SIGSurface_getSlope_1=b.asm.wh).apply(null,arguments)},rk=b._emscripten_bind_SIGSurface_getSlopeFactor_0=function(){return(rk=b._emscripten_bind_SIGSurface_getSlopeFactor_0=b.asm.xh).apply(null,arguments)},sk=b._emscripten_bind_SIGSurface_getSpreadDistance_1= -function(){return(sk=b._emscripten_bind_SIGSurface_getSpreadDistance_1=b.asm.yh).apply(null,arguments)},tk=b._emscripten_bind_SIGSurface_getSpreadDistanceInDirectionOfInterest_1=function(){return(tk=b._emscripten_bind_SIGSurface_getSpreadDistanceInDirectionOfInterest_1=b.asm.zh).apply(null,arguments)},uk=b._emscripten_bind_SIGSurface_getSpreadRate_1=function(){return(uk=b._emscripten_bind_SIGSurface_getSpreadRate_1=b.asm.Ah).apply(null,arguments)},vk=b._emscripten_bind_SIGSurface_getSpreadRateInDirectionOfInterest_1= -function(){return(vk=b._emscripten_bind_SIGSurface_getSpreadRateInDirectionOfInterest_1=b.asm.Bh).apply(null,arguments)},wk=b._emscripten_bind_SIGSurface_getSurfaceFireReactionIntensityForLifeState_1=function(){return(wk=b._emscripten_bind_SIGSurface_getSurfaceFireReactionIntensityForLifeState_1=b.asm.Ch).apply(null,arguments)},xk=b._emscripten_bind_SIGSurface_getTotalLiveFuelLoad_1=function(){return(xk=b._emscripten_bind_SIGSurface_getTotalLiveFuelLoad_1=b.asm.Dh).apply(null,arguments)},yk=b._emscripten_bind_SIGSurface_getTotalDeadFuelLoad_1= -function(){return(yk=b._emscripten_bind_SIGSurface_getTotalDeadFuelLoad_1=b.asm.Eh).apply(null,arguments)},zk=b._emscripten_bind_SIGSurface_getTotalDeadHerbaceousFuelLoad_1=function(){return(zk=b._emscripten_bind_SIGSurface_getTotalDeadHerbaceousFuelLoad_1=b.asm.Fh).apply(null,arguments)},Ak=b._emscripten_bind_SIGSurface_getWindDirection_0=function(){return(Ak=b._emscripten_bind_SIGSurface_getWindDirection_0=b.asm.Gh).apply(null,arguments)},Bk=b._emscripten_bind_SIGSurface_getWindSpeed_2=function(){return(Bk= -b._emscripten_bind_SIGSurface_getWindSpeed_2=b.asm.Hh).apply(null,arguments)},Ck=b._emscripten_bind_SIGSurface_getAspenFuelModelNumber_0=function(){return(Ck=b._emscripten_bind_SIGSurface_getAspenFuelModelNumber_0=b.asm.Ih).apply(null,arguments)},Dk=b._emscripten_bind_SIGSurface_getFuelModelNumber_0=function(){return(Dk=b._emscripten_bind_SIGSurface_getFuelModelNumber_0=b.asm.Jh).apply(null,arguments)},Ek=b._emscripten_bind_SIGSurface_getMoistureScenarioIndexByName_1=function(){return(Ek=b._emscripten_bind_SIGSurface_getMoistureScenarioIndexByName_1= -b.asm.Kh).apply(null,arguments)},Fk=b._emscripten_bind_SIGSurface_getNumberOfMoistureScenarios_0=function(){return(Fk=b._emscripten_bind_SIGSurface_getNumberOfMoistureScenarios_0=b.asm.Lh).apply(null,arguments)},Gk=b._emscripten_bind_SIGSurface_getFuelCode_1=function(){return(Gk=b._emscripten_bind_SIGSurface_getFuelCode_1=b.asm.Mh).apply(null,arguments)},Hk=b._emscripten_bind_SIGSurface_getFuelName_1=function(){return(Hk=b._emscripten_bind_SIGSurface_getFuelName_1=b.asm.Nh).apply(null,arguments)}, -Ik=b._emscripten_bind_SIGSurface_getMoistureScenarioDescriptionByIndex_1=function(){return(Ik=b._emscripten_bind_SIGSurface_getMoistureScenarioDescriptionByIndex_1=b.asm.Oh).apply(null,arguments)},Jk=b._emscripten_bind_SIGSurface_getMoistureScenarioDescriptionByName_1=function(){return(Jk=b._emscripten_bind_SIGSurface_getMoistureScenarioDescriptionByName_1=b.asm.Ph).apply(null,arguments)},Kk=b._emscripten_bind_SIGSurface_getMoistureScenarioNameByIndex_1=function(){return(Kk=b._emscripten_bind_SIGSurface_getMoistureScenarioNameByIndex_1= -b.asm.Qh).apply(null,arguments)},Lk=b._emscripten_bind_SIGSurface_doSurfaceRun_0=function(){return(Lk=b._emscripten_bind_SIGSurface_doSurfaceRun_0=b.asm.Rh).apply(null,arguments)},Mk=b._emscripten_bind_SIGSurface_doSurfaceRunInDirectionOfInterest_2=function(){return(Mk=b._emscripten_bind_SIGSurface_doSurfaceRunInDirectionOfInterest_2=b.asm.Sh).apply(null,arguments)},Nk=b._emscripten_bind_SIGSurface_doSurfaceRunInDirectionOfMaxSpread_0=function(){return(Nk=b._emscripten_bind_SIGSurface_doSurfaceRunInDirectionOfMaxSpread_0= -b.asm.Th).apply(null,arguments)},Ok=b._emscripten_bind_SIGSurface_initializeMembers_0=function(){return(Ok=b._emscripten_bind_SIGSurface_initializeMembers_0=b.asm.Uh).apply(null,arguments)},Pk=b._emscripten_bind_SIGSurface_setAgeOfRough_1=function(){return(Pk=b._emscripten_bind_SIGSurface_setAgeOfRough_1=b.asm.Vh).apply(null,arguments)},Qk=b._emscripten_bind_SIGSurface_setAspect_1=function(){return(Qk=b._emscripten_bind_SIGSurface_setAspect_1=b.asm.Wh).apply(null,arguments)},Rk=b._emscripten_bind_SIGSurface_setAspenCuringLevel_2= -function(){return(Rk=b._emscripten_bind_SIGSurface_setAspenCuringLevel_2=b.asm.Xh).apply(null,arguments)},Sk=b._emscripten_bind_SIGSurface_setAspenDBH_2=function(){return(Sk=b._emscripten_bind_SIGSurface_setAspenDBH_2=b.asm.Yh).apply(null,arguments)},Tk=b._emscripten_bind_SIGSurface_setAspenFireSeverity_1=function(){return(Tk=b._emscripten_bind_SIGSurface_setAspenFireSeverity_1=b.asm.Zh).apply(null,arguments)},Uk=b._emscripten_bind_SIGSurface_setAspenFuelModelNumber_1=function(){return(Uk=b._emscripten_bind_SIGSurface_setAspenFuelModelNumber_1= -b.asm._h).apply(null,arguments)},Vk=b._emscripten_bind_SIGSurface_setCanopyCover_2=function(){return(Vk=b._emscripten_bind_SIGSurface_setCanopyCover_2=b.asm.$h).apply(null,arguments)},Wk=b._emscripten_bind_SIGSurface_setCanopyHeight_2=function(){return(Wk=b._emscripten_bind_SIGSurface_setCanopyHeight_2=b.asm.ai).apply(null,arguments)},Xk=b._emscripten_bind_SIGSurface_setChaparralFuelBedDepth_2=function(){return(Xk=b._emscripten_bind_SIGSurface_setChaparralFuelBedDepth_2=b.asm.bi).apply(null,arguments)}, -Yk=b._emscripten_bind_SIGSurface_setChaparralFuelDeadLoadFraction_1=function(){return(Yk=b._emscripten_bind_SIGSurface_setChaparralFuelDeadLoadFraction_1=b.asm.ci).apply(null,arguments)},Zk=b._emscripten_bind_SIGSurface_setChaparralFuelLoadInputMode_1=function(){return(Zk=b._emscripten_bind_SIGSurface_setChaparralFuelLoadInputMode_1=b.asm.di).apply(null,arguments)},$k=b._emscripten_bind_SIGSurface_setChaparralFuelType_1=function(){return($k=b._emscripten_bind_SIGSurface_setChaparralFuelType_1=b.asm.ei).apply(null, -arguments)},al=b._emscripten_bind_SIGSurface_setChaparralTotalFuelLoad_2=function(){return(al=b._emscripten_bind_SIGSurface_setChaparralTotalFuelLoad_2=b.asm.fi).apply(null,arguments)},bl=b._emscripten_bind_SIGSurface_setCrownRatio_2=function(){return(bl=b._emscripten_bind_SIGSurface_setCrownRatio_2=b.asm.gi).apply(null,arguments)},cl=b._emscripten_bind_SIGSurface_setDirectionOfInterest_1=function(){return(cl=b._emscripten_bind_SIGSurface_setDirectionOfInterest_1=b.asm.hi).apply(null,arguments)}, -dl=b._emscripten_bind_SIGSurface_setElapsedTime_2=function(){return(dl=b._emscripten_bind_SIGSurface_setElapsedTime_2=b.asm.ii).apply(null,arguments)},el=b._emscripten_bind_SIGSurface_setFirstFuelModelNumber_1=function(){return(el=b._emscripten_bind_SIGSurface_setFirstFuelModelNumber_1=b.asm.ji).apply(null,arguments)},fl=b._emscripten_bind_SIGSurface_setFuelModels_1=function(){return(fl=b._emscripten_bind_SIGSurface_setFuelModels_1=b.asm.ki).apply(null,arguments)},gl=b._emscripten_bind_SIGSurface_setHeightOfUnderstory_2= -function(){return(gl=b._emscripten_bind_SIGSurface_setHeightOfUnderstory_2=b.asm.li).apply(null,arguments)},hl=b._emscripten_bind_SIGSurface_setIsUsingChaparral_1=function(){return(hl=b._emscripten_bind_SIGSurface_setIsUsingChaparral_1=b.asm.mi).apply(null,arguments)},il=b._emscripten_bind_SIGSurface_setIsUsingPalmettoGallberry_1=function(){return(il=b._emscripten_bind_SIGSurface_setIsUsingPalmettoGallberry_1=b.asm.ni).apply(null,arguments)},jl=b._emscripten_bind_SIGSurface_setIsUsingWesternAspen_1= -function(){return(jl=b._emscripten_bind_SIGSurface_setIsUsingWesternAspen_1=b.asm.oi).apply(null,arguments)},kl=b._emscripten_bind_SIGSurface_setMoistureDeadAggregate_2=function(){return(kl=b._emscripten_bind_SIGSurface_setMoistureDeadAggregate_2=b.asm.pi).apply(null,arguments)},ll=b._emscripten_bind_SIGSurface_setMoistureHundredHour_2=function(){return(ll=b._emscripten_bind_SIGSurface_setMoistureHundredHour_2=b.asm.qi).apply(null,arguments)},ml=b._emscripten_bind_SIGSurface_setMoistureInputMode_1= -function(){return(ml=b._emscripten_bind_SIGSurface_setMoistureInputMode_1=b.asm.ri).apply(null,arguments)},nl=b._emscripten_bind_SIGSurface_setMoistureLiveAggregate_2=function(){return(nl=b._emscripten_bind_SIGSurface_setMoistureLiveAggregate_2=b.asm.si).apply(null,arguments)},ol=b._emscripten_bind_SIGSurface_setMoistureLiveHerbaceous_2=function(){return(ol=b._emscripten_bind_SIGSurface_setMoistureLiveHerbaceous_2=b.asm.ti).apply(null,arguments)},pl=b._emscripten_bind_SIGSurface_setMoistureLiveWoody_2= -function(){return(pl=b._emscripten_bind_SIGSurface_setMoistureLiveWoody_2=b.asm.ui).apply(null,arguments)},ql=b._emscripten_bind_SIGSurface_setMoistureOneHour_2=function(){return(ql=b._emscripten_bind_SIGSurface_setMoistureOneHour_2=b.asm.vi).apply(null,arguments)},rl=b._emscripten_bind_SIGSurface_setMoistureScenarios_1=function(){return(rl=b._emscripten_bind_SIGSurface_setMoistureScenarios_1=b.asm.wi).apply(null,arguments)},sl=b._emscripten_bind_SIGSurface_setMoistureTenHour_2=function(){return(sl= -b._emscripten_bind_SIGSurface_setMoistureTenHour_2=b.asm.xi).apply(null,arguments)},tl=b._emscripten_bind_SIGSurface_setOverstoryBasalArea_2=function(){return(tl=b._emscripten_bind_SIGSurface_setOverstoryBasalArea_2=b.asm.yi).apply(null,arguments)},ul=b._emscripten_bind_SIGSurface_setPalmettoCoverage_2=function(){return(ul=b._emscripten_bind_SIGSurface_setPalmettoCoverage_2=b.asm.zi).apply(null,arguments)},vl=b._emscripten_bind_SIGSurface_setSecondFuelModelNumber_1=function(){return(vl=b._emscripten_bind_SIGSurface_setSecondFuelModelNumber_1= -b.asm.Ai).apply(null,arguments)},wl=b._emscripten_bind_SIGSurface_setSlope_2=function(){return(wl=b._emscripten_bind_SIGSurface_setSlope_2=b.asm.Bi).apply(null,arguments)},xl=b._emscripten_bind_SIGSurface_setSurfaceFireSpreadDirectionMode_1=function(){return(xl=b._emscripten_bind_SIGSurface_setSurfaceFireSpreadDirectionMode_1=b.asm.Ci).apply(null,arguments)},yl=b._emscripten_bind_SIGSurface_setSurfaceRunInDirectionOf_1=function(){return(yl=b._emscripten_bind_SIGSurface_setSurfaceRunInDirectionOf_1= -b.asm.Di).apply(null,arguments)},zl=b._emscripten_bind_SIGSurface_setTwoFuelModelsFirstFuelModelCoverage_2=function(){return(zl=b._emscripten_bind_SIGSurface_setTwoFuelModelsFirstFuelModelCoverage_2=b.asm.Ei).apply(null,arguments)},Al=b._emscripten_bind_SIGSurface_setTwoFuelModelsMethod_1=function(){return(Al=b._emscripten_bind_SIGSurface_setTwoFuelModelsMethod_1=b.asm.Fi).apply(null,arguments)},Bl=b._emscripten_bind_SIGSurface_setUserProvidedWindAdjustmentFactor_1=function(){return(Bl=b._emscripten_bind_SIGSurface_setUserProvidedWindAdjustmentFactor_1= -b.asm.Gi).apply(null,arguments)},Cl=b._emscripten_bind_SIGSurface_setWindAdjustmentFactorCalculationMethod_1=function(){return(Cl=b._emscripten_bind_SIGSurface_setWindAdjustmentFactorCalculationMethod_1=b.asm.Hi).apply(null,arguments)},Dl=b._emscripten_bind_SIGSurface_setWindAndSpreadOrientationMode_1=function(){return(Dl=b._emscripten_bind_SIGSurface_setWindAndSpreadOrientationMode_1=b.asm.Ii).apply(null,arguments)},El=b._emscripten_bind_SIGSurface_setWindDirection_1=function(){return(El=b._emscripten_bind_SIGSurface_setWindDirection_1= -b.asm.Ji).apply(null,arguments)},Fl=b._emscripten_bind_SIGSurface_setWindHeightInputMode_1=function(){return(Fl=b._emscripten_bind_SIGSurface_setWindHeightInputMode_1=b.asm.Ki).apply(null,arguments)},Gl=b._emscripten_bind_SIGSurface_setWindSpeed_2=function(){return(Gl=b._emscripten_bind_SIGSurface_setWindSpeed_2=b.asm.Li).apply(null,arguments)},Hl=b._emscripten_bind_SIGSurface_updateSurfaceInputs_21=function(){return(Hl=b._emscripten_bind_SIGSurface_updateSurfaceInputs_21=b.asm.Mi).apply(null,arguments)}, -Il=b._emscripten_bind_SIGSurface_updateSurfaceInputsForPalmettoGallbery_25=function(){return(Il=b._emscripten_bind_SIGSurface_updateSurfaceInputsForPalmettoGallbery_25=b.asm.Ni).apply(null,arguments)},Jl=b._emscripten_bind_SIGSurface_updateSurfaceInputsForTwoFuelModels_25=function(){return(Jl=b._emscripten_bind_SIGSurface_updateSurfaceInputsForTwoFuelModels_25=b.asm.Oi).apply(null,arguments)},Kl=b._emscripten_bind_SIGSurface_updateSurfaceInputsForWesternAspen_26=function(){return(Kl=b._emscripten_bind_SIGSurface_updateSurfaceInputsForWesternAspen_26= -b.asm.Pi).apply(null,arguments)},Ll=b._emscripten_bind_SIGSurface_setFuelModelNumber_1=function(){return(Ll=b._emscripten_bind_SIGSurface_setFuelModelNumber_1=b.asm.Qi).apply(null,arguments)},Ml=b._emscripten_bind_SIGSurface___destroy___0=function(){return(Ml=b._emscripten_bind_SIGSurface___destroy___0=b.asm.Ri).apply(null,arguments)},Nl=b._emscripten_bind_PalmettoGallberry_PalmettoGallberry_0=function(){return(Nl=b._emscripten_bind_PalmettoGallberry_PalmettoGallberry_0=b.asm.Si).apply(null,arguments)}, -Ol=b._emscripten_bind_PalmettoGallberry_initializeMembers_0=function(){return(Ol=b._emscripten_bind_PalmettoGallberry_initializeMembers_0=b.asm.Ti).apply(null,arguments)},Pl=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyDeadFineFuelLoad_2=function(){return(Pl=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyDeadFineFuelLoad_2=b.asm.Ui).apply(null,arguments)},Ql=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyDeadFoliageLoad_2=function(){return(Ql=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyDeadFoliageLoad_2= -b.asm.Vi).apply(null,arguments)},Rl=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyDeadMediumFuelLoad_2=function(){return(Rl=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyDeadMediumFuelLoad_2=b.asm.Wi).apply(null,arguments)},Sl=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyFuelBedDepth_1=function(){return(Sl=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyFuelBedDepth_1=b.asm.Xi).apply(null,arguments)},Tl=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLitterLoad_2= -function(){return(Tl=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLitterLoad_2=b.asm.Yi).apply(null,arguments)},Ul=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLiveFineFuelLoad_2=function(){return(Ul=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLiveFineFuelLoad_2=b.asm.Zi).apply(null,arguments)},Vl=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLiveFoliageLoad_3=function(){return(Vl=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLiveFoliageLoad_3= -b.asm._i).apply(null,arguments)},Wl=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLiveMediumFuelLoad_2=function(){return(Wl=b._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLiveMediumFuelLoad_2=b.asm.$i).apply(null,arguments)},Xl=b._emscripten_bind_PalmettoGallberry_getHeatOfCombustionDead_0=function(){return(Xl=b._emscripten_bind_PalmettoGallberry_getHeatOfCombustionDead_0=b.asm.aj).apply(null,arguments)},Yl=b._emscripten_bind_PalmettoGallberry_getHeatOfCombustionLive_0= -function(){return(Yl=b._emscripten_bind_PalmettoGallberry_getHeatOfCombustionLive_0=b.asm.bj).apply(null,arguments)},Zl=b._emscripten_bind_PalmettoGallberry_getMoistureOfExtinctionDead_0=function(){return(Zl=b._emscripten_bind_PalmettoGallberry_getMoistureOfExtinctionDead_0=b.asm.cj).apply(null,arguments)},$l=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyDeadFineFuelLoad_0=function(){return($l=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyDeadFineFuelLoad_0=b.asm.dj).apply(null, -arguments)},am=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyDeadFoliageLoad_0=function(){return(am=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyDeadFoliageLoad_0=b.asm.ej).apply(null,arguments)},bm=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyDeadMediumFuelLoad_0=function(){return(bm=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyDeadMediumFuelLoad_0=b.asm.fj).apply(null,arguments)},cm=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyFuelBedDepth_0= -function(){return(cm=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyFuelBedDepth_0=b.asm.gj).apply(null,arguments)},dm=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyLitterLoad_0=function(){return(dm=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyLitterLoad_0=b.asm.hj).apply(null,arguments)},em=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyLiveFineFuelLoad_0=function(){return(em=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyLiveFineFuelLoad_0=b.asm.ij).apply(null, -arguments)},fm=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyLiveFoliageLoad_0=function(){return(fm=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyLiveFoliageLoad_0=b.asm.jj).apply(null,arguments)},gm=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyLiveMediumFuelLoad_0=function(){return(gm=b._emscripten_bind_PalmettoGallberry_getPalmettoGallberyLiveMediumFuelLoad_0=b.asm.kj).apply(null,arguments)},hm=b._emscripten_bind_PalmettoGallberry___destroy___0=function(){return(hm= -b._emscripten_bind_PalmettoGallberry___destroy___0=b.asm.lj).apply(null,arguments)},im=b._emscripten_bind_WesternAspen_WesternAspen_0=function(){return(im=b._emscripten_bind_WesternAspen_WesternAspen_0=b.asm.mj).apply(null,arguments)},jm=b._emscripten_bind_WesternAspen_initializeMembers_0=function(){return(jm=b._emscripten_bind_WesternAspen_initializeMembers_0=b.asm.nj).apply(null,arguments)},km=b._emscripten_bind_WesternAspen_calculateAspenMortality_3=function(){return(km=b._emscripten_bind_WesternAspen_calculateAspenMortality_3= -b.asm.oj).apply(null,arguments)},lm=b._emscripten_bind_WesternAspen_getAspenFuelBedDepth_1=function(){return(lm=b._emscripten_bind_WesternAspen_getAspenFuelBedDepth_1=b.asm.pj).apply(null,arguments)},mm=b._emscripten_bind_WesternAspen_getAspenHeatOfCombustionDead_0=function(){return(mm=b._emscripten_bind_WesternAspen_getAspenHeatOfCombustionDead_0=b.asm.qj).apply(null,arguments)},nm=b._emscripten_bind_WesternAspen_getAspenHeatOfCombustionLive_0=function(){return(nm=b._emscripten_bind_WesternAspen_getAspenHeatOfCombustionLive_0= -b.asm.rj).apply(null,arguments)},om=b._emscripten_bind_WesternAspen_getAspenLoadDeadOneHour_0=function(){return(om=b._emscripten_bind_WesternAspen_getAspenLoadDeadOneHour_0=b.asm.sj).apply(null,arguments)},pm=b._emscripten_bind_WesternAspen_getAspenLoadDeadTenHour_0=function(){return(pm=b._emscripten_bind_WesternAspen_getAspenLoadDeadTenHour_0=b.asm.tj).apply(null,arguments)},qm=b._emscripten_bind_WesternAspen_getAspenLoadLiveHerbaceous_0=function(){return(qm=b._emscripten_bind_WesternAspen_getAspenLoadLiveHerbaceous_0= -b.asm.uj).apply(null,arguments)},rm=b._emscripten_bind_WesternAspen_getAspenLoadLiveWoody_0=function(){return(rm=b._emscripten_bind_WesternAspen_getAspenLoadLiveWoody_0=b.asm.vj).apply(null,arguments)},sm=b._emscripten_bind_WesternAspen_getAspenMoistureOfExtinctionDead_0=function(){return(sm=b._emscripten_bind_WesternAspen_getAspenMoistureOfExtinctionDead_0=b.asm.wj).apply(null,arguments)},tm=b._emscripten_bind_WesternAspen_getAspenMortality_0=function(){return(tm=b._emscripten_bind_WesternAspen_getAspenMortality_0= -b.asm.xj).apply(null,arguments)},um=b._emscripten_bind_WesternAspen_getAspenSavrDeadOneHour_0=function(){return(um=b._emscripten_bind_WesternAspen_getAspenSavrDeadOneHour_0=b.asm.yj).apply(null,arguments)},vm=b._emscripten_bind_WesternAspen_getAspenSavrDeadTenHour_0=function(){return(vm=b._emscripten_bind_WesternAspen_getAspenSavrDeadTenHour_0=b.asm.zj).apply(null,arguments)},wm=b._emscripten_bind_WesternAspen_getAspenSavrLiveHerbaceous_0=function(){return(wm=b._emscripten_bind_WesternAspen_getAspenSavrLiveHerbaceous_0= -b.asm.Aj).apply(null,arguments)},xm=b._emscripten_bind_WesternAspen_getAspenSavrLiveWoody_0=function(){return(xm=b._emscripten_bind_WesternAspen_getAspenSavrLiveWoody_0=b.asm.Bj).apply(null,arguments)},ym=b._emscripten_bind_WesternAspen___destroy___0=function(){return(ym=b._emscripten_bind_WesternAspen___destroy___0=b.asm.Cj).apply(null,arguments)},zm=b._emscripten_bind_SIGCrown_SIGCrown_1=function(){return(zm=b._emscripten_bind_SIGCrown_SIGCrown_1=b.asm.Dj).apply(null,arguments)},Am=b._emscripten_bind_SIGCrown_getFireType_0= -function(){return(Am=b._emscripten_bind_SIGCrown_getFireType_0=b.asm.Ej).apply(null,arguments)},Bm=b._emscripten_bind_SIGCrown_getIsMoistureScenarioDefinedByIndex_1=function(){return(Bm=b._emscripten_bind_SIGCrown_getIsMoistureScenarioDefinedByIndex_1=b.asm.Fj).apply(null,arguments)},Cm=b._emscripten_bind_SIGCrown_getIsMoistureScenarioDefinedByName_1=function(){return(Cm=b._emscripten_bind_SIGCrown_getIsMoistureScenarioDefinedByName_1=b.asm.Gj).apply(null,arguments)},Dm=b._emscripten_bind_SIGCrown_isAllFuelLoadZero_1= -function(){return(Dm=b._emscripten_bind_SIGCrown_isAllFuelLoadZero_1=b.asm.Hj).apply(null,arguments)},Em=b._emscripten_bind_SIGCrown_isFuelDynamic_1=function(){return(Em=b._emscripten_bind_SIGCrown_isFuelDynamic_1=b.asm.Ij).apply(null,arguments)},Fm=b._emscripten_bind_SIGCrown_isFuelModelDefined_1=function(){return(Fm=b._emscripten_bind_SIGCrown_isFuelModelDefined_1=b.asm.Jj).apply(null,arguments)},Gm=b._emscripten_bind_SIGCrown_isFuelModelReserved_1=function(){return(Gm=b._emscripten_bind_SIGCrown_isFuelModelReserved_1= -b.asm.Kj).apply(null,arguments)},Hm=b._emscripten_bind_SIGCrown_setCurrentMoistureScenarioByIndex_1=function(){return(Hm=b._emscripten_bind_SIGCrown_setCurrentMoistureScenarioByIndex_1=b.asm.Lj).apply(null,arguments)},Im=b._emscripten_bind_SIGCrown_setCurrentMoistureScenarioByName_1=function(){return(Im=b._emscripten_bind_SIGCrown_setCurrentMoistureScenarioByName_1=b.asm.Mj).apply(null,arguments)},Jm=b._emscripten_bind_SIGCrown_getAspect_0=function(){return(Jm=b._emscripten_bind_SIGCrown_getAspect_0= -b.asm.Nj).apply(null,arguments)},Km=b._emscripten_bind_SIGCrown_getCanopyBaseHeight_1=function(){return(Km=b._emscripten_bind_SIGCrown_getCanopyBaseHeight_1=b.asm.Oj).apply(null,arguments)},Lm=b._emscripten_bind_SIGCrown_getCanopyBulkDensity_1=function(){return(Lm=b._emscripten_bind_SIGCrown_getCanopyBulkDensity_1=b.asm.Pj).apply(null,arguments)},Mm=b._emscripten_bind_SIGCrown_getCanopyCover_1=function(){return(Mm=b._emscripten_bind_SIGCrown_getCanopyCover_1=b.asm.Qj).apply(null,arguments)},Nm=b._emscripten_bind_SIGCrown_getCanopyHeight_1= -function(){return(Nm=b._emscripten_bind_SIGCrown_getCanopyHeight_1=b.asm.Rj).apply(null,arguments)},Om=b._emscripten_bind_SIGCrown_getCriticalOpenWindSpeed_1=function(){return(Om=b._emscripten_bind_SIGCrown_getCriticalOpenWindSpeed_1=b.asm.Sj).apply(null,arguments)},Pm=b._emscripten_bind_SIGCrown_getCrownCriticalFireSpreadRate_1=function(){return(Pm=b._emscripten_bind_SIGCrown_getCrownCriticalFireSpreadRate_1=b.asm.Tj).apply(null,arguments)},Qm=b._emscripten_bind_SIGCrown_getCrownCriticalSurfaceFirelineIntensity_1= -function(){return(Qm=b._emscripten_bind_SIGCrown_getCrownCriticalSurfaceFirelineIntensity_1=b.asm.Uj).apply(null,arguments)},Rm=b._emscripten_bind_SIGCrown_getCrownCriticalSurfaceFlameLength_1=function(){return(Rm=b._emscripten_bind_SIGCrown_getCrownCriticalSurfaceFlameLength_1=b.asm.Vj).apply(null,arguments)},Sm=b._emscripten_bind_SIGCrown_getCrownFireActiveRatio_0=function(){return(Sm=b._emscripten_bind_SIGCrown_getCrownFireActiveRatio_0=b.asm.Wj).apply(null,arguments)},Tm=b._emscripten_bind_SIGCrown_getCrownFireArea_1= -function(){return(Tm=b._emscripten_bind_SIGCrown_getCrownFireArea_1=b.asm.Xj).apply(null,arguments)},Um=b._emscripten_bind_SIGCrown_getCrownFirePerimeter_1=function(){return(Um=b._emscripten_bind_SIGCrown_getCrownFirePerimeter_1=b.asm.Yj).apply(null,arguments)},Vm=b._emscripten_bind_SIGCrown_getCrownTransitionRatio_0=function(){return(Vm=b._emscripten_bind_SIGCrown_getCrownTransitionRatio_0=b.asm.Zj).apply(null,arguments)},Wm=b._emscripten_bind_SIGCrown_getCrownFireLengthToWidthRatio_0=function(){return(Wm= -b._emscripten_bind_SIGCrown_getCrownFireLengthToWidthRatio_0=b.asm._j).apply(null,arguments)},Xm=b._emscripten_bind_SIGCrown_getCrownFireSpreadDistance_1=function(){return(Xm=b._emscripten_bind_SIGCrown_getCrownFireSpreadDistance_1=b.asm.$j).apply(null,arguments)},Ym=b._emscripten_bind_SIGCrown_getCrownFireSpreadRate_1=function(){return(Ym=b._emscripten_bind_SIGCrown_getCrownFireSpreadRate_1=b.asm.ak).apply(null,arguments)},Zm=b._emscripten_bind_SIGCrown_getCrownFirelineIntensity_1=function(){return(Zm= -b._emscripten_bind_SIGCrown_getCrownFirelineIntensity_1=b.asm.bk).apply(null,arguments)},$m=b._emscripten_bind_SIGCrown_getCrownFlameLength_1=function(){return($m=b._emscripten_bind_SIGCrown_getCrownFlameLength_1=b.asm.ck).apply(null,arguments)},an=b._emscripten_bind_SIGCrown_getCrownFractionBurned_0=function(){return(an=b._emscripten_bind_SIGCrown_getCrownFractionBurned_0=b.asm.dk).apply(null,arguments)},bn=b._emscripten_bind_SIGCrown_getCrownRatio_1=function(){return(bn=b._emscripten_bind_SIGCrown_getCrownRatio_1= -b.asm.ek).apply(null,arguments)},cn=b._emscripten_bind_SIGCrown_getFinalFirelineIntesity_1=function(){return(cn=b._emscripten_bind_SIGCrown_getFinalFirelineIntesity_1=b.asm.fk).apply(null,arguments)},dn=b._emscripten_bind_SIGCrown_getFinalHeatPerUnitArea_1=function(){return(dn=b._emscripten_bind_SIGCrown_getFinalHeatPerUnitArea_1=b.asm.gk).apply(null,arguments)},en=b._emscripten_bind_SIGCrown_getFinalSpreadRate_1=function(){return(en=b._emscripten_bind_SIGCrown_getFinalSpreadRate_1=b.asm.hk).apply(null, -arguments)},fn=b._emscripten_bind_SIGCrown_getFinalSpreadDistance_1=function(){return(fn=b._emscripten_bind_SIGCrown_getFinalSpreadDistance_1=b.asm.ik).apply(null,arguments)},gn=b._emscripten_bind_SIGCrown_getFinalFireArea_1=function(){return(gn=b._emscripten_bind_SIGCrown_getFinalFireArea_1=b.asm.jk).apply(null,arguments)},hn=b._emscripten_bind_SIGCrown_getFinalFirePerimeter_1=function(){return(hn=b._emscripten_bind_SIGCrown_getFinalFirePerimeter_1=b.asm.kk).apply(null,arguments)},jn=b._emscripten_bind_SIGCrown_getFuelHeatOfCombustionDead_2= -function(){return(jn=b._emscripten_bind_SIGCrown_getFuelHeatOfCombustionDead_2=b.asm.lk).apply(null,arguments)},kn=b._emscripten_bind_SIGCrown_getFuelHeatOfCombustionLive_2=function(){return(kn=b._emscripten_bind_SIGCrown_getFuelHeatOfCombustionLive_2=b.asm.mk).apply(null,arguments)},ln=b._emscripten_bind_SIGCrown_getFuelLoadHundredHour_2=function(){return(ln=b._emscripten_bind_SIGCrown_getFuelLoadHundredHour_2=b.asm.nk).apply(null,arguments)},mn=b._emscripten_bind_SIGCrown_getFuelLoadLiveHerbaceous_2= -function(){return(mn=b._emscripten_bind_SIGCrown_getFuelLoadLiveHerbaceous_2=b.asm.ok).apply(null,arguments)},nn=b._emscripten_bind_SIGCrown_getFuelLoadLiveWoody_2=function(){return(nn=b._emscripten_bind_SIGCrown_getFuelLoadLiveWoody_2=b.asm.pk).apply(null,arguments)},on=b._emscripten_bind_SIGCrown_getFuelLoadOneHour_2=function(){return(on=b._emscripten_bind_SIGCrown_getFuelLoadOneHour_2=b.asm.qk).apply(null,arguments)},pn=b._emscripten_bind_SIGCrown_getFuelLoadTenHour_2=function(){return(pn=b._emscripten_bind_SIGCrown_getFuelLoadTenHour_2= -b.asm.rk).apply(null,arguments)},qn=b._emscripten_bind_SIGCrown_getFuelMoistureOfExtinctionDead_2=function(){return(qn=b._emscripten_bind_SIGCrown_getFuelMoistureOfExtinctionDead_2=b.asm.sk).apply(null,arguments)},rn=b._emscripten_bind_SIGCrown_getFuelSavrLiveHerbaceous_2=function(){return(rn=b._emscripten_bind_SIGCrown_getFuelSavrLiveHerbaceous_2=b.asm.tk).apply(null,arguments)},sn=b._emscripten_bind_SIGCrown_getFuelSavrLiveWoody_2=function(){return(sn=b._emscripten_bind_SIGCrown_getFuelSavrLiveWoody_2= -b.asm.uk).apply(null,arguments)},tn=b._emscripten_bind_SIGCrown_getFuelSavrOneHour_2=function(){return(tn=b._emscripten_bind_SIGCrown_getFuelSavrOneHour_2=b.asm.vk).apply(null,arguments)},un=b._emscripten_bind_SIGCrown_getFuelbedDepth_2=function(){return(un=b._emscripten_bind_SIGCrown_getFuelbedDepth_2=b.asm.wk).apply(null,arguments)},vn=b._emscripten_bind_SIGCrown_getMoistureFoliar_1=function(){return(vn=b._emscripten_bind_SIGCrown_getMoistureFoliar_1=b.asm.xk).apply(null,arguments)},wn=b._emscripten_bind_SIGCrown_getMoistureHundredHour_1= -function(){return(wn=b._emscripten_bind_SIGCrown_getMoistureHundredHour_1=b.asm.yk).apply(null,arguments)},xn=b._emscripten_bind_SIGCrown_getMoistureLiveHerbaceous_1=function(){return(xn=b._emscripten_bind_SIGCrown_getMoistureLiveHerbaceous_1=b.asm.zk).apply(null,arguments)},yn=b._emscripten_bind_SIGCrown_getMoistureLiveWoody_1=function(){return(yn=b._emscripten_bind_SIGCrown_getMoistureLiveWoody_1=b.asm.Ak).apply(null,arguments)},zn=b._emscripten_bind_SIGCrown_getMoistureOneHour_1=function(){return(zn= -b._emscripten_bind_SIGCrown_getMoistureOneHour_1=b.asm.Bk).apply(null,arguments)},An=b._emscripten_bind_SIGCrown_getMoistureScenarioHundredHourByIndex_2=function(){return(An=b._emscripten_bind_SIGCrown_getMoistureScenarioHundredHourByIndex_2=b.asm.Ck).apply(null,arguments)},Bn=b._emscripten_bind_SIGCrown_getMoistureScenarioHundredHourByName_2=function(){return(Bn=b._emscripten_bind_SIGCrown_getMoistureScenarioHundredHourByName_2=b.asm.Dk).apply(null,arguments)},Cn=b._emscripten_bind_SIGCrown_getMoistureScenarioLiveHerbaceousByIndex_2= -function(){return(Cn=b._emscripten_bind_SIGCrown_getMoistureScenarioLiveHerbaceousByIndex_2=b.asm.Ek).apply(null,arguments)},Dn=b._emscripten_bind_SIGCrown_getMoistureScenarioLiveHerbaceousByName_2=function(){return(Dn=b._emscripten_bind_SIGCrown_getMoistureScenarioLiveHerbaceousByName_2=b.asm.Fk).apply(null,arguments)},En=b._emscripten_bind_SIGCrown_getMoistureScenarioLiveWoodyByIndex_2=function(){return(En=b._emscripten_bind_SIGCrown_getMoistureScenarioLiveWoodyByIndex_2=b.asm.Gk).apply(null,arguments)}, -Fn=b._emscripten_bind_SIGCrown_getMoistureScenarioLiveWoodyByName_2=function(){return(Fn=b._emscripten_bind_SIGCrown_getMoistureScenarioLiveWoodyByName_2=b.asm.Hk).apply(null,arguments)},Gn=b._emscripten_bind_SIGCrown_getMoistureScenarioOneHourByIndex_2=function(){return(Gn=b._emscripten_bind_SIGCrown_getMoistureScenarioOneHourByIndex_2=b.asm.Ik).apply(null,arguments)},Hn=b._emscripten_bind_SIGCrown_getMoistureScenarioOneHourByName_2=function(){return(Hn=b._emscripten_bind_SIGCrown_getMoistureScenarioOneHourByName_2= -b.asm.Jk).apply(null,arguments)},In=b._emscripten_bind_SIGCrown_getMoistureScenarioTenHourByIndex_2=function(){return(In=b._emscripten_bind_SIGCrown_getMoistureScenarioTenHourByIndex_2=b.asm.Kk).apply(null,arguments)},Jn=b._emscripten_bind_SIGCrown_getMoistureScenarioTenHourByName_2=function(){return(Jn=b._emscripten_bind_SIGCrown_getMoistureScenarioTenHourByName_2=b.asm.Lk).apply(null,arguments)},Kn=b._emscripten_bind_SIGCrown_getMoistureTenHour_1=function(){return(Kn=b._emscripten_bind_SIGCrown_getMoistureTenHour_1= -b.asm.Mk).apply(null,arguments)},Ln=b._emscripten_bind_SIGCrown_getSlope_1=function(){return(Ln=b._emscripten_bind_SIGCrown_getSlope_1=b.asm.Nk).apply(null,arguments)},Mn=b._emscripten_bind_SIGCrown_getSurfaceFireSpreadDistance_1=function(){return(Mn=b._emscripten_bind_SIGCrown_getSurfaceFireSpreadDistance_1=b.asm.Ok).apply(null,arguments)},Nn=b._emscripten_bind_SIGCrown_getSurfaceFireSpreadRate_1=function(){return(Nn=b._emscripten_bind_SIGCrown_getSurfaceFireSpreadRate_1=b.asm.Pk).apply(null,arguments)}, -On=b._emscripten_bind_SIGCrown_getWindDirection_0=function(){return(On=b._emscripten_bind_SIGCrown_getWindDirection_0=b.asm.Qk).apply(null,arguments)},Pn=b._emscripten_bind_SIGCrown_getWindSpeed_2=function(){return(Pn=b._emscripten_bind_SIGCrown_getWindSpeed_2=b.asm.Rk).apply(null,arguments)},Qn=b._emscripten_bind_SIGCrown_getFuelModelNumber_0=function(){return(Qn=b._emscripten_bind_SIGCrown_getFuelModelNumber_0=b.asm.Sk).apply(null,arguments)},Rn=b._emscripten_bind_SIGCrown_getMoistureScenarioIndexByName_1= -function(){return(Rn=b._emscripten_bind_SIGCrown_getMoistureScenarioIndexByName_1=b.asm.Tk).apply(null,arguments)},Sn=b._emscripten_bind_SIGCrown_getNumberOfMoistureScenarios_0=function(){return(Sn=b._emscripten_bind_SIGCrown_getNumberOfMoistureScenarios_0=b.asm.Uk).apply(null,arguments)},Tn=b._emscripten_bind_SIGCrown_getFuelCode_1=function(){return(Tn=b._emscripten_bind_SIGCrown_getFuelCode_1=b.asm.Vk).apply(null,arguments)},Un=b._emscripten_bind_SIGCrown_getFuelName_1=function(){return(Un=b._emscripten_bind_SIGCrown_getFuelName_1= -b.asm.Wk).apply(null,arguments)},Vn=b._emscripten_bind_SIGCrown_getMoistureScenarioDescriptionByIndex_1=function(){return(Vn=b._emscripten_bind_SIGCrown_getMoistureScenarioDescriptionByIndex_1=b.asm.Xk).apply(null,arguments)},Wn=b._emscripten_bind_SIGCrown_getMoistureScenarioDescriptionByName_1=function(){return(Wn=b._emscripten_bind_SIGCrown_getMoistureScenarioDescriptionByName_1=b.asm.Yk).apply(null,arguments)},Xn=b._emscripten_bind_SIGCrown_getMoistureScenarioNameByIndex_1=function(){return(Xn= -b._emscripten_bind_SIGCrown_getMoistureScenarioNameByIndex_1=b.asm.Zk).apply(null,arguments)},Yn=b._emscripten_bind_SIGCrown_doCrownRun_0=function(){return(Yn=b._emscripten_bind_SIGCrown_doCrownRun_0=b.asm._k).apply(null,arguments)},Zn=b._emscripten_bind_SIGCrown_doCrownRunRothermel_0=function(){return(Zn=b._emscripten_bind_SIGCrown_doCrownRunRothermel_0=b.asm.$k).apply(null,arguments)},$n=b._emscripten_bind_SIGCrown_doCrownRunScottAndReinhardt_0=function(){return($n=b._emscripten_bind_SIGCrown_doCrownRunScottAndReinhardt_0= -b.asm.al).apply(null,arguments)},ao=b._emscripten_bind_SIGCrown_initializeMembers_0=function(){return(ao=b._emscripten_bind_SIGCrown_initializeMembers_0=b.asm.bl).apply(null,arguments)},bo=b._emscripten_bind_SIGCrown_setAspect_1=function(){return(bo=b._emscripten_bind_SIGCrown_setAspect_1=b.asm.cl).apply(null,arguments)},co=b._emscripten_bind_SIGCrown_setCanopyBaseHeight_2=function(){return(co=b._emscripten_bind_SIGCrown_setCanopyBaseHeight_2=b.asm.dl).apply(null,arguments)},eo=b._emscripten_bind_SIGCrown_setCanopyBulkDensity_2= -function(){return(eo=b._emscripten_bind_SIGCrown_setCanopyBulkDensity_2=b.asm.el).apply(null,arguments)},fo=b._emscripten_bind_SIGCrown_setCanopyCover_2=function(){return(fo=b._emscripten_bind_SIGCrown_setCanopyCover_2=b.asm.fl).apply(null,arguments)},go=b._emscripten_bind_SIGCrown_setCanopyHeight_2=function(){return(go=b._emscripten_bind_SIGCrown_setCanopyHeight_2=b.asm.gl).apply(null,arguments)},ho=b._emscripten_bind_SIGCrown_setCrownRatio_2=function(){return(ho=b._emscripten_bind_SIGCrown_setCrownRatio_2= -b.asm.hl).apply(null,arguments)},io=b._emscripten_bind_SIGCrown_setFuelModelNumber_1=function(){return(io=b._emscripten_bind_SIGCrown_setFuelModelNumber_1=b.asm.il).apply(null,arguments)},jo=b._emscripten_bind_SIGCrown_setCrownFireCalculationMethod_1=function(){return(jo=b._emscripten_bind_SIGCrown_setCrownFireCalculationMethod_1=b.asm.jl).apply(null,arguments)},ko=b._emscripten_bind_SIGCrown_setElapsedTime_2=function(){return(ko=b._emscripten_bind_SIGCrown_setElapsedTime_2=b.asm.kl).apply(null,arguments)}, -lo=b._emscripten_bind_SIGCrown_setFuelModels_1=function(){return(lo=b._emscripten_bind_SIGCrown_setFuelModels_1=b.asm.ll).apply(null,arguments)},mo=b._emscripten_bind_SIGCrown_setMoistureDeadAggregate_2=function(){return(mo=b._emscripten_bind_SIGCrown_setMoistureDeadAggregate_2=b.asm.ml).apply(null,arguments)},no=b._emscripten_bind_SIGCrown_setMoistureFoliar_2=function(){return(no=b._emscripten_bind_SIGCrown_setMoistureFoliar_2=b.asm.nl).apply(null,arguments)},oo=b._emscripten_bind_SIGCrown_setMoistureHundredHour_2= -function(){return(oo=b._emscripten_bind_SIGCrown_setMoistureHundredHour_2=b.asm.ol).apply(null,arguments)},po=b._emscripten_bind_SIGCrown_setMoistureInputMode_1=function(){return(po=b._emscripten_bind_SIGCrown_setMoistureInputMode_1=b.asm.pl).apply(null,arguments)},qo=b._emscripten_bind_SIGCrown_setMoistureLiveAggregate_2=function(){return(qo=b._emscripten_bind_SIGCrown_setMoistureLiveAggregate_2=b.asm.ql).apply(null,arguments)},ro=b._emscripten_bind_SIGCrown_setMoistureLiveHerbaceous_2=function(){return(ro= -b._emscripten_bind_SIGCrown_setMoistureLiveHerbaceous_2=b.asm.rl).apply(null,arguments)},so=b._emscripten_bind_SIGCrown_setMoistureLiveWoody_2=function(){return(so=b._emscripten_bind_SIGCrown_setMoistureLiveWoody_2=b.asm.sl).apply(null,arguments)},to=b._emscripten_bind_SIGCrown_setMoistureOneHour_2=function(){return(to=b._emscripten_bind_SIGCrown_setMoistureOneHour_2=b.asm.tl).apply(null,arguments)},uo=b._emscripten_bind_SIGCrown_setMoistureScenarios_1=function(){return(uo=b._emscripten_bind_SIGCrown_setMoistureScenarios_1= -b.asm.ul).apply(null,arguments)},vo=b._emscripten_bind_SIGCrown_setMoistureTenHour_2=function(){return(vo=b._emscripten_bind_SIGCrown_setMoistureTenHour_2=b.asm.vl).apply(null,arguments)},wo=b._emscripten_bind_SIGCrown_setSlope_2=function(){return(wo=b._emscripten_bind_SIGCrown_setSlope_2=b.asm.wl).apply(null,arguments)},xo=b._emscripten_bind_SIGCrown_setUserProvidedWindAdjustmentFactor_1=function(){return(xo=b._emscripten_bind_SIGCrown_setUserProvidedWindAdjustmentFactor_1=b.asm.xl).apply(null,arguments)}, -yo=b._emscripten_bind_SIGCrown_setWindAdjustmentFactorCalculationMethod_1=function(){return(yo=b._emscripten_bind_SIGCrown_setWindAdjustmentFactorCalculationMethod_1=b.asm.yl).apply(null,arguments)},zo=b._emscripten_bind_SIGCrown_setWindAndSpreadOrientationMode_1=function(){return(zo=b._emscripten_bind_SIGCrown_setWindAndSpreadOrientationMode_1=b.asm.zl).apply(null,arguments)},Ao=b._emscripten_bind_SIGCrown_setWindDirection_1=function(){return(Ao=b._emscripten_bind_SIGCrown_setWindDirection_1=b.asm.Al).apply(null, -arguments)},Bo=b._emscripten_bind_SIGCrown_setWindHeightInputMode_1=function(){return(Bo=b._emscripten_bind_SIGCrown_setWindHeightInputMode_1=b.asm.Bl).apply(null,arguments)},Co=b._emscripten_bind_SIGCrown_setWindSpeed_2=function(){return(Co=b._emscripten_bind_SIGCrown_setWindSpeed_2=b.asm.Cl).apply(null,arguments)},Do=b._emscripten_bind_SIGCrown_updateCrownInputs_25=function(){return(Do=b._emscripten_bind_SIGCrown_updateCrownInputs_25=b.asm.Dl).apply(null,arguments)},Eo=b._emscripten_bind_SIGCrown_updateCrownsSurfaceInputs_21= -function(){return(Eo=b._emscripten_bind_SIGCrown_updateCrownsSurfaceInputs_21=b.asm.El).apply(null,arguments)},Fo=b._emscripten_bind_SIGCrown_getFinalFlameLength_1=function(){return(Fo=b._emscripten_bind_SIGCrown_getFinalFlameLength_1=b.asm.Fl).apply(null,arguments)},Go=b._emscripten_bind_SIGCrown___destroy___0=function(){return(Go=b._emscripten_bind_SIGCrown___destroy___0=b.asm.Gl).apply(null,arguments)},Ho=b._emscripten_bind_SpeciesMasterTableRecord_SpeciesMasterTableRecord_0=function(){return(Ho= -b._emscripten_bind_SpeciesMasterTableRecord_SpeciesMasterTableRecord_0=b.asm.Hl).apply(null,arguments)},Io=b._emscripten_bind_SpeciesMasterTableRecord_SpeciesMasterTableRecord_1=function(){return(Io=b._emscripten_bind_SpeciesMasterTableRecord_SpeciesMasterTableRecord_1=b.asm.Il).apply(null,arguments)},Jo=b._emscripten_bind_SpeciesMasterTableRecord___destroy___0=function(){return(Jo=b._emscripten_bind_SpeciesMasterTableRecord___destroy___0=b.asm.Jl).apply(null,arguments)},Ko=b._emscripten_bind_SpeciesMasterTable_SpeciesMasterTable_0= -function(){return(Ko=b._emscripten_bind_SpeciesMasterTable_SpeciesMasterTable_0=b.asm.Kl).apply(null,arguments)},Lo=b._emscripten_bind_SpeciesMasterTable_initializeMasterTable_0=function(){return(Lo=b._emscripten_bind_SpeciesMasterTable_initializeMasterTable_0=b.asm.Ll).apply(null,arguments)},Mo=b._emscripten_bind_SpeciesMasterTable_getSpeciesTableIndexFromSpeciesCode_1=function(){return(Mo=b._emscripten_bind_SpeciesMasterTable_getSpeciesTableIndexFromSpeciesCode_1=b.asm.Ml).apply(null,arguments)}, -No=b._emscripten_bind_SpeciesMasterTable_getSpeciesTableIndexFromSpeciesCodeAndEquationType_2=function(){return(No=b._emscripten_bind_SpeciesMasterTable_getSpeciesTableIndexFromSpeciesCodeAndEquationType_2=b.asm.Nl).apply(null,arguments)},Oo=b._emscripten_bind_SpeciesMasterTable_insertRecord_17=function(){return(Oo=b._emscripten_bind_SpeciesMasterTable_insertRecord_17=b.asm.Ol).apply(null,arguments)},Po=b._emscripten_bind_SpeciesMasterTable___destroy___0=function(){return(Po=b._emscripten_bind_SpeciesMasterTable___destroy___0= -b.asm.Pl).apply(null,arguments)},Qo=b._emscripten_bind_SIGMortality_SIGMortality_1=function(){return(Qo=b._emscripten_bind_SIGMortality_SIGMortality_1=b.asm.Ql).apply(null,arguments)},Ro=b._emscripten_bind_SIGMortality_initializeMembers_0=function(){return(Ro=b._emscripten_bind_SIGMortality_initializeMembers_0=b.asm.Rl).apply(null,arguments)},So=b._emscripten_bind_SIGMortality_checkIsInGACCRegionAtSpeciesTableIndex_2=function(){return(So=b._emscripten_bind_SIGMortality_checkIsInGACCRegionAtSpeciesTableIndex_2= -b.asm.Sl).apply(null,arguments)},To=b._emscripten_bind_SIGMortality_checkIsInGACCRegionFromSpeciesCode_2=function(){return(To=b._emscripten_bind_SIGMortality_checkIsInGACCRegionFromSpeciesCode_2=b.asm.Tl).apply(null,arguments)},Uo=b._emscripten_bind_SIGMortality_updateInputsForSpeciesCodeAndEquationType_2=function(){return(Uo=b._emscripten_bind_SIGMortality_updateInputsForSpeciesCodeAndEquationType_2=b.asm.Ul).apply(null,arguments)},Vo=b._emscripten_bind_SIGMortality_calculateMortality_1=function(){return(Vo= -b._emscripten_bind_SIGMortality_calculateMortality_1=b.asm.Vl).apply(null,arguments)},Wo=b._emscripten_bind_SIGMortality_calculateScorchHeight_7=function(){return(Wo=b._emscripten_bind_SIGMortality_calculateScorchHeight_7=b.asm.Wl).apply(null,arguments)},Xo=b._emscripten_bind_SIGMortality_calculateMortalityAllDirections_1=function(){return(Xo=b._emscripten_bind_SIGMortality_calculateMortalityAllDirections_1=b.asm.Xl).apply(null,arguments)},Yo=b._emscripten_bind_SIGMortality_getRequiredFieldVector_0= -function(){return(Yo=b._emscripten_bind_SIGMortality_getRequiredFieldVector_0=b.asm.Yl).apply(null,arguments)},Zo=b._emscripten_bind_SIGMortality_getBeetleDamage_0=function(){return(Zo=b._emscripten_bind_SIGMortality_getBeetleDamage_0=b.asm.Zl).apply(null,arguments)},$o=b._emscripten_bind_SIGMortality_getCrownDamageEquationCode_0=function(){return($o=b._emscripten_bind_SIGMortality_getCrownDamageEquationCode_0=b.asm._l).apply(null,arguments)},ap=b._emscripten_bind_SIGMortality_getCrownDamageEquationCodeAtSpeciesTableIndex_1= -function(){return(ap=b._emscripten_bind_SIGMortality_getCrownDamageEquationCodeAtSpeciesTableIndex_1=b.asm.$l).apply(null,arguments)},bp=b._emscripten_bind_SIGMortality_getCrownDamageEquationCodeFromSpeciesCode_1=function(){return(bp=b._emscripten_bind_SIGMortality_getCrownDamageEquationCodeFromSpeciesCode_1=b.asm.am).apply(null,arguments)},cp=b._emscripten_bind_SIGMortality_getCrownDamageType_0=function(){return(cp=b._emscripten_bind_SIGMortality_getCrownDamageType_0=b.asm.bm).apply(null,arguments)}, -dp=b._emscripten_bind_SIGMortality_getCommonNameAtSpeciesTableIndex_1=function(){return(dp=b._emscripten_bind_SIGMortality_getCommonNameAtSpeciesTableIndex_1=b.asm.cm).apply(null,arguments)},ep=b._emscripten_bind_SIGMortality_getCommonNameFromSpeciesCode_1=function(){return(ep=b._emscripten_bind_SIGMortality_getCommonNameFromSpeciesCode_1=b.asm.dm).apply(null,arguments)},fp=b._emscripten_bind_SIGMortality_getScientificNameAtSpeciesTableIndex_1=function(){return(fp=b._emscripten_bind_SIGMortality_getScientificNameAtSpeciesTableIndex_1= -b.asm.em).apply(null,arguments)},gp=b._emscripten_bind_SIGMortality_getScientificNameFromSpeciesCode_1=function(){return(gp=b._emscripten_bind_SIGMortality_getScientificNameFromSpeciesCode_1=b.asm.fm).apply(null,arguments)},hp=b._emscripten_bind_SIGMortality_getSpeciesCode_0=function(){return(hp=b._emscripten_bind_SIGMortality_getSpeciesCode_0=b.asm.gm).apply(null,arguments)},ip=b._emscripten_bind_SIGMortality_getSpeciesCodeAtSpeciesTableIndex_1=function(){return(ip=b._emscripten_bind_SIGMortality_getSpeciesCodeAtSpeciesTableIndex_1= -b.asm.hm).apply(null,arguments)},jp=b._emscripten_bind_SIGMortality_getEquationType_0=function(){return(jp=b._emscripten_bind_SIGMortality_getEquationType_0=b.asm.im).apply(null,arguments)},kp=b._emscripten_bind_SIGMortality_getEquationTypeAtSpeciesTableIndex_1=function(){return(kp=b._emscripten_bind_SIGMortality_getEquationTypeAtSpeciesTableIndex_1=b.asm.jm).apply(null,arguments)},lp=b._emscripten_bind_SIGMortality_getEquationTypeFromSpeciesCode_1=function(){return(lp=b._emscripten_bind_SIGMortality_getEquationTypeFromSpeciesCode_1= -b.asm.km).apply(null,arguments)},mp=b._emscripten_bind_SIGMortality_getFireSeverity_0=function(){return(mp=b._emscripten_bind_SIGMortality_getFireSeverity_0=b.asm.lm).apply(null,arguments)},np=b._emscripten_bind_SIGMortality_getFlameLengthOrScorchHeightSwitch_0=function(){return(np=b._emscripten_bind_SIGMortality_getFlameLengthOrScorchHeightSwitch_0=b.asm.mm).apply(null,arguments)},op=b._emscripten_bind_SIGMortality_getGACCRegion_0=function(){return(op=b._emscripten_bind_SIGMortality_getGACCRegion_0= -b.asm.nm).apply(null,arguments)},pp=b._emscripten_bind_SIGMortality_getSpeciesRecordVectorForGACCRegion_1=function(){return(pp=b._emscripten_bind_SIGMortality_getSpeciesRecordVectorForGACCRegion_1=b.asm.om).apply(null,arguments)},qp=b._emscripten_bind_SIGMortality_getSpeciesRecordVectorForGACCRegionAndEquationType_2=function(){return(qp=b._emscripten_bind_SIGMortality_getSpeciesRecordVectorForGACCRegionAndEquationType_2=b.asm.pm).apply(null,arguments)},rp=b._emscripten_bind_SIGMortality_getBarkThickness_1= -function(){return(rp=b._emscripten_bind_SIGMortality_getBarkThickness_1=b.asm.qm).apply(null,arguments)},sp=b._emscripten_bind_SIGMortality_getBasalAreaKillled_0=function(){return(sp=b._emscripten_bind_SIGMortality_getBasalAreaKillled_0=b.asm.rm).apply(null,arguments)},tp=b._emscripten_bind_SIGMortality_getBasalAreaPostfire_0=function(){return(tp=b._emscripten_bind_SIGMortality_getBasalAreaPostfire_0=b.asm.sm).apply(null,arguments)},up=b._emscripten_bind_SIGMortality_getBasalAreaPrefire_0=function(){return(up= -b._emscripten_bind_SIGMortality_getBasalAreaPrefire_0=b.asm.tm).apply(null,arguments)},vp=b._emscripten_bind_SIGMortality_getBoleCharHeight_1=function(){return(vp=b._emscripten_bind_SIGMortality_getBoleCharHeight_1=b.asm.um).apply(null,arguments)},wp=b._emscripten_bind_SIGMortality_getBoleCharHeightBacking_1=function(){return(wp=b._emscripten_bind_SIGMortality_getBoleCharHeightBacking_1=b.asm.vm).apply(null,arguments)},xp=b._emscripten_bind_SIGMortality_getBoleCharHeightFlanking_1=function(){return(xp= -b._emscripten_bind_SIGMortality_getBoleCharHeightFlanking_1=b.asm.wm).apply(null,arguments)},yp=b._emscripten_bind_SIGMortality_getCambiumKillRating_0=function(){return(yp=b._emscripten_bind_SIGMortality_getCambiumKillRating_0=b.asm.xm).apply(null,arguments)},zp=b._emscripten_bind_SIGMortality_getCrownDamage_0=function(){return(zp=b._emscripten_bind_SIGMortality_getCrownDamage_0=b.asm.ym).apply(null,arguments)},Ap=b._emscripten_bind_SIGMortality_getCrownRatio_1=function(){return(Ap=b._emscripten_bind_SIGMortality_getCrownRatio_1= -b.asm.zm).apply(null,arguments)},Bp=b._emscripten_bind_SIGMortality_getCVSorCLS_0=function(){return(Bp=b._emscripten_bind_SIGMortality_getCVSorCLS_0=b.asm.Am).apply(null,arguments)},Cp=b._emscripten_bind_SIGMortality_getDBH_1=function(){return(Cp=b._emscripten_bind_SIGMortality_getDBH_1=b.asm.Bm).apply(null,arguments)},Dp=b._emscripten_bind_SIGMortality_getFlameLength_1=function(){return(Dp=b._emscripten_bind_SIGMortality_getFlameLength_1=b.asm.Cm).apply(null,arguments)},Ep=b._emscripten_bind_SIGMortality_getFlameLengthOrScorchHeightValue_1= -function(){return(Ep=b._emscripten_bind_SIGMortality_getFlameLengthOrScorchHeightValue_1=b.asm.Dm).apply(null,arguments)},Fp=b._emscripten_bind_SIGMortality_getKilledTrees_0=function(){return(Fp=b._emscripten_bind_SIGMortality_getKilledTrees_0=b.asm.Em).apply(null,arguments)},Gp=b._emscripten_bind_SIGMortality_getProbabilityOfMortality_1=function(){return(Gp=b._emscripten_bind_SIGMortality_getProbabilityOfMortality_1=b.asm.Fm).apply(null,arguments)},Hp=b._emscripten_bind_SIGMortality_getProbabilityOfMortalityBacking_1= -function(){return(Hp=b._emscripten_bind_SIGMortality_getProbabilityOfMortalityBacking_1=b.asm.Gm).apply(null,arguments)},Ip=b._emscripten_bind_SIGMortality_getProbabilityOfMortalityFlanking_1=function(){return(Ip=b._emscripten_bind_SIGMortality_getProbabilityOfMortalityFlanking_1=b.asm.Hm).apply(null,arguments)},Jp=b._emscripten_bind_SIGMortality_getScorchHeight_1=function(){return(Jp=b._emscripten_bind_SIGMortality_getScorchHeight_1=b.asm.Im).apply(null,arguments)},Kp=b._emscripten_bind_SIGMortality_getScorchHeightBacking_1= -function(){return(Kp=b._emscripten_bind_SIGMortality_getScorchHeightBacking_1=b.asm.Jm).apply(null,arguments)},Lp=b._emscripten_bind_SIGMortality_getScorchHeightFlanking_1=function(){return(Lp=b._emscripten_bind_SIGMortality_getScorchHeightFlanking_1=b.asm.Km).apply(null,arguments)},Mp=b._emscripten_bind_SIGMortality_getTotalPrefireTrees_0=function(){return(Mp=b._emscripten_bind_SIGMortality_getTotalPrefireTrees_0=b.asm.Lm).apply(null,arguments)},Np=b._emscripten_bind_SIGMortality_getTreeCrownLengthScorched_1= -function(){return(Np=b._emscripten_bind_SIGMortality_getTreeCrownLengthScorched_1=b.asm.Mm).apply(null,arguments)},Op=b._emscripten_bind_SIGMortality_getTreeCrownLengthScorchedBacking_1=function(){return(Op=b._emscripten_bind_SIGMortality_getTreeCrownLengthScorchedBacking_1=b.asm.Nm).apply(null,arguments)},Pp=b._emscripten_bind_SIGMortality_getTreeCrownLengthScorchedFlanking_1=function(){return(Pp=b._emscripten_bind_SIGMortality_getTreeCrownLengthScorchedFlanking_1=b.asm.Om).apply(null,arguments)}, -Qp=b._emscripten_bind_SIGMortality_getTreeCrownVolumeScorched_1=function(){return(Qp=b._emscripten_bind_SIGMortality_getTreeCrownVolumeScorched_1=b.asm.Pm).apply(null,arguments)},Rp=b._emscripten_bind_SIGMortality_getTreeCrownVolumeScorchedBacking_1=function(){return(Rp=b._emscripten_bind_SIGMortality_getTreeCrownVolumeScorchedBacking_1=b.asm.Qm).apply(null,arguments)},Sp=b._emscripten_bind_SIGMortality_getTreeCrownVolumeScorchedFlanking_1=function(){return(Sp=b._emscripten_bind_SIGMortality_getTreeCrownVolumeScorchedFlanking_1= -b.asm.Rm).apply(null,arguments)},Tp=b._emscripten_bind_SIGMortality_getTreeDensityPerUnitArea_1=function(){return(Tp=b._emscripten_bind_SIGMortality_getTreeDensityPerUnitArea_1=b.asm.Sm).apply(null,arguments)},Up=b._emscripten_bind_SIGMortality_getTreeHeight_1=function(){return(Up=b._emscripten_bind_SIGMortality_getTreeHeight_1=b.asm.Tm).apply(null,arguments)},Vp=b._emscripten_bind_SIGMortality_postfireCanopyCover_0=function(){return(Vp=b._emscripten_bind_SIGMortality_postfireCanopyCover_0=b.asm.Um).apply(null, -arguments)},Wp=b._emscripten_bind_SIGMortality_prefireCanopyCover_0=function(){return(Wp=b._emscripten_bind_SIGMortality_prefireCanopyCover_0=b.asm.Vm).apply(null,arguments)},Xp=b._emscripten_bind_SIGMortality_getBarkEquationNumberAtSpeciesTableIndex_1=function(){return(Xp=b._emscripten_bind_SIGMortality_getBarkEquationNumberAtSpeciesTableIndex_1=b.asm.Wm).apply(null,arguments)},Yp=b._emscripten_bind_SIGMortality_getBarkEquationNumberFromSpeciesCode_1=function(){return(Yp=b._emscripten_bind_SIGMortality_getBarkEquationNumberFromSpeciesCode_1= -b.asm.Xm).apply(null,arguments)},Zp=b._emscripten_bind_SIGMortality_getCrownCoefficientCodeAtSpeciesTableIndex_1=function(){return(Zp=b._emscripten_bind_SIGMortality_getCrownCoefficientCodeAtSpeciesTableIndex_1=b.asm.Ym).apply(null,arguments)},$p=b._emscripten_bind_SIGMortality_getCrownCoefficientCodeFromSpeciesCode_1=function(){return($p=b._emscripten_bind_SIGMortality_getCrownCoefficientCodeFromSpeciesCode_1=b.asm.Zm).apply(null,arguments)},aq=b._emscripten_bind_SIGMortality_getCrownScorchOrBoleCharEquationNumber_0= -function(){return(aq=b._emscripten_bind_SIGMortality_getCrownScorchOrBoleCharEquationNumber_0=b.asm._m).apply(null,arguments)},bq=b._emscripten_bind_SIGMortality_getMortalityEquationNumberAtSpeciesTableIndex_1=function(){return(bq=b._emscripten_bind_SIGMortality_getMortalityEquationNumberAtSpeciesTableIndex_1=b.asm.$m).apply(null,arguments)},cq=b._emscripten_bind_SIGMortality_getMortalityEquationNumberFromSpeciesCode_1=function(){return(cq=b._emscripten_bind_SIGMortality_getMortalityEquationNumberFromSpeciesCode_1= -b.asm.an).apply(null,arguments)},dq=b._emscripten_bind_SIGMortality_getNumberOfRecordsInSpeciesTable_0=function(){return(dq=b._emscripten_bind_SIGMortality_getNumberOfRecordsInSpeciesTable_0=b.asm.bn).apply(null,arguments)},eq=b._emscripten_bind_SIGMortality_getSpeciesTableIndexFromSpeciesCode_1=function(){return(eq=b._emscripten_bind_SIGMortality_getSpeciesTableIndexFromSpeciesCode_1=b.asm.cn).apply(null,arguments)},fq=b._emscripten_bind_SIGMortality_getSpeciesTableIndexFromSpeciesCodeAndEquationType_2= -function(){return(fq=b._emscripten_bind_SIGMortality_getSpeciesTableIndexFromSpeciesCodeAndEquationType_2=b.asm.dn).apply(null,arguments)},gq=b._emscripten_bind_SIGMortality_setAirTemperature_2=function(){return(gq=b._emscripten_bind_SIGMortality_setAirTemperature_2=b.asm.en).apply(null,arguments)},hq=b._emscripten_bind_SIGMortality_setBeetleDamage_1=function(){return(hq=b._emscripten_bind_SIGMortality_setBeetleDamage_1=b.asm.fn).apply(null,arguments)},iq=b._emscripten_bind_SIGMortality_setBoleCharHeight_2= -function(){return(iq=b._emscripten_bind_SIGMortality_setBoleCharHeight_2=b.asm.gn).apply(null,arguments)},jq=b._emscripten_bind_SIGMortality_setCambiumKillRating_1=function(){return(jq=b._emscripten_bind_SIGMortality_setCambiumKillRating_1=b.asm.hn).apply(null,arguments)},kq=b._emscripten_bind_SIGMortality_setCrownDamage_1=function(){return(kq=b._emscripten_bind_SIGMortality_setCrownDamage_1=b.asm.jn).apply(null,arguments)},lq=b._emscripten_bind_SIGMortality_setCrownRatio_2=function(){return(lq=b._emscripten_bind_SIGMortality_setCrownRatio_2= -b.asm.kn).apply(null,arguments)},mq=b._emscripten_bind_SIGMortality_setDBH_2=function(){return(mq=b._emscripten_bind_SIGMortality_setDBH_2=b.asm.ln).apply(null,arguments)},nq=b._emscripten_bind_SIGMortality_setEquationType_1=function(){return(nq=b._emscripten_bind_SIGMortality_setEquationType_1=b.asm.mn).apply(null,arguments)},oq=b._emscripten_bind_SIGMortality_setFireSeverity_1=function(){return(oq=b._emscripten_bind_SIGMortality_setFireSeverity_1=b.asm.nn).apply(null,arguments)},pq=b._emscripten_bind_SIGMortality_setFirelineIntensity_2= -function(){return(pq=b._emscripten_bind_SIGMortality_setFirelineIntensity_2=b.asm.on).apply(null,arguments)},qq=b._emscripten_bind_SIGMortality_setFlameLength_2=function(){return(qq=b._emscripten_bind_SIGMortality_setFlameLength_2=b.asm.pn).apply(null,arguments)},rq=b._emscripten_bind_SIGMortality_setFlameLengthOrScorchHeightSwitch_1=function(){return(rq=b._emscripten_bind_SIGMortality_setFlameLengthOrScorchHeightSwitch_1=b.asm.qn).apply(null,arguments)},sq=b._emscripten_bind_SIGMortality_setFlameLengthOrScorchHeightValue_2= -function(){return(sq=b._emscripten_bind_SIGMortality_setFlameLengthOrScorchHeightValue_2=b.asm.rn).apply(null,arguments)},tq=b._emscripten_bind_SIGMortality_setMidFlameWindSpeed_2=function(){return(tq=b._emscripten_bind_SIGMortality_setMidFlameWindSpeed_2=b.asm.sn).apply(null,arguments)},uq=b._emscripten_bind_SIGMortality_setGACCRegion_1=function(){return(uq=b._emscripten_bind_SIGMortality_setGACCRegion_1=b.asm.tn).apply(null,arguments)},vq=b._emscripten_bind_SIGMortality_setScorchHeight_2=function(){return(vq= -b._emscripten_bind_SIGMortality_setScorchHeight_2=b.asm.un).apply(null,arguments)},wq=b._emscripten_bind_SIGMortality_setSpeciesCode_1=function(){return(wq=b._emscripten_bind_SIGMortality_setSpeciesCode_1=b.asm.vn).apply(null,arguments)},xq=b._emscripten_bind_SIGMortality_setSurfaceFireFirelineIntensity_2=function(){return(xq=b._emscripten_bind_SIGMortality_setSurfaceFireFirelineIntensity_2=b.asm.wn).apply(null,arguments)},yq=b._emscripten_bind_SIGMortality_setSurfaceFireFirelineIntensityBacking_2= -function(){return(yq=b._emscripten_bind_SIGMortality_setSurfaceFireFirelineIntensityBacking_2=b.asm.xn).apply(null,arguments)},zq=b._emscripten_bind_SIGMortality_setSurfaceFireFirelineIntensityFlanking_2=function(){return(zq=b._emscripten_bind_SIGMortality_setSurfaceFireFirelineIntensityFlanking_2=b.asm.yn).apply(null,arguments)},Aq=b._emscripten_bind_SIGMortality_setSurfaceFireFlameLength_2=function(){return(Aq=b._emscripten_bind_SIGMortality_setSurfaceFireFlameLength_2=b.asm.zn).apply(null,arguments)}, -Bq=b._emscripten_bind_SIGMortality_setSurfaceFireFlameLengthBacking_2=function(){return(Bq=b._emscripten_bind_SIGMortality_setSurfaceFireFlameLengthBacking_2=b.asm.An).apply(null,arguments)},Cq=b._emscripten_bind_SIGMortality_setSurfaceFireFlameLengthFlanking_2=function(){return(Cq=b._emscripten_bind_SIGMortality_setSurfaceFireFlameLengthFlanking_2=b.asm.Bn).apply(null,arguments)},Dq=b._emscripten_bind_SIGMortality_setSurfaceFireScorchHeight_2=function(){return(Dq=b._emscripten_bind_SIGMortality_setSurfaceFireScorchHeight_2= -b.asm.Cn).apply(null,arguments)},Eq=b._emscripten_bind_SIGMortality_setTreeDensityPerUnitArea_2=function(){return(Eq=b._emscripten_bind_SIGMortality_setTreeDensityPerUnitArea_2=b.asm.Dn).apply(null,arguments)},Fq=b._emscripten_bind_SIGMortality_setTreeHeight_2=function(){return(Fq=b._emscripten_bind_SIGMortality_setTreeHeight_2=b.asm.En).apply(null,arguments)},Gq=b._emscripten_bind_SIGMortality_setUserProvidedWindAdjustmentFactor_1=function(){return(Gq=b._emscripten_bind_SIGMortality_setUserProvidedWindAdjustmentFactor_1= -b.asm.Fn).apply(null,arguments)},Hq=b._emscripten_bind_SIGMortality_setWindHeightInputMode_1=function(){return(Hq=b._emscripten_bind_SIGMortality_setWindHeightInputMode_1=b.asm.Gn).apply(null,arguments)},Iq=b._emscripten_bind_SIGMortality_setWindSpeed_2=function(){return(Iq=b._emscripten_bind_SIGMortality_setWindSpeed_2=b.asm.Hn).apply(null,arguments)},Jq=b._emscripten_bind_SIGMortality_setWindSpeedAndWindHeightInputMode_4=function(){return(Jq=b._emscripten_bind_SIGMortality_setWindSpeedAndWindHeightInputMode_4= -b.asm.In).apply(null,arguments)},Kq=b._emscripten_bind_SIGMortality___destroy___0=function(){return(Kq=b._emscripten_bind_SIGMortality___destroy___0=b.asm.Jn).apply(null,arguments)},Lq=b._emscripten_bind_WindSpeedUtility_WindSpeedUtility_0=function(){return(Lq=b._emscripten_bind_WindSpeedUtility_WindSpeedUtility_0=b.asm.Kn).apply(null,arguments)},Mq=b._emscripten_bind_WindSpeedUtility_windSpeedAtMidflame_2=function(){return(Mq=b._emscripten_bind_WindSpeedUtility_windSpeedAtMidflame_2=b.asm.Ln).apply(null, -arguments)},Nq=b._emscripten_bind_WindSpeedUtility_windSpeedAtTwentyFeetFromTenMeter_1=function(){return(Nq=b._emscripten_bind_WindSpeedUtility_windSpeedAtTwentyFeetFromTenMeter_1=b.asm.Mn).apply(null,arguments)},Oq=b._emscripten_bind_WindSpeedUtility___destroy___0=function(){return(Oq=b._emscripten_bind_WindSpeedUtility___destroy___0=b.asm.Nn).apply(null,arguments)},Pq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_SIGFineDeadFuelMoistureTool_0=function(){return(Pq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_SIGFineDeadFuelMoistureTool_0= -b.asm.On).apply(null,arguments)},Qq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_calculate_0=function(){return(Qq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_calculate_0=b.asm.Pn).apply(null,arguments)},Rq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setTimeOfDayIndex_1=function(){return(Rq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setTimeOfDayIndex_1=b.asm.Qn).apply(null,arguments)},Sq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setSlopeIndex_1=function(){return(Sq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setSlopeIndex_1= -b.asm.Rn).apply(null,arguments)},Tq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setShadingIndex_1=function(){return(Tq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setShadingIndex_1=b.asm.Sn).apply(null,arguments)},Uq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setAspectIndex_1=function(){return(Uq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setAspectIndex_1=b.asm.Tn).apply(null,arguments)},Vq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setRHIndex_1=function(){return(Vq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setRHIndex_1= -b.asm.Un).apply(null,arguments)},Wq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setElevationIndex_1=function(){return(Wq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setElevationIndex_1=b.asm.Vn).apply(null,arguments)},Xq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setDryBulbIndex_1=function(){return(Xq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setDryBulbIndex_1=b.asm.Wn).apply(null,arguments)},Yq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setMonthIndex_1=function(){return(Yq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_setMonthIndex_1= -b.asm.Xn).apply(null,arguments)},Zq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getFineDeadFuelMoisture_1=function(){return(Zq=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getFineDeadFuelMoisture_1=b.asm.Yn).apply(null,arguments)},$q=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getSlopeIndexSize_0=function(){return($q=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getSlopeIndexSize_0=b.asm.Zn).apply(null,arguments)},ar=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getElevationIndexSize_0= -function(){return(ar=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getElevationIndexSize_0=b.asm._n).apply(null,arguments)},br=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getMonthIndexSize_0=function(){return(br=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getMonthIndexSize_0=b.asm.$n).apply(null,arguments)},cr=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getDryBulbTemperatureIndexSize_0=function(){return(cr=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getDryBulbTemperatureIndexSize_0=b.asm.ao).apply(null, -arguments)},dr=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getReferenceMoisture_1=function(){return(dr=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getReferenceMoisture_1=b.asm.bo).apply(null,arguments)},er=b._emscripten_bind_SIGFineDeadFuelMoistureTool_calculateByIndex_8=function(){return(er=b._emscripten_bind_SIGFineDeadFuelMoistureTool_calculateByIndex_8=b.asm.co).apply(null,arguments)},fr=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getTimeOfDayIndexSize_0=function(){return(fr=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getTimeOfDayIndexSize_0= -b.asm.eo).apply(null,arguments)},gr=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getCorrectionMoisture_1=function(){return(gr=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getCorrectionMoisture_1=b.asm.fo).apply(null,arguments)},hr=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getAspectIndexSize_0=function(){return(hr=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getAspectIndexSize_0=b.asm.go).apply(null,arguments)},ir=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getShadingIndexSize_0=function(){return(ir= -b._emscripten_bind_SIGFineDeadFuelMoistureTool_getShadingIndexSize_0=b.asm.ho).apply(null,arguments)},jr=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getRelativeHumidityIndexSize_0=function(){return(jr=b._emscripten_bind_SIGFineDeadFuelMoistureTool_getRelativeHumidityIndexSize_0=b.asm.io).apply(null,arguments)},kr=b._emscripten_bind_SIGFineDeadFuelMoistureTool___destroy___0=function(){return(kr=b._emscripten_bind_SIGFineDeadFuelMoistureTool___destroy___0=b.asm.jo).apply(null,arguments)},lr=b._emscripten_bind_SIGSlopeTool_SIGSlopeTool_0= -function(){return(lr=b._emscripten_bind_SIGSlopeTool_SIGSlopeTool_0=b.asm.ko).apply(null,arguments)},mr=b._emscripten_bind_SIGSlopeTool_getCentimetersPerKilometerAtIndex_1=function(){return(mr=b._emscripten_bind_SIGSlopeTool_getCentimetersPerKilometerAtIndex_1=b.asm.lo).apply(null,arguments)},nr=b._emscripten_bind_SIGSlopeTool_getCentimetersPerKilometerAtRepresentativeFraction_1=function(){return(nr=b._emscripten_bind_SIGSlopeTool_getCentimetersPerKilometerAtRepresentativeFraction_1=b.asm.mo).apply(null, -arguments)},or=b._emscripten_bind_SIGSlopeTool_getHorizontalDistance_2=function(){return(or=b._emscripten_bind_SIGSlopeTool_getHorizontalDistance_2=b.asm.no).apply(null,arguments)},pr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceAtIndex_2=function(){return(pr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceAtIndex_2=b.asm.oo).apply(null,arguments)},qr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceFifteen_1=function(){return(qr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceFifteen_1= -b.asm.po).apply(null,arguments)},rr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceFourtyFive_1=function(){return(rr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceFourtyFive_1=b.asm.qo).apply(null,arguments)},sr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceMaxSlope_1=function(){return(sr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceMaxSlope_1=b.asm.ro).apply(null,arguments)},tr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceNinety_1=function(){return(tr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceNinety_1= -b.asm.so).apply(null,arguments)},ur=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceSeventy_1=function(){return(ur=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceSeventy_1=b.asm.to).apply(null,arguments)},vr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceSixty_1=function(){return(vr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceSixty_1=b.asm.uo).apply(null,arguments)},wr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceThirty_1=function(){return(wr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceThirty_1= -b.asm.vo).apply(null,arguments)},xr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceZero_1=function(){return(xr=b._emscripten_bind_SIGSlopeTool_getHorizontalDistanceZero_1=b.asm.wo).apply(null,arguments)},yr=b._emscripten_bind_SIGSlopeTool_getInchesPerMileAtIndex_1=function(){return(yr=b._emscripten_bind_SIGSlopeTool_getInchesPerMileAtIndex_1=b.asm.xo).apply(null,arguments)},zr=b._emscripten_bind_SIGSlopeTool_getInchesPerMileAtRepresentativeFraction_1=function(){return(zr=b._emscripten_bind_SIGSlopeTool_getInchesPerMileAtRepresentativeFraction_1= -b.asm.yo).apply(null,arguments)},Ar=b._emscripten_bind_SIGSlopeTool_getKilometersPerCentimeterAtIndex_1=function(){return(Ar=b._emscripten_bind_SIGSlopeTool_getKilometersPerCentimeterAtIndex_1=b.asm.zo).apply(null,arguments)},Br=b._emscripten_bind_SIGSlopeTool_getKilometersPerCentimeterAtRepresentativeFraction_1=function(){return(Br=b._emscripten_bind_SIGSlopeTool_getKilometersPerCentimeterAtRepresentativeFraction_1=b.asm.Ao).apply(null,arguments)},Cr=b._emscripten_bind_SIGSlopeTool_getMilesPerInchAtIndex_1= -function(){return(Cr=b._emscripten_bind_SIGSlopeTool_getMilesPerInchAtIndex_1=b.asm.Bo).apply(null,arguments)},Dr=b._emscripten_bind_SIGSlopeTool_getMilesPerInchAtRepresentativeFraction_1=function(){return(Dr=b._emscripten_bind_SIGSlopeTool_getMilesPerInchAtRepresentativeFraction_1=b.asm.Co).apply(null,arguments)},Er=b._emscripten_bind_SIGSlopeTool_getSlopeElevationChangeFromMapMeasurements_1=function(){return(Er=b._emscripten_bind_SIGSlopeTool_getSlopeElevationChangeFromMapMeasurements_1=b.asm.Do).apply(null, -arguments)},Fr=b._emscripten_bind_SIGSlopeTool_getSlopeFromMapMeasurements_1=function(){return(Fr=b._emscripten_bind_SIGSlopeTool_getSlopeFromMapMeasurements_1=b.asm.Eo).apply(null,arguments)},Gr=b._emscripten_bind_SIGSlopeTool_getSlopeHorizontalDistanceFromMapMeasurements_1=function(){return(Gr=b._emscripten_bind_SIGSlopeTool_getSlopeHorizontalDistanceFromMapMeasurements_1=b.asm.Fo).apply(null,arguments)},Hr=b._emscripten_bind_SIGSlopeTool_getSlopeFromMapMeasurementsInDegrees_0=function(){return(Hr= -b._emscripten_bind_SIGSlopeTool_getSlopeFromMapMeasurementsInDegrees_0=b.asm.Go).apply(null,arguments)},Ir=b._emscripten_bind_SIGSlopeTool_getSlopeFromMapMeasurementsInPercent_0=function(){return(Ir=b._emscripten_bind_SIGSlopeTool_getSlopeFromMapMeasurementsInPercent_0=b.asm.Ho).apply(null,arguments)},Jr=b._emscripten_bind_SIGSlopeTool_getNumberOfHorizontalDistances_0=function(){return(Jr=b._emscripten_bind_SIGSlopeTool_getNumberOfHorizontalDistances_0=b.asm.Io).apply(null,arguments)},Kr=b._emscripten_bind_SIGSlopeTool_getNumberOfRepresentativeFractions_0= -function(){return(Kr=b._emscripten_bind_SIGSlopeTool_getNumberOfRepresentativeFractions_0=b.asm.Jo).apply(null,arguments)},Lr=b._emscripten_bind_SIGSlopeTool_getRepresentativeFractionAtIndex_1=function(){return(Lr=b._emscripten_bind_SIGSlopeTool_getRepresentativeFractionAtIndex_1=b.asm.Ko).apply(null,arguments)},Mr=b._emscripten_bind_SIGSlopeTool_getRepresentativeFractionAtRepresentativeFraction_1=function(){return(Mr=b._emscripten_bind_SIGSlopeTool_getRepresentativeFractionAtRepresentativeFraction_1= -b.asm.Lo).apply(null,arguments)},Nr=b._emscripten_bind_SIGSlopeTool_calculateHorizontalDistance_0=function(){return(Nr=b._emscripten_bind_SIGSlopeTool_calculateHorizontalDistance_0=b.asm.Mo).apply(null,arguments)},Or=b._emscripten_bind_SIGSlopeTool_calculateSlopeFromMapMeasurements_0=function(){return(Or=b._emscripten_bind_SIGSlopeTool_calculateSlopeFromMapMeasurements_0=b.asm.No).apply(null,arguments)},Pr=b._emscripten_bind_SIGSlopeTool_setCalculatedMapDistance_2=function(){return(Pr=b._emscripten_bind_SIGSlopeTool_setCalculatedMapDistance_2= -b.asm.Oo).apply(null,arguments)},Qr=b._emscripten_bind_SIGSlopeTool_setContourInterval_2=function(){return(Qr=b._emscripten_bind_SIGSlopeTool_setContourInterval_2=b.asm.Po).apply(null,arguments)},Rr=b._emscripten_bind_SIGSlopeTool_setMapDistance_2=function(){return(Rr=b._emscripten_bind_SIGSlopeTool_setMapDistance_2=b.asm.Qo).apply(null,arguments)},Sr=b._emscripten_bind_SIGSlopeTool_setMapRepresentativeFraction_1=function(){return(Sr=b._emscripten_bind_SIGSlopeTool_setMapRepresentativeFraction_1= -b.asm.Ro).apply(null,arguments)},Tr=b._emscripten_bind_SIGSlopeTool_setMaxSlopeSteepness_1=function(){return(Tr=b._emscripten_bind_SIGSlopeTool_setMaxSlopeSteepness_1=b.asm.So).apply(null,arguments)},Ur=b._emscripten_bind_SIGSlopeTool_setNumberOfContours_1=function(){return(Ur=b._emscripten_bind_SIGSlopeTool_setNumberOfContours_1=b.asm.To).apply(null,arguments)},Vr=b._emscripten_bind_SIGSlopeTool___destroy___0=function(){return(Vr=b._emscripten_bind_SIGSlopeTool___destroy___0=b.asm.Uo).apply(null, -arguments)},Wr=b._emscripten_bind_VaporPressureDeficitCalculator_VaporPressureDeficitCalculator_0=function(){return(Wr=b._emscripten_bind_VaporPressureDeficitCalculator_VaporPressureDeficitCalculator_0=b.asm.Vo).apply(null,arguments)},Xr=b._emscripten_bind_VaporPressureDeficitCalculator_runCalculation_0=function(){return(Xr=b._emscripten_bind_VaporPressureDeficitCalculator_runCalculation_0=b.asm.Wo).apply(null,arguments)},Yr=b._emscripten_bind_VaporPressureDeficitCalculator_setTemperature_2=function(){return(Yr= -b._emscripten_bind_VaporPressureDeficitCalculator_setTemperature_2=b.asm.Xo).apply(null,arguments)},Zr=b._emscripten_bind_VaporPressureDeficitCalculator_setRelativeHumidity_2=function(){return(Zr=b._emscripten_bind_VaporPressureDeficitCalculator_setRelativeHumidity_2=b.asm.Yo).apply(null,arguments)},$r=b._emscripten_bind_VaporPressureDeficitCalculator_getVaporPressureDeficit_1=function(){return($r=b._emscripten_bind_VaporPressureDeficitCalculator_getVaporPressureDeficit_1=b.asm.Zo).apply(null,arguments)}, -as=b._emscripten_bind_VaporPressureDeficitCalculator___destroy___0=function(){return(as=b._emscripten_bind_VaporPressureDeficitCalculator___destroy___0=b.asm._o).apply(null,arguments)},bs=b._emscripten_bind_RelativeHumidityTool_RelativeHumidityTool_0=function(){return(bs=b._emscripten_bind_RelativeHumidityTool_RelativeHumidityTool_0=b.asm.$o).apply(null,arguments)},cs=b._emscripten_bind_RelativeHumidityTool_calculate_0=function(){return(cs=b._emscripten_bind_RelativeHumidityTool_calculate_0=b.asm.ap).apply(null, -arguments)},ds=b._emscripten_bind_RelativeHumidityTool_getDryBulbTemperature_1=function(){return(ds=b._emscripten_bind_RelativeHumidityTool_getDryBulbTemperature_1=b.asm.bp).apply(null,arguments)},es=b._emscripten_bind_RelativeHumidityTool_getSiteElevation_1=function(){return(es=b._emscripten_bind_RelativeHumidityTool_getSiteElevation_1=b.asm.cp).apply(null,arguments)},fs=b._emscripten_bind_RelativeHumidityTool_getWetBulbTemperature_1=function(){return(fs=b._emscripten_bind_RelativeHumidityTool_getWetBulbTemperature_1= -b.asm.dp).apply(null,arguments)},gs=b._emscripten_bind_RelativeHumidityTool_getDewPointTemperature_1=function(){return(gs=b._emscripten_bind_RelativeHumidityTool_getDewPointTemperature_1=b.asm.ep).apply(null,arguments)},hs=b._emscripten_bind_RelativeHumidityTool_getRelativeHumidity_1=function(){return(hs=b._emscripten_bind_RelativeHumidityTool_getRelativeHumidity_1=b.asm.fp).apply(null,arguments)},is=b._emscripten_bind_RelativeHumidityTool_getWetBulbDepression_1=function(){return(is=b._emscripten_bind_RelativeHumidityTool_getWetBulbDepression_1= -b.asm.gp).apply(null,arguments)},js=b._emscripten_bind_RelativeHumidityTool_setDryBulbTemperature_2=function(){return(js=b._emscripten_bind_RelativeHumidityTool_setDryBulbTemperature_2=b.asm.hp).apply(null,arguments)},ks=b._emscripten_bind_RelativeHumidityTool_setSiteElevation_2=function(){return(ks=b._emscripten_bind_RelativeHumidityTool_setSiteElevation_2=b.asm.ip).apply(null,arguments)},ls=b._emscripten_bind_RelativeHumidityTool_setWetBulbTemperature_2=function(){return(ls=b._emscripten_bind_RelativeHumidityTool_setWetBulbTemperature_2= -b.asm.jp).apply(null,arguments)},ms=b._emscripten_bind_RelativeHumidityTool___destroy___0=function(){return(ms=b._emscripten_bind_RelativeHumidityTool___destroy___0=b.asm.kp).apply(null,arguments)},ns=b._emscripten_bind_SafeSeparationDistanceCalculator_SafeSeparationDistanceCalculator_0=function(){return(ns=b._emscripten_bind_SafeSeparationDistanceCalculator_SafeSeparationDistanceCalculator_0=b.asm.lp).apply(null,arguments)},os=b._emscripten_bind_SafeSeparationDistanceCalculator_calculate_0=function(){return(os= -b._emscripten_bind_SafeSeparationDistanceCalculator_calculate_0=b.asm.mp).apply(null,arguments)},ps=b._emscripten_bind_SafeSeparationDistanceCalculator_getBurningCondition_0=function(){return(ps=b._emscripten_bind_SafeSeparationDistanceCalculator_getBurningCondition_0=b.asm.np).apply(null,arguments)},qs=b._emscripten_bind_SafeSeparationDistanceCalculator_getSlopeClass_0=function(){return(qs=b._emscripten_bind_SafeSeparationDistanceCalculator_getSlopeClass_0=b.asm.op).apply(null,arguments)},rs=b._emscripten_bind_SafeSeparationDistanceCalculator_getSpeedClass_0= -function(){return(rs=b._emscripten_bind_SafeSeparationDistanceCalculator_getSpeedClass_0=b.asm.pp).apply(null,arguments)},ss=b._emscripten_bind_SafeSeparationDistanceCalculator_getSafeSeparationDistance_1=function(){return(ss=b._emscripten_bind_SafeSeparationDistanceCalculator_getSafeSeparationDistance_1=b.asm.qp).apply(null,arguments)},ts=b._emscripten_bind_SafeSeparationDistanceCalculator_getSafetyZoneSize_1=function(){return(ts=b._emscripten_bind_SafeSeparationDistanceCalculator_getSafetyZoneSize_1= -b.asm.rp).apply(null,arguments)},us=b._emscripten_bind_SafeSeparationDistanceCalculator_getVegetationHeight_1=function(){return(us=b._emscripten_bind_SafeSeparationDistanceCalculator_getVegetationHeight_1=b.asm.sp).apply(null,arguments)},vs=b._emscripten_bind_SafeSeparationDistanceCalculator_getSafetyCondition_0=function(){return(vs=b._emscripten_bind_SafeSeparationDistanceCalculator_getSafetyCondition_0=b.asm.tp).apply(null,arguments)},ws=b._emscripten_bind_SafeSeparationDistanceCalculator_setBurningCondition_1= -function(){return(ws=b._emscripten_bind_SafeSeparationDistanceCalculator_setBurningCondition_1=b.asm.up).apply(null,arguments)},xs=b._emscripten_bind_SafeSeparationDistanceCalculator_setSlopeClass_1=function(){return(xs=b._emscripten_bind_SafeSeparationDistanceCalculator_setSlopeClass_1=b.asm.vp).apply(null,arguments)},ys=b._emscripten_bind_SafeSeparationDistanceCalculator_setSpeedClass_1=function(){return(ys=b._emscripten_bind_SafeSeparationDistanceCalculator_setSpeedClass_1=b.asm.wp).apply(null, -arguments)},zs=b._emscripten_bind_SafeSeparationDistanceCalculator_setVegetationHeight_2=function(){return(zs=b._emscripten_bind_SafeSeparationDistanceCalculator_setVegetationHeight_2=b.asm.xp).apply(null,arguments)},As=b._emscripten_bind_SafeSeparationDistanceCalculator___destroy___0=function(){return(As=b._emscripten_bind_SafeSeparationDistanceCalculator___destroy___0=b.asm.yp).apply(null,arguments)},Bs=b._emscripten_enum_AreaUnits_AreaUnitsEnum_SquareFeet=function(){return(Bs=b._emscripten_enum_AreaUnits_AreaUnitsEnum_SquareFeet= -b.asm.zp).apply(null,arguments)},Cs=b._emscripten_enum_AreaUnits_AreaUnitsEnum_Acres=function(){return(Cs=b._emscripten_enum_AreaUnits_AreaUnitsEnum_Acres=b.asm.Ap).apply(null,arguments)},Ds=b._emscripten_enum_AreaUnits_AreaUnitsEnum_Hectares=function(){return(Ds=b._emscripten_enum_AreaUnits_AreaUnitsEnum_Hectares=b.asm.Bp).apply(null,arguments)},Es=b._emscripten_enum_AreaUnits_AreaUnitsEnum_SquareMeters=function(){return(Es=b._emscripten_enum_AreaUnits_AreaUnitsEnum_SquareMeters=b.asm.Cp).apply(null, -arguments)},Fs=b._emscripten_enum_AreaUnits_AreaUnitsEnum_SquareMiles=function(){return(Fs=b._emscripten_enum_AreaUnits_AreaUnitsEnum_SquareMiles=b.asm.Dp).apply(null,arguments)},Gs=b._emscripten_enum_AreaUnits_AreaUnitsEnum_SquareKilometers=function(){return(Gs=b._emscripten_enum_AreaUnits_AreaUnitsEnum_SquareKilometers=b.asm.Ep).apply(null,arguments)},Hs=b._emscripten_enum_BasalAreaUnits_BasalAreaUnitsEnum_SquareFeetPerAcre=function(){return(Hs=b._emscripten_enum_BasalAreaUnits_BasalAreaUnitsEnum_SquareFeetPerAcre= -b.asm.Fp).apply(null,arguments)},Is=b._emscripten_enum_BasalAreaUnits_BasalAreaUnitsEnum_SquareMetersPerHectare=function(){return(Is=b._emscripten_enum_BasalAreaUnits_BasalAreaUnitsEnum_SquareMetersPerHectare=b.asm.Gp).apply(null,arguments)},Js=b._emscripten_enum_FractionUnits_FractionUnitsEnum_Fraction=function(){return(Js=b._emscripten_enum_FractionUnits_FractionUnitsEnum_Fraction=b.asm.Hp).apply(null,arguments)},Ks=b._emscripten_enum_FractionUnits_FractionUnitsEnum_Percent=function(){return(Ks= -b._emscripten_enum_FractionUnits_FractionUnitsEnum_Percent=b.asm.Ip).apply(null,arguments)},Ls=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Feet=function(){return(Ls=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Feet=b.asm.Jp).apply(null,arguments)},Ms=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Inches=function(){return(Ms=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Inches=b.asm.Kp).apply(null,arguments)},Ns=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Millimeters=function(){return(Ns= -b._emscripten_enum_LengthUnits_LengthUnitsEnum_Millimeters=b.asm.Lp).apply(null,arguments)},Os=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Centimeters=function(){return(Os=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Centimeters=b.asm.Mp).apply(null,arguments)},Ps=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Meters=function(){return(Ps=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Meters=b.asm.Np).apply(null,arguments)},Qs=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Chains=function(){return(Qs= -b._emscripten_enum_LengthUnits_LengthUnitsEnum_Chains=b.asm.Op).apply(null,arguments)},Rs=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Miles=function(){return(Rs=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Miles=b.asm.Pp).apply(null,arguments)},Ss=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Kilometers=function(){return(Ss=b._emscripten_enum_LengthUnits_LengthUnitsEnum_Kilometers=b.asm.Qp).apply(null,arguments)},Ts=b._emscripten_enum_LoadingUnits_LoadingUnitsEnum_PoundsPerSquareFoot=function(){return(Ts= -b._emscripten_enum_LoadingUnits_LoadingUnitsEnum_PoundsPerSquareFoot=b.asm.Rp).apply(null,arguments)},Us=b._emscripten_enum_LoadingUnits_LoadingUnitsEnum_TonsPerAcre=function(){return(Us=b._emscripten_enum_LoadingUnits_LoadingUnitsEnum_TonsPerAcre=b.asm.Sp).apply(null,arguments)},Vs=b._emscripten_enum_LoadingUnits_LoadingUnitsEnum_TonnesPerHectare=function(){return(Vs=b._emscripten_enum_LoadingUnits_LoadingUnitsEnum_TonnesPerHectare=b.asm.Tp).apply(null,arguments)},Ws=b._emscripten_enum_LoadingUnits_LoadingUnitsEnum_KilogramsPerSquareMeter= -function(){return(Ws=b._emscripten_enum_LoadingUnits_LoadingUnitsEnum_KilogramsPerSquareMeter=b.asm.Up).apply(null,arguments)},Xs=b._emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareFeetOverCubicFeet=function(){return(Xs=b._emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareFeetOverCubicFeet=b.asm.Vp).apply(null,arguments)},Ys=b._emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareMetersOverCubicMeters=function(){return(Ys= -b._emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareMetersOverCubicMeters=b.asm.Wp).apply(null,arguments)},Zs=b._emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareInchesOverCubicInches=function(){return(Zs=b._emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareInchesOverCubicInches=b.asm.Xp).apply(null,arguments)},$s=b._emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareCentimetersOverCubicCentimeters= -function(){return($s=b._emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareCentimetersOverCubicCentimeters=b.asm.Yp).apply(null,arguments)},at=b._emscripten_enum_SpeedUnits_SpeedUnitsEnum_FeetPerMinute=function(){return(at=b._emscripten_enum_SpeedUnits_SpeedUnitsEnum_FeetPerMinute=b.asm.Zp).apply(null,arguments)},bt=b._emscripten_enum_SpeedUnits_SpeedUnitsEnum_ChainsPerHour=function(){return(bt=b._emscripten_enum_SpeedUnits_SpeedUnitsEnum_ChainsPerHour=b.asm._p).apply(null, -arguments)},ct=b._emscripten_enum_SpeedUnits_SpeedUnitsEnum_MetersPerSecond=function(){return(ct=b._emscripten_enum_SpeedUnits_SpeedUnitsEnum_MetersPerSecond=b.asm.$p).apply(null,arguments)},dt=b._emscripten_enum_SpeedUnits_SpeedUnitsEnum_MetersPerMinute=function(){return(dt=b._emscripten_enum_SpeedUnits_SpeedUnitsEnum_MetersPerMinute=b.asm.aq).apply(null,arguments)},et=b._emscripten_enum_SpeedUnits_SpeedUnitsEnum_MilesPerHour=function(){return(et=b._emscripten_enum_SpeedUnits_SpeedUnitsEnum_MilesPerHour= -b.asm.bq).apply(null,arguments)},ft=b._emscripten_enum_SpeedUnits_SpeedUnitsEnum_KilometersPerHour=function(){return(ft=b._emscripten_enum_SpeedUnits_SpeedUnitsEnum_KilometersPerHour=b.asm.cq).apply(null,arguments)},gt=b._emscripten_enum_PressureUnits_PressureUnitsEnum_Pascal=function(){return(gt=b._emscripten_enum_PressureUnits_PressureUnitsEnum_Pascal=b.asm.dq).apply(null,arguments)},ht=b._emscripten_enum_PressureUnits_PressureUnitsEnum_HectoPascal=function(){return(ht=b._emscripten_enum_PressureUnits_PressureUnitsEnum_HectoPascal= -b.asm.eq).apply(null,arguments)},it=b._emscripten_enum_PressureUnits_PressureUnitsEnum_KiloPascal=function(){return(it=b._emscripten_enum_PressureUnits_PressureUnitsEnum_KiloPascal=b.asm.fq).apply(null,arguments)},jt=b._emscripten_enum_PressureUnits_PressureUnitsEnum_MegaPascal=function(){return(jt=b._emscripten_enum_PressureUnits_PressureUnitsEnum_MegaPascal=b.asm.gq).apply(null,arguments)},kt=b._emscripten_enum_PressureUnits_PressureUnitsEnum_GigaPascal=function(){return(kt=b._emscripten_enum_PressureUnits_PressureUnitsEnum_GigaPascal= -b.asm.hq).apply(null,arguments)},lt=b._emscripten_enum_PressureUnits_PressureUnitsEnum_Bar=function(){return(lt=b._emscripten_enum_PressureUnits_PressureUnitsEnum_Bar=b.asm.iq).apply(null,arguments)},mt=b._emscripten_enum_PressureUnits_PressureUnitsEnum_Atmosphere=function(){return(mt=b._emscripten_enum_PressureUnits_PressureUnitsEnum_Atmosphere=b.asm.jq).apply(null,arguments)},nt=b._emscripten_enum_PressureUnits_PressureUnitsEnum_TechnicalAtmosphere=function(){return(nt=b._emscripten_enum_PressureUnits_PressureUnitsEnum_TechnicalAtmosphere= -b.asm.kq).apply(null,arguments)},ot=b._emscripten_enum_PressureUnits_PressureUnitsEnum_PoundPerSquareInch=function(){return(ot=b._emscripten_enum_PressureUnits_PressureUnitsEnum_PoundPerSquareInch=b.asm.lq).apply(null,arguments)},pt=b._emscripten_enum_SlopeUnits_SlopeUnitsEnum_Degrees=function(){return(pt=b._emscripten_enum_SlopeUnits_SlopeUnitsEnum_Degrees=b.asm.mq).apply(null,arguments)},qt=b._emscripten_enum_SlopeUnits_SlopeUnitsEnum_Percent=function(){return(qt=b._emscripten_enum_SlopeUnits_SlopeUnitsEnum_Percent= -b.asm.nq).apply(null,arguments)},rt=b._emscripten_enum_DensityUnits_DensityUnitsEnum_PoundsPerCubicFoot=function(){return(rt=b._emscripten_enum_DensityUnits_DensityUnitsEnum_PoundsPerCubicFoot=b.asm.oq).apply(null,arguments)},st=b._emscripten_enum_DensityUnits_DensityUnitsEnum_KilogramsPerCubicMeter=function(){return(st=b._emscripten_enum_DensityUnits_DensityUnitsEnum_KilogramsPerCubicMeter=b.asm.pq).apply(null,arguments)},tt=b._emscripten_enum_HeatOfCombustionUnits_HeatOfCombustionUnitsEnum_BtusPerPound= -function(){return(tt=b._emscripten_enum_HeatOfCombustionUnits_HeatOfCombustionUnitsEnum_BtusPerPound=b.asm.qq).apply(null,arguments)},ut=b._emscripten_enum_HeatOfCombustionUnits_HeatOfCombustionUnitsEnum_KilojoulesPerKilogram=function(){return(ut=b._emscripten_enum_HeatOfCombustionUnits_HeatOfCombustionUnitsEnum_KilojoulesPerKilogram=b.asm.rq).apply(null,arguments)},vt=b._emscripten_enum_HeatSinkUnits_HeatSinkUnitsEnum_BtusPerCubicFoot=function(){return(vt=b._emscripten_enum_HeatSinkUnits_HeatSinkUnitsEnum_BtusPerCubicFoot= -b.asm.sq).apply(null,arguments)},wt=b._emscripten_enum_HeatSinkUnits_HeatSinkUnitsEnum_KilojoulesPerCubicMeter=function(){return(wt=b._emscripten_enum_HeatSinkUnits_HeatSinkUnitsEnum_KilojoulesPerCubicMeter=b.asm.tq).apply(null,arguments)},xt=b._emscripten_enum_HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum_BtusPerSquareFoot=function(){return(xt=b._emscripten_enum_HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum_BtusPerSquareFoot=b.asm.uq).apply(null,arguments)},yt=b._emscripten_enum_HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum_KilojoulesPerSquareMeter= -function(){return(yt=b._emscripten_enum_HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum_KilojoulesPerSquareMeter=b.asm.vq).apply(null,arguments)},zt=b._emscripten_enum_HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum_KilowattSecondsPerSquareMeter=function(){return(zt=b._emscripten_enum_HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum_KilowattSecondsPerSquareMeter=b.asm.wq).apply(null,arguments)},At=b._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_BtusPerSquareFootPerMinute= -function(){return(At=b._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_BtusPerSquareFootPerMinute=b.asm.xq).apply(null,arguments)},Bt=b._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_BtusPerSquareFootPerSecond=function(){return(Bt=b._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_BtusPerSquareFootPerSecond=b.asm.yq).apply(null,arguments)},Ct=b._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_KilojoulesPerSquareMeterPerSecond= -function(){return(Ct=b._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_KilojoulesPerSquareMeterPerSecond=b.asm.zq).apply(null,arguments)},Dt=b._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_KilojoulesPerSquareMeterPerMinute=function(){return(Dt=b._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_KilojoulesPerSquareMeterPerMinute=b.asm.Aq).apply(null,arguments)},Et= -b._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_KilowattsPerSquareMeter=function(){return(Et=b._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_KilowattsPerSquareMeter=b.asm.Bq).apply(null,arguments)},Ft=b._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_BtusPerFootPerSecond=function(){return(Ft=b._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_BtusPerFootPerSecond=b.asm.Cq).apply(null, -arguments)},Gt=b._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_BtusPerFootPerMinute=function(){return(Gt=b._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_BtusPerFootPerMinute=b.asm.Dq).apply(null,arguments)},Ht=b._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_KilojoulesPerMeterPerSecond=function(){return(Ht=b._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_KilojoulesPerMeterPerSecond=b.asm.Eq).apply(null,arguments)},It= -b._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_KilojoulesPerMeterPerMinute=function(){return(It=b._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_KilojoulesPerMeterPerMinute=b.asm.Fq).apply(null,arguments)},Jt=b._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_KilowattsPerMeter=function(){return(Jt=b._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_KilowattsPerMeter=b.asm.Gq).apply(null,arguments)},Kt=b._emscripten_enum_TemperatureUnits_TemperatureUnitsEnum_Fahrenheit= -function(){return(Kt=b._emscripten_enum_TemperatureUnits_TemperatureUnitsEnum_Fahrenheit=b.asm.Hq).apply(null,arguments)},Lt=b._emscripten_enum_TemperatureUnits_TemperatureUnitsEnum_Celsius=function(){return(Lt=b._emscripten_enum_TemperatureUnits_TemperatureUnitsEnum_Celsius=b.asm.Iq).apply(null,arguments)},Mt=b._emscripten_enum_TemperatureUnits_TemperatureUnitsEnum_Kelvin=function(){return(Mt=b._emscripten_enum_TemperatureUnits_TemperatureUnitsEnum_Kelvin=b.asm.Jq).apply(null,arguments)},Nt=b._emscripten_enum_TimeUnits_TimeUnitsEnum_Minutes= -function(){return(Nt=b._emscripten_enum_TimeUnits_TimeUnitsEnum_Minutes=b.asm.Kq).apply(null,arguments)},Ot=b._emscripten_enum_TimeUnits_TimeUnitsEnum_Seconds=function(){return(Ot=b._emscripten_enum_TimeUnits_TimeUnitsEnum_Seconds=b.asm.Lq).apply(null,arguments)},Pt=b._emscripten_enum_TimeUnits_TimeUnitsEnum_Hours=function(){return(Pt=b._emscripten_enum_TimeUnits_TimeUnitsEnum_Hours=b.asm.Mq).apply(null,arguments)},Qt=b._emscripten_enum_ContainTactic_ContainTacticEnum_HeadAttack=function(){return(Qt= -b._emscripten_enum_ContainTactic_ContainTacticEnum_HeadAttack=b.asm.Nq).apply(null,arguments)},Rt=b._emscripten_enum_ContainTactic_ContainTacticEnum_RearAttack=function(){return(Rt=b._emscripten_enum_ContainTactic_ContainTacticEnum_RearAttack=b.asm.Oq).apply(null,arguments)},St=b._emscripten_enum_ContainStatus_ContainStatusEnum_Unreported=function(){return(St=b._emscripten_enum_ContainStatus_ContainStatusEnum_Unreported=b.asm.Pq).apply(null,arguments)},Tt=b._emscripten_enum_ContainStatus_ContainStatusEnum_Reported= -function(){return(Tt=b._emscripten_enum_ContainStatus_ContainStatusEnum_Reported=b.asm.Qq).apply(null,arguments)},Ut=b._emscripten_enum_ContainStatus_ContainStatusEnum_Attacked=function(){return(Ut=b._emscripten_enum_ContainStatus_ContainStatusEnum_Attacked=b.asm.Rq).apply(null,arguments)},Vt=b._emscripten_enum_ContainStatus_ContainStatusEnum_Contained=function(){return(Vt=b._emscripten_enum_ContainStatus_ContainStatusEnum_Contained=b.asm.Sq).apply(null,arguments)},Wt=b._emscripten_enum_ContainStatus_ContainStatusEnum_Overrun= -function(){return(Wt=b._emscripten_enum_ContainStatus_ContainStatusEnum_Overrun=b.asm.Tq).apply(null,arguments)},Xt=b._emscripten_enum_ContainStatus_ContainStatusEnum_Exhausted=function(){return(Xt=b._emscripten_enum_ContainStatus_ContainStatusEnum_Exhausted=b.asm.Uq).apply(null,arguments)},Yt=b._emscripten_enum_ContainStatus_ContainStatusEnum_Overflow=function(){return(Yt=b._emscripten_enum_ContainStatus_ContainStatusEnum_Overflow=b.asm.Vq).apply(null,arguments)},Zt=b._emscripten_enum_ContainStatus_ContainStatusEnum_SizeLimitExceeded= -function(){return(Zt=b._emscripten_enum_ContainStatus_ContainStatusEnum_SizeLimitExceeded=b.asm.Wq).apply(null,arguments)},$t=b._emscripten_enum_ContainStatus_ContainStatusEnum_TimeLimitExceeded=function(){return($t=b._emscripten_enum_ContainStatus_ContainStatusEnum_TimeLimitExceeded=b.asm.Xq).apply(null,arguments)},au=b._emscripten_enum_ContainFlank_ContainFlankEnum_LeftFlank=function(){return(au=b._emscripten_enum_ContainFlank_ContainFlankEnum_LeftFlank=b.asm.Yq).apply(null,arguments)},bu=b._emscripten_enum_ContainFlank_ContainFlankEnum_RightFlank= -function(){return(bu=b._emscripten_enum_ContainFlank_ContainFlankEnum_RightFlank=b.asm.Zq).apply(null,arguments)},cu=b._emscripten_enum_ContainFlank_ContainFlankEnum_BothFlanks=function(){return(cu=b._emscripten_enum_ContainFlank_ContainFlankEnum_BothFlanks=b.asm._q).apply(null,arguments)},du=b._emscripten_enum_ContainFlank_ContainFlankEnum_NeitherFlank=function(){return(du=b._emscripten_enum_ContainFlank_ContainFlankEnum_NeitherFlank=b.asm.$q).apply(null,arguments)},eu=b._emscripten_enum_ContainMode_Default= -function(){return(eu=b._emscripten_enum_ContainMode_Default=b.asm.ar).apply(null,arguments)},fu=b._emscripten_enum_ContainMode_ComputeWithOptimalResource=function(){return(fu=b._emscripten_enum_ContainMode_ComputeWithOptimalResource=b.asm.br).apply(null,arguments)},gu=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PonderosaPineLitter=function(){return(gu=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PonderosaPineLitter=b.asm.cr).apply(null,arguments)},hu=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PunkyWoodRottenChunky= -function(){return(hu=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PunkyWoodRottenChunky=b.asm.dr).apply(null,arguments)},iu=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PunkyWoodPowderDeep=function(){return(iu=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PunkyWoodPowderDeep=b.asm.er).apply(null,arguments)},ju=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PunkWoodPowderShallow=function(){return(ju=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PunkWoodPowderShallow= -b.asm.fr).apply(null,arguments)},ku=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_LodgepolePineDuff=function(){return(ku=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_LodgepolePineDuff=b.asm.gr).apply(null,arguments)},lu=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_DouglasFirDuff=function(){return(lu=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_DouglasFirDuff=b.asm.hr).apply(null,arguments)},mu=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_HighAltitudeMixed= -function(){return(mu=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_HighAltitudeMixed=b.asm.ir).apply(null,arguments)},nu=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PeatMoss=function(){return(nu=b._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PeatMoss=b.asm.jr).apply(null,arguments)},ou=b._emscripten_enum_LightningCharge_LightningChargeEnum_Negative=function(){return(ou=b._emscripten_enum_LightningCharge_LightningChargeEnum_Negative=b.asm.kr).apply(null, -arguments)},pu=b._emscripten_enum_LightningCharge_LightningChargeEnum_Positive=function(){return(pu=b._emscripten_enum_LightningCharge_LightningChargeEnum_Positive=b.asm.lr).apply(null,arguments)},qu=b._emscripten_enum_LightningCharge_LightningChargeEnum_Unknown=function(){return(qu=b._emscripten_enum_LightningCharge_LightningChargeEnum_Unknown=b.asm.mr).apply(null,arguments)},ru=b._emscripten_enum_SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum_CLOSED=function(){return(ru=b._emscripten_enum_SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum_CLOSED= -b.asm.nr).apply(null,arguments)},su=b._emscripten_enum_SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum_OPEN=function(){return(su=b._emscripten_enum_SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum_OPEN=b.asm.or).apply(null,arguments)},tu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_ENGELMANN_SPRUCE=function(){return(tu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_ENGELMANN_SPRUCE=b.asm.pr).apply(null,arguments)},uu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_DOUGLAS_FIR= -function(){return(uu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_DOUGLAS_FIR=b.asm.qr).apply(null,arguments)},vu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_SUBALPINE_FIR=function(){return(vu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_SUBALPINE_FIR=b.asm.rr).apply(null,arguments)},wu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_WESTERN_HEMLOCK=function(){return(wu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_WESTERN_HEMLOCK=b.asm.sr).apply(null, -arguments)},xu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_PONDEROSA_PINE=function(){return(xu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_PONDEROSA_PINE=b.asm.tr).apply(null,arguments)},yu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_LODGEPOLE_PINE=function(){return(yu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_LODGEPOLE_PINE=b.asm.ur).apply(null,arguments)},zu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_WESTERN_WHITE_PINE=function(){return(zu= -b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_WESTERN_WHITE_PINE=b.asm.vr).apply(null,arguments)},Au=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_GRAND_FIR=function(){return(Au=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_GRAND_FIR=b.asm.wr).apply(null,arguments)},Bu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_BALSAM_FIR=function(){return(Bu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_BALSAM_FIR=b.asm.xr).apply(null,arguments)},Cu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_SLASH_PINE= -function(){return(Cu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_SLASH_PINE=b.asm.yr).apply(null,arguments)},Du=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_LONGLEAF_PINE=function(){return(Du=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_LONGLEAF_PINE=b.asm.zr).apply(null,arguments)},Eu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_POND_PINE=function(){return(Eu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_POND_PINE=b.asm.Ar).apply(null,arguments)}, -Fu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_SHORTLEAF_PINE=function(){return(Fu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_SHORTLEAF_PINE=b.asm.Br).apply(null,arguments)},Gu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_LOBLOLLY_PINE=function(){return(Gu=b._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_LOBLOLLY_PINE=b.asm.Cr).apply(null,arguments)},Hu=b._emscripten_enum_SpotFireLocation_SpotFireLocationEnum_MIDSLOPE_WINDWARD=function(){return(Hu=b._emscripten_enum_SpotFireLocation_SpotFireLocationEnum_MIDSLOPE_WINDWARD= -b.asm.Dr).apply(null,arguments)},Iu=b._emscripten_enum_SpotFireLocation_SpotFireLocationEnum_VALLEY_BOTTOM=function(){return(Iu=b._emscripten_enum_SpotFireLocation_SpotFireLocationEnum_VALLEY_BOTTOM=b.asm.Er).apply(null,arguments)},Ju=b._emscripten_enum_SpotFireLocation_SpotFireLocationEnum_MIDSLOPE_LEEWARD=function(){return(Ju=b._emscripten_enum_SpotFireLocation_SpotFireLocationEnum_MIDSLOPE_LEEWARD=b.asm.Fr).apply(null,arguments)},Ku=b._emscripten_enum_SpotFireLocation_SpotFireLocationEnum_RIDGE_TOP= -function(){return(Ku=b._emscripten_enum_SpotFireLocation_SpotFireLocationEnum_RIDGE_TOP=b.asm.Gr).apply(null,arguments)},Lu=b._emscripten_enum_FuelLifeState_FuelLifeStateEnum_Dead=function(){return(Lu=b._emscripten_enum_FuelLifeState_FuelLifeStateEnum_Dead=b.asm.Hr).apply(null,arguments)},Mu=b._emscripten_enum_FuelLifeState_FuelLifeStateEnum_Live=function(){return(Mu=b._emscripten_enum_FuelLifeState_FuelLifeStateEnum_Live=b.asm.Ir).apply(null,arguments)},Nu=b._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxLifeStates= -function(){return(Nu=b._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxLifeStates=b.asm.Jr).apply(null,arguments)},Ou=b._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxLiveSizeClasses=function(){return(Ou=b._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxLiveSizeClasses=b.asm.Kr).apply(null,arguments)},Pu=b._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxDeadSizeClasses=function(){return(Pu=b._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxDeadSizeClasses=b.asm.Lr).apply(null, -arguments)},Qu=b._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxParticles=function(){return(Qu=b._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxParticles=b.asm.Mr).apply(null,arguments)},Ru=b._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxSavrSizeClasses=function(){return(Ru=b._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxSavrSizeClasses=b.asm.Nr).apply(null,arguments)},Su=b._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxFuelModels=function(){return(Su= -b._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxFuelModels=b.asm.Or).apply(null,arguments)},Tu=b._emscripten_enum_AspenFireSeverity_AspenFireSeverityEnum_Low=function(){return(Tu=b._emscripten_enum_AspenFireSeverity_AspenFireSeverityEnum_Low=b.asm.Pr).apply(null,arguments)},Uu=b._emscripten_enum_AspenFireSeverity_AspenFireSeverityEnum_Moderate=function(){return(Uu=b._emscripten_enum_AspenFireSeverity_AspenFireSeverityEnum_Moderate=b.asm.Qr).apply(null,arguments)},Vu=b._emscripten_enum_ChaparralFuelType_ChaparralFuelTypeEnum_NotSet= -function(){return(Vu=b._emscripten_enum_ChaparralFuelType_ChaparralFuelTypeEnum_NotSet=b.asm.Rr).apply(null,arguments)},Wu=b._emscripten_enum_ChaparralFuelType_ChaparralFuelTypeEnum_Chamise=function(){return(Wu=b._emscripten_enum_ChaparralFuelType_ChaparralFuelTypeEnum_Chamise=b.asm.Sr).apply(null,arguments)},Xu=b._emscripten_enum_ChaparralFuelType_ChaparralFuelTypeEnum_MixedBrush=function(){return(Xu=b._emscripten_enum_ChaparralFuelType_ChaparralFuelTypeEnum_MixedBrush=b.asm.Tr).apply(null,arguments)}, -Yu=b._emscripten_enum_ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum_DirectFuelLoad=function(){return(Yu=b._emscripten_enum_ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum_DirectFuelLoad=b.asm.Ur).apply(null,arguments)},Zu=b._emscripten_enum_ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum_FuelLoadFromDepthAndChaparralType=function(){return(Zu=b._emscripten_enum_ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum_FuelLoadFromDepthAndChaparralType=b.asm.Vr).apply(null, -arguments)},$u=b._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_BySizeClass=function(){return($u=b._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_BySizeClass=b.asm.Wr).apply(null,arguments)},av=b._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_AllAggregate=function(){return(av=b._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_AllAggregate=b.asm.Xr).apply(null,arguments)},bv=b._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_DeadAggregateAndLiveSizeClass= -function(){return(bv=b._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_DeadAggregateAndLiveSizeClass=b.asm.Yr).apply(null,arguments)},cv=b._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_LiveAggregateAndDeadSizeClass=function(){return(cv=b._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_LiveAggregateAndDeadSizeClass=b.asm.Zr).apply(null,arguments)},dv=b._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_MoistureScenario=function(){return(dv=b._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_MoistureScenario= -b.asm._r).apply(null,arguments)},ev=b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_OneHour=function(){return(ev=b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_OneHour=b.asm.$r).apply(null,arguments)},fv=b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_TenHour=function(){return(fv=b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_TenHour=b.asm.as).apply(null,arguments)},gv=b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_HundredHour=function(){return(gv= -b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_HundredHour=b.asm.bs).apply(null,arguments)},hv=b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_LiveHerbaceous=function(){return(hv=b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_LiveHerbaceous=b.asm.cs).apply(null,arguments)},iv=b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_LiveWoody=function(){return(iv=b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_LiveWoody=b.asm.ds).apply(null, -arguments)},jv=b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_DeadAggregate=function(){return(jv=b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_DeadAggregate=b.asm.es).apply(null,arguments)},kv=b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_LiveAggregate=function(){return(kv=b._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_LiveAggregate=b.asm.fs).apply(null,arguments)},lv=b._emscripten_enum_SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum_FromIgnitionPoint= -function(){return(lv=b._emscripten_enum_SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum_FromIgnitionPoint=b.asm.gs).apply(null,arguments)},mv=b._emscripten_enum_SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum_FromPerimeter=function(){return(mv=b._emscripten_enum_SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum_FromPerimeter=b.asm.hs).apply(null,arguments)},nv=b._emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_NoMethod=function(){return(nv= -b._emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_NoMethod=b.asm.is).apply(null,arguments)},ov=b._emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_Arithmetic=function(){return(ov=b._emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_Arithmetic=b.asm.js).apply(null,arguments)},pv=b._emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_Harmonic=function(){return(pv=b._emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_Harmonic=b.asm.ks).apply(null,arguments)}, -qv=b._emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_TwoDimensional=function(){return(qv=b._emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_TwoDimensional=b.asm.ls).apply(null,arguments)},rv=b._emscripten_enum_WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum_Unsheltered=function(){return(rv=b._emscripten_enum_WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum_Unsheltered=b.asm.ms).apply(null,arguments)},sv=b._emscripten_enum_WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum_Sheltered= -function(){return(sv=b._emscripten_enum_WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum_Sheltered=b.asm.ns).apply(null,arguments)},tv=b._emscripten_enum_WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum_UserInput=function(){return(tv=b._emscripten_enum_WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum_UserInput=b.asm.os).apply(null,arguments)},uv=b._emscripten_enum_WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum_UseCrownRatio= -function(){return(uv=b._emscripten_enum_WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum_UseCrownRatio=b.asm.ps).apply(null,arguments)},vv=b._emscripten_enum_WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum_DontUseCrownRatio=function(){return(vv=b._emscripten_enum_WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum_DontUseCrownRatio=b.asm.qs).apply(null,arguments)},wv=b._emscripten_enum_WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum_RelativeToUpslope= -function(){return(wv=b._emscripten_enum_WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum_RelativeToUpslope=b.asm.rs).apply(null,arguments)},xv=b._emscripten_enum_WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum_RelativeToNorth=function(){return(xv=b._emscripten_enum_WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum_RelativeToNorth=b.asm.ss).apply(null,arguments)},yv=b._emscripten_enum_WindHeightInputMode_WindHeightInputModeEnum_DirectMidflame=function(){return(yv= -b._emscripten_enum_WindHeightInputMode_WindHeightInputModeEnum_DirectMidflame=b.asm.ts).apply(null,arguments)},zv=b._emscripten_enum_WindHeightInputMode_WindHeightInputModeEnum_TwentyFoot=function(){return(zv=b._emscripten_enum_WindHeightInputMode_WindHeightInputModeEnum_TwentyFoot=b.asm.us).apply(null,arguments)},Av=b._emscripten_enum_WindHeightInputMode_WindHeightInputModeEnum_TenMeter=function(){return(Av=b._emscripten_enum_WindHeightInputMode_WindHeightInputModeEnum_TenMeter=b.asm.vs).apply(null, -arguments)},Bv=b._emscripten_enum_WindUpslopeAlignmentMode_NotAligned=function(){return(Bv=b._emscripten_enum_WindUpslopeAlignmentMode_NotAligned=b.asm.ws).apply(null,arguments)},Cv=b._emscripten_enum_WindUpslopeAlignmentMode_Aligned=function(){return(Cv=b._emscripten_enum_WindUpslopeAlignmentMode_Aligned=b.asm.xs).apply(null,arguments)},Dv=b._emscripten_enum_SurfaceRunInDirectionOf_MaxSpread=function(){return(Dv=b._emscripten_enum_SurfaceRunInDirectionOf_MaxSpread=b.asm.ys).apply(null,arguments)}, -Ev=b._emscripten_enum_SurfaceRunInDirectionOf_DirectionOfInterest=function(){return(Ev=b._emscripten_enum_SurfaceRunInDirectionOf_DirectionOfInterest=b.asm.zs).apply(null,arguments)},Fv=b._emscripten_enum_SurfaceRunInDirectionOf_HeadingBackingFlanking=function(){return(Fv=b._emscripten_enum_SurfaceRunInDirectionOf_HeadingBackingFlanking=b.asm.As).apply(null,arguments)},Gv=b._emscripten_enum_FireType_FireTypeEnum_Surface=function(){return(Gv=b._emscripten_enum_FireType_FireTypeEnum_Surface=b.asm.Bs).apply(null, -arguments)},Iv=b._emscripten_enum_FireType_FireTypeEnum_Torching=function(){return(Iv=b._emscripten_enum_FireType_FireTypeEnum_Torching=b.asm.Cs).apply(null,arguments)},Jv=b._emscripten_enum_FireType_FireTypeEnum_ConditionalCrownFire=function(){return(Jv=b._emscripten_enum_FireType_FireTypeEnum_ConditionalCrownFire=b.asm.Ds).apply(null,arguments)},Kv=b._emscripten_enum_FireType_FireTypeEnum_Crowning=function(){return(Kv=b._emscripten_enum_FireType_FireTypeEnum_Crowning=b.asm.Es).apply(null,arguments)}, -Lv=b._emscripten_enum_BeetleDamage_not_set=function(){return(Lv=b._emscripten_enum_BeetleDamage_not_set=b.asm.Fs).apply(null,arguments)},Mv=b._emscripten_enum_BeetleDamage_no=function(){return(Mv=b._emscripten_enum_BeetleDamage_no=b.asm.Gs).apply(null,arguments)},Nv=b._emscripten_enum_BeetleDamage_yes=function(){return(Nv=b._emscripten_enum_BeetleDamage_yes=b.asm.Hs).apply(null,arguments)},Ov=b._emscripten_enum_CrownFireCalculationMethod_rothermel=function(){return(Ov=b._emscripten_enum_CrownFireCalculationMethod_rothermel= -b.asm.Is).apply(null,arguments)},Pv=b._emscripten_enum_CrownFireCalculationMethod_scott_and_reinhardt=function(){return(Pv=b._emscripten_enum_CrownFireCalculationMethod_scott_and_reinhardt=b.asm.Js).apply(null,arguments)},Qv=b._emscripten_enum_CrownDamageEquationCode_not_set=function(){return(Qv=b._emscripten_enum_CrownDamageEquationCode_not_set=b.asm.Ks).apply(null,arguments)},Rv=b._emscripten_enum_CrownDamageEquationCode_white_fir=function(){return(Rv=b._emscripten_enum_CrownDamageEquationCode_white_fir= -b.asm.Ls).apply(null,arguments)},Sv=b._emscripten_enum_CrownDamageEquationCode_subalpine_fir=function(){return(Sv=b._emscripten_enum_CrownDamageEquationCode_subalpine_fir=b.asm.Ms).apply(null,arguments)},Tv=b._emscripten_enum_CrownDamageEquationCode_incense_cedar=function(){return(Tv=b._emscripten_enum_CrownDamageEquationCode_incense_cedar=b.asm.Ns).apply(null,arguments)},Uv=b._emscripten_enum_CrownDamageEquationCode_western_larch=function(){return(Uv=b._emscripten_enum_CrownDamageEquationCode_western_larch= -b.asm.Os).apply(null,arguments)},Vv=b._emscripten_enum_CrownDamageEquationCode_whitebark_pine=function(){return(Vv=b._emscripten_enum_CrownDamageEquationCode_whitebark_pine=b.asm.Ps).apply(null,arguments)},Wv=b._emscripten_enum_CrownDamageEquationCode_engelmann_spruce=function(){return(Wv=b._emscripten_enum_CrownDamageEquationCode_engelmann_spruce=b.asm.Qs).apply(null,arguments)},Xv=b._emscripten_enum_CrownDamageEquationCode_sugar_pine=function(){return(Xv=b._emscripten_enum_CrownDamageEquationCode_sugar_pine= -b.asm.Rs).apply(null,arguments)},Yv=b._emscripten_enum_CrownDamageEquationCode_red_fir=function(){return(Yv=b._emscripten_enum_CrownDamageEquationCode_red_fir=b.asm.Ss).apply(null,arguments)},Zv=b._emscripten_enum_CrownDamageEquationCode_ponderosa_pine=function(){return(Zv=b._emscripten_enum_CrownDamageEquationCode_ponderosa_pine=b.asm.Ts).apply(null,arguments)},$v=b._emscripten_enum_CrownDamageEquationCode_ponderosa_kill=function(){return($v=b._emscripten_enum_CrownDamageEquationCode_ponderosa_kill= -b.asm.Us).apply(null,arguments)},aw=b._emscripten_enum_CrownDamageEquationCode_douglas_fir=function(){return(aw=b._emscripten_enum_CrownDamageEquationCode_douglas_fir=b.asm.Vs).apply(null,arguments)},bw=b._emscripten_enum_CrownDamageType_not_set=function(){return(bw=b._emscripten_enum_CrownDamageType_not_set=b.asm.Ws).apply(null,arguments)},cw=b._emscripten_enum_CrownDamageType_crown_length=function(){return(cw=b._emscripten_enum_CrownDamageType_crown_length=b.asm.Xs).apply(null,arguments)},dw=b._emscripten_enum_CrownDamageType_crown_volume= -function(){return(dw=b._emscripten_enum_CrownDamageType_crown_volume=b.asm.Ys).apply(null,arguments)},ew=b._emscripten_enum_CrownDamageType_crown_kill=function(){return(ew=b._emscripten_enum_CrownDamageType_crown_kill=b.asm.Zs).apply(null,arguments)},fw=b._emscripten_enum_EquationType_not_set=function(){return(fw=b._emscripten_enum_EquationType_not_set=b.asm._s).apply(null,arguments)},gw=b._emscripten_enum_EquationType_crown_scorch=function(){return(gw=b._emscripten_enum_EquationType_crown_scorch= -b.asm.$s).apply(null,arguments)},hw=b._emscripten_enum_EquationType_bole_char=function(){return(hw=b._emscripten_enum_EquationType_bole_char=b.asm.at).apply(null,arguments)},iw=b._emscripten_enum_EquationType_crown_damage=function(){return(iw=b._emscripten_enum_EquationType_crown_damage=b.asm.bt).apply(null,arguments)},jw=b._emscripten_enum_FireSeverity_not_set=function(){return(jw=b._emscripten_enum_FireSeverity_not_set=b.asm.ct).apply(null,arguments)},kw=b._emscripten_enum_FireSeverity_empty=function(){return(kw= -b._emscripten_enum_FireSeverity_empty=b.asm.dt).apply(null,arguments)},lw=b._emscripten_enum_FireSeverity_low=function(){return(lw=b._emscripten_enum_FireSeverity_low=b.asm.et).apply(null,arguments)},mw=b._emscripten_enum_FlameLengthOrScorchHeightSwitch_flame_length=function(){return(mw=b._emscripten_enum_FlameLengthOrScorchHeightSwitch_flame_length=b.asm.ft).apply(null,arguments)},nw=b._emscripten_enum_FlameLengthOrScorchHeightSwitch_scorch_height=function(){return(nw=b._emscripten_enum_FlameLengthOrScorchHeightSwitch_scorch_height= -b.asm.gt).apply(null,arguments)},ow=b._emscripten_enum_GACC_NotSet=function(){return(ow=b._emscripten_enum_GACC_NotSet=b.asm.ht).apply(null,arguments)},pw=b._emscripten_enum_GACC_Alaska=function(){return(pw=b._emscripten_enum_GACC_Alaska=b.asm.it).apply(null,arguments)},qw=b._emscripten_enum_GACC_California=function(){return(qw=b._emscripten_enum_GACC_California=b.asm.jt).apply(null,arguments)},rw=b._emscripten_enum_GACC_EasternArea=function(){return(rw=b._emscripten_enum_GACC_EasternArea=b.asm.kt).apply(null, -arguments)},sw=b._emscripten_enum_GACC_GreatBasin=function(){return(sw=b._emscripten_enum_GACC_GreatBasin=b.asm.lt).apply(null,arguments)},tw=b._emscripten_enum_GACC_NorthernRockies=function(){return(tw=b._emscripten_enum_GACC_NorthernRockies=b.asm.mt).apply(null,arguments)},uw=b._emscripten_enum_GACC_Northwest=function(){return(uw=b._emscripten_enum_GACC_Northwest=b.asm.nt).apply(null,arguments)},vw=b._emscripten_enum_GACC_RockeyMountain=function(){return(vw=b._emscripten_enum_GACC_RockeyMountain= -b.asm.ot).apply(null,arguments)},ww=b._emscripten_enum_GACC_SouthernArea=function(){return(ww=b._emscripten_enum_GACC_SouthernArea=b.asm.pt).apply(null,arguments)},xw=b._emscripten_enum_GACC_Southwest=function(){return(xw=b._emscripten_enum_GACC_Southwest=b.asm.qt).apply(null,arguments)},yw=b._emscripten_enum_RequiredFieldNames_region=function(){return(yw=b._emscripten_enum_RequiredFieldNames_region=b.asm.rt).apply(null,arguments)},zw=b._emscripten_enum_RequiredFieldNames_flame_length_or_scorch_height_switch= -function(){return(zw=b._emscripten_enum_RequiredFieldNames_flame_length_or_scorch_height_switch=b.asm.st).apply(null,arguments)},Aw=b._emscripten_enum_RequiredFieldNames_flame_length_or_scorch_height_value=function(){return(Aw=b._emscripten_enum_RequiredFieldNames_flame_length_or_scorch_height_value=b.asm.tt).apply(null,arguments)},Bw=b._emscripten_enum_RequiredFieldNames_equation_type=function(){return(Bw=b._emscripten_enum_RequiredFieldNames_equation_type=b.asm.ut).apply(null,arguments)},Cw=b._emscripten_enum_RequiredFieldNames_dbh= -function(){return(Cw=b._emscripten_enum_RequiredFieldNames_dbh=b.asm.vt).apply(null,arguments)},Dw=b._emscripten_enum_RequiredFieldNames_tree_height=function(){return(Dw=b._emscripten_enum_RequiredFieldNames_tree_height=b.asm.wt).apply(null,arguments)},Ew=b._emscripten_enum_RequiredFieldNames_crown_ratio=function(){return(Ew=b._emscripten_enum_RequiredFieldNames_crown_ratio=b.asm.xt).apply(null,arguments)},Fw=b._emscripten_enum_RequiredFieldNames_crown_damage=function(){return(Fw=b._emscripten_enum_RequiredFieldNames_crown_damage= -b.asm.yt).apply(null,arguments)},Gw=b._emscripten_enum_RequiredFieldNames_cambium_kill_rating=function(){return(Gw=b._emscripten_enum_RequiredFieldNames_cambium_kill_rating=b.asm.zt).apply(null,arguments)},Hw=b._emscripten_enum_RequiredFieldNames_beetle_damage=function(){return(Hw=b._emscripten_enum_RequiredFieldNames_beetle_damage=b.asm.At).apply(null,arguments)},Iw=b._emscripten_enum_RequiredFieldNames_bole_char_height=function(){return(Iw=b._emscripten_enum_RequiredFieldNames_bole_char_height= -b.asm.Bt).apply(null,arguments)},Jw=b._emscripten_enum_RequiredFieldNames_bark_thickness=function(){return(Jw=b._emscripten_enum_RequiredFieldNames_bark_thickness=b.asm.Ct).apply(null,arguments)},Kw=b._emscripten_enum_RequiredFieldNames_fire_severity=function(){return(Kw=b._emscripten_enum_RequiredFieldNames_fire_severity=b.asm.Dt).apply(null,arguments)},Lw=b._emscripten_enum_RequiredFieldNames_num_inputs=function(){return(Lw=b._emscripten_enum_RequiredFieldNames_num_inputs=b.asm.Et).apply(null,arguments)}, -Mw=b._emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_NORTH=function(){return(Mw=b._emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_NORTH=b.asm.Ft).apply(null,arguments)},Nw=b._emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_EAST=function(){return(Nw=b._emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_EAST=b.asm.Gt).apply(null,arguments)},Ow=b._emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_SOUTH=function(){return(Ow=b._emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_SOUTH= -b.asm.Ht).apply(null,arguments)},Pw=b._emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_WEST=function(){return(Pw=b._emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_WEST=b.asm.It).apply(null,arguments)},Qw=b._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_TEN_TO_TWENTY_NINE_DEGREES_F=function(){return(Qw=b._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_TEN_TO_TWENTY_NINE_DEGREES_F=b.asm.Jt).apply(null,arguments)},Rw=b._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_THRITY_TO_FOURTY_NINE_DEGREES_F= -function(){return(Rw=b._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_THRITY_TO_FOURTY_NINE_DEGREES_F=b.asm.Kt).apply(null,arguments)},Sw=b._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_FIFTY_TO_SIXTY_NINE_DEGREES_F=function(){return(Sw=b._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_FIFTY_TO_SIXTY_NINE_DEGREES_F=b.asm.Lt).apply(null,arguments)},Tw=b._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_SEVENTY_TO_EIGHTY_NINE_DEGREES_F=function(){return(Tw=b._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_SEVENTY_TO_EIGHTY_NINE_DEGREES_F= -b.asm.Mt).apply(null,arguments)},Uw=b._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_NINETY_TO_ONE_HUNDRED_NINE_DEGREES_F=function(){return(Uw=b._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_NINETY_TO_ONE_HUNDRED_NINE_DEGREES_F=b.asm.Nt).apply(null,arguments)},Vw=b._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_GREATER_THAN_ONE_HUNDRED_NINE_DEGREES_F=function(){return(Vw=b._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_GREATER_THAN_ONE_HUNDRED_NINE_DEGREES_F=b.asm.Ot).apply(null, -arguments)},Ww=b._emscripten_enum_FDFMToolElevationIndex_ElevationIndexEnum_BELOW_1000_TO_2000_FT=function(){return(Ww=b._emscripten_enum_FDFMToolElevationIndex_ElevationIndexEnum_BELOW_1000_TO_2000_FT=b.asm.Pt).apply(null,arguments)},Xw=b._emscripten_enum_FDFMToolElevationIndex_ElevationIndexEnum_LEVEL_WITHIN_1000_FT=function(){return(Xw=b._emscripten_enum_FDFMToolElevationIndex_ElevationIndexEnum_LEVEL_WITHIN_1000_FT=b.asm.Qt).apply(null,arguments)},Yw=b._emscripten_enum_FDFMToolElevationIndex_ElevationIndexEnum_ABOVE_1000_TO_2000_FT= -function(){return(Yw=b._emscripten_enum_FDFMToolElevationIndex_ElevationIndexEnum_ABOVE_1000_TO_2000_FT=b.asm.Rt).apply(null,arguments)},Zw=b._emscripten_enum_FDFMToolMonthIndex_MonthIndexEnum_MAY_JUNE_JULY=function(){return(Zw=b._emscripten_enum_FDFMToolMonthIndex_MonthIndexEnum_MAY_JUNE_JULY=b.asm.St).apply(null,arguments)},$w=b._emscripten_enum_FDFMToolMonthIndex_MonthIndexEnum_FEB_MAR_APR_AUG_SEP_OCT=function(){return($w=b._emscripten_enum_FDFMToolMonthIndex_MonthIndexEnum_FEB_MAR_APR_AUG_SEP_OCT= -b.asm.Tt).apply(null,arguments)},ax=b._emscripten_enum_FDFMToolMonthIndex_MonthIndexEnum_NOV_DEC_JAN=function(){return(ax=b._emscripten_enum_FDFMToolMonthIndex_MonthIndexEnum_NOV_DEC_JAN=b.asm.Ut).apply(null,arguments)},bx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_ZERO_TO_FOUR_PERCENT=function(){return(bx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_ZERO_TO_FOUR_PERCENT=b.asm.Vt).apply(null,arguments)},cx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FIVE_TO_NINE_PERCENT=function(){return(cx= -b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FIVE_TO_NINE_PERCENT=b.asm.Wt).apply(null,arguments)},dx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_TEN_TO_FOURTEEN_PERCENT=function(){return(dx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_TEN_TO_FOURTEEN_PERCENT=b.asm.Xt).apply(null,arguments)},ex=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FIFTEEN_TO_NINETEEN_PERCENT=function(){return(ex=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FIFTEEN_TO_NINETEEN_PERCENT=b.asm.Yt).apply(null,arguments)}, -fx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_TWENTY_TO_TWENTY_FOUR_PERCENT=function(){return(fx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_TWENTY_TO_TWENTY_FOUR_PERCENT=b.asm.Zt).apply(null,arguments)},gx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_TWENTY_FIVE_TO_TWENTY_NINE_PERCENT=function(){return(gx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_TWENTY_FIVE_TO_TWENTY_NINE_PERCENT=b.asm._t).apply(null,arguments)},hx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_THIRTY_TO_THIRTY_FOUR_PERCENT= -function(){return(hx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_THIRTY_TO_THIRTY_FOUR_PERCENT=b.asm.$t).apply(null,arguments)},ix=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_THIRTY_FIVE_TO_THIRTY_NINE_PERCENT=function(){return(ix=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_THIRTY_FIVE_TO_THIRTY_NINE_PERCENT=b.asm.au).apply(null,arguments)},jx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FORTY_TO_FORTY_FOUR_PERCENT=function(){return(jx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FORTY_TO_FORTY_FOUR_PERCENT= -b.asm.bu).apply(null,arguments)},kx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FORTY_FIVE_TO_FORTY_NINE_PERCENT=function(){return(kx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FORTY_FIVE_TO_FORTY_NINE_PERCENT=b.asm.cu).apply(null,arguments)},lx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FIFTY_TO_FIFTY_FOUR_PERCENT=function(){return(lx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FIFTY_TO_FIFTY_FOUR_PERCENT=b.asm.du).apply(null,arguments)},mx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FIFTY_FIVE_TO_FIFTY_NINE_PERCENT= -function(){return(mx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FIFTY_FIVE_TO_FIFTY_NINE_PERCENT=b.asm.eu).apply(null,arguments)},nx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_SIXTY_TO_SIXTY_FOUR_PERCENT=function(){return(nx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_SIXTY_TO_SIXTY_FOUR_PERCENT=b.asm.fu).apply(null,arguments)},ox=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_SIXTY_FIVE_TO_SIXTY_NINE_PERCENT=function(){return(ox=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_SIXTY_FIVE_TO_SIXTY_NINE_PERCENT= -b.asm.gu).apply(null,arguments)},px=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_SEVENTY_TO_SEVENTY_FOUR_PERCENT=function(){return(px=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_SEVENTY_TO_SEVENTY_FOUR_PERCENT=b.asm.hu).apply(null,arguments)},qx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_SEVENTY_FIVE_TO_SEVENTY_NINE_PERCENT=function(){return(qx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_SEVENTY_FIVE_TO_SEVENTY_NINE_PERCENT=b.asm.iu).apply(null,arguments)},rx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_EIGHTY_TO_EIGHTY_FOUR_PERCENT= -function(){return(rx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_EIGHTY_TO_EIGHTY_FOUR_PERCENT=b.asm.ju).apply(null,arguments)},sx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_EIGHTY_FIVE_TO_EIGHTY_NINE_PERCENT=function(){return(sx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_EIGHTY_FIVE_TO_EIGHTY_NINE_PERCENT=b.asm.ku).apply(null,arguments)},tx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_NINETY_TO_NINETY_FOUR_PERCENT=function(){return(tx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_NINETY_TO_NINETY_FOUR_PERCENT= -b.asm.lu).apply(null,arguments)},ux=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_NINETY_FIVE_TO_NINETY_NINE_PERCENT=function(){return(ux=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_NINETY_FIVE_TO_NINETY_NINE_PERCENT=b.asm.mu).apply(null,arguments)},vx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_ONE_HUNDRED_PERCENT=function(){return(vx=b._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_ONE_HUNDRED_PERCENT=b.asm.nu).apply(null,arguments)},wx=b._emscripten_enum_FDFMToolShadingIndex_ShadingIndexEnum_EXPOSED= -function(){return(wx=b._emscripten_enum_FDFMToolShadingIndex_ShadingIndexEnum_EXPOSED=b.asm.ou).apply(null,arguments)},xx=b._emscripten_enum_FDFMToolShadingIndex_ShadingIndexEnum_SHADED=function(){return(xx=b._emscripten_enum_FDFMToolShadingIndex_ShadingIndexEnum_SHADED=b.asm.pu).apply(null,arguments)},yx=b._emscripten_enum_FDFMToolSlopeIndex_SlopeIndexEnum_ZERO_TO_THIRTY_PERCENT=function(){return(yx=b._emscripten_enum_FDFMToolSlopeIndex_SlopeIndexEnum_ZERO_TO_THIRTY_PERCENT=b.asm.qu).apply(null, -arguments)},zx=b._emscripten_enum_FDFMToolSlopeIndex_SlopeIndexEnum_GREATER_THAN_OR_EQUAL_TO_THIRTY_ONE_PERCENT=function(){return(zx=b._emscripten_enum_FDFMToolSlopeIndex_SlopeIndexEnum_GREATER_THAN_OR_EQUAL_TO_THIRTY_ONE_PERCENT=b.asm.ru).apply(null,arguments)},Ax=b._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_EIGHT_HUNDRED_HOURS_TO_NINE_HUNDRED_FIFTY_NINE=function(){return(Ax=b._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_EIGHT_HUNDRED_HOURS_TO_NINE_HUNDRED_FIFTY_NINE= -b.asm.su).apply(null,arguments)},Bx=b._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_TEN_HUNDRED_HOURS_TO_ELEVEN__HUNDRED_FIFTY_NINE=function(){return(Bx=b._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_TEN_HUNDRED_HOURS_TO_ELEVEN__HUNDRED_FIFTY_NINE=b.asm.tu).apply(null,arguments)},Cx=b._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_TWELVE_HUNDRED_HOURS_TO_THIRTEEN_HUNDRED_FIFTY_NINE=function(){return(Cx=b._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_TWELVE_HUNDRED_HOURS_TO_THIRTEEN_HUNDRED_FIFTY_NINE= -b.asm.uu).apply(null,arguments)},Dx=b._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_FOURTEEN_HUNDRED_HOURS_TO_FIFTEEN_HUNDRED_FIFTY_NINE=function(){return(Dx=b._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_FOURTEEN_HUNDRED_HOURS_TO_FIFTEEN_HUNDRED_FIFTY_NINE=b.asm.vu).apply(null,arguments)},Ex=b._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_SIXTEEN_HUNDRED_HOURS_TO_SIXTEEN_HUNDRED_FIFTY_NINE=function(){return(Ex=b._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_SIXTEEN_HUNDRED_HOURS_TO_SIXTEEN_HUNDRED_FIFTY_NINE= -b.asm.wu).apply(null,arguments)},Fx=b._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_EIGHTTEEN_HUNDRED_HOURS_TO_SUNSET=function(){return(Fx=b._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_EIGHTTEEN_HUNDRED_HOURS_TO_SUNSET=b.asm.xu).apply(null,arguments)},Gx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_NINTEEN_HUNDRED_EIGHTY=function(){return(Gx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_NINTEEN_HUNDRED_EIGHTY=b.asm.yu).apply(null, -arguments)},Hx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_THREE_THOUSAND_NINEHUNDRED_SIXTY=function(){return(Hx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_THREE_THOUSAND_NINEHUNDRED_SIXTY=b.asm.zu).apply(null,arguments)},Ix=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_SEVEN_THOUSAND_NINEHUNDRED_TWENTY=function(){return(Ix=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_SEVEN_THOUSAND_NINEHUNDRED_TWENTY= -b.asm.Au).apply(null,arguments)},Jx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TEN_THOUSAND=function(){return(Jx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TEN_THOUSAND=b.asm.Bu).apply(null,arguments)},Kx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_FIFTEEN_THOUSAND_EIGHT_HUNDRED_FORTY=function(){return(Kx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_FIFTEEN_THOUSAND_EIGHT_HUNDRED_FORTY=b.asm.Cu).apply(null, -arguments)},Lx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TWENTY_ONE_THOUSAND_ONE_HUNDRED_TWENTY=function(){return(Lx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TWENTY_ONE_THOUSAND_ONE_HUNDRED_TWENTY=b.asm.Du).apply(null,arguments)},Mx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TWENTY_FOUR_THOUSAND=function(){return(Mx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TWENTY_FOUR_THOUSAND=b.asm.Eu).apply(null, -arguments)},Nx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_THRITY_ONE_THOUSAND_SIX_HUNDRED_EIGHTY=function(){return(Nx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_THRITY_ONE_THOUSAND_SIX_HUNDRED_EIGHTY=b.asm.Fu).apply(null,arguments)},Ox=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_FIFTY_THOUSAND=function(){return(Ox=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_FIFTY_THOUSAND=b.asm.Gu).apply(null,arguments)}, -Px=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_SIXTY_TWO_THOUSAND_FIVE_HUNDRED=function(){return(Px=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_SIXTY_TWO_THOUSAND_FIVE_HUNDRED=b.asm.Hu).apply(null,arguments)},Qx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_SIXTY_THREE_THOUSAND_THREE_HUNDRED_SIXTY=function(){return(Qx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_SIXTY_THREE_THOUSAND_THREE_HUNDRED_SIXTY= -b.asm.Iu).apply(null,arguments)},Rx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_ONE_HUNDRED_THOUSAND=function(){return(Rx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_ONE_HUNDRED_THOUSAND=b.asm.Ju).apply(null,arguments)},Sx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_ONE_HUNDRED_TWENTY_SIX_THOUSAND_SEVEN_HUNDRED_TWENTY=function(){return(Sx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_ONE_HUNDRED_TWENTY_SIX_THOUSAND_SEVEN_HUNDRED_TWENTY= -b.asm.Ku).apply(null,arguments)},Tx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TWO_HUNDRED_FIFTY_THOUSAND=function(){return(Tx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TWO_HUNDRED_FIFTY_THOUSAND=b.asm.Lu).apply(null,arguments)},Ux=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TWO_HUNDRED_FIFTY_THREE_THOUSAND_FOUR_HUNDRED_FORTY=function(){return(Ux=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TWO_HUNDRED_FIFTY_THREE_THOUSAND_FOUR_HUNDRED_FORTY= -b.asm.Mu).apply(null,arguments)},Vx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_FIVE_HUNDRED_SIX_THOUSAND_EIGHT_HUNDRED_EIGHTY=function(){return(Vx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_FIVE_HUNDRED_SIX_THOUSAND_EIGHT_HUNDRED_EIGHTY=b.asm.Nu).apply(null,arguments)},Wx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_ONE_MILLION=function(){return(Wx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_ONE_MILLION= -b.asm.Ou).apply(null,arguments)},Xx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_ONE_MILLION_THIRTEEN_THOUSAND_SEVEN_HUNDRED_SIXTY=function(){return(Xx=b._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_ONE_MILLION_THIRTEEN_THOUSAND_SEVEN_HUNDRED_SIXTY=b.asm.Pu).apply(null,arguments)},Yx=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_UPSLOPE_ZERO_DEGREES=function(){return(Yx=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_UPSLOPE_ZERO_DEGREES= -b.asm.Qu).apply(null,arguments)},Zx=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_FIFTEEN_DEGREES_FROM_UPSLOPE=function(){return(Zx=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_FIFTEEN_DEGREES_FROM_UPSLOPE=b.asm.Ru).apply(null,arguments)},$x=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_THIRTY_DEGREES_FROM_UPSLOPE=function(){return($x=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_THIRTY_DEGREES_FROM_UPSLOPE= -b.asm.Su).apply(null,arguments)},ay=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_FORTY_FIVE_DEGREES_FROM_UPSLOPE=function(){return(ay=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_FORTY_FIVE_DEGREES_FROM_UPSLOPE=b.asm.Tu).apply(null,arguments)},by=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_SIXTY_DEGREES_FROM_UPSLOPE=function(){return(by=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_SIXTY_DEGREES_FROM_UPSLOPE= -b.asm.Uu).apply(null,arguments)},cy=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_SEVENTY_FIVE_DEGREES_FROM_UPSLOPE=function(){return(cy=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_SEVENTY_FIVE_DEGREES_FROM_UPSLOPE=b.asm.Vu).apply(null,arguments)},dy=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_CROSS_SLOPE_NINETY_DEGREES=function(){return(dy=b._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_CROSS_SLOPE_NINETY_DEGREES= -b.asm.Wu).apply(null,arguments)},ey=b._emscripten_enum_BurningCondition_BurningConditionEnum_Low=function(){return(ey=b._emscripten_enum_BurningCondition_BurningConditionEnum_Low=b.asm.Xu).apply(null,arguments)},fy=b._emscripten_enum_BurningCondition_BurningConditionEnum_Moderate=function(){return(fy=b._emscripten_enum_BurningCondition_BurningConditionEnum_Moderate=b.asm.Yu).apply(null,arguments)},gy=b._emscripten_enum_BurningCondition_BurningConditionEnum_Extreme=function(){return(gy=b._emscripten_enum_BurningCondition_BurningConditionEnum_Extreme= -b.asm.Zu).apply(null,arguments)},hy=b._emscripten_enum_SlopeClass_SlopeClassEnum_Flat=function(){return(hy=b._emscripten_enum_SlopeClass_SlopeClassEnum_Flat=b.asm._u).apply(null,arguments)},iy=b._emscripten_enum_SlopeClass_SlopeClassEnum_Moderate=function(){return(iy=b._emscripten_enum_SlopeClass_SlopeClassEnum_Moderate=b.asm.$u).apply(null,arguments)},jy=b._emscripten_enum_SlopeClass_SlopeClassEnum_Steep=function(){return(jy=b._emscripten_enum_SlopeClass_SlopeClassEnum_Steep=b.asm.av).apply(null, -arguments)},ky=b._emscripten_enum_SpeedClass_SpeedClassEnum_Light=function(){return(ky=b._emscripten_enum_SpeedClass_SpeedClassEnum_Light=b.asm.bv).apply(null,arguments)},ly=b._emscripten_enum_SpeedClass_SpeedClassEnum_Moderate=function(){return(ly=b._emscripten_enum_SpeedClass_SpeedClassEnum_Moderate=b.asm.cv).apply(null,arguments)},my=b._emscripten_enum_SpeedClass_SpeedClassEnum_High=function(){return(my=b._emscripten_enum_SpeedClass_SpeedClassEnum_High=b.asm.dv).apply(null,arguments)},ny=b._emscripten_enum_SafetyCondition_SafetyConditionEnum_Low= -function(){return(ny=b._emscripten_enum_SafetyCondition_SafetyConditionEnum_Low=b.asm.ev).apply(null,arguments)},oy=b._emscripten_enum_SafetyCondition_SafetyConditionEnum_Moderate=function(){return(oy=b._emscripten_enum_SafetyCondition_SafetyConditionEnum_Moderate=b.asm.fv).apply(null,arguments)},py=b._emscripten_enum_SafetyCondition_SafetyConditionEnum_Extreme=function(){return(py=b._emscripten_enum_SafetyCondition_SafetyConditionEnum_Extreme=b.asm.gv).apply(null,arguments)}; -function ac(){return(ac=b.asm.hv).apply(null,arguments)}function bc(){return(bc=b.asm.jv).apply(null,arguments)}var qy=b._malloc=function(){return(qy=b._malloc=b.asm.kv).apply(null,arguments)};b._free=function(){return(b._free=b.asm.lv).apply(null,arguments)};function $b(){return($b=b.asm.mv).apply(null,arguments)}function Wa(){return(Wa=b.asm.nv).apply(null,arguments)}function A(){return(A=b.asm.ov).apply(null,arguments)}function D(){return(D=b.asm.pv).apply(null,arguments)} -function Zb(){return(Zb=b.asm.qv).apply(null,arguments)}function Xa(){return(Xa=b.asm.rv).apply(null,arguments)}function Ua(){return(Ua=b.asm.sv).apply(null,arguments)}b.___start_em_js=38824;b.___stop_em_js=38922;function oc(a,c,d){var e=A();try{n(a)(c,d)}catch(f){D(e);if(f!==f+0)throw f;$b(1,0)}}function nc(a,c){var d=A();try{n(a)(c)}catch(e){D(d);if(e!==e+0)throw e;$b(1,0)}} -function sc(a,c,d,e,f,h,k,l,q,m,r,t,u,y,v,z,x,B,C){var H=A();try{n(a)(c,d,e,f,h,k,l,q,m,r,t,u,y,v,z,x,B,C)}catch(F){D(H);if(F!==F+0)throw F;$b(1,0)}}function ec(a,c){var d=A();try{return n(a)(c)}catch(e){D(d);if(e!==e+0)throw e;$b(1,0)}}function pc(a,c,d,e){var f=A();try{n(a)(c,d,e)}catch(h){D(f);if(h!==h+0)throw h;$b(1,0)}}function ic(a,c,d){var e=A();try{return n(a)(c,d)}catch(f){D(e);if(f!==f+0)throw f;$b(1,0)}} -function cc(a,c,d,e){var f=A();try{return n(a)(c,d,e)}catch(h){D(f);if(h!==h+0)throw h;$b(1,0)}}function rc(a,c,d,e,f){var h=A();try{n(a)(c,d,e,f)}catch(k){D(h);if(k!==k+0)throw k;$b(1,0)}}function jc(a,c,d,e){var f=A();try{return n(a)(c,d,e)}catch(h){D(f);if(h!==h+0)throw h;$b(1,0)}}function tc(a,c,d,e,f,h){var k=A();try{n(a)(c,d,e,f,h)}catch(l){D(k);if(l!==l+0)throw l;$b(1,0)}}function qc(a,c,d,e,f,h,k,l,q){var m=A();try{n(a)(c,d,e,f,h,k,l,q)}catch(r){D(m);if(r!==r+0)throw r;$b(1,0)}} -function dc(a,c,d,e,f,h,k,l,q,m){var r=A();try{return n(a)(c,d,e,f,h,k,l,q,m)}catch(t){D(r);if(t!==t+0)throw t;$b(1,0)}}function kc(a,c,d,e,f){var h=A();try{return n(a)(c,d,e,f)}catch(k){D(h);if(k!==k+0)throw k;$b(1,0)}}function lc(a,c,d,e,f,h,k,l,q,m,r,t,u,y,v,z,x,B,C,H,F,L,U){var V=A();try{return n(a)(c,d,e,f,h,k,l,q,m,r,t,u,y,v,z,x,B,C,H,F,L,U)}catch(Q){D(V);if(Q!==Q+0)throw Q;$b(1,0)}} -function gc(a,c,d,e,f,h,k,l,q,m,r,t,u){var y=A();try{return n(a)(c,d,e,f,h,k,l,q,m,r,t,u)}catch(v){D(y);if(v!==v+0)throw v;$b(1,0)}}function hc(a,c,d,e,f,h,k,l,q,m,r,t,u,y,v){var z=A();try{return n(a)(c,d,e,f,h,k,l,q,m,r,t,u,y,v)}catch(x){D(z);if(x!==x+0)throw x;$b(1,0)}}function mc(a){var c=A();try{n(a)()}catch(d){D(c);if(d!==d+0)throw d;$b(1,0)}}function fc(a,c,d,e,f,h){var k=A();try{return n(a)(c,d,e,f,h)}catch(l){D(k);if(l!==l+0)throw l;$b(1,0)}} -function uc(a,c,d,e,f,h,k,l,q,m,r,t,u,y,v,z,x,B,C){var H=A();try{n(a)(c,d,e,f,h,k,l,q,m,r,t,u,y,v,z,x,B,C)}catch(F){D(H);if(F!==F+0)throw F;$b(1,0)}}b.UTF8ToString=g;b.ccall=Yb;b.cwrap=function(a,c,d,e){var f=!d||d.every(h=>"number"===h||"boolean"===h);return"string"!==c&&f&&!e?b["_"+a]:function(){return Yb(a,c,d,arguments,e)}}; -b.addFunction=function(a,c){if(!Wb){Wb=new WeakMap;var d=wa.length;if(Wb)for(var e=0;e<0+d;e++){var f=n(e);f&&Wb.set(f,e)}}if(d=Wb.get(a)||0)return d;if(Xb.length)d=Xb.pop();else{try{wa.grow(1)}catch(l){if(!(l instanceof RangeError))throw l;throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.";}d=wa.length-1}try{e=d,wa.set(e,a),Sa[e]=wa.get(e)}catch(l){if(!(l instanceof TypeError))throw l;if("function"==typeof WebAssembly.Function){e=WebAssembly.Function;f={i:"i32",j:"i32",f:"f32",d:"f64",p:"i32"}; -for(var h={parameters:[],results:"v"==c[0]?[]:[f[c[0]]]},k=1;kk?e.push(k):e.push(k%128|128,k>>7);for(k=0;kf?c.push(f):c.push(f%128|128,f>>7);c.push.apply(c,e);c.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);c= -new WebAssembly.Module(new Uint8Array(c));c=(new WebAssembly.Instance(c,{e:{f:a}})).exports.f}e=d;wa.set(e,c);Sa[e]=wa.get(e)}Wb.set(a,d);return d};b.allocateUTF8=function(a){var c=pa(a)+1,d=qy(c);d&&oa(a,qa,d,c);return d};var ry;Ea=function sy(){ry||ty();ry||(Ea=sy)}; -function ty(){function a(){if(!ry&&(ry=!0,b.calledRun=!0,!ka)){Aa=!0;b.noFSInit||Ob||(Ob=!0,Nb(),b.stdin=b.stdin,b.stdout=b.stdout,b.stderr=b.stderr,b.stdin?Rb("stdin",b.stdin):Jb("/dev/tty","/dev/stdin"),b.stdout?Rb("stdout",null,b.stdout):Jb("/dev/tty","/dev/stdout"),b.stderr?Rb("stderr",null,b.stderr):Jb("/dev/tty1","/dev/stderr"),Lb("/dev/stdin",0),Lb("/dev/stdout",1),Lb("/dev/stderr",1));tb=!1;Oa(ya);aa(b);if(b.onRuntimeInitialized)b.onRuntimeInitialized();if(b.postRun)for("function"==typeof b.postRun&& -(b.postRun=[b.postRun]);b.postRun.length;){var c=b.postRun.shift();za.unshift(c)}Oa(za)}}if(!(0=wy){0>>0;switch(e.BYTES_PER_ELEMENT){case 2:d>>>=1;break;case 4:d>>>=2;break;case 8:d>>>=3}for(var f=0;f{var _scriptName=globalThis.document?.currentScript?.src;return async function(moduleArg={}){var moduleRtn;var d=moduleArg;d.onRuntimeInitialized=window.Iw;var aa="",ba;try{aa=(new URL(".",_scriptName)).href}catch{}ba=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);};var ca=console.log.bind(console),da=console.error.bind(console),ea,fa=!1,ha,ia,ja,ka,la,ma,na,oa,qa=!1; +function ra(){var a=sa.buffer;ja=new Int8Array(a);la=new Int16Array(a);ka=new Uint8Array(a);new Uint16Array(a);ma=new Int32Array(a);na=new Uint32Array(a);new Float32Array(a);new Float64Array(a);oa=new BigInt64Array(a);new BigUint64Array(a)}function ta(a){d.onAbort?.(a);a="Aborted("+a+")";da(a);fa=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ia?.(a);throw a;}var ua; +async function va(a){if(!ea)try{var b=await ba(a);return new Uint8Array(b)}catch{}if(a==ua&&ea)a=new Uint8Array(ea);else throw"both async and sync fetching of the wasm failed";return a}async function wa(a,b){try{var c=await va(a);return await WebAssembly.instantiate(c,b)}catch(e){da(`failed to asynchronously prepare wasm: ${e}`),ta(e)}} +async function xa(a){var b=ua;if(!ea)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(e){da(`wasm streaming compile failed: ${e}`),da("falling back to ArrayBuffer instantiation")}return wa(b,a)}var ya=a=>{for(;a.length>0;)a.shift()(d)},za=[],Aa=[],Ba=()=>{var a=d.preRun.shift();Aa.push(a)},Ca=[],Da=0,Ea=0;class Fa{constructor(a){this.vv=a-24}init(a,b){na[this.vv+16>>2]=0;na[this.vv+4>>2]=a;na[this.vv+8>>2]=b}} +var Ia=a=>{var b=Ea;if(!b)return Ga(0),0;var c=new Fa(b);na[c.vv+16>>2]=b;var e=na[c.vv+4>>2];if(!e)return Ga(0),b;for(var f of a){if(f===0||f===e)break;if(Ha(f,e,c.vv+16))return Ga(f),b}Ga(e);return b},Ka=()=>{var a=ma[+Ja>>2];Ja+=4;return a},La=(a,b)=>{for(var c=0,e=a.length-1;e>=0;e--){var f=a[e];f==="."?a.splice(e,1):f===".."?(a.splice(e,1),c++):c&&(a.splice(e,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},Ma=a=>{var b=a.charAt(0)==="/",c=a.slice(-1)==="/";(a=La(a.split("/").filter(e=>!!e), +!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},Na=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},Oa=()=>a=>crypto.getRandomValues(a),Pa=a=>{(Pa=Oa())(a)},Qa=(...a)=>{for(var b="",c=!1,e=a.length-1;e>=-1&&!c;e--){c=e>=0?a[e]:"/";if(typeof c!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c=c.charAt(0)==="/"}b=La(b.split("/").filter(f=> +!!f),!c).join("/");return(c?"/":"")+b||"."},Ra=globalThis.TextDecoder&&new TextDecoder,Sa=(a,b=0,c,e)=>{var f=b;c=f+c;if(e)e=c;else{for(;a[f]&&!(f>=c);)++f;e=f}if(e-b>16&&a.buffer&&Ra)return Ra.decode(a.subarray(b,e));for(f="";b>10,56320|c&1023))}}else f+= +String.fromCharCode(c);return f},Ta=[],Ua=a=>{for(var b=0,c=0;c=55296&&e<=57343?(b+=4,++c):b+=3}return b},Va=(a,b,c,e)=>{if(!(e>0))return 0;var f=c;e=c+e-1;for(var h=0;h=e)break;b[c++]=k}else if(k<=2047){if(c+1>=e)break;b[c++]=192|k>>6;b[c++]=128|k&63}else if(k<=65535){if(c+2>=e)break;b[c++]=224|k>>12;b[c++]=128|k>>6&63;b[c++]=128|k&63}else{if(c+3>=e)break;b[c++]=240|k>>18;b[c++]=128| +k>>12&63;b[c++]=128|k>>6&63;b[c++]=128|k&63;h++}}b[c]=0;return c-f},Wa=(a,b)=>{var c=Array(Ua(a)+1);a=Va(a,c,0,c.length);b&&(c.length=a);return c},Xa=[];function Ya(a,b){Xa[a]={input:[],output:[],Iv:b};Za(a,$a)} +var $a={open(a){var b=Xa[a.node.Uv];if(!b)throw new g(43);a.Bv=b;a.seekable=!1},close(a){a.Bv.Iv.Rv(a.Bv)},Rv(a){a.Bv.Iv.Rv(a.Bv)},read(a,b,c,e){if(!a.Bv||!a.Bv.Iv.cw)throw new g(60);for(var f=0,h=0;h0&&(ca(Sa(a.output)),a.output=[])},mw(){return{xw:25856,zw:5,ww:191,yw:35387,uw:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},nw(){return 0},ow(){return[24, +80]}},bb={$v(a,b){b===null||b===10?(da(Sa(a.output)),a.output=[]):b!=0&&a.output.push(b)},Rv(a){a.output?.length>0&&(da(Sa(a.output)),a.output=[])}},n={Gv:null,Hv(){return n.createNode(null,"/",16895,0)},createNode(a,b,c,e){if((c&61440)===24576||(c&61440)===4096)throw new g(63);n.Gv||(n.Gv={dir:{node:{Mv:n.Av.Mv,Jv:n.Av.Jv,Pv:n.Av.Pv,Sv:n.Av.Sv,hw:n.Av.hw,jw:n.Av.jw,iw:n.Av.iw,aw:n.Av.aw,Vv:n.Av.Vv},stream:{Fv:n.yv.Fv}},file:{node:{Mv:n.Av.Mv,Jv:n.Av.Jv},stream:{Fv:n.yv.Fv,read:n.yv.read,write:n.yv.write, +ew:n.yv.ew,gw:n.yv.gw}},link:{node:{Mv:n.Av.Mv,Jv:n.Av.Jv,Qv:n.Av.Qv},stream:{}},bw:{node:{Mv:n.Av.Mv,Jv:n.Av.Jv},stream:cb}});c=db(a,b,c,e);(c.mode&61440)===16384?(c.Av=n.Gv.dir.node,c.yv=n.Gv.dir.stream,c.zv={}):(c.mode&61440)===32768?(c.Av=n.Gv.file.node,c.yv=n.Gv.file.stream,c.Cv=0,c.zv=null):(c.mode&61440)===40960?(c.Av=n.Gv.link.node,c.yv=n.Gv.link.stream):(c.mode&61440)===8192&&(c.Av=n.Gv.bw.node,c.yv=n.Gv.bw.stream);c.Nv=c.Ev=c.Dv=Date.now();a&&(a.zv[b]=c,a.Nv=a.Ev=a.Dv=c.Nv);return c},Dw(a){return a.zv? +a.zv.subarray?a.zv.subarray(0,a.Cv):new Uint8Array(a.zv):new Uint8Array(0)},Av:{Mv(a){var b={};b.Aw=(a.mode&61440)===8192?a.id:1;b.Fw=a.id;b.mode=a.mode;b.Gw=1;b.uid=0;b.Ew=0;b.Uv=a.Uv;(a.mode&61440)===16384?b.size=4096:(a.mode&61440)===32768?b.size=a.Cv:(a.mode&61440)===40960?b.size=a.link.length:b.size=0;b.Nv=new Date(a.Nv);b.Ev=new Date(a.Ev);b.Dv=new Date(a.Dv);b.kw=4096;b.tw=Math.ceil(b.size/b.kw);return b},Jv(a,b){for(var c of["mode","atime","mtime","ctime"])b[c]!=null&&(a[c]=b[c]);b.size!== +void 0&&(b=b.size,a.Cv!=b&&(b==0?(a.zv=null,a.Cv=0):(c=a.zv,a.zv=new Uint8Array(b),c&&a.zv.set(c.subarray(0,Math.min(b,a.Cv))),a.Cv=b)))},Pv(){n.Wv||(n.Wv=new g(44),n.Wv.stack="");throw n.Wv;},Sv(a,b,c,e){return n.createNode(a,b,c,e)},hw(a,b,c){try{var e=eb(b,c)}catch(h){}if(e){if((a.mode&61440)===16384)for(var f in e.zv)throw new g(55);f=fb(e.parent.id,e.name);if(gb[f]===e)gb[f]=e.Ov;else for(f=gb[f];f;){if(f.Ov===e){f.Ov=e.Ov;break}f=f.Ov}}delete a.parent.zv[a.name];b.zv[c]= +a;a.name=c;b.Dv=b.Ev=a.parent.Dv=a.parent.Ev=Date.now()},jw(a,b){delete a.zv[b];a.Dv=a.Ev=Date.now()},iw(a,b){var c=eb(a,b),e;for(e in c.zv)throw new g(55);delete a.zv[b];a.Dv=a.Ev=Date.now()},aw(a){return[".","..",...Object.keys(a.zv)]},Vv(a,b,c){a=n.createNode(a,b,41471,0);a.link=c;return a},Qv(a){if((a.mode&61440)!==40960)throw new g(28);return a.link}},yv:{read(a,b,c,e,f){var h=a.node.zv;if(f>=a.node.Cv)return 0;a=Math.min(a.node.Cv-f,e);if(a>8&&h.subarray)b.set(h.subarray(f,f+a),c);else for(e= +0;e=h||(h=Math.max(h,k*(k<1048576?2:1.125)>>>0),k!=0&&(h=Math.max(h,256)),k=a.zv,a.zv=new Uint8Array(h),a.Cv>0&&a.zv.set(k.subarray(0,a.Cv),0));if(a.zv.subarray&& +b.subarray)a.zv.set(b.subarray(c,c+e),f);else for(h=0;h0||c+b{var c=0;a&&(c|=365);b&&(c|=146);return c},ib=null,jb={},kb=[],lb=1,gb=null,mb=!1,nb=!0,ob={},g=class{name="ErrnoError";constructor(a){this.Kv=a}},pb=class{shared={};node=null;get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},qb=class{Av={};yv={};Tv=null;constructor(a,b,c,e){a||=this;this.parent=a;this.Hv=a.Hv;this.id= +lb++;this.name=b;this.mode=c;this.Uv=e;this.Nv=this.Ev=this.Dv=Date.now()}get read(){return(this.mode&365)===365}set read(a){a?this.mode|=365:this.mode&=-366}get write(){return(this.mode&146)===146}set write(a){a?this.mode|=146:this.mode&=-147}}; +function rb(a,b={}){if(!a)throw new g(44);b.Yv??(b.Yv=!0);a.charAt(0)==="/"||(a="//"+a);var c=0;a:for(;c<40;c++){a=a.split("/").filter(l=>!!l);for(var e=ib,f="/",h=0;h>>0)%gb.length}function eb(a,b){var c=(a.mode&61440)===16384?(c=sb(a,"x"))?c:a.Av.Pv?0:2:54;if(c)throw new g(c);for(c=gb[fb(a.id,b)];c;c=c.Ov){var e=c.name;if(c.parent.id===a.id&&e===b)return c}return a.Av.Pv(a,b)} +function db(a,b,c,e){a=new qb(a,b,c,e);b=fb(a.parent.id,a.name);a.Ov=gb[b];return gb[b]=a}function tb(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function sb(a,b){if(nb)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function ub(a,b){if((a.mode&61440)!==16384)return 54;try{return eb(a,b),20}catch(c){}return sb(a,"wx")}function vb(a){a=kb[a];if(!a)throw new g(8);return a} +function wb(a,b=-1){a=Object.assign(new pb,a);if(b==-1)a:{for(b=0;b<=4096;b++)if(!kb[b])break a;throw new g(33);}a.Lv=b;return kb[b]=a}function xb(a,b=-1){a=wb(a,b);a.yv?.Cw?.(a);return a}function yb(a,b){var c=void 0,e=c?null:a;c??=a.Av.Jv;if(!c)throw new g(63);c(e,b)}var cb={open(a){a.yv=jb[a.node.Uv].yv;a.yv.open?.(a)},Fv(){throw new g(70);}};function Za(a,b){jb[a]={yv:b}} +function zb(a,b){var c=b==="/";if(c&&ib)throw new g(10);if(!c&&b){var e=rb(b,{Yv:!1});b=e.path;e=e.node;if(e.Tv)throw new g(10);if((e.mode&61440)!==16384)throw new g(54);}b={type:a,Hw:{},fw:b,pw:[]};a=a.Hv(b);a.Hv=b;b.root=a;c?ib=a:e&&(e.Tv=b,e.Hv&&e.Hv.pw.push(b))}function Ab(a,b,c){var e=rb(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new g(28);if(a==="."||a==="..")throw new g(20);var f=ub(e,a);if(f)throw new g(f);if(!e.Av.Sv)throw new g(63);return e.Av.Sv(e,a,b,c)} +function Bb(a){return Ab(a,16895,0)}function Cb(a,b,c){typeof c=="undefined"&&(c=b,b=438);Ab(a,b|8192,c)}function Db(a,b){if(!Qa(a))throw new g(44);var c=rb(b,{parent:!0}).node;if(!c)throw new g(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var e=ub(c,b);if(e)throw new g(e);if(!c.Av.Vv)throw new g(63);c.Av.Vv(c,b,a)} +function Eb(a,b,c=438){if(a==="")throw new g(44);if(typeof b=="string"){var e={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if(typeof e=="undefined")throw Error(`Unknown file open mode: ${b}`);b=e}c=b&64?c&4095|32768:0;if(typeof a=="object")e=a;else{var f=a.endsWith("/");a=rb(a,{Xv:!(b&131072),qw:!0});e=a.node;a=a.path}var h=!1;if(b&64)if(e){if(b&128)throw new g(20);}else{if(f)throw new g(31);e=Ab(a,c|511,0);h=!0}if(!e)throw new g(44);(e.mode&61440)===8192&&(b&=-513);if(b&65536&&(e.mode&61440)!== +16384)throw new g(54);if(!h&&(f=e?(e.mode&61440)===40960?32:(e.mode&61440)===16384&&(tb(b)!=="r"||b&576)?31:sb(e,tb(b)):44))throw new g(f);if(b&512&&!h){f=e;f=typeof f=="string"?rb(f,{Xv:!0}).node:f;if((f.mode&61440)===16384)throw new g(31);if((f.mode&61440)!==32768)throw new g(28);var k=sb(f,"w");if(k)throw new g(k);yb(f,{size:0,timestamp:Date.now()})}b&=-131713;a:{for(f=e;;){if(f===f.parent){f=f.Hv.fw;var l=l?f[f.length-1]!=="/"?`${f}/${l}`:f+l:f;break a}l=l?`${f.name}/${l}`:f.name;f=f.parent}l= +void 0}l=wb({node:e,path:l,flags:b,seekable:!0,position:0,yv:e.yv,rw:[],error:!1});l.yv.open&&l.yv.open(l);h&&(c&=511,e=typeof e=="string"?rb(e,{Xv:!0}).node:e,yb(e,{mode:c&4095|e.mode&-4096,Dv:Date.now(),Bw:void 0}));!d.logReadFiles||b&1||a in ob||(ob[a]=1);return l}function Fb(a,b,c){if(a.Lv===null)throw new g(8);if(!a.seekable||!a.yv.Fv)throw new g(70);if(c!=0&&c!=1&&c!=2)throw new g(28);a.position=a.yv.Fv(a,b,c);a.rw=[]} +function Gb(a,b,c){a=Ma("/dev/"+a);var e=hb(!!b,!!c);Gb.dw??(Gb.dw=64);var f=Gb.dw++<<8|0;Za(f,{open(h){h.seekable=!1},close(){c?.buffer?.length&&c(10)},read(h,k,l,q){for(var m=0,r=0;ra?Sa(ka,a,b,c):"",Ja=void 0,Ib=[],Jb=[],Lb=a=>{var b=Jb[a];b||(Jb[a]=b=Kb.get(a));return b},Nb=a=>{var b=Ua(a)+1,c=Mb(b);c&&Va(a,ka,c,b);return c},Ob,Pb=[],Qb=a=>{const b=a.length;return[b%128|128,b>>7,...a]},Rb={i:127,p:127,j:126,f:125,d:124,e:111},Sb=a=>Qb(Array.from(a,b=>Rb[b])),Ub=(a,b,c,e)=>{var f={string:m=>{var r=0;if(m!==null&&m!==void 0&&m!==0){r=Ua(m)+1;var t=Tb(r);Va(m,ka,t,r);r=t}return r},array:m=>{var r=Tb(m.length);ja.set(m,r);return r}};a=d["_"+a];var h=[],k=0; +if(e)for(var l=0;l0,write:(e,f,h,k)=>k,Fv:()=>0});Cb("/dev/null",259);Ya(1280,ab);Ya(1536,bb);Cb("/dev/tty",1280);Cb("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{b===0&&(Pa(a),b=a.byteLength);return a[--b]};Gb("random",c);Gb("urandom",c);Bb("/dev/shm");Bb("/dev/shm/tmp")})(); +(function(){Bb("/proc");var a=Bb("/proc/self");Bb("/proc/self/fd");zb({Hv(){var b=db(a,"fd",16895,73);b.yv={Fv:n.yv.Fv};b.Av={Pv(c,e){c=+e;var f=vb(c);c={parent:null,Hv:{fw:"fake"},Av:{Qv:()=>f.path},id:c+1};return c.parent=c},aw(){return Array.from(kb.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})();d.print&&(ca=d.print);d.printErr&&(da=d.printErr);d.wasmBinary&&(ea=d.wasmBinary); +if(d.preInit)for(typeof d.preInit=="function"&&(d.preInit=[d.preInit]);d.preInit.length>0;)d.preInit.shift()();d.ccall=Ub;d.cwrap=(a,b,c,e)=>{var f=!c||c.every(h=>h==="number"||h==="boolean");return b!=="string"&&f&&!e?d["_"+a]:(...h)=>Ub(a,b,c,h,e)}; +d.addFunction=(a,b)=>{if(!Ob){Ob=new WeakMap;var c=Kb.length;if(Ob)for(var e=0;e<0+c;e++){var f=Lb(e);f&&Ob.set(f,e)}}if(c=Ob.get(a)||0)return c;c=Pb.length?Pb.pop():Kb.grow(1);try{Kb.set(c,a),Jb[c]=Kb.get(c)}catch(h){if(!(h instanceof TypeError))throw h;b=Uint8Array.of(0,97,115,109,1,0,0,0,1,...Qb([1,96,...Sb(b.slice(1)),...Sb(b[0]==="v"?"":b[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);b=new WebAssembly.Module(b);b=(new WebAssembly.Instance(b,{e:{f:a}})).exports.f;Kb.set(c,b);Jb[c]=Kb.get(c)}Ob.set(a, +c);return c};d.UTF8ToString=p;d.allocateUTF8=(...a)=>Nb(...a); +var Mb,Vb,Wb,Xb,Yb,Zb,$b,ac,bc,cc,dc,ec,fc,hc,ic,jc,kc,lc,mc,nc,oc,pc,qc,rc,sc,tc,uc,vc,wc,xc,yc,zc,Ac,Bc,Cc,Dc,Ec,Fc,Gc,Hc,Ic,Jc,Kc,Lc,Mc,Nc,Oc,Pc,Qc,Rc,Sc,Tc,Uc,Vc,Wc,Xc,Yc,Zc,$c,ad,bd,cd,dd,ed,fd,gd,hd,jd,kd,ld,md,nd,od,pd,qd,rd,sd,td,ud,vd,wd,xd,yd,zd,Ad,Bd,Cd,Dd,Ed,Fd,Gd,Hd,Id,Jd,Kd,Ld,Md,Nd,Od,Pd,Qd,Rd,Sd,Td,Ud,Vd,Wd,Xd,Yd,Zd,$d,ae,be,ce,de,ee,fe,ge,he,ie,je,ke,le,me,ne,oe,pe,qe,re,se,te,ue,ve,we,xe,ye,ze,Ae,Be,Ce,De,Ee,Fe,Ge,He,Ie,Je,Ke,Le,Me,Ne,Oe,Pe,Qe,Re,Se,Te,Ue,Ve,We,Xe,Ye,Ze,$e,af,bf, +cf,df,ef,ff,gf,hf,jf,kf,lf,mf,nf,of,pf,qf,rf,sf,tf,uf,vf,wf,xf,yf,zf,Af,Bf,Cf,Df,Ef,Ff,Gf,Hf,If,Jf,Kf,Lf,Mf,Nf,Of,Pf,Qf,Rf,Sf,Tf,Uf,Vf,Wf,Xf,Yf,Zf,$f,ag,bg,cg,dg,eg,fg,gg,hg,ig,jg,kg,lg,mg,ng,og,pg,qg,rg,sg,tg,ug,vg,wg,xg,yg,zg,Ag,Bg,Cg,Dg,Eg,Fg,Gg,Hg,Ig,Jg,Kg,Lg,Mg,Ng,Og,Pg,Qg,Rg,Sg,Tg,Ug,Vg,Wg,Xg,Yg,Zg,$g,ah,bh,ch,dh,eh,fh,gh,hh,ih,jh,kh,lh,mh,nh,oh,ph,qh,rh,sh,th,uh,vh,wh,xh,yh,zh,Ah,Bh,Ch,Dh,Eh,Fh,Gh,Hh,Ih,Jh,Kh,Lh,Mh,Nh,Oh,Ph,Qh,Rh,Sh,Th,Uh,Vh,Wh,Xh,Yh,Zh,$h,ai,bi,ci,di,ei,fi,gi,hi,ii,ji,ki, +li,mi,ni,oi,pi,qi,ri,si,ti,ui,vi,wi,xi,yi,zi,Ai,Bi,Ci,Di,Ei,Fi,Gi,Hi,Ii,Ji,Ki,Li,Mi,Ni,Oi,Pi,Qi,Ri,Si,Ti,Ui,Vi,Wi,Xi,Yi,Zi,$i,aj,bj,cj,dj,ej,fj,gj,hj,ij,jj,kj,lj,mj,nj,oj,pj,qj,rj,sj,tj,uj,vj,wj,xj,yj,zj,Aj,Bj,Cj,Dj,Ej,Fj,Gj,Hj,Ij,Jj,Kj,Lj,Mj,Nj,Oj,Pj,Qj,Rj,Sj,Tj,Uj,Vj,Wj,Xj,Yj,Zj,ak,bk,ck,dk,ek,fk,gk,hk,ik,jk,kk,lk,mk,nk,ok,pk,qk,rk,sk,tk,uk,vk,wk,xk,yk,zk,Ak,Bk,Ck,Dk,Ek,Fk,Gk,Hk,Ik,Jk,Kk,Lk,Mk,Nk,Ok,Pk,Qk,Rk,Sk,Tk,Uk,Vk,Wk,Xk,Yk,Zk,$k,al,bl,cl,dl,el,fl,gl,hl,il,jl,kl,ll,ml,nl,ol,pl,ql,rl,sl,tl, +ul,vl,wl,xl,yl,zl,Al,Bl,Cl,Dl,El,Fl,Gl,Hl,Il,Jl,Kl,Ll,Ml,Nl,Ol,Pl,Ql,Rl,Sl,Tl,Ul,Vl,Wl,Xl,Yl,Zl,$l,am,bm,cm,dm,em,fm,gm,hm,im,jm,km,lm,mm,nm,om,pm,qm,rm,sm,tm,um,vm,wm,xm,ym,zm,Am,Bm,Cm,Dm,Em,Fm,Gm,Hm,Im,Jm,Km,Lm,Mm,Nm,Om,Pm,Qm,Rm,Sm,Tm,Um,Vm,Wm,Xm,Ym,Zm,$m,an,bn,cn,dn,en,fn,gn,hn,jn,kn,ln,mn,nn,on,pn,qn,rn,sn,tn,un,vn,wn,xn,yn,zn,An,Bn,Cn,Dn,En,Fn,Gn,Hn,In,Jn,Kn,Ln,Mn,Nn,On,Pn,Qn,Rn,Sn,Tn,Un,Vn,Wn,Xn,Yn,Zn,$n,ao,bo,co,eo,fo,go,ho,io,jo,ko,lo,mo,no,oo,po,qo,ro,so,to,uo,vo,wo,xo,yo,zo,Ao,Bo,Co,Do, +Eo,Fo,Go,Ho,Io,Jo,Ko,Lo,Mo,No,Oo,Po,Qo,Ro,So,To,Uo,Vo,Wo,Xo,Yo,Zo,$o,ap,bp,cp,dp,ep,fp,gp,hp,ip,jp,kp,lp,mp,np,op,pp,qp,rp,sp,tp,up,vp,wp,xp,yp,zp,Ap,Bp,Cp,Dp,Ep,Fp,Gp,Hp,Ip,Jp,Kp,Lp,Mp,Np,Op,Pp,Qp,Rp,Sp,Tp,Up,Vp,Wp,Xp,Yp,Zp,$p,aq,bq,cq,dq,eq,fq,gq,hq,iq,jq,kq,lq,mq,nq,oq,pq,qq,rq,sq,tq,uq,vq,wq,xq,yq,zq,Aq,Bq,Cq,Dq,Eq,Fq,Gq,Hq,Iq,Jq,Kq,Lq,Mq,Nq,Oq,Pq,Qq,Rq,Sq,Tq,Uq,Vq,Wq,Xq,Yq,Zq,$q,ar,br,cr,dr,er,fr,gr,hr,ir,jr,kr,lr,mr,nr,or,pr,qr,rr,sr,tr,ur,vr,wr,xr,yr,zr,Ar,Br,Cr,Dr,Er,Fr,Gr,Hr,Ir,Jr,Kr,Lr, +Mr,Nr,Or,Pr,Qr,Rr,Sr,Tr,Ur,Vr,Wr,Xr,Yr,Zr,$r,as,bs,cs,ds,es,fs,gs,hs,is,js,ks,ls,ms,ns,ps,qs,rs,ss,ts,us,vs,ws,xs,ys,zs,As,Bs,Cs,Ds,Es,Fs,Gs,Hs,Is,Js,Ks,Ls,Ms,Ns,Os,Ps,Qs,Rs,Ss,Ts,Us,Vs,Ws,Xs,Ys,Zs,$s,at,bt,ct,dt,et,ft,gt,ht,it,jt,kt,lt,mt,nt,ot,pt,qt,rt,st,tt,ut,vt,wt,xt,yt,zt,At,Bt,Ct,Dt,Et,Ft,Gt,Ht,It,Jt,Kt,Lt,Mt,Nt,Ot,Pt,Qt,Rt,St,Tt,Ut,Vt,Wt,Xt,Yt,Zt,$t,au,bu,cu,du,eu,fu,gu,hu,iu,ju,ku,lu,mu,nu,ou,pu,qu,ru,su,tu,uu,vu,wu,xu,yu,zu,Au,Bu,Cu,Du,Eu,Fu,Gu,Hu,Iu,Ju,Ku,Lu,Mu,Nu,Ou,Pu,Qu,Ru,Su,Tu,Uu, +Vu,Wu,Xu,Yu,Zu,$u,av,bv,cv,dv,ev,fv,gv,hv,iv,jv,kv,lv,mv,nv,ov,pv,qv,rv,sv,tv,uv,vv,wv,xv,yv,zv,Av,Bv,Cv,Dv,Ev,Fv,Gv,Hv,Iv,Jv,Kv,Lv,Mv,Nv,Ov,Pv,Qv,Rv,Sv,Tv,Uv,Vv,Wv,Xv,Yv,Zv,$v,aw,bw,cw,dw,ew,fw,gw,hw,iw,jw,kw,lw,mw,nw,ow,pw,qw,rw,sw,tw,uw,vw,ww,xw,yw,zw,Aw,Bw,Cw,Dw,Ew,Fw,Gw,Hw,Jw,Kw,Lw,Mw,Nw,Ow,Pw,Qw,Rw,Sw,Tw,Uw,Vw,Ww,Xw,Yw,Zw,$w,ax,bx,cx,dx,ex,fx,gx,hx,ix,jx,kx,lx,mx,nx,ox,px,qx,rx,sx,tx,ux,vx,wx,xx,yx,zx,Ax,Bx,Cx,Dx,Ex,Fx,Gx,Hx,Ix,Jx,Kx,Lx,Mx,Nx,Ox,Px,Qx,Rx,Sx,Tx,Ux,Vx,Ga,A,Tb,z,Wx,Ha,Xx,sa,Kb, +qy={q:a=>{var b=new Fa(a);ja[b.vv+12]==0&&(ja[b.vv+12]=1,Da--);ja[b.vv+13]=0;Ca.push(b);return Xx(a)},a:()=>Ia([]),n:a=>Ia([a]),o:(a,b,c)=>{(new Fa(a)).init(b,c);Wx(a);Ea=a;Da++;throw Ea;},c:a=>{Ea||=a;throw Ea;},t:function(a,b,c){Ja=c;try{var e=vb(a);switch(b){case 0:var f=Ka();if(f<0)break;for(;kb[f];)f++;return xb(e,f).Lv;case 1:case 2:return 0;case 3:return e.flags;case 4:return f=Ka(),e.flags|=f,0;case 12:return f=Ka(),la[f+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(h){if(typeof Hb== +"undefined"||h.name!=="ErrnoError")throw h;return-h.Kv}},A:function(a,b,c){Ja=c;try{var e=vb(a);switch(b){case 21509:return e.Bv?0:-59;case 21505:if(!e.Bv)return-59;if(e.Bv.Iv.mw){a=[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];var f=Ka();ma[f>>2]=25856;ma[f+4>>2]=5;ma[f+8>>2]=191;ma[f+12>>2]=35387;for(var h=0;h<32;h++)ja[f+h+17]=a[h]||0}return 0;case 21510:case 21511:case 21512:return e.Bv?0:-59;case 21506:case 21507:case 21508:if(!e.Bv)return-59;if(e.Bv.Iv.nw)for(f= +Ka(),a=[],h=0;h<32;h++)a.push(ja[f+h+17]);return 0;case 21519:if(!e.Bv)return-59;f=Ka();return ma[f>>2]=0;case 21520:return e.Bv?-28:-59;case 21537:case 21531:f=Ka();if(!e.yv.lw)throw new g(59);return e.yv.lw(e,b,f);case 21523:if(!e.Bv)return-59;e.Bv.Iv.ow&&(h=[24,80],f=Ka(),la[f>>1]=h[0],la[f+2>>1]=h[1]);return 0;case 21524:return e.Bv?0:-59;case 21515:return e.Bv?0:-59;default:return-28}}catch(k){if(typeof Hb=="undefined"||k.name!=="ErrnoError")throw k;return-k.Kv}},B:function(a,b,c,e){Ja=e;try{b= +b?Sa(ka,b):"";var f=b;if(f.charAt(0)==="/")b=f;else{var h=a===-100?"/":vb(a).path;if(f.length==0)throw new g(44);b=h+"/"+f}var k=e?Ka():0;return Eb(b,c,k).Lv}catch(l){if(typeof Hb=="undefined"||l.name!=="ErrnoError")throw l;return-l.Kv}},C:()=>ta(""),x:a=>{var b=ka.length;a>>>=0;if(a>2147483648)return!1;for(var c=1;c<=4;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);a:{e=(Math.min(2147483648,Math.ceil(Math.max(a,e)/65536)*65536)-sa.buffer.byteLength+65535)/65536|0;try{sa.grow(e);ra();var f=1;break a}catch(h){}f= +void 0}if(f)return!0}return!1},r:function(a){try{var b=vb(a);if(b.Lv===null)throw new g(8);b.Zv&&(b.Zv=null);try{b.yv.close&&b.yv.close(b)}catch(c){throw c;}finally{kb[b.Lv]=null}b.Lv=null;return 0}catch(c){if(typeof Hb=="undefined"||c.name!=="ErrnoError")throw c;return c.Kv}},z:function(a,b,c,e){try{a:{var f=vb(a);a=b;for(var h,k=b=0;k>2],q=na[a+4>>2];a+=8;var m=f,r=l,t=q,u=h,y=ja;if(t<0||u<0)throw new g(28);if(m.Lv===null)throw new g(8);if((m.flags&2097155)===1)throw new g(8); +if((m.node.mode&61440)===16384)throw new g(31);if(!m.yv.read)throw new g(28);var w=typeof u!="undefined";if(!w)u=m.position;else if(!m.seekable)throw new g(70);var x=m.yv.read(m,y,r,t,u);w||(m.position+=x);var v=x;if(v<0){var B=-1;break a}b+=v;if(v>2]=B;return 0}catch(C){if(typeof Hb=="undefined"||C.name!=="ErrnoError")throw C;return C.Kv}},y:function(a,b,c,e){b=b<-9007199254740992||b>9007199254740992?NaN:Number(b);try{if(isNaN(b))return 61;var f=vb(a); +Fb(f,b,c);oa[e>>3]=BigInt(f.position);f.Zv&&b===0&&c===0&&(f.Zv=null);return 0}catch(h){if(typeof Hb=="undefined"||h.name!=="ErrnoError")throw h;return h.Kv}},s:function(a,b,c,e){try{a:{var f=vb(a);a=b;for(var h,k=b=0;k>2],q=na[a+4>>2];a+=8;var m=f,r=l,t=q,u=h,y=ja;if(t<0||u<0)throw new g(28);if(m.Lv===null)throw new g(8);if((m.flags&2097155)===0)throw new g(8);if((m.node.mode&61440)===16384)throw new g(31);if(!m.yv.write)throw new g(28);m.seekable&&m.flags&1024&&Fb(m,0,2);var w= +typeof u!="undefined";if(!w)u=m.position;else if(!m.seekable)throw new g(70);var x=m.yv.write(m,y,r,t,u,void 0);w||(m.position+=x);var v=x;if(v<0){var B=-1;break a}b+=v;if(v>2]=B;return 0}catch(C){if(typeof Hb=="undefined"||C.name!=="ErrnoError")throw C;return C.Kv}},j:Yx,G:Zx,b:$x,v:ay,w:by,e:cy,i:dy,u:ey,F:fy,E:gy,k:hy,p:iy,d:jy,g:ky,l:ly,h:my,f:ny,m:oy,D:py};function jy(a,b,c){var e=z();try{Lb(a)(b,c)}catch(f){A(e);if(f!==f+0)throw f;Vx(1,0)}} +function iy(a,b){var c=z();try{Lb(a)(b)}catch(e){A(c);if(e!==e+0)throw e;Vx(1,0)}}function ny(a,b,c,e,f,h,k,l,q,m,r,t,u,y,w,x,v,B,C){var H=z();try{Lb(a)(b,c,e,f,h,k,l,q,m,r,t,u,y,w,x,v,B,C)}catch(F){A(H);if(F!==F+0)throw F;Vx(1,0)}}function $x(a,b){var c=z();try{return Lb(a)(b)}catch(e){A(c);if(e!==e+0)throw e;Vx(1,0)}}function ky(a,b,c,e){var f=z();try{Lb(a)(b,c,e)}catch(h){A(f);if(h!==h+0)throw h;Vx(1,0)}} +function cy(a,b,c){var e=z();try{return Lb(a)(b,c)}catch(f){A(e);if(f!==f+0)throw f;Vx(1,0)}}function Yx(a,b,c,e){var f=z();try{return Lb(a)(b,c,e)}catch(h){A(f);if(h!==h+0)throw h;Vx(1,0)}}function my(a,b,c,e,f){var h=z();try{Lb(a)(b,c,e,f)}catch(k){A(h);if(k!==k+0)throw k;Vx(1,0)}}function dy(a,b,c,e){var f=z();try{return Lb(a)(b,c,e)}catch(h){A(f);if(h!==h+0)throw h;Vx(1,0)}}function hy(a){var b=z();try{Lb(a)()}catch(c){A(b);if(c!==c+0)throw c;Vx(1,0)}} +function oy(a,b,c,e,f,h){var k=z();try{Lb(a)(b,c,e,f,h)}catch(l){A(k);if(l!==l+0)throw l;Vx(1,0)}}function ly(a,b,c,e,f,h,k,l,q){var m=z();try{Lb(a)(b,c,e,f,h,k,l,q)}catch(r){A(m);if(r!==r+0)throw r;Vx(1,0)}}function Zx(a,b,c,e,f,h,k,l,q,m){var r=z();try{return Lb(a)(b,c,e,f,h,k,l,q,m)}catch(t){A(r);if(t!==t+0)throw t;Vx(1,0)}} +function fy(a,b,c,e,f,h,k,l,q,m,r,t,u,y,w,x,v,B,C,H,F,L,T){var U=z();try{return Lb(a)(b,c,e,f,h,k,l,q,m,r,t,u,y,w,x,v,B,C,H,F,L,T)}catch(Q){A(U);if(Q!==Q+0)throw Q;Vx(1,0)}}function by(a,b,c,e,f,h,k,l,q,m,r,t,u,y,w){var x=z();try{return Lb(a)(b,c,e,f,h,k,l,q,m,r,t,u,y,w)}catch(v){A(x);if(v!==v+0)throw v;Vx(1,0)}}function gy(a,b,c,e,f,h){var k=z();try{return Lb(a)(b,c,e,f,h)}catch(l){A(k);if(l!==l+0)throw l;Vx(1,0)}} +function ay(a,b,c,e,f,h){var k=z();try{return Lb(a)(b,c,e,f,h)}catch(l){A(k);if(l!==l+0)throw l;Vx(1,0)}}function py(a,b,c,e,f,h,k,l,q,m,r,t,u,y,w,x,v,B,C){var H=z();try{Lb(a)(b,c,e,f,h,k,l,q,m,r,t,u,y,w,x,v,B,C)}catch(F){A(H);if(F!==F+0)throw F;Vx(1,0)}}function ey(a,b,c,e,f){var h=z();try{return Lb(a)(b,c,e,f)}catch(k){A(h);if(k!==k+0)throw k;Vx(1,0)}}var ry; +ry=await (async function(){function a(c){c=ry=c.exports;d._webidl_free=c.K;d._free=c.L;d._webidl_malloc=c.M;Mb=d._malloc=c.N;Vb=d._emscripten_bind_VoidPtr___destroy___0=c.O;Wb=d._emscripten_bind_DoublePtr___destroy___0=c.P;Xb=d._emscripten_bind_BoolVector_BoolVector_0=c.Q;Yb=d._emscripten_bind_BoolVector_BoolVector_1=c.R;Zb=d._emscripten_bind_BoolVector_resize_1=c.S;$b=d._emscripten_bind_BoolVector_get_1=c.T;ac=d._emscripten_bind_BoolVector_set_2=c.U;bc=d._emscripten_bind_BoolVector_size_0= +c.V;cc=d._emscripten_bind_BoolVector___destroy___0=c.W;dc=d._emscripten_bind_CharVector_CharVector_0=c.X;ec=d._emscripten_bind_CharVector_CharVector_1=c.Y;fc=d._emscripten_bind_CharVector_resize_1=c.Z;hc=d._emscripten_bind_CharVector_get_1=c._;ic=d._emscripten_bind_CharVector_set_2=c.$;jc=d._emscripten_bind_CharVector_size_0=c.aa;kc=d._emscripten_bind_CharVector___destroy___0=c.ba;lc=d._emscripten_bind_IntVector_IntVector_0=c.ca;mc=d._emscripten_bind_IntVector_IntVector_1=c.da;nc=d._emscripten_bind_IntVector_resize_1= +c.ea;oc=d._emscripten_bind_IntVector_get_1=c.fa;pc=d._emscripten_bind_IntVector_set_2=c.ga;qc=d._emscripten_bind_IntVector_size_0=c.ha;rc=d._emscripten_bind_IntVector___destroy___0=c.ia;sc=d._emscripten_bind_DoubleVector_DoubleVector_0=c.ja;tc=d._emscripten_bind_DoubleVector_DoubleVector_1=c.ka;uc=d._emscripten_bind_DoubleVector_resize_1=c.la;vc=d._emscripten_bind_DoubleVector_get_1=c.ma;wc=d._emscripten_bind_DoubleVector_set_2=c.na;xc=d._emscripten_bind_DoubleVector_size_0=c.oa;yc=d._emscripten_bind_DoubleVector___destroy___0= +c.pa;zc=d._emscripten_bind_SpeciesMasterTableRecordVector_SpeciesMasterTableRecordVector_0=c.qa;Ac=d._emscripten_bind_SpeciesMasterTableRecordVector_SpeciesMasterTableRecordVector_1=c.ra;Bc=d._emscripten_bind_SpeciesMasterTableRecordVector_resize_1=c.sa;Cc=d._emscripten_bind_SpeciesMasterTableRecordVector_get_1=c.ta;Dc=d._emscripten_bind_SpeciesMasterTableRecordVector_set_2=c.ua;Ec=d._emscripten_bind_SpeciesMasterTableRecordVector_size_0=c.va;Fc=d._emscripten_bind_SpeciesMasterTableRecordVector___destroy___0= +c.wa;Gc=d._emscripten_bind_AreaUnits_toBaseUnits_2=c.xa;Hc=d._emscripten_bind_AreaUnits_fromBaseUnits_2=c.ya;Ic=d._emscripten_bind_AreaUnits___destroy___0=c.za;Jc=d._emscripten_bind_BasalAreaUnits_toBaseUnits_2=c.Aa;Kc=d._emscripten_bind_BasalAreaUnits_fromBaseUnits_2=c.Ba;Lc=d._emscripten_bind_BasalAreaUnits___destroy___0=c.Ca;Mc=d._emscripten_bind_FractionUnits_toBaseUnits_2=c.Da;Nc=d._emscripten_bind_FractionUnits_fromBaseUnits_2=c.Ea;Oc=d._emscripten_bind_FractionUnits___destroy___0=c.Fa;Pc=d._emscripten_bind_LengthUnits_toBaseUnits_2= +c.Ga;Qc=d._emscripten_bind_LengthUnits_fromBaseUnits_2=c.Ha;Rc=d._emscripten_bind_LengthUnits___destroy___0=c.Ia;Sc=d._emscripten_bind_LoadingUnits_toBaseUnits_2=c.Ja;Tc=d._emscripten_bind_LoadingUnits_fromBaseUnits_2=c.Ka;Uc=d._emscripten_bind_LoadingUnits___destroy___0=c.La;Vc=d._emscripten_bind_SurfaceAreaToVolumeUnits_toBaseUnits_2=c.Ma;Wc=d._emscripten_bind_SurfaceAreaToVolumeUnits_fromBaseUnits_2=c.Na;Xc=d._emscripten_bind_SurfaceAreaToVolumeUnits___destroy___0=c.Oa;Yc=d._emscripten_bind_SpeedUnits_toBaseUnits_2= +c.Pa;Zc=d._emscripten_bind_SpeedUnits_fromBaseUnits_2=c.Qa;$c=d._emscripten_bind_SpeedUnits___destroy___0=c.Ra;ad=d._emscripten_bind_PressureUnits_toBaseUnits_2=c.Sa;bd=d._emscripten_bind_PressureUnits_fromBaseUnits_2=c.Ta;cd=d._emscripten_bind_PressureUnits___destroy___0=c.Ua;dd=d._emscripten_bind_SlopeUnits_toBaseUnits_2=c.Va;ed=d._emscripten_bind_SlopeUnits_fromBaseUnits_2=c.Wa;fd=d._emscripten_bind_SlopeUnits___destroy___0=c.Xa;gd=d._emscripten_bind_DensityUnits_toBaseUnits_2=c.Ya;hd=d._emscripten_bind_DensityUnits_fromBaseUnits_2= +c.Za;jd=d._emscripten_bind_DensityUnits___destroy___0=c._a;kd=d._emscripten_bind_HeatOfCombustionUnits_toBaseUnits_2=c.$a;ld=d._emscripten_bind_HeatOfCombustionUnits_fromBaseUnits_2=c.ab;md=d._emscripten_bind_HeatOfCombustionUnits___destroy___0=c.bb;nd=d._emscripten_bind_HeatSinkUnits_toBaseUnits_2=c.cb;od=d._emscripten_bind_HeatSinkUnits_fromBaseUnits_2=c.db;pd=d._emscripten_bind_HeatSinkUnits___destroy___0=c.eb;qd=d._emscripten_bind_HeatPerUnitAreaUnits_toBaseUnits_2=c.fb;rd=d._emscripten_bind_HeatPerUnitAreaUnits_fromBaseUnits_2= +c.gb;sd=d._emscripten_bind_HeatPerUnitAreaUnits___destroy___0=c.hb;td=d._emscripten_bind_HeatSourceAndReactionIntensityUnits_toBaseUnits_2=c.ib;ud=d._emscripten_bind_HeatSourceAndReactionIntensityUnits_fromBaseUnits_2=c.jb;vd=d._emscripten_bind_HeatSourceAndReactionIntensityUnits___destroy___0=c.kb;wd=d._emscripten_bind_FirelineIntensityUnits_toBaseUnits_2=c.lb;xd=d._emscripten_bind_FirelineIntensityUnits_fromBaseUnits_2=c.mb;yd=d._emscripten_bind_FirelineIntensityUnits___destroy___0=c.nb;zd=d._emscripten_bind_TemperatureUnits_toBaseUnits_2= +c.ob;Ad=d._emscripten_bind_TemperatureUnits_fromBaseUnits_2=c.pb;Bd=d._emscripten_bind_TemperatureUnits___destroy___0=c.qb;Cd=d._emscripten_bind_TimeUnits_toBaseUnits_2=c.rb;Dd=d._emscripten_bind_TimeUnits_fromBaseUnits_2=c.sb;Ed=d._emscripten_bind_TimeUnits___destroy___0=c.tb;Fd=d._emscripten_bind_FireSize_getBackingSpreadRate_1=c.ub;Gd=d._emscripten_bind_FireSize_getEccentricity_0=c.vb;Hd=d._emscripten_bind_FireSize_getEllipticalA_3=c.wb;Id=d._emscripten_bind_FireSize_getEllipticalB_3=c.xb;Jd=d._emscripten_bind_FireSize_getEllipticalC_3= +c.yb;Kd=d._emscripten_bind_FireSize_getFireArea_4=c.zb;Ld=d._emscripten_bind_FireSize_getFireLength_3=c.Ab;Md=d._emscripten_bind_FireSize_getFireLengthToWidthRatio_0=c.Bb;Nd=d._emscripten_bind_FireSize_getFirePerimeter_4=c.Cb;Od=d._emscripten_bind_FireSize_getFlankingSpreadRate_1=c.Db;Pd=d._emscripten_bind_FireSize_getHeadingToBackingRatio_0=c.Eb;Qd=d._emscripten_bind_FireSize_getMaxFireWidth_3=c.Fb;Rd=d._emscripten_bind_FireSize_calculateFireBasicDimensions_5=c.Gb;Sd=d._emscripten_bind_FireSize___destroy___0= +c.Hb;Td=d._emscripten_bind_SIGContainAdapter_SIGContainAdapter_0=c.Ib;Ud=d._emscripten_bind_SIGContainAdapter_getContainmentStatus_0=c.Jb;Vd=d._emscripten_bind_SIGContainAdapter_getFirePerimeterX_0=c.Kb;Wd=d._emscripten_bind_SIGContainAdapter_getFirePerimeterY_0=c.Lb;Xd=d._emscripten_bind_SIGContainAdapter_getOptimizedContainProductionRates_0=c.Mb;Yd=d._emscripten_bind_SIGContainAdapter_getOptimizedContainAreas_0=c.Nb;Zd=d._emscripten_bind_SIGContainAdapter_getOptimizedContainPointCount_0=c.Ob;$d= +d._emscripten_bind_SIGContainAdapter_getAttackDistance_1=c.Pb;ae=d._emscripten_bind_SIGContainAdapter_getFinalContainmentArea_1=c.Qb;be=d._emscripten_bind_SIGContainAdapter_getFinalCost_0=c.Rb;ce=d._emscripten_bind_SIGContainAdapter_getFinalFireLineLength_1=c.Sb;de=d._emscripten_bind_SIGContainAdapter_getFinalFireSize_1=c.Tb;ee=d._emscripten_bind_SIGContainAdapter_getFinalTimeSinceReport_1=c.Ub;fe=d._emscripten_bind_SIGContainAdapter_getFinalProductionRate_1=c.Vb;ge=d._emscripten_bind_SIGContainAdapter_getFireBackAtAttack_0= +c.Wb;he=d._emscripten_bind_SIGContainAdapter_getFireBackAtReport_0=c.Xb;ie=d._emscripten_bind_SIGContainAdapter_getFireHeadAtAttack_0=c.Yb;je=d._emscripten_bind_SIGContainAdapter_getFireHeadAtReport_0=c.Zb;ke=d._emscripten_bind_SIGContainAdapter_getFireSizeAtInitialAttack_1=c._b;le=d._emscripten_bind_SIGContainAdapter_getLengthToWidthRatio_0=c.$b;me=d._emscripten_bind_SIGContainAdapter_getPerimeterAtContainment_1=c.ac;ne=d._emscripten_bind_SIGContainAdapter_getPerimeterAtInitialAttack_1=c.bc;oe=d._emscripten_bind_SIGContainAdapter_getReportSize_1= +c.cc;pe=d._emscripten_bind_SIGContainAdapter_getReportRate_1=c.dc;qe=d._emscripten_bind_SIGContainAdapter_getAutoComputedResourceProductionRate_1=c.ec;re=d._emscripten_bind_SIGContainAdapter_getTactic_0=c.fc;se=d._emscripten_bind_SIGContainAdapter_getFirePerimeterPointCount_0=c.gc;te=d._emscripten_bind_SIGContainAdapter_removeAllResourcesWithThisDesc_1=c.hc;ue=d._emscripten_bind_SIGContainAdapter_removeResourceAt_1=c.ic;ve=d._emscripten_bind_SIGContainAdapter_removeResourceWithThisDesc_1=c.jc;we= +d._emscripten_bind_SIGContainAdapter_addResource_9=c.kc;xe=d._emscripten_bind_SIGContainAdapter_doContainRun_0=c.lc;ye=d._emscripten_bind_SIGContainAdapter_removeAllResources_0=c.mc;ze=d._emscripten_bind_SIGContainAdapter_setAttackDistance_2=c.nc;Ae=d._emscripten_bind_SIGContainAdapter_setContainMode_1=c.oc;Be=d._emscripten_bind_SIGContainAdapter_setFireStartTime_1=c.pc;Ce=d._emscripten_bind_SIGContainAdapter_setLwRatio_1=c.qc;De=d._emscripten_bind_SIGContainAdapter_setMaxFireSize_1=c.rc;Ee=d._emscripten_bind_SIGContainAdapter_setMaxFireTime_1= +c.sc;Fe=d._emscripten_bind_SIGContainAdapter_setMaxSteps_1=c.tc;Ge=d._emscripten_bind_SIGContainAdapter_setMinSteps_1=c.uc;He=d._emscripten_bind_SIGContainAdapter_setReportRate_2=c.vc;Ie=d._emscripten_bind_SIGContainAdapter_setReportSize_2=c.wc;Je=d._emscripten_bind_SIGContainAdapter_setResourceArrivalTime_2=c.xc;Ke=d._emscripten_bind_SIGContainAdapter_setResourceDuration_2=c.yc;Le=d._emscripten_bind_SIGContainAdapter_setRetry_1=c.zc;Me=d._emscripten_bind_SIGContainAdapter_setTactic_1=c.Ac;Ne=d._emscripten_bind_SIGContainAdapter___destroy___0= +c.Bc;Oe=d._emscripten_bind_SIGIgnite_SIGIgnite_0=c.Cc;Pe=d._emscripten_bind_SIGIgnite_initializeMembers_0=c.Dc;Qe=d._emscripten_bind_SIGIgnite_getFuelBedType_0=c.Ec;Re=d._emscripten_bind_SIGIgnite_getLightningChargeType_0=c.Fc;Se=d._emscripten_bind_SIGIgnite_calculateFirebrandIgnitionProbability_0=c.Gc;Te=d._emscripten_bind_SIGIgnite_calculateLightningIgnitionProbability_1=c.Hc;Ue=d._emscripten_bind_SIGIgnite_setAirTemperature_2=c.Ic;Ve=d._emscripten_bind_SIGIgnite_setDuffDepth_2=c.Jc;We=d._emscripten_bind_SIGIgnite_setIgnitionFuelBedType_1= +c.Kc;Xe=d._emscripten_bind_SIGIgnite_setLightningChargeType_1=c.Lc;Ye=d._emscripten_bind_SIGIgnite_setMoistureHundredHour_2=c.Mc;Ze=d._emscripten_bind_SIGIgnite_setMoistureOneHour_2=c.Nc;$e=d._emscripten_bind_SIGIgnite_setSunShade_2=c.Oc;af=d._emscripten_bind_SIGIgnite_updateIgniteInputs_11=c.Pc;bf=d._emscripten_bind_SIGIgnite_getAirTemperature_1=c.Qc;cf=d._emscripten_bind_SIGIgnite_getDuffDepth_1=c.Rc;df=d._emscripten_bind_SIGIgnite_getFirebrandIgnitionProbability_1=c.Sc;ef=d._emscripten_bind_SIGIgnite_getFuelTemperature_1= +c.Tc;ff=d._emscripten_bind_SIGIgnite_getMoistureHundredHour_1=c.Uc;gf=d._emscripten_bind_SIGIgnite_getMoistureOneHour_1=c.Vc;hf=d._emscripten_bind_SIGIgnite_getSunShade_1=c.Wc;jf=d._emscripten_bind_SIGIgnite_isFuelDepthNeeded_0=c.Xc;kf=d._emscripten_bind_SIGIgnite___destroy___0=c.Yc;lf=d._emscripten_bind_SIGMoistureScenarios_SIGMoistureScenarios_0=c.Zc;mf=d._emscripten_bind_SIGMoistureScenarios_getIsMoistureScenarioDefinedByIndex_1=c._c;nf=d._emscripten_bind_SIGMoistureScenarios_getIsMoistureScenarioDefinedByName_1= +c.$c;of=d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioHundredHourByIndex_2=c.ad;pf=d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioHundredHourByName_2=c.bd;qf=d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveHerbaceousByIndex_2=c.cd;rf=d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveHerbaceousByName_2=c.dd;sf=d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveWoodyByIndex_2=c.ed;tf=d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioLiveWoodyByName_2= +c.fd;uf=d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioOneHourByIndex_2=c.gd;vf=d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioOneHourByName_2=c.hd;wf=d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioTenHourByIndex_2=c.id;xf=d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioTenHourByName_2=c.jd;yf=d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioIndexByName_1=c.kd;zf=d._emscripten_bind_SIGMoistureScenarios_getNumberOfMoistureScenarios_0=c.ld;Af= +d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioDescriptionByIndex_1=c.md;Bf=d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioDescriptionByName_1=c.nd;Cf=d._emscripten_bind_SIGMoistureScenarios_getMoistureScenarioNameByIndex_1=c.od;Df=d._emscripten_bind_SIGMoistureScenarios___destroy___0=c.pd;Ef=d._emscripten_bind_SIGSpot_SIGSpot_0=c.qd;Ff=d._emscripten_bind_SIGSpot_getDownwindCanopyMode_0=c.rd;Gf=d._emscripten_bind_SIGSpot_getLocation_0=c.sd;Hf=d._emscripten_bind_SIGSpot_getTreeSpecies_0= +c.td;If=d._emscripten_bind_SIGSpot_getBurningPileFlameHeight_1=c.ud;Jf=d._emscripten_bind_SIGSpot_getCoverHeightUsedForBurningPile_1=c.vd;Kf=d._emscripten_bind_SIGSpot_getCoverHeightUsedForSurfaceFire_1=c.wd;Lf=d._emscripten_bind_SIGSpot_getCoverHeightUsedForTorchingTrees_1=c.xd;Mf=d._emscripten_bind_SIGSpot_getDBH_1=c.yd;Nf=d._emscripten_bind_SIGSpot_getDownwindCoverHeight_1=c.zd;Of=d._emscripten_bind_SIGSpot_getFlameDurationForTorchingTrees_1=c.Ad;Pf=d._emscripten_bind_SIGSpot_getFlameHeightForTorchingTrees_1= +c.Bd;Qf=d._emscripten_bind_SIGSpot_getFlameRatioForTorchingTrees_0=c.Cd;Rf=d._emscripten_bind_SIGSpot_getMaxFirebrandHeightFromBurningPile_1=c.Dd;Sf=d._emscripten_bind_SIGSpot_getMaxFirebrandHeightFromSurfaceFire_1=c.Ed;Tf=d._emscripten_bind_SIGSpot_getMaxFirebrandHeightFromTorchingTrees_1=c.Fd;Uf=d._emscripten_bind_SIGSpot_getMaxFlatTerrainSpottingDistanceFromBurningPile_1=c.Gd;Vf=d._emscripten_bind_SIGSpot_getMaxFlatTerrainSpottingDistanceFromSurfaceFire_1=c.Hd;Wf=d._emscripten_bind_SIGSpot_getMaxFlatTerrainSpottingDistanceFromTorchingTrees_1= +c.Id;Xf=d._emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromBurningPile_1=c.Jd;Yf=d._emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromSurfaceFire_1=c.Kd;Zf=d._emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromTorchingTrees_1=c.Ld;$f=d._emscripten_bind_SIGSpot_getMaxMountainousTerrainSpottingDistanceFromActiveCrown_1=c.Md;ag=d._emscripten_bind_SIGSpot_getRidgeToValleyDistance_1=c.Nd;bg=d._emscripten_bind_SIGSpot_getRidgeToValleyElevation_1=c.Od; +cg=d._emscripten_bind_SIGSpot_getSurfaceFlameLength_1=c.Pd;dg=d._emscripten_bind_SIGSpot_getTreeHeight_1=c.Qd;eg=d._emscripten_bind_SIGSpot_getWindSpeedAtTwentyFeet_1=c.Rd;fg=d._emscripten_bind_SIGSpot_getTorchingTrees_0=c.Sd;gg=d._emscripten_bind_SIGSpot_calculateAll_0=c.Td;hg=d._emscripten_bind_SIGSpot_calculateSpottingDistanceFromBurningPile_0=c.Ud;ig=d._emscripten_bind_SIGSpot_calculateSpottingDistanceFromSurfaceFire_0=c.Vd;jg=d._emscripten_bind_SIGSpot_calculateSpottingDistanceFromTorchingTrees_0= +c.Wd;kg=d._emscripten_bind_SIGSpot_initializeMembers_0=c.Xd;lg=d._emscripten_bind_SIGSpot_setActiveCrownFlameLength_2=c.Yd;mg=d._emscripten_bind_SIGSpot_setBurningPileFlameHeight_2=c.Zd;ng=d._emscripten_bind_SIGSpot_setDBH_2=c._d;og=d._emscripten_bind_SIGSpot_setDownwindCanopyMode_1=c.$d;pg=d._emscripten_bind_SIGSpot_setDownwindCoverHeight_2=c.ae;qg=d._emscripten_bind_SIGSpot_setFireType_1=c.be;rg=d._emscripten_bind_SIGSpot_setFlameLength_2=c.ce;sg=d._emscripten_bind_SIGSpot_setFirelineIntensity_2= +c.de;tg=d._emscripten_bind_SIGSpot_setLocation_1=c.ee;ug=d._emscripten_bind_SIGSpot_setRidgeToValleyDistance_2=c.fe;vg=d._emscripten_bind_SIGSpot_setRidgeToValleyElevation_2=c.ge;wg=d._emscripten_bind_SIGSpot_setTorchingTrees_1=c.he;xg=d._emscripten_bind_SIGSpot_setTreeHeight_2=c.ie;yg=d._emscripten_bind_SIGSpot_setTreeSpecies_1=c.je;zg=d._emscripten_bind_SIGSpot_setWindSpeedAtTwentyFeet_2=c.ke;Ag=d._emscripten_bind_SIGSpot_setWindSpeed_2=c.le;Bg=d._emscripten_bind_SIGSpot_setWindSpeedAndWindHeightInputMode_3= +c.me;Cg=d._emscripten_bind_SIGSpot_setWindHeightInputMode_1=c.ne;Dg=d._emscripten_bind_SIGSpot_updateSpotInputsForBurningPile_12=c.oe;Eg=d._emscripten_bind_SIGSpot_updateSpotInputsForSurfaceFire_12=c.pe;Fg=d._emscripten_bind_SIGSpot_updateSpotInputsForTorchingTrees_16=c.qe;Gg=d._emscripten_bind_SIGSpot___destroy___0=c.re;Hg=d._emscripten_bind_SIGFuelModels_SIGFuelModels_0=c.se;Ig=d._emscripten_bind_SIGFuelModels_SIGFuelModels_1=c.te;Jg=d._emscripten_bind_SIGFuelModels_equal_1=c.ue;Kg=d._emscripten_bind_SIGFuelModels_clearCustomFuelModel_1= +c.ve;Lg=d._emscripten_bind_SIGFuelModels_getIsDynamic_1=c.we;Mg=d._emscripten_bind_SIGFuelModels_isAllFuelLoadZero_1=c.xe;Ng=d._emscripten_bind_SIGFuelModels_isFuelModelDefined_1=c.ye;Og=d._emscripten_bind_SIGFuelModels_isFuelModelReserved_1=c.ze;Pg=d._emscripten_bind_SIGFuelModels_setCustomFuelModel_21=c.Ae;Qg=d._emscripten_bind_SIGFuelModels_getFuelCode_1=c.Be;Rg=d._emscripten_bind_SIGFuelModels_getFuelName_1=c.Ce;Sg=d._emscripten_bind_SIGFuelModels_getFuelLoadHundredHour_2=c.De;Tg=d._emscripten_bind_SIGFuelModels_getFuelLoadLiveHerbaceous_2= +c.Ee;Ug=d._emscripten_bind_SIGFuelModels_getFuelLoadLiveWoody_2=c.Fe;Vg=d._emscripten_bind_SIGFuelModels_getFuelLoadOneHour_2=c.Ge;Wg=d._emscripten_bind_SIGFuelModels_getFuelLoadTenHour_2=c.He;Xg=d._emscripten_bind_SIGFuelModels_getFuelbedDepth_2=c.Ie;Yg=d._emscripten_bind_SIGFuelModels_getHeatOfCombustionDead_2=c.Je;Zg=d._emscripten_bind_SIGFuelModels_getMoistureOfExtinctionDead_2=c.Ke;$g=d._emscripten_bind_SIGFuelModels_getSavrLiveHerbaceous_2=c.Le;ah=d._emscripten_bind_SIGFuelModels_getSavrLiveWoody_2= +c.Me;bh=d._emscripten_bind_SIGFuelModels_getSavrOneHour_2=c.Ne;ch=d._emscripten_bind_SIGFuelModels_getHeatOfCombustionLive_2=c.Oe;dh=d._emscripten_bind_SIGFuelModels___destroy___0=c.Pe;eh=d._emscripten_bind_SIGSurface_SIGSurface_1=c.Qe;fh=d._emscripten_bind_SIGSurface_getAspenFireSeverity_0=c.Re;gh=d._emscripten_bind_SIGSurface_getChaparralFuelType_0=c.Se;hh=d._emscripten_bind_SIGSurface_getMoistureInputMode_0=c.Te;ih=d._emscripten_bind_SIGSurface_getWindAdjustmentFactorCalculationMethod_0=c.Ue;jh= +d._emscripten_bind_SIGSurface_getWindAndSpreadOrientationMode_0=c.Ve;kh=d._emscripten_bind_SIGSurface_getWindHeightInputMode_0=c.We;lh=d._emscripten_bind_SIGSurface_getWindUpslopeAlignmentMode_0=c.Xe;mh=d._emscripten_bind_SIGSurface_getSurfaceRunInDirectionOf_0=c.Ye;nh=d._emscripten_bind_SIGSurface_getIsMoistureScenarioDefinedByIndex_1=c.Ze;oh=d._emscripten_bind_SIGSurface_getIsMoistureScenarioDefinedByName_1=c._e;ph=d._emscripten_bind_SIGSurface_getIsUsingChaparral_0=c.$e;qh=d._emscripten_bind_SIGSurface_getIsUsingPalmettoGallberry_0= +c.af;rh=d._emscripten_bind_SIGSurface_getIsUsingWesternAspen_0=c.bf;sh=d._emscripten_bind_SIGSurface_isAllFuelLoadZero_1=c.cf;th=d._emscripten_bind_SIGSurface_isFuelDynamic_1=c.df;uh=d._emscripten_bind_SIGSurface_isFuelModelDefined_1=c.ef;vh=d._emscripten_bind_SIGSurface_isFuelModelReserved_1=c.ff;wh=d._emscripten_bind_SIGSurface_isMoistureClassInputNeededForCurrentFuelModel_1=c.gf;xh=d._emscripten_bind_SIGSurface_isUsingTwoFuelModels_0=c.hf;yh=d._emscripten_bind_SIGSurface_setCurrentMoistureScenarioByIndex_1= +c.jf;zh=d._emscripten_bind_SIGSurface_setCurrentMoistureScenarioByName_1=c.kf;Ah=d._emscripten_bind_SIGSurface_calculateFlameLength_3=c.lf;Bh=d._emscripten_bind_SIGSurface_getAgeOfRough_0=c.mf;Ch=d._emscripten_bind_SIGSurface_getAspect_0=c.nf;Dh=d._emscripten_bind_SIGSurface_getAspenCuringLevel_1=c.of;Eh=d._emscripten_bind_SIGSurface_getAspenDBH_1=c.pf;Fh=d._emscripten_bind_SIGSurface_getAspenLoadDeadOneHour_1=c.qf;Gh=d._emscripten_bind_SIGSurface_getAspenLoadDeadTenHour_1=c.rf;Hh=d._emscripten_bind_SIGSurface_getAspenLoadLiveHerbaceous_1= +c.sf;Ih=d._emscripten_bind_SIGSurface_getAspenLoadLiveWoody_1=c.tf;Jh=d._emscripten_bind_SIGSurface_getAspenSavrDeadOneHour_1=c.uf;Kh=d._emscripten_bind_SIGSurface_getAspenSavrDeadTenHour_1=c.vf;Lh=d._emscripten_bind_SIGSurface_getAspenSavrLiveHerbaceous_1=c.wf;Mh=d._emscripten_bind_SIGSurface_getAspenSavrLiveWoody_1=c.xf;Nh=d._emscripten_bind_SIGSurface_getBackingFirelineIntensity_1=c.yf;Oh=d._emscripten_bind_SIGSurface_getBackingFlameLength_1=c.zf;Ph=d._emscripten_bind_SIGSurface_getBackingSpreadDistance_1= +c.Af;Qh=d._emscripten_bind_SIGSurface_getBackingSpreadRate_1=c.Bf;Rh=d._emscripten_bind_SIGSurface_getBulkDensity_1=c.Cf;Sh=d._emscripten_bind_SIGSurface_getCanopyCover_1=c.Df;Th=d._emscripten_bind_SIGSurface_getCanopyHeight_1=c.Ef;Uh=d._emscripten_bind_SIGSurface_getChaparralAge_1=c.Ff;Vh=d._emscripten_bind_SIGSurface_getChaparralDaysSinceMayFirst_0=c.Gf;Wh=d._emscripten_bind_SIGSurface_getChaparralDeadFuelFraction_0=c.Hf;Xh=d._emscripten_bind_SIGSurface_getChaparralDeadMoistureOfExtinction_1=c.If; +Yh=d._emscripten_bind_SIGSurface_getChaparralDensity_3=c.Jf;Zh=d._emscripten_bind_SIGSurface_getChaparralFuelBedDepth_1=c.Kf;$h=d._emscripten_bind_SIGSurface_getChaparralFuelDeadLoadFraction_0=c.Lf;ai=d._emscripten_bind_SIGSurface_getChaparralHeatOfCombustion_3=c.Mf;bi=d._emscripten_bind_SIGSurface_getChaparralLiveMoistureOfExtinction_1=c.Nf;ci=d._emscripten_bind_SIGSurface_getChaparralLoadDeadHalfInchToLessThanOneInch_1=c.Of;di=d._emscripten_bind_SIGSurface_getChaparralLoadDeadLessThanQuarterInch_1= +c.Pf;ei=d._emscripten_bind_SIGSurface_getChaparralLoadDeadOneInchToThreeInch_1=c.Qf;fi=d._emscripten_bind_SIGSurface_getChaparralLoadDeadQuarterInchToLessThanHalfInch_1=c.Rf;gi=d._emscripten_bind_SIGSurface_getChaparralLoadLiveHalfInchToLessThanOneInch_1=c.Sf;hi=d._emscripten_bind_SIGSurface_getChaparralLoadLiveLeaves_1=c.Tf;ii=d._emscripten_bind_SIGSurface_getChaparralLoadLiveOneInchToThreeInch_1=c.Uf;ji=d._emscripten_bind_SIGSurface_getChaparralLoadLiveQuarterInchToLessThanHalfInch_1=c.Vf;ki=d._emscripten_bind_SIGSurface_getChaparralLoadLiveStemsLessThanQuaterInch_1= +c.Wf;li=d._emscripten_bind_SIGSurface_getChaparralMoisture_3=c.Xf;mi=d._emscripten_bind_SIGSurface_getChaparralTotalDeadFuelLoad_1=c.Yf;ni=d._emscripten_bind_SIGSurface_getChaparralTotalFuelLoad_1=c.Zf;oi=d._emscripten_bind_SIGSurface_getChaparralTotalLiveFuelLoad_1=c._f;pi=d._emscripten_bind_SIGSurface_getCharacteristicMoistureByLifeState_2=c.$f;qi=d._emscripten_bind_SIGSurface_getCharacteristicMoistureDead_1=c.ag;ri=d._emscripten_bind_SIGSurface_getCharacteristicMoistureLive_1=c.bg;si=d._emscripten_bind_SIGSurface_getCharacteristicSAVR_1= +c.cg;ti=d._emscripten_bind_SIGSurface_getCrownRatio_1=c.dg;ui=d._emscripten_bind_SIGSurface_getDirectionOfMaxSpread_0=c.eg;vi=d._emscripten_bind_SIGSurface_getDirectionOfInterest_0=c.fg;wi=d._emscripten_bind_SIGSurface_getDirectionOfBacking_0=c.gg;xi=d._emscripten_bind_SIGSurface_getDirectionOfFlanking_0=c.hg;yi=d._emscripten_bind_SIGSurface_getElapsedTime_1=c.ig;zi=d._emscripten_bind_SIGSurface_getEllipticalA_1=c.jg;Ai=d._emscripten_bind_SIGSurface_getEllipticalB_1=c.kg;Bi=d._emscripten_bind_SIGSurface_getEllipticalC_1= +c.lg;Ci=d._emscripten_bind_SIGSurface_getFireLength_1=c.mg;Di=d._emscripten_bind_SIGSurface_getMaxFireWidth_1=c.ng;Ei=d._emscripten_bind_SIGSurface_getFireArea_1=c.og;Fi=d._emscripten_bind_SIGSurface_getFireEccentricity_0=c.pg;Gi=d._emscripten_bind_SIGSurface_getFireLengthToWidthRatio_0=c.qg;Hi=d._emscripten_bind_SIGSurface_getFirePerimeter_1=c.rg;Ii=d._emscripten_bind_SIGSurface_getFirelineIntensity_1=c.sg;Ji=d._emscripten_bind_SIGSurface_getFirelineIntensityInDirectionOfInterest_1=c.tg;Ki=d._emscripten_bind_SIGSurface_getFlameLength_1= +c.ug;Li=d._emscripten_bind_SIGSurface_getFlameLengthInDirectionOfInterest_1=c.vg;Mi=d._emscripten_bind_SIGSurface_getFlankingFirelineIntensity_1=c.wg;Ni=d._emscripten_bind_SIGSurface_getFlankingFlameLength_1=c.xg;Oi=d._emscripten_bind_SIGSurface_getFlankingSpreadRate_1=c.yg;Pi=d._emscripten_bind_SIGSurface_getFlankingSpreadDistance_1=c.zg;Qi=d._emscripten_bind_SIGSurface_getFuelHeatOfCombustionDead_2=c.Ag;Ri=d._emscripten_bind_SIGSurface_getFuelHeatOfCombustionLive_2=c.Bg;Si=d._emscripten_bind_SIGSurface_getFuelLoadHundredHour_2= +c.Cg;Ti=d._emscripten_bind_SIGSurface_getFuelLoadLiveHerbaceous_2=c.Dg;Ui=d._emscripten_bind_SIGSurface_getFuelLoadLiveWoody_2=c.Eg;Vi=d._emscripten_bind_SIGSurface_getFuelLoadOneHour_2=c.Fg;Wi=d._emscripten_bind_SIGSurface_getFuelLoadTenHour_2=c.Gg;Xi=d._emscripten_bind_SIGSurface_getFuelMoistureOfExtinctionDead_2=c.Hg;Yi=d._emscripten_bind_SIGSurface_getFuelSavrLiveHerbaceous_2=c.Ig;Zi=d._emscripten_bind_SIGSurface_getFuelSavrLiveWoody_2=c.Jg;$i=d._emscripten_bind_SIGSurface_getFuelSavrOneHour_2= +c.Kg;aj=d._emscripten_bind_SIGSurface_getFuelbedDepth_2=c.Lg;bj=d._emscripten_bind_SIGSurface_getHeadingSpreadRate_1=c.Mg;cj=d._emscripten_bind_SIGSurface_getHeadingToBackingRatio_0=c.Ng;dj=d._emscripten_bind_SIGSurface_getHeatPerUnitArea_1=c.Og;ej=d._emscripten_bind_SIGSurface_getHeatSink_1=c.Pg;fj=d._emscripten_bind_SIGSurface_getHeatSource_1=c.Qg;gj=d._emscripten_bind_SIGSurface_getHeightOfUnderstory_1=c.Rg;hj=d._emscripten_bind_SIGSurface_getLiveFuelMoistureOfExtinction_1=c.Sg;ij=d._emscripten_bind_SIGSurface_getMidflameWindspeed_1= +c.Tg;jj=d._emscripten_bind_SIGSurface_getMoistureDeadAggregateValue_1=c.Ug;kj=d._emscripten_bind_SIGSurface_getMoistureHundredHour_1=c.Vg;lj=d._emscripten_bind_SIGSurface_getMoistureLiveAggregateValue_1=c.Wg;mj=d._emscripten_bind_SIGSurface_getMoistureLiveHerbaceous_1=c.Xg;nj=d._emscripten_bind_SIGSurface_getMoistureLiveWoody_1=c.Yg;oj=d._emscripten_bind_SIGSurface_getMoistureOneHour_1=c.Zg;pj=d._emscripten_bind_SIGSurface_getMoistureScenarioHundredHourByIndex_2=c._g;qj=d._emscripten_bind_SIGSurface_getMoistureScenarioHundredHourByName_2= +c.$g;rj=d._emscripten_bind_SIGSurface_getMoistureScenarioLiveHerbaceousByIndex_2=c.ah;sj=d._emscripten_bind_SIGSurface_getMoistureScenarioLiveHerbaceousByName_2=c.bh;tj=d._emscripten_bind_SIGSurface_getMoistureScenarioLiveWoodyByIndex_2=c.ch;uj=d._emscripten_bind_SIGSurface_getMoistureScenarioLiveWoodyByName_2=c.dh;vj=d._emscripten_bind_SIGSurface_getMoistureScenarioOneHourByIndex_2=c.eh;wj=d._emscripten_bind_SIGSurface_getMoistureScenarioOneHourByName_2=c.fh;xj=d._emscripten_bind_SIGSurface_getMoistureScenarioTenHourByIndex_2= +c.gh;yj=d._emscripten_bind_SIGSurface_getMoistureScenarioTenHourByName_2=c.hh;zj=d._emscripten_bind_SIGSurface_getMoistureTenHour_1=c.ih;Aj=d._emscripten_bind_SIGSurface_getOverstoryBasalArea_1=c.jh;Bj=d._emscripten_bind_SIGSurface_getPalmettoGallberryCoverage_1=c.kh;Cj=d._emscripten_bind_SIGSurface_getPalmettoGallberryHeatOfCombustionDead_1=c.lh;Dj=d._emscripten_bind_SIGSurface_getPalmettoGallberryHeatOfCombustionLive_1=c.mh;Ej=d._emscripten_bind_SIGSurface_getPalmettoGallberryMoistureOfExtinctionDead_1= +c.nh;Fj=d._emscripten_bind_SIGSurface_getPalmettoGallberyDeadFineFuelLoad_1=c.oh;Gj=d._emscripten_bind_SIGSurface_getPalmettoGallberyDeadFoliageLoad_1=c.ph;Hj=d._emscripten_bind_SIGSurface_getPalmettoGallberyDeadMediumFuelLoad_1=c.qh;Ij=d._emscripten_bind_SIGSurface_getPalmettoGallberyFuelBedDepth_1=c.rh;Jj=d._emscripten_bind_SIGSurface_getPalmettoGallberyLitterLoad_1=c.sh;Kj=d._emscripten_bind_SIGSurface_getPalmettoGallberyLiveFineFuelLoad_1=c.th;Lj=d._emscripten_bind_SIGSurface_getPalmettoGallberyLiveFoliageLoad_1= +c.uh;Mj=d._emscripten_bind_SIGSurface_getPalmettoGallberyLiveMediumFuelLoad_1=c.vh;Nj=d._emscripten_bind_SIGSurface_getReactionIntensity_1=c.wh;Oj=d._emscripten_bind_SIGSurface_getResidenceTime_1=c.xh;Pj=d._emscripten_bind_SIGSurface_getSlope_1=c.yh;Qj=d._emscripten_bind_SIGSurface_getSlopeFactor_0=c.zh;Rj=d._emscripten_bind_SIGSurface_getSpreadDistance_1=c.Ah;Sj=d._emscripten_bind_SIGSurface_getSpreadDistanceInDirectionOfInterest_1=c.Bh;Tj=d._emscripten_bind_SIGSurface_getSpreadRate_1=c.Ch;Uj=d._emscripten_bind_SIGSurface_getSpreadRateInDirectionOfInterest_1= +c.Dh;Vj=d._emscripten_bind_SIGSurface_getSurfaceFireReactionIntensityForLifeState_1=c.Eh;Wj=d._emscripten_bind_SIGSurface_getTotalLiveFuelLoad_1=c.Fh;Xj=d._emscripten_bind_SIGSurface_getTotalDeadFuelLoad_1=c.Gh;Yj=d._emscripten_bind_SIGSurface_getTotalDeadHerbaceousFuelLoad_1=c.Hh;Zj=d._emscripten_bind_SIGSurface_getWindDirection_0=c.Ih;ak=d._emscripten_bind_SIGSurface_getWindSpeed_2=c.Jh;bk=d._emscripten_bind_SIGSurface_getAspenFuelModelNumber_0=c.Kh;ck=d._emscripten_bind_SIGSurface_getFuelModelNumber_0= +c.Lh;dk=d._emscripten_bind_SIGSurface_getMoistureScenarioIndexByName_1=c.Mh;ek=d._emscripten_bind_SIGSurface_getNumberOfMoistureScenarios_0=c.Nh;fk=d._emscripten_bind_SIGSurface_getFuelCode_1=c.Oh;gk=d._emscripten_bind_SIGSurface_getFuelName_1=c.Ph;hk=d._emscripten_bind_SIGSurface_getMoistureScenarioDescriptionByIndex_1=c.Qh;ik=d._emscripten_bind_SIGSurface_getMoistureScenarioDescriptionByName_1=c.Rh;jk=d._emscripten_bind_SIGSurface_getMoistureScenarioNameByIndex_1=c.Sh;kk=d._emscripten_bind_SIGSurface_doSurfaceRun_0= +c.Th;lk=d._emscripten_bind_SIGSurface_doSurfaceRunInDirectionOfInterest_2=c.Uh;mk=d._emscripten_bind_SIGSurface_doSurfaceRunInDirectionOfMaxSpread_0=c.Vh;nk=d._emscripten_bind_SIGSurface_initializeMembers_0=c.Wh;ok=d._emscripten_bind_SIGSurface_setAgeOfRough_1=c.Xh;pk=d._emscripten_bind_SIGSurface_setAspect_1=c.Yh;qk=d._emscripten_bind_SIGSurface_setAspenCuringLevel_2=c.Zh;rk=d._emscripten_bind_SIGSurface_setAspenDBH_2=c._h;sk=d._emscripten_bind_SIGSurface_setAspenFireSeverity_1=c.$h;tk=d._emscripten_bind_SIGSurface_setAspenFuelModelNumber_1= +c.ai;uk=d._emscripten_bind_SIGSurface_setCanopyCover_2=c.bi;vk=d._emscripten_bind_SIGSurface_setCanopyHeight_2=c.ci;wk=d._emscripten_bind_SIGSurface_setChaparralFuelBedDepth_2=c.di;xk=d._emscripten_bind_SIGSurface_setChaparralFuelDeadLoadFraction_1=c.ei;yk=d._emscripten_bind_SIGSurface_setChaparralFuelLoadInputMode_1=c.fi;zk=d._emscripten_bind_SIGSurface_setChaparralFuelType_1=c.gi;Ak=d._emscripten_bind_SIGSurface_setChaparralTotalFuelLoad_2=c.hi;Bk=d._emscripten_bind_SIGSurface_setCrownRatio_2=c.ii; +Ck=d._emscripten_bind_SIGSurface_setDirectionOfInterest_1=c.ji;Dk=d._emscripten_bind_SIGSurface_setElapsedTime_2=c.ki;Ek=d._emscripten_bind_SIGSurface_setFirstFuelModelNumber_1=c.li;Fk=d._emscripten_bind_SIGSurface_setFuelModels_1=c.mi;Gk=d._emscripten_bind_SIGSurface_setHeightOfUnderstory_2=c.ni;Hk=d._emscripten_bind_SIGSurface_setIsUsingChaparral_1=c.oi;Ik=d._emscripten_bind_SIGSurface_setIsUsingPalmettoGallberry_1=c.pi;Jk=d._emscripten_bind_SIGSurface_setIsUsingWesternAspen_1=c.qi;Kk=d._emscripten_bind_SIGSurface_setMoistureDeadAggregate_2= +c.ri;Lk=d._emscripten_bind_SIGSurface_setMoistureHundredHour_2=c.si;Mk=d._emscripten_bind_SIGSurface_setMoistureInputMode_1=c.ti;Nk=d._emscripten_bind_SIGSurface_setMoistureLiveAggregate_2=c.ui;Ok=d._emscripten_bind_SIGSurface_setMoistureLiveHerbaceous_2=c.vi;Pk=d._emscripten_bind_SIGSurface_setMoistureLiveWoody_2=c.wi;Qk=d._emscripten_bind_SIGSurface_setMoistureOneHour_2=c.xi;Rk=d._emscripten_bind_SIGSurface_setMoistureScenarios_1=c.yi;Sk=d._emscripten_bind_SIGSurface_setMoistureTenHour_2=c.zi;Tk= +d._emscripten_bind_SIGSurface_setOverstoryBasalArea_2=c.Ai;Uk=d._emscripten_bind_SIGSurface_setPalmettoCoverage_2=c.Bi;Vk=d._emscripten_bind_SIGSurface_setSecondFuelModelNumber_1=c.Ci;Wk=d._emscripten_bind_SIGSurface_setSlope_2=c.Di;Xk=d._emscripten_bind_SIGSurface_setSurfaceFireSpreadDirectionMode_1=c.Ei;Yk=d._emscripten_bind_SIGSurface_setSurfaceRunInDirectionOf_1=c.Fi;Zk=d._emscripten_bind_SIGSurface_setTwoFuelModelsFirstFuelModelCoverage_2=c.Gi;$k=d._emscripten_bind_SIGSurface_setTwoFuelModelsMethod_1= +c.Hi;al=d._emscripten_bind_SIGSurface_setUserProvidedWindAdjustmentFactor_1=c.Ii;bl=d._emscripten_bind_SIGSurface_setWindAdjustmentFactorCalculationMethod_1=c.Ji;cl=d._emscripten_bind_SIGSurface_setWindAndSpreadOrientationMode_1=c.Ki;dl=d._emscripten_bind_SIGSurface_setWindDirection_1=c.Li;el=d._emscripten_bind_SIGSurface_setWindHeightInputMode_1=c.Mi;fl=d._emscripten_bind_SIGSurface_setWindSpeed_2=c.Ni;gl=d._emscripten_bind_SIGSurface_updateSurfaceInputs_21=c.Oi;hl=d._emscripten_bind_SIGSurface_updateSurfaceInputsForPalmettoGallbery_25= +c.Pi;il=d._emscripten_bind_SIGSurface_updateSurfaceInputsForTwoFuelModels_25=c.Qi;jl=d._emscripten_bind_SIGSurface_updateSurfaceInputsForWesternAspen_26=c.Ri;kl=d._emscripten_bind_SIGSurface_setFuelModelNumber_1=c.Si;ll=d._emscripten_bind_SIGSurface___destroy___0=c.Ti;ml=d._emscripten_bind_PalmettoGallberry_PalmettoGallberry_0=c.Ui;nl=d._emscripten_bind_PalmettoGallberry_initializeMembers_0=c.Vi;ol=d._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyDeadFineFuelLoad_2=c.Wi;pl=d._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyDeadFoliageLoad_2= +c.Xi;ql=d._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyDeadMediumFuelLoad_2=c.Yi;rl=d._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyFuelBedDepth_1=c.Zi;sl=d._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLitterLoad_2=c._i;tl=d._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLiveFineFuelLoad_2=c.$i;ul=d._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLiveFoliageLoad_3=c.aj;vl=d._emscripten_bind_PalmettoGallberry_calculatePalmettoGallberyLiveMediumFuelLoad_2= +c.bj;wl=d._emscripten_bind_PalmettoGallberry_getHeatOfCombustionDead_0=c.cj;xl=d._emscripten_bind_PalmettoGallberry_getHeatOfCombustionLive_0=c.dj;yl=d._emscripten_bind_PalmettoGallberry_getMoistureOfExtinctionDead_0=c.ej;zl=d._emscripten_bind_PalmettoGallberry_getPalmettoGallberyDeadFineFuelLoad_0=c.fj;Al=d._emscripten_bind_PalmettoGallberry_getPalmettoGallberyDeadFoliageLoad_0=c.gj;Bl=d._emscripten_bind_PalmettoGallberry_getPalmettoGallberyDeadMediumFuelLoad_0=c.hj;Cl=d._emscripten_bind_PalmettoGallberry_getPalmettoGallberyFuelBedDepth_0= +c.ij;Dl=d._emscripten_bind_PalmettoGallberry_getPalmettoGallberyLitterLoad_0=c.jj;El=d._emscripten_bind_PalmettoGallberry_getPalmettoGallberyLiveFineFuelLoad_0=c.kj;Fl=d._emscripten_bind_PalmettoGallberry_getPalmettoGallberyLiveFoliageLoad_0=c.lj;Gl=d._emscripten_bind_PalmettoGallberry_getPalmettoGallberyLiveMediumFuelLoad_0=c.mj;Hl=d._emscripten_bind_PalmettoGallberry___destroy___0=c.nj;Il=d._emscripten_bind_WesternAspen_WesternAspen_0=c.oj;Jl=d._emscripten_bind_WesternAspen_initializeMembers_0= +c.pj;Kl=d._emscripten_bind_WesternAspen_calculateAspenMortality_3=c.qj;Ll=d._emscripten_bind_WesternAspen_getAspenFuelBedDepth_1=c.rj;Ml=d._emscripten_bind_WesternAspen_getAspenHeatOfCombustionDead_0=c.sj;Nl=d._emscripten_bind_WesternAspen_getAspenHeatOfCombustionLive_0=c.tj;Ol=d._emscripten_bind_WesternAspen_getAspenLoadDeadOneHour_0=c.uj;Pl=d._emscripten_bind_WesternAspen_getAspenLoadDeadTenHour_0=c.vj;Ql=d._emscripten_bind_WesternAspen_getAspenLoadLiveHerbaceous_0=c.wj;Rl=d._emscripten_bind_WesternAspen_getAspenLoadLiveWoody_0= +c.xj;Sl=d._emscripten_bind_WesternAspen_getAspenMoistureOfExtinctionDead_0=c.yj;Tl=d._emscripten_bind_WesternAspen_getAspenMortality_0=c.zj;Ul=d._emscripten_bind_WesternAspen_getAspenSavrDeadOneHour_0=c.Aj;Vl=d._emscripten_bind_WesternAspen_getAspenSavrDeadTenHour_0=c.Bj;Wl=d._emscripten_bind_WesternAspen_getAspenSavrLiveHerbaceous_0=c.Cj;Xl=d._emscripten_bind_WesternAspen_getAspenSavrLiveWoody_0=c.Dj;Yl=d._emscripten_bind_WesternAspen___destroy___0=c.Ej;Zl=d._emscripten_bind_SIGCrown_SIGCrown_1= +c.Fj;$l=d._emscripten_bind_SIGCrown_getFireType_0=c.Gj;am=d._emscripten_bind_SIGCrown_getIsMoistureScenarioDefinedByIndex_1=c.Hj;bm=d._emscripten_bind_SIGCrown_getIsMoistureScenarioDefinedByName_1=c.Ij;cm=d._emscripten_bind_SIGCrown_isAllFuelLoadZero_1=c.Jj;dm=d._emscripten_bind_SIGCrown_isFuelDynamic_1=c.Kj;em=d._emscripten_bind_SIGCrown_isFuelModelDefined_1=c.Lj;fm=d._emscripten_bind_SIGCrown_isFuelModelReserved_1=c.Mj;gm=d._emscripten_bind_SIGCrown_setCurrentMoistureScenarioByIndex_1=c.Nj;hm=d._emscripten_bind_SIGCrown_setCurrentMoistureScenarioByName_1= +c.Oj;im=d._emscripten_bind_SIGCrown_getAspect_0=c.Pj;jm=d._emscripten_bind_SIGCrown_getCanopyBaseHeight_1=c.Qj;km=d._emscripten_bind_SIGCrown_getCanopyBulkDensity_1=c.Rj;lm=d._emscripten_bind_SIGCrown_getCanopyCover_1=c.Sj;mm=d._emscripten_bind_SIGCrown_getCanopyHeight_1=c.Tj;nm=d._emscripten_bind_SIGCrown_getCriticalOpenWindSpeed_1=c.Uj;om=d._emscripten_bind_SIGCrown_getCrownCriticalFireSpreadRate_1=c.Vj;pm=d._emscripten_bind_SIGCrown_getCrownCriticalSurfaceFirelineIntensity_1=c.Wj;qm=d._emscripten_bind_SIGCrown_getCrownCriticalSurfaceFlameLength_1= +c.Xj;rm=d._emscripten_bind_SIGCrown_getCrownFireActiveRatio_0=c.Yj;sm=d._emscripten_bind_SIGCrown_getCrownFireArea_1=c.Zj;tm=d._emscripten_bind_SIGCrown_getCrownFirePerimeter_1=c._j;um=d._emscripten_bind_SIGCrown_getCrownTransitionRatio_0=c.$j;vm=d._emscripten_bind_SIGCrown_getCrownFireLengthToWidthRatio_0=c.ak;wm=d._emscripten_bind_SIGCrown_getCrownFireSpreadDistance_1=c.bk;xm=d._emscripten_bind_SIGCrown_getCrownFireSpreadRate_1=c.ck;ym=d._emscripten_bind_SIGCrown_getCrownFirelineIntensity_1=c.dk; +zm=d._emscripten_bind_SIGCrown_getCrownFlameLength_1=c.ek;Am=d._emscripten_bind_SIGCrown_getCrownFractionBurned_0=c.fk;Bm=d._emscripten_bind_SIGCrown_getCrownRatio_1=c.gk;Cm=d._emscripten_bind_SIGCrown_getFinalFirelineIntesity_1=c.hk;Dm=d._emscripten_bind_SIGCrown_getFinalHeatPerUnitArea_1=c.ik;Em=d._emscripten_bind_SIGCrown_getFinalSpreadRate_1=c.jk;Fm=d._emscripten_bind_SIGCrown_getFinalSpreadDistance_1=c.kk;Gm=d._emscripten_bind_SIGCrown_getFinalFireArea_1=c.lk;Hm=d._emscripten_bind_SIGCrown_getFinalFirePerimeter_1= +c.mk;Im=d._emscripten_bind_SIGCrown_getFuelHeatOfCombustionDead_2=c.nk;Jm=d._emscripten_bind_SIGCrown_getFuelHeatOfCombustionLive_2=c.ok;Km=d._emscripten_bind_SIGCrown_getFuelLoadHundredHour_2=c.pk;Lm=d._emscripten_bind_SIGCrown_getFuelLoadLiveHerbaceous_2=c.qk;Mm=d._emscripten_bind_SIGCrown_getFuelLoadLiveWoody_2=c.rk;Nm=d._emscripten_bind_SIGCrown_getFuelLoadOneHour_2=c.sk;Om=d._emscripten_bind_SIGCrown_getFuelLoadTenHour_2=c.tk;Pm=d._emscripten_bind_SIGCrown_getFuelMoistureOfExtinctionDead_2=c.uk; +Qm=d._emscripten_bind_SIGCrown_getFuelSavrLiveHerbaceous_2=c.vk;Rm=d._emscripten_bind_SIGCrown_getFuelSavrLiveWoody_2=c.wk;Sm=d._emscripten_bind_SIGCrown_getFuelSavrOneHour_2=c.xk;Tm=d._emscripten_bind_SIGCrown_getFuelbedDepth_2=c.yk;Um=d._emscripten_bind_SIGCrown_getMoistureFoliar_1=c.zk;Vm=d._emscripten_bind_SIGCrown_getMoistureHundredHour_1=c.Ak;Wm=d._emscripten_bind_SIGCrown_getMoistureLiveHerbaceous_1=c.Bk;Xm=d._emscripten_bind_SIGCrown_getMoistureLiveWoody_1=c.Ck;Ym=d._emscripten_bind_SIGCrown_getMoistureOneHour_1= +c.Dk;Zm=d._emscripten_bind_SIGCrown_getMoistureScenarioHundredHourByIndex_2=c.Ek;$m=d._emscripten_bind_SIGCrown_getMoistureScenarioHundredHourByName_2=c.Fk;an=d._emscripten_bind_SIGCrown_getMoistureScenarioLiveHerbaceousByIndex_2=c.Gk;bn=d._emscripten_bind_SIGCrown_getMoistureScenarioLiveHerbaceousByName_2=c.Hk;cn=d._emscripten_bind_SIGCrown_getMoistureScenarioLiveWoodyByIndex_2=c.Ik;dn=d._emscripten_bind_SIGCrown_getMoistureScenarioLiveWoodyByName_2=c.Jk;en=d._emscripten_bind_SIGCrown_getMoistureScenarioOneHourByIndex_2= +c.Kk;fn=d._emscripten_bind_SIGCrown_getMoistureScenarioOneHourByName_2=c.Lk;gn=d._emscripten_bind_SIGCrown_getMoistureScenarioTenHourByIndex_2=c.Mk;hn=d._emscripten_bind_SIGCrown_getMoistureScenarioTenHourByName_2=c.Nk;jn=d._emscripten_bind_SIGCrown_getMoistureTenHour_1=c.Ok;kn=d._emscripten_bind_SIGCrown_getSlope_1=c.Pk;ln=d._emscripten_bind_SIGCrown_getSurfaceFireSpreadDistance_1=c.Qk;mn=d._emscripten_bind_SIGCrown_getSurfaceFireSpreadRate_1=c.Rk;nn=d._emscripten_bind_SIGCrown_getWindDirection_0= +c.Sk;on=d._emscripten_bind_SIGCrown_getWindSpeed_2=c.Tk;pn=d._emscripten_bind_SIGCrown_getFuelModelNumber_0=c.Uk;qn=d._emscripten_bind_SIGCrown_getMoistureScenarioIndexByName_1=c.Vk;rn=d._emscripten_bind_SIGCrown_getNumberOfMoistureScenarios_0=c.Wk;sn=d._emscripten_bind_SIGCrown_getFuelCode_1=c.Xk;tn=d._emscripten_bind_SIGCrown_getFuelName_1=c.Yk;un=d._emscripten_bind_SIGCrown_getMoistureScenarioDescriptionByIndex_1=c.Zk;vn=d._emscripten_bind_SIGCrown_getMoistureScenarioDescriptionByName_1=c._k;wn= +d._emscripten_bind_SIGCrown_getMoistureScenarioNameByIndex_1=c.$k;xn=d._emscripten_bind_SIGCrown_doCrownRun_0=c.al;yn=d._emscripten_bind_SIGCrown_doCrownRunRothermel_0=c.bl;zn=d._emscripten_bind_SIGCrown_doCrownRunScottAndReinhardt_0=c.cl;An=d._emscripten_bind_SIGCrown_initializeMembers_0=c.dl;Bn=d._emscripten_bind_SIGCrown_setAspect_1=c.el;Cn=d._emscripten_bind_SIGCrown_setCanopyBaseHeight_2=c.fl;Dn=d._emscripten_bind_SIGCrown_setCanopyBulkDensity_2=c.gl;En=d._emscripten_bind_SIGCrown_setCanopyCover_2= +c.hl;Fn=d._emscripten_bind_SIGCrown_setCanopyHeight_2=c.il;Gn=d._emscripten_bind_SIGCrown_setCrownRatio_2=c.jl;Hn=d._emscripten_bind_SIGCrown_setFuelModelNumber_1=c.kl;In=d._emscripten_bind_SIGCrown_setCrownFireCalculationMethod_1=c.ll;Jn=d._emscripten_bind_SIGCrown_setElapsedTime_2=c.ml;Kn=d._emscripten_bind_SIGCrown_setFuelModels_1=c.nl;Ln=d._emscripten_bind_SIGCrown_setMoistureDeadAggregate_2=c.ol;Mn=d._emscripten_bind_SIGCrown_setMoistureFoliar_2=c.pl;Nn=d._emscripten_bind_SIGCrown_setMoistureHundredHour_2= +c.ql;On=d._emscripten_bind_SIGCrown_setMoistureInputMode_1=c.rl;Pn=d._emscripten_bind_SIGCrown_setMoistureLiveAggregate_2=c.sl;Qn=d._emscripten_bind_SIGCrown_setMoistureLiveHerbaceous_2=c.tl;Rn=d._emscripten_bind_SIGCrown_setMoistureLiveWoody_2=c.ul;Sn=d._emscripten_bind_SIGCrown_setMoistureOneHour_2=c.vl;Tn=d._emscripten_bind_SIGCrown_setMoistureScenarios_1=c.wl;Un=d._emscripten_bind_SIGCrown_setMoistureTenHour_2=c.xl;Vn=d._emscripten_bind_SIGCrown_setSlope_2=c.yl;Wn=d._emscripten_bind_SIGCrown_setUserProvidedWindAdjustmentFactor_1= +c.zl;Xn=d._emscripten_bind_SIGCrown_setWindAdjustmentFactorCalculationMethod_1=c.Al;Yn=d._emscripten_bind_SIGCrown_setWindAndSpreadOrientationMode_1=c.Bl;Zn=d._emscripten_bind_SIGCrown_setWindDirection_1=c.Cl;$n=d._emscripten_bind_SIGCrown_setWindHeightInputMode_1=c.Dl;ao=d._emscripten_bind_SIGCrown_setWindSpeed_2=c.El;bo=d._emscripten_bind_SIGCrown_updateCrownInputs_25=c.Fl;co=d._emscripten_bind_SIGCrown_updateCrownsSurfaceInputs_21=c.Gl;eo=d._emscripten_bind_SIGCrown_getFinalFlameLength_1=c.Hl; +fo=d._emscripten_bind_SIGCrown___destroy___0=c.Il;go=d._emscripten_bind_SpeciesMasterTableRecord_SpeciesMasterTableRecord_0=c.Jl;ho=d._emscripten_bind_SpeciesMasterTableRecord_SpeciesMasterTableRecord_1=c.Kl;io=d._emscripten_bind_SpeciesMasterTableRecord___destroy___0=c.Ll;jo=d._emscripten_bind_SpeciesMasterTable_SpeciesMasterTable_0=c.Ml;ko=d._emscripten_bind_SpeciesMasterTable_initializeMasterTable_0=c.Nl;lo=d._emscripten_bind_SpeciesMasterTable_getSpeciesTableIndexFromSpeciesCode_1=c.Ol;mo=d._emscripten_bind_SpeciesMasterTable_getSpeciesTableIndexFromSpeciesCodeAndEquationType_2= +c.Pl;no=d._emscripten_bind_SpeciesMasterTable_insertRecord_17=c.Ql;oo=d._emscripten_bind_SpeciesMasterTable___destroy___0=c.Rl;po=d._emscripten_bind_SIGMortality_SIGMortality_1=c.Sl;qo=d._emscripten_bind_SIGMortality_initializeMembers_0=c.Tl;ro=d._emscripten_bind_SIGMortality_checkIsInGACCRegionAtSpeciesTableIndex_2=c.Ul;so=d._emscripten_bind_SIGMortality_checkIsInGACCRegionFromSpeciesCode_2=c.Vl;to=d._emscripten_bind_SIGMortality_updateInputsForSpeciesCodeAndEquationType_2=c.Wl;uo=d._emscripten_bind_SIGMortality_calculateMortality_1= +c.Xl;vo=d._emscripten_bind_SIGMortality_calculateScorchHeight_7=c.Yl;wo=d._emscripten_bind_SIGMortality_calculateMortalityAllDirections_1=c.Zl;xo=d._emscripten_bind_SIGMortality_getRequiredFieldVector_0=c._l;yo=d._emscripten_bind_SIGMortality_getBeetleDamage_0=c.$l;zo=d._emscripten_bind_SIGMortality_getCrownDamageEquationCode_0=c.am;Ao=d._emscripten_bind_SIGMortality_getCrownDamageEquationCodeAtSpeciesTableIndex_1=c.bm;Bo=d._emscripten_bind_SIGMortality_getCrownDamageEquationCodeFromSpeciesCode_1= +c.cm;Co=d._emscripten_bind_SIGMortality_getCrownDamageType_0=c.dm;Do=d._emscripten_bind_SIGMortality_getCommonNameAtSpeciesTableIndex_1=c.em;Eo=d._emscripten_bind_SIGMortality_getCommonNameFromSpeciesCode_1=c.fm;Fo=d._emscripten_bind_SIGMortality_getScientificNameAtSpeciesTableIndex_1=c.gm;Go=d._emscripten_bind_SIGMortality_getScientificNameFromSpeciesCode_1=c.hm;Ho=d._emscripten_bind_SIGMortality_getSpeciesCode_0=c.im;Io=d._emscripten_bind_SIGMortality_getSpeciesCodeAtSpeciesTableIndex_1=c.jm;Jo= +d._emscripten_bind_SIGMortality_getEquationType_0=c.km;Ko=d._emscripten_bind_SIGMortality_getEquationTypeAtSpeciesTableIndex_1=c.lm;Lo=d._emscripten_bind_SIGMortality_getEquationTypeFromSpeciesCode_1=c.mm;Mo=d._emscripten_bind_SIGMortality_getFireSeverity_0=c.nm;No=d._emscripten_bind_SIGMortality_getFlameLengthOrScorchHeightSwitch_0=c.om;Oo=d._emscripten_bind_SIGMortality_getGACCRegion_0=c.pm;Po=d._emscripten_bind_SIGMortality_getSpeciesRecordVectorForGACCRegion_1=c.qm;Qo=d._emscripten_bind_SIGMortality_getSpeciesRecordVectorForGACCRegionAndEquationType_2= +c.rm;Ro=d._emscripten_bind_SIGMortality_getBarkThickness_1=c.sm;So=d._emscripten_bind_SIGMortality_getBasalAreaKillled_0=c.tm;To=d._emscripten_bind_SIGMortality_getBasalAreaPostfire_0=c.um;Uo=d._emscripten_bind_SIGMortality_getBasalAreaPrefire_0=c.vm;Vo=d._emscripten_bind_SIGMortality_getBoleCharHeight_1=c.wm;Wo=d._emscripten_bind_SIGMortality_getBoleCharHeightBacking_1=c.xm;Xo=d._emscripten_bind_SIGMortality_getBoleCharHeightFlanking_1=c.ym;Yo=d._emscripten_bind_SIGMortality_getCambiumKillRating_0= +c.zm;Zo=d._emscripten_bind_SIGMortality_getCrownDamage_0=c.Am;$o=d._emscripten_bind_SIGMortality_getCrownRatio_1=c.Bm;ap=d._emscripten_bind_SIGMortality_getCVSorCLS_0=c.Cm;bp=d._emscripten_bind_SIGMortality_getDBH_1=c.Dm;cp=d._emscripten_bind_SIGMortality_getFlameLength_1=c.Em;dp=d._emscripten_bind_SIGMortality_getFlameLengthOrScorchHeightValue_1=c.Fm;ep=d._emscripten_bind_SIGMortality_getKilledTrees_0=c.Gm;fp=d._emscripten_bind_SIGMortality_getProbabilityOfMortality_1=c.Hm;gp=d._emscripten_bind_SIGMortality_getProbabilityOfMortalityBacking_1= +c.Im;hp=d._emscripten_bind_SIGMortality_getProbabilityOfMortalityFlanking_1=c.Jm;ip=d._emscripten_bind_SIGMortality_getScorchHeight_1=c.Km;jp=d._emscripten_bind_SIGMortality_getScorchHeightBacking_1=c.Lm;kp=d._emscripten_bind_SIGMortality_getScorchHeightFlanking_1=c.Mm;lp=d._emscripten_bind_SIGMortality_getTotalPrefireTrees_0=c.Nm;mp=d._emscripten_bind_SIGMortality_getTreeCrownLengthScorched_1=c.Om;np=d._emscripten_bind_SIGMortality_getTreeCrownLengthScorchedBacking_1=c.Pm;op=d._emscripten_bind_SIGMortality_getTreeCrownLengthScorchedFlanking_1= +c.Qm;pp=d._emscripten_bind_SIGMortality_getTreeCrownVolumeScorched_1=c.Rm;qp=d._emscripten_bind_SIGMortality_getTreeCrownVolumeScorchedBacking_1=c.Sm;rp=d._emscripten_bind_SIGMortality_getTreeCrownVolumeScorchedFlanking_1=c.Tm;sp=d._emscripten_bind_SIGMortality_getTreeDensityPerUnitArea_1=c.Um;tp=d._emscripten_bind_SIGMortality_getTreeHeight_1=c.Vm;up=d._emscripten_bind_SIGMortality_postfireCanopyCover_0=c.Wm;vp=d._emscripten_bind_SIGMortality_prefireCanopyCover_0=c.Xm;wp=d._emscripten_bind_SIGMortality_getBarkEquationNumberAtSpeciesTableIndex_1= +c.Ym;xp=d._emscripten_bind_SIGMortality_getBarkEquationNumberFromSpeciesCode_1=c.Zm;yp=d._emscripten_bind_SIGMortality_getCrownCoefficientCodeAtSpeciesTableIndex_1=c._m;zp=d._emscripten_bind_SIGMortality_getCrownCoefficientCodeFromSpeciesCode_1=c.$m;Ap=d._emscripten_bind_SIGMortality_getCrownScorchOrBoleCharEquationNumber_0=c.an;Bp=d._emscripten_bind_SIGMortality_getMortalityEquationNumberAtSpeciesTableIndex_1=c.bn;Cp=d._emscripten_bind_SIGMortality_getMortalityEquationNumberFromSpeciesCode_1=c.cn; +Dp=d._emscripten_bind_SIGMortality_getNumberOfRecordsInSpeciesTable_0=c.dn;Ep=d._emscripten_bind_SIGMortality_getSpeciesTableIndexFromSpeciesCode_1=c.en;Fp=d._emscripten_bind_SIGMortality_getSpeciesTableIndexFromSpeciesCodeAndEquationType_2=c.fn;Gp=d._emscripten_bind_SIGMortality_setAirTemperature_2=c.gn;Hp=d._emscripten_bind_SIGMortality_setBeetleDamage_1=c.hn;Ip=d._emscripten_bind_SIGMortality_setBoleCharHeight_2=c.jn;Jp=d._emscripten_bind_SIGMortality_setCambiumKillRating_1=c.kn;Kp=d._emscripten_bind_SIGMortality_setCrownDamage_1= +c.ln;Lp=d._emscripten_bind_SIGMortality_setCrownRatio_2=c.mn;Mp=d._emscripten_bind_SIGMortality_setDBH_2=c.nn;Np=d._emscripten_bind_SIGMortality_setEquationType_1=c.on;Op=d._emscripten_bind_SIGMortality_setFireSeverity_1=c.pn;Pp=d._emscripten_bind_SIGMortality_setFirelineIntensity_2=c.qn;Qp=d._emscripten_bind_SIGMortality_setFlameLength_2=c.rn;Rp=d._emscripten_bind_SIGMortality_setFlameLengthOrScorchHeightSwitch_1=c.sn;Sp=d._emscripten_bind_SIGMortality_setFlameLengthOrScorchHeightValue_2=c.tn;Tp= +d._emscripten_bind_SIGMortality_setMidFlameWindSpeed_2=c.un;Up=d._emscripten_bind_SIGMortality_setGACCRegion_1=c.vn;Vp=d._emscripten_bind_SIGMortality_setScorchHeight_2=c.wn;Wp=d._emscripten_bind_SIGMortality_setSpeciesCode_1=c.xn;Xp=d._emscripten_bind_SIGMortality_setSurfaceFireFirelineIntensity_2=c.yn;Yp=d._emscripten_bind_SIGMortality_setSurfaceFireFirelineIntensityBacking_2=c.zn;Zp=d._emscripten_bind_SIGMortality_setSurfaceFireFirelineIntensityFlanking_2=c.An;$p=d._emscripten_bind_SIGMortality_setSurfaceFireFlameLength_2= +c.Bn;aq=d._emscripten_bind_SIGMortality_setSurfaceFireFlameLengthBacking_2=c.Cn;bq=d._emscripten_bind_SIGMortality_setSurfaceFireFlameLengthFlanking_2=c.Dn;cq=d._emscripten_bind_SIGMortality_setSurfaceFireScorchHeight_2=c.En;dq=d._emscripten_bind_SIGMortality_setTreeDensityPerUnitArea_2=c.Fn;eq=d._emscripten_bind_SIGMortality_setTreeHeight_2=c.Gn;fq=d._emscripten_bind_SIGMortality_setUserProvidedWindAdjustmentFactor_1=c.Hn;gq=d._emscripten_bind_SIGMortality_setWindHeightInputMode_1=c.In;hq=d._emscripten_bind_SIGMortality_setWindSpeed_2= +c.Jn;iq=d._emscripten_bind_SIGMortality_setWindSpeedAndWindHeightInputMode_4=c.Kn;jq=d._emscripten_bind_SIGMortality___destroy___0=c.Ln;kq=d._emscripten_bind_WindSpeedUtility_WindSpeedUtility_0=c.Mn;lq=d._emscripten_bind_WindSpeedUtility_windSpeedAtMidflame_2=c.Nn;mq=d._emscripten_bind_WindSpeedUtility_windSpeedAtTwentyFeetFromTenMeter_1=c.On;nq=d._emscripten_bind_WindSpeedUtility___destroy___0=c.Pn;oq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_SIGFineDeadFuelMoistureTool_0=c.Qn;pq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_calculate_0= +c.Rn;qq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_setTimeOfDayIndex_1=c.Sn;rq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_setSlopeIndex_1=c.Tn;sq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_setShadingIndex_1=c.Un;tq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_setAspectIndex_1=c.Vn;uq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_setRHIndex_1=c.Wn;vq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_setElevationIndex_1=c.Xn;wq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_setDryBulbIndex_1= +c.Yn;xq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_setMonthIndex_1=c.Zn;yq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_getFineDeadFuelMoisture_1=c._n;zq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_getSlopeIndexSize_0=c.$n;Aq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_getElevationIndexSize_0=c.ao;Bq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_getMonthIndexSize_0=c.bo;Cq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_getDryBulbTemperatureIndexSize_0=c.co;Dq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_getReferenceMoisture_1= +c.eo;Eq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_calculateByIndex_8=c.fo;Fq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_getTimeOfDayIndexSize_0=c.go;Gq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_getCorrectionMoisture_1=c.ho;Hq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_getAspectIndexSize_0=c.io;Iq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_getShadingIndexSize_0=c.jo;Jq=d._emscripten_bind_SIGFineDeadFuelMoistureTool_getRelativeHumidityIndexSize_0=c.ko;Kq=d._emscripten_bind_SIGFineDeadFuelMoistureTool___destroy___0= +c.lo;Lq=d._emscripten_bind_SIGSlopeTool_SIGSlopeTool_0=c.mo;Mq=d._emscripten_bind_SIGSlopeTool_getCentimetersPerKilometerAtIndex_1=c.no;Nq=d._emscripten_bind_SIGSlopeTool_getCentimetersPerKilometerAtRepresentativeFraction_1=c.oo;Oq=d._emscripten_bind_SIGSlopeTool_getHorizontalDistance_2=c.po;Pq=d._emscripten_bind_SIGSlopeTool_getHorizontalDistanceAtIndex_2=c.qo;Qq=d._emscripten_bind_SIGSlopeTool_getHorizontalDistanceFifteen_1=c.ro;Rq=d._emscripten_bind_SIGSlopeTool_getHorizontalDistanceFourtyFive_1= +c.so;Sq=d._emscripten_bind_SIGSlopeTool_getHorizontalDistanceMaxSlope_1=c.to;Tq=d._emscripten_bind_SIGSlopeTool_getHorizontalDistanceNinety_1=c.uo;Uq=d._emscripten_bind_SIGSlopeTool_getHorizontalDistanceSeventy_1=c.vo;Vq=d._emscripten_bind_SIGSlopeTool_getHorizontalDistanceSixty_1=c.wo;Wq=d._emscripten_bind_SIGSlopeTool_getHorizontalDistanceThirty_1=c.xo;Xq=d._emscripten_bind_SIGSlopeTool_getHorizontalDistanceZero_1=c.yo;Yq=d._emscripten_bind_SIGSlopeTool_getInchesPerMileAtIndex_1=c.zo;Zq=d._emscripten_bind_SIGSlopeTool_getInchesPerMileAtRepresentativeFraction_1= +c.Ao;$q=d._emscripten_bind_SIGSlopeTool_getKilometersPerCentimeterAtIndex_1=c.Bo;ar=d._emscripten_bind_SIGSlopeTool_getKilometersPerCentimeterAtRepresentativeFraction_1=c.Co;br=d._emscripten_bind_SIGSlopeTool_getMilesPerInchAtIndex_1=c.Do;cr=d._emscripten_bind_SIGSlopeTool_getMilesPerInchAtRepresentativeFraction_1=c.Eo;dr=d._emscripten_bind_SIGSlopeTool_getSlopeElevationChangeFromMapMeasurements_1=c.Fo;er=d._emscripten_bind_SIGSlopeTool_getSlopeFromMapMeasurements_1=c.Go;fr=d._emscripten_bind_SIGSlopeTool_getSlopeHorizontalDistanceFromMapMeasurements_1= +c.Ho;gr=d._emscripten_bind_SIGSlopeTool_getSlopeFromMapMeasurementsInDegrees_0=c.Io;hr=d._emscripten_bind_SIGSlopeTool_getSlopeFromMapMeasurementsInPercent_0=c.Jo;ir=d._emscripten_bind_SIGSlopeTool_getNumberOfHorizontalDistances_0=c.Ko;jr=d._emscripten_bind_SIGSlopeTool_getNumberOfRepresentativeFractions_0=c.Lo;kr=d._emscripten_bind_SIGSlopeTool_getRepresentativeFractionAtIndex_1=c.Mo;lr=d._emscripten_bind_SIGSlopeTool_getRepresentativeFractionAtRepresentativeFraction_1=c.No;mr=d._emscripten_bind_SIGSlopeTool_calculateHorizontalDistance_0= +c.Oo;nr=d._emscripten_bind_SIGSlopeTool_calculateSlopeFromMapMeasurements_0=c.Po;or=d._emscripten_bind_SIGSlopeTool_setCalculatedMapDistance_2=c.Qo;pr=d._emscripten_bind_SIGSlopeTool_setContourInterval_2=c.Ro;qr=d._emscripten_bind_SIGSlopeTool_setMapDistance_2=c.So;rr=d._emscripten_bind_SIGSlopeTool_setMapRepresentativeFraction_1=c.To;sr=d._emscripten_bind_SIGSlopeTool_setMaxSlopeSteepness_1=c.Uo;tr=d._emscripten_bind_SIGSlopeTool_setNumberOfContours_1=c.Vo;ur=d._emscripten_bind_SIGSlopeTool___destroy___0= +c.Wo;vr=d._emscripten_bind_VaporPressureDeficitCalculator_VaporPressureDeficitCalculator_0=c.Xo;wr=d._emscripten_bind_VaporPressureDeficitCalculator_runCalculation_0=c.Yo;xr=d._emscripten_bind_VaporPressureDeficitCalculator_setTemperature_2=c.Zo;yr=d._emscripten_bind_VaporPressureDeficitCalculator_setRelativeHumidity_2=c._o;zr=d._emscripten_bind_VaporPressureDeficitCalculator_getVaporPressureDeficit_1=c.$o;Ar=d._emscripten_bind_VaporPressureDeficitCalculator___destroy___0=c.ap;Br=d._emscripten_bind_RelativeHumidityTool_RelativeHumidityTool_0= +c.bp;Cr=d._emscripten_bind_RelativeHumidityTool_calculate_0=c.cp;Dr=d._emscripten_bind_RelativeHumidityTool_getDryBulbTemperature_1=c.dp;Er=d._emscripten_bind_RelativeHumidityTool_getSiteElevation_1=c.ep;Fr=d._emscripten_bind_RelativeHumidityTool_getWetBulbTemperature_1=c.fp;Gr=d._emscripten_bind_RelativeHumidityTool_getDewPointTemperature_1=c.gp;Hr=d._emscripten_bind_RelativeHumidityTool_getRelativeHumidity_1=c.hp;Ir=d._emscripten_bind_RelativeHumidityTool_getWetBulbDepression_1=c.ip;Jr=d._emscripten_bind_RelativeHumidityTool_setDryBulbTemperature_2= +c.jp;Kr=d._emscripten_bind_RelativeHumidityTool_setSiteElevation_2=c.kp;Lr=d._emscripten_bind_RelativeHumidityTool_setWetBulbTemperature_2=c.lp;Mr=d._emscripten_bind_RelativeHumidityTool___destroy___0=c.mp;Nr=d._emscripten_bind_SafeSeparationDistanceCalculator_SafeSeparationDistanceCalculator_0=c.np;Or=d._emscripten_bind_SafeSeparationDistanceCalculator_calculate_0=c.op;Pr=d._emscripten_bind_SafeSeparationDistanceCalculator_getBurningCondition_0=c.pp;Qr=d._emscripten_bind_SafeSeparationDistanceCalculator_getSlopeClass_0= +c.qp;Rr=d._emscripten_bind_SafeSeparationDistanceCalculator_getSpeedClass_0=c.rp;Sr=d._emscripten_bind_SafeSeparationDistanceCalculator_getSafeSeparationDistance_1=c.sp;Tr=d._emscripten_bind_SafeSeparationDistanceCalculator_getSafetyZoneSize_1=c.tp;Ur=d._emscripten_bind_SafeSeparationDistanceCalculator_getVegetationHeight_1=c.up;Vr=d._emscripten_bind_SafeSeparationDistanceCalculator_getSafetyCondition_0=c.vp;Wr=d._emscripten_bind_SafeSeparationDistanceCalculator_setBurningCondition_1=c.wp;Xr=d._emscripten_bind_SafeSeparationDistanceCalculator_setSlopeClass_1= +c.xp;Yr=d._emscripten_bind_SafeSeparationDistanceCalculator_setSpeedClass_1=c.yp;Zr=d._emscripten_bind_SafeSeparationDistanceCalculator_setVegetationHeight_2=c.zp;$r=d._emscripten_bind_SafeSeparationDistanceCalculator___destroy___0=c.Ap;as=d._emscripten_enum_AreaUnits_AreaUnitsEnum_SquareFeet=c.Bp;bs=d._emscripten_enum_AreaUnits_AreaUnitsEnum_Acres=c.Cp;cs=d._emscripten_enum_AreaUnits_AreaUnitsEnum_Hectares=c.Dp;ds=d._emscripten_enum_AreaUnits_AreaUnitsEnum_SquareMeters=c.Ep;es=d._emscripten_enum_AreaUnits_AreaUnitsEnum_SquareMiles= +c.Fp;fs=d._emscripten_enum_AreaUnits_AreaUnitsEnum_SquareKilometers=c.Gp;gs=d._emscripten_enum_BasalAreaUnits_BasalAreaUnitsEnum_SquareFeetPerAcre=c.Hp;hs=d._emscripten_enum_BasalAreaUnits_BasalAreaUnitsEnum_SquareMetersPerHectare=c.Ip;is=d._emscripten_enum_FractionUnits_FractionUnitsEnum_Fraction=c.Jp;js=d._emscripten_enum_FractionUnits_FractionUnitsEnum_Percent=c.Kp;ks=d._emscripten_enum_LengthUnits_LengthUnitsEnum_Feet=c.Lp;ls=d._emscripten_enum_LengthUnits_LengthUnitsEnum_Inches=c.Mp;ms=d._emscripten_enum_LengthUnits_LengthUnitsEnum_Millimeters= +c.Np;ns=d._emscripten_enum_LengthUnits_LengthUnitsEnum_Centimeters=c.Op;ps=d._emscripten_enum_LengthUnits_LengthUnitsEnum_Meters=c.Pp;qs=d._emscripten_enum_LengthUnits_LengthUnitsEnum_Chains=c.Qp;rs=d._emscripten_enum_LengthUnits_LengthUnitsEnum_Miles=c.Rp;ss=d._emscripten_enum_LengthUnits_LengthUnitsEnum_Kilometers=c.Sp;ts=d._emscripten_enum_LoadingUnits_LoadingUnitsEnum_PoundsPerSquareFoot=c.Tp;us=d._emscripten_enum_LoadingUnits_LoadingUnitsEnum_TonsPerAcre=c.Up;vs=d._emscripten_enum_LoadingUnits_LoadingUnitsEnum_TonnesPerHectare= +c.Vp;ws=d._emscripten_enum_LoadingUnits_LoadingUnitsEnum_KilogramsPerSquareMeter=c.Wp;xs=d._emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareFeetOverCubicFeet=c.Xp;ys=d._emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareMetersOverCubicMeters=c.Yp;zs=d._emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareInchesOverCubicInches=c.Zp;As=d._emscripten_enum_SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum_SquareCentimetersOverCubicCentimeters= +c._p;Bs=d._emscripten_enum_SpeedUnits_SpeedUnitsEnum_FeetPerMinute=c.$p;Cs=d._emscripten_enum_SpeedUnits_SpeedUnitsEnum_ChainsPerHour=c.aq;Ds=d._emscripten_enum_SpeedUnits_SpeedUnitsEnum_MetersPerSecond=c.bq;Es=d._emscripten_enum_SpeedUnits_SpeedUnitsEnum_MetersPerMinute=c.cq;Fs=d._emscripten_enum_SpeedUnits_SpeedUnitsEnum_MetersPerHour=c.dq;Gs=d._emscripten_enum_SpeedUnits_SpeedUnitsEnum_MilesPerHour=c.eq;Hs=d._emscripten_enum_SpeedUnits_SpeedUnitsEnum_KilometersPerHour=c.fq;Is=d._emscripten_enum_SpeedUnits_SpeedUnitsEnum_FurlongsPerFortnight= +c.gq;Js=d._emscripten_enum_PressureUnits_PressureUnitsEnum_Pascal=c.hq;Ks=d._emscripten_enum_PressureUnits_PressureUnitsEnum_HectoPascal=c.iq;Ls=d._emscripten_enum_PressureUnits_PressureUnitsEnum_KiloPascal=c.jq;Ms=d._emscripten_enum_PressureUnits_PressureUnitsEnum_MegaPascal=c.kq;Ns=d._emscripten_enum_PressureUnits_PressureUnitsEnum_GigaPascal=c.lq;Os=d._emscripten_enum_PressureUnits_PressureUnitsEnum_Bar=c.mq;Ps=d._emscripten_enum_PressureUnits_PressureUnitsEnum_Atmosphere=c.nq;Qs=d._emscripten_enum_PressureUnits_PressureUnitsEnum_TechnicalAtmosphere= +c.oq;Rs=d._emscripten_enum_PressureUnits_PressureUnitsEnum_PoundPerSquareInch=c.pq;Ss=d._emscripten_enum_SlopeUnits_SlopeUnitsEnum_Degrees=c.qq;Ts=d._emscripten_enum_SlopeUnits_SlopeUnitsEnum_Percent=c.rq;Us=d._emscripten_enum_DensityUnits_DensityUnitsEnum_PoundsPerCubicFoot=c.sq;Vs=d._emscripten_enum_DensityUnits_DensityUnitsEnum_KilogramsPerCubicMeter=c.tq;Ws=d._emscripten_enum_HeatOfCombustionUnits_HeatOfCombustionUnitsEnum_BtusPerPound=c.uq;Xs=d._emscripten_enum_HeatOfCombustionUnits_HeatOfCombustionUnitsEnum_KilojoulesPerKilogram= +c.vq;Ys=d._emscripten_enum_HeatSinkUnits_HeatSinkUnitsEnum_BtusPerCubicFoot=c.wq;Zs=d._emscripten_enum_HeatSinkUnits_HeatSinkUnitsEnum_KilojoulesPerCubicMeter=c.xq;$s=d._emscripten_enum_HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum_BtusPerSquareFoot=c.yq;at=d._emscripten_enum_HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum_KilojoulesPerSquareMeter=c.zq;bt=d._emscripten_enum_HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum_KilowattSecondsPerSquareMeter=c.Aq;ct=d._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_BtusPerSquareFootPerMinute= +c.Bq;dt=d._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_BtusPerSquareFootPerSecond=c.Cq;et=d._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_KilojoulesPerSquareMeterPerSecond=c.Dq;ft=d._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_KilojoulesPerSquareMeterPerMinute=c.Eq;gt=d._emscripten_enum_HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum_KilowattsPerSquareMeter= +c.Fq;ht=d._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_BtusPerFootPerSecond=c.Gq;it=d._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_BtusPerFootPerMinute=c.Hq;jt=d._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_KilojoulesPerMeterPerSecond=c.Iq;kt=d._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_KilojoulesPerMeterPerMinute=c.Jq;lt=d._emscripten_enum_FirelineIntensityUnits_FirelineIntensityUnitsEnum_KilowattsPerMeter= +c.Kq;mt=d._emscripten_enum_TemperatureUnits_TemperatureUnitsEnum_Fahrenheit=c.Lq;nt=d._emscripten_enum_TemperatureUnits_TemperatureUnitsEnum_Celsius=c.Mq;ot=d._emscripten_enum_TemperatureUnits_TemperatureUnitsEnum_Kelvin=c.Nq;pt=d._emscripten_enum_TimeUnits_TimeUnitsEnum_Minutes=c.Oq;qt=d._emscripten_enum_TimeUnits_TimeUnitsEnum_Seconds=c.Pq;rt=d._emscripten_enum_TimeUnits_TimeUnitsEnum_Hours=c.Qq;st=d._emscripten_enum_TimeUnits_TimeUnitsEnum_Days=c.Rq;tt=d._emscripten_enum_TimeUnits_TimeUnitsEnum_Years= +c.Sq;ut=d._emscripten_enum_ContainTactic_ContainTacticEnum_HeadAttack=c.Tq;vt=d._emscripten_enum_ContainTactic_ContainTacticEnum_RearAttack=c.Uq;wt=d._emscripten_enum_ContainStatus_ContainStatusEnum_Unreported=c.Vq;xt=d._emscripten_enum_ContainStatus_ContainStatusEnum_Reported=c.Wq;yt=d._emscripten_enum_ContainStatus_ContainStatusEnum_Attacked=c.Xq;zt=d._emscripten_enum_ContainStatus_ContainStatusEnum_Contained=c.Yq;At=d._emscripten_enum_ContainStatus_ContainStatusEnum_Overrun=c.Zq;Bt=d._emscripten_enum_ContainStatus_ContainStatusEnum_Exhausted= +c._q;Ct=d._emscripten_enum_ContainStatus_ContainStatusEnum_Overflow=c.$q;Dt=d._emscripten_enum_ContainStatus_ContainStatusEnum_SizeLimitExceeded=c.ar;Et=d._emscripten_enum_ContainStatus_ContainStatusEnum_TimeLimitExceeded=c.br;Ft=d._emscripten_enum_ContainFlank_ContainFlankEnum_LeftFlank=c.cr;Gt=d._emscripten_enum_ContainFlank_ContainFlankEnum_RightFlank=c.dr;Ht=d._emscripten_enum_ContainFlank_ContainFlankEnum_BothFlanks=c.er;It=d._emscripten_enum_ContainFlank_ContainFlankEnum_NeitherFlank=c.fr;Jt= +d._emscripten_enum_ContainMode_Default=c.gr;Kt=d._emscripten_enum_ContainMode_ComputeWithOptimalResource=c.hr;Lt=d._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PonderosaPineLitter=c.ir;Mt=d._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PunkyWoodRottenChunky=c.jr;Nt=d._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PunkyWoodPowderDeep=c.kr;Ot=d._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PunkWoodPowderShallow=c.lr;Pt=d._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_LodgepolePineDuff= +c.mr;Qt=d._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_DouglasFirDuff=c.nr;Rt=d._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_HighAltitudeMixed=c.or;St=d._emscripten_enum_IgnitionFuelBedType_IgnitionFuelBedTypeEnum_PeatMoss=c.pr;Tt=d._emscripten_enum_LightningCharge_LightningChargeEnum_Negative=c.qr;Ut=d._emscripten_enum_LightningCharge_LightningChargeEnum_Positive=c.rr;Vt=d._emscripten_enum_LightningCharge_LightningChargeEnum_Unknown=c.sr;Wt=d._emscripten_enum_SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum_CLOSED= +c.tr;Xt=d._emscripten_enum_SpotDownWindCanopyMode_SpotDownWindCanopyModeEnum_OPEN=c.ur;Yt=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_ENGELMANN_SPRUCE=c.vr;Zt=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_DOUGLAS_FIR=c.wr;$t=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_SUBALPINE_FIR=c.xr;au=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_WESTERN_HEMLOCK=c.yr;bu=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_PONDEROSA_PINE=c.zr;cu=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_LODGEPOLE_PINE= +c.Ar;du=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_WESTERN_WHITE_PINE=c.Br;eu=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_GRAND_FIR=c.Cr;fu=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_BALSAM_FIR=c.Dr;gu=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_SLASH_PINE=c.Er;hu=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_LONGLEAF_PINE=c.Fr;iu=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_POND_PINE=c.Gr;ju=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_SHORTLEAF_PINE= +c.Hr;ku=d._emscripten_enum_SpotTreeSpecies_SpotTreeSpeciesEnum_LOBLOLLY_PINE=c.Ir;lu=d._emscripten_enum_SpotFireLocation_SpotFireLocationEnum_MIDSLOPE_WINDWARD=c.Jr;mu=d._emscripten_enum_SpotFireLocation_SpotFireLocationEnum_VALLEY_BOTTOM=c.Kr;nu=d._emscripten_enum_SpotFireLocation_SpotFireLocationEnum_MIDSLOPE_LEEWARD=c.Lr;ou=d._emscripten_enum_SpotFireLocation_SpotFireLocationEnum_RIDGE_TOP=c.Mr;pu=d._emscripten_enum_FuelLifeState_FuelLifeStateEnum_Dead=c.Nr;qu=d._emscripten_enum_FuelLifeState_FuelLifeStateEnum_Live= +c.Or;ru=d._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxLifeStates=c.Pr;su=d._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxLiveSizeClasses=c.Qr;tu=d._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxDeadSizeClasses=c.Rr;uu=d._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxParticles=c.Sr;vu=d._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxSavrSizeClasses=c.Tr;wu=d._emscripten_enum_FuelConstantsEnum_FuelConstantsEnum_MaxFuelModels=c.Ur;xu=d._emscripten_enum_AspenFireSeverity_AspenFireSeverityEnum_Low= +c.Vr;yu=d._emscripten_enum_AspenFireSeverity_AspenFireSeverityEnum_Moderate=c.Wr;zu=d._emscripten_enum_ChaparralFuelType_ChaparralFuelTypeEnum_NotSet=c.Xr;Au=d._emscripten_enum_ChaparralFuelType_ChaparralFuelTypeEnum_Chamise=c.Yr;Bu=d._emscripten_enum_ChaparralFuelType_ChaparralFuelTypeEnum_MixedBrush=c.Zr;Cu=d._emscripten_enum_ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum_DirectFuelLoad=c._r;Du=d._emscripten_enum_ChaparralFuelLoadInputMode_ChaparralFuelInputLoadModeEnum_FuelLoadFromDepthAndChaparralType= +c.$r;Eu=d._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_BySizeClass=c.as;Fu=d._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_AllAggregate=c.bs;Gu=d._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_DeadAggregateAndLiveSizeClass=c.cs;Hu=d._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_LiveAggregateAndDeadSizeClass=c.ds;Iu=d._emscripten_enum_MoistureInputMode_MoistureInputModeEnum_MoistureScenario=c.es;Ju=d._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_OneHour= +c.fs;Ku=d._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_TenHour=c.gs;Lu=d._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_HundredHour=c.hs;Mu=d._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_LiveHerbaceous=c.is;Nu=d._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_LiveWoody=c.js;Ou=d._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_DeadAggregate=c.ks;Pu=d._emscripten_enum_MoistureClassInput_MoistureClassInputEnum_LiveAggregate=c.ls;Qu=d._emscripten_enum_SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum_FromIgnitionPoint= +c.ms;Ru=d._emscripten_enum_SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum_FromPerimeter=c.ns;Su=d._emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_NoMethod=c.os;Tu=d._emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_Arithmetic=c.ps;Uu=d._emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_Harmonic=c.qs;Vu=d._emscripten_enum_TwoFuelModelsMethod_TwoFuelModelsMethodEnum_TwoDimensional=c.rs;Wu=d._emscripten_enum_WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum_Unsheltered= +c.ss;Xu=d._emscripten_enum_WindAdjustmentFactorShelterMethod_WindAdjustmentFactorShelterMethodEnum_Sheltered=c.ts;Yu=d._emscripten_enum_WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum_UserInput=c.us;Zu=d._emscripten_enum_WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum_UseCrownRatio=c.vs;$u=d._emscripten_enum_WindAdjustmentFactorCalculationMethod_WindAdjustmentFactorCalculationMethodEnum_DontUseCrownRatio=c.ws;av=d._emscripten_enum_WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum_RelativeToUpslope= +c.xs;bv=d._emscripten_enum_WindAndSpreadOrientationMode_WindAndSpreadOrientationModeEnum_RelativeToNorth=c.ys;cv=d._emscripten_enum_WindHeightInputMode_WindHeightInputModeEnum_DirectMidflame=c.zs;dv=d._emscripten_enum_WindHeightInputMode_WindHeightInputModeEnum_TwentyFoot=c.As;ev=d._emscripten_enum_WindHeightInputMode_WindHeightInputModeEnum_TenMeter=c.Bs;fv=d._emscripten_enum_WindUpslopeAlignmentMode_NotAligned=c.Cs;gv=d._emscripten_enum_WindUpslopeAlignmentMode_Aligned=c.Ds;hv=d._emscripten_enum_SurfaceRunInDirectionOf_MaxSpread= +c.Es;iv=d._emscripten_enum_SurfaceRunInDirectionOf_DirectionOfInterest=c.Fs;jv=d._emscripten_enum_SurfaceRunInDirectionOf_HeadingBackingFlanking=c.Gs;kv=d._emscripten_enum_FireType_FireTypeEnum_Surface=c.Hs;lv=d._emscripten_enum_FireType_FireTypeEnum_Torching=c.Is;mv=d._emscripten_enum_FireType_FireTypeEnum_ConditionalCrownFire=c.Js;nv=d._emscripten_enum_FireType_FireTypeEnum_Crowning=c.Ks;ov=d._emscripten_enum_BeetleDamage_not_set=c.Ls;pv=d._emscripten_enum_BeetleDamage_no=c.Ms;qv=d._emscripten_enum_BeetleDamage_yes= +c.Ns;rv=d._emscripten_enum_CrownFireCalculationMethod_rothermel=c.Os;sv=d._emscripten_enum_CrownFireCalculationMethod_scott_and_reinhardt=c.Ps;tv=d._emscripten_enum_CrownDamageEquationCode_not_set=c.Qs;uv=d._emscripten_enum_CrownDamageEquationCode_white_fir=c.Rs;vv=d._emscripten_enum_CrownDamageEquationCode_subalpine_fir=c.Ss;wv=d._emscripten_enum_CrownDamageEquationCode_incense_cedar=c.Ts;xv=d._emscripten_enum_CrownDamageEquationCode_western_larch=c.Us;yv=d._emscripten_enum_CrownDamageEquationCode_whitebark_pine= +c.Vs;zv=d._emscripten_enum_CrownDamageEquationCode_engelmann_spruce=c.Ws;Av=d._emscripten_enum_CrownDamageEquationCode_sugar_pine=c.Xs;Bv=d._emscripten_enum_CrownDamageEquationCode_red_fir=c.Ys;Cv=d._emscripten_enum_CrownDamageEquationCode_ponderosa_pine=c.Zs;Dv=d._emscripten_enum_CrownDamageEquationCode_ponderosa_kill=c._s;Ev=d._emscripten_enum_CrownDamageEquationCode_douglas_fir=c.$s;Fv=d._emscripten_enum_CrownDamageType_not_set=c.at;Gv=d._emscripten_enum_CrownDamageType_crown_length=c.bt;Hv=d._emscripten_enum_CrownDamageType_crown_volume= +c.ct;Iv=d._emscripten_enum_CrownDamageType_crown_kill=c.dt;Jv=d._emscripten_enum_EquationType_not_set=c.et;Kv=d._emscripten_enum_EquationType_crown_scorch=c.ft;Lv=d._emscripten_enum_EquationType_bole_char=c.gt;Mv=d._emscripten_enum_EquationType_crown_damage=c.ht;Nv=d._emscripten_enum_FireSeverity_not_set=c.it;Ov=d._emscripten_enum_FireSeverity_empty=c.jt;Pv=d._emscripten_enum_FireSeverity_low=c.kt;Qv=d._emscripten_enum_FlameLengthOrScorchHeightSwitch_flame_length=c.lt;Rv=d._emscripten_enum_FlameLengthOrScorchHeightSwitch_scorch_height= +c.mt;Sv=d._emscripten_enum_GACC_NotSet=c.nt;Tv=d._emscripten_enum_GACC_Alaska=c.ot;Uv=d._emscripten_enum_GACC_California=c.pt;Vv=d._emscripten_enum_GACC_EasternArea=c.qt;Wv=d._emscripten_enum_GACC_GreatBasin=c.rt;Xv=d._emscripten_enum_GACC_NorthernRockies=c.st;Yv=d._emscripten_enum_GACC_Northwest=c.tt;Zv=d._emscripten_enum_GACC_RockeyMountain=c.ut;$v=d._emscripten_enum_GACC_SouthernArea=c.vt;aw=d._emscripten_enum_GACC_Southwest=c.wt;bw=d._emscripten_enum_RequiredFieldNames_region=c.xt;cw=d._emscripten_enum_RequiredFieldNames_flame_length_or_scorch_height_switch= +c.yt;dw=d._emscripten_enum_RequiredFieldNames_flame_length_or_scorch_height_value=c.zt;ew=d._emscripten_enum_RequiredFieldNames_equation_type=c.At;fw=d._emscripten_enum_RequiredFieldNames_dbh=c.Bt;gw=d._emscripten_enum_RequiredFieldNames_tree_height=c.Ct;hw=d._emscripten_enum_RequiredFieldNames_crown_ratio=c.Dt;iw=d._emscripten_enum_RequiredFieldNames_crown_damage=c.Et;jw=d._emscripten_enum_RequiredFieldNames_cambium_kill_rating=c.Ft;kw=d._emscripten_enum_RequiredFieldNames_beetle_damage=c.Gt;lw= +d._emscripten_enum_RequiredFieldNames_bole_char_height=c.Ht;mw=d._emscripten_enum_RequiredFieldNames_bark_thickness=c.It;nw=d._emscripten_enum_RequiredFieldNames_fire_severity=c.Jt;ow=d._emscripten_enum_RequiredFieldNames_num_inputs=c.Kt;pw=d._emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_NORTH=c.Lt;qw=d._emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_EAST=c.Mt;rw=d._emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_SOUTH=c.Nt;sw=d._emscripten_enum_FDFMToolAspectIndex_AspectIndexEnum_WEST= +c.Ot;tw=d._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_TEN_TO_TWENTY_NINE_DEGREES_F=c.Pt;uw=d._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_THRITY_TO_FOURTY_NINE_DEGREES_F=c.Qt;vw=d._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_FIFTY_TO_SIXTY_NINE_DEGREES_F=c.Rt;ww=d._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_SEVENTY_TO_EIGHTY_NINE_DEGREES_F=c.St;xw=d._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_NINETY_TO_ONE_HUNDRED_NINE_DEGREES_F=c.Tt;yw=d._emscripten_enum_FDFMToolDryBulbIndex_DryBulbIndexEnum_GREATER_THAN_ONE_HUNDRED_NINE_DEGREES_F= +c.Ut;zw=d._emscripten_enum_FDFMToolElevationIndex_ElevationIndexEnum_BELOW_1000_TO_2000_FT=c.Vt;Aw=d._emscripten_enum_FDFMToolElevationIndex_ElevationIndexEnum_LEVEL_WITHIN_1000_FT=c.Wt;Bw=d._emscripten_enum_FDFMToolElevationIndex_ElevationIndexEnum_ABOVE_1000_TO_2000_FT=c.Xt;Cw=d._emscripten_enum_FDFMToolMonthIndex_MonthIndexEnum_MAY_JUNE_JULY=c.Yt;Dw=d._emscripten_enum_FDFMToolMonthIndex_MonthIndexEnum_FEB_MAR_APR_AUG_SEP_OCT=c.Zt;Ew=d._emscripten_enum_FDFMToolMonthIndex_MonthIndexEnum_NOV_DEC_JAN= +c._t;Fw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_ZERO_TO_FOUR_PERCENT=c.$t;Gw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FIVE_TO_NINE_PERCENT=c.au;Hw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_TEN_TO_FOURTEEN_PERCENT=c.bu;Jw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FIFTEEN_TO_NINETEEN_PERCENT=c.cu;Kw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_TWENTY_TO_TWENTY_FOUR_PERCENT=c.du;Lw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_TWENTY_FIVE_TO_TWENTY_NINE_PERCENT=c.eu;Mw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_THIRTY_TO_THIRTY_FOUR_PERCENT= +c.fu;Nw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_THIRTY_FIVE_TO_THIRTY_NINE_PERCENT=c.gu;Ow=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FORTY_TO_FORTY_FOUR_PERCENT=c.hu;Pw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FORTY_FIVE_TO_FORTY_NINE_PERCENT=c.iu;Qw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FIFTY_TO_FIFTY_FOUR_PERCENT=c.ju;Rw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_FIFTY_FIVE_TO_FIFTY_NINE_PERCENT=c.ku;Sw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_SIXTY_TO_SIXTY_FOUR_PERCENT= +c.lu;Tw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_SIXTY_FIVE_TO_SIXTY_NINE_PERCENT=c.mu;Uw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_SEVENTY_TO_SEVENTY_FOUR_PERCENT=c.nu;Vw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_SEVENTY_FIVE_TO_SEVENTY_NINE_PERCENT=c.ou;Ww=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_EIGHTY_TO_EIGHTY_FOUR_PERCENT=c.pu;Xw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_EIGHTY_FIVE_TO_EIGHTY_NINE_PERCENT=c.qu;Yw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_NINETY_TO_NINETY_FOUR_PERCENT= +c.ru;Zw=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_NINETY_FIVE_TO_NINETY_NINE_PERCENT=c.su;$w=d._emscripten_enum_FDFMToolRHIndex_RHIndexEnum_ONE_HUNDRED_PERCENT=c.tu;ax=d._emscripten_enum_FDFMToolShadingIndex_ShadingIndexEnum_EXPOSED=c.uu;bx=d._emscripten_enum_FDFMToolShadingIndex_ShadingIndexEnum_SHADED=c.vu;cx=d._emscripten_enum_FDFMToolSlopeIndex_SlopeIndexEnum_ZERO_TO_THIRTY_PERCENT=c.wu;dx=d._emscripten_enum_FDFMToolSlopeIndex_SlopeIndexEnum_GREATER_THAN_OR_EQUAL_TO_THIRTY_ONE_PERCENT=c.xu; +ex=d._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_EIGHT_HUNDRED_HOURS_TO_NINE_HUNDRED_FIFTY_NINE=c.yu;fx=d._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_TEN_HUNDRED_HOURS_TO_ELEVEN__HUNDRED_FIFTY_NINE=c.zu;gx=d._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_TWELVE_HUNDRED_HOURS_TO_THIRTEEN_HUNDRED_FIFTY_NINE=c.Au;hx=d._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_FOURTEEN_HUNDRED_HOURS_TO_FIFTEEN_HUNDRED_FIFTY_NINE=c.Bu;ix=d._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_SIXTEEN_HUNDRED_HOURS_TO_SIXTEEN_HUNDRED_FIFTY_NINE= +c.Cu;jx=d._emscripten_enum_FDFMToolTimeOfDayIndex_TimeOfDayIndexEnum_EIGHTTEEN_HUNDRED_HOURS_TO_SUNSET=c.Du;kx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_NINTEEN_HUNDRED_EIGHTY=c.Eu;lx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_THREE_THOUSAND_NINEHUNDRED_SIXTY=c.Fu;mx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_SEVEN_THOUSAND_NINEHUNDRED_TWENTY=c.Gu;nx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TEN_THOUSAND= +c.Hu;ox=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_FIFTEEN_THOUSAND_EIGHT_HUNDRED_FORTY=c.Iu;px=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TWENTY_ONE_THOUSAND_ONE_HUNDRED_TWENTY=c.Ju;qx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TWENTY_FOUR_THOUSAND=c.Ku;rx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_THRITY_ONE_THOUSAND_SIX_HUNDRED_EIGHTY=c.Lu;sx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_FIFTY_THOUSAND= +c.Mu;tx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_SIXTY_TWO_THOUSAND_FIVE_HUNDRED=c.Nu;ux=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_SIXTY_THREE_THOUSAND_THREE_HUNDRED_SIXTY=c.Ou;vx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_ONE_HUNDRED_THOUSAND=c.Pu;wx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_ONE_HUNDRED_TWENTY_SIX_THOUSAND_SEVEN_HUNDRED_TWENTY=c.Qu;xx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TWO_HUNDRED_FIFTY_THOUSAND= +c.Ru;yx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_TWO_HUNDRED_FIFTY_THREE_THOUSAND_FOUR_HUNDRED_FORTY=c.Su;zx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_FIVE_HUNDRED_SIX_THOUSAND_EIGHT_HUNDRED_EIGHTY=c.Tu;Ax=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_ONE_MILLION=c.Uu;Bx=d._emscripten_enum_RepresentativeFraction_RepresentativeFractionEnum_ONE_MILLION_THIRTEEN_THOUSAND_SEVEN_HUNDRED_SIXTY=c.Vu;Cx=d._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_UPSLOPE_ZERO_DEGREES= +c.Wu;Dx=d._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_FIFTEEN_DEGREES_FROM_UPSLOPE=c.Xu;Ex=d._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_THIRTY_DEGREES_FROM_UPSLOPE=c.Yu;Fx=d._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_FORTY_FIVE_DEGREES_FROM_UPSLOPE=c.Zu;Gx=d._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_SIXTY_DEGREES_FROM_UPSLOPE=c._u;Hx=d._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_SEVENTY_FIVE_DEGREES_FROM_UPSLOPE= +c.$u;Ix=d._emscripten_enum_HorizontalDistanceIndex_HorizontalDistanceIndexEnum_CROSS_SLOPE_NINETY_DEGREES=c.av;Jx=d._emscripten_enum_BurningCondition_BurningConditionEnum_Low=c.bv;Kx=d._emscripten_enum_BurningCondition_BurningConditionEnum_Moderate=c.cv;Lx=d._emscripten_enum_BurningCondition_BurningConditionEnum_Extreme=c.dv;Mx=d._emscripten_enum_SlopeClass_SlopeClassEnum_Flat=c.ev;Nx=d._emscripten_enum_SlopeClass_SlopeClassEnum_Moderate=c.fv;Ox=d._emscripten_enum_SlopeClass_SlopeClassEnum_Steep= +c.gv;Px=d._emscripten_enum_SpeedClass_SpeedClassEnum_Light=c.hv;Qx=d._emscripten_enum_SpeedClass_SpeedClassEnum_Moderate=c.iv;Rx=d._emscripten_enum_SpeedClass_SpeedClassEnum_High=c.jv;Sx=d._emscripten_enum_SafetyCondition_SafetyConditionEnum_Low=c.kv;Tx=d._emscripten_enum_SafetyCondition_SafetyConditionEnum_Moderate=c.lv;Ux=d._emscripten_enum_SafetyCondition_SafetyConditionEnum_Extreme=c.mv;Vx=c.nv;Ga=c.ov;A=c.pv;Tb=c.qv;z=c.rv;Wx=c.sv;Ha=c.tv;Xx=c.uv;sa=c.H;Kb=c.J;ra();return ry}var b={a:qy};if(d.instantiateWasm)return new Promise(c=> +{d.instantiateWasm(b,(e,f)=>{c(a(e,f))})});ua??=d.locateFile?d.locateFile("behave-min.wasm",aa):aa+"behave-min.wasm";return function(c){return a(c.instance)}(await xa(b))}()); +(function(){function a(){d.calledRun=!0;if(!fa){qa=!0;ya(Ib);if(!d.noFSInit&&!mb){var b,c;mb=!0;b??=d.stdin;c??=d.stdout;e??=d.stderr;b?Gb("stdin",b):Db("/dev/tty","/dev/stdin");c?Gb("stdout",null,c):Db("/dev/tty","/dev/stdout");e?Gb("stderr",null,e):Db("/dev/tty1","/dev/stderr");Eb("/dev/stdin",0);Eb("/dev/stdout",1);Eb("/dev/stderr",1)}ry.I();nb=!1;ha?.(d);d.onRuntimeInitialized?.();if(d.postRun)for(typeof d.postRun=="function"&&(d.postRun=[d.postRun]);d.postRun.length;){var e=d.postRun.shift(); +za.push(e)}ya(za)}}if(d.preRun)for(typeof d.preRun=="function"&&(d.preRun=[d.preRun]);d.preRun.length;)Ba();ya(Aa);d.setStatus?(d.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>d.setStatus(""),1);a()},1)):a()})();function D(){}D.prototype=Object.create(D.prototype);D.prototype.constructor=D;D.prototype.wv=D;D.xv={};d.WrapperObject=D;function E(a){return(a||D).xv}d.getCache=E;function sy(a,b){var c=E(b),e=c[a];if(e)return e;e=Object.create((b||D).prototype);e.vv=a;return c[a]=e} +d.wrapPointer=sy;d.castObject=function(a,b){return sy(a.vv,b)};d.NULL=sy(0);d.destroy=function(a){if(!a.__destroy__)throw"Error: Cannot destroy object. (Did you create it yourself?)";a.__destroy__();delete E(a.wv)[a.vv]};d.compare=function(a,b){return a.vv===b.vv};d.getPointer=function(a){return a.vv};d.getClass=function(a){return a.wv};var ty=0,uy=0,vy=0,wy=[],xy=0; +function G(){if(xy){for(var a=0;a=uy){b>0||ta();xy+=b;var c=d._webidl_malloc(b);wy.push(c)}else c=ty+vy,vy+=b;b=c;for(c=0;c{ha=a;ia=b}); +;return moduleRtn}})();if(typeof exports==="object"&&typeof module==="object"){module.exports=createModule;module.exports.default=createModule}else if(typeof define==="function"&&define["amd"])define([],()=>createModule); diff --git a/projects/behave/resources/public/js/behave-min.wasm b/projects/behave/resources/public/js/behave-min.wasm index a5fbaccae..aeea6b528 100644 Binary files a/projects/behave/resources/public/js/behave-min.wasm and b/projects/behave/resources/public/js/behave-min.wasm differ diff --git a/projects/behave/resources/public/layout.msgpack b/projects/behave/resources/public/layout.msgpack index 7ca3aee97..39b651b47 100644 Binary files a/projects/behave/resources/public/layout.msgpack and b/projects/behave/resources/public/layout.msgpack differ diff --git a/projects/behave/resources/version.edn b/projects/behave/resources/version.edn index dd9473088..369ad6f5f 100644 --- a/projects/behave/resources/version.edn +++ b/projects/behave/resources/version.edn @@ -1 +1 @@ -{:version "v7.1.4"} +{:version "v7.1.5"} diff --git a/projects/behave/scripts/sign-windows-zip.sh b/projects/behave/scripts/sign-windows-zip.sh new file mode 100755 index 000000000..cb3dd380e --- /dev/null +++ b/projects/behave/scripts/sign-windows-zip.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +# +# Sign the Windows Behave7 package with Azure Trusted Signing. +# +# This is a thin wrapper around the az-cli repo's `sign-zip.sh`. It runs that +# script inside az-cli's direnv environment (Nix devShell + the AZURE_REGION_DOMAIN +# / TS_ALIAS exports from az-cli/.envrc), then drops the signed archive back next +# to the original in output/windows/. +# +# Usage: +# scripts/sign-windows-zip.sh [ZIP_FILE] +# +# ZIP_FILE Optional. Defaults to the newest unsigned +# output/windows/behave7-*-windows-amd64.zip. +# +# Environment overrides: +# AZ_CLI_DIR Path to the az-cli repo +# (default: $HOME/az-cli) +# TS_ALIAS Signing alias (else az-cli/.envrc default) +# AZURE_REGION_DOMAIN Region domain (else az-cli/.envrc default) +# +# Prerequisites: `az login` must have been run, and az-cli/.envrc must be +# direnv-allowed (this script will allow it if it is not). + +set -euo pipefail + +AZ_CLI_DIR="${AZ_CLI_DIR:-$HOME/az-cli}" +OUTPUT_DIR="output/windows" + +die() { echo "Error: $*" >&2; exit 1; } + +command -v direnv >/dev/null 2>&1 || die "direnv is required but not on PATH." +[[ -d "$AZ_CLI_DIR" ]] || die "az-cli dir not found: $AZ_CLI_DIR (set AZ_CLI_DIR)." +[[ -f "$AZ_CLI_DIR/sign-zip.sh" ]] || die "sign-zip.sh missing in $AZ_CLI_DIR." + +## Resolve the zip to sign + +zip_file="${1:-}" +if [[ -z "$zip_file" ]]; then + zip_file="$(ls -t "$OUTPUT_DIR"/behave7-*-windows-amd64.zip 2>/dev/null \ + | grep -v -- '-signed\.zip' | head -n1 || true)" + [[ -n "$zip_file" ]] || die "No unsigned zip in $OUTPUT_DIR; pass one explicitly." +fi +[[ -f "$zip_file" ]] || die "Zip not found: $zip_file" + +# Absolute path so it resolves after we cd into the az-cli dir. +zip_abs="$(cd "$(dirname "$zip_file")" && pwd)/$(basename "$zip_file")" + +## Detect version (az-cli only auto-detects it when anchored at the end of the +## filename; ours has it in the middle, e.g. behave7-7.1.5-windows-amd64.zip). + +version="$(basename "$zip_file" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -n1 || true)" +[[ -n "$version" ]] || die "Could not detect version from $(basename "$zip_file")." + +signed_name="$(basename "$zip_file" .zip)-signed.zip" + +echo "Signing $zip_abs (v$version) via $AZ_CLI_DIR" + +## Sign inside az-cli's direnv env, from its dir (sign-zip.sh uses relative paths). + +( + cd "$AZ_CLI_DIR" + direnv allow . >/dev/null 2>&1 || true + direnv exec . ./sign-zip.sh -f "$zip_abs" -v "$version" +) + +signed_src="$AZ_CLI_DIR/$signed_name" +[[ -f "$signed_src" ]] || die "Expected signed file not produced: $signed_src" + +dest="$OUTPUT_DIR/$signed_name" +mv -f "$signed_src" "$dest" +echo "✓ Signed package: $dest" diff --git a/projects/behave/src/clj/behave/core.clj b/projects/behave/src/clj/behave/core.clj index 49270dbca..8f97364c6 100644 --- a/projects/behave/src/clj/behave/core.clj +++ b/projects/behave/src/clj/behave/core.clj @@ -107,6 +107,8 @@ :on-shown (fn [app & _] (reset! the-app app) (.dispose (:frame loader))) + :on-console-message (fn [{:keys [level message source line]}] + (log-str "[BROWSER " level "] " source ":" line " - " message)) :request-handler request-handler :on-before-launch (fn [{:keys [frame]}] diff --git a/projects/behave/src/clj/behave/init.clj b/projects/behave/src/clj/behave/init.clj index 3d7df48da..de85c0307 100644 --- a/projects/behave/src/clj/behave/init.clj +++ b/projects/behave/src/clj/behave/init.clj @@ -31,9 +31,23 @@ (load-config (resource "config.edn")) (let [config (update-in (get-config :database :config) [:store :path] - os-path)] + os-path) + ;; Test-support (parallel sharding): a per-shard server JVM sets + ;; -Dbehave.store.path so each shard resets+connects its OWN db file. config.edn is + ;; reloaded on every /api/init (above), so a startup-only override wouldn't survive — + ;; the property is re-read here each init. Inert (no property) in dev/prod. + config (if-let [p (System/getProperty "behave.store.path")] + (assoc-in config [:store :path] (os-path p)) + config)] (log-str "LOADED CONFIG" (get-config :database :config)) (io/make-parents (get-in config [:store :path])) + ;; Test-only (config-gated): delete the store before reconnecting so every session + ;; starts from an empty DB. Keeps /api/init's export-datoms tiny for cucumber runs + ;; (the store otherwise accumulates worksheets and slows the app O(N)). The conn was + ;; already released by init-handler, so the file is safe to delete here. Not set in + ;; dev/prod configs ⇒ no behavior change (worksheets persist). + (when (get-config :database :reset-on-init?) + (io/delete-file (get-in config [:store :path]) true)) (store/connect! config))) (defn init-handler [{:keys [request-method accept] :as req}] diff --git a/projects/behave/src/clj/behave/server.clj b/projects/behave/src/clj/behave/server.clj index dfabdd7da..a5dd13d9a 100644 --- a/projects/behave/src/clj/behave/server.clj +++ b/projects/behave/src/clj/behave/server.clj @@ -19,7 +19,7 @@ (let [cef? (some? (System/getProperty "app.dir")) mode (or (get-config :server :mode) (if cef? "prod" "dev")) - jar-local? (and (= mode "prod") (not cef?))] + jar-local? (and (= mode "prod") cef?)] (merge-config! {:server {:mode mode} :client {:jar-local? jar-local?}}))) diff --git a/projects/behave/src/cljs/behave/components/input_group.cljs b/projects/behave/src/cljs/behave/components/input_group.cljs index 5ad54660d..dba80f035 100644 --- a/projects/behave/src/cljs/behave/components/input_group.cljs +++ b/projects/behave/src/cljs/behave/components/input_group.cljs @@ -1,12 +1,12 @@ (ns behave.components.input-group (:require [behave.components.core :as c] [behave.components.unit-selector :refer [unit-display]] - [goog.string :as gstring] [behave.translate :refer [kebab]])) @@ -127,7 +127,7 @@ (defmethod wizard-input :discrete [variable {:keys [ws-uuid]} group-uuid repeat-id repeat-group?] (r/with-let [{gv-uuid :bp/uuid help-key :group-variable/help-key - v-list :variable/list} variable + v-list :variable/list} variable selected (rf/subscribe [:worksheet/input-value ws-uuid group-uuid repeat-id gv-uuid]) default-option (rf/subscribe [:wizard/default-option ws-uuid gv-uuid]) disabled-options (rf/subscribe [:wizard/disabled-options ws-uuid gv-uuid]) @@ -261,12 +261,12 @@ (defn repeat-group [{:keys [ws-uuid] :as params} group variables] (let [{group-translation-key :group/translation-key - group-uuid :bp/uuid} group - repeat-ids (-> (rf/subscribe [:worksheet/group-repeat-ids ws-uuid group-uuid]) - (deref) - (sort)) - next-repeat-id (or (some->> repeat-ids seq (apply max) inc) - 0)] + group-uuid :bp/uuid} group + repeat-ids (-> (rf/subscribe [:worksheet/group-repeat-ids ws-uuid group-uuid]) + (deref) + (sort)) + next-repeat-id (or (some->> repeat-ids seq (apply max) inc) + 0)] [:<> (map-indexed (fn [index repeat-id] diff --git a/projects/behave/src/cljs/behave/components/results/matrices.cljs b/projects/behave/src/cljs/behave/components/results/matrices.cljs index 870ccaba3..ac46513fd 100644 --- a/projects/behave/src/cljs/behave/components/results/matrices.cljs +++ b/projects/behave/src/cljs/behave/components/results/matrices.cljs @@ -127,6 +127,46 @@ {} matrix-data)))) +(defn- output-axis-headers-1d + "Build the outputs-axis headers for a single-MVI matrix, independent of whether the + outputs land on rows or columns. Returns [regular-headers map-units-headers]; the + map-units vector holds only the map-unit-convertible outputs." + [output-entities process-map-units? map-units] + (reduce + (fn [[reg mu] {output-gv-uuid :bp/uuid output-units :units}] + (let [output-name @(subscribe [:wizard/gv-uuid->resolve-result-variable-name output-gv-uuid])] + [(conj reg {:name (header-label output-name output-units) + :key output-gv-uuid}) + (cond-> mu + (process-map-units? output-gv-uuid) + (conj {:name (header-label output-name map-units) + :key (map-units-column-key output-gv-uuid)}))])) + [[] []] + output-entities)) + +(defn- matrix-data-1d + "Build the regular + map-units cell data for a single-MVI matrix. `place` maps + (output-key, mvi-key) -> the [row col] tuple for the current orientation, so the same + fold serves both outputs-on-rows and outputs-on-columns layouts. The raw data is always + keyed [mvi-val output-uuid]. Returns [regular-data map-units-table-data]." + [{:keys [matrix-data-raw input-fmt-fn formatters process-map-units? units-lookup + map-units map-rep-frac shade-set any-filters-enabled? place]}] + (reduce-kv + (fn [[reg mu] [mvi-val output-uuid] v] + (let [fmt-fn (get formatters output-uuid identity) + shade (when any-filters-enabled? (contains? shade-set mvi-val)) + mvi-key (input-fmt-fn mvi-val)] + [(assoc reg (place output-uuid mvi-key) + (format-matrix-cell v fmt-fn shade)) + (cond-> mu + (process-map-units? output-uuid) + (assoc (place (map-units-column-key output-uuid) mvi-key) + (format-matrix-cell + (convert-to-map-units v (get units-lookup output-uuid) map-units map-rep-frac) + fmt-fn shade)))])) + [{} {}] + matrix-data-raw)) + ;;============================================================================== ;; construct-result-matrices ;;============================================================================== @@ -197,89 +237,76 @@ (let [[multi-var-name multi-var-units multi-var-gv-uuid - multi-var-values] (first multi-valued-inputs) - table-settings @(subscribe [:worksheet/table-settings ws-uuid]) - outputs-on-rows? (= (:table-settings/col-group-variable-uuid table-settings) multi-var-gv-uuid) - input-fmt-fn (get @(subscribe [:worksheet/result-table-formatters [multi-var-gv-uuid]]) multi-var-gv-uuid) - matrix-data-raw @(subscribe [:worksheet/matrix-table-data-single-multi-valued-input - ws-uuid - multi-var-gv-uuid - multi-var-values - (map :bp/uuid output-entities)]) - color-map (compute-color-map-1d cell-color-gv-uuid matrix-data-raw input-fmt-fn) - {:keys [units rep-fraction]} (fetch-map-units-settings ws-uuid) - [regular-column-headers - map-units-column-headers - matrix-data-formatted - map-units-data + multi-var-values] (first multi-valued-inputs) + table-settings @(subscribe [:worksheet/table-settings ws-uuid]) + outputs-on-rows? (= (:table-settings/col-group-variable-uuid table-settings) multi-var-gv-uuid) + input-fmt-fn (get @(subscribe [:worksheet/result-table-formatters [multi-var-gv-uuid]]) multi-var-gv-uuid) + matrix-data-raw @(subscribe [:worksheet/matrix-table-data-single-multi-valued-input + ws-uuid + multi-var-gv-uuid + multi-var-values + (map :bp/uuid output-entities)]) + color-map (compute-color-map-1d cell-color-gv-uuid matrix-data-raw input-fmt-fn) + {:keys [units rep-fraction]} (fetch-map-units-settings ws-uuid) + ;; The outputs-axis headers (regular + map-units) and the MVI-axis headers are the + ;; same regardless of orientation; only WHICH axis each lands on — and the [row col] + ;; key order — changes. Map units only ever add to the outputs axis. + mvi-headers (mapv (fn [v] {:name (input-fmt-fn v) :key (input-fmt-fn v)}) multi-var-values) + [out-headers out-mu-headers] (output-axis-headers-1d output-entities process-map-units? units) + place (if outputs-on-rows? + (fn [output-key mvi-key] [output-key mvi-key]) + (fn [output-key mvi-key] [mvi-key output-key])) + [matrix-data-formatted + map-units-table-data] (matrix-data-1d {:matrix-data-raw matrix-data-raw + :input-fmt-fn input-fmt-fn + :formatters formatters + :process-map-units? process-map-units? + :units-lookup units-lookup + :map-units units + :map-rep-frac rep-fraction + :shade-set shade-set + :any-filters-enabled? any-filters-enabled? + :place place}) + [results-table-column-headers + map-units-table-column-headers row-headers + map-units-table-row-headers rows-label - cols-label] (if outputs-on-rows? - ;; MVI on columns, outputs on rows - (let [col-headers (mapv (fn [v] {:name (input-fmt-fn v) :key (input-fmt-fn v)}) multi-var-values) - flipped-data (reduce-kv (fn [acc [mvi-val output-uuid] v] - (let [fmt-fn (get formatters output-uuid identity) - shaded? (contains? shade-set mvi-val)] - (assoc acc [output-uuid (input-fmt-fn mvi-val)] - (format-matrix-cell v fmt-fn (when any-filters-enabled? shaded?))))) - {} - matrix-data-raw) - output-row-hdrs (mapv (fn [{output-gv-uuid :bp/uuid output-units :units}] - (let [output-name @(subscribe [:wizard/gv-uuid->resolve-result-variable-name output-gv-uuid])] - {:name (header-label output-name output-units) - :key output-gv-uuid})) - output-entities)] - [col-headers [] flipped-data {} output-row-hdrs - @(resolve-result-variable-name output-gv-uuid])] - [(conj reg {:name (header-label output-name output-units) - :key output-gv-uuid}) - (if (process-map-units? output-gv-uuid) - (conj mu {:name (header-label output-name units) - :key (map-units-column-key output-gv-uuid)}) - mu)])) - [[] []] - output-entities) - [reg-data mu-data] (reduce-kv (fn [[reg mu] [row col-uuid] v] - (let [fmt-fn (get formatters col-uuid identity) - shaded? (contains? shade-set row)] - [(assoc reg [(input-fmt-fn row) col-uuid] - (format-matrix-cell v fmt-fn (when any-filters-enabled? shaded?))) - (if (process-map-units? col-uuid) - (assoc mu [(input-fmt-fn row) (map-units-column-key col-uuid)] - (format-matrix-cell - (convert-to-map-units v (get units-lookup col-uuid) units rep-fraction) - fmt-fn - (when any-filters-enabled? shaded?))) - mu)])) - [{} {}] - matrix-data-raw) - mvi-row-hdrs (map (fn [v] {:name (input-fmt-fn v) :key (input-fmt-fn v)}) multi-var-values)] - [reg-cols mu-cols reg-data mu-data mvi-row-hdrs - (header-label multi-var-name multi-var-units) - @( (map-indexed (fn [index repeat-id] @@ -172,7 +176,9 @@ :align-items "center" :justify-content "center"}}]])) -(defn input-group [{:keys [edit-route ws-uuid]} group variables] +(defn input-group + "Render the review section for `group` and its `variables`, repeating when the group repeats." + [{:keys [edit-route ws-uuid]} group variables] (let [variables (sort-by :group-variable/variable-order variables)] (when (seq variables) [:<> diff --git a/projects/behave/src/cljs/behave/components/settings_form/views.cljs b/projects/behave/src/cljs/behave/components/settings_form/views.cljs index 61f59c7fd..fbfea8b43 100644 --- a/projects/behave/src/cljs/behave/components/settings_form/views.cljs +++ b/projects/behave/src/cljs/behave/components/settings_form/views.cljs @@ -1,30 +1,31 @@ (ns behave.components.settings-form.views (:require [behave.components.core :as c] - [dom-utils.interface :refer [input-float-value input-int-value]] + [dom-utils.interface :refer [input-value]] [goog.string :as gstring] [goog.string.format] [re-frame.core :refer [dispatch subscribe]] [reagent.core :as r])) (defn- number-inputs - [{:keys [saved-entries on-change default-values enabled?]}] + [{:keys [saved-entries on-change enabled?]}] (map (fn [[gv-uuid saved-value row-enabled?]] - (let [value-atom (r/atom saved-value) - show-tenth-precision? (< (get default-values gv-uuid) 1) - disabled? (if (some? enabled?) - (not enabled?) - (if (some? row-enabled?) - (not row-enabled?) - false))] - [c/number-input (cond-> {:disabled? disabled? - :on-change #(let [v (if show-tenth-precision? - (input-float-value %) - (input-int-value %))] - (reset! value-atom v)) - :on-blur #(on-change gv-uuid @value-atom) - :value-atom value-atom} - show-tenth-precision? - (assoc :step "0.1"))])) + (let [value-atom (r/atom (str saved-value)) + disabled? (if (some? enabled?) + (not enabled?) + (if (some? row-enabled?) + (not row-enabled?) + false))] + ;; Hold the raw string while typing so decimals — including an + ;; in-progress "1." — survive; coerce to a float only on blur, where + ;; the value is committed. `:step "any"` lets the field accept + ;; non-integers. (BHP1-1610) + [c/number-input {:disabled? disabled? + :step "any" + :on-change #(reset! value-atom (input-value %)) + :on-blur #(let [v (js/parseFloat @value-atom)] + (when-not (js/isNaN v) + (on-change gv-uuid v))) + :value-atom value-atom}])) saved-entries)) (defn settings-form diff --git a/projects/behave/src/cljs/behave/help/views.cljs b/projects/behave/src/cljs/behave/help/views.cljs index b75f160e1..0bee52b09 100644 --- a/projects/behave/src/cljs/behave/help/views.cljs +++ b/projects/behave/src/cljs/behave/help/views.cljs @@ -61,8 +61,9 @@ node))) (defmulti get-help-keys + "Resolve the help content keys for the current `workflow` (defaults to `:guided`)." (fn [{:keys [workflow]}] - (or workflow :guided))) + (keyword (or workflow :guided)))) (defmethod get-help-keys :guided [params] diff --git a/projects/behave/src/cljs/behave/lib/enums.cljs b/projects/behave/src/cljs/behave/lib/enums.cljs index f45e77b66..7d70898e6 100644 --- a/projects/behave/src/cljs/behave/lib/enums.cljs +++ b/projects/behave/src/cljs/behave/lib/enums.cljs @@ -193,7 +193,7 @@ (enum "HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum" ["HeatPerUnitAreaUnits::BtusPerSquareFoot" "HeatPerUnitAreaUnits::KilojoulesPerSquareMeter" - "HeatPerUnitAreaUnits::KilowattsPerSquareMeterPerSecond"])) + "HeatPerUnitAreaUnits::KilowattSecondsPerSquareMeter"])) (def ignition-fuel-bed-type (enum "IgnitionFuelBedType_IgnitionFuelBedTypeEnum" @@ -336,7 +336,8 @@ "SpeedUnits::MetersPerMinute" "SpeedUnits::MetersPerHour" "SpeedUnits::MilesPerHour" - "SpeedUnits::KilometersPerHour"])) + "SpeedUnits::KilometersPerHour" + "SpeedUnits::FurlongsPerFortnight"])) (def spot-array-constants (enum "SpotArrayConstants_SpotArrayConstantsEnum" @@ -378,7 +379,7 @@ ["SurfaceAreaToVolumeUnits::SquareFeetOverCubicFeet" "SurfaceAreaToVolumeUnits::SquareMetersOverCubicMeters" "SurfaceAreaToVolumeUnits::SquareInchesOverCubicInches" - "SurfaceAreaToVolumeUnits::SquareCentimetersOverCubicCentimers"])) + "SurfaceAreaToVolumeUnits::SquareCentimetersOverCubicCentimeters"])) (def surface-fire-spread-direction-mode (enum "SurfaceFireSpreadDirectionMode_SurfaceFireSpreadDirectionModeEnum" @@ -395,7 +396,9 @@ (enum "TimeUnits_TimeUnitsEnum" ["TimeUnits::Minutes" "TimeUnits::Seconds" - "TimeUnits::Hours"])) + "TimeUnits::Hours" + "TimeUnits::Days" + "TimeUnits::Years"])) (def two-fuel-models-method (enum "TwoFuelModelsMethod_TwoFuelModelsMethodEnum" diff --git a/projects/behave/src/cljs/behave/lib/units.cljs b/projects/behave/src/cljs/behave/lib/units.cljs index 516538d51..5d86a5480 100644 --- a/projects/behave/src/cljs/behave/lib/units.cljs +++ b/projects/behave/src/cljs/behave/lib/units.cljs @@ -48,11 +48,11 @@ (def ^:private english-units [{:short "Btu/ft/s" :system "english" :enum enum/fireline-intensity-units :dimension :fireline-intensity :unit "BtusPerFootPerSecond"} {:short "Btu/ft/min" :system "english" :enum enum/fireline-intensity-units :dimension :fireline-intensity :unit "BtusPerFootPerMinute"} - {:short "Btu/ft2" :system "english" :enum enum/heat-unit-per-unit-area-units :dimension :heat-unit-per-unit-area :unit "BtusPerSquareFoot"} - {:short "Btu/ft2/min" :system "english" :enum enum/heat-source-reaction-units :dimension :heat-source-reaction :unit "BtusPerSquareFootPerMinute"} - {:short "Btu/ft2/sec" :system "english" :enum enum/heat-source-reaction-units :dimension :heat-source-reaction :unit "BtusPerSquareFootPerSecond"} + {:short "Btu/ft2" :system "english" :enum enum/heat-unit-per-unit-area-units :dimension :heat-per-unit-area :unit "BtusPerSquareFoot"} + {:short "Btu/ft2/min" :system "english" :enum enum/heat-source-reaction-units :dimension :heat-source-and-reaction-intensity :unit "BtusPerSquareFootPerMinute"} + {:short "Btu/ft2/sec" :system "english" :enum enum/heat-source-reaction-units :dimension :heat-source-and-reaction-intensity :unit "BtusPerSquareFootPerSecond"} {:short "Btu/ft3" :system "english" :enum enum/heat-sink-units :dimension :heat-sink :unit "BtusPerCubicFoot"} - {:short "Btu/lb" :system "english" :enum enum/heat-combustion-units :dimension :heat-combustion :unit "BtusPerPound"} + {:short "Btu/lb" :system "english" :enum enum/heat-combustion-units :dimension :heat-of-combustion :unit "BtusPerPound"} {:short "ac" :system "english" :enum enum/area-units :dimension :area :unit "Acres"} {:short "ch" :system "english" :enum enum/length-units :dimension :length :unit "Chains"} {:short "ch/h" :system "english" :enum enum/speed-units :dimension :speed :unit "ChainsPerHour"} @@ -61,7 +61,10 @@ {:short "ft2" :system "english" :enum enum/area-units :dimension :area :unit "SquareFeet"} {:short "ft2/ac" :system "english" :enum enum/basal-area-units :dimension :basal-area :unit "SquareFeetPerAcre"} {:short "ft2/ft3" :system "english" :enum enum/surface-area-to-volume-units :dimension :surface-area-to-volume :unit "SquareFeetOverCubicFeet"} + {:short "fur/fortnight" :system "english" :enum enum/speed-units :dimension :speed :unit "FurlongsPerFortnight"} {:short "in" :system "english" :enum enum/length-units :dimension :length :unit "Inches"} + {:short "in2/in3" :system "english" :enum enum/surface-area-to-volume-units :dimension :surface-area-to-volume :unit "SquareInchesOverCubicInches"} + {:short "lb/ft2" :system "english" :enum enum/loading-units :dimension :loading :unit "PoundsPerSquareFoot"} {:short "lb/ft3" :system "english" :enum enum/density-units :dimension :density :unit "PoundsPerCubicFoot"} {:short "lbs/ft3" :system "english" :enum enum/density-units :dimension :density :unit "PoundsPerCubicFoot"} {:short "mi" :system "english" :enum enum/length-units :dimension :length :unit "Miles"} @@ -69,22 +72,31 @@ {:short "ms"} ; FIXME {:short "oF" :system "english" :enum enum/temperature-units :dimension :temperature :unit "Fahrenheit"} {:short "per ac"} ; FIXME Tree Count - {:short "ton/ac" :system "english" :enum enum/loading-units :dimension :loading-units :unit "TonnesPerAcre"} - {:short "psi" :system "english" :enum enum/pressure-units :dimension :pressure-units :unit "PoundPerSquareInch"}]) + {:short "ton/ac" :system "english" :enum enum/loading-units :dimension :loading :unit "TonsPerAcre"} + {:short "psi" :system "english" :enum enum/pressure-units :dimension :pressure :unit "PoundPerSquareInch"}]) (def ^:private metric-units - [{:short "cm" :system "metric" :enum enum/length-units :dimension :length :unit "Centimeters"} + [{:short "K" :system "metric" :enum enum/temperature-units :dimension :temperature :unit "Kelvin"} + {:short "cm" :system "metric" :enum enum/length-units :dimension :length :unit "Centimeters"} + {:short "cm2/cm3" :system "metric" :enum enum/surface-area-to-volume-units :dimension :surface-area-to-volume :unit "SquareCentimetersOverCubicCentimeters"} {:short "ha" :system "metric" :enum enum/area-units :dimension :area :unit "Hectares"} - {:short "kJ/kg" :system "metric" :enum enum/heat-combustion-units :dimension :heat-combustion :unit "KilojoulesPerKilogram"} - {:short "kJ/m2" :system "metric" :enum enum/heat-unit-per-unit-area-units :dimension :heat-unit-per-unit-area :unit "KilojoulesPerSquareMeter"} + {:short "kJ/kg" :system "metric" :enum enum/heat-combustion-units :dimension :heat-of-combustion :unit "KilojoulesPerKilogram"} + {:short "kJ/m/s" :system "metric" :enum enum/fireline-intensity-units :dimension :fireline-intensity :unit "KilojoulesPerMeterPerSecond"} + {:short "kJ/m/min" :system "metric" :enum enum/fireline-intensity-units :dimension :fireline-intensity :unit "KilojoulesPerMeterPerMinute"} + {:short "kJ/m2" :system "metric" :enum enum/heat-unit-per-unit-area-units :dimension :heat-per-unit-area :unit "KilojoulesPerSquareMeter"} + {:short "kJ/m2/s" :system "metric" :enum enum/heat-source-reaction-units :dimension :heat-source-and-reaction-intensity :unit "KilojoulesPerSquareMeterPerSecond"} + {:short "kJ/m2/min" :system "metric" :enum enum/heat-source-reaction-units :dimension :heat-source-and-reaction-intensity :unit "KilojoulesPerSquareMeterPerMinute"} {:short "kJ/m3" :system "metric" :enum enum/heat-sink-units :dimension :heat-sink :unit "KilojoulesPerCubicMeter"} + {:short "kW-s/m2" :system "metric" :enum enum/heat-unit-per-unit-area-units :dimension :heat-per-unit-area :unit "KilowattSecondsPerSquareMeter"} {:short "kW/m" :system "metric" :enum enum/fireline-intensity-units :dimension :fireline-intensity :unit "KilowattsPerMeter"} - {:short "kW/m2" :system "metric" :enum enum/heat-source-reaction-units :dimension :heat-source-reaction :unit "KilowattsPerSquareMeter"} + {:short "kW/m2" :system "metric" :enum enum/heat-source-reaction-units :dimension :heat-source-and-reaction-intensity :unit "KilowattsPerSquareMeter"} + {:short "kg/m2" :system "metric" :enum enum/loading-units :dimension :loading :unit "KilogramsPerSquareMeter"} {:short "kg/m3" :system "metric" :enum enum/density-units :dimension :density :unit "KilogramsPerCubicMeter"} {:short "km" :system "metric" :enum enum/length-units :dimension :length :unit "Kilometers"} {:short "km/h" :system "metric" :enum enum/speed-units :dimension :speed :unit "KilometersPerHour"} {:short "m" :system "metric" :enum enum/length-units :dimension :length :unit "Meters"} - {:short "m/h" :system "metric" :enum enum/speed-units :dimension :speed :unit "MetersPerHour"} ; FIXME + {:short "m/s" :system "metric" :enum enum/speed-units :dimension :speed :unit "MetersPerSecond"} + {:short "m/h" :system "metric" :enum enum/speed-units :dimension :speed :unit "MetersPerHour"} {:short "m/min" :system "metric" :enum enum/speed-units :dimension :speed :unit "MetersPerMinute"} {:short "m2" :system "metric" :enum enum/area-units :dimension :area :unit "SquareMeters"} {:short "m2/ha" :system "metric" :enum enum/basal-area-units :dimension :basal-area :unit "SquareMetersPerHectare"} diff --git a/projects/behave/src/cljs/behave/settings/views.cljs b/projects/behave/src/cljs/behave/settings/views.cljs index fcc7058dc..ab819f52a 100644 --- a/projects/behave/src/cljs/behave/settings/views.cljs +++ b/projects/behave/src/cljs/behave/settings/views.cljs @@ -32,15 +32,16 @@ {:id "unit-selector" :on-change #(on-click (input-value %)) :name "unit-selector" - :options (distinct - (concat [{:label @*unit-short-code - :selected? true - :value cur-selected-unit-uuid}] - (->> units - (map (fn [unit] - {:label (:unit/short-code unit) - :value (:bp/uuid unit)})) - (sort-by :label))))}]])) + :options (concat [{:label @*unit-short-code + :selected? true + :value cur-selected-unit-uuid}] + (->> units + ;; drop the selected unit so it isn't listed twice + (remove #(= (:bp/uuid %) cur-selected-unit-uuid)) + (map (fn [unit] + {:label (:unit/short-code unit) + :value (:bp/uuid unit)})) + (sort-by :label)))}]])) (defn- build-rows [ws-uuid domain-set domain-unit-settings] (let [cached-units-system @(rf/subscribe [:settings/application-units-system])] @@ -54,13 +55,17 @@ domain-decimals]}]] {:domain domain-name :units (if (not= domain-dimension-uuid "N/A") - (let [dimension (rf/subscribe [:vms/entity-from-uuid domain-dimension-uuid]) - units (:dimension/units @dimension) - on-click #(rf/dispatch-sync [:settings/cache-unit-preference - domain-set - domain-uuid - % - ws-uuid])] + (let [dimension (rf/subscribe [:vms/entity-from-uuid domain-dimension-uuid]) + domain (rf/subscribe [:vms/entity-from-uuid domain-uuid]) + filtered-units (set (:domain/filtered-unit-uuids @domain)) + units (cond->> (:dimension/units @dimension) + (seq filtered-units) + (filter #(filtered-units (:bp/uuid %)))) + on-click #(rf/dispatch-sync [:settings/cache-unit-preference + domain-set + domain-uuid + % + ws-uuid])] [unit-selector (or domain-cached-unit-uuid (case cached-units-system diff --git a/projects/behave/src/cljs/behave/wizard/subs.cljs b/projects/behave/src/cljs/behave/wizard/subs.cljs index 7376505ed..5b819317d 100644 --- a/projects/behave/src/cljs/behave/wizard/subs.cljs +++ b/projects/behave/src/cljs/behave/wizard/subs.cljs @@ -190,7 +190,7 @@ [* {:variable/_group-variables [* {:variable/list [* {:list/options [*]}]}]}] - :group/children [*]}]}] + :group/children [*]}]}] group-id])) (fn [group] @@ -496,6 +496,19 @@ (fn [tab-selected _] tab-selected)) +(defn- opaque-over-white + "Flattens an `#RRGGBBAA` hex `color` over white into an opaque `#RRGGBB`, + passing through colors that have no alpha channel unchanged." + [color] + (if (and (string? color) (= 9 (count color))) + (let [a (/ (js/parseInt (subs color 7 9) 16) 255.0) + blend (fn [from to] (Math/round (+ (* (js/parseInt (subs color from to) 16) a) + (* 255 (- 1 a))))) + hex2 (fn [c] (let [s (.toString c 16)] + (if (= 1 (count s)) (str "0" s) s)))] + (str "#" (hex2 (blend 1 3)) (hex2 (blend 3 5)) (hex2 (blend 5 7)))) + color)) + (reg-sub :wizard/gv-list-options-with-colors (fn [[_ gv-uuid]] @@ -513,7 +526,7 @@ (when-let [color (get-in opt [:list-option/color-tag-ref :tag/color])] {:value (:list-option/value opt) :t-key (:list-option/translation-key opt) - :color color}))) + :color (opaque-over-white color)}))) (get-in gv [:variable/_group-variables 0 :variable/list :list/options])))) (reg-sub @@ -552,66 +565,6 @@ ;;; show-group? (defn- csv? [s] (< 1 (count (str/split s #",")))) -(defn- resolve-conditionals [worksheet conditionals] - (let [ws-uuid (:worksheet/uuid worksheet)] - (map (fn pass? - [{group-variable-uuid :conditional/group-variable-uuid - ttype :conditional/type - op :conditional/operator - values :conditional/values - sub-conditionals :conditional/sub-conditionals - sub-conditional-op :conditional/sub-conditional-operator}] - (let [{:keys [group-uuid io]} @(subscribe [:wizard/conditional-io+group-uuid - group-variable-uuid]) - conditional-values-set (set values) - worksheet-value (cond - (= ttype :module) - (map name (:worksheet/modules worksheet)) - - (= io :output) - @(subscribe [:worksheet/output-enabled? - ws-uuid - group-variable-uuid]) - - (= io :input) - @(subscribe [:worksheet/input-value - ws-uuid - group-uuid - 0 - group-variable-uuid])) - worksheet-value-set (cond - (= ttype :module) (set worksheet-value) - (csv? worksheet-value) (set (map str/trim (str/split worksheet-value ","))) - :else #{worksheet-value}) - sub-resolved-conditionals (when sub-conditionals - (if (= sub-conditional-op :or) - (some true? (resolve-conditionals worksheet sub-conditionals)) - (every? true? (resolve-conditionals worksheet sub-conditionals)))) - this-conditional (case op - :equal (if (= ttype :module) - (= conditional-values-set worksheet-value-set) - (= (first conditional-values-set) - (if worksheet-value (str worksheet-value) "false"))) - :not-equal (not= (first conditional-values-set) (str worksheet-value)) - :in (intersect? conditional-values-set worksheet-value-set))] - (if sub-conditionals - (and this-conditional sub-resolved-conditionals) - this-conditional))) - conditionals))) - -(defn all-conditionals-pass? - "Proccess all conditionals to ensure they all pass, defaults to true if no conditionals exist. - - worksheet : worksheet entity - - conditionals-operator: keyword #{:or :and} - - conditionals : sequence of conditionals (see conditionals schema)" - [worksheet conditionals-operator conditionals] - (if (seq conditionals) - (let [resolved-conditionals (resolve-conditionals worksheet conditionals)] - (if (= conditionals-operator :or) - (some true? resolved-conditionals) - (every? true? resolved-conditionals))) - true)) - (defn- find-parent-submodule [group] (let [submodule (:submodule/_groups group)] @@ -620,6 +573,172 @@ group (find-parent-submodule (:group/_children group)) :else nil))) +;;; Value-lookup abstraction for resolve-conditionals. +;;; Instead of passing the full worksheet entity, we pass a lightweight lookup map. +;;; This lets narrow signal fns subscribe only to the specific input values their +;;; conditionals reference, so a blur on field X only rerenders groups whose +;;; conditionals actually mention X — not every visible group. + +(def ^:private conditional-io+group-uuid + "Returns {:io … :group-uuid …} for a group-variable uuid. + Memoized because VMS is immutable for the session." + (memoize + (fn [gv-uuid] + (let [group (-> (d/entity @@vms-conn [:bp/uuid gv-uuid]) + :group/_group-variables) + io (-> group find-parent-submodule :submodule/io)] + {:io io + :group-uuid (:bp/uuid group)})))) + +(defn- ws-output-enabled? + "Read output enabled? flag directly from the reactive worksheet entity." + [worksheet gv-uuid] + (->> (:worksheet/outputs worksheet) + (filter #(= (:output/group-variable-uuid %) gv-uuid)) + first + :output/enabled?)) + +(defn- ws-input-value + "Read input value directly from the reactive worksheet entity (repeat-id 0)." + [worksheet group-uuid gv-uuid] + (->> (:worksheet/input-groups worksheet) + (filter #(and (= (:input-group/group-uuid %) group-uuid) + (= (:input-group/repeat-id %) 0))) + first + :input-group/inputs + (filter #(= (:input/group-variable-uuid %) gv-uuid)) + first + :input/value)) + +;;; lookup = {:modules +;;; :input-value (fn [group-uuid gv-uuid] -> value) +;;; :output-enabled? (fn [gv-uuid] -> boolean)} + +(defn- worksheet->lookup + "Build a lookup map from a full reactive worksheet entity. + Preserves the public all-conditionals-pass? signature for existing callers." + [worksheet] + {:modules (:worksheet/modules worksheet) + :input-value (fn [g gv] (ws-input-value worksheet g gv)) + :output-enabled? (fn [gv] (ws-output-enabled? worksheet gv))}) + +(defn- resolve-conditionals [lookup conditionals] + (map (fn pass? + [{group-variable-uuid :conditional/group-variable-uuid + ttype :conditional/type + op :conditional/operator + values :conditional/values + sub-conditionals :conditional/sub-conditionals + sub-conditional-op :conditional/sub-conditional-operator}] + (let [{:keys [group-uuid io]} (conditional-io+group-uuid group-variable-uuid) + conditional-values-set (set values) + worksheet-value (cond + (= ttype :module) + (map name (:modules lookup)) + + (= io :output) + ((:output-enabled? lookup) group-variable-uuid) + + (= io :input) + ((:input-value lookup) group-uuid group-variable-uuid)) + worksheet-value-set (cond + (= ttype :module) (set worksheet-value) + (csv? worksheet-value) (set (map str/trim (str/split worksheet-value ","))) + :else #{worksheet-value}) + sub-resolved-conditionals (when sub-conditionals + (if (= sub-conditional-op :or) + (some true? (resolve-conditionals lookup sub-conditionals)) + (every? true? (resolve-conditionals lookup sub-conditionals)))) + this-conditional (case op + :equal (if (= ttype :module) + (= conditional-values-set worksheet-value-set) + (= (first conditional-values-set) + (if worksheet-value (str worksheet-value) "false"))) + :not-equal (not= (first conditional-values-set) (str worksheet-value)) + :in (intersect? conditional-values-set worksheet-value-set))] + (if sub-conditionals + (and this-conditional sub-resolved-conditionals) + this-conditional))) + conditionals)) + +(defn- all-conditionals-pass?* + "Like all-conditionals-pass? but takes a lookup map instead of a full worksheet entity." + [lookup conditionals-operator conditionals] + (if (seq conditionals) + (let [resolved-conditionals (resolve-conditionals lookup conditionals)] + (if (= conditionals-operator :or) + (some true? resolved-conditionals) + (every? true? resolved-conditionals))) + true)) + +(defn all-conditionals-pass? + "Proccess all conditionals to ensure they all pass, defaults to true if no conditionals exist. + - worksheet : worksheet entity + - conditionals-operator: keyword #{:or :and} + - conditionals : sequence of conditionals (see conditionals schema)" + [worksheet conditionals-operator conditionals] + (all-conditionals-pass?* (worksheet->lookup worksheet) conditionals-operator conditionals)) + +;;; Memoized VMS readers — used in signal fns to know which gv-uuids to subscribe to. +;;; VMS is immutable for the session so these never go stale. + +(def ^:private group-conditionals* + "Synchronously return a group's raw conditionals from VMS." + (memoize (fn [group-eid] (:group/conditionals (d/entity @@vms-conn group-eid))))) + +(def ^:private submodule-conditionals* + "Synchronously return a submodule's raw conditionals from VMS." + (memoize (fn [submodule-eid] (:submodule/conditionals (d/entity @@vms-conn submodule-eid))))) + +(def ^:private select-action-conditionals + "Collect all conditionals across all :select actions for a gv-uuid." + (memoize (fn [gv-uuid] + (->> (d/entity @@vms-conn [:bp/uuid gv-uuid]) + :group-variable/actions + (filter #(= (:action/type %) :select)) + (mapcat :action/conditionals))))) + +(def ^:private disable-action-conditionals + "Collect all conditionals across all :disable actions for a gv-uuid." + (memoize (fn [gv-uuid] + (->> (d/entity @@vms-conn [:bp/uuid gv-uuid]) + :group-variable/actions + (filter #(= (:action/type %) :disable)) + (mapcat :action/conditionals))))) + +(defn- collect-value-refs + "Recursively collect gv-uuids referenced by non-module conditionals. + Used in signal fns to determine which per-input subs to subscribe to." + [conditionals] + (distinct + (mapcat (fn [c] + (let [gv (:conditional/group-variable-uuid c) + ttype (:conditional/type c) + sub-cs (:conditional/sub-conditionals c)] + (concat (when (and gv (not= ttype :module)) [gv]) + (when sub-cs (collect-value-refs sub-cs))))) + (or conditionals [])))) + +(defn- narrow-value-signals + "Build a per-gv-uuid signal map for ws-uuid from a sequence of conditionals. + Each entry maps gv-uuid -> [:worksheet/input-value …] or [:worksheet/output-enabled? …] sub. + Only subscribes to the inputs/outputs actually referenced — not the full worksheet." + [ws-uuid conditionals] + (into {} + (map (fn [gv] + (let [{:keys [io group-uuid]} (conditional-io+group-uuid gv)] + [gv (if (= io :output) + (subscribe [:worksheet/output-enabled? ws-uuid gv]) + (subscribe [:worksheet/input-value ws-uuid group-uuid 0 gv]))])) + (collect-value-refs conditionals)))) + +(defn- value-map->lookup + "Build a lookup map from a flat {gv-uuid -> value} map and a module keyword set." + [modules value-map] + {:modules modules + :input-value (fn [_group-uuid gv-uuid] (get value-map gv-uuid)) + :output-enabled? (fn [gv-uuid] (get value-map gv-uuid))}) + (reg-sub :wizard/conditional-io+group-uuid (fn [_ [_ gv-uuid]] @@ -642,21 +761,24 @@ (reg-sub :wizard/default-option (fn [[_ ws-uuid gv-uuid]] - [(subscribe [:worksheet ws-uuid]) - (subscribe [:wizard/_select-actions gv-uuid])]) - (fn [[worksheet actions]] - (first - (for [action actions - :let [conditionals (:action/conditionals action) - cond-operator (:action/conditionals-operator action) - target-value (when (= (:action/type action) :select) - (or (:action/target-value action) "true")) - conditionals-passed? (or (nil? conditionals) - (all-conditionals-pass? - worksheet cond-operator conditionals))] - :when (and target-value conditionals-passed?)] - (when (= (:action/type action) :select) - (or (:action/target-value action) "true")))))) + (let [all-conditionals (select-action-conditionals gv-uuid)] + (into {:actions (subscribe [:wizard/_select-actions gv-uuid]) + :modules (subscribe [:worksheet/module-keywords ws-uuid])} + (narrow-value-signals ws-uuid all-conditionals)))) + (fn [{:keys [actions modules] :as resolved}] + (let [value-map (dissoc resolved :actions :modules) + lookup (value-map->lookup modules value-map)] + (first + (for [action actions + :let [conditionals (:action/conditionals action) + cond-operator (:action/conditionals-operator action) + target-value (when (= (:action/type action) :select) + (or (:action/target-value action) "true")) + conditionals-passed? (or (nil? conditionals) + (all-conditionals-pass?* lookup cond-operator conditionals))] + :when (and target-value conditionals-passed?)] + (when (= (:action/type action) :select) + (or (:action/target-value action) "true"))))))) (reg-sub :wizard/_disabled-actions @@ -669,56 +791,73 @@ (reg-sub :wizard/disabled-options (fn [[_ ws-uuid gv-uuid]] - [(subscribe [:worksheet ws-uuid]) - (subscribe [:wizard/_disabled-actions gv-uuid])]) - (fn [[worksheet actions]] - (->> actions - (map #(let [conditionals (:action/conditionals %) - cond-operator (:action/conditionals-operator %) - target-value (:action/target-value %) - - conditionals-passed? - (or (nil? conditionals) - (all-conditionals-pass? worksheet cond-operator conditionals))] - (when (and target-value conditionals-passed?) - (:action/target-value %)))) - (remove nil?) - (set)))) + (let [all-conditionals (disable-action-conditionals gv-uuid)] + (into {:actions (subscribe [:wizard/_disabled-actions gv-uuid]) + :modules (subscribe [:worksheet/module-keywords ws-uuid])} + (narrow-value-signals ws-uuid all-conditionals)))) + (fn [{:keys [actions modules] :as resolved}] + (let [value-map (dissoc resolved :actions :modules) + lookup (value-map->lookup modules value-map)] + (->> actions + (map #(let [conditionals (:action/conditionals %) + cond-operator (:action/conditionals-operator %) + target-value (:action/target-value %) + + conditionals-passed? + (or (nil? conditionals) + (all-conditionals-pass?* lookup cond-operator conditionals))] + (when (and target-value conditionals-passed?) + (:action/target-value %)))) + (remove nil?) + (set))))) (reg-sub :wizard/disabled-output-group-variable? (fn [[_ ws-uuid gv-uuid]] - [(subscribe [:worksheet ws-uuid]) - (subscribe [:wizard/_disabled-actions gv-uuid])]) - (fn [[worksheet actions]] - (->> actions - (some #(let [conditionals (:action/conditionals %) - cond-operator (:action/conditionals-operator %)] - (or (nil? conditionals) - (all-conditionals-pass? worksheet cond-operator conditionals))))))) + (let [all-conditionals (disable-action-conditionals gv-uuid)] + (into {:actions (subscribe [:wizard/_disabled-actions gv-uuid]) + :modules (subscribe [:worksheet/module-keywords ws-uuid])} + (narrow-value-signals ws-uuid all-conditionals)))) + (fn [{:keys [actions modules] :as resolved}] + (let [value-map (dissoc resolved :actions :modules) + lookup (value-map->lookup modules value-map)] + (->> actions + (some #(let [conditionals (:action/conditionals %) + cond-operator (:action/conditionals-operator %)] + (or (nil? conditionals) + (all-conditionals-pass?* lookup cond-operator conditionals)))))))) (reg-sub :wizard/show-group? (fn [[_ ws-uuid group-id & _rest]] - [(subscribe [:worksheet ws-uuid]) - (subscribe [:vms/pull-children :group/conditionals group-id]) - (subscribe [:vms/entity-from-eid group-id])]) - - (fn [[worksheet conditionals group-entity] [_ _ws-uuid _group-id conditionals-operator]] - (and (all-conditionals-pass? worksheet conditionals-operator conditionals) - (not (:group/research? group-entity)) - (not (:group/hidden? group-entity)) - (or (some #(not (:group-variable/conditionally-set? %)) (:group/group-variables group-entity)) - (boolean (seq (:group/children group-entity))))))) - + (let [conditionals (group-conditionals* group-id)] + (into {:conditionals (subscribe [:vms/pull-children :group/conditionals group-id]) + :group-entity (subscribe [:vms/entity-from-eid group-id]) + :modules (subscribe [:worksheet/module-keywords ws-uuid])} + (narrow-value-signals ws-uuid conditionals)))) + + (fn [{:keys [conditionals group-entity modules] :as resolved} + [_ _ws-uuid _group-id conditionals-operator]] + (let [value-map (dissoc resolved :conditionals :group-entity :modules) + lookup (value-map->lookup modules value-map)] + (and (all-conditionals-pass?* lookup conditionals-operator conditionals) + (not (:group/research? group-entity)) + (not (:group/hidden? group-entity)) + (or (some #(not (:group-variable/conditionally-set? %)) (:group/group-variables group-entity)) + (boolean (seq (:group/children group-entity)))))))) (reg-sub :wizard/show-submodule? (fn [[_ ws-uuid submodule-id & _rest]] - [(subscribe [:worksheet ws-uuid]) - (subscribe [:vms/pull-children :submodule/conditionals submodule-id])]) - - (fn [[worksheet conditionals] [_ _ws-uuid _submodule-id conditionals-operator]] - (all-conditionals-pass? worksheet conditionals-operator conditionals))) + (let [conditionals (submodule-conditionals* submodule-id)] + (into {:conditionals (subscribe [:vms/pull-children :submodule/conditionals submodule-id]) + :modules (subscribe [:worksheet/module-keywords ws-uuid])} + (narrow-value-signals ws-uuid conditionals)))) + + (fn [{:keys [conditionals modules] :as resolved} + [_ _ws-uuid _submodule-id conditionals-operator]] + (let [value-map (dissoc resolved :conditionals :modules) + lookup (value-map->lookup modules value-map)] + (all-conditionals-pass?* lookup conditionals-operator conditionals)))) (reg-sub :wizard/diagram-input-gv-uuids diff --git a/projects/behave/src/cljs/behave/worksheet/events.cljs b/projects/behave/src/cljs/behave/worksheet/events.cljs index d35ee823d..edf771235 100644 --- a/projects/behave/src/cljs/behave/worksheet/events.cljs +++ b/projects/behave/src/cljs/behave/worksheet/events.cljs @@ -85,6 +85,14 @@ (< normalized 7) 5 :else 10))))) +(defn default-y-axis-max + "Obtain a rounded max Y axis value for Graph Settings." + [max-val] + (let [y-max (+ max-val (nice-step-size max-val))] + (if (< y-max 1) + (/ (Math/ceil (* y-max 10)) 10) + (Math/ceil y-max)))) + ;;; Events (rf/reg-fx :ws/import-worksheet import-worksheet) @@ -441,9 +449,7 @@ (let [[_min-to-use max-to-use] (if-let [direcitonal-parent-uuid (:bp/uuid (directional-parent-entity gv-uuid))] (get output-min-max-values direcitonal-parent-uuid) [min-val max-val]) - ;; FIX: BHP1-1532 - do not clip max values - step (nice-step-size max-to-use) - y-max (+ max-to-use step)] + y-max (default-y-axis-max max-to-use)] (-> acc (conj [:dispatch [:worksheet/update-y-axis-limit-attr ws-uuid diff --git a/projects/behave/src/cljs/behave/worksheet/subs.cljs b/projects/behave/src/cljs/behave/worksheet/subs.cljs index b8722571b..54431e4d6 100644 --- a/projects/behave/src/cljs/behave/worksheet/subs.cljs +++ b/projects/behave/src/cljs/behave/worksheet/subs.cljs @@ -88,6 +88,14 @@ (map #(deref (rf/subscribe [:wizard/*module (name %)]))) (sort-by :module/order)))) +(rf/reg-sub + :worksheet/module-keywords + (fn [[_ ws-uuid]] + (rf/subscribe [:worksheet ws-uuid])) + + (fn [worksheet _] + (:worksheet/modules worksheet))) + ;; Get state of a particular output (rf/reg-sub :worksheet/output-enabled? diff --git a/projects/behave/test/cljs/behave/headless_test_runner.cljs b/projects/behave/test/cljs/behave/headless_test_runner.cljs index 27bba4a46..f28f740be 100644 --- a/projects/behave/test/cljs/behave/headless_test_runner.cljs +++ b/projects/behave/test/cljs/behave/headless_test_runner.cljs @@ -1,46 +1,19 @@ (ns behave.headless-test-runner "Headless CI runner: figwheel launches headless Chrome and calls `-main`, which bootstraps the env and runs the suite via `run-tests-async`. figwheel exits - with a pass/fail code when the run finishes." - (:require [behave.contain-test] - [behave.crown-test] - [behave.diagram-test] - [behave.events] - [behave.help.subs] - [behave.mortality-test] - [behave.solver-test] - [behave.subs] - [behave.surface-test] - [behave.test-solver-generators] - [behave.test-solver-queries] + with a pass/fail code when the run finishes. + + The suite is defined once in [[behave.test-namespaces]]; `run-tests-async` + is invoked with no namespace arguments so it expands to every loaded test + namespace — identical to the browser runner by construction." + (:require [behave.test-namespaces] [behave.test-support :as ts] - [behave.tests-used-in-fixtures] - [behave.utils-test] - [behave.vms.subs] - [behave.wizard.events] - [behave.wizard.subs] - [behave.worksheet-events-test] - [behave.worksheet-subs-test] - [behave.worksheet.events] - [behave.worksheet.subs] [figwheel.main.testing :refer-macros [run-tests-async]])) (defn -main [& _] (ts/ensure-test-env! (fn [] - (run-tests-async 60000 - 'behave.crown-test - 'behave.contain-test - 'behave.mortality-test - 'behave.diagram-test - 'behave.surface-test - 'behave.solver-test - 'behave.tests-used-in-fixtures - 'behave.test-solver-generators - 'behave.test-solver-queries - 'behave.utils-test - 'behave.worksheet-events-test - 'behave.worksheet-subs-test))) + (run-tests-async 60000))) ;; Return the wait signal so figwheel blocks until the async run finishes ;; (run-tests-async fires in the callback above, not as -main's last form). [:figwheel.main.async-result/wait 90000]) diff --git a/projects/behave/test/cljs/behave/test_namespaces.cljs b/projects/behave/test/cljs/behave/test_namespaces.cljs new file mode 100644 index 000000000..85764666a --- /dev/null +++ b/projects/behave/test/cljs/behave/test_namespaces.cljs @@ -0,0 +1,36 @@ +(ns behave.test-namespaces + "Single source of truth for the CLJS test suite. + + Requiring this namespace loads every test namespace (plus the app + event/sub namespaces the tests exercise). Both [[behave.test-runner]] + (browser, /api/test) and [[behave.headless-test-runner]] (CI, `bb + test:ci`) require ONLY this namespace and invoke figwheel's + `run-tests`/`run-tests-async` with no namespace arguments — those + macros expand to every loaded namespace containing tests, so the two + suites cannot drift. + + To add a test namespace: require it here. Nothing else to update." + (:require + [behave.contain-test] + [behave.crown-test] + [behave.diagram-test] + [behave.events] + [behave.help.subs] + [behave.mortality-test] + [behave.results-table-test] + [behave.shading-test] + [behave.solver-test] + [behave.subs] + [behave.surface-test] + [behave.test-solver-generators] + [behave.test-solver-queries] + [behave.tests-used-in-fixtures] + [behave.units-test] + [behave.utils-test] + [behave.vms.subs] + [behave.wizard.events] + [behave.wizard.subs] + [behave.worksheet-events-test] + [behave.worksheet-subs-test] + [behave.worksheet.events] + [behave.worksheet.subs])) diff --git a/projects/behave/test/cljs/behave/test_runner.cljs b/projects/behave/test/cljs/behave/test_runner.cljs index 604771afa..b81f495cf 100644 --- a/projects/behave/test/cljs/behave/test_runner.cljs +++ b/projects/behave/test/cljs/behave/test_runner.cljs @@ -1,46 +1,16 @@ (ns behave.test-runner - (:require [behave.contain-test] - [behave.crown-test] - [behave.diagram-test] - [behave.events] - [behave.help.subs] - [behave.mortality-test] - [behave.results-table-test] - [behave.shading-test] - [behave.solver-test] - [behave.subs] - [behave.surface-test] - [behave.test-solver-generators] - [behave.test-solver-queries] + "Browser test runner (figwheel test page at /api/test). + + The suite is defined once in [[behave.test-namespaces]]; `run-tests` + is invoked with no namespace arguments so it expands to every loaded + test namespace. See that namespace to add tests." + (:require [behave.test-namespaces] [behave.test-support :as ts] - [behave.tests-used-in-fixtures] - [behave.utils-test] - [behave.vms.subs] - [behave.wizard.events] - [behave.wizard.subs] - [behave.worksheet-events-test] - [behave.worksheet-subs-test] - [behave.worksheet.events] - [behave.worksheet.subs] [cljs-test-display.core] [figwheel.main.testing :refer [run-tests]])) (defn run-the-tests [] - (run-tests (cljs-test-display.core/init! "app-testing") - 'behave.crown-test - 'behave.contain-test - 'behave.mortality-test - 'behave.results-table-test - 'behave.shading-test - 'behave.diagram-test - 'behave.surface-test - 'behave.solver-test - 'behave.tests-used-in-fixtures - 'behave.test-solver-generators - 'behave.test-solver-queries - 'behave.utils-test - 'behave.worksheet-events-test - 'behave.worksheet-subs-test)) + (run-tests (cljs-test-display.core/init! "app-testing"))) (defn ^:after-load init [] (ts/ensure-test-env! run-the-tests)) diff --git a/projects/behave/test/cljs/behave/units_test.cljs b/projects/behave/test/cljs/behave/units_test.cljs index 9a1afd8a4..0f376a305 100644 --- a/projects/behave/test/cljs/behave/units_test.cljs +++ b/projects/behave/test/cljs/behave/units_test.cljs @@ -1,13 +1,47 @@ (ns behave.units-test - (:require [behave.lib.units :as sut] - [behave.helpers :refer [within-hundredth?]] + (:require [behave.helpers :refer [within-hundredth?]] + [behave.lib.units :as sut] [cljs.test :refer [deftest is] :include-macros true])) (deftest units-conversion-test - (is (= 1 (sut/convert 1 :area "ac" "ac"))) - (is (= 1 (sut/convert 1 "ac" "ac"))) - (is (within-hundredth? 43560 (sut/convert 1 :area "ac" "ft2"))) - (is (within-hundredth? 43560 (sut/convert 1 "ac" "ft2")))) + +;; BHP1-1607 — units added from the Variables Spreadsheet +(deftest new-speed-units-conversion-test + (is (within-hundredth? 196.85 (sut/convert 1 "m/s" "ft/min"))) + (is (within-hundredth? 1 (sut/convert 196.8503937 "ft/min" "m/s"))) + ;; 1 mi/h = 88 ft/min = 88 * (20160/660) fur/fortnight + (is (within-hundredth? 2688 (sut/convert 1 "mi/h" "fur/fortnight"))) + (is (within-hundredth? 3.27 (sut/convert 100 "fur/fortnight" "ft/min")))) + +(deftest new-loading-units-conversion-test + (is (within-hundredth? 21.78 (sut/convert 1 "lb/ft2" "ton/ac"))) + (is (within-hundredth? 4.88 (sut/convert 1 "lb/ft2" "kg/m2")))) + +;; NOTE: round-trip only — the direction of the C++ SAVR factors is under +;; fire-science review (they treat SAVR like a plain length rather than an +;; inverse length), so these avoid asserting either convention. +(deftest new-savr-units-conversion-test + (is (within-hundredth? 3500 (-> 3500 + (sut/convert "ft2/ft3" "in2/in3") + (sut/convert "in2/in3" "ft2/ft3")))) + (is (within-hundredth? 100 (-> 100 + (sut/convert "m2/m3" "cm2/cm3") + (sut/convert "cm2/cm3" "m2/m3"))))) + +(deftest kelvin-conversion-test + (is (within-hundredth? 273.15 (sut/convert 32 "oF" "K"))) + (is (within-hundredth? 32 (sut/convert 273.15 "K" "oF")))) + +(deftest new-heat-units-conversion-test + (is (within-hundredth? 11.37 (sut/convert 1 "Btu/ft2" "kW-s/m2"))) + (is (within-hundredth? 3.46 (sut/convert 1 "Btu/ft/s" "kJ/m/s"))) + (is (within-hundredth? 207.85 (sut/convert 1 "Btu/ft/s" "kJ/m/min"))) + (is (within-hundredth? 11.36 (sut/convert 1 "Btu/ft2/sec" "kJ/m2/s"))) + (is (within-hundredth? 11.36 (sut/convert 1 "Btu/ft2/min" "kJ/m2/min")))) + +(deftest time-units-conversion-test + (is (within-hundredth? 365 (sut/convert 1 "years" "days"))) + (is (within-hundredth? 525600 (sut/convert 1 "years" "min")))) diff --git a/projects/behave/test/cljs/behave/worksheet_events_test.cljs b/projects/behave/test/cljs/behave/worksheet_events_test.cljs index 04ac7d43a..2f15b338f 100644 --- a/projects/behave/test/cljs/behave/worksheet_events_test.cljs +++ b/projects/behave/test/cljs/behave/worksheet_events_test.cljs @@ -2,7 +2,7 @@ (:require [behave.fixtures :as fx] [behave.test-utils :as utils] - [behave.worksheet.events] + [behave.worksheet.events :as events] [behave.worksheet.subs] [cljs.test :refer [deftest is join-fixtures testing use-fixtures are] :include-macros true] [datascript.core :as d] @@ -382,3 +382,19 @@ ;; ================================================================================================= ;; :worksheet/update-furthest-visited-step ;; ================================================================================================= + +;; ================================================================================================= +;; default-y-axis-max +;; ================================================================================================= + +(deftest default-y-axis-max-test + (testing "rounds up to the next whole number above 1 [BHP1-1615]" + (are [max-val expected] (= expected (events/default-y-axis-max max-val)) + 8.79 10 + 10.4 12 + 0 1)) + (testing "rounds up to the next tenth below 1" + (is (= 0.5 (events/default-y-axis-max 0.43)))) + (testing "never clips below max + nice step [BHP1-1532]" + (doseq [max-val [0.2 0.9 1.1 8.79 47.9 163.4]] + (is (> (events/default-y-axis-max max-val) max-val))))) diff --git a/projects/behave/zip-extras/Behave7.exe b/projects/behave/zip-extras/Behave7.exe new file mode 100644 index 000000000..854f2868c Binary files /dev/null and b/projects/behave/zip-extras/Behave7.exe differ diff --git a/projects/behave/zip-extras/Behave7.lnk b/projects/behave/zip-extras/Behave7.lnk deleted file mode 100644 index c2a12c241..000000000 Binary files a/projects/behave/zip-extras/Behave7.lnk and /dev/null differ diff --git a/projects/behave_cms/deps.edn b/projects/behave_cms/deps.edn index e7ec4997c..f6de19743 100644 --- a/projects/behave_cms/deps.edn +++ b/projects/behave_cms/deps.edn @@ -65,6 +65,7 @@ sig/string-utils {:local/root "../../components/string_utils"} sig/transport {:local/root "../../components/transport"} sig/map-utils {:local/root "../../components/map_utils"} + sig/cucumber-test-generator {:local/root "../../components/cucumber_test_generator"} sig/schema-migrate {:local/root "../../components/schema_migrate"} ;; Bases diff --git a/projects/behave_cms/resources/migrations/2026_06_24_show_direction_mode_for_surface_and_crown.clj b/projects/behave_cms/resources/migrations/2026_06_24_show_direction_mode_for_surface_and_crown.clj new file mode 100644 index 000000000..4c73c90f5 --- /dev/null +++ b/projects/behave_cms/resources/migrations/2026_06_24_show_direction_mode_for_surface_and_crown.clj @@ -0,0 +1,81 @@ +(ns migrations.2026-06-24-show-direction-mode-for-surface-and-crown + (:require [datomic.api :as d] + [schema-migrate.interface :as sm])) + +;; =========================================================================================================== +;; Overview +;; =========================================================================================================== + +;; BHP1-1354 — Show a pre-selected "Heading" Direction Mode under Surface & Crown. +;; +;; The "Fire Behavior" output submodule is gated by module conditionals (:or over +;; ["surface"], ["contain" "surface"], ["mortality" "surface"]) and is missing +;; the ["crown" "surface"] combo, so in Surface & Crown the whole submodule — +;; including the "Direction Mode" group — never appears. +;; +;; We want ONLY the "Direction Mode" group to appear under Surface & Crown (not +;; "Surface Fire" nor "Ignition"). The direction options already carry actions +;; that select Heading and disable HBF / Direction of Interest for ["crown" +;; "surface"], so making the group visible is all that's needed. +;; +;; Module conditionals match the selected module set exactly, so this migration: +;; 1. adds ["crown" "surface"] to the Fire Behavior submodule conditionals, and +;; 2. pins the "Surface Fire" and "Ignition" groups to the original combos +;; (["surface"], ["contain" "surface"], ["mortality" "surface"]) so they do +;; NOT show in Surface & Crown. +;; "Direction Mode" has no group conditionals, so it shows whenever the submodule +;; does — which now includes Surface & Crown. + +;; =========================================================================================================== +;; Payload +;; =========================================================================================================== + +(def ^:private fire-behavior "behaveplus:surface:output:fire_behavior") +(def ^:private surface-fire "behaveplus:surface:output:fire_behavior:surface_fire") +(def ^:private ignition "behaveplus:surface:output:fire_behavior:ignition") + +;; Combos the Fire Behavior submodule served before this change — i.e. every +;; combo EXCEPT Surface & Crown. +(def ^:private non-crown-module-sets + [["surface"] ["contain" "surface"] ["mortality" "surface"]]) + +(defn- module-conditional [db modules] + (sm/->conditional db {:ttype :module :operator :equal :values modules})) + +#_{:clj-kondo/ignore [:missing-docstring :unused-binding]} +(defn payload-fn [db] + [;; Let the submodule appear for Surface & Crown (cardinality-many: appends). + {:db/id (sm/t-key->eid db fire-behavior) + :submodule/conditionals [(module-conditional db ["crown" "surface"])]} + + ;; Keep "Surface Fire" and "Ignition" out of Surface & Crown by pinning them + ;; to the original (non-crown) module combos. + {:db/id (sm/t-key->eid db surface-fire) + :group/conditionals-operator :or + :group/conditionals (mapv #(module-conditional db %) non-crown-module-sets)} + + {:db/id (sm/t-key->eid db ignition) + :group/conditionals-operator :or + :group/conditionals (mapv #(module-conditional db %) non-crown-module-sets)}]) + +;; =========================================================================================================== +;; Manual REPL usage +;; =========================================================================================================== + +#_{:clj-kondo/ignore [:duplicate-require :missing-docstring :unresolved-namespace]} +(comment + (require '[behave-cms.server :as cms] + '[behave-cms.store :as store]) + (cms/init-db!) + + (def conn (store/default-conn)) + + (try (def tx-data @(d/transact conn (payload-fn (d/db conn)))) + (catch Exception e (str "caught exception: " (.getMessage e))))) + +;; =========================================================================================================== +;; Rollback. +;; =========================================================================================================== + +(comment + (sm/rollback-tx! conn tx-data)) diff --git a/projects/behave_cms/resources/migrations/2026_07_29_add_missing_units.clj b/projects/behave_cms/resources/migrations/2026_07_29_add_missing_units.clj new file mode 100644 index 000000000..9d08d4413 --- /dev/null +++ b/projects/behave_cms/resources/migrations/2026_07_29_add_missing_units.clj @@ -0,0 +1,211 @@ +(ns migrations.2026-07-29-add-missing-units + (:require [datomic.api :as d] + [schema-migrate.interface :as sm])) + +;; =========================================================================================================== +;; Overview +;; =========================================================================================================== + +;; BHP1-1607 — Add "missing" units from the Variables Spreadsheet in Settings. +;; +;; The C++ layer (behaveUnits.h) already implements nearly every unit listed in +;; the spreadsheet's Unit Preferences tab; the VMS simply has no :unit entity +;; for them, so the Settings unit selectors can never offer them. This +;; migration: +;; +;; 1. Adds the new SpeedUnits::FurlongsPerFortnight enum member (appended to +;; the C++ enum in behave-mirror as part of this same ticket). +;; 2. Adds the missing :unit entities under their existing dimensions: +;; Loading — lb/ft2, kg/m2 +;; Surface Area To Volume — in2/in3, cm2/cm3 +;; Speed — m/s, fur/fortnight +;; Temperature — K +;; Heat Per Unit Area — kW-s/m2 +;; Fireline Intensity — kJ/m/s, kJ/m/min +;; Heat Source Reaction — kJ/m2/s, kJ/m2/min +;; 3. Appends m/s to the "Wind Speed" domain's filtered units (that domain +;; shows only its filter list per BHP1-1370). +;; 4. Gives "Crown Rate of Spread" a filter of the previously-visible speed +;; units + m/s, so furlongs/fortnight surfaces only under +;; "Surface Rate of Spread" (per the spreadsheet). +;; 5. Points the "Fuel & Extinction Moisture" domain at the Fraction +;; dimension — it had no :domain/dimension-uuid at all, which is why its +;; Settings row never offered "fraction" (its unit uuids already point at +;; the Fraction dimension's "%" unit). +;; 6. Re-points "P-G Age of Rough" from Fraction/fraction to Time/years +;; (numerically a no-op: english = metric = native both before and after, +;; so no conversion is ever applied), filtered to years only. +;; +;; After this runs, re-export layout.msgpack so the app picks up the new units. + +;; =========================================================================================================== +;; Helpers +;; =========================================================================================================== + +(defn- dimension-eid [db dim-name] + (d/q '[:find ?e . :in $ ?n :where [?e :dimension/name ?n]] db dim-name)) + +(defn- dimension-uuid [db dim-name] + (d/q '[:find ?uuid . :in $ ?n + :where [?e :dimension/name ?n] [?e :bp/uuid ?uuid]] + db dim-name)) + +(defn- domain-eid [db domain-name] + (d/q '[:find ?e . :in $ ?n :where [?e :domain/name ?n]] db domain-name)) + +(defn- enum-eid [db enum-name] + (d/q '[:find ?e . :in $ ?n :where [?e :cpp.enum/name ?n]] db enum-name)) + +(defn- enum-member-uuid [db enum-name member-name] + (d/q '[:find ?uuid . :in $ ?en ?mn + :where + [?e :cpp.enum/name ?en] + [?e :cpp.enum/enum-member ?m] + [?m :cpp.enum-member/name ?mn] + [?m :bp/uuid ?uuid]] + db enum-name member-name)) + +(defn- next-enum-member-value [db enum-name] + (->> (d/q '[:find [?v ...] :in $ ?en + :where + [?e :cpp.enum/name ?en] + [?e :cpp.enum/enum-member ?m] + [?m :cpp.enum-member/value ?v]] + db enum-name) + (apply max) + (inc))) + +(defn- dimension-unit-uuid [db dim-name short-code] + (d/q '[:find ?uuid . :in $ ?dn ?sc + :where + [?d :dimension/name ?dn] + [?d :dimension/units ?u] + [?u :unit/short-code ?sc] + [?u :bp/uuid ?uuid]] + db dim-name short-code)) + +(defn- dimension-unit-uuids [db dim-name] + (d/q '[:find [?uuid ...] :in $ ?dn + :where + [?d :dimension/name ?dn] + [?d :dimension/units ?u] + [?u :bp/uuid ?uuid]] + db dim-name)) + +(defn- add-unit-tx + "Tx map appending a new unit (with a pre-minted `:bp/uuid`) to a dimension." + [db dim-name unit] + {:db/id (dimension-eid db dim-name) + :dimension/units (sm/postwalk-insert [unit])}) + +;; =========================================================================================================== +;; Payload +;; =========================================================================================================== + +(def ^:private speed-enum "SpeedUnits_SpeedUnitsEnum") + +#_{:clj-kondo/ignore [:missing-docstring :unused-binding]} +(defn payload-fn [db] + (let [furlong-member-uuid (str (d/squuid)) + ms-unit-uuid (str (d/squuid)) + furlong-unit-uuid (str (d/squuid)) + years-unit-uuid (dimension-unit-uuid db "Time" "years") + member-uuid (partial enum-member-uuid db) + new-unit (fn [cpp-member-uuid unit-name short-code system] + {:bp/uuid (str (d/squuid)) + :unit/name unit-name + :unit/short-code short-code + :unit/system system + :unit/cpp-enum-member-uuid cpp-member-uuid})] + (concat + ;; 1. New SpeedUnits enum member (appended last in C++, matching value) + [{:db/id (enum-eid db speed-enum) + :cpp.enum/enum-member (sm/postwalk-insert + [{:bp/uuid furlong-member-uuid + :cpp.enum-member/name "FurlongsPerFortnight" + :cpp.enum-member/value (next-enum-member-value db speed-enum)}])}] + + ;; 2. New units under their existing dimensions + [(add-unit-tx db "Loading" + (new-unit (member-uuid "LoadingUnits_LoadingUnitsEnum" "PoundsPerSquareFoot") + "Pounds Per Square Foot (lb/ft2)" "lb/ft2" :english)) + (add-unit-tx db "Loading" + (new-unit (member-uuid "LoadingUnits_LoadingUnitsEnum" "KilogramsPerSquareMeter") + "Kilograms Per Square Meter (kg/m2)" "kg/m2" :metric)) + (add-unit-tx db "Surface Area To Volume" + (new-unit (member-uuid "SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum" "SquareInchesOverCubicInches") + "Square Inches Over Cubic Inches (in2/in3)" "in2/in3" :english)) + (add-unit-tx db "Surface Area To Volume" + (new-unit (member-uuid "SurfaceAreaToVolumeUnits_SurfaceAreaToVolumeUnitsEnum" "SquareCentimetersOverCubicCentimeters") + "Square Centimeters Over Cubic Centimeters (cm2/cm3)" "cm2/cm3" :metric)) + (add-unit-tx db "Speed" + (assoc (new-unit (member-uuid speed-enum "MetersPerSecond") + "Meters Per Second (m/s)" "m/s" :metric) + :bp/uuid ms-unit-uuid)) + (add-unit-tx db "Speed" + (assoc (new-unit furlong-member-uuid + "Furlongs Per Fortnight (fur/fortnight)" "fur/fortnight" :english) + :bp/uuid furlong-unit-uuid)) + (add-unit-tx db "Temperature" + (new-unit (member-uuid "TemperatureUnits_TemperatureUnitsEnum" "Kelvin") + "Kelvin (K)" "K" :metric)) + (add-unit-tx db "Heat Per Unit Area" + (new-unit (member-uuid "HeatPerUnitAreaUnits_HeatPerUnitAreaUnitsEnum" "KilowattSecondsPerSquareMeter") + "Kilowatt Seconds Per Square Meter (kW-s/m2)" "kW-s/m2" :metric)) + (add-unit-tx db "Fireline Intensity" + (new-unit (member-uuid "FirelineIntensityUnits_FirelineIntensityUnitsEnum" "KilojoulesPerMeterPerSecond") + "Kilojoules Per Meter Per Second (kJ/m/s)" "kJ/m/s" :metric)) + (add-unit-tx db "Fireline Intensity" + (new-unit (member-uuid "FirelineIntensityUnits_FirelineIntensityUnitsEnum" "KilojoulesPerMeterPerMinute") + "Kilojoules Per Meter Per Minute (kJ/m/min)" "kJ/m/min" :metric)) + (add-unit-tx db "Heat Source Reaction" + (new-unit (member-uuid "HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum" "KilojoulesPerSquareMeterPerSecond") + "Kilojoules Per Square Meter Per Second (kJ/m2/s)" "kJ/m2/s" :metric)) + (add-unit-tx db "Heat Source Reaction" + (new-unit (member-uuid "HeatSourceAndReactionIntensityUnits_HeatSourceAndReactionIntensityUnitsEnum" "KilojoulesPerSquareMeterPerMinute") + "Kilojoules Per Square Meter Per Minute (kJ/m2/min)" "kJ/m2/min" :metric))] + + ;; 3. Wind Speed shows only its filter list — append m/s + [{:db/id (domain-eid db "Wind Speed") + :domain/filtered-unit-uuids [ms-unit-uuid]}] + + ;; 4. Crown ROS keeps its previously-visible units + m/s (no furlongs) + [{:db/id (domain-eid db "Crown Rate of Spread") + :domain/filtered-unit-uuids (conj (vec (dimension-unit-uuids db "Speed")) + ms-unit-uuid)}] + + ;; 5. Fuel & Extinction Moisture never had a dimension; its unit uuids + ;; already point at the Fraction dimension's "%" unit + [{:db/id (domain-eid db "Fuel & Extinction Moisture") + :domain/dimension-uuid (dimension-uuid db "Fraction")}] + + ;; 6. P-G Age of Rough: Fraction/fraction -> Time/years (all three unit + ;; prefs match before and after, so no value conversion is affected) + [{:db/id (domain-eid db "P-G Age of Rough") + :domain/dimension-uuid (dimension-uuid db "Time") + :domain/english-unit-uuid years-unit-uuid + :domain/metric-unit-uuid years-unit-uuid + :domain/native-unit-uuid years-unit-uuid + :domain/filtered-unit-uuids [years-unit-uuid]}]))) + +;; =========================================================================================================== +;; Manual REPL usage +;; =========================================================================================================== + +#_{:clj-kondo/ignore [:duplicate-require :missing-docstring :unresolved-namespace]} +(comment + (require '[behave-cms.server :as cms] + '[behave-cms.store :as store]) + (cms/init-db!) + + (def conn (store/default-conn)) + + (try (def tx-data @(d/transact conn (payload-fn (d/db conn)))) + (catch Exception e (str "caught exception: " (.getMessage e))))) + +;; =========================================================================================================== +;; Rollback. +;; =========================================================================================================== + +(comment + (sm/rollback-tx! conn tx-data)) diff --git a/scripts/browser.clj b/scripts/browser.clj new file mode 100644 index 000000000..bfd0caaf8 --- /dev/null +++ b/scripts/browser.clj @@ -0,0 +1,26 @@ +(ns browser + "Shared headless-capable Chrome/Chromium resolution for babashka tasks. + Lifted from projects/behave/bb.edn's test:ci :init so the cucumber:ci task can + feed the resolved binary to Selenium as :browser-path." + (:require [babashka.fs :as fs] + [clojure.string :as str])) + +(defn find-browser + "Headless-capable Chrome/Chromium path: $CHROME_BIN, else per-OS defaults." + [] + (or (System/getenv "CHROME_BIN") + (let [os (str/lower-case (System/getProperty "os.name")) + cands (cond + (str/includes? os "mac") + ["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" + "/Applications/Chromium.app/Contents/MacOS/Chromium"] + (str/includes? os "win") + ["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" + "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"] + :else + ["google-chrome" "google-chrome-stable" "chromium" "chromium-browser"])] + (or (some (fn [c] + (cond (fs/exists? c) c + (fs/which c) (str (fs/which c)))) + cands) + (throw (ex-info "No Chrome/Chromium found. Set CHROME_BIN." {:tried cands})))))) diff --git a/scripts/create-launcher.sh b/scripts/create-launcher.sh new file mode 100755 index 000000000..06a464ab9 --- /dev/null +++ b/scripts/create-launcher.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Builds the portable Behave7 launcher exe on a remote Windows box and copies +# it to projects/behave/zip-extras/Behave7.exe. +# +# The launcher is a tiny .NET exe with the app icon embedded that starts +# bin\Behave7.exe relative to its own location — this is the only approach +# that gives a double-clickable root item with the correct icon regardless +# of where the ZIP is extracted (.lnk files cannot resolve relative icon +# paths; see scripts/create-shortcut.sh history). +# +# Requires: SSH access to a Windows box with .NET Framework 4.x (csc.exe). + +usage() { + echo "Usage: $0 " + echo "Example: $0 192.0.2.10 winuser" + exit 1 +} + +if [ $# -lt 2 ]; then + usage +fi + +HOST="$1" +USER="$2" +REMOTE="${USER}@${HOST}" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +ICON="${SCRIPT_DIR}/../projects/behave/resources/public/images/favicon.ico" +OUTPUT="${SCRIPT_DIR}/../projects/behave/zip-extras/Behave7.exe" +BUILD_DIR="C:/Users/${USER}/launcher-build" +CSC="C:/Windows/Microsoft.NET/Framework64/v4.0.30319/csc.exe" + +echo "==> Uploading source and icon to ${REMOTE}..." +ssh "$REMOTE" "mkdir -p '${BUILD_DIR}'" +cat "${SCRIPT_DIR}/launcher/Launcher.cs" | ssh "$REMOTE" "cat > '${BUILD_DIR}/Launcher.cs'" +cat "$ICON" | ssh "$REMOTE" "cat > '${BUILD_DIR}/behave7.ico'" + +echo "==> Compiling with csc.exe..." +ssh "$REMOTE" "cd '${BUILD_DIR}' && '${CSC}' -nologo -target:winexe -out:Behave7.exe -win32icon:behave7.ico -r:System.Windows.Forms.dll Launcher.cs" + +echo "==> Copying launcher back..." +ssh "$REMOTE" "cat '${BUILD_DIR}/Behave7.exe'" > "$OUTPUT" + +echo "Created: ${OUTPUT}" diff --git a/scripts/create-shortcut.sh b/scripts/create-shortcut.sh new file mode 100755 index 000000000..27e9288b7 --- /dev/null +++ b/scripts/create-shortcut.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Creates a portable Behave7.lnk and copies it to projects/behave/zip-extras/. +# +# The shortcut targets cmd.exe (exists on every Windows box at the same path) +# with a relative path argument, so it works regardless of where the ZIP is extracted. + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +OUTPUT="${SCRIPT_DIR}/../projects/behave/zip-extras/Behave7.lnk" + +"${SCRIPT_DIR}/mslink.sh" \ + -l 'C:\Windows\System32\cmd.exe' \ + -a '/c start "" ".\bin\Behave7.exe"' \ + -i '.\bin\Behave7.exe' \ + -n 'BehavePlus 7' \ + -o "$OUTPUT" + +echo "Created: ${OUTPUT}" diff --git a/scripts/cucumber_ci.clj b/scripts/cucumber_ci.clj new file mode 100644 index 000000000..49aa4f85d --- /dev/null +++ b/scripts/cucumber_ci.clj @@ -0,0 +1,420 @@ +#!/usr/bin/env bb +;; Headless CI cucumber run (optionally sharded in parallel). +;; +;; The BehavePlus app is single-session (behave.init/init! reloads config.edn and, in cucumber +;; config, deletes+reconnects a single global store on every /api/init), so N browsers cannot +;; share one server. This orchestrator instead: +;; 1. compiles the CLJS once (advanced build via `clojure -M:compile-cljs`) — fast SPA boot, +;; 2. starts N isolated app servers (scripts/shard_server.clj), each on its own port + DB, +;; 3. splits the feature files round-robin across the shards, +;; 4. runs N cucumber drivers (scripts/cucumber_run_driver.clj) in parallel, one per shard, +;; each with its feature subset (`:feature-files`) and its own Chrome, +;; 5. merges the per-shard reports and tears every server down. +;; +;; Sharding is a flag feature: --shards defaults to 2, so `--shards 1` runs a single +;; unsharded server + driver. +;; +;; Usage: +;; bb cucumber:ci [opts] (or: bb scripts/cucumber_ci.clj [opts]) +;; --shards N number of parallel shards (default 2 with --headless; +;; forced to 1 in the default visible mode unless set) +;; --feature F run only this one feature file (rel path, nested path, or bare +;; (forces 1 shard; runs all its scenarios unless --query given) +;; --query tegere query-tree (default core, not extended) +;; --features-dir D features root (default features) +;; --serve-timeout S secs to wait per server (default 300) +;; --db-prefix P per-shard sqlite path prefix (default cucumber-shard-db) +;; --base-port N first shard's port (i uses N+i) (default 8091) +;; --skip-compile reuse the existing compiled build (skip step 1) +;; --headless run headless (no visible browser); enables parallel sharding and +;; auto-closes on finish. DEFAULT is a visible browser: 1 shard, and +;; browser + server stay open until Ctrl-C. Visible mode needs a +;; display (WSLg on WSL2). +;; --stop halt at the first failing scenario; forces 1 shard unless +;; --shards given +;; +;; Examples: +;; bb cucumber:ci +;; Default dev run: one visible Chrome, 1 shard, core (non-extended) scenarios. +;; On failure the browser + server stay open for inspection (Ctrl-C to close); +;; on success everything tears down. +;; +;; bb cucumber:ci --headless +;; CI run: headless, 2 parallel shards, core scenarios; auto-closes on finish. +;; +;; bb cucumber:ci --headless --shards 4 +;; Same, but split the feature files across 4 parallel servers/drivers. +;; +;; bb cucumber:ci --feature surface-input_fuel-model_special-case_chaparral-upland_direct-fuel-load.feature +;; Run a single feature file (bare name, nested path, or full rel path all resolve), +;; visible, ALL its scenarios (a lone --feature ignores the core/extended query). +;; +;; bb cucumber:ci --headless --feature crown-input_weather_wind-and-slope-are_wind-direction.feature \ +;; --query '(and "core" (not "extended"))' +;; Single feature, headless, restricted to a tegere query. +;; +;; bb cucumber:ci --headless --query '(or "core" "extended")' +;; Full suite, headless — the query the GitHub Actions `all` scope uses +;; (the default/PR scope uses '(and "core" (not "extended"))', shown above). +;; +;; bb cucumber:ci --headless --skip-compile +;; Reuse the CLJS build from a previous run — fast iteration when only steps/features changed. +;; +;; bb cucumber:ci --stop +;; Stop at the first failing scenario (single shard) — quickest way to triage a break. +;; +;; bb cucumber:ci --headless --features-dir features --base-port 8091 --db-prefix cucumber-shard-db +;; Explicit defaults shown; shard i listens on 8091+i with its own sqlite -i.sqlite. +;; +;; Outputs land in logs/cucumber/cucumber_test_results_/ : a combined +;; cucumber_test_summary.org, plus per-shard *_results.org and *_{server,run}.log files. +(ns cucumber-ci + (:require [babashka.fs :as fs] + [babashka.process :as p] + [browser :as browser] + [clojure.edn :as edn] + [clojure.java.io :as io] + [clojure.string :as str])) + +(def default-shards 2) +(def default-serve-timeout 300) +(def default-base-port 8091) +(def steps-dir "steps") +(def cljs-dir "projects/behave/resources/public/cljs") + +;; config.edn is gitignored (dev-local), so it's absent on a fresh checkout / CI. Each shard +;; server loads it via behave.server/init-config!, so it must exist before the JVMs boot. +(def app-config "projects/behave/resources/config.edn") +(def ci-config-src "projects/behave/resources/config.ci.edn") + +;;; --------------------------------------------------------------------------- +;;; Arg helpers +;;; --------------------------------------------------------------------------- + +(defn flag-val [args flag default] + (loop [in (seq args)] + (cond + (empty? in) default + (= (first in) flag) (second in) + (str/starts-with? (str (first in)) (str flag "=")) (subs (first in) (inc (count flag))) + :else (recur (rest in))))) + +(defn flag-set? [args flag] (boolean (some #(= % flag) args))) + +;;; --------------------------------------------------------------------------- +;;; Build +;;; --------------------------------------------------------------------------- + +(defn compile-once! [] + (println "▶ compiling advanced CLJS build (clojure -M:compile-cljs)…") + (let [{:keys [exit]} (p/shell {:dir "projects/behave" :continue true} "clojure" "-M:compile-cljs")] + (when-not (zero? exit) + (println "ERROR: CLJS compile failed") (System/exit 1)))) + +(defn ensure-config! [] + ;; Provision config.edn from the tracked config.ci.edn when absent (fresh checkout / CI). + ;; Never clobbers a dev's real config. + (when-not (fs/exists? app-config) + (fs/copy ci-config-src app-config) + (println (format "cucumber:ci: provisioned %s from %s (was absent)" app-config ci-config-src)))) + +(defn ensure-manifest! [] + ;; The advanced build is fingerprinted (app-.js) but the -M:compile-cljs path writes no + ;; manifest.edn, so behave.views/find-app-js would fall back to a non-existent /cljs/app.js. + ;; Map the logical name to the built file so the served HTML references the right script. + (let [fp (->> (fs/glob cljs-dir "app-*.js") + (map str) + (remove #(str/ends-with? % ".map")) + sort first)] + (if fp + (let [base (fs/file-name fp)] + (spit (str cljs-dir "/manifest.edn") + (pr-str {"resources/public/cljs/app.js" (str "resources/public/cljs/" base)})) + (println "✓ manifest.edn →" base)) + (when-not (fs/exists? (str cljs-dir "/app.js")) + (println "ERROR: no compiled app.js in" cljs-dir "— run without --skip-compile") + (System/exit 1))))) + +;;; --------------------------------------------------------------------------- +;;; Feature discovery + sharding (mirrors cucumber_run_driver/all-feature-files) +;;; --------------------------------------------------------------------------- + +(defn feature-files [features-dir] + (->> (file-seq (io/file features-dir)) + (filter #(.isFile %)) + (filter #(str/ends-with? (.getName %) ".feature")) + (map #(str/replace (.getPath %) (str features-dir "/") "")) + sort vec)) + +(defn resolve-feature + "Resolve a user-supplied --feature value to a features-dir-relative path from + `discovered`. Accepts an exact relative path, a features-dir-prefixed path, a + nested-path suffix, or a bare filename. Returns nil when nothing matches." + [input discovered features-dir] + (let [input (str/replace (str input) #"^\./" "") + prefix (str features-dir "/") + norm (if (str/starts-with? input prefix) (subs input (count prefix)) input) + base (str (fs/file-name norm))] + (or (some #{norm} discovered) ; exact relative path + (first (filter #(str/ends-with? % (str "/" norm)) discovered)) ; nested-path suffix + (first (filter #(= (str (fs/file-name %)) base) discovered))))) ; bare filename + +(defn shard-split [files n] + ;; Round-robin so heavy (results-page / extended) files spread evenly across shards. + (->> (map-indexed vector files) + (group-by #(mod (first %) n)) + (into (sorted-map)) + vals + (mapv #(mapv second %)))) + +;;; --------------------------------------------------------------------------- +;;; Readiness poll +;;; --------------------------------------------------------------------------- + +(defn http-status [url] + (try (str/trim (:out (p/shell {:out :string :err :string} + "curl" "-s" "-o" "/dev/null" "-w" "%{http_code}" + "--max-time" "5" url))) + (catch Exception _ "000"))) + +(defn wait-ready! [url proc timeout-secs label] + (let [deadline (+ (System/currentTimeMillis) (* 1000 timeout-secs))] + (loop [] + (cond + (not (.isAlive ^Process (:proc proc))) + (do (println (format "ERROR: %s exited before becoming reachable" label)) false) + (= "200" (http-status url)) + (do (println (format "✓ %s reachable at %s" label url)) true) + (> (System/currentTimeMillis) deadline) + (do (println (format "ERROR: %s not reachable within %ds" label timeout-secs)) false) + :else (do (Thread/sleep 2000) (recur)))))) + +;;; --------------------------------------------------------------------------- +;;; Merge +;;; --------------------------------------------------------------------------- + +(defn read-summary [edn-file] + (when (fs/exists? edn-file) + (try (:summary (edn/read-string (slurp edn-file))) (catch Exception _ nil)))) + +(defn read-elapsed [edn-file] + (when (fs/exists? edn-file) + (try (:elapsed-seconds (edn/read-string (slurp edn-file))) (catch Exception _ nil)))) + +(defn fmt-elapsed [secs] + (if secs + (let [s (long secs)] (format "%dm %02ds" (quot s 60) (rem s 60))) + "?")) + +(defn results-body + "The file-list section of a shard's org, re-indented +2 spaces so it nests under + a `- Results` bullet (file items → col 2, failure-detail lines → col 4)." + [org] + (when (fs/exists? org) + (let [content (slurp org) + marker "* Results\n" + idx (str/index-of content marker)] + (when idx + (->> (str/split-lines (subs content (+ idx (count marker)))) + (remove str/blank?) + (map #(str " " %)) + (str/join "\n")))))) + +(defn merge-summaries [summaries] + (reduce (fn [acc s] + (-> acc + (update :passed + (:passed s 0)) + (update :failed + (:failed s 0)) + (update :skipped + (:skipped s 0)) + (update :pending + (:pending s 0)) + (update :scenarios-passed + (:scenarios-passed s 0)) + (update :scenarios-failed + (:scenarios-failed s 0)) + (update :failed-files into (:failed-files s [])))) + {:passed 0 :failed 0 :skipped 0 :pending 0 :scenarios-passed 0 :scenarios-failed 0 :failed-files []} + summaries)) + +;;; --------------------------------------------------------------------------- +;;; Main +;;; --------------------------------------------------------------------------- + +(defn -main [args] + (let [headless? (flag-set? args "--headless") + ;; Visible browser is the DEFAULT now; --headless opts into the headless/CI path. + headed? (not headless?) + stop? (flag-set? args "--stop") + shards-given? (or (flag-set? args "--shards") + (boolean (some #(str/starts-with? (str %) "--shards=") args))) + ;; Each shard opens its own maximized Chrome, and each shard stops at its OWN first + ;; failure — so a visible or stop-on-failure run defaults to a single shard (one + ;; window, one global stop point) unless the user asked for a specific --shards. + shards (if (and (or headed? stop?) (not shards-given?)) + 1 + (Integer/parseInt (str (flag-val args "--shards" (str default-shards))))) + features-dir (flag-val args "--features-dir" "features") + feature (flag-val args "--feature" nil) + query-given? (or (flag-set? args "--query") + (boolean (some #(str/starts-with? (str %) "--query=") args))) + ;; A single --feature run defaults to "all scenarios in that file" (query nil) so + ;; the file runs regardless of its core/extended tags — override with --query. + query (let [q (flag-val args "--query" "(and \"core\" (not \"extended\"))")] + (if (and feature (not query-given?)) nil q)) + timeout (Integer/parseInt (str (flag-val args "--serve-timeout" (str default-serve-timeout)))) + db-prefix (flag-val args "--db-prefix" "cucumber-shard-db") + base-port (Integer/parseInt (str (flag-val args "--base-port" (str default-base-port)))) + skip-compile (flag-set? args "--skip-compile") + chrome (browser/find-browser) + discovered (feature-files features-dir) + all-files (if feature + (if-let [f (resolve-feature feature discovered features-dir)] + [f] + (do (println (format "ERROR: no feature file matching '%s' under %s" feature features-dir)) + (System/exit 1))) + discovered) + n (max 1 (min shards (count all-files))) + groups (shard-split all-files n) + ts (.format (java.time.LocalDateTime/now) + (java.time.format.DateTimeFormatter/ofPattern "yyyy-MM-dd_HH-mm-ss")) + run-dir (str "logs/cucumber/cucumber_test_results_" ts)] + (fs/create-dirs run-dir) + (println (format "▶ cucumber:ci — %d shard(s) | %d feature files | mode: %s | Chrome: %s" + n (count all-files) (if headed? "headed" "headless") chrome)) + (when feature + (println (format "▶ single feature: %s | query: %s" (first all-files) (or query "all scenarios")))) + (when stop? + (println "▶ --stop: halting at first failure")) + (when headed? + (println "▶ visible browser: 1 shard; on failure the browser + server stay open for inspection (Ctrl-C to close), on success everything tears down (use --headless for a headless, sharded run)")) + (println "▶ run outputs →" run-dir) + (when (empty? all-files) + (println "ERROR: no .feature files under" features-dir) (System/exit 1)) + (ensure-config!) ; provision config.edn before any server JVM boots + (if skip-compile + (println "• --skip-compile: reusing existing build") + (compile-once!)) + (ensure-manifest!) + + (let [servers (atom []) + ;; Compute the exit code inside the try so the finally can tear the servers down + ;; FIRST — System/exit skips finally blocks, so it must come after. + code + (try + ;; 1. start N isolated servers + (doseq [i (range n)] + (let [port (+ base-port i) + db (str (fs/absolutize (str db-prefix "-" i ".sqlite"))) + logf (io/file run-dir (format "cucumber_shard_%d_server.log" i))] + (fs/delete-if-exists db) + (spit logf "") + (let [proc (p/process {:out :append :out-file logf :err :append :err-file logf} + "clojure" (str "-J-Dbehave.store.path=" db) (str "-J-Dshard.port=" port) + "-M:dev:behave/app" "scripts/shard_server.clj")] + (swap! servers conj {:proc proc :port port :i i :log logf :db db})))) + ;; wait for all to be reachable + (let [ready? (every? (fn [{:keys [proc port i]}] + (wait-ready! (format "http://localhost:%d/worksheets" port) + proc timeout (format "shard-%d server" i))) + @servers)] + (when-not ready? + (println "ERROR: not all shard servers came up; see" (str run-dir "/cucumber_shard_*_server.log")) + (throw (ex-info "server startup failed" {})))) + + ;; 2. run N drivers in parallel, each on its shard's features + (let [driver-procs + (doall + (for [{:keys [port i]} @servers] + (let [subset (nth groups i) + org (str run-dir "/" (format "cucumber_shard_%d_results.org" i)) + edn (str run-dir "/" (format "cucumber_shard_%d_results.edn" i)) + cfg {:features-dir features-dir :steps-dir steps-dir + :url (format "http://localhost:%d/worksheets" port) + :headless headless? :stop stop? :query query + :org org :edn edn :retry-failed 0 + :browser-path chrome :feature-files subset + :keep-open headed?} + cfg-f (str (fs/create-temp-file {:prefix (format "shard-%d-cfg-" i) :suffix ".edn"})) + logf (io/file run-dir (format "cucumber_shard_%d_run.log" i))] + (spit cfg-f (pr-str cfg)) + (spit logf "") + (println (format "▶ shard-%d: %d feature(s) → %s (log: %s)" i (count subset) org logf)) + {:i i :edn edn :org org + :proc (p/process {:out :append :out-file logf :err :append :err-file logf} + "clojure" "-M:dev:behave/cms" "scripts/cucumber_run_driver.clj" cfg-f)})))] + ;; wait for all shards + (doseq [{:keys [proc]} driver-procs] @proc) + + ;; 3. merge + report + (let [summaries (mapv (comp read-summary :edn) driver-procs) + merged (merge-summaries (keep identity summaries)) + missing (keep-indexed (fn [idx s] (when (nil? s) idx)) summaries)] + (println "\n==== SHARDED RUN COMPLETE ====") + (doseq [{:keys [i edn org]} driver-procs] + (let [s (read-summary edn)] + (println (format " shard-%d: %s (org: %s)" i + (if s (format "%d passed, %d failed, %d skipped | scenarios %d/%d pass/fail" + (:passed s) (:failed s) (:skipped s) + (:scenarios-passed s) (:scenarios-failed s)) + "NO SUMMARY (crashed?)") + org)))) + (println (format " TOTAL: %d files passed, %d failed, %d skipped | Scenarios: %d passed, %d failed" + (:passed merged) (:failed merged) (:skipped merged) + (:scenarios-passed merged) (:scenarios-failed merged))) + (when (seq (:failed-files merged)) + (println " Failing files:") (doseq [f (:failed-files merged)] (println " -" f))) + ;; combined org (concatenate the per-shard bodies) + (let [combined (str run-dir "/cucumber_test_summary.org") + max-elapsed (apply max 0.0 (keep read-elapsed (map :edn driver-procs))) + total-files (+ (:passed merged) (:failed merged) (:skipped merged) (:pending merged))] + (spit combined + (str "#+TITLE: Cucumber Test Summary\n" + "# Sharded cucumber run — " n " shards\n\n" + "* Summary\n" + (format "- Feature files: %d passed, %d failed, %d skipped%s (%d total)\n" + (:passed merged) (:failed merged) (:skipped merged) + (if (pos? (:pending merged)) (format ", %d pending" (:pending merged)) "") + total-files) + (format "- Scenarios: %d passed, %d failed\n" + (:scenarios-passed merged) (:scenarios-failed merged)) + (format "- Max shard runtime: %s\n\n" (fmt-elapsed max-elapsed)) + (str/join "\n" + (for [{:keys [i org edn]} driver-procs] + (let [s (read-summary edn) + elapsed (read-elapsed edn) + summary (if s + (format " — %d passed, %d failed, %d skipped | scenarios %d/%d pass/fail | %s" + (:passed s) (:failed s) (:skipped s) + (:scenarios-passed s) (:scenarios-failed s) (fmt-elapsed elapsed)) + " — NO SUMMARY")] + (str "* shard-" i summary "\n" + "- Results\n" + (results-body org) "\n")))))) + (println " Combined org:" combined)) + ;; per-shard EDNs are intermediate — their summaries are now folded into the + ;; combined org above, so drop them once everything's been read. + (doseq [{:keys [edn]} driver-procs] + (try (fs/delete-if-exists edn) (catch Exception _ nil))) + ;; non-zero on any failure or missing summary — returned, exited after teardown + (if (and (empty? missing) + (zero? (:failed merged)) + (zero? (:scenarios-failed merged))) + 0 1))) + (catch Throwable t + (println "ERROR: sharded run failed —" (.getMessage t)) + 1) + (finally + (println "\nStopping shard servers…") + (doseq [{:keys [proc port db]} @servers] + (p/destroy-tree proc) + ;; destroy-tree kills the `clojure` wrapper, but it forks a java child that + ;; re-parents and outlives it — SIGKILL anything still holding this shard's + ;; unique -Dshard.port marker so no JVM leaks between runs. + (try (p/shell {:out :string :err :string :continue true} + "pkill" "-9" "-f" (str "Dshard.port=" port)) + (catch Exception _ nil)) + (try @proc (catch Exception _ nil)) + ;; remove this shard's sqlite store (+ WAL/SHM/journal sidecars) now the + ;; JVM holding it is dead — they're throwaway per-run scratch DBs. + (doseq [suffix ["" "-wal" "-shm" "-journal"]] + (try (fs/delete-if-exists (str db suffix)) (catch Exception _ nil))))))] + (System/exit code)))) + +(-main *command-line-args*) diff --git a/scripts/cucumber_run_driver.clj b/scripts/cucumber_run_driver.clj new file mode 100644 index 000000000..d7d44c7fa --- /dev/null +++ b/scripts/cucumber_run_driver.clj @@ -0,0 +1,163 @@ +(ns cucumber-run-driver + "JVM-side cucumber runner. Invoked by the babashka orchestrator + (scripts/run_cucumber_tests.clj) because babashka can't drive Selenium/tegere. + Reporting (org/EDN rendering + failure formatting) lives in cucumber.report. + + Usage: + clojure -M:dev:behave/cms scripts/cucumber_run_driver.clj + + The config EDN is: + {:features-dir :steps-dir :url :headless :stop :query :org :edn :retry-failed} + + Runs each feature file one at a time (reusing one browser), and REWRITES the + org file after every feature completes — so a partial, up-to-date report + survives an interruption/crash. Also dumps raw results EDN incrementally." + (:require [clojure.edn :as edn] + [clojure.java.io :as io] + [clojure.string :as str] + [cucumber.report :as report] + [cucumber.runner :as cr] + [cucumber.webdriver :as w] + [tegere.loader :as tl] + [tegere.runner :as tr] + [tegere.steps :as tsteps])) + +;;; --------------------------------------------------------------------------- +;;; Feature discovery +;;; --------------------------------------------------------------------------- + +(defn all-feature-files [features-dir] + (->> (file-seq (io/file features-dir)) + (filter #(.isFile %)) + (filter #(str/ends-with? (.getName %) ".feature")) + (map #(str/replace (.getPath %) (str features-dir "/") "")) + sort)) + +(defn feature-name->file [features-dir] + (into {} + (keep (fn [rel] + (let [content (slurp (io/file features-dir rel)) + m (re-find #"(?m)^\s*Feature:\s*(.+?)\s*$" content)] + (when m [(str/trim (second m)) rel]))) + (all-feature-files features-dir)))) + +;;; --------------------------------------------------------------------------- +;;; Run +;;; --------------------------------------------------------------------------- + +(defn- classify + "Classify a feature's already-reduced executables ({:feature :scenario :failure})." + [reduced-exs] + (let [fails (vec (keep :failure reduced-exs))] + (cond (empty? reduced-exs) {:state :skip :fails []} + (seq fails) {:state :fail :fails fails} + :else {:state :pass :fails []}))) + +(defn- run-feature + "Run a single tegere feature (reusing driver); return its executables (reduced + to {:feature :scenario :failure}). Never throws — an escaping error becomes a + synthetic failing scenario so the run continues." + [driver feat {:keys [url query stop]}] + (let [fname (:tegere.parser/name feat)] + (try + (let [results (tr/run [feat] @tsteps/registry + {:tegere.query/query-tree query :tegere.runner/stop stop} + :initial-ctx {:driver driver :url url})] + (mapv (fn [ex] {:feature fname :scenario (report/scenario-title ex) :failure (report/ex-failure ex)}) + (:tegere.runner/executables results))) + (catch Throwable t + [{:feature fname :scenario "(feature errored)" + :failure {:scenario "(feature errored)" :type :error :step "run" + :reason (str (.getMessage t))}}])))) + +(defn -main [config-path] + (let [{:keys [features-dir + steps-dir + url + headless + stop + query + org + edn + retry-failed + browser-path + keep-open + feature-files]} (edn/read-string (slurp config-path)) + query (if (string? query) (read-string query) query) + ;; When sharding, the orchestrator passes this shard's subset of features-dir-relative + ;; paths; run only those. Absent ⇒ run every file (the N=1 path, unchanged). + subset (when (seq feature-files) (set feature-files)) + all-files (cond->> (all-feature-files features-dir) + subset (filter subset)) + n->f (feature-name->file features-dir) + status (atom (into {} (map (fn [f] [f {:state :pending :fails []}]) all-files))) + executables (atom []) + t0 (System/nanoTime) + elapsed (fn [] (/ (- (System/nanoTime) t0) 1e9)) + write! (fn [& {:keys [summary?]}] + (report/write! {:url url :query query :headless headless :stop stop + :elapsed (elapsed) :all-files all-files + :status @status :executables @executables + :org org :edn edn} + :summary? summary?)) + record! (fn [file fname exs] + ;; replace any prior executables for this feature, then re-add + (swap! executables (fn [all] (into (vec (remove #(= fname (:feature %)) all)) exs))) + (swap! status assoc file (classify exs)) + (write!)) + ;; True once any feature has failed/errored — gates keep-open so a clean pass + ;; still tears down. + any-failures? (fn [] (some (fn [[_ v]] (= :fail (:state v))) @status))] + (println (format "Loading steps from %s" steps-dir)) + (cr/load-steps! (io/file steps-dir)) + (write!) ; initial all-pending org + (let [features (cond->> (tl/load-feature-files (io/file features-dir)) + ;; restrict to this shard's files (match each feature to its file via n->f) + subset (filter #(subset (get n->f (:tegere.parser/name %) (:tegere.parser/name %))))) + file->feat (into {} (for [ft features] + (let [nm (:tegere.parser/name ft)] + [(get n->f nm nm) ft]))) + driver (w/driver {:headless? headless :browser :chrome :browser-path browser-path})] + (println [:WEBDRIVER driver]) + (try + ;; main pass — one feature at a time, org rewritten after each + (loop [fs features] + (when-let [feat (first fs)] + (let [fname (:tegere.parser/name feat) + file (get n->f fname fname)] + (println (format ">>> %s" file)) + (let [exs (run-feature driver feat {:url url :query query :stop stop})] + (record! file fname exs) + (if (and stop (= :fail (:state (get @status file)))) + (println "Stopping on first failure (:stop true).") + (recur (rest fs))))))) + ;; optional retry of failed files (same reused browser) + (when (pos? retry-failed) + (loop [i 1] + (let [failed (->> @status (keep (fn [[f v]] (when (= :fail (:state v)) f))) vec)] + (when (and (<= i retry-failed) (seq failed)) + (println (format "↻ Retry %d/%d on %d file(s)" i retry-failed (count failed))) + (doseq [file failed] + (when-let [feat (file->feat file)] + (println (format ">>> (retry) %s" file)) + (record! file (:tegere.parser/name feat) + (run-feature driver feat {:url url :query query :stop false})))) + (recur (inc i)))))) + (finally + ;; Quit the browser unless we're deliberately holding a FAILED run open for + ;; inspection (keep-open + failures) — leaving the driver alive (below) keeps + ;; its Chrome up. A clean pass always tears down. + (when-not (and keep-open (any-failures?)) + (try (w/quit driver) (catch Throwable _ nil)))))) + ;; final write incl. summary (org first, then EDN with :summary last so it isn't clobbered) + (write! :summary? true) + (let [summary (report/counts all-files @status @executables)] + (println (format "\nDONE in %s — Files: %d passed, %d failed, %d skipped | Scenarios: %d passed, %d failed" + (report/fmt-duration (elapsed)) (:passed summary) (:failed summary) (:skipped summary) + (:scenarios-passed summary) (:scenarios-failed summary)))) + (when (and keep-open (any-failures?)) + (println "\n▶ failures detected — browser + server left open for inspection; Ctrl-C the cucumber:ci run to close and tear down.") + @(promise)) ; block forever: JVM stays alive → chromedriver → Chrome stays open + (shutdown-agents))) + +(apply -main *command-line-args*) diff --git a/scripts/mslink.sh b/scripts/mslink.sh index 2f1cf68f6..fea7d5e89 100755 --- a/scripts/mslink.sh +++ b/scripts/mslink.sh @@ -27,6 +27,7 @@ Options : -l Specifies the shortcut target -o Saves the shortcut to a file -n Specifies a description for the shortcut + -r Specifies the relative path to the target (portable fallback) -w Specifies the starting directory for the command -a Specifies the arguments for the launched command -i Specifies the icon path @@ -44,13 +45,14 @@ if [ $? -ne 0 ]; then fi # IS_PRINTER_LNK=0 -while getopts "hpl:o:n:w:a:i:" opt; do +while getopts "hpl:o:n:r:w:a:i:" opt; do case "${opt}" in h) usage ;; p) IS_PRINTER_LNK=1 ;; l) LNK_TARGET="$OPTARG" ;; o) OUTPUT_FILE="$OPTARG" ;; n) param_HasName="$OPTARG" ;; + r) param_HasRelativePath="$OPTARG" ;; w) param_HasWorkingDir="$OPTARG" ;; a) param_HasArguments="$OPTARG" ;; i) param_HasIconLocation="$OPTARG" ;; @@ -67,16 +69,16 @@ done ############################################################################################# function ascii2hex() { - echo $(echo -n ${1} | hexdump -v -e '/1 " x%02x"'|sed s/\ /\\\\/g) + echo $(echo -n "${1}" | hexdump -v -e '/1 " x%02x"'|sed s/\ /\\\\/g) } function gen_LinkFlags() { - echo '\x'$(printf '%02x' "$((HasLinkTargetIDList + HasName + HasWorkingDir + HasArguments + HasIconLocation))")${LinkFlags_2_3_4} + echo '\x'$(printf '%02x' "$((HasLinkTargetIDList + HasName + HasRelativePath + HasWorkingDir + HasArguments + HasIconLocation))")${LinkFlags_2_3_4} } function gen_Data_string() { ITEM_SIZE=$(printf '%04x' $((${#1}))) - echo '\x'${ITEM_SIZE:2:2}'\x'${ITEM_SIZE:0:2}$(ascii2hex ${1}) + echo '\x'${ITEM_SIZE:2:2}'\x'${ITEM_SIZE:0:2}$(ascii2hex "${1}") } function gen_IDLIST() { @@ -94,6 +96,7 @@ function convert_CLSID_to_DATA() { HasLinkTargetIDList=0x01 HasName=0x04 +HasRelativePath=0x08 HasWorkingDir=0x10 HasArguments=0x20 HasIconLocation=0x40 @@ -137,22 +140,27 @@ END_OF_STRING='\x00' ############################################################################################# if [ ! -z "${param_HasName}" ]; then - STRING_DATA=${STRING_DATA}$(gen_Data_string ${param_HasName}) + STRING_DATA=${STRING_DATA}$(gen_Data_string "${param_HasName}") else HasName=0x00 fi +if [ ! -z "${param_HasRelativePath}" ]; then + STRING_DATA=${STRING_DATA}$(gen_Data_string "${param_HasRelativePath}") +else + HasRelativePath=0x00 +fi if [ ! -z "${param_HasWorkingDir}" ]; then - STRING_DATA=${STRING_DATA}$(gen_Data_string ${param_HasWorkingDir}) + STRING_DATA=${STRING_DATA}$(gen_Data_string "${param_HasWorkingDir}") else HasWorkingDir=0x00 fi if [ ! -z "${param_HasArguments}" ]; then - STRING_DATA=${STRING_DATA}$(gen_Data_string ${param_HasArguments}) + STRING_DATA=${STRING_DATA}$(gen_Data_string "${param_HasArguments}") else HasArguments=0x00 fi if [ ! -z "${param_HasIconLocation}" ]; then - STRING_DATA=${STRING_DATA}$(gen_Data_string ${param_HasIconLocation}) + STRING_DATA=${STRING_DATA}$(gen_Data_string "${param_HasIconLocation}") else HasIconLocation=0x00 fi diff --git a/scripts/run_cucumber_tests.clj b/scripts/run_cucumber_tests.clj new file mode 100644 index 000000000..903b456e0 --- /dev/null +++ b/scripts/run_cucumber_tests.clj @@ -0,0 +1,149 @@ +#!/usr/bin/env bb +;; Run the full cucumber suite and generate a timestamped cucumber_test_results_.org. +;; +;; Babashka can't drive Selenium/tegere, so this is a thin orchestrator: +;; 1. preflight (app reachable? layout.msgpack fresh?) +;; 2. write a config EDN and shell out to the JVM driver +;; (scripts/cucumber_run_driver.clj), which runs tegere against a live Chrome +;; and REWRITES the org after every feature (incremental — survives a crash). +;; 3. read the driver's final summary and report. +;; +;; Usage: +;; bb scripts/run_cucumber_tests.clj [opts] (or: bb cucumber [opts]) +;; opts: --features-dir --steps-dir --url --query --headless --stop +;; --org --edn --retry-failed --help +(ns run-cucumber-tests + (:require [babashka.cli :as cli] + [babashka.fs :as fs] + [babashka.process :as p] + [clojure.edn :as edn] + [clojure.java.io :as io] + [clojure.string :as str])) + +;;; --------------------------------------------------------------------------- +;;; Options +;;; --------------------------------------------------------------------------- + +(def cli-spec + {:features-dir {:desc "Feature files dir" :default "features"} + :steps-dir {:desc "Step definitions dir" :default "steps"} + :url {:desc "App URL" :default "http://localhost:8081/worksheets"} + :query {:desc "tegere query-tree (EDN string)" :default "(and \"core\" (not \"extended\"))"} + :headless {:desc "Run Chrome headless" :coerce :boolean :default false} + :stop {:desc "Stop on first failure" :coerce :boolean :default false} + :org {:desc "Output org file (default: cucumber_test_results_.org)"} + :edn {:desc "Raw results EDN (default: cucumber_results_.edn)"} + :retry-failed {:desc "Re-run failed files N times" :coerce :long :default 0} + :browser-path {:desc "Chrome/Chromium binary for Selenium (default: auto-detect)"} + :help {:desc "Show help" :coerce :boolean}}) + +(def driver-script "scripts/cucumber_run_driver.clj") +(def run-log "cucumber_run.log") + +(defn run-stamp + "Current local date-time as a filename-safe 'yyyy-MM-dd_HH-mm-ss'." + [] + (.format (java.time.LocalDateTime/now) + (java.time.format.DateTimeFormatter/ofPattern "yyyy-MM-dd_HH-mm-ss"))) + +(defn fmt-duration [secs] + (let [s (long secs) m (quot s 60) r (rem s 60)] (format "%dm %02ds" m r))) + +;;; --------------------------------------------------------------------------- +;;; Preflight +;;; --------------------------------------------------------------------------- + +(defn http-status [url] + (try (str/trim (:out (p/shell {:out :string :err :string} + "curl" "-s" "-o" "/dev/null" "-w" "%{http_code}" + "--max-time" "10" url))) + (catch Exception _ "000"))) + +(defn preflight! [{:keys [url features-dir steps-dir]}] + (when-not (fs/exists? driver-script) + (println "ERROR: missing" driver-script) (System/exit 1)) + (doseq [d [features-dir steps-dir]] + (when-not (fs/exists? d) + (println "ERROR: dir not found:" d) (System/exit 1))) + (let [code (http-status url)] + (when-not (= "200" code) + (println (format "ERROR: app not reachable at %s (HTTP %s). Start it first." url code)) + (System/exit 1)) + (println (format "✓ App reachable at %s (HTTP %s)" url code))) + ;; warn if the served layout.msgpack differs from the source (stale served copy) + (let [src "projects/behave/resources/public/layout.msgpack"] + (when (fs/exists? src) + (try + (let [served (:out (p/shell {:out :bytes} "curl" "-s" "--max-time" "10" + (str (str/replace url #"/worksheets.*$" "") "/layout.msgpack"))) + smd5 (str/trim (:out (p/shell {:out :string :in served} "md5sum"))) + fmd5 (str/trim (:out (p/shell {:out :string} "md5sum" src)))] + (when (not= (first (str/split smd5 #"\s")) (first (str/split fmd5 #"\s"))) + (println "⚠ WARNING: served /layout.msgpack differs from" src + "\n The running app may be serving stale VMS data (restart/rebuild to refresh)."))) + (catch Exception _ nil))))) + +;;; --------------------------------------------------------------------------- +;;; Main +;;; --------------------------------------------------------------------------- + +(defn -main [args] + (let [opts (cli/parse-opts args {:spec cli-spec})] + (when (:help opts) + (println "Run the full cucumber suite and write a timestamped org log.\n") + (println (cli/format-opts {:spec cli-spec})) + (System/exit 0)) + (spit run-log "") ; fresh run log + (preflight! opts) + (let [ts (run-stamp) + org-file (or (:org opts) (str "cucumber_test_results_" ts ".org")) + edn-file (or (:edn opts) (str "cucumber_results_" ts ".edn")) + cfg {:features-dir (:features-dir opts) :steps-dir (:steps-dir opts) + :url (:url opts) :headless (boolean (:headless opts)) + :stop (boolean (:stop opts)) :query (:query opts) + :org org-file :edn edn-file :retry-failed (:retry-failed opts) + :browser-path (:browser-path opts)} + cfg-file (str (fs/create-temp-file {:prefix "cuke-cfg-" :suffix ".edn"})) + logf (io/file run-log)] + (spit cfg-file (pr-str cfg)) + ;; In CI, stream the driver output to the console so failure reasons are visible + ;; inline in the Actions log; locally keep it in run-log (tail -f friendly). + (if (some? (or (System/getenv "GITHUB_ACTIONS") (System/getenv "CI"))) + (do + (println (format "▶ Running cucumber → %s ── driver output (streamed) ──" org-file)) + (p/shell {:continue true} "clojure" "-M:dev:behave/cms" driver-script cfg-file)) + (do + (println (format "▶ Running cucumber → %s (incremental; live: tail -f %s)" org-file run-log)) + (p/shell {:out :append :out-file logf :err :append :err-file logf :continue true} + "clojure" "-M:dev:behave/cms" driver-script cfg-file))) + (println "\n==== DONE ====") + (let [{:keys [summary elapsed-seconds]} (when (fs/exists? edn-file) + (edn/read-string (slurp edn-file)))] + (cond + (not (fs/exists? edn-file)) (println "⚠ No results EDN produced — see" run-log) + (nil? summary) (println "⚠ Run ended without a final summary (interrupted?). Partial report kept.") + :else + (do + (when elapsed-seconds (println "Time:" (fmt-duration elapsed-seconds))) + (println (format "Files: %d passed, %d failed, %d skipped | Scenarios: %d passed, %d failed" + (:passed summary) (:failed summary) (:skipped summary) + (:scenarios-passed summary) (:scenarios-failed summary))) + (when (seq (:failed-files summary)) + (println "Failing files:") + (doseq [f (:failed-files summary)] (println " -" f))))) + (println "Org:" org-file "| raw:" edn-file "| run log:" run-log) + ;; Gate CI: non-zero when scenarios/files failed, or when no summary was + ;; produced (interrupted/crashed). A clean, all-pass run exits 0. + (System/exit (if (and summary + (zero? (:failed summary 0)) + (zero? (:scenarios-failed summary 0))) + 0 + 1)))))) + +(-main *command-line-args*) + +;; Usage +;; bb cucumber # full suite, visible Chrome → cucumber_test_results_.org +;; bb cucumber --headless true # headless +;; bb cucumber --retry-failed 2 # re-run failures up to 2× (in-driver) +;; bb cucumber --help # all options diff --git a/scripts/shard_server.clj b/scripts/shard_server.clj new file mode 100644 index 000000000..90a4c3977 --- /dev/null +++ b/scripts/shard_server.clj @@ -0,0 +1,25 @@ +;; One figwheel-free BehavePlus app server for a single cucumber shard. +;; +;; Serves the precompiled static assets (resources/public/cljs — build once with +;; `clojure -M:compile-cljs`) via the non-figwheel handler stack, with a per-shard DB and +;; port so N of these run in parallel, fully isolated. The DB path comes from +;; -Dbehave.store.path (honored again on every /api/init via behave.init/init!, which reloads +;; config.edn), the port from -Dshard.port. vms-sync! is intentionally skipped (the suite +;; serves the pre-exported layout.msgpack). +;; +;; Launched by scripts/cucumber_ci.clj: +;; clojure -J-Dbehave.store.path= -J-Dshard.port= -M:dev:behave/app scripts/shard_server.clj +(require '[behave.server :as server] + '[server.interface :as srv] + '[behave.handlers :refer [server-handler-stack]] + '[config.interface :refer [get-config]]) + +(server/init-config!) +(server/enrich-config!) +(let [port (Integer/parseInt (or (System/getProperty "shard.port") "8091")) + dbp (System/getProperty "behave.store.path")] + (server/init-db! (cond-> (get-config :database :config) + dbp (assoc-in [:store :path] dbp))) + (srv/start-server! {:handler (server-handler-stack {:figwheel? false}) :port port}) + (println (format "SHARD-SERVER-UP port=%d db=%s" port dbp)) + @(promise)) ; keep the JVM alive until the orchestrator kills it diff --git a/scripts/test-windows.sh b/scripts/test-windows.sh new file mode 100755 index 000000000..a075cf276 --- /dev/null +++ b/scripts/test-windows.sh @@ -0,0 +1,104 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + echo "Usage: $0 " + echo " Deploys the latest Windows ZIP and launches Behave7 on the logged-in desktop." + echo "" + echo "Example: $0 192.0.2.10 winuser" + exit 1 +} + +if [ $# -lt 2 ]; then + usage +fi + +HOST="$1" +USER="$2" +REMOTE="${USER}@${HOST}" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PROJECT_DIR="$(cd "${SCRIPT_DIR}/../projects/behave" && pwd)" +OUTPUT_DIR="${PROJECT_DIR}/output/windows" +REMOTE_DIR="C:/Users/${USER}/behave7-test" + +# Find the latest ZIP +ZIP_FILE=$(ls "${OUTPUT_DIR}"/behave7-*-windows-amd64.zip 2>/dev/null | sort -V | tail -1) +if [ -z "$ZIP_FILE" ]; then + echo "ERROR: No Windows ZIP found in ${OUTPUT_DIR}" + exit 1 +fi +ZIP_NAME=$(basename "$ZIP_FILE") + +echo "==> Using ZIP: ${ZIP_NAME}" +echo "==> Target: ${REMOTE}" +echo "==> Remote dir: ${REMOTE_DIR}" +echo "" + +# 1. Create remote test directory +echo "==> Creating remote directory..." +ssh "$REMOTE" "mkdir -p '${REMOTE_DIR}'" + +# 2. Copy the ZIP +echo "==> Copying ${ZIP_NAME} to remote..." +cat "$ZIP_FILE" | ssh "$REMOTE" "cat > '${REMOTE_DIR}/${ZIP_NAME}'" + +# 3. Extract and launch via shortcut +echo "==> Extracting ZIP and launching Behave7..." +ssh "$REMOTE" bash -s "$REMOTE_DIR" "$ZIP_NAME" <<'REMOTE_SCRIPT' +REMOTE_DIR="$1" +ZIP_NAME="$2" + +cd "$REMOTE_DIR" + +# Kill any running Behave7 before extracting +echo " -> Stopping any running Behave7 instances..." +powershell -Command "Get-Process -Name Behave7 -ErrorAction SilentlyContinue | Stop-Process -Force" 2>/dev/null +powershell -Command "Get-Process -Name jcef_helper -ErrorAction SilentlyContinue | Stop-Process -Force" 2>/dev/null +sleep 2 + +# Extract (overwrite existing) +echo " -> Extracting ${ZIP_NAME}..." +powershell -Command "Expand-Archive -Path '${REMOTE_DIR}/${ZIP_NAME}' -DestinationPath '${REMOTE_DIR}' -Force" + +# Verify launcher and app exe exist +if [ ! -f "${REMOTE_DIR}/Behave7.exe" ]; then + echo "ERROR: Behave7.exe launcher not found after extraction" + exit 1 +fi +if [ ! -f "${REMOTE_DIR}/bin/Behave7.exe" ]; then + echo "ERROR: bin/Behave7.exe not found after extraction" + exit 1 +fi +echo " -> Found launcher and app exe" + +# Launch via a scheduled task with the interactive flag so the window appears +# on the logged-in user's desktop. A plain Start-Process from SSH would run the +# app in Session 0 (hidden desktop) — process runs, but no visible window. +echo " -> Launching Behave7.exe into the interactive desktop session..." +WINDIR=$(cd "$REMOTE_DIR" && pwd -W | sed 's|/|\\|g') +powershell -Command "schtasks /create /tn Behave7Test /tr '${WINDIR}\\Behave7.exe' /sc once /st 00:00 /it /f | Out-Null; schtasks /run /tn Behave7Test | Out-Null" + +# Verify the app actually started, and in which session +echo " -> Verifying app process..." +sleep 5 +powershell -Command " + \$p = Get-Process -Name Behave7 -ErrorAction SilentlyContinue + if (-not \$p) { + Write-Output ' -> FAILED: Behave7 process is not running.' + exit 1 + } + \$console = (Get-Process -Name explorer -ErrorAction SilentlyContinue | Select-Object -First 1).SessionId + \$p | ForEach-Object { + if (\$_.SessionId -eq 0) { + Write-Output (' -> WARNING: Behave7 (PID ' + \$_.Id + ') is in Session 0 (hidden). Is a user logged in?') + } else { + Write-Output (' -> SUCCESS: Behave7 (PID ' + \$_.Id + ') running in interactive Session ' + \$_.SessionId + '.') + } + } +" +STATUS=$? + +# Clean up the scheduled task (does not stop the launched app) +powershell -Command "schtasks /delete /tn Behave7Test /f | Out-Null" 2>/dev/null +exit $STATUS +REMOTE_SCRIPT diff --git a/steps/Given.clj b/steps/Given.clj index bc7345e0e..6c4c37079 100644 --- a/steps/Given.clj +++ b/steps/Given.clj @@ -1,55 +1,15 @@ (ns Given - (:require - [cucumber.by :as by] - [cucumber.element :as e] - [cucumber.steps :refer [Given]] - [cucumber.webdriver :as w])) + (:require [cucumber.steps :refer [Given]] + [steps.worksheet :as ws])) -(def ^:private worksheet-modules - {[:surface] "Surface Only" - [:surface :contain] "Surface and Contain" - [:surface :crown] "Surface & Crown" - [:surface :mortality] "Surface and Mortality" - [:mortality] "Mortality Only"}) +(Given "I have started a new Surface Worksheet in Guided Mode" + (partial ws/start-worksheet [:surface])) -(defn- select-independent-worksheet - [modules {:keys [driver url]}] - (w/maximize driver) +(Given "I have started a new Surface & Mortality Worksheet in Guided Mode" + (partial ws/start-worksheet [:surface :mortality])) - (if (= "https://behave-dev.sig-gis.com" (w/execute-script! driver "window.location.href")) - (w/execute-script! driver "window.location.href = window.location.href") - (w/goto driver url)) +(Given "I have started a new Surface & Crown Worksheet in Guided Mode" + (partial ws/start-worksheet [:surface :crown])) - (let [wait (w/wait driver 5000)] - (.until wait (w/presence-of (by/css ".card__header")))) - - ;; Select Standard Workflow - (-> (e/find-el driver (by/attr= :text "Standard Workflow")) - (e/click!)) - - (-> (e/find-el driver (by/css ".button--highlight")) - (e/click!)) - - (Thread/sleep 1000) - ;; Select Surface Only worksheet - (-> (e/find-el driver (by/attr= :text (get worksheet-modules (or modules [:surface])))) - (e/click!)) - - (let [el (e/find-el driver (by/css ".button--highlight"))] - (w/execute-script! driver "arguments[0].scrollIntoView(true)" el)) - - (-> (e/find-el driver (by/css ".button--highlight")) - (e/click!)) - - (w/execute-script! driver "window.scrollTo(0,0)") - {:driver driver}) - -(Given "I have started a Surface Worksheet" (partial select-independent-worksheet [:surface])) - -(Given "I have started a Surface & Crown Worksheet" (partial select-independent-worksheet [:surface :crown])) - -(Given "I have started a Surface and Contain Worksheet" (partial select-independent-worksheet [:surface :contain])) - -(Given "I have started a Surface and Mortality Worksheet" (partial select-independent-worksheet [:surface :mortality])) - -(Given "I have started a Mortality Worksheet" (partial select-independent-worksheet [:mortality])) +(Given "I have started a new Surface & Contain Worksheet in Guided Mode" + (partial ws/start-worksheet [:surface :contain])) diff --git a/steps/Then.clj b/steps/Then.clj index 26d9fb515..6cfcce188 100644 --- a/steps/Then.clj +++ b/steps/Then.clj @@ -1,58 +1,14 @@ (ns Then - (:require - [clojure.string :as str] - [cucumber.element :as e] - [cucumber.by :as by] - [cucumber.webdriver :as w] - [cucumber.steps :refer [Then]])) + (:require [cucumber.steps :refer [Then]] + [steps.inputs :as inputs] + [steps.outputs :as outputs])) -(defn- extract-submodule-groups - [submodule-groups] - (-> submodule-groups - (str/replace "\"\"\"" "") - (str/split #"- ") - (->> (map str/trim) - (remove empty?) - (map #(str/split % #" > "))))) +(Then "the following input paths are displayed" + inputs/verify-input-groups-are-displayed) -(defn- select-submodule [driver submodule] - (-> (e/find-el driver (by/css ".wizard")) - (e/find-el (by/attr= :text submodule)) - (e/click!))) +(Then "the following input paths are NOT displayed" + inputs/verify-input-groups-not-displayed) -(defn- navigate-to-inputs [driver] - (-> (e/find-el driver (by/css ".wizard-header__io-tabs")) - (e/find-el (by/attr= :text "Inputs")) - (e/click!))) +(Then "the following outputs are displayed in the results page" + outputs/verify-outputs-in-results) -(defn- group-exits? [driver [submodule & groups]] - (select-submodule driver submodule) - (doall - (map #(let [wait (w/wait driver 300)] - (.until wait (w/presence-of-nested-elements - (by/css ".wizard-page__body") - (by/attr= :text %)))) - groups))) - -(Then "(?m)the following input Submodule > Groups are displayed: {submodule-groups}" - (fn [{:keys [driver]} submodule-groups] - (navigate-to-inputs driver) - (let [wait (w/wait driver 5000)] - (.until wait (w/presence-of (by/css ".wizard-page__body")))) - (let [submodule-groups (extract-submodule-groups submodule-groups)] - ;; incorrect-groups (filter (fn [[_submodule group]] (= "Slope" group)) submodule-groups)] - (doall (map (partial group-exits? driver) submodule-groups)) - (assert (pos? (count submodule-groups)))))) - -(comment - (count incorrect-groups) - (pr-str (map pr-str incorrect-groups))) - - -(comment - (do - (require '[cucumber.runner :as r] - '[cucumber.webdriver :as w]) - - (let [d r/driver-atom] - (e/find-el @d (by/attr= :text "Wind measured at: "))))) diff --git a/steps/When.clj b/steps/When.clj index cec07fc12..f55b41f21 100644 --- a/steps/When.clj +++ b/steps/When.clj @@ -1,63 +1,25 @@ (ns When - (:require - [cucumber.by :as by] - [cucumber.element :as e] - [cucumber.steps :refer [When]] - [clojure.string :as str] - [cucumber.runner :as r] - [cucumber.webdriver :as w])) + (:require [cucumber.steps :refer [When]] + [steps.inputs :as inputs] + [steps.outputs :as outputs])) -(defn- extract-submodule-groups - [submodule-groups] - (-> submodule-groups - (str/replace "\"\"\"" "") - (str/split #"- ") - (->> (map str/trim) - (remove empty?) - (map #(str/split % #" > "))))) +(When "these output paths are selected" + outputs/select-outputs) -(defn- select-submodule [driver submodule] - (-> (e/find-el driver (by/css ".wizard-header__submodules")) - (e/find-el (by/attr= :text submodule)) - (e/click!))) +(When "this output path is selected {submodule} : {group} : {value}" + outputs/select-output) -(defn- find-groups [driver groups] - (doseq [group groups] - (let [wait (w/wait driver 300)] - (.until wait (w/presence-of-nested-elements - (by/css ".wizard-group__header") - (by/attr= :text group)))))) +(When "these output paths are NOT selected" + outputs/verify-outputs-not-selected) -(defn- select-output [driver output] - (-> (e/find-el driver (by/css ".wizard-group__outputs")) - (e/find-el (by/attr= :text output)) - (e/click!))) +(When "these input paths are entered" + inputs/enter-inputs) -(defn- select-submodule-and-output [driver [submodule & groups]] - (select-submodule driver submodule) - (find-groups driver (butlast groups)) - (select-output driver (last groups))) +(When "these input paths are selected" + inputs/enter-inputs) -(defn- select-submodule-and-outputs - [{:keys [driver]} submodule-groups] - (let [wait (w/wait driver 5000)] - (.until wait (w/presence-of (by/css ".wizard")))) - (let [submodule-groups (extract-submodule-groups submodule-groups)] - (doseq [output submodule-groups] - (select-submodule-and-output driver output)) - {:driver driver})) +(When "this input path is entered {submodule} : {group} : {value}" + inputs/enter-input) -(When "I select these outputs Submodule > Group > Output: {outputs}" select-submodule-and-outputs) - -(comment - (do - (require '[cucumber.runner :as r] - '[cucumber.webdriver :as w]) - - (let [d r/driver-atom] - (select-submodule @d "Fire Behavior")) - - (let [d r/driver-atom] - (select-submodule-and-output - @d - ["Fire Behavior" "Direction Mode" "Heading"])))) +(When "this input path is entered {submodule} : {group} : {subgroup} : {value}" + inputs/enter-input) diff --git a/steps/steps/helpers.clj b/steps/steps/helpers.clj new file mode 100644 index 000000000..845a1b2c7 --- /dev/null +++ b/steps/steps/helpers.clj @@ -0,0 +1,684 @@ +(ns steps.helpers + (:require [clojure.string :as str] + [cucumber.by :as by] + [cucumber.element :as e] + [cucumber.webdriver :as w])) + +;;; ============================================================================= +;;; Parsing Utilities +;;; ============================================================================= + +(defn parse-step-data + "Converts a map `data` into a vector representing a path that follows the heirarchy order + submodule -> group -> subgroup -> value" + [data] + (map (fn [{:keys [submodule group subgroup value]}] + (cond-> [] + (seq submodule) (conj submodule) + (seq group) (conj group) + (seq subgroup) (conj subgroup) + (seq value) (conj value))) + data)) + +(defn numeric-or-multi-value? + "Check if a string looks like a numeric value or comma-separated values. + + Returns true if the string contains only digits, spaces, commas, decimal points, + and minus signs. This helps distinguish input values from field/option names. + + Args: + s - String to check + + Returns: + Boolean - true if it looks like a value to enter + + Examples: + (numeric-or-multi-value? \"1\") ; => true + (numeric-or-multi-value? \"3.14\") ; => true + (numeric-or-multi-value? \"1, 2, 3\") ; => true + (numeric-or-multi-value? \"10.5, 20\") ; => true + (numeric-or-multi-value? \"Individual Size Class\") ; => false" + [s] + (and (string? s) + (not (str/blank? s)) + (re-matches #"^[0-9.,\s-]+$" (str/trim s)))) + +;;; ============================================================================= +;;; Select Element by By +;;; ============================================================================= + +(defn selector->by + "Convert a selector map to a Selenium By object. + + This function provides the bridge between our map-based selector API + and Selenium's By objects for use in WebDriverWait conditions. + + Selector Types: + - :id - Find by element ID + - :css - Find by CSS selector + - :xpath - Find by XPath expression + - :tag - Find by tag name + - :class - Find by class name + - :text - Find by exact text content + - :name - Find by name attribute + + Args: + selector - Map with a single selector key/value pair + + Returns: + Selenium By object + + Throws: + ExceptionInfo if selector type is unknown + + Examples: + (selector->by {:id \"submit-button\"}) ; => By.id(\"submit-button\") + (selector->by {:css \".wizard-header\"}) ; => By.cssSelector(\".wizard-header\") + (selector->by {:text \"New Run\"}) ; => By with xpath for text + (selector->by {:tag :div}) ; => By.tagName(\"div\")" + [selector] + (cond + (:id selector) (by/id (:id selector)) + (:css selector) (by/css (:css selector)) + (:xpath selector) (by/xpath (:xpath selector)) + (:tag selector) (by/tag-name (name (:tag selector))) + (:class selector) (by/class-name (:class selector)) + (:text selector) (by/attr= :text (:text selector)) + (:name selector) (by/input-name (:name selector)) + :else (throw (ex-info "Unknown selector type" {:selector selector})))) + +;;; ============================================================================= +;;; Waiting Utilities +;;; ============================================================================= + +(defn wait-for-element-by-selector + "Wait for an element matching selector to be present in the DOM." + ([driver selector] (wait-for-element-by-selector driver selector 2000)) + ([driver selector timeout-ms] + (let [wait (w/wait driver timeout-ms)] + (.until wait (w/presence-of (selector->by selector)))))) + +(defn wait-for-wizard + "Wait for the wizard interface to be present." + ([driver] (wait-for-wizard driver 30000)) + ([driver timeout-ms] + (wait-for-element-by-selector driver {:css ".wizard"} timeout-ms))) + +(defn wait-for-working-area + "Wait for the working area to be present. Generous timeout — a busy app (large store, + slow /api/init) can take a while to render the initial page." + [driver] + (wait-for-element-by-selector driver {:css ".working-area"} 30000)) + +(defn wait-for-nested-element + "Wait for a nested element to appear within a parent element. + + Args: + driver - WebDriver instance + parent-selector - Selector map for parent element (e.g., {:css \".wizard\"}) + text - Text content to search for in child element + timeout-ms - Maximum wait time in milliseconds + + Examples: + (wait-for-nested-element driver {:css \".wizard-group__header\"} \"Fire Behavior\" 300)" + [driver parent-selector text timeout-ms] + (let [wait (w/wait driver timeout-ms)] + (.until wait (w/presence-of-nested-elements + (selector->by parent-selector) + (selector->by {:text text}))))) + +(def ^:private group-wait-ms + "Timeout (ms) for each group text node to render after the wizard re-navigates." + 5000) + +(defn wait-for-groups + "Wait for groups to appear as properly nested elements in hierarchical order. + + This function verifies that groups form a parent-child chain in the DOM. + For example, if groups = [\"Fire Behavior\" \"Direction Mode\" \"Heading\"], + it ensures: + 1. \"Fire Behavior\" exists under .wizard-page__body + 2. \"Direction Mode\" is nested within \"Fire Behavior\" + 3. \"Heading\" is nested within \"Direction Mode\" + + Args: + driver - WebDriver instance + groups - Collection of group names in hierarchical order (parent to child) + + Example: + (wait-for-groups driver [\"parent-a\" \"parent-b\" \"parent-c\" \"last-child\"])" + [driver groups] + (when (seq groups) + (wait-for-nested-element driver + {:css ".wizard-page__body"} + (first groups) + group-wait-ms) + (doseq [[parent child] (partition 2 1 groups)] + (let [wait (w/wait driver group-wait-ms)] + (.until wait (w/presence-of-nested-elements + (selector->by {:text parent}) + (selector->by {:text child}))))))) + +;;; ============================================================================= +;;; Element Finding +;;; ============================================================================= + +(defn find-element + "Find an element using various selector strategies. + + This function provides a unified interface for finding elements using + different selector types. It delegates to selector->by for converting + the selector map to a Selenium By object. + + Selector Types: + - :id - Find by element ID + - :css - Find by CSS selector + - :xpath - Find by XPath expression + - :tag - Find by tag name + - :class - Find by class name + - :text - Find by exact text content + - :name - Find by name attribute + + Args: + driver - WebDriver instance + selector - Map with a single selector key/value pair + + Returns: + WebElement if found + + Throws: + NoSuchElementException if element not found + ExceptionInfo if selector type is unknown + + Examples: + (find-element driver {:id \"submit-button\"}) + (find-element driver {:css \".wizard-header\"}) + (find-element driver {:xpath \"//button[text()='Next']\"}) + (find-element driver {:tag :div}) + (find-element driver {:class \"button--highlight\"}) + (find-element driver {:text \"New Run\"}) + (find-element driver {:name \"username\"}) + + See also: + selector->by - For converting selectors to Selenium By objects" + [driver selector] + ;; (wait-for-element-by-selector driver selector) + (e/find-el driver (selector->by selector))) + +(defn find-input-by-label + "Find an input element (text field, radio, or dropdown) by its label text. + + This function searches for a label with the given text and returns the + associated input element. Works with text inputs, radio buttons, and dropdowns. + + Args: + driver - WebDriver instance + label-text - The label text to search for + + Returns: + WebElement of the input field + + Throws: + NoSuchElementException if label or input not found + + Examples: + (find-input-by-label driver \"1-h Fuel Moisture\") + (find-input-by-label driver \"Air Temperature\")" + [driver label-text] + ;; Wait, don't immediately find: conditionally-visible inputs render a beat after the + ;; output that reveals them, and a slow (CI) runner isn't there yet on an immediate find. + (wait-for-element-by-selector driver {:text label-text} 15000)) + +;;; ============================================================================= +;;; Submodule Selection +;;; ============================================================================= + +(defn select-submodule-tab + "Select a submodule in the wizard header. No-ops if the tab is already active + (has class 'tab--selected'), avoiding an unnecessary re-render. + + Used primarily in the Outputs tab for selecting submodules." + [driver submodule] + (wait-for-nested-element driver {:css ".wizard-header__submodules"} submodule 10000) + ;; Check if this submodule's tab is already selected by looking for an element + ;; that has both 'tab--selected' and the target text as a descendant. + ;; 'tab--selected' is specific enough that contains() is safe here. + (let [already-selected? (try + (find-element driver {:xpath (str "//div[contains(@class,'wizard-header__submodules')]" + "//div[contains(@class,'tab--selected')" + " and .//*[text()=\"" submodule "\"]]")}) + true + (catch Exception _ false))] + (when-not already-selected? + (-> (find-element driver {:css ".wizard-header__submodules"}) + (find-element {:text submodule}) + (e/click!)) + (wait-for-wizard driver)))) + +;;; ============================================================================= +;;; Output Selection +;;; ============================================================================= + +(defn select-output + "Select an output in the wizard outputs section. + + Args: + driver - WebDriver instance + output - Name of the output to select" + [driver output] + (-> (find-element driver {:css ".wizard-group__outputs"}) + (find-element {:text output}) + (e/click!))) + +;;; ============================================================================= +;;; Button Operations +;;; ============================================================================= + +(defn click-el! + "Find `selector` and click it, re-finding + retrying on a stale-element reference + (the DOM can re-render between locating and clicking). `e/click!` itself already + scrolls the element into view and falls back to a JS click on interception." + [driver selector] + (loop [attempts 3] + (let [outcome (try (e/click! (find-element driver selector)) :ok + (catch org.openqa.selenium.StaleElementReferenceException e + (if (pos? attempts) :retry (throw e))))] + (when (= outcome :retry) + (Thread/sleep 200) + (recur (dec attempts)))))) + +(defn click-highlighted-button + "Click the highlighted button in the current view. + + This is typically the primary action button (e.g., Next, Finish)." + [driver] + (click-el! driver {:css ".button--highlight"})) + +(defn click-button-with-text + "Click a button with specific text content. + + Args: + driver - WebDriver instance + text - Text content of the button to click" + [driver text] + (click-el! driver {:text text})) + +(defn wait-and-click-button-with-text + "Wait for a button with the given text to appear, then click it. + + Args: + driver - WebDriver instance + text - Text content of the button to click + timeout-ms - Max wait in milliseconds (default 15000; waits return as soon as the + element appears, so a generous cap only matters when the app is slow)" + ([driver text] (wait-and-click-button-with-text driver text 15000)) + ([driver text timeout-ms] + (wait-for-element-by-selector driver {:text text} timeout-ms) + (click-button-with-text driver text))) + +;;; ============================================================================= +;;; Input Operations +;;; ============================================================================= + +(defn enter-text-value + "Enter a value into a text input field. + + Finds the input by locating the wizard-group whose header exactly matches + `label-text`, then targeting the first within its sibling + wizard-group__inputs container. Using the group-header as the anchor (exact + match via normalize-space) prevents false positives when the field name is a + substring of an earlier element in the page (e.g. \"Slope\" vs. + \"Wind and Slope\" submodule tab). + + Args: + driver - WebDriver instance + label-text - The wizard-group header text (exact match) + value - The value to enter (string, can be comma-separated) + + Examples: + (enter-text-value driver \"1-h Fuel Moisture\" \"1\") + (enter-text-value driver \"Wind Speed\" \"5, 10, 15\") + (enter-text-value driver \"Slope\" \"30\")" + [driver label-text value] + (let [xpath (str "//div[contains(@class, 'wizard-group__header')]" + "[normalize-space(.) = \"" label-text "\"]" + "/following-sibling::div[contains(@class, 'wizard-group__inputs')]" + "//input[1]") + ;; Wait for the group to render (it's revealed by the preceding output selection); + ;; an immediate find is the CI-only "no such element" failure on a slow runner. + input-element (wait-for-element-by-selector driver {:xpath xpath} 15000) + set-and-fire (str "var el = arguments[0];" + "var nativeSetter = Object.getOwnPropertyDescriptor(" + "window.HTMLInputElement.prototype,'value').set;" + "nativeSetter.call(el," (pr-str value) ");" + "el.dispatchEvent(new Event('input',{bubbles:true,cancelable:true}));" + "el.dispatchEvent(new FocusEvent('blur',{bubbles:false,cancelable:false}));")] + (w/execute-script! driver set-and-fire input-element))) + +(defn click-radio-or-dropdown-option + "Click a radio button or dropdown option by text. + + This function assumes options are already visible. For multi-select components, + use click-select-more-button first to expand options before calling this. + + Args: + driver - WebDriver instance + option-text - The text of the option to select + + Examples: + (click-radio-or-dropdown-option driver \"Individual Size Class\") + (click-radio-or-dropdown-option driver \"GR4\")" + [driver option-text] + (try + ;; Wait for the option to render (conditionally-visible groups appear a beat after the + ;; output that reveals them) rather than an immediate find, which fails on a slow runner. + (-> (wait-for-element-by-selector driver {:text option-text} 15000) + (e/click!)) + (catch Exception e + (throw (ex-info (str "Could not find or select option: " option-text) + {:option option-text :error e}))))) + +(defn multi-select-exists? + "Check if a multi-select component exists in the current wizard group. + + Looks for the presence of a .multi-select element within .wizard-group__inputs. + + Args: + driver - WebDriver instance + + Returns: + Boolean - true if multi-select component is found, false otherwise + + Example: + (multi-select-exists? driver) ; => true or false" + [driver] + (try + (find-element driver {:css ".wizard-group__inputs .multi-select"}) + true + (catch Exception _ + false))) + +(defn click-select-more-button + "Click the 'Select More' button in a multi-select component to expand options. + + Finds the expand button in the multi-select header and clicks it, then waits + for the expansion animation to complete. + + Args: + driver - WebDriver instance + + Example: + (click-select-more-button driver)" + [driver] + (try + (-> (find-element driver {:css ".multi-select__selections__header__button button"}) + (e/click!)) + ;; No fixed sleep for the expansion: the caller always follows this with + ;; click-radio-or-dropdown-option, which waits (up to 15s) for the specific option to + ;; render — that wait covers the expansion + option load, returning as soon as it's ready. + (catch Exception e + (throw (ex-info "Could not find or click 'Select More' button" + {:error e}))))) + +;;; ============================================================================= +;;; Checkbox Utilities +;;; ============================================================================= + +(defn output-checked? + "Check if an output checkbox is checked by looking for 'input-checkbox--checked' class on parent elements. + + This function takes an element and walks up the DOM tree checking parent divs + for the 'input-checkbox--checked' class. It stops when it finds the class, + reaches a .wizard-output parent, or runs out of parents. + + Args: + element - WebElement to start checking from + + Returns: + Boolean - true if checked (class found), false otherwise + + Example: + (let [output-elem (h/find-element driver {:text \"Rate of Spread\"})] + (h/output-checked? output-elem)) + ; => true if the Rate of Spread output is checked" + [element] + (try + (loop [current-element element + iterations 0] + (if (and current-element (< iterations 20)) ; Safety limit + (let [class-attr (.getAttribute current-element "class") + classes (when class-attr (str/split class-attr #"\s+"))] + (cond + ;; Found the checked class + (some #(= "input-checkbox--checked" %) classes) + true + + ;; Reached the wizard-output boundary + (some #(= "wizard-output" %) classes) + false + + ;; Keep walking up + :else + (let [parent (try + (e/find-el current-element (by/xpath "..")) + (catch Exception _ nil))] + (recur parent (inc iterations))))) + false)) + (catch Exception _ + false))) + +;;; ============================================================================= +;;; Scrolling +;;; ============================================================================= + +(defn scroll-to-element + "Scroll the page so that the given element is visible. + + Args: + driver - WebDriver instance + element - WebElement to scroll to" + [driver element] + (w/execute-script! driver "arguments[0].scrollIntoView(true)" element)) + +(defn scroll-to-top + "Scroll the page to the top." + [driver] + (w/execute-script! driver "window.scrollTo(0,0)")) + +;;; ============================================================================= +;;; Navigation +;;; ============================================================================= + +(defn navigate-to-tab + "Navigate to a specific tab in the wizard interface. + + Args: + driver - WebDriver instance + tab-name - Name of the tab (e.g., \"Inputs\", \"Outputs\")" + [driver tab-name] + (-> (find-element driver {:css ".wizard-header__io-tabs"}) + (e/find-el (by/attr= :text tab-name)) + (e/click!)) + (wait-for-wizard driver)) + +(defn navigate-to-inputs + "Navigate to the Inputs tab in the wizard." + [driver] + (navigate-to-tab driver "Inputs")) + +(defn navigate-to-outputs + "Navigate to the Outputs tab in the wizard." + [driver] + (navigate-to-tab driver "Outputs")) + +;;; ============================================================================= +;;; Results Page Navigation +;;; ============================================================================= + +(defn review-page? + "Return true if the browser is currently on the Review page. + + Detects by the presence of .wizard-review — the unique container that only + exists on the Review page. (The Review page hand-rolls its nav bar without + .wizard-navigation__next, so that selector cannot be used here.) + + Args: + driver - WebDriver instance" + [driver] + (try + (find-element driver {:css ".wizard-review"}) + true + (catch Exception _ + false))) + +(defn results-settings-page? + "Return true if the browser is currently on the Results Settings page. + + Detects by looking for the .wizard-results__table-settings element. + + Args: + driver - WebDriver instance" + [driver] + (try + (find-element driver {:css ".wizard-results__table-settings"}) + true + (catch Exception _ + false))) + +(defn advance-to-review + "Click 'Next' through wizard pages until the Review page is reached. + + On the Review page the wizard shows a 'Run' highlight button inside + .wizard-review. This function clicks the Next button repeatedly (up to + max-attempts times) until the Review page is detected. + + Args: + driver - WebDriver instance + max-attempts - Maximum number of Next clicks before giving up (default 10)" + ([driver] (advance-to-review driver 10)) + ([driver max-attempts] + (loop [attempts 0] + (cond + (review-page? driver) + :on-review-page + + (>= attempts max-attempts) + (throw (ex-info "Could not reach the Review page after clicking Next repeatedly" + {:attempts attempts})) + + :else + (do + (wait-for-element-by-selector driver {:css ".wizard-navigation__next .button--highlight"} 10000) + (let [next-btn (find-element driver {:css ".wizard-navigation__next .button--highlight"})] + (e/click! next-btn) + ;; Wait for the page to advance — the clicked Next goes stale when the wizard + ;; re-renders the next page — instead of a fixed 500ms sleep. Returns as soon as + ;; the render happens; a timeout just falls through to the next review-page? check. + (try (.until (w/wait driver 10000) (w/staleness-of next-btn)) + (catch org.openqa.selenium.TimeoutException _ nil))) + (recur (inc attempts))))))) + +(defn wait-for-results + "Wait for the Results page output table to appear in the DOM. + + The output table div.wizard-results__table#outputs is only rendered after a + successful solve. Uses a generous timeout since computation can be slow. + + Args: + driver - WebDriver instance + timeout-ms - Max wait time in ms (default 60000)" + ([driver] (wait-for-results driver 60000)) + ([driver timeout-ms] + (wait-for-element-by-selector driver {:css ".wizard-results__table"} timeout-ms))) + +(defn run-worksheet + "Click the 'Run' button on the Review page and wait for the solve to finish. + + After clicking Run, the app shows 'Computing...' while solving, then + navigates to the Results Settings page. This function waits for the + Results Settings page to appear (or times out). + + Args: + driver - WebDriver instance" + [driver] + (wait-for-element-by-selector driver {:css ".wizard-review"} 10000) + (let [run-btn (find-element driver {:css ".wizard-navigation .button--highlight"})] + (scroll-to-element driver run-btn) + (e/click! run-btn)) + ;; Wait for computing to finish — results-settings page has .wizard-results__table-settings + (wait-for-element-by-selector driver {:css ".wizard-results__table-settings"} 120000)) + +(defn navigate-to-results + "Navigate from anywhere in the wizard to the Results page. + + Steps: + 1. Click Next through wizard pages until the Review page. + 2. Click Run and wait for the solve to complete (lands on Results Settings). + 3. Click Next on Results Settings to reach the Results page. + 4. Wait for the output table to render. + + Args: + driver - WebDriver instance" + [driver] + (advance-to-review driver) + (run-worksheet driver) + ;; On results-settings, click Next to go to results + (wait-for-element-by-selector driver {:css ".wizard-navigation__next .button--highlight"} 10000) + (-> (find-element driver {:css ".wizard-navigation__next .button--highlight"}) + (e/click!)) + (wait-for-results driver)) + +(defn output-in-results? + "Check if the given output name text appears in the Results page output table. + + Searches for the text within div.wizard-results__table (#outputs). + + Args: + driver - WebDriver instance + output-name - The output name string to look for (e.g. 'Flame Length') + + Returns: + true if the text is found, false otherwise" + [driver output-name] + (try + (let [results-table (find-element driver {:css ".wizard-results__table"}) + xpath (str ".//*[contains(text(), '" output-name "')]")] + (e/find-el results-table (by/xpath xpath)) + true) + (catch Exception _ + false))) + +(defn navigate-to-group + "Navigate through submodule and groups in Outputs wizard, returning driver and last group element. + + This helper navigates to a specific group by: + 1. Selecting the submodule in the wizard header + 2. Waiting for all groups in the hierarchy to appear + 3. Finding and returning the last group element + + Args: + driver - WebDriver instance + submodule+groups - Collection where: + - First element is the submodule name + - Remaining elements are group names in hierarchical order + Example: [\"Fire Behavior\" \"Direction Mode\"] + + Returns: + Map with: + :group-element - The DOM element of the last group + + Example: + (navigate-to-group driver [\"Fire Behavior\" \"Direction Mode\"]) + ; => {:driver driver, :group-element } + + ;; Use in a step definition: + (let [{:keys [driver group-element]} (navigate-to-group driver [\"Fire Behavior\" \"Direction Mode\"])] + (e/find-el group-element (by/css \".some-class\")))" + [driver submodule+groups] + (let [[submodule & groups] submodule+groups] + (select-submodule-tab driver submodule) + (if (seq groups) + (do (wait-for-groups driver groups) + (find-element driver {:text (last groups)})) + (find-element driver {:text submodule})))) + diff --git a/steps/steps/inputs.clj b/steps/steps/inputs.clj new file mode 100644 index 000000000..efee82491 --- /dev/null +++ b/steps/steps/inputs.clj @@ -0,0 +1,145 @@ +(ns steps.inputs + "Input verification logic for BehavePlus Cucumber tests. + + This namespace handles verifying that expected input groups are displayed + in the Inputs tab of the worksheet wizard." + (:require [clojure.string :as str] + [cucumber.webdriver :as w] + [steps.helpers :as h])) + +;;; ============================================================================= +;;; Private Helper Functions +;;; ============================================================================= + +(defn- verify-groups-exist + [driver path] + (h/navigate-to-group driver path)) + +(defn- verify-groups-not-exist + [driver path] + (try + (h/navigate-to-group driver path) + ;; If we found the element, that's an error - it should NOT exist + (throw (ex-info (str "Group should NOT be displayed but was found: " path) + {:path path})) + (catch org.openqa.selenium.NoSuchElementException _ + ;; This is good - the element doesn't exist as expected + nil))) + +(defn- enter-single-input + [driver path] + ;; (h/wait-for-groups driver (butlast path)) + (let [last-element (last path) + is-value? (h/numeric-or-multi-value? last-element)] + (if is-value? + ;; Case 1: Value input - navigate to field and enter value + (let [field-name (nth path (- (count path) 2)) + value last-element + navigation-path (vec (drop-last 2 path))] + (h/navigate-to-group driver navigation-path) + (h/enter-text-value driver field-name value)) + ;; Case 2: Option selection - navigate to group and click option + ;; Check DOM to determine if multi-select expansion is needed + (let [option-name last-element + navigation-path (vec (drop-last path))] + (h/navigate-to-group driver navigation-path) + (if (h/multi-select-exists? driver) + ;; Multi-select: expand options first, then click + (do + (h/click-select-more-button driver) + (h/click-radio-or-dropdown-option driver option-name)) + ;; Radio/dropdown: click directly + (h/click-radio-or-dropdown-option driver option-name)))))) + +;;; ============================================================================= +;;; Public API +;;; ============================================================================= + +(defn enter-input + "Expects the bindings {submodule} : {group} : {subgroup} : {value} + subgroup is optional + + The driver will follow the path to enter inputs: + submodule -> group -> subgroup -> value" + [{:keys [driver]} & path] + (h/wait-for-wizard driver) + (h/navigate-to-inputs driver) + (let [last-element (last path) + is-value? (h/numeric-or-multi-value? last-element)] + (if is-value? + ;; Case 1: Value input - navigate to field and enter value + (let [field-name (nth path (- (count path) 2)) + value last-element + navigation-path (vec (drop-last 2 path))] + (h/navigate-to-group driver navigation-path) + (h/enter-text-value driver field-name value)) + ;; Case 2: Option selection - navigate to group and click option + ;; Check DOM to determine if multi-select expansion is needed + (let [option-name last-element + navigation-path (vec (drop-last path))] + (h/navigate-to-group driver navigation-path) + (if (h/multi-select-exists? driver) + ;; Multi-select: expand options first, then click + (do + (h/click-select-more-button driver) + (h/click-radio-or-dropdown-option driver option-name)) + ;; Radio/dropdown: click directly + (h/click-radio-or-dropdown-option driver option-name))))) + {:driver driver}) + +(defn enter-inputs + "Expects a data table (as described in the gherkin syntax) to be provided and verifies if + Data table expects the headers: + - submodule + - group + - subgroup (optional) + - value + For each row in the data table the driver will follow the path to enter inputs: + submodule -> group -> subgroup -> value" + [{:keys [driver] :as context}] + (h/wait-for-wizard driver) + (h/navigate-to-inputs driver) + (let [step-data (get-in context [:tegere.parser/step :tegere.parser/step-data]) + paths (h/parse-step-data step-data)] + (doseq [path paths] + (enter-single-input driver path)) + {:driver driver})) + +(defn verify-input-groups-are-displayed + "Expects a data table (as described in the gherkin syntax) to be provided and verifies if + Data table expects the headers: + - submodule + - group + - subgroup (optional) + - value + For each row in the data table the driver will follow the path to verify it is displayed: + submodule -> group -> subgroup -> value" + [{:keys [driver] :as context}] + (h/wait-for-wizard driver) + (h/navigate-to-inputs driver) + (let [step-data (get-in context [:tegere.parser/step :tegere.parser/step-data]) + paths (h/parse-step-data step-data)] + (doseq [path paths] + (verify-groups-exist driver path)) + (assert (pos? (count paths))) + {:driver driver})) + +(defn verify-input-groups-not-displayed + "Expects a data table (as described in the gherkin syntax) to be provided and verifies if + Data table expects the headers: + - submodule + - group + - subgroup (optional) + - value + For each row in the data table the driver will follow the path to verify it is NOT displayed: + submodule -> group -> subgroup -> value" + [{:keys [driver] :as context}] + (h/navigate-to-inputs driver) + (h/wait-for-wizard driver) + + (let [step-data (get-in context [:tegere.parser/step :tegere.parser/step-data]) + paths (h/parse-step-data step-data)] + (doseq [path paths] + (verify-groups-not-exist driver path)) + (assert (pos? (count paths))) + {:driver driver})) diff --git a/steps/steps/outputs.clj b/steps/steps/outputs.clj new file mode 100644 index 000000000..b3b5d030f --- /dev/null +++ b/steps/steps/outputs.clj @@ -0,0 +1,97 @@ +(ns steps.outputs + (:require [steps.helpers :as h])) + +;;; ============================================================================= +;;; Private Helper Functions +;;; ============================================================================= + +(defn- select-single-output + [driver [submodule & groups]] + (h/select-submodule-tab driver submodule) + (h/wait-for-groups driver (butlast groups)) + (h/wait-for-element-by-selector driver {:text (last groups)} 10000) + (h/select-output driver (last groups))) + +;;; ============================================================================= +;;; Public API +;;; ============================================================================= + +(defn select-output + "Expects the bindings {submodule} : {group} : {subgroup} : {value} + subgroup is optional + + The driver will follow the path to select output: + submodule -> group -> subgroup -> value" + [{:keys [driver]} & path] + (h/wait-for-wizard driver) + (let [[submodule & groups] path] + (h/select-submodule-tab driver submodule) + (h/wait-for-groups driver (butlast groups)) + (h/wait-for-element-by-selector driver {:text (last groups)} 10000) + (h/select-output driver (last groups))) + {:driver driver}) + +(defn select-outputs + "Expects a data table (as described in the gherkin syntax) to be provided and verifies if + Data table expects the headers: + - submodule + - group + - subgroup (optional) + - value + For each row in the data table the driver will follow the path to select output: + submodule -> group -> subgroup -> value" + [{:keys [driver] :as context}] + (h/wait-for-wizard driver) + (let [step-data (get-in context [:tegere.parser/step :tegere.parser/step-data]) + paths (h/parse-step-data step-data)] + (doseq [path paths] + (select-single-output driver path)) + {:driver driver})) + +(defn verify-outputs-in-results + "Navigates to the Results page and verifies each named output appears in the + results output table. + + Expects a single-column data table whose header is `output` and whose rows + are the fully-qualified result names as they render in the table, e.g. + + | output | + | Heading Rate of Spread | + | Flanking Rate of Spread | + + Throws ex-info naming the first missing output." + [{:keys [driver] :as context}] + (h/wait-for-wizard driver) + (h/navigate-to-results driver) + (let [step-data (get-in context [:tegere.parser/step :tegere.parser/step-data]) + output-names (map (comp first vals) step-data)] + (doseq [output-name output-names] + (when-not (h/output-in-results? driver output-name) + (throw (ex-info (str "Expected output was NOT displayed in results: " output-name) + {:output-name output-name})))) + {:driver driver})) + +(defn verify-outputs-not-selected + "Expects a data table (as described in the gherkin syntax) to be provided and verifies if + Data table expects the headers: + - submodule + - group + - subgroup (optional) + - value + For each row in the data table the driver will follow the path to verify it is NOT + displayed: submodule -> group -> subgroup -> value" + [{:keys [driver] :as context}] + (h/wait-for-wizard driver) + (let [step-data (get-in context [:tegere.parser/step :tegere.parser/step-data]) + paths (h/parse-step-data step-data)] + (doseq [path paths] + (let [[submodule & groups] path + output-name (last path) + last-group (h/navigate-to-group driver path) + is-checked? (h/output-checked? last-group)] + (when is-checked? + (throw (ex-info (str "Output should NOT be selected but was: " output-name) + {:output output-name + :submodule submodule + :groups groups}))))) + {:driver driver})) diff --git a/steps/steps/worksheet.clj b/steps/steps/worksheet.clj new file mode 100644 index 000000000..2a2a1c4b0 --- /dev/null +++ b/steps/steps/worksheet.clj @@ -0,0 +1,107 @@ +(ns steps.worksheet + "Worksheet creation logic for BehavePlus Cucumber tests. + + This namespace handles the creation of new worksheets in guided mode, + including navigating through the workflow wizard and selecting module types." + (:require [cucumber.webdriver :as w] + [steps.helpers :as h])) + +;;; ============================================================================= +;;; Worksheet Module Mappings +;;; ============================================================================= + +(def ^:private worksheet-modules + "Maps module keyword vectors to their display names in the UI. + + Available worksheet types: + - [:surface] - Surface fire modeling only + - [:surface :contain] - Surface fire with containment + - [:surface :crown] - Surface and crown fire modeling + - [:surface :mortality] - Surface fire with tree mortality + - [:mortality] - Tree mortality only" + {[:surface] "Surface Only" + [:surface :contain] "Surface & Contain" + [:surface :crown] "Surface & Crown" + [:surface :mortality] "Surface & Mortality" + [:mortality] "Mortality Only"}) + +;;; ============================================================================= +;;; Worksheet Creation +;;; ============================================================================= + +(defn start-worksheet + "Create a new worksheet in guided mode. + + This function automates the entire worksheet creation workflow: + 1. Maximizes the browser window + 2. Navigates to the application URL + 3. Waits for the working area to load + 4. Dismisses any disclaimer popup + 5. Clicks through the 'New Run' wizard + 6. Selects 'Guided Workflow' mode + 7. Selects the specified module type(s) + 8. Completes the wizard + + Args: + modules - Vector of module keywords (e.g., [:surface :crown]) + context - Map containing: + :driver - WebDriver instance + :url - Application URL + + Returns: + Map with :driver key containing the WebDriver instance + + Example: + (start-worksheet [:surface :crown] {:driver driver :url \"http://localhost:8081/worksheets\"})" + [modules {:keys [driver url]}] + ;; Deterministic viewport: headless `maximize` can leave a short viewport where the + ;; fixed page__footer overlaps wizard buttons (intercepting clicks). Set an explicit + ;; size instead. + (w/set-window-size driver 1920 1080) + + ;; Disable the Disclaimer modal BEFORE the app initializes. The app reads + ;; "behave-settings" (defined in behave/events.cljs; value is EDN) at :initialize, so the + ;; value must be in localStorage before its scripts run. A CDP init-script seeds it on the + ;; app origin at document-start, so a single load is enough (saves a full SPA boot per + ;; scenario). Non-Chrome drivers can't do CDP → fall back to the old load-set-reload, which + ;; sets it after the first boot and reloads so the second init reads it. + (if (w/add-init-script! driver + "try{localStorage.setItem('behave-settings','{:show-disclaimer? false}');}catch(e){}") + (w/goto driver url) ; single load — settings already seeded at document-start + (do + (w/goto driver url) ; establish origin so localStorage is writable + (w/execute-script! driver + "localStorage.setItem('behave-settings', '{:show-disclaimer? false}');") + (w/goto driver url))) ; reload → app inits with :show-disclaimer? false + + ;; Wait for the working area to confirm the page has rendered before proceeding + (h/wait-for-working-area driver) + + ;; Click "New Run" button — generous timeout for the initial route load + (h/wait-and-click-button-with-text driver "New Run" 25000) + + ;; Proceed through initial dialog + (h/wait-and-click-button-with-text driver "Next") + + ;; Select "Guided Workflow" + (h/wait-and-click-button-with-text driver "Open using Guided Workflow") + + ;; Proceed to module selection + (h/click-highlighted-button driver) + + ;; Select the desired module type. Wait for the module button to render before + ;; clicking — the module-selection screen paints asynchronously after the highlight + ;; button advances the wizard, and an immediate find (implicit wait 0) can lose the race. + (h/wait-and-click-button-with-text driver (get worksheet-modules modules)) + + ;; Scroll to the next button and click it + (let [el (h/find-element driver {:text "Next"})] + (h/scroll-to-element driver el)) + + (h/click-button-with-text driver "Next") + (h/scroll-to-top driver) + + ;; Wait for the worksheet wizard to finish rendering before returning + (h/wait-for-wizard driver 30000) + + {:driver driver}) diff --git a/workspace.edn b/workspace.edn new file mode 100644 index 000000000..70c15f059 --- /dev/null +++ b/workspace.edn @@ -0,0 +1,11 @@ +{:top-namespace "behave" + :interface-ns "interface" + :default-profile-name "default" + :compact-views #{} + :vcs {:name "git" + :auto-add false} + :tag-patterns {:stable "stable-*" + :release "v[0-9]*"} + :projects {"behave" {:alias "behave/app"} + "behave-slim" {:alias "behave-slim/app"} + "behave-cms" {:alias "behave/cms"}}}