diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..efd5d05d --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,45 @@ +{ + "name": "DLML Explorer", + // Python 3.11 clears the >=3.10 floor that onnxruntime (via fastembed) needs + // for the `explorer` extra. + "image": "mcr.microsoft.com/devcontainers/python:1-3.11-bullseye", + "customizations": { + "codespaces": { + "openFiles": [ + "README.md", + "src/dlml/web/app.py" + ] + }, + "vscode": { + "settings": {}, + "extensions": [ + "ms-python.python", + "ms-python.vscode-pylance" + ] + } + }, + // Install the package (editable) with the explorer extra -- this provides the + // `dlml` command and all the app's dependencies. Replaces the old + // requirements.txt + standalone streamlit install. + "updateContentCommand": "pip install -e \".[explorer]\"", + // `dlml explorer` launches Streamlit headless; the first launch downloads the + // ~64 MB search model from HuggingFace. Codespaces serves through a proxy, so + // CORS/XSRF are disabled via containerEnv below (the CLI doesn't expose those + // flags, but Streamlit reads them from the environment). + "postAttachCommand": { + "server": "dlml explorer" + }, + "containerEnv": { + "STREAMLIT_SERVER_ENABLE_CORS": "false", + "STREAMLIT_SERVER_ENABLE_XSRF_PROTECTION": "false" + }, + "portsAttributes": { + "8501": { + "label": "DLML Explorer", + "onAutoForward": "openPreview" + } + }, + "forwardPorts": [ + 8501 + ] +} diff --git a/.github/workflows/build_docs.yaml b/.github/workflows/build_docs.yaml index b445e269..282e08d6 100644 --- a/.github/workflows/build_docs.yaml +++ b/.github/workflows/build_docs.yaml @@ -1,47 +1,56 @@ name: Build and deploy documentation + on: push: - branches: - - main + branches: [main] + pull_request: + branches: [main] + workflow_dispatch: + +# Least privilege by default; the job grants itself write for the gh-pages push. permissions: - contents: write + contents: read + +concurrency: + group: docs-${{ github.ref }} + cancel-in-progress: true + jobs: build-docs: runs-on: ubuntu-latest + permissions: + contents: write steps: - name: Checkout repository - uses: actions/checkout@v3 - + uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v5 with: - python-version: '3.10' - - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get install -y pandoc - python -m pip install -r requirements.txt - - - name: Compute cache key + python-version: '3.12' + # Installs the package (so the generators can import dlml) plus the Sphinx + # toolchain and the plotting libraries the figure generators need. + - name: Install the package and doc dependencies + run: python -m pip install ".[doc]" + - name: Compute the figure-cache key id: compute-cache-key run: | - cd doc/source/_extensions - key=$(python compute_global_hash.py) - cd ../../../ - echo "key=$key" >> $GITHUB_OUTPUT - - - name: Restore cache - uses: actions/cache@v3 + key=$(cd doc/source/_extensions && python compute_global_hash.py) + echo "key=$key" >> "$GITHUB_OUTPUT" + - name: Restore the figure cache + uses: actions/cache@v4 with: path: doc/cache - key: ${{ steps.compute-cache-key.outputs.key }} - + key: docs-cache-${{ steps.compute-cache-key.outputs.key }} + # Fall back to the most recent cache so a data change re-renders only + # the changed figures instead of all of them from a cold cache. + restore-keys: | + docs-cache- - name: Build docs run: cd doc && make html - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 + # Only a push to main deploys; PRs and manual runs build only. + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./doc/build/html diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..a4994457 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,94 @@ +name: CI + +on: + push: + branches: [main, v3] + pull_request: + workflow_dispatch: + +# Least privilege: CI only reads the checkout. +permissions: + contents: read + +# Cancel superseded runs of the same ref (e.g. rapid pushes to a PR). +concurrency: + group: ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + # Pin uv so CI matches the committed uv.lock resolver and the local dev version. + UV_VERSION: "0.10.9" + +jobs: + checks: + name: Lint, type, spell, tests + coverage + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up uv + uses: astral-sh/setup-uv@v5 + with: + version: ${{ env.UV_VERSION }} + python-version: "3.12" + enable-cache: true + - name: Sync the checks environment (test + lint) + run: uv sync --locked --extra test --extra lint + # scripts/check.sh is the single source of truth (also the pre-commit hook): + - name: Run the full gate + run: bash scripts/check.sh + env: + # The env is already synced above; keep check.sh's inner `uv run` + # calls from re-syncing to defaults. + UV_NO_SYNC: "1" + + test: + name: Tests (${{ matrix.os }}, py${{ matrix.python }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - { os: ubuntu-latest, python: "3.9" } + - { os: ubuntu-latest, python: "3.12" } + - { os: ubuntu-latest, python: "3.13" } + - { os: windows-latest, python: "3.12" } + - { os: macos-latest, python: "3.12" } + steps: + - uses: actions/checkout@v4 + - name: Set up uv + uses: astral-sh/setup-uv@v5 + with: + version: ${{ env.UV_VERSION }} + python-version: ${{ matrix.python }} + enable-cache: true + - name: Run the test suite + run: uv run --locked --extra test pytest + + bare-install: + name: Bare install (core only) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up uv + uses: astral-sh/setup-uv@v5 + with: + version: ${{ env.UV_VERSION }} + python-version: "3.12" + enable-cache: true + - name: Build the sdist and wheel + run: uv build + # Install from the SDIST (not the tree) into a clean, extras-free env, so a + # missing data file in the sdist would surface as an empty dataset list. + - name: Install from sdist and smoke-test the core API + CLI + run: | + uv venv /tmp/bare --python 3.12 + source /tmp/bare/bin/activate + uv pip install dist/*.tar.gz + python -c "import dlml; ids = dlml.list_datasets(); assert ids, 'no datasets discovered'; print(len(ids), 'datasets')" + dlml list | head -3 + FIRST=$(dlml list | head -1 | sed 's/ \[.*//') + dlml info "$FIRST" + if dlml explorer >/dev/null 2>&1; then + echo "ERROR: bare 'dlml explorer' should exit non-zero"; exit 1 + fi + echo "bare 'dlml explorer' correctly refused (exit 1)" diff --git a/.github/workflows/format_check.yml b/.github/workflows/format_check.yml deleted file mode 100644 index 294f1e45..00000000 --- a/.github/workflows/format_check.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: Ruff format -on: [push, pull_request] -jobs: - ruff: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: chartboost/ruff-action@v1 - with: - args: 'format --check' - version: 0.7.0 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index 2546c0ed..00000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: Ruff check -on: [push, pull_request] -jobs: - ruff: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: chartboost/ruff-action@v1 - with: - version: 0.7.0 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..83e538d8 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,80 @@ +name: Publish to PyPI + +# ┌──────────────────────────────────────────────────────────────────────────┐ +# │ FREEZE POLICY (see README, "Release Policy"). This workflow publishes to │ +# │ PyPI when a git TAG like `v3.0` is pushed. A pushed git tag is only a │ +# │ ref -- it does NOT create a GitHub Release, so `releases/latest` stays │ +# │ pinned at v2.1.0 for legacy pelicun (<=3.9) that downloads the data from │ +# │ there. Do NOT add an `on: release:` trigger, and do NOT add any step that │ +# │ creates a GitHub Release or moves a tag while the freeze is in effect. │ +# └──────────────────────────────────────────────────────────────────────────┘ + +on: + push: + tags: + # v3-v9 majors publish to PyPI; v2.x is deliberately excluded (freeze). + - "v[3-9].*" + # Manual runs build + validate only; the publish job is gated on a tag ref, + # so a dispatch is a safe no-upload dry run (inspect the artifacts afterward). + workflow_dispatch: + +permissions: + contents: read + +env: + UV_VERSION: "0.10.9" + +jobs: + build: + name: Build + validate sdist and wheel + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up uv + uses: astral-sh/setup-uv@v5 + with: + version: ${{ env.UV_VERSION }} + python-version: "3.12" + enable-cache: true + - name: Build + run: uv build + # On a tag push, refuse to proceed unless the tag matches the built version + # exactly (tag v3.0 <-> version 3.0). Catches a stray tag and a + # forgotten `.dev0` bump. + - name: Verify tag matches the built version + if: github.ref_type == 'tag' + run: | + version=$(ls dist/*.whl | sed -E 's|.*/simcenter_dlml-([^-]+)-py3.*|\1|') + echo "Built version: $version Tag: $GITHUB_REF_NAME" + if [ "$GITHUB_REF_NAME" != "v$version" ]; then + echo "::error::Tag '$GITHUB_REF_NAME' != built version 'v$version'. Refusing to publish." + exit 1 + fi + - name: Check package metadata + README rendering + run: uvx twine check dist/* + - name: Upload the distributions + uses: actions/upload-artifact@v4 + with: + name: dist + path: dist/ + + publish: + name: Publish to PyPI + needs: build + # Only a real tag push publishes; workflow_dispatch stops after `build`. + if: github.ref_type == 'tag' + runs-on: ubuntu-latest + # The `pypi` environment carries a required-reviewer protection rule, so an + # upload waits for a human approval in the Actions UI even on a correct tag. + environment: pypi + permissions: + contents: read + id-token: write # OIDC for PyPI Trusted Publishing -- no stored token. + steps: + - name: Download the distributions + uses: actions/download-artifact@v4 + with: + name: dist + path: dist/ + - name: Publish to PyPI (Trusted Publishing) + uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/.github/workflows/spell_check.yml b/.github/workflows/spell_check.yml deleted file mode 100644 index c894573a..00000000 --- a/.github/workflows/spell_check.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Spell Check - -on: [push, pull_request] - -jobs: - spell-check: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Run codespell - uses: codespell-project/actions-codespell@v2 - diff --git a/.gitignore b/.gitignore index 73fad9b8..ff26eb2e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,36 @@ /.ropeproject/ /doc/cache/ /doc/source/dl_doc/ + + +#Dev Enviornment +/.vscode/ +/.idea/ +/.venv/ + +# Secrets (never commit or package these) +**/secrets.toml +.env + +# Session data +*.session +session_store/ +/.cache/ + +# Local scratch data +/DB/ + +# Packaging build artifacts +/dist/ +/build/ +*.egg-info/ +src/*.egg-info/ +__pycache__/ + +# Test & tooling caches +.coverage +.coverage.* +/htmlcov/ +/.pytest_cache/ +/.mypy_cache/ +/.ruff_cache/ diff --git a/.streamlit/config.toml b/.streamlit/config.toml new file mode 100644 index 00000000..e7842bcd --- /dev/null +++ b/.streamlit/config.toml @@ -0,0 +1,9 @@ +# Light is the default theme. The in-app dark toggle (st_ui/theme.py) layers a +# dark palette over this via CSS — Streamlit itself only supports one default. +[theme] +base = "light" +primaryColor = "#C8382E" +backgroundColor = "#F4F6FB" +secondaryBackgroundColor = "#FFFFFF" +textColor = "#171C26" +font = "sans serif" diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a493618..95b95ecb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,23 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [3.0] - 2026-07-13 + +This release turns the library into an installable Python package and adds a programmatic API, a command-line interface, and the DLML Explorer web app. The model data itself is unchanged and remains backward compatible. + +### Added +- **Installable package:** the library is published to PyPI as `simcenter-dlml` (imported as `dlml`), with the model data bundled inside the wheel — no runtime download. +- **Python API** (`import dlml`) for discovering datasets and reading model parameters, metadata, and input schemas: `list_datasets`, `available_collections`, `get_fragility` / `get_consequence_repair` / `get_loss_repair` / `get_parameters`, `get_metadata`, `get_schema`, `get_file`, and `validate_asset` / `validate_assets`. +- **Command-line interface** (`dlml`): `dlml explorer` launches the web app; `dlml list` and `dlml info` inspect the packaged datasets. +- **DLML Explorer** web app (the `simcenter-dlml[explorer]` extra) for searching, visualizing, and assembling project-specific model collections. +- Test suite, continuous integration (lint, type-check, spell-check, a 3.9/3.12/3.13 × Linux/Windows/macOS test matrix, and a bare-install check), and PyPI trusted publishing. + +### Changed +- **Distribution:** the project is now distributed as a pip-installable package in addition to being bundled with Pelicun; the source moved to a `src/dlml` layout with the data under `src/dlml/data`. +- **Self-contained:** the core library, its API, and the documentation build no longer require Pelicun. The package now bundles the CSV-parsing helper (`convert_to_MultiIndex`) and the controlled vocabularies it validates against (the recognized demand types and probability-distribution families), so the core install depends only on pandas, numpy, and jsonschema. + +### Distribution +- Version 3.0 is distributed through PyPI as `simcenter-dlml`. The GitHub repository's `releases/latest` continues to point to v2.1.0, so existing Pelicun (≤3.9) installations — which download the model data from the latest GitHub release — keep working unchanged. Subsequent v3.x updates are published to PyPI. --- diff --git a/README.md b/README.md index 0bc6e3bd..a10d142b 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,152 @@ - # Damage and Loss Model Library (DLML) [![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause) -A curated, open-source repository of standardized model parameters and metadata for quantifying the impact of natural hazard events on the built environment. +A curated, open-source, version-controlled library of standardized damage and +loss models for natural-hazard risk assessment. --- -### About This Library +## About the library -The Damage and Loss Model Library (DLML) is a project from the NHERI SimCenter designed to address a critical gap in natural hazards engineering: the lack of a centralized, standardized, and easy-to-use repository for damage and loss models. This library provides the essential data—model parameters, descriptive metadata, and configuration files—that power natural hazard risk assessment simulations. +The Damage and Loss Model Library (DLML) is a project from the +[NHERI SimCenter](https://simcenter.designsafe-ci.org/) that addresses a +persistent gap in natural-hazards engineering: the lack of a centralized, +standardized, and easy-to-use home for damage and loss models. It gathers +performance models from established sources — the component library from +**FEMA P-58** and building- and infrastructure-level models from **FEMA +Hazus** — alongside peer-reviewed models from the research community, and +publishes them in one consistent, machine-readable form. -This `v2.1.0` release continues the evolution of the project, building on the improved data schema, extensive model collection, and documentation system introduced in v2.0.0, with enhanced code quality and improved usability for Hazus assessments. +The library is built on three principles: -**Key Features:** -* **Standardized Data Schema:** A robust yet flexible schema for organizing models by hazard, asset type, and resolution, making it easy to use data and supporting new contributions. -* **Rich Metadata & Clear Citations:** Every model is paired with detailed metadata and a clear citation to the original source. -* **A Broad & Inclusive Collection:** We feature a growing collection of models, from large-scale industry standards like **FEMA P-58** and **FEMA Hazus** to peer-reviewed models from the broader research community. Our goal is to provide a home for all high-quality damage and loss models. -* **Automated Documentation:** The metadata and parameters are used to automatically generate a user-friendly documentation website, complete with model descriptions, parameter tables, and plots of fragility and consequence functions. +- **Version-controlled.** Every model belongs to a released snapshot, so an + analysis can be tied permanently to a specific version of the data — + supporting reproducible research and defensible professional practice. +- **Standardized and machine-readable.** Models are converted to a single + tabular schema (CSV parameters plus JSON metadata), ready for computational + workflows with no manual transcription. +- **Documented provenance.** Every model carries rich metadata and a citation + to its source, so users can trace it to its origin and credit the original + developers. ---- +**Hazard coverage:** seismic, hurricane, and flood — spanning building +components, whole buildings, and infrastructure network assets. + +## Data Organization + +The data is a tree of **datasets**. A *dataset* is a leaf folder identified by +its path (`hazard/asset_type/resolution/methodology`), for example +`seismic/building/component/FEMA P-58 2nd Edition`. Each dataset provides one or +more **collections** — `fragility`, `consequence_repair`, and/or `loss_repair` — +and each collection is a table of **models**, one per row (typically one per +component/building/asset). Parameters are in `.csv`; the matching +`.json` holds the metadata (descriptions, limit and damage state +details, citations). + +## How to use the DLML + +Each of these is a different route to the same curated data. + +### Install the Python package + +```bash +pip install simcenter-dlml +``` + +The data ships inside the package (no runtime download), and you can read it +with the `dlml` API: -### Three Ways to Use This Library +```python +import dlml -There are three primary ways to interact with the DLML, depending on your needs. +dlml.list_datasets() +# ['flood/building/portfolio/Hazus v6.1', +# 'seismic/building/component/FEMA P-58 2nd Edition', ...] -#### 1. Discover and Explore Models +fema_p58 = "seismic/building/component/FEMA P-58 2nd Edition" +dlml.available_collections(fema_p58) # ['consequence_repair', 'fragility'] +fragility = dlml.get_fragility(fema_p58) # a pandas DataFrame of model parameters +metadata = dlml.get_metadata(fema_p58, "fragility") -The best way to get started is by exploring our documentation website. It provides a searchable, lightweight interface to discover all available models, view their parameters, and understand their assumptions. +# Validate asset features against a dataset's input schema: +seismic = "seismic/building/portfolio/Hazus v6.1" +dlml.validate_asset(seismic, {"StructureType": "W1", "DesignLevel": "Pre-Code"}) +# [] -> valid +dlml.validate_asset(seismic, {"StructureType": "W1"}) +# ["$: 'DesignLevel' is a required property"] +``` -[**➡️ Visit the Documentation Website**](https://nheri-simcenter.github.io/DamageAndLossModelLibrary/) +The core package needs only Python 3.9+, pandas, numpy, and jsonschema. -#### 2. Perform Calculations with Pelicun +### Explore the models with the DLML Explorer -For performing damage and loss calculations, we recommend using **Pelicun**, the SimCenter's open-source simulation engine or SimCenter's **PBE** and **R2D** desktop applications that utilize Pelicun in the background. Pelicun is designed to seamlessly use the models from this library as its inputs. This library is bundled with Pelicun, so all models are available automatically after installation. +The **DLML Explorer** is a web app for discovering, visualizing, and assembling +models: search and filter the library, inspect interactive fragility curves and +consequence functions, add components to a selection, and download a +project-ready bundle. The easiest way to try it is the hosted version: -[**➡️ Learn More About Pelicun**](https://github.com/NHERI-SimCenter/Pelicun) +**[Open the DLML Explorer »](https://REPLACE-WITH-EXPLORER-URL)** -#### 3. Work with the Raw Data +You can also run it locally — for example, to explore alongside your own private +models — by installing the explorer extra: + +```bash +pip install "simcenter-dlml[explorer]" +dlml explorer +``` -You can also work directly with the raw data files in this repository. The library is structured in a clear hierarchy of `hazard/asset_type/resolution/methodology`. Within each methodology, **model parameters are stored in standardized CSV files** (e.g., for fragility, loss, or consequences) and metadata in corresponding JSON files. +(The explorer extra targets Python 3.10+.) And you can inspect the library +straight from the command line: -To get a local copy, clone the repository: ```bash -git clone [https://github.com/NHERI-SimCenter/DamageAndLossModelLibrary.git](https://github.com/NHERI-SimCenter/DamageAndLossModelLibrary.git) -```` +dlml list # every dataset and its collections +dlml info # a dataset's collections and model counts +``` ------ +### Use with Pelicun and the SimCenter tools -### Contributing +The library is the data backbone for +[Pelicun](https://github.com/NHERI-SimCenter/Pelicun), SimCenter's open-source +damage-and-loss engine, and is available automatically through the **PBE** and +**R2D** desktop applications that run Pelicun under the hood. + +### Work with the raw data + +You can also read the CSV/JSON files directly from a clone of this repository: + +```bash +git clone https://github.com/NHERI-SimCenter/DamageAndLossModelLibrary.git +``` -We welcome contributions of new and improved models from the researchers and practitioners. While we are in the process of creating a formal contributor's guide, the best way to start is by opening a GitHub Issue to discuss the model data you would like to add. +> A legacy [documentation website](https://nheri-simcenter.github.io/DamageAndLossModelLibrary/) +> with auto-generated model pages also remains available; it will be revised over +> time to complement the DLML Explorer. -Our vision is to enable a simple workflow where contributors can submit pull requests with data that conforms to our schema. We appreciate your patience and collaboration as we work towards this goal. +## Contributing ------ +We welcome new and improved models from researchers and practitioners. A formal +contributor's guide is in progress; for now, the best way to start is to open a +GitHub Issue to discuss the model data you'd like to add. Our goal is a simple +pull-request workflow for data that conforms to the schema. -### License & Acknowledgments +## License and acknowledgments -This library is distributed under the BSD 3-Clause license. See `LICENSE` for more information. +This library is distributed under the BSD 3-Clause license. See `LICENSE` for +details. -This material is based upon work supported by the National Science Foundation under Grants No. 1612843 2131111. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of the National Science Foundation. +We gratefully acknowledge the generous in-kind contribution from Degenkolb +Engineers — and in particular Tshajlij Lee and Hannah Thompson — to the +development of the DLML Explorer. ------ +This material is based upon work supported by the U.S. National Science +Foundation under Grants No. 1612843 and No. 2131111. Any opinions, findings, and +conclusions or recommendations expressed in this material are those of the +authors and do not necessarily reflect the views of the U.S. National Science +Foundation. -### Contact +## Contact For questions or support, please open an issue on the GitHub repository. -Adam Zsarnóczay, NHERI SimCenter, Stanford University, adamzs@stanford.edu +Adam Zsarnóczay, NHERI SimCenter, Stanford University — adamzs@stanford.edu diff --git a/flood/building/portfolio/Hazus v6.1/data_sources/generate_library_files.py b/data_sources/flood/building/portfolio/Hazus v6.1/generate_library_files.py similarity index 100% rename from flood/building/portfolio/Hazus v6.1/data_sources/generate_library_files.py rename to data_sources/flood/building/portfolio/Hazus v6.1/generate_library_files.py diff --git a/flood/building/portfolio/Hazus v6.1/data_sources/input_files/HazusFloodDamageFunctions_Hazus61.xlsx b/data_sources/flood/building/portfolio/Hazus v6.1/input_files/HazusFloodDamageFunctions_Hazus61.xlsx similarity index 100% rename from flood/building/portfolio/Hazus v6.1/data_sources/input_files/HazusFloodDamageFunctions_Hazus61.xlsx rename to data_sources/flood/building/portfolio/Hazus v6.1/input_files/HazusFloodDamageFunctions_Hazus61.xlsx diff --git a/flood/building/portfolio/Hazus v6.1/data_sources/input_files/HazusFloodDamageFunctions_Hazus61_contents.csv b/data_sources/flood/building/portfolio/Hazus v6.1/input_files/HazusFloodDamageFunctions_Hazus61_contents.csv similarity index 100% rename from flood/building/portfolio/Hazus v6.1/data_sources/input_files/HazusFloodDamageFunctions_Hazus61_contents.csv rename to data_sources/flood/building/portfolio/Hazus v6.1/input_files/HazusFloodDamageFunctions_Hazus61_contents.csv diff --git a/flood/building/portfolio/Hazus v6.1/data_sources/input_files/HazusFloodDamageFunctions_Hazus61_inventory.csv b/data_sources/flood/building/portfolio/Hazus v6.1/input_files/HazusFloodDamageFunctions_Hazus61_inventory.csv similarity index 100% rename from flood/building/portfolio/Hazus v6.1/data_sources/input_files/HazusFloodDamageFunctions_Hazus61_inventory.csv rename to data_sources/flood/building/portfolio/Hazus v6.1/input_files/HazusFloodDamageFunctions_Hazus61_inventory.csv diff --git a/flood/building/portfolio/Hazus v6.1/data_sources/input_files/HazusFloodDamageFunctions_Hazus61_structural.csv b/data_sources/flood/building/portfolio/Hazus v6.1/input_files/HazusFloodDamageFunctions_Hazus61_structural.csv similarity index 100% rename from flood/building/portfolio/Hazus v6.1/data_sources/input_files/HazusFloodDamageFunctions_Hazus61_structural.csv rename to data_sources/flood/building/portfolio/Hazus v6.1/input_files/HazusFloodDamageFunctions_Hazus61_structural.csv diff --git a/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility2.txt b/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility2.txt new file mode 100644 index 00000000..b9bb34d0 --- /dev/null +++ b/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility2.txt @@ -0,0 +1,1787 @@ +{ + "_GeneralInformation": { + "ShortName": "SimCenter Hurricane Wind Component Library", + "Description": "This dataset is a collection of component-level damage models from the literature and public resources. Every entry has one or more corresponding publications identified that provide more information about its calibration and application limits.", + "Version": "0.1", + "ComponentGroups": { + "RWC - Roof-Wall Connection": { + "RWC.epoxy - Epoxy only": [], + "RWC.hurricane_clip - Hurricane Clip": [], + "RWC.straps - Straps only": [], + "RWC.toe_nail - Toe nail": [ + "RWC.toe_nail.straps - Toe nail with straps", + "RWC.toe_nail.epoxy - Toe nail with epoxy", + "RWC.toe_nail.adhesive - Toe nail with adhesive" + ] + }, + "WIN - Window": [ + "WIN.regular - Regular", + "WIN.impact_resistant - Impact Resistant", + "WIN.shutters - Hurricane Shutters Installed" + ], + "DOOR - Door": [ + "DOOR.regular - Regular", + "DOOR.glass - Glass", + "DOOR.impact_resistant - Impact Resistant", + "DOOR.shutters - Hurricane Shutters Installed", + "DOOR.garage - Garage" + ], + "RSH - Roof Sheathing": { + "RSH.nails - With Nails": [ + "RSH.nails.6d - 6d size", + "RSH.nails.8d - 8d size" + ], + "RSH.ccspf - With closed-cell Sprayed Polyurethane Foam": [], + "RSH.nails_ccspf - With Nails and ccSPF": [ + "RSH.nails_ccsp.6d - 6d size", + "RSH.nails_ccsp.8d - 8d size" + ] + }, + "WSH - Wall Sheathing": [], + "WALL - Wall": [], + "WCOV - Wall Cover": [], + "RCOV - Roof Cover": [ + "RCOV.tiles - Tiles", + "RCOV.shingles - Shingles" + ] + } + }, + "References": { + "abdelhady2022": "Abdelhady, A. U., S. M. J. Spence, and J. McCormick. 2022. Risk and fragility assessment of residential wooden buildings subject to hurricane winds. Structural Safety, 94: 102137. https://doi.org/10.1016/j.strusafe.2021.102137.", + "angeles2021": "Angeles, K., D. Patsialis, A. A. Taflanidis, T. L. Kijewski-Correa, A. Buccellato, and C. Vardeman. 2021. Advancing the Design of Resilient and Sustainable Buildings: An Integrated Life-Cycle Analysis. J. Struct. Eng., 147 (3): 04020341. https://doi.org/10.1061/(ASCE)ST.1943-541X.0002910.", + "barbato2013": "Barbato, M., F. Petrini, V. U. Unnikrishnan, and M. Ciampoli. 2013. Performance-Based Hurricane Engineering (PBHE) framework. Structural Safety, 45: 24\u201335. https://doi.org/10.1016/j.strusafe.2013.07.002.", + "canfield1991": "Canfield, L., S. Niu, and H. Liu. 1991. Uplift resistance of various rafter-wall connections. Forest Products Journal.", + "cheng2004": "Cheng, J. 2004. Testing and analysis of the toe-nailed connection in the residential roof-to-wall system. Forest Products Journal, 54: 58\u201365.", + "cope2004": "Cope, A. D. 2004. Predicting the vulnerability of typical residential buildings to hurricane damage. University of Florida.", + "datin2011": "Datin, P. L., D. O. Prevatt, and W. Pang. 2011. Wind-Uplift Capacity of Residential Wood Roof-Sheathing Panels Retrofitted with Insulating Foam Adhesive. J. Archit. Eng., 17 (4): 144\u2013154. https://doi.org/10.1061/(ASCE)AE.1943-5568.0000034.", + "dong2016": "Dong, Y., and Y. Li. 2016. Risk-based assessment of wood residential construction subjected to hurricane events considering indirect and environmental loss. Sustainable and Resilient Infrastructure, 1 (1\u20132): 46\u201362. Taylor & Francis. https://doi.org/10.1080/23789689.2016.1179051.", + "grayson2013": "Grayson, J. M., W. Pang, and S. Schiff. 2013. Building envelope failure assessment framework for residential communities subjected to hurricanes. Engineering Structures, 51: 245\u2013258. https://doi.org/10.1016/j.engstruct.2013.01.027.", + "gurley2005": "Gurley, K., J. P. Pinelli, C. Subramanian, A. Cope, L. Zhang, J. Murphree, A. Artiles, P. Misra, S. Gulati, and E. Simiu. 2005. Florida Public Hurricane Loss Projection Model engineering team final report volume II: Predicting the vulnerability of typical residential buildings to hurricane damage. Technical report. Florida International University: International Hurricane Research Center.", + "jain2020": "Jain, A., A. A. Bhusar, D. B. Roueche, and D. O. Prevatt. 2020. Engineering-Based Tornado Damage Assessment: Numerical Tool for Assessing Tornado Vulnerability of Residential Structures. Front. Built Environ., 6. Frontiers. https://doi.org/10.3389/fbuil.2020.00089.", + "kakareko2021": "Kakareko, G., S. Jung, S. Mishra, and O. A. Vanli. 2021. Bayesian capacity model for hurricane vulnerability estimation. Structure and Infrastructure Engineering, 17 (5): 638\u2013648. Taylor & Francis. https://doi.org/10.1080/15732479.2020.1760318.", + "lee2005": "Lee, K. H., and D. V. Rosowsky. 2005. Fragility assessment for roof sheathing failure in high wind regions. Engineering Structures, 27 (6): 857\u2013868. https://doi.org/10.1016/j.engstruct.2004.12.017.", + "li2006": "Li, Y., and B. R. Ellingwood. 2006. Hurricane damage to residential construction in the US: Importance of uncertainty modeling in risk assessment. Engineering Structures, 28 (7): 1009\u20131018. https://doi.org/10.1016/j.engstruct.2005.11.005", + "lin2019": "Lin, S.-Y., W.-C. Chuang, L. Xu, S. El-Tawil, S. M. J. Spence, V. R. Kamat, C. C. Menassa, and J. McCormick. 2019. Framework for Modeling Interdependent Effects in Natural Disasters: Application to Wind Engineering. Journal of Structural Engineering, 145 (5): 04019025. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)ST.1943-541X.0002310.", + "minor1998": "Minor, J. E., and H. S. Norville. 1998. A simple window glass design chart. Journal of Wind Engineering and Industrial Aerodynamics, 77\u201378: 197\u2013204. https://doi.org/10.1016/S0167-6105(98)00143-3.", + "norville1985": "Norville, H. S., and J. E. Minor. 1985. STRENGTH OF WEATHERED WINDOW GLASS. American Ceramic Society Bulletin, 64: 1467\u20131470.", + "park2014": "Park, S., J. W. Van De Lindt, and Y. Li. 2014. ABV Procedure Combined with Mechanistic Response Modeling for Roof- and Surge-Loss Estimation in Hurricanes. J. Perform. Constr. Facil., 28 (2): 206\u2013215. https://doi.org/10.1061/(ASCE)CF.1943-5509.0000397.", + "peng2013": "Peng, J. 2013. Modeling natural disaster risk management: Integrating the roles of insurance and retrofit and multiple stakeholder perspectives. Ph.D. United States -- Delaware: University of Delaware.", + "puga2015": "Puga, H., B. A. Olmos, L. Olmos, J. M. Jara, and M. Jara. 2015. Damage assessment of curtain wall glass. J. Phys.: Conf. Ser., 628 (1): 012052. IOP Publishing. https://doi.org/10.1088/1742-6596/628/1/012052.", + "reed1996": "Reed, T. D., D. V. Rosowsky, and S. D. Schiff. 1996. Roof rafter to top-plate connections in coastal residential construction. 458\u2013465.", + "reed1997": "Reed, T. D., D. V. Rosowsky, and S. D. Schiff. 1997. Uplift Capacity of Light-Frame Rafter to Top Plate Connections. Journal of Architectural Engineering, 3 (4): 156\u2013163. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)1076-0431(1997)3:4(156).", + "rosowsky1996": "Rosowsky, D., and S. Schiff. 1996. Probabilistic Modeling of Roof Sheathing Uplift Capacity. Probabilistic Mechanics and Structural Reliability.", + "rosowsky1999": "Rosowsky, D. V., and N. Cheng. 1999. Reliability of Light-Frame Roofs in High-Wind Regions. I: Wind Loads. Journal of Structural Engineering, 125 (7): 725\u2013733. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)0733-9445(1999)125:7(725).", + "shanmugam2009": "Shanmugam, B., B. G. Nielson, and D. O. Prevatt. 2009. Statistical and analytical models for roof components in existing light-framed wood structures. Engineering Structures, 31 (11): 2607\u20132616. https://doi.org/10.1016/j.engstruct.2009.06.009.", + "shdid2011": "Shdid, C. A., A. Mirmiran, T.-L. Wang, D. Jimenez, and P. Huang. 2011. Uplift Capacity and Impact Resistance of Roof Tiles. Pract. Period. Struct. Des. Constr., 16 (3): 121\u2013129. https://doi.org/10.1061/(ASCE)SC.1943-5576.0000081.", + "shen2013": "Shen, Y. 2013. Assessing the wind resistance of sectional door systems for facilities in hurricane-prone areas through full- and component-scale experimental methods and finite element analysis. Ph.D. United States -- Florida: University of Florida.", + "unnikrishnan2017": "Unnikrishnan, V. U., and M. Barbato. 2017. Multihazard Interaction Effects on the Performance of Low-Rise Wood-Frame Housing in Hurricane-Prone Regions. Journal of Structural Engineering, 143 (8): 04017076. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)ST.1943-541X.0001797.", + "vickery2006": "Vickery, P. J., P. F. Skerlj, J. Lin, L. A. Twisdale, M. A. Young, and F. M. Lavelle. 2006. HAZUS-MH Hurricane Model Methodology. II: Damage and Loss Estimation. Nat. Hazards Rev., 7 (2): 94\u2013103. https://doi.org/10.1061/(ASCE)1527-6988(2006)7:2(94).", + "yau2011": "Yau, S. C. 2011. Wind Hazard Risk Assessment and Management for Structures. Ph.D. United States -- New Jersey: Princeton University." + }, + "RWC.001": { + "Description": "Roof-Wall Connection - General fragility", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft) and a roof type of 6:12 slope gable roof without overhang. Roof sheathing panels are nailed at a spacing of 150mm at the edges. The steel fasteners used are assumed to be hot-dip galvanized to ASTM A153, Class D, with a zinc coating thickness of 43 mm. Panels are nailed to structural trusses or rafters made of spruce-pine-fir (SPF) lumber, spaced 0.6m on center with a specific gravity of 0.36. \n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.straps.001": { + "Description": "Roof-Wall Connection with Straps", + "Comments": "The modeled failure mode related to this component would be the failure of the roof-to-wall connection under wind-induced uplift loads, potentially leading to roof deck or even complete roof failure, which are defined within the damage state descriptions. The installation of roof-to-wall straps is considered a mitigation option within the HAZUS-MH model, specifically for single-family residential buildings that currently have toe-nailed roof-wall connections. \n\nLIMITATIONS: A limitation of this capacity function, as with other component resistances in the model, lies in the fact that these are statistical representations based on laboratory data, engineering analyses, and sometimes engineering judgment. Additionally, they do not give a detailed physical description of the straps themselves, such as their dimensions, material, or specific installation methods. The focus is on the functional capacity of the connection rather than a precise engineering specification of the strap itself. The underlying details of what constitutes a \"strap\" in the model's calculations are likely based on engineering standards and typical construction practices, but these specifics are not elaborated upon in the provided excerpts.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.001b": { + "Description": "Roof-Wall Connection with Toe nails", + "Comments": "The toe nail only configuration was investigated in individual connection test series 1 and system tests 1 and 2. In the individual tests, the connection consisted of three 8d toenails between the rafter and the top plate, and the predominant failure mode was nail pullout from the top plate. In the system tests, where multiple rafters were toe-nailed to a continuous top plate, load-sharing behavior was observed, with the equivalent rafter load exceeding the capacity of the individual toe-nailed connection. However, the ultimate capacities remained low compared to connections with straps or adhesives.\n\nLIMITATIONS: The high variability observed in individual tests suggests a limitation in the predictability of these connections in both individual and repetitive systems.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997", + "shanmugam2009" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.001c": { + "Description": "Roof-Wall Connection with Toe nails", + "Comments": "For configurations with toe-nailed roof-to-wall connections, the model would consider the uplift resistance provided by this type of connection. The failure mode modeled would be the failure of the toe-nailed connection under wind-induced uplift forces, which could lead to subsequent damage such as roof cover loss, roof deck failure, or even more severe structural damage. The model implicitly recognizes the relative weakness of toe-nailed connections compared to strapped connections by considering the installation of straps as a mitigation measure for buildings with existing toe-nailed connections.\n\nLIMITATIONS: The provided sources do not explicitly detail specific test series for roof-to-wall connections using toe nails. The capacity function for toe-nailed connections is a statistical representation of their resistance, derived from laboratory test data, engineering analyses, and potentially engineering judgment, as mentioned for other building components. A key limitation of this capacity function is that it represents a simplified model of a complex failure mechanism and relies on statistical data which may not fully capture the variability in actual construction practices and the performance of toe-nailed connections under diverse hurricane conditions.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.001": { + "Description": "Roof-Wall Connection with Toe nails and a small strap inside", + "Comments": "The small strap is located on the inside of the wall. This connection was constructed with three 8d toenails between the rafter and the top plate, along with a small 18-gauge galvanized steel strap with five short 8d nails into the rafter and five 8d nails into the top plate, installed on the inside face of the wall. The predominant failure modes observed were strap tear, rafter split, and nail pullout of the rafter.\n\nLIMITATIONS: A key limitation highlighted in the study is that placing the strap on the inside of the wall reduces the uplift capacity compared to an outside installation due to the resulting eccentric load path and rotation of the top plate.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.002": { + "Description": "Roof-Wall Connection with Toe nails and a small strap outside", + "Comments": "The small strap is located on the outside of the wall. This connection involved three 8d toenails between the rafter and the top plate, combined with a small 18-gauge galvanized steel strap secured with five short 8d nails into the rafter and five 8d nails into the top plate, installed on the outside face of the wall. The predominant failure modes observed were strap tear and nail pullout of the rafter.\n\nLIMITATIONS: A limitation to note is that while this configuration showed higher uplift capacity than when the strap was installed on the inside, the capacity data is still specific to the idealized test setup and may vary in actual as-built conditions. Furthermore, the study highlights that manufacturers' published values may differ due to their reliance on ASTM testing procedures and safety factors.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.003": { + "Description": "Roof-Wall Connection with Toe nails and small straps on both sides", + "Comments": "Two small straps are installed, one inside and one outside of the wall. This setup consisted of three 8d toenails between the rafter and the top plate, supplemented by two small 18-gauge galvanized steel straps, each secured with five short 8d nails into the rafter and five 8d nails into the top plate, with one strap installed on the inside of the wall and the other on the outside. The predominant failure modes reported for this configuration were strap tear and nail pullout of the top plate. \n\nLIMITATIONS: A limitation to consider is that while this configuration significantly increased the uplift capacity compared to a single strap, the capacity was not doubled, suggesting potential interaction or non-linear behavior when using multiple straps. Additionally, system tests 9 and 11 explored this configuration in a repetitive system, but did not reach failure at the rafter to top plate connections, as failure occurred in the crib wall, which limits the ultimate capacity data specifically for the connection itself in those system tests.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.004": { + "Description": "Roof-Wall Connection with Toe nails, a small strap outside, and plywood nailed.", + "Comments": "The small strap is located on the outside of the wall. A plywood is nailed to the plate on the wall as spacer. This connection consisted of three 8d toenails between the rafter and the double top plate, along with a small 18-gauge galvanized steel strap secured with five short 8d nails into the rafter and five 8d nails into the top plate, installed on the outside of the wall. Additionally, a plywood spacer was placed between the strap and the top plate and was nailed to the top plate. The predominant failure mode observed in this test series was strap tear.\n\nLIMITATIONS: A limitation to consider is that while this test aimed to simulate the presence of wall sheathing, the way the plywood spacer was implemented and nailed might not fully replicate the complex interactions of a full wall sheathing system in a real structure. Additionally, the results are from individual connection tests and may not directly translate to the behavior in a continuous roof system.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.005": { + "Description": "Roof-Wall Connection with Toe nails, a small strap outside, and plywood not nailed.", + "Comments": "The small strap is located on the outside of the wall. A plywood is installed as spacer but not nailed to the plate on the wall. This connection involved three 8d toenails between the rafter and the double top plate, along with a small 18-gauge galvanized steel strap secured with five short 8d nails into the rafter and five 8d nails into the top plate, installed on the outside face of the wall. A plywood spacer was placed between the strap and the top plate but was not nailed to the plate. The predominant failure mode observed in this test series was nail pullout.\n\nLIMITATIONS: A limitation to consider is that the un-nailed plywood spacer's effect on the connection's behavior and uplift capacity might differ from the behavior observed with a fully integrated and nailed wall sheathing system in a real-world scenario. Additionally, these results are specific to individual connection tests and may not fully represent the performance within a continuous roof system where load-sharing can occur.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.006": { + "Description": "Roof-Wall Connection with Toe nails and a large strap outside", + "Comments": "The large strap is located on the outside of the wall. This connection consisted of three 8d toenails between the rafter and the top plate, combined with a large 18-gauge galvanized steel strap secured with eight short 8d nails into the rafter and eight 8d nails into the top plate; importantly, the rafter was sandwiched between two small flanges bent from the metal plate. The predominant failure mode observed for this configuration was nail pullout of the top plate. \n\nLIMITATIONS: A limitation to consider is that these results are derived from individual connection tests, and the behavior and capacity might differ in a full roof system due to potential load-sharing effects with adjacent connections and the presence of sheathing and other structural elements.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.007": { + "Description": "Roof-Wall Connection with Toe nails and a large strap inside", + "Comments": "The large strap is located on the inside of the wall. This connection was constructed with three 8d toenails between the rafter and the top plate, along with a new large 16-gauge galvanized steel strap secured with eight short 8d nails into the rafter and eight short 8d nails into the wall stud (spruce-pine-fir), with the strap located on the inside of the wall. The predominant failure mode observed for this configuration was block shear in wood. \n\nLIMITATIONS: A key limitation to consider is that this \"new large strap\" provided a direct connection from the rafter to the wall stud, bypassing the top plate for the strap's nailed connection, which is different from typical large straps that connect to the top plate. Additionally, as with all individual connection tests, the results may not fully reflect the behavior in a complete roof system where load-sharing and the presence of sheathing can influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.epoxy.001": { + "Description": "Roof-Wall Connection with Epoxy.", + "Comments": "Epoxy set for one week, no toe nails used. This connection was formed by applying a two-part, hand-mixed epoxy paste between the rafter and the top plate, and allowing it to cure for one week without the use of any toe nails. The predominant failure modes observed in this series were rafter split and top-plate fibers pulling apart. \n\nLIMITATIONS: A key limitation of this data is the high variability, which suggests that the capacity of such connections may be less predictable compared to mechanically fastened connections. Additionally, the performance of adhesive connections can be sensitive to factors such as surface preparation, application technique, and environmental conditions during curing, which may not have been fully captured in this controlled laboratory setting.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.epoxy.001": { + "Description": "Roof-Wall Connection with Toe nails and epoxy.", + "Comments": "Epoxy set for one week, toe-nailed when epoxy is wet. This connection was created by applying a two-part, hand-mixed epoxy paste between the rafter and the top plate, similar to the adhesive-only connections, but with the addition of three 8d toenails that were installed while the epoxy was still wet. The predominant failure mode observed in this test series was top-plate fibers pulling apart.\n\nLIMITATIONS: A key limitation to consider is the relatively high variability in the capacity data, as indicated by the COV, suggesting that the strength of these combined adhesive and nailed connections might not be consistently predictable. Additionally, the specific interaction between the wet epoxy and the toenails during the curing process and under load might introduce complexities not fully captured in this testing scenario, and the results are specific to this particular epoxy product and application method.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.epoxy.002": { + "Description": "Roof-Wall Connection with Toe nails and epoxy on small wood blocks.", + "Comments": "Epoxy set for one week. This connection involved three 8d toe nails along with epoxy applied to small wood blocks (approximately 38 x 89 mm) made of either spruce-pine-fir or Southern pine, which were placed between the rafter and the top plate. The epoxy was allowed to set for one week before testing. The predominant failure modes observed were rafter split, tearing of top-plate and rafter fibers, failure of wood block fibers, and epoxy failure.\n\nLIMITATIONS: A limitation of this test series is that the use of small, standardized wood blocks as a retrofit method might not fully represent the variety of conditions and block sizes encountered in actual retrofit applications. Additionally, the one-week epoxy set time represents a specific curing period, and the performance might differ with shorter or longer cure times or different epoxy products.\n\nSTUDY TYPE: Experiment\n", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.epoxy.003": { + "Description": "Roof-Wall Connection with Toe nails and epoxy on small wood blocks.", + "Comments": "Epoxy set for 24-48 hrs. This connection included three 8d toe nails along with epoxy applied to small wood blocks (approximately 38 x 89 mm) made of either spruce-pine-fir or Southern pine, placed between the rafter and the top plate. The epoxy was allowed to set for only 24 to 48 hours before testing1 . The predominant failure modes observed were rafter split, tearing of top-plate and rafter fibers, failure of wood block fibers, and epoxy failure.\n\nLIMITATIONS: A limitation to consider for this test series is that the use of standardized small wood blocks for retrofit might not fully represent the diverse conditions and sizes of blocks used in actual retrofit scenarios. Furthermore, the relatively short 24-48 hour epoxy set time represents a specific curing period, and the connection's performance might vary with different epoxy products or if allowed to cure for a longer or shorter duration. As with other individual connection tests, these results might not entirely reflect the behavior within a complete roof system where load sharing and other structural elements can influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.epoxy.004": { + "Description": "Roof-Wall Connection with Toe nails and epoxy on large wood blocks.", + "Comments": "Epoxy set for one week. This connection consisted of three 8d toe nails in addition to epoxy applied to large wood blocks (approximately 89 x 89 mm) made of pressure-treated Southern pine, which were installed between the rafter and the top plate. The epoxy was allowed to cure for one week before the connections were tested. The predominant failure modes observed in this test series were top-plate and rafter fiber tear, and wood block split.\n\nLIMITATIONS: A limitation to consider for this test series is that the use of standardized large wood blocks for retrofit might not fully represent the variety of conditions and sizes of blocks encountered in actual retrofit applications. Furthermore, the one-week epoxy set time is a specific condition, and the performance might differ with various epoxy products or if allowed to cure for a different duration. As with all individual connection tests, the results might not entirely reflect the behavior within a complete roof system where load sharing and other structural elements can influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.adhesive.001": { + "Description": "Roof-Wall Connection with Toe nails and acrylic adhesive", + "Comments": "Adhesive set for one week, toe-nailed when adhesive is wet. This connection involved the application of a two-part acrylic adhesive through a diffuser nozzle between the rafter and the top plate, and then immediately followed by the installation of toe nails. The adhesive was allowed to set for one week before testing. The predominant failure modes observed in this test series were toe-nail pullout and top-plate fiber tear.\n\nLIMITATIONS: A limitation to consider is that the results are based on individual connection tests and may not reflect the behavior in a complete roof system where load-sharing with adjacent connections and the presence of sheathing could influence the overall performance. Additionally, the performance observed is specific to the type of acrylic adhesive used and the condition of installing toe nails while the adhesive was wet, and may vary with different adhesives or installation techniques.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.adhesive.002": { + "Description": "Roof-Wall Connection with Toe nails and soaked with acrylic adhesive.", + "Comments": "Wood first soaked for 24 hours, then toe-nailed when adhesive is wet. In this setup, the wood members (rafter and top plate) were first soaked for 24 hours prior to the application of a two-part acrylic adhesive through a diffuser nozzle between them, followed immediately by the installation of toe nails. The adhesive was then allowed to set for one week before the uplift capacity was tested. The predominant failure modes observed in this test series were toe-nail pullout and top-plate fiber tear.\n\nLIMITATIONS: A significant limitation of this data is the high coefficient of variation, indicating considerable variability in the uplift capacity achieved. Furthermore, the specific condition of soaking the wood for 24 hours prior to connection might influence the adhesive's bonding properties and the wood's strength, making these results specific to this pre-treatment and potentially not representative of typical construction conditions. As with other individual connection tests, the results may not fully capture the behavior of such connections within a complete roof system where load sharing and the presence of sheathing can play a role.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.adhesive.003": { + "Description": "Roof-Wall Connection with Toe nails and acrylic adhesive on small wood blocks.", + "Comments": "Adhesive set for one week. This connection was created using three 8d toe nails along with a two-part acrylic adhesive applied through a diffuser nozzle to small wood blocks (approximately 38 x 89 mm) made of either spruce-pine-fir or Southern pine, which were placed between the rafter and the top plate. The acrylic adhesive was allowed to set for one week before the connections were tested. The predominant failure modes observed in this test series were rafter split and top-plate fiber tear.\n\nLIMITATIONS: A limitation of this test series is that the use of standardized small wood blocks as a retrofit method might not fully represent the variety of conditions and block sizes encountered in actual retrofit applications. Furthermore, the one-week adhesive set time represents a specific curing period, and the performance might differ with various acrylic adhesive products or if allowed to cure for a different duration. As with all individual connection tests, these results might not entirely reflect the behavior within a complete roof system where load sharing and other structural elements can influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.adhesive.004": { + "Description": "Roof-Wall Connection with Toe nails and 1/4 inch acrylic adhesive bead", + "Comments": "This connection consisted of three 8d toe nails along with a 1/4 inch bead of acrylic adhesive applied on either side of the rafter along the top plate. The adhesive was allowed to set for one week before the uplift capacity was tested. The predominant failure mode observed in this test series was wood fiber failure.\n\nLIMITATIONS: A limitation of this test series is that the connection method using small adhesive beads might not provide a substantial contact area compared to other adhesive applications, potentially limiting the overall uplift capacity. Furthermore, the performance is specific to the application of a 1/4 inch acrylic adhesive bead and might differ with varying bead sizes or other adhesive products. As with other individual connection tests, these results may not entirely reflect the behavior within a complete roof system where load sharing and the presence of sheathing could influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.adhesive.005": { + "Description": "Roof-Wall Connection with Toe nails and 1/2 inch acrylic adhesive bead", + "Comments": "This connection was created using three 8d toe nails along with a 1/2 inch bead of acrylic adhesive applied on either side of the rafter along the top plate. The adhesive was allowed to set for one week before the uplift capacity was tested. The predominant failure mode observed in this test series was wood fiber failure.\n\nLIMITATIONS: A limitation of this test series is that the connection method using small adhesive beads might not provide a substantial contact area compared to other adhesive applications, potentially limiting the overall uplift capacity, and the relatively high coefficient of variation indicates considerable variability in the achieved uplift capacity. Furthermore, the performance is specific to the application of a 1/2 inch acrylic adhesive bead and might differ with varying bead sizes or other adhesive products. As with other individual connection tests, these results may not entirely reflect the behavior within a complete roof system where load sharing and the presence of sheathing could influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.adhesive.006": { + "Description": "Roof-Wall Connection with Toe nails and foaming polyurethane adhesive.", + "Comments": "This connection consisted of three 8d toe nails along with a foaming polyurethane adhesive product generously applied using an air pressure gun to form large fillets between the rafter and the top plate. The adhesive was allowed to set for one week before the uplift capacity was tested. The predominant failure mode observed in this test series was adhesive shear.\n\nLIMITATIONS: A limitation of this test series is the small sample size of only three specimens, which might not provide a comprehensive understanding of the connection's behavior and could affect the statistical significance of the results. Furthermore, the performance is specific to the foaming polyurethane adhesive product used and the application method of forming large fillets, and might vary with different products or application techniques. As with other individual connection tests, these results may not entirely reflect the behavior within a complete roof system where load sharing and the presence of sheathing could influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.hurricane_clip.001a": { + "Description": "Roof-Wall Connection with Hurricane Clip H2.5.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "canfield1991" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.hurricane_clip.001b": { + "Description": "Roof-Wall Connection with Hurricane Clip H2.5.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "canfield1991" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.003": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.004": { + "Description": "Roof-Wall Connection with Toe nails, 3-8d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.005": { + "Description": "Roof-Wall Connection with Toe nails, 3-16d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "jain2020", + "shanmugam2009" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006a": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006b": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006c": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "WIN.regular.001b": { + "Description": "Regular Window - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "unnikrishnan2017", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.001c": { + "Description": "Regular Window - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.002a": { + "Description": "Regular Window on windward wall", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.002b": { + "Description": "Regular Window on non-windward wall", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.003a": { + "Description": "Window on a 1-story building", + "Comments": "This capacity function is used for all windows on a 1-story home. Modeled failure modes for windows on a 1-story building include pressure-induced breakage when the wind load exceeds the window's pressure resistance.\n\nLIMITATIONS: This study does not explicitly specify the type of glass (e.g., annealed, tempered). A limitation of these capacity functions is that they are statistical representations based on laboratory test data, engineering analyses, and in some cases engineering judgment, which may not fully capture the complexities of real-world window installations, the variability in material properties, and the diverse characteristics of windborne debris. The model also simplifies by considering representative building geometries and may not account for specific details of individual windows on a given 1-story structure. The specific size of the window described in the capacity function is not mentioned.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.003b": { + "Description": "Window on a 2-story building with 2 large windows", + "Comments": "This capacity function is used for all windows on a 2-story home. Modeled failure modes for windows on a 2-story building include pressure-induced breakage when the wind load exceeds the window's pressure resistance.\n\nLIMITATIONS: This study does not explicitly specify the type of glass (e.g., annealed, tempered). A limitation of these capacity functions is that they are statistical representations based on laboratory test data, engineering analyses, and in some cases engineering judgment, which may not fully capture the complexities of real-world window installations, the variability in material properties, and the diverse characteristics of windborne debris. The model also simplifies by considering representative building geometries and may not account for specific details of individual windows on a given 2-story structure. The specific size of the window described in the capacity function is not mentioned.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.004": { + "Description": "Regular Window 1/8 in 20 sq ft", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft). A window size of 3.72 square meters with 3.175 mm thick glass was considered. The authors used the American Society of Testing and Materials (ASTM) Standard E-1300 (2003) to specify the strength of annealed glass under uniform wind pressure with a 60-second load duration and a probability of failure of 0.0081. The 60-second resistance value of annealed glass was converted to a 3-second strength by multiplying it by a factor of 1.21. This conversion was done to be consistent with the 3-second gust wind used in ASCE-7. A Weibull cumulative distribution was used to model the probability of failure of the brittle material (glass) under uniform wind load. This is stated as a common model for defining the failure probability of brittle materials like glass. The coefficient of variation of glass strength was noted to be in the range of 0.22\u20130.27.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. Finally, the fragility analysis mentions a specific window size (3.175 mm in 3.72 sq. m window) for calibration. Glass strength is known to be dependent on size and boundary conditions, so the fragility derived for this specific size might not be directly applicable to windows of different dimensions or mounting.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006", + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.005a": { + "Description": "Regular Window 3/16 in 40 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.005b": { + "Description": "Regular Window 3/16 in 40 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.006": { + "Description": "Regular Window 3/16 in 20 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.007": { + "Description": "Regular Window small sized (3.5' x 3.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "barbato2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.008": { + "Description": "Regular Window medium sized (3.5' x 5.0')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.009": { + "Description": "Regular Window tall sized (3.5' x 6.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.010": { + "Description": "Regular Window picture size (6.5' x 6.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "DOOR.regular.001b": { + "Description": "Regular Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Door panel torn from hinges" + } + } + } + }, + "DOOR.regular.001c": { + "Description": "Regular Door - General fragility", + "Comments": "This is the general representation of an entry door's resistance to pressure. The primary failure mode considered for the entry door under pressure is pressure-induced failure, where the wind load acting on the door exceeds its resistance capacity, leading to a breach in the building envelope. This breach can then affect internal pressure and potentially lead to further damage.\n\nLIMITATIONS: The sources do not explicitly specify the precise type of entry door that this capacity function considers. Resistances assigned to building components are based on results from laboratory test data, engineering analyses coupled with laboratory data, and in some cases, engineering judgment. The model might not fully capture the wide variety of entry door constructions, installation methods, the condition of the door and its frame, or the complexities of failure mechanisms that can occur during a hurricane. Further, the lack of specific details about the test series or engineering analyses used to derive these fragility parameters for entry doors, makes it difficult to fully understand the empirical or analytical basis for this specific capacity function.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Door panel torn from hinges" + } + } + } + }, + "DOOR.glass.001a": { + "Description": "Glass Door", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft). The authors used the American Society of Testing and Materials (ASTM) Standard E-1300 (2003) to specify the strength of annealed glass under uniform wind pressure with a 60-second load duration and a probability of failure of 0.0081. The 60-second resistance value of annealed glass was converted to a 3-second strength by multiplying it by a factor of 1.21. This conversion was done to be consistent with the 3-second gust wind used in ASCE-7. A Weibull cumulative distribution was used to model the probability of failure of the brittle material (glass) under uniform wind load. This is stated as a common model for defining the failure probability of brittle materials like glass. The coefficient of variation of glass strength was noted to be in the range of 0.22\u20130.27.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. ASTM E-1300 specifies strength under uniform wind pressure. However, wind loads on buildings, especially during hurricanes, can be complex and non-uniform, with varying pressures at different locations on a window. Additionally, while the study converts the 60-second resistance to a 3-second strength, this conversion factor is an approximation. The actual behavior of glass under different load durations might be more complex. Additionally, the strength of weathered or previously damaged glass might be lower than that of new, undamaged glass, which is likely what ASTM standards address. This time-dependent degradation of glass strength is not explicitly considered.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "DOOR.glass.001b": { + "Description": "Glass Door", + "Comments": "This is the general representation of single-glazed (SG) doors as a specific type of door component, which would include sliding glass doors with single panes of glass. The primary failure mode considered for the SG door under pressure is pressure-induced failure, where the wind load acting on the door exceeds its resistance capacity, leading to a breach in the building envelope. This breach can then affect internal pressure and potentially lead to further damage.\n\nLIMITATIONS: The sources do not explicitly specify the precise type of entry door that this capacity function considers. Resistances assigned to building components are based on results from laboratory test data, engineering analyses coupled with laboratory data, and in some cases, engineering judgment. The model might not fully capture the wide variety of SG door constructions, installation methods, the condition of the door and its frame, or the complexities of failure mechanisms that can occur during a hurricane. Further, the lack of specific details about the test series or engineering analyses used to derive these fragility parameters for SG doors, makes it difficult to fully understand the empirical or analytical basis for this specific capacity function.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "DOOR.regular.002": { + "Description": "Regular Door 6'10\" x 3'2\" size", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Door panel torn from hinges" + } + } + } + }, + "DOOR.garage.001a": { + "Description": "Garage Door - General fragility", + "Comments": "This garage door capacity is taken from the 2005 version of the Florida Public Hurricane Loss Model (FPHLM). The modeled failure mode for this garage door configuration is implicitly defined as the wind load exceeding its pressure resistance during a simulated hurricane event. \n\nLIMITATIONS: Limitations of this capacity function are not explicitly discussed in the provided text, but it is important to understand that the model likely uses a simplified representation of garage door performance, and the actual failure can be influenced by factors such as the material and construction of the door, the strength and attachment of the supporting tracks and hardware, and potential damage from wind-borne debris (though debris impact is modeled separately for openings) - none of which are detailed.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "peng2013", + "gurley2005" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.001b": { + "Description": "Garage Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shen2013", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.001c": { + "Description": "Garage Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.001d": { + "Description": "Garage Door - General fragility", + "Comments": "This fragility describes the interior garage door. It is treated as a general category of a door located within the building, separating the garage space from the interior living space.\n\nLIMITATIONS: The capacity function represents a simplification of real-world door behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of garage door. The model also does not explicitly account for potential vulnerabilities related to the door's connection to the surrounding wall or the operation of the garage door mechanism itself under pressure loads.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.003": { + "Description": "2-car Garage Door (6'10\" x 12\")", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.004a": { + "Description": "Double garage door - weak", + "Comments": "The primary modeled failure mode for this component is pressure-induced failure, occurring when the wind load exceeds this resistance, leading to a breach in the building envelope. The distinction between \"weak\" and \"strong\" double garage doors within the model implies different construction or reinforcement levels, resulting in varying resistance to pressure, although the sources do not provide specific details on the structural characteristics that differentiate them\n\nLIMITATIONS: \n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.004b": { + "Description": "Double garage door - strong", + "Comments": "The primary modeled failure mode for this component is pressure-induced failure, occurring when the wind load exceeds this resistance, leading to a breach in the building envelope. The distinction between \"weak\" and \"strong\" double garage doors within the model implies different construction or reinforcement levels, resulting in varying resistance to pressure, although the sources do not provide specific details on the structural characteristics that differentiate them\n\nLIMITATIONS: The capacity function represents a simplification of real-world door behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of garage door.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "WSH.001a": { + "Description": "Wall Sheathing - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.001b": { + "Description": "Wall Sheathing - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.002a": { + "Description": "Wall Sheathing - 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.002b": { + "Description": "Wall Sheathing - 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.003a": { + "Description": "Wall Sheathing - 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.003b": { + "Description": "Wall Sheathing - 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WALL.001a": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Shear failure" + } + } + } + }, + "WALL.001b": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Lateral failure (connection)" + } + } + } + }, + "WALL.001c": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Lateral failure (additional)" + } + } + } + }, + "WALL.001d": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift (connection)" + } + } + } + }, + "WALL.001e": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift (additional)" + } + } + } + }, + "WALL.004a": { + "Description": "Concrete block", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Shear failure" + } + } + } + }, + "WALL.004b": { + "Description": "Concrete block", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift" + } + } + } + }, + "RSH.nails.6d.6p12.001": { + "Description": "Roof Sheathing with 6d nails @ 6/12 in", + "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, a \"6d\" nail is a common size, typically referring to a nail that is approximately 2 inches (51 mm) long. The diameter will also be standardized for this penny size. While the HAZUS model uses \"6d\" to differentiate between different roof sheathing connection strengths. 6/12 in nail pattern for roof sheathing with 6d nails most likely means that the 6d nails are spaced 6 inches apart along one axis of the sheathing panel and 12 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure.\n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p6.001": { + "Description": "Roof Sheathing with 8d nails @ 6/6 in", + "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, an \"8d\" nail is a common size, typically referring to a nail that is approximately 2 1/2 inches (64 mm) long, and it will have a standardized diameter for this penny size. While the HAZUS model uses \"8d\" to differentiate between different roof sheathing connection strengths. 6/6 in nail pattern for roof sheathing with 8d nails most likely means that the 8d nails are spaced 6 inches apart along one axis of the sheathing panel and 6 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure.\n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001a": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1996", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001b": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001c": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, an \"8d\" nail is a common size, typically referring to a nail that is approximately 2 1/2 inches (64 mm) long, and it will have a standardized diameter for this penny size. While the HAZUS model uses \"8d\" to differentiate between different roof sheathing connection strengths. 6/12 in nail pattern for roof sheathing with 6d nails most likely means that the 8d nails are spaced 6 inches apart along one axis of the sheathing panel and 12 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure. \n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.002": { + "Description": "Roof Sheathing with 6d common nails (2.375\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003a": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003b": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1996", + "rosowsky1999", + "lee2005", + "li2006", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003c": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p6.001": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002a": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002b": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002c": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p8.001": { + "Description": "Roof Sheathing with 8d common nails (2.5 in length) @ 6/8 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p6.002": { + "Description": "Roof Sheathing with 8d common nails (2.5 in length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.003": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p8.002": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/8 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p6.003": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.001": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.6d.6p12.001": { + "Description": "Roof Sheathing with 6d common nails @ 6/12 in and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.001": { + "Description": "Roof Sheathing with no nails and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.002": { + "Description": "Roof Sheathing with no nails and a fillet plus 0.5 in coverage ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.002": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a 3 in full coverage ccSPF application with 24-39 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.6d.6p12.002": { + "Description": "Roof Sheathing with 6d common nails @ 6/12 in and a 3 in full coverage ccSPF application with 19-20 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.003": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a 3 in full coverage ccSPF application with 129-130 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.003": { + "Description": "Roof Sheathing with no nails and a 3 in full coverage ccSPF application with 12-15 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.001a": { + "Description": "Wall Cover - General fragility, lower end", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "abdelhady2022" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.001b": { + "Description": "Wall Cover - General fragility, higher end", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "abdelhady2022" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.002": { + "Description": "Wall Cover with Vinyl Siding", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.003": { + "Description": "Wall Cover with Curtain Walls 30 sq ft size and 6:5 aspect ratio", + "SuggestedComponentBlockSize": "30 ft2", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "puga2015", + "angeles2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Curtain wall torn off" + } + } + } + }, + "RCOV.tiles.clay.001": { + "Description": "Roof Cover - Clay Tiles with adhesive", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft) and a roof type of 6:12 slope gable roof without overhang. The roof covering is adhesive-set clay tiles with parameters determined from published experimental studies.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. Though the tiles' fragilities are taken from experimental data, the authors acknowledge this is among the first to analyze the fragility of clay tiles, implying there's a lack of established comparison data.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011", + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of foam from ridge board" + } + } + } + }, + "RCOV.tiles.concrete.001": { + "Description": "Roof Cover - Concrete Tiles with adhesive", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of ridge tile from foam" + } + } + } + }, + "RCOV.tiles.clay.002": { + "Description": "Roof Cover - Clay Tiles with mortar", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of field tile from mortar" + } + } + } + }, + "RCOV.tiles.concrete.002": { + "Description": "Roof Cover - Concrete Tiles with mortar", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of ridge tile from mortar" + } + } + } + }, + "RCOV.shingles.001b": { + "Description": "Roof Cover - Asphalt Shingles with standard construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RCOV.shingles.002a": { + "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RCOV.shingles.002b": { + "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RCOV.shingles.002c": { + "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", + "Comments": "In the context of this study, high wind shingles refer to a specific type of roof covering that is designed and installed to offer enhanced resistance to wind damage compared to standard asphalt shingles. Their installation involves a \"high wind nail pattern\" with 6 nails per shingle, which contributes to their increased resistance. This asphalt shingle capacity is taken from the 2005 version of the Florida Public Hurricane Loss Model (FPHLM). The modeled failure mode for this roof cover configuration is implicitly defined as the wind load exceeding its resistance capacity during a simulated hurricane event.\n\nLIMITATIONS: Limitations of this capacity function are not explicitly discussed in the provided text, but it is important to understand that the model likely uses a simplified representation of roof covering performance, and the actual failure can be influenced by factors such as the specific type and quality of high wind shingles, the precise application of the 6-nail pattern, the condition of the underlying sheathing, and potential damage from wind-borne debris (though debris impact is modeled separately for openings) - none of which are detailed.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "peng2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + } +} \ No newline at end of file diff --git a/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility3.txt b/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility3.txt new file mode 100644 index 00000000..938e7198 --- /dev/null +++ b/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility3.txt @@ -0,0 +1,1753 @@ +{ + "_GeneralInformation": { + "ShortName": "SimCenter Hurricane Wind Component Library", + "Description": "This dataset is a collection of component-level damage models from the literature and public resources. Every entry has one or more corresponding publications identified that provide more information about its calibration and application limits.", + "Version": "0.1", + "ComponentGroups": { + "RWC - Roof-Wall Connection": { + "RWC.epoxy - Epoxy only": [], + "RWC.hurricane_clip - Hurricane Clip": [], + "RWC.straps - Straps only": [], + "RWC.toe_nail - Toe nail": [ + "RWC.toe_nail.straps - Toe nail with straps", + "RWC.toe_nail.epoxy - Toe nail with epoxy", + "RWC.toe_nail.adhesive - Toe nail with adhesive" + ] + }, + "WIN - Window": [ + "WIN.regular - Regular", + "WIN.impact_resistant - Impact Resistant", + "WIN.shutters - Hurricane Shutters Installed" + ], + "DOOR - Door": [ + "DOOR.regular - Regular", + "DOOR.glass - Glass", + "DOOR.impact_resistant - Impact Resistant", + "DOOR.shutters - Hurricane Shutters Installed", + "DOOR.garage - Garage" + ], + "RSH - Roof Sheathing": { + "RSH.nails - With Nails": [ + "RSH.nails.6d - 6d size", + "RSH.nails.8d - 8d size" + ], + "RSH.ccspf - With closed-cell Sprayed Polyurethane Foam": [], + "RSH.nails_ccspf - With Nails and ccSPF": [ + "RSH.nails_ccsp.6d - 6d size", + "RSH.nails_ccsp.8d - 8d size" + ] + }, + "WSH - Wall Sheathing": [], + "WALL - Wall": [], + "WCOV - Wall Cover": [], + "RCOV - Roof Cover": [ + "RCOV.tiles - Tiles", + "RCOV.shingles - Shingles" + ] + } + }, + "References": { + "abdelhady2022": "Abdelhady, A. U., S. M. J. Spence, and J. McCormick. 2022. Risk and fragility assessment of residential wooden buildings subject to hurricane winds. Structural Safety, 94: 102137. https://doi.org/10.1016/j.strusafe.2021.102137.", + "angeles2021": "Angeles, K., D. Patsialis, A. A. Taflanidis, T. L. Kijewski-Correa, A. Buccellato, and C. Vardeman. 2021. Advancing the Design of Resilient and Sustainable Buildings: An Integrated Life-Cycle Analysis. J. Struct. Eng., 147 (3): 04020341. https://doi.org/10.1061/(ASCE)ST.1943-541X.0002910.", + "barbato2013": "Barbato, M., F. Petrini, V. U. Unnikrishnan, and M. Ciampoli. 2013. Performance-Based Hurricane Engineering (PBHE) framework. Structural Safety, 45: 24\u201335. https://doi.org/10.1016/j.strusafe.2013.07.002.", + "canfield1991": "Canfield, L., S. Niu, and H. Liu. 1991. Uplift resistance of various rafter-wall connections. Forest Products Journal.", + "cheng2004": "Cheng, J. 2004. Testing and analysis of the toe-nailed connection in the residential roof-to-wall system. Forest Products Journal, 54: 58\u201365.", + "cope2004": "Cope, A. D. 2004. Predicting the vulnerability of typical residential buildings to hurricane damage. University of Florida.", + "datin2011": "Datin, P. L., D. O. Prevatt, and W. Pang. 2011. Wind-Uplift Capacity of Residential Wood Roof-Sheathing Panels Retrofitted with Insulating Foam Adhesive. J. Archit. Eng., 17 (4): 144\u2013154. https://doi.org/10.1061/(ASCE)AE.1943-5568.0000034.", + "dong2016": "Dong, Y., and Y. Li. 2016. Risk-based assessment of wood residential construction subjected to hurricane events considering indirect and environmental loss. Sustainable and Resilient Infrastructure, 1 (1\u20132): 46\u201362. Taylor & Francis. https://doi.org/10.1080/23789689.2016.1179051.", + "grayson2013": "Grayson, J. M., W. Pang, and S. Schiff. 2013. Building envelope failure assessment framework for residential communities subjected to hurricanes. Engineering Structures, 51: 245\u2013258. https://doi.org/10.1016/j.engstruct.2013.01.027.", + "gurley2005": "Gurley, K., J. P. Pinelli, C. Subramanian, A. Cope, L. Zhang, J. Murphree, A. Artiles, P. Misra, S. Gulati, and E. Simiu. 2005. Florida Public Hurricane Loss Projection Model engineering team final report volume II: Predicting the vulnerability of typical residential buildings to hurricane damage. Technical report. Florida International University: International Hurricane Research Center.", + "jain2020": "Jain, A., A. A. Bhusar, D. B. Roueche, and D. O. Prevatt. 2020. Engineering-Based Tornado Damage Assessment: Numerical Tool for Assessing Tornado Vulnerability of Residential Structures. Front. Built Environ., 6. Frontiers. https://doi.org/10.3389/fbuil.2020.00089.", + "kakareko2021": "Kakareko, G., S. Jung, S. Mishra, and O. A. Vanli. 2021. Bayesian capacity model for hurricane vulnerability estimation. Structure and Infrastructure Engineering, 17 (5): 638\u2013648. Taylor & Francis. https://doi.org/10.1080/15732479.2020.1760318.", + "lee2005": "Lee, K. H., and D. V. Rosowsky. 2005. Fragility assessment for roof sheathing failure in high wind regions. Engineering Structures, 27 (6): 857\u2013868. https://doi.org/10.1016/j.engstruct.2004.12.017.", + "li2006": "Li, Y., and B. R. Ellingwood. 2006. Hurricane damage to residential construction in the US: Importance of uncertainty modeling in risk assessment. Engineering Structures, 28 (7): 1009\u20131018. https://doi.org/10.1016/j.engstruct.2005.11.005", + "lin2019": "Lin, S.-Y., W.-C. Chuang, L. Xu, S. El-Tawil, S. M. J. Spence, V. R. Kamat, C. C. Menassa, and J. McCormick. 2019. Framework for Modeling Interdependent Effects in Natural Disasters: Application to Wind Engineering. Journal of Structural Engineering, 145 (5): 04019025. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)ST.1943-541X.0002310.", + "minor1998": "Minor, J. E., and H. S. Norville. 1998. A simple window glass design chart. Journal of Wind Engineering and Industrial Aerodynamics, 77\u201378: 197\u2013204. https://doi.org/10.1016/S0167-6105(98)00143-3.", + "norville1985": "Norville, H. S., and J. E. Minor. 1985. STRENGTH OF WEATHERED WINDOW GLASS. American Ceramic Society Bulletin, 64: 1467\u20131470.", + "park2014": "Park, S., J. W. Van De Lindt, and Y. Li. 2014. ABV Procedure Combined with Mechanistic Response Modeling for Roof- and Surge-Loss Estimation in Hurricanes. J. Perform. Constr. Facil., 28 (2): 206\u2013215. https://doi.org/10.1061/(ASCE)CF.1943-5509.0000397.", + "peng2013": "Peng, J. 2013. Modeling natural disaster risk management: Integrating the roles of insurance and retrofit and multiple stakeholder perspectives. Ph.D. United States -- Delaware: University of Delaware.", + "puga2015": "Puga, H., B. A. Olmos, L. Olmos, J. M. Jara, and M. Jara. 2015. Damage assessment of curtain wall glass. J. Phys.: Conf. Ser., 628 (1): 012052. IOP Publishing. https://doi.org/10.1088/1742-6596/628/1/012052.", + "reed1996": "Reed, T. D., D. V. Rosowsky, and S. D. Schiff. 1996. Roof rafter to top-plate connections in coastal residential construction. 458\u2013465.", + "reed1997": "Reed, T. D., D. V. Rosowsky, and S. D. Schiff. 1997. Uplift Capacity of Light-Frame Rafter to Top Plate Connections. Journal of Architectural Engineering, 3 (4): 156\u2013163. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)1076-0431(1997)3:4(156).", + "rosowsky1996": "Rosowsky, D., and S. Schiff. 1996. Probabilistic Modeling of Roof Sheathing Uplift Capacity. Probabilistic Mechanics and Structural Reliability.", + "rosowsky1999": "Rosowsky, D. V., and N. Cheng. 1999. Reliability of Light-Frame Roofs in High-Wind Regions. I: Wind Loads. Journal of Structural Engineering, 125 (7): 725\u2013733. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)0733-9445(1999)125:7(725).", + "shanmugam2009": "Shanmugam, B., B. G. Nielson, and D. O. Prevatt. 2009. Statistical and analytical models for roof components in existing light-framed wood structures. Engineering Structures, 31 (11): 2607\u20132616. https://doi.org/10.1016/j.engstruct.2009.06.009.", + "shdid2011": "Shdid, C. A., A. Mirmiran, T.-L. Wang, D. Jimenez, and P. Huang. 2011. Uplift Capacity and Impact Resistance of Roof Tiles. Pract. Period. Struct. Des. Constr., 16 (3): 121\u2013129. https://doi.org/10.1061/(ASCE)SC.1943-5576.0000081.", + "shen2013": "Shen, Y. 2013. Assessing the wind resistance of sectional door systems for facilities in hurricane-prone areas through full- and component-scale experimental methods and finite element analysis. Ph.D. United States -- Florida: University of Florida.", + "unnikrishnan2017": "Unnikrishnan, V. U., and M. Barbato. 2017. Multihazard Interaction Effects on the Performance of Low-Rise Wood-Frame Housing in Hurricane-Prone Regions. Journal of Structural Engineering, 143 (8): 04017076. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)ST.1943-541X.0001797.", + "vickery2006": "Vickery, P. J., P. F. Skerlj, J. Lin, L. A. Twisdale, M. A. Young, and F. M. Lavelle. 2006. HAZUS-MH Hurricane Model Methodology. II: Damage and Loss Estimation. Nat. Hazards Rev., 7 (2): 94\u2013103. https://doi.org/10.1061/(ASCE)1527-6988(2006)7:2(94).", + "yau2011": "Yau, S. C. 2011. Wind Hazard Risk Assessment and Management for Structures. Ph.D. United States -- New Jersey: Princeton University." + }, + "RWC.001": { + "Description": "Roof-Wall Connection - General fragility", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft) and a roof type of 6:12 slope gable roof without overhang. Roof sheathing panels are nailed at a spacing of 150mm at the edges. The steel fasteners used are assumed to be hot-dip galvanized to ASTM A153, Class D, with a zinc coating thickness of 43 mm. Panels are nailed to structural trusses or rafters made of spruce-pine-fir (SPF) lumber, spaced 0.6m on center with a specific gravity of 0.36. \n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.straps.001": { + "Description": "Roof-Wall Connection with Straps", + "Comments": "The modeled failure mode related to this component would be the failure of the roof-to-wall connection under wind-induced uplift loads, potentially leading to roof deck or even complete roof failure, which are defined within the damage state descriptions. The installation of roof-to-wall straps is considered a mitigation option within the HAZUS-MH model, specifically for single-family residential buildings that currently have toe-nailed roof-wall connections. \n\nLIMITATIONS: A limitation of this capacity function, as with other component resistances in the model, lies in the fact that these are statistical representations based on laboratory data, engineering analyses, and sometimes engineering judgment. Additionally, they do not give a detailed physical description of the straps themselves, such as their dimensions, material, or specific installation methods. The focus is on the functional capacity of the connection rather than a precise engineering specification of the strap itself. The underlying details of what constitutes a \"strap\" in the model's calculations are likely based on engineering standards and typical construction practices, but these specifics are not elaborated upon in the provided excerpts.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.001b": { + "Description": "Roof-Wall Connection with Toe nails", + "Comments": "The toe nail only configuration was investigated in individual connection test series 1 and system tests 1 and 2. In the individual tests, the connection consisted of three 8d toenails between the rafter and the top plate, and the predominant failure mode was nail pullout from the top plate. In the system tests, where multiple rafters were toe-nailed to a continuous top plate, load-sharing behavior was observed, with the equivalent rafter load exceeding the capacity of the individual toe-nailed connection. However, the ultimate capacities remained low compared to connections with straps or adhesives.\n\nLIMITATIONS: The high variability observed in individual tests suggests a limitation in the predictability of these connections in both individual and repetitive systems.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997", + "shanmugam2009" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.001c": { + "Description": "Roof-Wall Connection with Toe nails", + "Comments": "For configurations with toe-nailed roof-to-wall connections, the model would consider the uplift resistance provided by this type of connection. The failure mode modeled would be the failure of the toe-nailed connection under wind-induced uplift forces, which could lead to subsequent damage such as roof cover loss, roof deck failure, or even more severe structural damage. The model implicitly recognizes the relative weakness of toe-nailed connections compared to strapped connections by considering the installation of straps as a mitigation measure for buildings with existing toe-nailed connections.\n\nLIMITATIONS: The provided sources do not explicitly detail specific test series for roof-to-wall connections using toe nails. The capacity function for toe-nailed connections is a statistical representation of their resistance, derived from laboratory test data, engineering analyses, and potentially engineering judgment, as mentioned for other building components. A key limitation of this capacity function is that it represents a simplified model of a complex failure mechanism and relies on statistical data which may not fully capture the variability in actual construction practices and the performance of toe-nailed connections under diverse hurricane conditions.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.001": { + "Description": "Roof-Wall Connection with Toe nails and a small strap inside", + "Comments": "The small strap is located on the inside of the wall. This connection was constructed with three 8d toenails between the rafter and the top plate, along with a small 18-gauge galvanized steel strap with five short 8d nails into the rafter and five 8d nails into the top plate, installed on the inside face of the wall. The predominant failure modes observed were strap tear, rafter split, and nail pullout of the rafter.\n\nLIMITATIONS: A key limitation highlighted in the study is that placing the strap on the inside of the wall reduces the uplift capacity compared to an outside installation due to the resulting eccentric load path and rotation of the top plate.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.002": { + "Description": "Roof-Wall Connection with Toe nails and a small strap outside", + "Comments": "The small strap is located on the outside of the wall. This connection involved three 8d toenails between the rafter and the top plate, combined with a small 18-gauge galvanized steel strap secured with five short 8d nails into the rafter and five 8d nails into the top plate, installed on the outside face of the wall. The predominant failure modes observed were strap tear and nail pullout of the rafter.\n\nLIMITATIONS: A limitation to note is that while this configuration showed higher uplift capacity than when the strap was installed on the inside, the capacity data is still specific to the idealized test setup and may vary in actual as-built conditions. Furthermore, the study highlights that manufacturers' published values may differ due to their reliance on ASTM testing procedures and safety factors.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.003": { + "Description": "Roof-Wall Connection with Toe nails and small straps on both sides", + "Comments": "Two small straps are installed, one inside and one outside of the wall. This setup consisted of three 8d toenails between the rafter and the top plate, supplemented by two small 18-gauge galvanized steel straps, each secured with five short 8d nails into the rafter and five 8d nails into the top plate, with one strap installed on the inside of the wall and the other on the outside. The predominant failure modes reported for this configuration were strap tear and nail pullout of the top plate. \n\nLIMITATIONS: A limitation to consider is that while this configuration significantly increased the uplift capacity compared to a single strap, the capacity was not doubled, suggesting potential interaction or non-linear behavior when using multiple straps. Additionally, system tests 9 and 11 explored this configuration in a repetitive system, but did not reach failure at the rafter to top plate connections, as failure occurred in the crib wall, which limits the ultimate capacity data specifically for the connection itself in those system tests.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.004": { + "Description": "Roof-Wall Connection with Toe nails, a small strap outside, and plywood nailed.", + "Comments": "The small strap is located on the outside of the wall. A plywood is nailed to the plate on the wall as spacer. This connection consisted of three 8d toenails between the rafter and the double top plate, along with a small 18-gauge galvanized steel strap secured with five short 8d nails into the rafter and five 8d nails into the top plate, installed on the outside of the wall. Additionally, a plywood spacer was placed between the strap and the top plate and was nailed to the top plate. The predominant failure mode observed in this test series was strap tear.\n\nLIMITATIONS: A limitation to consider is that while this test aimed to simulate the presence of wall sheathing, the way the plywood spacer was implemented and nailed might not fully replicate the complex interactions of a full wall sheathing system in a real structure. Additionally, the results are from individual connection tests and may not directly translate to the behavior in a continuous roof system.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.005": { + "Description": "Roof-Wall Connection with Toe nails, a small strap outside, and plywood not nailed.", + "Comments": "The small strap is located on the outside of the wall. A plywood is installed as spacer but not nailed to the plate on the wall. This connection involved three 8d toenails between the rafter and the double top plate, along with a small 18-gauge galvanized steel strap secured with five short 8d nails into the rafter and five 8d nails into the top plate, installed on the outside face of the wall. A plywood spacer was placed between the strap and the top plate but was not nailed to the plate. The predominant failure mode observed in this test series was nail pullout.\n\nLIMITATIONS: A limitation to consider is that the un-nailed plywood spacer's effect on the connection's behavior and uplift capacity might differ from the behavior observed with a fully integrated and nailed wall sheathing system in a real-world scenario. Additionally, these results are specific to individual connection tests and may not fully represent the performance within a continuous roof system where load-sharing can occur.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.006": { + "Description": "Roof-Wall Connection with Toe nails and a large strap outside", + "Comments": "The large strap is located on the outside of the wall. This connection consisted of three 8d toenails between the rafter and the top plate, combined with a large 18-gauge galvanized steel strap secured with eight short 8d nails into the rafter and eight 8d nails into the top plate; importantly, the rafter was sandwiched between two small flanges bent from the metal plate. The predominant failure mode observed for this configuration was nail pullout of the top plate. \n\nLIMITATIONS: A limitation to consider is that these results are derived from individual connection tests, and the behavior and capacity might differ in a full roof system due to potential load-sharing effects with adjacent connections and the presence of sheathing and other structural elements.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.straps.007": { + "Description": "Roof-Wall Connection with Toe nails and a large strap inside", + "Comments": "The large strap is located on the inside of the wall. This connection was constructed with three 8d toenails between the rafter and the top plate, along with a new large 16-gauge galvanized steel strap secured with eight short 8d nails into the rafter and eight short 8d nails into the wall stud (spruce-pine-fir), with the strap located on the inside of the wall. The predominant failure mode observed for this configuration was block shear in wood. \n\nLIMITATIONS: A key limitation to consider is that this \"new large strap\" provided a direct connection from the rafter to the wall stud, bypassing the top plate for the strap's nailed connection, which is different from typical large straps that connect to the top plate. Additionally, as with all individual connection tests, the results may not fully reflect the behavior in a complete roof system where load-sharing and the presence of sheathing can influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.epoxy.001": { + "Description": "Roof-Wall Connection with Epoxy.", + "Comments": "Epoxy set for one week, no toe nails used. This connection was formed by applying a two-part, hand-mixed epoxy paste between the rafter and the top plate, and allowing it to cure for one week without the use of any toe nails. The predominant failure modes observed in this series were rafter split and top-plate fibers pulling apart. \n\nLIMITATIONS: A key limitation of this data is the high variability, which suggests that the capacity of such connections may be less predictable compared to mechanically fastened connections. Additionally, the performance of adhesive connections can be sensitive to factors such as surface preparation, application technique, and environmental conditions during curing, which may not have been fully captured in this controlled laboratory setting.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.epoxy.001": { + "Description": "Roof-Wall Connection with Toe nails and epoxy.", + "Comments": "Epoxy set for one week, toe-nailed when epoxy is wet. This connection was created by applying a two-part, hand-mixed epoxy paste between the rafter and the top plate, similar to the adhesive-only connections, but with the addition of three 8d toenails that were installed while the epoxy was still wet. The predominant failure mode observed in this test series was top-plate fibers pulling apart.\n\nLIMITATIONS: A key limitation to consider is the relatively high variability in the capacity data, as indicated by the COV, suggesting that the strength of these combined adhesive and nailed connections might not be consistently predictable. Additionally, the specific interaction between the wet epoxy and the toenails during the curing process and under load might introduce complexities not fully captured in this testing scenario, and the results are specific to this particular epoxy product and application method.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.epoxy.002": { + "Description": "Roof-Wall Connection with Toe nails and epoxy on small wood blocks.", + "Comments": "Epoxy set for one week. This connection involved three 8d toe nails along with epoxy applied to small wood blocks (approximately 38 x 89 mm) made of either spruce-pine-fir or Southern pine, which were placed between the rafter and the top plate. The epoxy was allowed to set for one week before testing. The predominant failure modes observed were rafter split, tearing of top-plate and rafter fibers, failure of wood block fibers, and epoxy failure.\n\nLIMITATIONS: A limitation of this test series is that the use of small, standardized wood blocks as a retrofit method might not fully represent the variety of conditions and block sizes encountered in actual retrofit applications. Additionally, the one-week epoxy set time represents a specific curing period, and the performance might differ with shorter or longer cure times or different epoxy products.\n\nSTUDY TYPE: Experiment\n", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.epoxy.003": { + "Description": "Roof-Wall Connection with Toe nails and epoxy on small wood blocks.", + "Comments": "Epoxy set for 24-48 hrs. This connection included three 8d toe nails along with epoxy applied to small wood blocks (approximately 38 x 89 mm) made of either spruce-pine-fir or Southern pine, placed between the rafter and the top plate. The epoxy was allowed to set for only 24 to 48 hours before testing1 . The predominant failure modes observed were rafter split, tearing of top-plate and rafter fibers, failure of wood block fibers, and epoxy failure.\n\nLIMITATIONS: A limitation to consider for this test series is that the use of standardized small wood blocks for retrofit might not fully represent the diverse conditions and sizes of blocks used in actual retrofit scenarios. Furthermore, the relatively short 24-48 hour epoxy set time represents a specific curing period, and the connection's performance might vary with different epoxy products or if allowed to cure for a longer or shorter duration. As with other individual connection tests, these results might not entirely reflect the behavior within a complete roof system where load sharing and other structural elements can influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.epoxy.004": { + "Description": "Roof-Wall Connection with Toe nails and epoxy on large wood blocks.", + "Comments": "Epoxy set for one week. This connection consisted of three 8d toe nails in addition to epoxy applied to large wood blocks (approximately 89 x 89 mm) made of pressure-treated Southern pine, which were installed between the rafter and the top plate. The epoxy was allowed to cure for one week before the connections were tested. The predominant failure modes observed in this test series were top-plate and rafter fiber tear, and wood block split.\n\nLIMITATIONS: A limitation to consider for this test series is that the use of standardized large wood blocks for retrofit might not fully represent the variety of conditions and sizes of blocks encountered in actual retrofit applications. Furthermore, the one-week epoxy set time is a specific condition, and the performance might differ with various epoxy products or if allowed to cure for a different duration. As with all individual connection tests, the results might not entirely reflect the behavior within a complete roof system where load sharing and other structural elements can influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.adhesive.001": { + "Description": "Roof-Wall Connection with Toe nails and acrylic adhesive", + "Comments": "Adhesive set for one week, toe-nailed when adhesive is wet. This connection involved the application of a two-part acrylic adhesive through a diffuser nozzle between the rafter and the top plate, and then immediately followed by the installation of toe nails. The adhesive was allowed to set for one week before testing. The predominant failure modes observed in this test series were toe-nail pullout and top-plate fiber tear.\n\nLIMITATIONS: A limitation to consider is that the results are based on individual connection tests and may not reflect the behavior in a complete roof system where load-sharing with adjacent connections and the presence of sheathing could influence the overall performance. Additionally, the performance observed is specific to the type of acrylic adhesive used and the condition of installing toe nails while the adhesive was wet, and may vary with different adhesives or installation techniques.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.adhesive.002": { + "Description": "Roof-Wall Connection with Toe nails and soaked with acrylic adhesive.", + "Comments": "Wood first soaked for 24 hours, then toe-nailed when adhesive is wet. In this setup, the wood members (rafter and top plate) were first soaked for 24 hours prior to the application of a two-part acrylic adhesive through a diffuser nozzle between them, followed immediately by the installation of toe nails. The adhesive was then allowed to set for one week before the uplift capacity was tested. The predominant failure modes observed in this test series were toe-nail pullout and top-plate fiber tear.\n\nLIMITATIONS: A significant limitation of this data is the high coefficient of variation, indicating considerable variability in the uplift capacity achieved. Furthermore, the specific condition of soaking the wood for 24 hours prior to connection might influence the adhesive's bonding properties and the wood's strength, making these results specific to this pre-treatment and potentially not representative of typical construction conditions. As with other individual connection tests, the results may not fully capture the behavior of such connections within a complete roof system where load sharing and the presence of sheathing can play a role.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.adhesive.003": { + "Description": "Roof-Wall Connection with Toe nails and acrylic adhesive on small wood blocks.", + "Comments": "Adhesive set for one week. This connection was created using three 8d toe nails along with a two-part acrylic adhesive applied through a diffuser nozzle to small wood blocks (approximately 38 x 89 mm) made of either spruce-pine-fir or Southern pine, which were placed between the rafter and the top plate. The acrylic adhesive was allowed to set for one week before the connections were tested. The predominant failure modes observed in this test series were rafter split and top-plate fiber tear.\n\nLIMITATIONS: A limitation of this test series is that the use of standardized small wood blocks as a retrofit method might not fully represent the variety of conditions and block sizes encountered in actual retrofit applications. Furthermore, the one-week adhesive set time represents a specific curing period, and the performance might differ with various acrylic adhesive products or if allowed to cure for a different duration. As with all individual connection tests, these results might not entirely reflect the behavior within a complete roof system where load sharing and other structural elements can influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.adhesive.004": { + "Description": "Roof-Wall Connection with Toe nails and 1/4 inch acrylic adhesive bead", + "Comments": "This connection consisted of three 8d toe nails along with a 1/4 inch bead of acrylic adhesive applied on either side of the rafter along the top plate. The adhesive was allowed to set for one week before the uplift capacity was tested. The predominant failure mode observed in this test series was wood fiber failure.\n\nLIMITATIONS: A limitation of this test series is that the connection method using small adhesive beads might not provide a substantial contact area compared to other adhesive applications, potentially limiting the overall uplift capacity. Furthermore, the performance is specific to the application of a 1/4 inch acrylic adhesive bead and might differ with varying bead sizes or other adhesive products. As with other individual connection tests, these results may not entirely reflect the behavior within a complete roof system where load sharing and the presence of sheathing could influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.adhesive.005": { + "Description": "Roof-Wall Connection with Toe nails and 1/2 inch acrylic adhesive bead", + "Comments": "This connection was created using three 8d toe nails along with a 1/2 inch bead of acrylic adhesive applied on either side of the rafter along the top plate. The adhesive was allowed to set for one week before the uplift capacity was tested. The predominant failure mode observed in this test series was wood fiber failure.\n\nLIMITATIONS: A limitation of this test series is that the connection method using small adhesive beads might not provide a substantial contact area compared to other adhesive applications, potentially limiting the overall uplift capacity, and the relatively high coefficient of variation indicates considerable variability in the achieved uplift capacity. Furthermore, the performance is specific to the application of a 1/2 inch acrylic adhesive bead and might differ with varying bead sizes or other adhesive products. As with other individual connection tests, these results may not entirely reflect the behavior within a complete roof system where load sharing and the presence of sheathing could influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.adhesive.006": { + "Description": "Roof-Wall Connection with Toe nails and foaming polyurethane adhesive.", + "Comments": "This connection consisted of three 8d toe nails along with a foaming polyurethane adhesive product generously applied using an air pressure gun to form large fillets between the rafter and the top plate. The adhesive was allowed to set for one week before the uplift capacity was tested. The predominant failure mode observed in this test series was adhesive shear.\n\nLIMITATIONS: A limitation of this test series is the small sample size of only three specimens, which might not provide a comprehensive understanding of the connection's behavior and could affect the statistical significance of the results. Furthermore, the performance is specific to the foaming polyurethane adhesive product used and the application method of forming large fillets, and might vary with different products or application techniques. As with other individual connection tests, these results may not entirely reflect the behavior within a complete roof system where load sharing and the presence of sheathing could influence the overall capacity.\n\nSTUDY TYPE: Experiment", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.hurricane_clip.001a": { + "Description": "Roof-Wall Connection with Hurricane Clip H2.5.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "canfield1991" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.hurricane_clip.001b": { + "Description": "Roof-Wall Connection with Hurricane Clip H2.5.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "canfield1991" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.003": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.004": { + "Description": "Roof-Wall Connection with Toe nails, 3-8d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.005": { + "Description": "Roof-Wall Connection with Toe nails, 3-16d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "jain2020", + "shanmugam2009" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006a": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006b": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006c": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "WIN.regular.001b": { + "Description": "Regular Window - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "unnikrishnan2017", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.001c": { + "Description": "Regular Window - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.002a": { + "Description": "Regular Window on windward wall", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.002b": { + "Description": "Regular Window on non-windward wall", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.003a": { + "Description": "Window on a 1-story building", + "Comments": "This capacity function is used for all windows on a 1-story home. Modeled failure modes for windows on a 1-story building include pressure-induced breakage when the wind load exceeds the window's pressure resistance.\n\nLIMITATIONS: This study does not explicitly specify the type of glass (e.g., annealed, tempered). A limitation of these capacity functions is that they are statistical representations based on laboratory test data, engineering analyses, and in some cases engineering judgment, which may not fully capture the complexities of real-world window installations, the variability in material properties, and the diverse characteristics of windborne debris. The model also simplifies by considering representative building geometries and may not account for specific details of individual windows on a given 1-story structure. The specific size of the window described in the capacity function is not mentioned.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.003b": { + "Description": "Window on a 2-story building with 2 large windows", + "Comments": "This capacity function is used for all windows on a 2-story home. Modeled failure modes for windows on a 2-story building include pressure-induced breakage when the wind load exceeds the window's pressure resistance.\n\nLIMITATIONS: This study does not explicitly specify the type of glass (e.g., annealed, tempered). A limitation of these capacity functions is that they are statistical representations based on laboratory test data, engineering analyses, and in some cases engineering judgment, which may not fully capture the complexities of real-world window installations, the variability in material properties, and the diverse characteristics of windborne debris. The model also simplifies by considering representative building geometries and may not account for specific details of individual windows on a given 2-story structure. The specific size of the window described in the capacity function is not mentioned.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.004": { + "Description": "Regular Window 1/8 in 20 sq ft", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft). A window size of 3.72 square meters with 3.175 mm thick glass was considered. The authors used the American Society of Testing and Materials (ASTM) Standard E-1300 (2003) to specify the strength of annealed glass under uniform wind pressure with a 60-second load duration and a probability of failure of 0.0081. The 60-second resistance value of annealed glass was converted to a 3-second strength by multiplying it by a factor of 1.21. This conversion was done to be consistent with the 3-second gust wind used in ASCE-7. A Weibull cumulative distribution was used to model the probability of failure of the brittle material (glass) under uniform wind load. This is stated as a common model for defining the failure probability of brittle materials like glass. The coefficient of variation of glass strength was noted to be in the range of 0.22\u20130.27.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. Finally, the fragility analysis mentions a specific window size (3.175 mm in 3.72 sq. m window) for calibration. Glass strength is known to be dependent on size and boundary conditions, so the fragility derived for this specific size might not be directly applicable to windows of different dimensions or mounting.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006", + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.005a": { + "Description": "Regular Window 3/16 in 40 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.005b": { + "Description": "Regular Window 3/16 in 40 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.006": { + "Description": "Regular Window 3/16 in 20 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.007": { + "Description": "Regular Window small sized (3.5' x 3.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "barbato2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.008": { + "Description": "Regular Window medium sized (3.5' x 5.0')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.009": { + "Description": "Regular Window tall sized (3.5' x 6.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.010": { + "Description": "Regular Window picture size (6.5' x 6.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "DOOR.regular.001b": { + "Description": "Regular Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Door panel torn from hinges" + } + } + } + }, + "DOOR.regular.001c": { + "Description": "Regular Door - General fragility", + "Comments": "This is the general representation of an entry door's resistance to pressure. The primary failure mode considered for the entry door under pressure is pressure-induced failure, where the wind load acting on the door exceeds its resistance capacity, leading to a breach in the building envelope. This breach can then affect internal pressure and potentially lead to further damage.\n\nLIMITATIONS: The sources do not explicitly specify the precise type of entry door that this capacity function considers. Resistances assigned to building components are based on results from laboratory test data, engineering analyses coupled with laboratory data, and in some cases, engineering judgment. The model might not fully capture the wide variety of entry door constructions, installation methods, the condition of the door and its frame, or the complexities of failure mechanisms that can occur during a hurricane. Further, the lack of specific details about the test series or engineering analyses used to derive these fragility parameters for entry doors, makes it difficult to fully understand the empirical or analytical basis for this specific capacity function.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Door panel torn from hinges" + } + } + } + }, + "DOOR.glass.001a": { + "Description": "Glass Door", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft). The authors used the American Society of Testing and Materials (ASTM) Standard E-1300 (2003) to specify the strength of annealed glass under uniform wind pressure with a 60-second load duration and a probability of failure of 0.0081. The 60-second resistance value of annealed glass was converted to a 3-second strength by multiplying it by a factor of 1.21. This conversion was done to be consistent with the 3-second gust wind used in ASCE-7. A Weibull cumulative distribution was used to model the probability of failure of the brittle material (glass) under uniform wind load. This is stated as a common model for defining the failure probability of brittle materials like glass. The coefficient of variation of glass strength was noted to be in the range of 0.22\u20130.27.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. ASTM E-1300 specifies strength under uniform wind pressure. However, wind loads on buildings, especially during hurricanes, can be complex and non-uniform, with varying pressures at different locations on a window. Additionally, while the study converts the 60-second resistance to a 3-second strength, this conversion factor is an approximation. The actual behavior of glass under different load durations might be more complex. Additionally, the strength of weathered or previously damaged glass might be lower than that of new, undamaged glass, which is likely what ASTM standards address. This time-dependent degradation of glass strength is not explicitly considered.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "DOOR.glass.001b": { + "Description": "Glass Door", + "Comments": "This is the general representation of single-glazed (SG) doors as a specific type of door component, which would include sliding glass doors with single panes of glass. The primary failure mode considered for the SG door under pressure is pressure-induced failure, where the wind load acting on the door exceeds its resistance capacity, leading to a breach in the building envelope. This breach can then affect internal pressure and potentially lead to further damage.\n\nLIMITATIONS: The sources do not explicitly specify the precise type of entry door that this capacity function considers. Resistances assigned to building components are based on results from laboratory test data, engineering analyses coupled with laboratory data, and in some cases, engineering judgment. The model might not fully capture the wide variety of SG door constructions, installation methods, the condition of the door and its frame, or the complexities of failure mechanisms that can occur during a hurricane. Further, the lack of specific details about the test series or engineering analyses used to derive these fragility parameters for SG doors, makes it difficult to fully understand the empirical or analytical basis for this specific capacity function.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "DOOR.regular.002": { + "Description": "Regular Door 6'10\" x 3'2\" size", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Door panel torn from hinges" + } + } + } + }, + "DOOR.garage.001b": { + "Description": "Garage Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shen2013", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.001c": { + "Description": "Garage Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.001d": { + "Description": "Garage Door - General fragility", + "Comments": "This fragility describes the interior garage door. It is treated as a general category of a door located within the building, separating the garage space from the interior living space.\n\nLIMITATIONS: The capacity function represents a simplification of real-world door behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of garage door. The model also does not explicitly account for potential vulnerabilities related to the door's connection to the surrounding wall or the operation of the garage door mechanism itself under pressure loads.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.003": { + "Description": "2-car Garage Door (6'10\" x 12\")", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.004a": { + "Description": "Double garage door - weak", + "Comments": "The primary modeled failure mode for this component is pressure-induced failure, occurring when the wind load exceeds this resistance, leading to a breach in the building envelope. The distinction between \"weak\" and \"strong\" double garage doors within the model implies different construction or reinforcement levels, resulting in varying resistance to pressure, although the sources do not provide specific details on the structural characteristics that differentiate them\n\nLIMITATIONS: \n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.004b": { + "Description": "Double garage door - strong", + "Comments": "The primary modeled failure mode for this component is pressure-induced failure, occurring when the wind load exceeds this resistance, leading to a breach in the building envelope. The distinction between \"weak\" and \"strong\" double garage doors within the model implies different construction or reinforcement levels, resulting in varying resistance to pressure, although the sources do not provide specific details on the structural characteristics that differentiate them\n\nLIMITATIONS: The capacity function represents a simplification of real-world door behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of garage door.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "WSH.001a": { + "Description": "Wall Sheathing - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.001b": { + "Description": "Wall Sheathing - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.002a": { + "Description": "Wall Sheathing - 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.002b": { + "Description": "Wall Sheathing - 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.003a": { + "Description": "Wall Sheathing - 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.003b": { + "Description": "Wall Sheathing - 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WALL.001a": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Shear failure" + } + } + } + }, + "WALL.001b": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Lateral failure (connection)" + } + } + } + }, + "WALL.001c": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Lateral failure (additional)" + } + } + } + }, + "WALL.001d": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift (connection)" + } + } + } + }, + "WALL.001e": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift (additional)" + } + } + } + }, + "WALL.004a": { + "Description": "Concrete block", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Shear failure" + } + } + } + }, + "WALL.004b": { + "Description": "Concrete block", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift" + } + } + } + }, + "RSH.nails.6d.6p12.001": { + "Description": "Roof Sheathing with 6d nails @ 6/12 in", + "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, a \"6d\" nail is a common size, typically referring to a nail that is approximately 2 inches (51 mm) long. The diameter will also be standardized for this penny size. While the HAZUS model uses \"6d\" to differentiate between different roof sheathing connection strengths. 6/12 in nail pattern for roof sheathing with 6d nails most likely means that the 6d nails are spaced 6 inches apart along one axis of the sheathing panel and 12 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure.\n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p6.001": { + "Description": "Roof Sheathing with 8d nails @ 6/6 in", + "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, an \"8d\" nail is a common size, typically referring to a nail that is approximately 2 1/2 inches (64 mm) long, and it will have a standardized diameter for this penny size. While the HAZUS model uses \"8d\" to differentiate between different roof sheathing connection strengths. 6/6 in nail pattern for roof sheathing with 8d nails most likely means that the 8d nails are spaced 6 inches apart along one axis of the sheathing panel and 6 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure.\n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001a": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1996", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001b": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001c": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, an \"8d\" nail is a common size, typically referring to a nail that is approximately 2 1/2 inches (64 mm) long, and it will have a standardized diameter for this penny size. While the HAZUS model uses \"8d\" to differentiate between different roof sheathing connection strengths. 6/12 in nail pattern for roof sheathing with 6d nails most likely means that the 8d nails are spaced 6 inches apart along one axis of the sheathing panel and 12 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure. \n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.002": { + "Description": "Roof Sheathing with 6d common nails (2.375\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003a": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003b": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1996", + "rosowsky1999", + "lee2005", + "li2006", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003c": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p6.001": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002a": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002b": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002c": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p8.001": { + "Description": "Roof Sheathing with 8d common nails (2.5 in length) @ 6/8 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p6.002": { + "Description": "Roof Sheathing with 8d common nails (2.5 in length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.003": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p8.002": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/8 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p6.003": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.001": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.6d.6p12.001": { + "Description": "Roof Sheathing with 6d common nails @ 6/12 in and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.001": { + "Description": "Roof Sheathing with no nails and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.002": { + "Description": "Roof Sheathing with no nails and a fillet plus 0.5 in coverage ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.002": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a 3 in full coverage ccSPF application with 24-39 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.6d.6p12.002": { + "Description": "Roof Sheathing with 6d common nails @ 6/12 in and a 3 in full coverage ccSPF application with 19-20 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.003": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a 3 in full coverage ccSPF application with 129-130 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.003": { + "Description": "Roof Sheathing with no nails and a 3 in full coverage ccSPF application with 12-15 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.001a": { + "Description": "Wall Cover - General fragility, lower end", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "abdelhady2022" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.001b": { + "Description": "Wall Cover - General fragility, higher end", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "abdelhady2022" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.002": { + "Description": "Wall Cover with Vinyl Siding", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.003": { + "Description": "Wall Cover with Curtain Walls 30 sq ft size and 6:5 aspect ratio", + "SuggestedComponentBlockSize": "30 ft2", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "puga2015", + "angeles2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Curtain wall torn off" + } + } + } + }, + "RCOV.tiles.clay.001": { + "Description": "Roof Cover - Clay Tiles with adhesive", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft) and a roof type of 6:12 slope gable roof without overhang. The roof covering is adhesive-set clay tiles with parameters determined from published experimental studies.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. Though the tiles' fragilities are taken from experimental data, the authors acknowledge this is among the first to analyze the fragility of clay tiles, implying there's a lack of established comparison data.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011", + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of foam from ridge board" + } + } + } + }, + "RCOV.tiles.concrete.001": { + "Description": "Roof Cover - Concrete Tiles with adhesive", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of ridge tile from foam" + } + } + } + }, + "RCOV.tiles.clay.002": { + "Description": "Roof Cover - Clay Tiles with mortar", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of field tile from mortar" + } + } + } + }, + "RCOV.tiles.concrete.002": { + "Description": "Roof Cover - Concrete Tiles with mortar", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of ridge tile from mortar" + } + } + } + }, + "RCOV.shingles.001b": { + "Description": "Roof Cover - Asphalt Shingles with standard construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RCOV.shingles.002a": { + "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RCOV.shingles.002b": { + "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + } +} \ No newline at end of file diff --git a/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility4.txt b/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility4.txt new file mode 100644 index 00000000..37279ffb --- /dev/null +++ b/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility4.txt @@ -0,0 +1,1448 @@ +{ + "_GeneralInformation": { + "ShortName": "SimCenter Hurricane Wind Component Library", + "Description": "This dataset is a collection of component-level damage models from the literature and public resources. Every entry has one or more corresponding publications identified that provide more information about its calibration and application limits.", + "Version": "0.1", + "ComponentGroups": { + "RWC - Roof-Wall Connection": { + "RWC.epoxy - Epoxy only": [], + "RWC.hurricane_clip - Hurricane Clip": [], + "RWC.straps - Straps only": [], + "RWC.toe_nail - Toe nail": [ + "RWC.toe_nail.straps - Toe nail with straps", + "RWC.toe_nail.epoxy - Toe nail with epoxy", + "RWC.toe_nail.adhesive - Toe nail with adhesive" + ] + }, + "WIN - Window": [ + "WIN.regular - Regular", + "WIN.impact_resistant - Impact Resistant", + "WIN.shutters - Hurricane Shutters Installed" + ], + "DOOR - Door": [ + "DOOR.regular - Regular", + "DOOR.glass - Glass", + "DOOR.impact_resistant - Impact Resistant", + "DOOR.shutters - Hurricane Shutters Installed", + "DOOR.garage - Garage" + ], + "RSH - Roof Sheathing": { + "RSH.nails - With Nails": [ + "RSH.nails.6d - 6d size", + "RSH.nails.8d - 8d size" + ], + "RSH.ccspf - With closed-cell Sprayed Polyurethane Foam": [], + "RSH.nails_ccspf - With Nails and ccSPF": [ + "RSH.nails_ccsp.6d - 6d size", + "RSH.nails_ccsp.8d - 8d size" + ] + }, + "WSH - Wall Sheathing": [], + "WALL - Wall": [], + "WCOV - Wall Cover": [], + "RCOV - Roof Cover": [ + "RCOV.tiles - Tiles", + "RCOV.shingles - Shingles" + ] + } + }, + "References": { + "abdelhady2022": "Abdelhady, A. U., S. M. J. Spence, and J. McCormick. 2022. Risk and fragility assessment of residential wooden buildings subject to hurricane winds. Structural Safety, 94: 102137. https://doi.org/10.1016/j.strusafe.2021.102137.", + "angeles2021": "Angeles, K., D. Patsialis, A. A. Taflanidis, T. L. Kijewski-Correa, A. Buccellato, and C. Vardeman. 2021. Advancing the Design of Resilient and Sustainable Buildings: An Integrated Life-Cycle Analysis. J. Struct. Eng., 147 (3): 04020341. https://doi.org/10.1061/(ASCE)ST.1943-541X.0002910.", + "barbato2013": "Barbato, M., F. Petrini, V. U. Unnikrishnan, and M. Ciampoli. 2013. Performance-Based Hurricane Engineering (PBHE) framework. Structural Safety, 45: 24\u201335. https://doi.org/10.1016/j.strusafe.2013.07.002.", + "canfield1991": "Canfield, L., S. Niu, and H. Liu. 1991. Uplift resistance of various rafter-wall connections. Forest Products Journal.", + "cheng2004": "Cheng, J. 2004. Testing and analysis of the toe-nailed connection in the residential roof-to-wall system. Forest Products Journal, 54: 58\u201365.", + "cope2004": "Cope, A. D. 2004. Predicting the vulnerability of typical residential buildings to hurricane damage. University of Florida.", + "datin2011": "Datin, P. L., D. O. Prevatt, and W. Pang. 2011. Wind-Uplift Capacity of Residential Wood Roof-Sheathing Panels Retrofitted with Insulating Foam Adhesive. J. Archit. Eng., 17 (4): 144\u2013154. https://doi.org/10.1061/(ASCE)AE.1943-5568.0000034.", + "dong2016": "Dong, Y., and Y. Li. 2016. Risk-based assessment of wood residential construction subjected to hurricane events considering indirect and environmental loss. Sustainable and Resilient Infrastructure, 1 (1\u20132): 46\u201362. Taylor & Francis. https://doi.org/10.1080/23789689.2016.1179051.", + "grayson2013": "Grayson, J. M., W. Pang, and S. Schiff. 2013. Building envelope failure assessment framework for residential communities subjected to hurricanes. Engineering Structures, 51: 245\u2013258. https://doi.org/10.1016/j.engstruct.2013.01.027.", + "gurley2005": "Gurley, K., J. P. Pinelli, C. Subramanian, A. Cope, L. Zhang, J. Murphree, A. Artiles, P. Misra, S. Gulati, and E. Simiu. 2005. Florida Public Hurricane Loss Projection Model engineering team final report volume II: Predicting the vulnerability of typical residential buildings to hurricane damage. Technical report. Florida International University: International Hurricane Research Center.", + "jain2020": "Jain, A., A. A. Bhusar, D. B. Roueche, and D. O. Prevatt. 2020. Engineering-Based Tornado Damage Assessment: Numerical Tool for Assessing Tornado Vulnerability of Residential Structures. Front. Built Environ., 6. Frontiers. https://doi.org/10.3389/fbuil.2020.00089.", + "kakareko2021": "Kakareko, G., S. Jung, S. Mishra, and O. A. Vanli. 2021. Bayesian capacity model for hurricane vulnerability estimation. Structure and Infrastructure Engineering, 17 (5): 638\u2013648. Taylor & Francis. https://doi.org/10.1080/15732479.2020.1760318.", + "lee2005": "Lee, K. H., and D. V. Rosowsky. 2005. Fragility assessment for roof sheathing failure in high wind regions. Engineering Structures, 27 (6): 857\u2013868. https://doi.org/10.1016/j.engstruct.2004.12.017.", + "li2006": "Li, Y., and B. R. Ellingwood. 2006. Hurricane damage to residential construction in the US: Importance of uncertainty modeling in risk assessment. Engineering Structures, 28 (7): 1009\u20131018. https://doi.org/10.1016/j.engstruct.2005.11.005", + "lin2019": "Lin, S.-Y., W.-C. Chuang, L. Xu, S. El-Tawil, S. M. J. Spence, V. R. Kamat, C. C. Menassa, and J. McCormick. 2019. Framework for Modeling Interdependent Effects in Natural Disasters: Application to Wind Engineering. Journal of Structural Engineering, 145 (5): 04019025. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)ST.1943-541X.0002310.", + "minor1998": "Minor, J. E., and H. S. Norville. 1998. A simple window glass design chart. Journal of Wind Engineering and Industrial Aerodynamics, 77\u201378: 197\u2013204. https://doi.org/10.1016/S0167-6105(98)00143-3.", + "norville1985": "Norville, H. S., and J. E. Minor. 1985. STRENGTH OF WEATHERED WINDOW GLASS. American Ceramic Society Bulletin, 64: 1467\u20131470.", + "park2014": "Park, S., J. W. Van De Lindt, and Y. Li. 2014. ABV Procedure Combined with Mechanistic Response Modeling for Roof- and Surge-Loss Estimation in Hurricanes. J. Perform. Constr. Facil., 28 (2): 206\u2013215. https://doi.org/10.1061/(ASCE)CF.1943-5509.0000397.", + "peng2013": "Peng, J. 2013. Modeling natural disaster risk management: Integrating the roles of insurance and retrofit and multiple stakeholder perspectives. Ph.D. United States -- Delaware: University of Delaware.", + "puga2015": "Puga, H., B. A. Olmos, L. Olmos, J. M. Jara, and M. Jara. 2015. Damage assessment of curtain wall glass. J. Phys.: Conf. Ser., 628 (1): 012052. IOP Publishing. https://doi.org/10.1088/1742-6596/628/1/012052.", + "reed1996": "Reed, T. D., D. V. Rosowsky, and S. D. Schiff. 1996. Roof rafter to top-plate connections in coastal residential construction. 458\u2013465.", + "reed1997": "Reed, T. D., D. V. Rosowsky, and S. D. Schiff. 1997. Uplift Capacity of Light-Frame Rafter to Top Plate Connections. Journal of Architectural Engineering, 3 (4): 156\u2013163. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)1076-0431(1997)3:4(156).", + "rosowsky1996": "Rosowsky, D., and S. Schiff. 1996. Probabilistic Modeling of Roof Sheathing Uplift Capacity. Probabilistic Mechanics and Structural Reliability.", + "rosowsky1999": "Rosowsky, D. V., and N. Cheng. 1999. Reliability of Light-Frame Roofs in High-Wind Regions. I: Wind Loads. Journal of Structural Engineering, 125 (7): 725\u2013733. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)0733-9445(1999)125:7(725).", + "shanmugam2009": "Shanmugam, B., B. G. Nielson, and D. O. Prevatt. 2009. Statistical and analytical models for roof components in existing light-framed wood structures. Engineering Structures, 31 (11): 2607\u20132616. https://doi.org/10.1016/j.engstruct.2009.06.009.", + "shdid2011": "Shdid, C. A., A. Mirmiran, T.-L. Wang, D. Jimenez, and P. Huang. 2011. Uplift Capacity and Impact Resistance of Roof Tiles. Pract. Period. Struct. Des. Constr., 16 (3): 121\u2013129. https://doi.org/10.1061/(ASCE)SC.1943-5576.0000081.", + "shen2013": "Shen, Y. 2013. Assessing the wind resistance of sectional door systems for facilities in hurricane-prone areas through full- and component-scale experimental methods and finite element analysis. Ph.D. United States -- Florida: University of Florida.", + "unnikrishnan2017": "Unnikrishnan, V. U., and M. Barbato. 2017. Multihazard Interaction Effects on the Performance of Low-Rise Wood-Frame Housing in Hurricane-Prone Regions. Journal of Structural Engineering, 143 (8): 04017076. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)ST.1943-541X.0001797.", + "vickery2006": "Vickery, P. J., P. F. Skerlj, J. Lin, L. A. Twisdale, M. A. Young, and F. M. Lavelle. 2006. HAZUS-MH Hurricane Model Methodology. II: Damage and Loss Estimation. Nat. Hazards Rev., 7 (2): 94\u2013103. https://doi.org/10.1061/(ASCE)1527-6988(2006)7:2(94).", + "yau2011": "Yau, S. C. 2011. Wind Hazard Risk Assessment and Management for Structures. Ph.D. United States -- New Jersey: Princeton University." + }, + "RWC.001": { + "Description": "Roof-Wall Connection - General fragility", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft) and a roof type of 6:12 slope gable roof without overhang. Roof sheathing panels are nailed at a spacing of 150mm at the edges. The steel fasteners used are assumed to be hot-dip galvanized to ASTM A153, Class D, with a zinc coating thickness of 43 mm. Panels are nailed to structural trusses or rafters made of spruce-pine-fir (SPF) lumber, spaced 0.6m on center with a specific gravity of 0.36. \n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.straps.001": { + "Description": "Roof-Wall Connection with Straps", + "Comments": "The modeled failure mode related to this component would be the failure of the roof-to-wall connection under wind-induced uplift loads, potentially leading to roof deck or even complete roof failure, which are defined within the damage state descriptions. The installation of roof-to-wall straps is considered a mitigation option within the HAZUS-MH model, specifically for single-family residential buildings that currently have toe-nailed roof-wall connections. \n\nLIMITATIONS: A limitation of this capacity function, as with other component resistances in the model, lies in the fact that these are statistical representations based on laboratory data, engineering analyses, and sometimes engineering judgment. Additionally, they do not give a detailed physical description of the straps themselves, such as their dimensions, material, or specific installation methods. The focus is on the functional capacity of the connection rather than a precise engineering specification of the strap itself. The underlying details of what constitutes a \"strap\" in the model's calculations are likely based on engineering standards and typical construction practices, but these specifics are not elaborated upon in the provided excerpts.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.001c": { + "Description": "Roof-Wall Connection with Toe nails", + "Comments": "For configurations with toe-nailed roof-to-wall connections, the model would consider the uplift resistance provided by this type of connection. The failure mode modeled would be the failure of the toe-nailed connection under wind-induced uplift forces, which could lead to subsequent damage such as roof cover loss, roof deck failure, or even more severe structural damage. The model implicitly recognizes the relative weakness of toe-nailed connections compared to strapped connections by considering the installation of straps as a mitigation measure for buildings with existing toe-nailed connections.\n\nLIMITATIONS: The provided sources do not explicitly detail specific test series for roof-to-wall connections using toe nails. The capacity function for toe-nailed connections is a statistical representation of their resistance, derived from laboratory test data, engineering analyses, and potentially engineering judgment, as mentioned for other building components. A key limitation of this capacity function is that it represents a simplified model of a complex failure mechanism and relies on statistical data which may not fully capture the variability in actual construction practices and the performance of toe-nailed connections under diverse hurricane conditions.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.hurricane_clip.001a": { + "Description": "Roof-Wall Connection with Hurricane Clip H2.5.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "canfield1991" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.hurricane_clip.001b": { + "Description": "Roof-Wall Connection with Hurricane Clip H2.5.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "canfield1991" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.003": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.004": { + "Description": "Roof-Wall Connection with Toe nails, 3-8d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.005": { + "Description": "Roof-Wall Connection with Toe nails, 3-16d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "jain2020", + "shanmugam2009" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006a": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006b": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006c": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "WIN.regular.001b": { + "Description": "Regular Window - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "unnikrishnan2017", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.001c": { + "Description": "Regular Window - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.002a": { + "Description": "Regular Window on windward wall", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.002b": { + "Description": "Regular Window on non-windward wall", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.003a": { + "Description": "Window on a 1-story building", + "Comments": "This capacity function is used for all windows on a 1-story home. Modeled failure modes for windows on a 1-story building include pressure-induced breakage when the wind load exceeds the window's pressure resistance.\n\nLIMITATIONS: This study does not explicitly specify the type of glass (e.g., annealed, tempered). A limitation of these capacity functions is that they are statistical representations based on laboratory test data, engineering analyses, and in some cases engineering judgment, which may not fully capture the complexities of real-world window installations, the variability in material properties, and the diverse characteristics of windborne debris. The model also simplifies by considering representative building geometries and may not account for specific details of individual windows on a given 1-story structure. The specific size of the window described in the capacity function is not mentioned.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.003b": { + "Description": "Window on a 2-story building with 2 large windows", + "Comments": "This capacity function is used for all windows on a 2-story home. Modeled failure modes for windows on a 2-story building include pressure-induced breakage when the wind load exceeds the window's pressure resistance.\n\nLIMITATIONS: This study does not explicitly specify the type of glass (e.g., annealed, tempered). A limitation of these capacity functions is that they are statistical representations based on laboratory test data, engineering analyses, and in some cases engineering judgment, which may not fully capture the complexities of real-world window installations, the variability in material properties, and the diverse characteristics of windborne debris. The model also simplifies by considering representative building geometries and may not account for specific details of individual windows on a given 2-story structure. The specific size of the window described in the capacity function is not mentioned.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.004": { + "Description": "Regular Window 1/8 in 20 sq ft", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft). A window size of 3.72 square meters with 3.175 mm thick glass was considered. The authors used the American Society of Testing and Materials (ASTM) Standard E-1300 (2003) to specify the strength of annealed glass under uniform wind pressure with a 60-second load duration and a probability of failure of 0.0081. The 60-second resistance value of annealed glass was converted to a 3-second strength by multiplying it by a factor of 1.21. This conversion was done to be consistent with the 3-second gust wind used in ASCE-7. A Weibull cumulative distribution was used to model the probability of failure of the brittle material (glass) under uniform wind load. This is stated as a common model for defining the failure probability of brittle materials like glass. The coefficient of variation of glass strength was noted to be in the range of 0.22\u20130.27.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. Finally, the fragility analysis mentions a specific window size (3.175 mm in 3.72 sq. m window) for calibration. Glass strength is known to be dependent on size and boundary conditions, so the fragility derived for this specific size might not be directly applicable to windows of different dimensions or mounting.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006", + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.005a": { + "Description": "Regular Window 3/16 in 40 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.005b": { + "Description": "Regular Window 3/16 in 40 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.006": { + "Description": "Regular Window 3/16 in 20 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.007": { + "Description": "Regular Window small sized (3.5' x 3.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "barbato2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.008": { + "Description": "Regular Window medium sized (3.5' x 5.0')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.009": { + "Description": "Regular Window tall sized (3.5' x 6.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.010": { + "Description": "Regular Window picture size (6.5' x 6.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "DOOR.regular.001b": { + "Description": "Regular Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Door panel torn from hinges" + } + } + } + }, + "DOOR.regular.001c": { + "Description": "Regular Door - General fragility", + "Comments": "This is the general representation of an entry door's resistance to pressure. The primary failure mode considered for the entry door under pressure is pressure-induced failure, where the wind load acting on the door exceeds its resistance capacity, leading to a breach in the building envelope. This breach can then affect internal pressure and potentially lead to further damage.\n\nLIMITATIONS: The sources do not explicitly specify the precise type of entry door that this capacity function considers. Resistances assigned to building components are based on results from laboratory test data, engineering analyses coupled with laboratory data, and in some cases, engineering judgment. The model might not fully capture the wide variety of entry door constructions, installation methods, the condition of the door and its frame, or the complexities of failure mechanisms that can occur during a hurricane. Further, the lack of specific details about the test series or engineering analyses used to derive these fragility parameters for entry doors, makes it difficult to fully understand the empirical or analytical basis for this specific capacity function.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Door panel torn from hinges" + } + } + } + }, + "DOOR.glass.001a": { + "Description": "Glass Door", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft). The authors used the American Society of Testing and Materials (ASTM) Standard E-1300 (2003) to specify the strength of annealed glass under uniform wind pressure with a 60-second load duration and a probability of failure of 0.0081. The 60-second resistance value of annealed glass was converted to a 3-second strength by multiplying it by a factor of 1.21. This conversion was done to be consistent with the 3-second gust wind used in ASCE-7. A Weibull cumulative distribution was used to model the probability of failure of the brittle material (glass) under uniform wind load. This is stated as a common model for defining the failure probability of brittle materials like glass. The coefficient of variation of glass strength was noted to be in the range of 0.22\u20130.27.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. ASTM E-1300 specifies strength under uniform wind pressure. However, wind loads on buildings, especially during hurricanes, can be complex and non-uniform, with varying pressures at different locations on a window. Additionally, while the study converts the 60-second resistance to a 3-second strength, this conversion factor is an approximation. The actual behavior of glass under different load durations might be more complex. Additionally, the strength of weathered or previously damaged glass might be lower than that of new, undamaged glass, which is likely what ASTM standards address. This time-dependent degradation of glass strength is not explicitly considered.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "DOOR.glass.001b": { + "Description": "Glass Door", + "Comments": "This is the general representation of single-glazed (SG) doors as a specific type of door component, which would include sliding glass doors with single panes of glass. The primary failure mode considered for the SG door under pressure is pressure-induced failure, where the wind load acting on the door exceeds its resistance capacity, leading to a breach in the building envelope. This breach can then affect internal pressure and potentially lead to further damage.\n\nLIMITATIONS: The sources do not explicitly specify the precise type of entry door that this capacity function considers. Resistances assigned to building components are based on results from laboratory test data, engineering analyses coupled with laboratory data, and in some cases, engineering judgment. The model might not fully capture the wide variety of SG door constructions, installation methods, the condition of the door and its frame, or the complexities of failure mechanisms that can occur during a hurricane. Further, the lack of specific details about the test series or engineering analyses used to derive these fragility parameters for SG doors, makes it difficult to fully understand the empirical or analytical basis for this specific capacity function.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "DOOR.regular.002": { + "Description": "Regular Door 6'10\" x 3'2\" size", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Door panel torn from hinges" + } + } + } + }, + "DOOR.garage.001b": { + "Description": "Garage Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shen2013", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.001c": { + "Description": "Garage Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.001d": { + "Description": "Garage Door - General fragility", + "Comments": "This fragility describes the interior garage door. It is treated as a general category of a door located within the building, separating the garage space from the interior living space.\n\nLIMITATIONS: The capacity function represents a simplification of real-world door behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of garage door. The model also does not explicitly account for potential vulnerabilities related to the door's connection to the surrounding wall or the operation of the garage door mechanism itself under pressure loads.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.003": { + "Description": "2-car Garage Door (6'10\" x 12\")", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.004a": { + "Description": "Double garage door - weak", + "Comments": "The primary modeled failure mode for this component is pressure-induced failure, occurring when the wind load exceeds this resistance, leading to a breach in the building envelope. The distinction between \"weak\" and \"strong\" double garage doors within the model implies different construction or reinforcement levels, resulting in varying resistance to pressure, although the sources do not provide specific details on the structural characteristics that differentiate them\n\nLIMITATIONS: \n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.004b": { + "Description": "Double garage door - strong", + "Comments": "The primary modeled failure mode for this component is pressure-induced failure, occurring when the wind load exceeds this resistance, leading to a breach in the building envelope. The distinction between \"weak\" and \"strong\" double garage doors within the model implies different construction or reinforcement levels, resulting in varying resistance to pressure, although the sources do not provide specific details on the structural characteristics that differentiate them\n\nLIMITATIONS: The capacity function represents a simplification of real-world door behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of garage door.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "WSH.001a": { + "Description": "Wall Sheathing - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.001b": { + "Description": "Wall Sheathing - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.002a": { + "Description": "Wall Sheathing - 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.002b": { + "Description": "Wall Sheathing - 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.003a": { + "Description": "Wall Sheathing - 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.003b": { + "Description": "Wall Sheathing - 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WALL.001a": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Shear failure" + } + } + } + }, + "WALL.001b": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Lateral failure (connection)" + } + } + } + }, + "WALL.001c": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Lateral failure (additional)" + } + } + } + }, + "WALL.001d": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift (connection)" + } + } + } + }, + "WALL.001e": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift (additional)" + } + } + } + }, + "WALL.004a": { + "Description": "Concrete block", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Shear failure" + } + } + } + }, + "WALL.004b": { + "Description": "Concrete block", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift" + } + } + } + }, + "RSH.nails.6d.6p12.001": { + "Description": "Roof Sheathing with 6d nails @ 6/12 in", + "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, a \"6d\" nail is a common size, typically referring to a nail that is approximately 2 inches (51 mm) long. The diameter will also be standardized for this penny size. While the HAZUS model uses \"6d\" to differentiate between different roof sheathing connection strengths. 6/12 in nail pattern for roof sheathing with 6d nails most likely means that the 6d nails are spaced 6 inches apart along one axis of the sheathing panel and 12 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure.\n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p6.001": { + "Description": "Roof Sheathing with 8d nails @ 6/6 in", + "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, an \"8d\" nail is a common size, typically referring to a nail that is approximately 2 1/2 inches (64 mm) long, and it will have a standardized diameter for this penny size. While the HAZUS model uses \"8d\" to differentiate between different roof sheathing connection strengths. 6/6 in nail pattern for roof sheathing with 8d nails most likely means that the 8d nails are spaced 6 inches apart along one axis of the sheathing panel and 6 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure.\n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001a": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1996", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001b": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001c": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, an \"8d\" nail is a common size, typically referring to a nail that is approximately 2 1/2 inches (64 mm) long, and it will have a standardized diameter for this penny size. While the HAZUS model uses \"8d\" to differentiate between different roof sheathing connection strengths. 6/12 in nail pattern for roof sheathing with 6d nails most likely means that the 8d nails are spaced 6 inches apart along one axis of the sheathing panel and 12 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure. \n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.002": { + "Description": "Roof Sheathing with 6d common nails (2.375\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003a": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003b": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1996", + "rosowsky1999", + "lee2005", + "li2006", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003c": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p6.001": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002a": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002b": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002c": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p8.001": { + "Description": "Roof Sheathing with 8d common nails (2.5 in length) @ 6/8 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p6.002": { + "Description": "Roof Sheathing with 8d common nails (2.5 in length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.003": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p8.002": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/8 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p6.003": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.001": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.6d.6p12.001": { + "Description": "Roof Sheathing with 6d common nails @ 6/12 in and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.001": { + "Description": "Roof Sheathing with no nails and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.002": { + "Description": "Roof Sheathing with no nails and a fillet plus 0.5 in coverage ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.002": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a 3 in full coverage ccSPF application with 24-39 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.6d.6p12.002": { + "Description": "Roof Sheathing with 6d common nails @ 6/12 in and a 3 in full coverage ccSPF application with 19-20 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.003": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a 3 in full coverage ccSPF application with 129-130 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.003": { + "Description": "Roof Sheathing with no nails and a 3 in full coverage ccSPF application with 12-15 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.001a": { + "Description": "Wall Cover - General fragility, lower end", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "abdelhady2022" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.001b": { + "Description": "Wall Cover - General fragility, higher end", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "abdelhady2022" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.002": { + "Description": "Wall Cover with Vinyl Siding", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.003": { + "Description": "Wall Cover with Curtain Walls 30 sq ft size and 6:5 aspect ratio", + "SuggestedComponentBlockSize": "30 ft2", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "puga2015", + "angeles2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Curtain wall torn off" + } + } + } + }, + "RCOV.tiles.clay.001": { + "Description": "Roof Cover - Clay Tiles with adhesive", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft) and a roof type of 6:12 slope gable roof without overhang. The roof covering is adhesive-set clay tiles with parameters determined from published experimental studies.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. Though the tiles' fragilities are taken from experimental data, the authors acknowledge this is among the first to analyze the fragility of clay tiles, implying there's a lack of established comparison data.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011", + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of foam from ridge board" + } + } + } + }, + "RCOV.tiles.concrete.001": { + "Description": "Roof Cover - Concrete Tiles with adhesive", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of ridge tile from foam" + } + } + } + }, + "RCOV.tiles.clay.002": { + "Description": "Roof Cover - Clay Tiles with mortar", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of field tile from mortar" + } + } + } + }, + "RCOV.tiles.concrete.002": { + "Description": "Roof Cover - Concrete Tiles with mortar", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of ridge tile from mortar" + } + } + } + }, + "RCOV.shingles.001b": { + "Description": "Roof Cover - Asphalt Shingles with standard construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RCOV.shingles.002a": { + "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RCOV.shingles.002b": { + "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + } +} \ No newline at end of file diff --git a/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility5.txt b/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility5.txt new file mode 100644 index 00000000..6e4fff4b --- /dev/null +++ b/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility5.txt @@ -0,0 +1,1320 @@ +{ + "_GeneralInformation": { + "ShortName": "SimCenter Hurricane Wind Component Library", + "Description": "This dataset is a collection of component-level damage models from the literature and public resources. Every entry has one or more corresponding publications identified that provide more information about its calibration and application limits.", + "Version": "0.1", + "ComponentGroups": { + "RWC - Roof-Wall Connection": { + "RWC.epoxy - Epoxy only": [], + "RWC.hurricane_clip - Hurricane Clip": [], + "RWC.straps - Straps only": [], + "RWC.toe_nail - Toe nail": [ + "RWC.toe_nail.straps - Toe nail with straps", + "RWC.toe_nail.epoxy - Toe nail with epoxy", + "RWC.toe_nail.adhesive - Toe nail with adhesive" + ] + }, + "WIN - Window": [ + "WIN.regular - Regular", + "WIN.impact_resistant - Impact Resistant", + "WIN.shutters - Hurricane Shutters Installed" + ], + "DOOR - Door": [ + "DOOR.regular - Regular", + "DOOR.glass - Glass", + "DOOR.impact_resistant - Impact Resistant", + "DOOR.shutters - Hurricane Shutters Installed", + "DOOR.garage - Garage" + ], + "RSH - Roof Sheathing": { + "RSH.nails - With Nails": [ + "RSH.nails.6d - 6d size", + "RSH.nails.8d - 8d size" + ], + "RSH.ccspf - With closed-cell Sprayed Polyurethane Foam": [], + "RSH.nails_ccspf - With Nails and ccSPF": [ + "RSH.nails_ccsp.6d - 6d size", + "RSH.nails_ccsp.8d - 8d size" + ] + }, + "WSH - Wall Sheathing": [], + "WALL - Wall": [], + "WCOV - Wall Cover": [], + "RCOV - Roof Cover": [ + "RCOV.tiles - Tiles", + "RCOV.shingles - Shingles" + ] + } + }, + "References": { + "abdelhady2022": "Abdelhady, A. U., S. M. J. Spence, and J. McCormick. 2022. Risk and fragility assessment of residential wooden buildings subject to hurricane winds. Structural Safety, 94: 102137. https://doi.org/10.1016/j.strusafe.2021.102137.", + "angeles2021": "Angeles, K., D. Patsialis, A. A. Taflanidis, T. L. Kijewski-Correa, A. Buccellato, and C. Vardeman. 2021. Advancing the Design of Resilient and Sustainable Buildings: An Integrated Life-Cycle Analysis. J. Struct. Eng., 147 (3): 04020341. https://doi.org/10.1061/(ASCE)ST.1943-541X.0002910.", + "barbato2013": "Barbato, M., F. Petrini, V. U. Unnikrishnan, and M. Ciampoli. 2013. Performance-Based Hurricane Engineering (PBHE) framework. Structural Safety, 45: 24\u201335. https://doi.org/10.1016/j.strusafe.2013.07.002.", + "canfield1991": "Canfield, L., S. Niu, and H. Liu. 1991. Uplift resistance of various rafter-wall connections. Forest Products Journal.", + "cheng2004": "Cheng, J. 2004. Testing and analysis of the toe-nailed connection in the residential roof-to-wall system. Forest Products Journal, 54: 58\u201365.", + "cope2004": "Cope, A. D. 2004. Predicting the vulnerability of typical residential buildings to hurricane damage. University of Florida.", + "datin2011": "Datin, P. L., D. O. Prevatt, and W. Pang. 2011. Wind-Uplift Capacity of Residential Wood Roof-Sheathing Panels Retrofitted with Insulating Foam Adhesive. J. Archit. Eng., 17 (4): 144\u2013154. https://doi.org/10.1061/(ASCE)AE.1943-5568.0000034.", + "dong2016": "Dong, Y., and Y. Li. 2016. Risk-based assessment of wood residential construction subjected to hurricane events considering indirect and environmental loss. Sustainable and Resilient Infrastructure, 1 (1\u20132): 46\u201362. Taylor & Francis. https://doi.org/10.1080/23789689.2016.1179051.", + "grayson2013": "Grayson, J. M., W. Pang, and S. Schiff. 2013. Building envelope failure assessment framework for residential communities subjected to hurricanes. Engineering Structures, 51: 245\u2013258. https://doi.org/10.1016/j.engstruct.2013.01.027.", + "gurley2005": "Gurley, K., J. P. Pinelli, C. Subramanian, A. Cope, L. Zhang, J. Murphree, A. Artiles, P. Misra, S. Gulati, and E. Simiu. 2005. Florida Public Hurricane Loss Projection Model engineering team final report volume II: Predicting the vulnerability of typical residential buildings to hurricane damage. Technical report. Florida International University: International Hurricane Research Center.", + "jain2020": "Jain, A., A. A. Bhusar, D. B. Roueche, and D. O. Prevatt. 2020. Engineering-Based Tornado Damage Assessment: Numerical Tool for Assessing Tornado Vulnerability of Residential Structures. Front. Built Environ., 6. Frontiers. https://doi.org/10.3389/fbuil.2020.00089.", + "kakareko2021": "Kakareko, G., S. Jung, S. Mishra, and O. A. Vanli. 2021. Bayesian capacity model for hurricane vulnerability estimation. Structure and Infrastructure Engineering, 17 (5): 638\u2013648. Taylor & Francis. https://doi.org/10.1080/15732479.2020.1760318.", + "lee2005": "Lee, K. H., and D. V. Rosowsky. 2005. Fragility assessment for roof sheathing failure in high wind regions. Engineering Structures, 27 (6): 857\u2013868. https://doi.org/10.1016/j.engstruct.2004.12.017.", + "li2006": "Li, Y., and B. R. Ellingwood. 2006. Hurricane damage to residential construction in the US: Importance of uncertainty modeling in risk assessment. Engineering Structures, 28 (7): 1009\u20131018. https://doi.org/10.1016/j.engstruct.2005.11.005", + "lin2019": "Lin, S.-Y., W.-C. Chuang, L. Xu, S. El-Tawil, S. M. J. Spence, V. R. Kamat, C. C. Menassa, and J. McCormick. 2019. Framework for Modeling Interdependent Effects in Natural Disasters: Application to Wind Engineering. Journal of Structural Engineering, 145 (5): 04019025. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)ST.1943-541X.0002310.", + "minor1998": "Minor, J. E., and H. S. Norville. 1998. A simple window glass design chart. Journal of Wind Engineering and Industrial Aerodynamics, 77\u201378: 197\u2013204. https://doi.org/10.1016/S0167-6105(98)00143-3.", + "norville1985": "Norville, H. S., and J. E. Minor. 1985. STRENGTH OF WEATHERED WINDOW GLASS. American Ceramic Society Bulletin, 64: 1467\u20131470.", + "park2014": "Park, S., J. W. Van De Lindt, and Y. Li. 2014. ABV Procedure Combined with Mechanistic Response Modeling for Roof- and Surge-Loss Estimation in Hurricanes. J. Perform. Constr. Facil., 28 (2): 206\u2013215. https://doi.org/10.1061/(ASCE)CF.1943-5509.0000397.", + "peng2013": "Peng, J. 2013. Modeling natural disaster risk management: Integrating the roles of insurance and retrofit and multiple stakeholder perspectives. Ph.D. United States -- Delaware: University of Delaware.", + "puga2015": "Puga, H., B. A. Olmos, L. Olmos, J. M. Jara, and M. Jara. 2015. Damage assessment of curtain wall glass. J. Phys.: Conf. Ser., 628 (1): 012052. IOP Publishing. https://doi.org/10.1088/1742-6596/628/1/012052.", + "reed1996": "Reed, T. D., D. V. Rosowsky, and S. D. Schiff. 1996. Roof rafter to top-plate connections in coastal residential construction. 458\u2013465.", + "reed1997": "Reed, T. D., D. V. Rosowsky, and S. D. Schiff. 1997. Uplift Capacity of Light-Frame Rafter to Top Plate Connections. Journal of Architectural Engineering, 3 (4): 156\u2013163. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)1076-0431(1997)3:4(156).", + "rosowsky1996": "Rosowsky, D., and S. Schiff. 1996. Probabilistic Modeling of Roof Sheathing Uplift Capacity. Probabilistic Mechanics and Structural Reliability.", + "rosowsky1999": "Rosowsky, D. V., and N. Cheng. 1999. Reliability of Light-Frame Roofs in High-Wind Regions. I: Wind Loads. Journal of Structural Engineering, 125 (7): 725\u2013733. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)0733-9445(1999)125:7(725).", + "shanmugam2009": "Shanmugam, B., B. G. Nielson, and D. O. Prevatt. 2009. Statistical and analytical models for roof components in existing light-framed wood structures. Engineering Structures, 31 (11): 2607\u20132616. https://doi.org/10.1016/j.engstruct.2009.06.009.", + "shdid2011": "Shdid, C. A., A. Mirmiran, T.-L. Wang, D. Jimenez, and P. Huang. 2011. Uplift Capacity and Impact Resistance of Roof Tiles. Pract. Period. Struct. Des. Constr., 16 (3): 121\u2013129. https://doi.org/10.1061/(ASCE)SC.1943-5576.0000081.", + "shen2013": "Shen, Y. 2013. Assessing the wind resistance of sectional door systems for facilities in hurricane-prone areas through full- and component-scale experimental methods and finite element analysis. Ph.D. United States -- Florida: University of Florida.", + "unnikrishnan2017": "Unnikrishnan, V. U., and M. Barbato. 2017. Multihazard Interaction Effects on the Performance of Low-Rise Wood-Frame Housing in Hurricane-Prone Regions. Journal of Structural Engineering, 143 (8): 04017076. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)ST.1943-541X.0001797.", + "vickery2006": "Vickery, P. J., P. F. Skerlj, J. Lin, L. A. Twisdale, M. A. Young, and F. M. Lavelle. 2006. HAZUS-MH Hurricane Model Methodology. II: Damage and Loss Estimation. Nat. Hazards Rev., 7 (2): 94\u2013103. https://doi.org/10.1061/(ASCE)1527-6988(2006)7:2(94).", + "yau2011": "Yau, S. C. 2011. Wind Hazard Risk Assessment and Management for Structures. Ph.D. United States -- New Jersey: Princeton University." + }, + "RWC.001": { + "Description": "Roof-Wall Connection - General fragility", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft) and a roof type of 6:12 slope gable roof without overhang. Roof sheathing panels are nailed at a spacing of 150mm at the edges. The steel fasteners used are assumed to be hot-dip galvanized to ASTM A153, Class D, with a zinc coating thickness of 43 mm. Panels are nailed to structural trusses or rafters made of spruce-pine-fir (SPF) lumber, spaced 0.6m on center with a specific gravity of 0.36. \n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.hurricane_clip.001a": { + "Description": "Roof-Wall Connection with Hurricane Clip H2.5.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "canfield1991" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.hurricane_clip.001b": { + "Description": "Roof-Wall Connection with Hurricane Clip H2.5.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "canfield1991" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.003": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.004": { + "Description": "Roof-Wall Connection with Toe nails, 3-8d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.005": { + "Description": "Roof-Wall Connection with Toe nails, 3-16d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "jain2020", + "shanmugam2009" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006a": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006b": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006c": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "WIN.regular.001b": { + "Description": "Regular Window - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "unnikrishnan2017", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.001c": { + "Description": "Regular Window - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.002a": { + "Description": "Regular Window on windward wall", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.002b": { + "Description": "Regular Window on non-windward wall", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.003a": { + "Description": "Window on a 1-story building", + "Comments": "This capacity function is used for all windows on a 1-story home. Modeled failure modes for windows on a 1-story building include pressure-induced breakage when the wind load exceeds the window's pressure resistance.\n\nLIMITATIONS: This study does not explicitly specify the type of glass (e.g., annealed, tempered). A limitation of these capacity functions is that they are statistical representations based on laboratory test data, engineering analyses, and in some cases engineering judgment, which may not fully capture the complexities of real-world window installations, the variability in material properties, and the diverse characteristics of windborne debris. The model also simplifies by considering representative building geometries and may not account for specific details of individual windows on a given 1-story structure. The specific size of the window described in the capacity function is not mentioned.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.004": { + "Description": "Regular Window 1/8 in 20 sq ft", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft). A window size of 3.72 square meters with 3.175 mm thick glass was considered. The authors used the American Society of Testing and Materials (ASTM) Standard E-1300 (2003) to specify the strength of annealed glass under uniform wind pressure with a 60-second load duration and a probability of failure of 0.0081. The 60-second resistance value of annealed glass was converted to a 3-second strength by multiplying it by a factor of 1.21. This conversion was done to be consistent with the 3-second gust wind used in ASCE-7. A Weibull cumulative distribution was used to model the probability of failure of the brittle material (glass) under uniform wind load. This is stated as a common model for defining the failure probability of brittle materials like glass. The coefficient of variation of glass strength was noted to be in the range of 0.22\u20130.27.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. Finally, the fragility analysis mentions a specific window size (3.175 mm in 3.72 sq. m window) for calibration. Glass strength is known to be dependent on size and boundary conditions, so the fragility derived for this specific size might not be directly applicable to windows of different dimensions or mounting.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006", + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.005a": { + "Description": "Regular Window 3/16 in 40 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.005b": { + "Description": "Regular Window 3/16 in 40 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.006": { + "Description": "Regular Window 3/16 in 20 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.007": { + "Description": "Regular Window small sized (3.5' x 3.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "barbato2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.008": { + "Description": "Regular Window medium sized (3.5' x 5.0')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.009": { + "Description": "Regular Window tall sized (3.5' x 6.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.010": { + "Description": "Regular Window picture size (6.5' x 6.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "DOOR.regular.001b": { + "Description": "Regular Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Door panel torn from hinges" + } + } + } + }, + "DOOR.glass.001a": { + "Description": "Glass Door", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft). The authors used the American Society of Testing and Materials (ASTM) Standard E-1300 (2003) to specify the strength of annealed glass under uniform wind pressure with a 60-second load duration and a probability of failure of 0.0081. The 60-second resistance value of annealed glass was converted to a 3-second strength by multiplying it by a factor of 1.21. This conversion was done to be consistent with the 3-second gust wind used in ASCE-7. A Weibull cumulative distribution was used to model the probability of failure of the brittle material (glass) under uniform wind load. This is stated as a common model for defining the failure probability of brittle materials like glass. The coefficient of variation of glass strength was noted to be in the range of 0.22\u20130.27.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. ASTM E-1300 specifies strength under uniform wind pressure. However, wind loads on buildings, especially during hurricanes, can be complex and non-uniform, with varying pressures at different locations on a window. Additionally, while the study converts the 60-second resistance to a 3-second strength, this conversion factor is an approximation. The actual behavior of glass under different load durations might be more complex. Additionally, the strength of weathered or previously damaged glass might be lower than that of new, undamaged glass, which is likely what ASTM standards address. This time-dependent degradation of glass strength is not explicitly considered.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "DOOR.regular.002": { + "Description": "Regular Door 6'10\" x 3'2\" size", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Door panel torn from hinges" + } + } + } + }, + "DOOR.garage.001b": { + "Description": "Garage Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shen2013", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.001c": { + "Description": "Garage Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.001d": { + "Description": "Garage Door - General fragility", + "Comments": "This fragility describes the interior garage door. It is treated as a general category of a door located within the building, separating the garage space from the interior living space.\n\nLIMITATIONS: The capacity function represents a simplification of real-world door behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of garage door. The model also does not explicitly account for potential vulnerabilities related to the door's connection to the surrounding wall or the operation of the garage door mechanism itself under pressure loads.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.003": { + "Description": "2-car Garage Door (6'10\" x 12\")", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "WSH.001a": { + "Description": "Wall Sheathing - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.001b": { + "Description": "Wall Sheathing - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.002a": { + "Description": "Wall Sheathing - 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.002b": { + "Description": "Wall Sheathing - 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.003a": { + "Description": "Wall Sheathing - 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.003b": { + "Description": "Wall Sheathing - 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WALL.001a": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Shear failure" + } + } + } + }, + "WALL.001b": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Lateral failure (connection)" + } + } + } + }, + "WALL.001c": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Lateral failure (additional)" + } + } + } + }, + "WALL.001d": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift (connection)" + } + } + } + }, + "WALL.001e": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift (additional)" + } + } + } + }, + "WALL.004a": { + "Description": "Concrete block", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Shear failure" + } + } + } + }, + "WALL.004b": { + "Description": "Concrete block", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift" + } + } + } + }, + "RSH.nails.6d.6p12.001": { + "Description": "Roof Sheathing with 6d nails @ 6/12 in", + "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, a \"6d\" nail is a common size, typically referring to a nail that is approximately 2 inches (51 mm) long. The diameter will also be standardized for this penny size. While the HAZUS model uses \"6d\" to differentiate between different roof sheathing connection strengths. 6/12 in nail pattern for roof sheathing with 6d nails most likely means that the 6d nails are spaced 6 inches apart along one axis of the sheathing panel and 12 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure.\n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001a": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1996", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001b": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001c": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, an \"8d\" nail is a common size, typically referring to a nail that is approximately 2 1/2 inches (64 mm) long, and it will have a standardized diameter for this penny size. While the HAZUS model uses \"8d\" to differentiate between different roof sheathing connection strengths. 6/12 in nail pattern for roof sheathing with 6d nails most likely means that the 8d nails are spaced 6 inches apart along one axis of the sheathing panel and 12 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure. \n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.002": { + "Description": "Roof Sheathing with 6d common nails (2.375\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003a": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003b": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1996", + "rosowsky1999", + "lee2005", + "li2006", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003c": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p6.001": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002a": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002b": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002c": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p8.001": { + "Description": "Roof Sheathing with 8d common nails (2.5 in length) @ 6/8 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p6.002": { + "Description": "Roof Sheathing with 8d common nails (2.5 in length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.003": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p8.002": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/8 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p6.003": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.001": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.6d.6p12.001": { + "Description": "Roof Sheathing with 6d common nails @ 6/12 in and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.001": { + "Description": "Roof Sheathing with no nails and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.002": { + "Description": "Roof Sheathing with no nails and a fillet plus 0.5 in coverage ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.002": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a 3 in full coverage ccSPF application with 24-39 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.6d.6p12.002": { + "Description": "Roof Sheathing with 6d common nails @ 6/12 in and a 3 in full coverage ccSPF application with 19-20 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.003": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a 3 in full coverage ccSPF application with 129-130 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.003": { + "Description": "Roof Sheathing with no nails and a 3 in full coverage ccSPF application with 12-15 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.001a": { + "Description": "Wall Cover - General fragility, lower end", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "abdelhady2022" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.001b": { + "Description": "Wall Cover - General fragility, higher end", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "abdelhady2022" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.002": { + "Description": "Wall Cover with Vinyl Siding", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.003": { + "Description": "Wall Cover with Curtain Walls 30 sq ft size and 6:5 aspect ratio", + "SuggestedComponentBlockSize": "30 ft2", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "puga2015", + "angeles2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Curtain wall torn off" + } + } + } + }, + "RCOV.tiles.clay.001": { + "Description": "Roof Cover - Clay Tiles with adhesive", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft) and a roof type of 6:12 slope gable roof without overhang. The roof covering is adhesive-set clay tiles with parameters determined from published experimental studies.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. Though the tiles' fragilities are taken from experimental data, the authors acknowledge this is among the first to analyze the fragility of clay tiles, implying there's a lack of established comparison data.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011", + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of foam from ridge board" + } + } + } + }, + "RCOV.tiles.concrete.001": { + "Description": "Roof Cover - Concrete Tiles with adhesive", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of ridge tile from foam" + } + } + } + }, + "RCOV.tiles.clay.002": { + "Description": "Roof Cover - Clay Tiles with mortar", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of field tile from mortar" + } + } + } + }, + "RCOV.tiles.concrete.002": { + "Description": "Roof Cover - Concrete Tiles with mortar", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of ridge tile from mortar" + } + } + } + }, + "RCOV.shingles.001b": { + "Description": "Roof Cover - Asphalt Shingles with standard construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RCOV.shingles.002a": { + "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RCOV.shingles.002b": { + "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + } +} \ No newline at end of file diff --git a/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility_filtered.json b/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility_filtered.json new file mode 100644 index 00000000..6e4fff4b --- /dev/null +++ b/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility_filtered.json @@ -0,0 +1,1320 @@ +{ + "_GeneralInformation": { + "ShortName": "SimCenter Hurricane Wind Component Library", + "Description": "This dataset is a collection of component-level damage models from the literature and public resources. Every entry has one or more corresponding publications identified that provide more information about its calibration and application limits.", + "Version": "0.1", + "ComponentGroups": { + "RWC - Roof-Wall Connection": { + "RWC.epoxy - Epoxy only": [], + "RWC.hurricane_clip - Hurricane Clip": [], + "RWC.straps - Straps only": [], + "RWC.toe_nail - Toe nail": [ + "RWC.toe_nail.straps - Toe nail with straps", + "RWC.toe_nail.epoxy - Toe nail with epoxy", + "RWC.toe_nail.adhesive - Toe nail with adhesive" + ] + }, + "WIN - Window": [ + "WIN.regular - Regular", + "WIN.impact_resistant - Impact Resistant", + "WIN.shutters - Hurricane Shutters Installed" + ], + "DOOR - Door": [ + "DOOR.regular - Regular", + "DOOR.glass - Glass", + "DOOR.impact_resistant - Impact Resistant", + "DOOR.shutters - Hurricane Shutters Installed", + "DOOR.garage - Garage" + ], + "RSH - Roof Sheathing": { + "RSH.nails - With Nails": [ + "RSH.nails.6d - 6d size", + "RSH.nails.8d - 8d size" + ], + "RSH.ccspf - With closed-cell Sprayed Polyurethane Foam": [], + "RSH.nails_ccspf - With Nails and ccSPF": [ + "RSH.nails_ccsp.6d - 6d size", + "RSH.nails_ccsp.8d - 8d size" + ] + }, + "WSH - Wall Sheathing": [], + "WALL - Wall": [], + "WCOV - Wall Cover": [], + "RCOV - Roof Cover": [ + "RCOV.tiles - Tiles", + "RCOV.shingles - Shingles" + ] + } + }, + "References": { + "abdelhady2022": "Abdelhady, A. U., S. M. J. Spence, and J. McCormick. 2022. Risk and fragility assessment of residential wooden buildings subject to hurricane winds. Structural Safety, 94: 102137. https://doi.org/10.1016/j.strusafe.2021.102137.", + "angeles2021": "Angeles, K., D. Patsialis, A. A. Taflanidis, T. L. Kijewski-Correa, A. Buccellato, and C. Vardeman. 2021. Advancing the Design of Resilient and Sustainable Buildings: An Integrated Life-Cycle Analysis. J. Struct. Eng., 147 (3): 04020341. https://doi.org/10.1061/(ASCE)ST.1943-541X.0002910.", + "barbato2013": "Barbato, M., F. Petrini, V. U. Unnikrishnan, and M. Ciampoli. 2013. Performance-Based Hurricane Engineering (PBHE) framework. Structural Safety, 45: 24\u201335. https://doi.org/10.1016/j.strusafe.2013.07.002.", + "canfield1991": "Canfield, L., S. Niu, and H. Liu. 1991. Uplift resistance of various rafter-wall connections. Forest Products Journal.", + "cheng2004": "Cheng, J. 2004. Testing and analysis of the toe-nailed connection in the residential roof-to-wall system. Forest Products Journal, 54: 58\u201365.", + "cope2004": "Cope, A. D. 2004. Predicting the vulnerability of typical residential buildings to hurricane damage. University of Florida.", + "datin2011": "Datin, P. L., D. O. Prevatt, and W. Pang. 2011. Wind-Uplift Capacity of Residential Wood Roof-Sheathing Panels Retrofitted with Insulating Foam Adhesive. J. Archit. Eng., 17 (4): 144\u2013154. https://doi.org/10.1061/(ASCE)AE.1943-5568.0000034.", + "dong2016": "Dong, Y., and Y. Li. 2016. Risk-based assessment of wood residential construction subjected to hurricane events considering indirect and environmental loss. Sustainable and Resilient Infrastructure, 1 (1\u20132): 46\u201362. Taylor & Francis. https://doi.org/10.1080/23789689.2016.1179051.", + "grayson2013": "Grayson, J. M., W. Pang, and S. Schiff. 2013. Building envelope failure assessment framework for residential communities subjected to hurricanes. Engineering Structures, 51: 245\u2013258. https://doi.org/10.1016/j.engstruct.2013.01.027.", + "gurley2005": "Gurley, K., J. P. Pinelli, C. Subramanian, A. Cope, L. Zhang, J. Murphree, A. Artiles, P. Misra, S. Gulati, and E. Simiu. 2005. Florida Public Hurricane Loss Projection Model engineering team final report volume II: Predicting the vulnerability of typical residential buildings to hurricane damage. Technical report. Florida International University: International Hurricane Research Center.", + "jain2020": "Jain, A., A. A. Bhusar, D. B. Roueche, and D. O. Prevatt. 2020. Engineering-Based Tornado Damage Assessment: Numerical Tool for Assessing Tornado Vulnerability of Residential Structures. Front. Built Environ., 6. Frontiers. https://doi.org/10.3389/fbuil.2020.00089.", + "kakareko2021": "Kakareko, G., S. Jung, S. Mishra, and O. A. Vanli. 2021. Bayesian capacity model for hurricane vulnerability estimation. Structure and Infrastructure Engineering, 17 (5): 638\u2013648. Taylor & Francis. https://doi.org/10.1080/15732479.2020.1760318.", + "lee2005": "Lee, K. H., and D. V. Rosowsky. 2005. Fragility assessment for roof sheathing failure in high wind regions. Engineering Structures, 27 (6): 857\u2013868. https://doi.org/10.1016/j.engstruct.2004.12.017.", + "li2006": "Li, Y., and B. R. Ellingwood. 2006. Hurricane damage to residential construction in the US: Importance of uncertainty modeling in risk assessment. Engineering Structures, 28 (7): 1009\u20131018. https://doi.org/10.1016/j.engstruct.2005.11.005", + "lin2019": "Lin, S.-Y., W.-C. Chuang, L. Xu, S. El-Tawil, S. M. J. Spence, V. R. Kamat, C. C. Menassa, and J. McCormick. 2019. Framework for Modeling Interdependent Effects in Natural Disasters: Application to Wind Engineering. Journal of Structural Engineering, 145 (5): 04019025. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)ST.1943-541X.0002310.", + "minor1998": "Minor, J. E., and H. S. Norville. 1998. A simple window glass design chart. Journal of Wind Engineering and Industrial Aerodynamics, 77\u201378: 197\u2013204. https://doi.org/10.1016/S0167-6105(98)00143-3.", + "norville1985": "Norville, H. S., and J. E. Minor. 1985. STRENGTH OF WEATHERED WINDOW GLASS. American Ceramic Society Bulletin, 64: 1467\u20131470.", + "park2014": "Park, S., J. W. Van De Lindt, and Y. Li. 2014. ABV Procedure Combined with Mechanistic Response Modeling for Roof- and Surge-Loss Estimation in Hurricanes. J. Perform. Constr. Facil., 28 (2): 206\u2013215. https://doi.org/10.1061/(ASCE)CF.1943-5509.0000397.", + "peng2013": "Peng, J. 2013. Modeling natural disaster risk management: Integrating the roles of insurance and retrofit and multiple stakeholder perspectives. Ph.D. United States -- Delaware: University of Delaware.", + "puga2015": "Puga, H., B. A. Olmos, L. Olmos, J. M. Jara, and M. Jara. 2015. Damage assessment of curtain wall glass. J. Phys.: Conf. Ser., 628 (1): 012052. IOP Publishing. https://doi.org/10.1088/1742-6596/628/1/012052.", + "reed1996": "Reed, T. D., D. V. Rosowsky, and S. D. Schiff. 1996. Roof rafter to top-plate connections in coastal residential construction. 458\u2013465.", + "reed1997": "Reed, T. D., D. V. Rosowsky, and S. D. Schiff. 1997. Uplift Capacity of Light-Frame Rafter to Top Plate Connections. Journal of Architectural Engineering, 3 (4): 156\u2013163. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)1076-0431(1997)3:4(156).", + "rosowsky1996": "Rosowsky, D., and S. Schiff. 1996. Probabilistic Modeling of Roof Sheathing Uplift Capacity. Probabilistic Mechanics and Structural Reliability.", + "rosowsky1999": "Rosowsky, D. V., and N. Cheng. 1999. Reliability of Light-Frame Roofs in High-Wind Regions. I: Wind Loads. Journal of Structural Engineering, 125 (7): 725\u2013733. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)0733-9445(1999)125:7(725).", + "shanmugam2009": "Shanmugam, B., B. G. Nielson, and D. O. Prevatt. 2009. Statistical and analytical models for roof components in existing light-framed wood structures. Engineering Structures, 31 (11): 2607\u20132616. https://doi.org/10.1016/j.engstruct.2009.06.009.", + "shdid2011": "Shdid, C. A., A. Mirmiran, T.-L. Wang, D. Jimenez, and P. Huang. 2011. Uplift Capacity and Impact Resistance of Roof Tiles. Pract. Period. Struct. Des. Constr., 16 (3): 121\u2013129. https://doi.org/10.1061/(ASCE)SC.1943-5576.0000081.", + "shen2013": "Shen, Y. 2013. Assessing the wind resistance of sectional door systems for facilities in hurricane-prone areas through full- and component-scale experimental methods and finite element analysis. Ph.D. United States -- Florida: University of Florida.", + "unnikrishnan2017": "Unnikrishnan, V. U., and M. Barbato. 2017. Multihazard Interaction Effects on the Performance of Low-Rise Wood-Frame Housing in Hurricane-Prone Regions. Journal of Structural Engineering, 143 (8): 04017076. American Society of Civil Engineers. https://doi.org/10.1061/(ASCE)ST.1943-541X.0001797.", + "vickery2006": "Vickery, P. J., P. F. Skerlj, J. Lin, L. A. Twisdale, M. A. Young, and F. M. Lavelle. 2006. HAZUS-MH Hurricane Model Methodology. II: Damage and Loss Estimation. Nat. Hazards Rev., 7 (2): 94\u2013103. https://doi.org/10.1061/(ASCE)1527-6988(2006)7:2(94).", + "yau2011": "Yau, S. C. 2011. Wind Hazard Risk Assessment and Management for Structures. Ph.D. United States -- New Jersey: Princeton University." + }, + "RWC.001": { + "Description": "Roof-Wall Connection - General fragility", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft) and a roof type of 6:12 slope gable roof without overhang. Roof sheathing panels are nailed at a spacing of 150mm at the edges. The steel fasteners used are assumed to be hot-dip galvanized to ASTM A153, Class D, with a zinc coating thickness of 43 mm. Panels are nailed to structural trusses or rafters made of spruce-pine-fir (SPF) lumber, spaced 0.6m on center with a specific gravity of 0.36. \n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.hurricane_clip.001a": { + "Description": "Roof-Wall Connection with Hurricane Clip H2.5.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "canfield1991" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.hurricane_clip.001b": { + "Description": "Roof-Wall Connection with Hurricane Clip H2.5.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "canfield1991" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.003": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.004": { + "Description": "Roof-Wall Connection with Toe nails, 3-8d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "li2006", + "reed1997" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.005": { + "Description": "Roof-Wall Connection with Toe nails, 3-16d layout.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "jain2020", + "shanmugam2009" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006a": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006b": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "RWC.toe_nail.006c": { + "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shanmugam2009", + "cheng2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Tension from uplift" + } + } + } + }, + "WIN.regular.001b": { + "Description": "Regular Window - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "unnikrishnan2017", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.001c": { + "Description": "Regular Window - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.002a": { + "Description": "Regular Window on windward wall", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.002b": { + "Description": "Regular Window on non-windward wall", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "lin2019" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.003a": { + "Description": "Window on a 1-story building", + "Comments": "This capacity function is used for all windows on a 1-story home. Modeled failure modes for windows on a 1-story building include pressure-induced breakage when the wind load exceeds the window's pressure resistance.\n\nLIMITATIONS: This study does not explicitly specify the type of glass (e.g., annealed, tempered). A limitation of these capacity functions is that they are statistical representations based on laboratory test data, engineering analyses, and in some cases engineering judgment, which may not fully capture the complexities of real-world window installations, the variability in material properties, and the diverse characteristics of windborne debris. The model also simplifies by considering representative building geometries and may not account for specific details of individual windows on a given 1-story structure. The specific size of the window described in the capacity function is not mentioned.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.004": { + "Description": "Regular Window 1/8 in 20 sq ft", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft). A window size of 3.72 square meters with 3.175 mm thick glass was considered. The authors used the American Society of Testing and Materials (ASTM) Standard E-1300 (2003) to specify the strength of annealed glass under uniform wind pressure with a 60-second load duration and a probability of failure of 0.0081. The 60-second resistance value of annealed glass was converted to a 3-second strength by multiplying it by a factor of 1.21. This conversion was done to be consistent with the 3-second gust wind used in ASCE-7. A Weibull cumulative distribution was used to model the probability of failure of the brittle material (glass) under uniform wind load. This is stated as a common model for defining the failure probability of brittle materials like glass. The coefficient of variation of glass strength was noted to be in the range of 0.22\u20130.27.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. Finally, the fragility analysis mentions a specific window size (3.175 mm in 3.72 sq. m window) for calibration. Glass strength is known to be dependent on size and boundary conditions, so the fragility derived for this specific size might not be directly applicable to windows of different dimensions or mounting.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006", + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.005a": { + "Description": "Regular Window 3/16 in 40 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.005b": { + "Description": "Regular Window 3/16 in 40 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.006": { + "Description": "Regular Window 3/16 in 20 sq ft", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "norville1985", + "minor1998", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.007": { + "Description": "Regular Window small sized (3.5' x 3.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "barbato2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.008": { + "Description": "Regular Window medium sized (3.5' x 5.0')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.009": { + "Description": "Regular Window tall sized (3.5' x 6.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "WIN.regular.010": { + "Description": "Regular Window picture size (6.5' x 6.5')", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "DOOR.regular.001b": { + "Description": "Regular Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Door panel torn from hinges" + } + } + } + }, + "DOOR.glass.001a": { + "Description": "Glass Door", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft). The authors used the American Society of Testing and Materials (ASTM) Standard E-1300 (2003) to specify the strength of annealed glass under uniform wind pressure with a 60-second load duration and a probability of failure of 0.0081. The 60-second resistance value of annealed glass was converted to a 3-second strength by multiplying it by a factor of 1.21. This conversion was done to be consistent with the 3-second gust wind used in ASCE-7. A Weibull cumulative distribution was used to model the probability of failure of the brittle material (glass) under uniform wind load. This is stated as a common model for defining the failure probability of brittle materials like glass. The coefficient of variation of glass strength was noted to be in the range of 0.22\u20130.27.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. ASTM E-1300 specifies strength under uniform wind pressure. However, wind loads on buildings, especially during hurricanes, can be complex and non-uniform, with varying pressures at different locations on a window. Additionally, while the study converts the 60-second resistance to a 3-second strength, this conversion factor is an approximation. The actual behavior of glass under different load durations might be more complex. Additionally, the strength of weathered or previously damaged glass might be lower than that of new, undamaged glass, which is likely what ASTM standards address. This time-dependent degradation of glass strength is not explicitly considered.\n\nSTUDY TYPE: Numerical simulation", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Glass breaking" + } + } + } + }, + "DOOR.regular.002": { + "Description": "Regular Door 6'10\" x 3'2\" size", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Door panel torn from hinges" + } + } + } + }, + "DOOR.garage.001b": { + "Description": "Garage Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shen2013", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.001c": { + "Description": "Garage Door - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.001d": { + "Description": "Garage Door - General fragility", + "Comments": "This fragility describes the interior garage door. It is treated as a general category of a door located within the building, separating the garage space from the interior living space.\n\nLIMITATIONS: The capacity function represents a simplification of real-world door behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of garage door. The model also does not explicitly account for potential vulnerabilities related to the door's connection to the surrounding wall or the operation of the garage door mechanism itself under pressure loads.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "DOOR.garage.003": { + "Description": "2-car Garage Door (6'10\" x 12\")", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "yau2011", + "grayson2013", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Garage door torn from tracks" + } + } + } + }, + "WSH.001a": { + "Description": "Wall Sheathing - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.001b": { + "Description": "Wall Sheathing - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.002a": { + "Description": "Wall Sheathing - 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.002b": { + "Description": "Wall Sheathing - 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.003a": { + "Description": "Wall Sheathing - 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WSH.003b": { + "Description": "Wall Sheathing - 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Sheathing torn off" + } + } + } + }, + "WALL.001a": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Shear failure" + } + } + } + }, + "WALL.001b": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Lateral failure (connection)" + } + } + } + }, + "WALL.001c": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Lateral failure (additional)" + } + } + } + }, + "WALL.001d": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift (connection)" + } + } + } + }, + "WALL.001e": { + "Description": "Wood Wall - General fragility", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004", + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift (additional)" + } + } + } + }, + "WALL.004a": { + "Description": "Concrete block", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Shear failure" + } + } + } + }, + "WALL.004b": { + "Description": "Concrete block", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "cope2004" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Uplift" + } + } + } + }, + "RSH.nails.6d.6p12.001": { + "Description": "Roof Sheathing with 6d nails @ 6/12 in", + "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, a \"6d\" nail is a common size, typically referring to a nail that is approximately 2 inches (51 mm) long. The diameter will also be standardized for this penny size. While the HAZUS model uses \"6d\" to differentiate between different roof sheathing connection strengths. 6/12 in nail pattern for roof sheathing with 6d nails most likely means that the 6d nails are spaced 6 inches apart along one axis of the sheathing panel and 12 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure.\n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001a": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1996", + "li2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001b": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "unnikrishnan2017" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.001c": { + "Description": "Roof Sheathing with 8d nails @ 6/12 in", + "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, an \"8d\" nail is a common size, typically referring to a nail that is approximately 2 1/2 inches (64 mm) long, and it will have a standardized diameter for this penny size. While the HAZUS model uses \"8d\" to differentiate between different roof sheathing connection strengths. 6/12 in nail pattern for roof sheathing with 6d nails most likely means that the 8d nails are spaced 6 inches apart along one axis of the sheathing panel and 12 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure. \n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "vickery2006" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.002": { + "Description": "Roof Sheathing with 6d common nails (2.375\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003a": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003b": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1996", + "rosowsky1999", + "lee2005", + "li2006", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p12.003c": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.6d.6p6.001": { + "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002a": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002b": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.002c": { + "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "rosowsky1999", + "lee2005", + "park2014" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p8.001": { + "Description": "Roof Sheathing with 8d common nails (2.5 in length) @ 6/8 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p6.002": { + "Description": "Roof Sheathing with 8d common nails (2.5 in length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p12.003": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/12 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p8.002": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/8 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails.8d.6p6.003": { + "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/6 in", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.001": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.6d.6p12.001": { + "Description": "Roof Sheathing with 6d common nails @ 6/12 in and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.001": { + "Description": "Roof Sheathing with no nails and a fillet ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.002": { + "Description": "Roof Sheathing with no nails and a fillet plus 0.5 in coverage ccSPF application", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.002": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a 3 in full coverage ccSPF application with 24-39 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.6d.6p12.002": { + "Description": "Roof Sheathing with 6d common nails @ 6/12 in and a 3 in full coverage ccSPF application with 19-20 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.nails_ccspf.8d.6p12.003": { + "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a 3 in full coverage ccSPF application with 129-130 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RSH.ccspf.003": { + "Description": "Roof Sheathing with no nails and a 3 in full coverage ccSPF application with 12-15 day cure time", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "datin2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.001a": { + "Description": "Wall Cover - General fragility, lower end", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "abdelhady2022" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.001b": { + "Description": "Wall Cover - General fragility, higher end", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "abdelhady2022" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.002": { + "Description": "Wall Cover with Vinyl Siding", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "WCOV.003": { + "Description": "Wall Cover with Curtain Walls 30 sq ft size and 6:5 aspect ratio", + "SuggestedComponentBlockSize": "30 ft2", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "puga2015", + "angeles2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Curtain wall torn off" + } + } + } + }, + "RCOV.tiles.clay.001": { + "Description": "Roof Cover - Clay Tiles with adhesive", + "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft) and a roof type of 6:12 slope gable roof without overhang. The roof covering is adhesive-set clay tiles with parameters determined from published experimental studies.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. Though the tiles' fragilities are taken from experimental data, the authors acknowledge this is among the first to analyze the fragility of clay tiles, implying there's a lack of established comparison data.\n\nSTUDY TYPE: Numerical simulation ", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011", + "dong2016" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of foam from ridge board" + } + } + } + }, + "RCOV.tiles.concrete.001": { + "Description": "Roof Cover - Concrete Tiles with adhesive", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of ridge tile from foam" + } + } + } + }, + "RCOV.tiles.clay.002": { + "Description": "Roof Cover - Clay Tiles with mortar", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of field tile from mortar" + } + } + } + }, + "RCOV.tiles.concrete.002": { + "Description": "Roof Cover - Concrete Tiles with mortar", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "shdid2011" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Debonding of ridge tile from mortar" + } + } + } + }, + "RCOV.shingles.001b": { + "Description": "Roof Cover - Asphalt Shingles with standard construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "jain2020" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RCOV.shingles.002a": { + "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "grayson2013" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + }, + "RCOV.shingles.002b": { + "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", + "SuggestedComponentBlockSize": "1 EA", + "RoudUpToIntegerQuantity": 1, + "Reference": [ + "gurley2005", + "kakareko2021" + ], + "LimitStates": { + "LS1": { + "DS1": { + "Description": "Separation or pull off" + } + } + } + } +} \ No newline at end of file diff --git a/hurricane/building/component/SimCenter Wind Component Library/data_sources/fragility_header.json b/data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility_header.json similarity index 100% rename from hurricane/building/component/SimCenter Wind Component Library/data_sources/fragility_header.json rename to data_sources/hurricane/building/component/SimCenter Wind Component Library/fragility_header.json diff --git a/hurricane/building/component/SimCenter Wind Component Library/data_sources/generate_library_files.py b/data_sources/hurricane/building/component/SimCenter Wind Component Library/generate_library_files.py similarity index 94% rename from hurricane/building/component/SimCenter Wind Component Library/data_sources/generate_library_files.py rename to data_sources/hurricane/building/component/SimCenter Wind Component Library/generate_library_files.py index 82789ef6..20c3a7cf 100644 --- a/hurricane/building/component/SimCenter Wind Component Library/data_sources/generate_library_files.py +++ b/data_sources/hurricane/building/component/SimCenter Wind Component Library/generate_library_files.py @@ -40,7 +40,9 @@ def create_fragility_files(): 'Description': row['Meta-Description'], 'Comments': row.get('Meta-Comments'), 'SuggestedComponentBlockSize': row['Meta-SuggestedComponentBlockSize'], - 'RoudUpToIntegerQuantity': row['Meta-RoundUpToIntegerQuantity'], + 'RoundUpToIntegerQuantity': ( + 'True' if row['Meta-RoundUpToIntegerQuantity'] else 'False' + ), 'Reference': [ref.strip() for ref in row['Meta-Reference'].split(',')], 'LimitStates': { 'LS1': { diff --git a/hurricane/building/component/SimCenter Wind Component Library/data_sources/source_fragility.csv b/data_sources/hurricane/building/component/SimCenter Wind Component Library/source_fragility.csv similarity index 100% rename from hurricane/building/component/SimCenter Wind Component Library/data_sources/source_fragility.csv rename to data_sources/hurricane/building/component/SimCenter Wind Component Library/source_fragility.csv diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/combine_wind_flood_note.md b/data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/combine_wind_flood_note.md similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 coupled/combine_wind_flood_note.md rename to data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/combine_wind_flood_note.md diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/fitted_parameters.csv b/data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/fitted_parameters.csv similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/fitted_parameters.csv rename to data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/fitted_parameters.csv diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/generate_library_files.py b/data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/generate_library_files.py similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/generate_library_files.py rename to data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/generate_library_files.py diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/input_files/huDamLossFun.xlsx b/data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/input_files/huDamLossFun.xlsx similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/input_files/huDamLossFun.xlsx rename to data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/input_files/huDamLossFun.xlsx diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/input_files/huDamLossFunEF.xlsx b/data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/input_files/huDamLossFunEF.xlsx similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/input_files/huDamLossFunEF.xlsx rename to data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/input_files/huDamLossFunEF.xlsx diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/input_files/huListOfWindBldgTypes.xlsx b/data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/input_files/huListOfWindBldgTypes.xlsx similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/input_files/huListOfWindBldgTypes.xlsx rename to data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/input_files/huListOfWindBldgTypes.xlsx diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/input_files/huListOfWindBldgTypesEF.xlsx b/data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/input_files/huListOfWindBldgTypesEF.xlsx similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/input_files/huListOfWindBldgTypesEF.xlsx rename to data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/input_files/huListOfWindBldgTypesEF.xlsx diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/input_files/metadata.json b/data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/input_files/metadata.json similarity index 94% rename from hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/input_files/metadata.json rename to data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/input_files/metadata.json index 34c871bd..9146f8f7 100644 --- a/hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/input_files/metadata.json +++ b/data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/input_files/metadata.json @@ -1,7 +1,7 @@ { "_GeneralInformation": { - "ShortName": "Hazus Hurricane Methodology - Buildings", - "Description": "The models in this dataset are based on version 4.2 of the Hazus Hurricane Model Technical Manual", + "ShortName": "SimCenter Coupled Hurricane Models (Hazus-calibrated)", + "Description": "These building models are a SimCenter recalibration of the building models from the Hazus Hurricane Methodology for damage-driven (coupled) loss assessment. The Hazus models provide damage and loss using separate multilinear functions of wind speed; here, normal and lognormal fragility functions were fit to the Hazus damage curves, and a deterministic loss ratio was calibrated for each damage state so that the results closely approximate most of the original Hazus loss functions. This adapts the model form for coupled analysis while preserving the underlying Hazus data. For the unmodified source models, see the 'Hazus Hurricane Methodology - Buildings' dataset.", "Version": "1.0", "ComponentGroups": { "W - Wood": { diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/test.ipynb b/data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/test.ipynb similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 coupled/data_sources/test.ipynb rename to data_sources/hurricane/building/portfolio/Hazus v5.1 coupled/test.ipynb diff --git a/hurricane/building/portfolio/Hazus v5.1 original/combine_wind_flood_note.md b/data_sources/hurricane/building/portfolio/Hazus v5.1 original/combine_wind_flood_note.md similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 original/combine_wind_flood_note.md rename to data_sources/hurricane/building/portfolio/Hazus v5.1 original/combine_wind_flood_note.md diff --git a/hurricane/building/portfolio/Hazus v5.1 original/note.md b/data_sources/hurricane/building/portfolio/Hazus v5.1 original/note.md similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 original/note.md rename to data_sources/hurricane/building/portfolio/Hazus v5.1 original/note.md diff --git a/seismic/building/component/FEMA P-58 2nd Edition/data_sources/generate_library_files.py b/data_sources/seismic/building/component/FEMA P-58 2nd Edition/generate_library_files.py similarity index 99% rename from seismic/building/component/FEMA P-58 2nd Edition/data_sources/generate_library_files.py rename to data_sources/seismic/building/component/FEMA P-58 2nd Edition/generate_library_files.py index f3b3e02c..f22cde06 100644 --- a/seismic/building/component/FEMA P-58 2nd Edition/data_sources/generate_library_files.py +++ b/data_sources/seismic/building/component/FEMA P-58 2nd Edition/generate_library_files.py @@ -749,7 +749,14 @@ def create_FEMA_P58_repair_files( # noqa: C901, N802, PLR0915 'Description': cmp_meta['Component_Name'], 'Comments': comments, 'SuggestedComponentBlockSize': ' '.join(block_size), - 'RoundUpToIntegerQuantity': cmp_meta['Round_to_Integer_Unit'], + # The consequence source sheet is read without YES/NO->bool + # coercion (unlike the fragility sheet), so normalize here to the + # canonical 'True'/'False' the rest of the library uses. + 'RoundUpToIntegerQuantity': ( + 'True' + if cmp_meta['Round_to_Integer_Unit'] in ('YES', 'Yes', 'yes') + else 'False' + ), 'ControllingDemand': 'Damage Quantity', 'DamageStates': {}, } diff --git a/seismic/building/component/FEMA P-58 2nd Edition/data_sources/input_files/FEMAP-58_FragilityDatabase_v3.1.2.xls b/data_sources/seismic/building/component/FEMA P-58 2nd Edition/input_files/FEMAP-58_FragilityDatabase_v3.1.2.xls similarity index 100% rename from seismic/building/component/FEMA P-58 2nd Edition/data_sources/input_files/FEMAP-58_FragilityDatabase_v3.1.2.xls rename to data_sources/seismic/building/component/FEMA P-58 2nd Edition/input_files/FEMAP-58_FragilityDatabase_v3.1.2.xls diff --git a/seismic/building/component/FEMA P-58 2nd Edition/data_sources/input_files/FEMA_P58_groups.csv b/data_sources/seismic/building/component/FEMA P-58 2nd Edition/input_files/FEMA_P58_groups.csv similarity index 100% rename from seismic/building/component/FEMA P-58 2nd Edition/data_sources/input_files/FEMA_P58_groups.csv rename to data_sources/seismic/building/component/FEMA P-58 2nd Edition/input_files/FEMA_P58_groups.csv diff --git a/seismic/building/component/FEMA P-58 2nd Edition/data_sources/input_files/FEMA_P58_meta.json b/data_sources/seismic/building/component/FEMA P-58 2nd Edition/input_files/FEMA_P58_meta.json similarity index 94% rename from seismic/building/component/FEMA P-58 2nd Edition/data_sources/input_files/FEMA_P58_meta.json rename to data_sources/seismic/building/component/FEMA P-58 2nd Edition/input_files/FEMA_P58_meta.json index 066bd17f..33923a2c 100644 --- a/seismic/building/component/FEMA P-58 2nd Edition/data_sources/input_files/FEMA_P58_meta.json +++ b/data_sources/seismic/building/component/FEMA P-58 2nd Edition/input_files/FEMA_P58_meta.json @@ -1,7 +1,7 @@ { "_GeneralInformation":{ "ShortName": "FEMA P-58 2nd Edition", - "Description": "The models in this dataset are based on the 2nd edition of FEMA P-58. Specifically, the parameters are parsed from the FEMAP-58_FragilityDatabase_v3.1.2.xls file that is published as part of Volume 3 of the methodology. A few obvious typos and errors have been fixed in that file; these adjustments are captured in the changelog at https://github.com/NHERI-SimCenter/DamageAndLossModelLibrary/blob/main/data_sources/FEMA_P58/changelog.txt . Simultaneous damage states have been replaced with equivalent Mutually exclusive damage states. Component classification is based on UNIFORMAT II as per NISTIR 6389.", + "Description": "The models in this dataset are based on the [2nd edition of FEMA P-58](https://femap58.atcouncil.org/). Specifically, the parameters are parsed from the FEMAP-58_FragilityDatabase_v3.1.2.xls file that is published as part of Volume 3 of the methodology. A few obvious typos and errors have been fixed in that file; these adjustments are captured in the [changelog](https://github.com/NHERI-SimCenter/DamageAndLossModelLibrary/blob/main/data_sources/FEMA_P58/changelog.txt). Simultaneous damage states have been replaced with equivalent Mutually exclusive damage states. Component classification is based on UNIFORMAT II as per NISTIR 6389.", "Version": "1.0", "ComponentGroups": { "B - Shell": { diff --git a/seismic/building/component/FEMA P-58 2nd Edition/data_sources/input_files/changelog.txt b/data_sources/seismic/building/component/FEMA P-58 2nd Edition/input_files/changelog.txt similarity index 100% rename from seismic/building/component/FEMA P-58 2nd Edition/data_sources/input_files/changelog.txt rename to data_sources/seismic/building/component/FEMA P-58 2nd Edition/input_files/changelog.txt diff --git a/seismic/building/portfolio/Hazus v5.1/data_sources/generate_library_files.py b/data_sources/seismic/building/portfolio/Hazus v5.1/generate_library_files.py similarity index 100% rename from seismic/building/portfolio/Hazus v5.1/data_sources/generate_library_files.py rename to data_sources/seismic/building/portfolio/Hazus v5.1/generate_library_files.py diff --git a/seismic/building/portfolio/Hazus v5.1/data_sources/input_files/Hazus_meta.json b/data_sources/seismic/building/portfolio/Hazus v5.1/input_files/Hazus_meta.json similarity index 100% rename from seismic/building/portfolio/Hazus v5.1/data_sources/input_files/Hazus_meta.json rename to data_sources/seismic/building/portfolio/Hazus v5.1/input_files/Hazus_meta.json diff --git a/seismic/building/portfolio/Hazus v5.1/data_sources/input_files/hazus_data_eq.json b/data_sources/seismic/building/portfolio/Hazus v5.1/input_files/hazus_data_eq.json similarity index 100% rename from seismic/building/portfolio/Hazus v5.1/data_sources/input_files/hazus_data_eq.json rename to data_sources/seismic/building/portfolio/Hazus v5.1/input_files/hazus_data_eq.json diff --git a/seismic/building/portfolio/Hazus v6.1/data_sources/generate_library_files.py b/data_sources/seismic/building/portfolio/Hazus v6.1/generate_library_files.py similarity index 100% rename from seismic/building/portfolio/Hazus v6.1/data_sources/generate_library_files.py rename to data_sources/seismic/building/portfolio/Hazus v6.1/generate_library_files.py diff --git a/seismic/building/portfolio/Hazus v6.1/data_sources/input_files/Hazus_meta.json b/data_sources/seismic/building/portfolio/Hazus v6.1/input_files/Hazus_meta.json similarity index 100% rename from seismic/building/portfolio/Hazus v6.1/data_sources/input_files/Hazus_meta.json rename to data_sources/seismic/building/portfolio/Hazus v6.1/input_files/Hazus_meta.json diff --git a/seismic/building/portfolio/Hazus v6.1/data_sources/input_files/hazus_data_eq.json b/data_sources/seismic/building/portfolio/Hazus v6.1/input_files/hazus_data_eq.json similarity index 100% rename from seismic/building/portfolio/Hazus v6.1/data_sources/input_files/hazus_data_eq.json rename to data_sources/seismic/building/portfolio/Hazus v6.1/input_files/hazus_data_eq.json diff --git a/seismic/building/subassembly/Hazus v5.1/data_sources/generate_library_files.py b/data_sources/seismic/building/subassembly/Hazus v5.1/generate_library_files.py similarity index 100% rename from seismic/building/subassembly/Hazus v5.1/data_sources/generate_library_files.py rename to data_sources/seismic/building/subassembly/Hazus v5.1/generate_library_files.py diff --git a/doc/source/_extensions/compute_global_hash.py b/doc/source/_extensions/compute_global_hash.py index 7c8d4b9b..2ae7f00b 100644 --- a/doc/source/_extensions/compute_global_hash.py +++ b/doc/source/_extensions/compute_global_hash.py @@ -1,10 +1,12 @@ -"""Compute a global hash considering all `.csv` files.""" +"""Compute a global hash of the packaged `.csv` files (the doc-cache key).""" from pathlib import Path +from dlml._catalog import data_root from generate_dl_doc import combine_md5_hashes, generate_md5 -resource_folder = Path('../../../') -dlmls = resource_folder.rglob('*.csv') +# Hash exactly the packaged data tree (sorted for a stable order), so the doc +# cache key changes only when a shipped model CSV changes. +dlmls = sorted(Path(str(data_root())).rglob('*.csv')) hashes = [generate_md5(dlml) for dlml in dlmls] print(combine_md5_hashes(hashes)) # noqa: T201 diff --git a/doc/source/_extensions/generate_dl_doc.py b/doc/source/_extensions/generate_dl_doc.py index 7e3647d4..1d0ba5a3 100644 --- a/doc/source/_extensions/generate_dl_doc.py +++ b/doc/source/_extensions/generate_dl_doc.py @@ -14,9 +14,9 @@ import numpy as np from tqdm import tqdm -from visuals import plot_fragility, plot_repair -os.chdir('../') +from dlml._catalog import data_root +from visuals import plot_fragility, plot_repair def generate_md5(file_path): @@ -659,10 +659,17 @@ def ignore_file(dlml): def main(): """Run the code.""" - cache_folder = Path('doc/cache') + # The doc output lives under doc/ (this file is doc/source/_extensions/...); + # resolve those paths from __file__ so they do not depend on the CWD. + doc_root = Path(__file__).resolve().parents[2] + cache_folder = doc_root / 'cache' + doc_folder = doc_root / 'source' / 'dl_doc' + + # The generators discover datasets via relative paths (./seismic, etc.), so + # switch into the packaged data tree first. + os.chdir(str(data_root())) - doc_folder = Path('doc/source/dl_doc') - if Path(doc_folder).exists(): + if doc_folder.exists(): shutil.rmtree(doc_folder) doc_folder.mkdir(parents=True, exist_ok=True) diff --git a/doc/source/_extensions/sphinx_generate_dl_doc.py b/doc/source/_extensions/sphinx_generate_dl_doc.py index 775fcfcb..062e14a2 100644 --- a/doc/source/_extensions/sphinx_generate_dl_doc.py +++ b/doc/source/_extensions/sphinx_generate_dl_doc.py @@ -1,7 +1,7 @@ """Configure Sphinx to run a custom script to generate files.""" -import os import subprocess +import sys from pathlib import Path from sphinx.application import Sphinx @@ -21,7 +21,7 @@ def run_script(app: Sphinx): """ script_path = str(Path(app.srcdir) / '_extensions' / 'generate_dl_doc.py') - result = subprocess.run(['python', script_path], check=True) # noqa: S603, S607 + result = subprocess.run([sys.executable, script_path], check=True) # noqa: S603 if result.returncode != 0: msg = 'Script execution failed' diff --git a/doc/source/_extensions/visuals.py b/doc/source/_extensions/visuals.py index 99d6dfa9..db78c585 100644 --- a/doc/source/_extensions/visuals.py +++ b/doc/source/_extensions/visuals.py @@ -36,11 +36,9 @@ # Contributors: # Adam Zsarnóczay -import argparse import json import os import shutil -import sys from copy import deepcopy from pathlib import Path from textwrap import wrap @@ -49,11 +47,12 @@ import colorlover as cl import numpy as np import pandas as pd -from pelicun.base import convert_to_MultiIndex, pelicun_path from plotly import graph_objects as go from plotly.subplots import make_subplots from scipy.stats import norm, weibull_min +from dlml import convert_to_MultiIndex + def plot_fragility(comp_db_path, output_path, create_zip='0'): # noqa: C901, D103, PLR0912 if create_zip == '1': @@ -1093,37 +1092,3 @@ def check_diff(comp_db_path, output_path): # noqa: D103 # if the output path does not exist, we need to generate else: # noqa: RET505 return True - - -def main(args): # noqa: D103 - parser = argparse.ArgumentParser() - parser.add_argument('viz_type') - parser.add_argument('comp_db_path') - parser.add_argument( - '-o', '--output_path', default='./comp_viz/' - ) # replace with None - parser.add_argument('-z', '--zip', default='0') - - args = parser.parse_args(args) - - viz_type = args.viz_type - comp_db_path = args.comp_db_path - output_path = args.output_path - create_zip = args.zip - - if viz_type == 'fragility': - plot_fragility(comp_db_path, output_path, create_zip) - - elif viz_type == 'repair': - plot_repair(comp_db_path, output_path, create_zip) - - elif viz_type == 'query': - if comp_db_path == 'default_db': - print(pelicun_path) # noqa: T201 - - msg = f'Invalid `viz_type`: {viz_type}' - raise ValueError(msg) - - -if __name__ == '__main__': - main(sys.argv[1:]) diff --git a/doc/source/about/about.rst b/doc/source/about/about.rst index ec837458..1a637830 100644 --- a/doc/source/about/about.rst +++ b/doc/source/about/about.rst @@ -47,11 +47,13 @@ The library includes comprehensive model collections across multiple hazards: Usage ===== -There are three primary ways to interact with the DLML: +There are several ways to work with the DLML: -1. **Discover and Explore Models**: Use the documentation website to browse and understand available models -2. **Perform Calculations with Pelicun**: Integrate with the SimCenter's Pelicun simulation engine for damage and loss calculations -3. **Work with Raw Data**: Access the standardized CSV and JSON files directly from the repository +1. **Install the Python package**: ``pip install simcenter-dlml``, then read the data with the ``dlml`` API (``import dlml``). +2. **Explore visually**: launch the DLML Explorer web app (``pip install "simcenter-dlml[explorer]"`` then ``dlml explorer``) to search, visualize, and assemble model collections. +3. **Browse this documentation website**: model descriptions, parameter tables, and fragility/consequence plots. +4. **Use with Pelicun**: the library is the data backbone for the SimCenter's Pelicun engine and its PBE and R2D desktop applications. +5. **Work with the raw data**: access the standardized CSV and JSON files directly from the repository. Data Organization ================= diff --git a/doc/source/conf.py b/doc/source/conf.py index e82192ea..bc23a5c8 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -67,8 +67,8 @@ intersphinx_mapping = { 'python': ('https://docs.python.org/3/', None), - 'numpy': ('https://numpy.org/doc/stable/objects.inv', None), - 'scipy': ('https://docs.scipy.org/doc/scipy/objects.inv', None), + 'numpy': ('https://numpy.org/doc/stable/', None), + 'scipy': ('https://docs.scipy.org/doc/scipy/', None), } numpydoc_show_class_members = False # TODO(JVM): remove and extend docstrings diff --git a/doc/source/index.rst b/doc/source/index.rst index ad1ca6d7..51b87c4d 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -19,6 +19,8 @@ This library is a project from the NHERI SimCenter designed to address a critica The library includes comprehensive model collections for **seismic**, **hurricane**, and **flood** hazards, covering buildings, infrastructure networks, and individual components from sources including FEMA P-58, FEMA Hazus, and peer-reviewed academic research. +**Getting started:** install the Python package with ``pip install simcenter-dlml`` and read the data with the ``dlml`` API, or launch the interactive DLML Explorer with ``pip install "simcenter-dlml[explorer]"`` and ``dlml explorer``. See the project `README `_ for details. + .. toctree:: :caption: Documentation :maxdepth: 4 diff --git a/doc/source/release_notes/index.rst b/doc/source/release_notes/index.rst index e2cb75ce..0708d69a 100644 --- a/doc/source/release_notes/index.rst +++ b/doc/source/release_notes/index.rst @@ -7,6 +7,14 @@ Release Notes The following sections document the notable changes of each release. The sequence of all changes is available in the `commit logs `_. +Version 3 +----------- + +.. toctree:: + :maxdepth: 2 + + v3.0 + Version 2 ----------- diff --git a/doc/source/release_notes/v3.0.rst b/doc/source/release_notes/v3.0.rst new file mode 100644 index 00000000..51d6c758 --- /dev/null +++ b/doc/source/release_notes/v3.0.rst @@ -0,0 +1,27 @@ +.. _changes_v3_0: + +=========================== +Version 3.0 (July 13, 2026) +=========================== + +This release turns the library into an installable Python package and adds a programmatic API, a command-line interface, and the DLML Explorer web app. The model data itself is unchanged and remains backward compatible. + +Added +----- + +- **Installable package:** the library is published to PyPI as ``simcenter-dlml`` (imported as ``dlml``), with the model data bundled inside the wheel — no runtime download. +- **Python API** (``import dlml``) for discovering datasets and reading model parameters, metadata, and input schemas: ``list_datasets``, ``available_collections``, ``get_fragility`` / ``get_consequence_repair`` / ``get_loss_repair`` / ``get_parameters``, ``get_metadata``, ``get_schema``, ``get_file``, and ``validate_asset`` / ``validate_assets``. +- **Command-line interface** (``dlml``): ``dlml explorer`` launches the web app; ``dlml list`` and ``dlml info`` inspect the packaged datasets. +- **DLML Explorer** web app (the ``simcenter-dlml[explorer]`` extra) for searching, visualizing, and assembling project-specific model collections. +- Test suite, continuous integration, and PyPI trusted publishing. + +Changed +------- + +- **Distribution:** the project is now distributed as a pip-installable package in addition to being bundled with Pelicun; the source moved to a ``src/dlml`` layout with the data under ``src/dlml/data``. +- **Self-contained:** the core library, its API, and the documentation build no longer require Pelicun. The package now bundles the CSV-parsing helper (``convert_to_MultiIndex``) and the controlled vocabularies it validates against (the recognized demand types and probability-distribution families), so the core install depends only on pandas, numpy, and jsonschema. + +Distribution +------------ + +- Version 3.0 is distributed through PyPI as ``simcenter-dlml``. The GitHub repository's ``releases/latest`` continues to point to v2.1.0, so existing Pelicun (≤3.9) installations — which download the model data from the latest GitHub release — keep working unchanged. Subsequent v3.x updates are published to PyPI. diff --git a/pyproject.toml b/pyproject.toml index d3a1ec62..a47a3783 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,39 +1,201 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + [project] -name = "dlml" -version = "2.1.0" +name = "simcenter-dlml" +version = "3.0" description = "Damage and Loss Model Library" readme = "README.md" -license = {text = "BSD-3-Clause"} +license = { text = "BSD-3-Clause" } +requires-python = ">=3.9" authors = [ - {name = "Adam Zsarnóczay", email = "adamzs@stanford.edu"} + { name = "Adam Zsarnóczay", email = "adamzs@stanford.edu" }, +] +keywords = [ + "natural-hazards", + "fragility", + "consequence", + "damage-and-loss", + "pelicun", +] +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: BSD License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Topic :: Scientific/Engineering", +] +dependencies = [ + "pandas>=2.0", + "numpy>=1.22", + "jsonschema>=4.0", +] + +[project.optional-dependencies] +# The DLML Explorer web app (`dlml explorer`). numpy and pandas come from the +# core dependencies above. Note: qdrant-client[fastembed] pulls onnxruntime, +# whose wheels target modern CPythons, so `simcenter-dlml[explorer]` effectively +# Python >=3.10 even though the core library supports 3.9. The first search run +# downloads the embedding model from HuggingFace (`dlml explorer` warms it up +# front; the app also degrades gracefully if the download or the dependencies +# are unavailable). +explorer = [ + "streamlit>=1.48.0", + "plotly", + "colorlover", + "scipy", + "qdrant-client[fastembed]>=1.14.0", +] +test = [ + # Pin to the 3.9 line: it matches the offline-import guard in + # tests/test_pelicun_equivalence.py, and it stops the resolver from picking + # a pelicun that would fetch DLML data from the frozen releases/latest during + # CI. Pelicun 3.10 will depend on dlml itself -- revisit then. + "pelicun>=3.9,<3.10", + "pytest>=7", + "pytest-cov", +] +# Lint / type / spell tooling, kept separate from `explorer` so CI can install +# it on Python 3.9. +lint = [ + "ruff==0.7.0", + "codespell", + "mypy", +] +# Dependencies for building the Sphinx documentation website (doc/). The doc +# generators render fragility/consequence plots, so they need plotly, colorlover +# and scipy; they use dlml's own convert_to_MultiIndex, so no pelicun. +doc = [ + "sphinx", + "sphinx-design", + "sphinx-rtd-theme", + "sphinxcontrib-bibtex", + "numpydoc", + "tqdm", + "plotly", + "colorlover", + "scipy", +] +# Everything for local development. Requires Python >=3.10 (via the `explorer` +# extra's onnxruntime dependency). +dev = [ + "simcenter-dlml[test,explorer,lint,doc]", +] + +[project.scripts] +dlml = "dlml.cli:main" + +[project.urls] +Homepage = "https://github.com/NHERI-SimCenter/DamageAndLossModelLibrary" +Documentation = "https://nheri-simcenter.github.io/DamageAndLossModelLibrary/" +Repository = "https://github.com/NHERI-SimCenter/DamageAndLossModelLibrary" + +[tool.hatch.build.targets.wheel] +packages = ["src/dlml"] +exclude = [ + "**/__pycache__/**", + "**/*.pyc", +] + +[tool.hatch.build.targets.sdist] +include = [ + "src/dlml", + "README.md", + "LICENSE", +] +exclude = [ + "**/__pycache__/**", + "**/*.pyc", ] [tool.ruff] line-length = 85 +extend-exclude = ["src/dlml/data", "src/dlml/web", "doc"] +# Honor extend-exclude even when a path is passed explicitly (pre-commit, +# editors), so the web app is never linted by any invocation. +force-exclude = true [tool.ruff.lint] -# Enable all known categories select = ["ALL"] -ignore = ["ANN", "D211", "D212", "Q000", "Q003", "COM812", "D203", "ISC001", "E501", "ERA001", "PGH003", "FIX002", "TD003", "S101", "N801", "S311", "G004", "SIM102", "SIM108", "NPY002", "F401", "INP001", "PLR2004", "D100"] +ignore = [ + "ANN", + "D211", + "D212", + "Q000", + "Q003", + "COM812", + "D203", + "ISC001", + "E501", + "ERA001", + "PGH003", + "FIX002", + "TD003", + "S101", + "N801", + "S311", + "G004", + "SIM102", + "SIM108", + "NPY002", + "F401", + "INP001", + "PLR2004", + "D100", +] preview = false [tool.ruff.lint.per-file-ignores] "*.ipynb" = ["ALL"] +"tests/*" = ["D", "N802", "SLF001", "PLR2004", "PLR6301"] +# The CLI prints to stdout by design (that is its user interface). +"src/dlml/cli.py" = ["T201"] [tool.ruff.lint.pydocstyle] convention = "numpy" [tool.ruff.lint.pylint] -max-args=15 -max-locals=50 -max-returns=11 -max-branches=50 -max-statements=150 -max-bool-expr=5 +max-args = 15 +max-locals = 50 +max-returns = 11 +max-branches = 50 +max-statements = 150 +max-bool-expr = 5 [tool.ruff.format] quote-style = "single" +[tool.pytest.ini_options] +testpaths = ["tests"] + +[tool.coverage.run] +# The web/ subpackage (the Streamlit app) is not exercised by the test suite; +# omit it so the UI modules do not count against the coverage. +omit = ["*/dlml/web/*"] + +[tool.mypy] +files = ["src/dlml"] +# The data tree holds pelicun-specific authoring/config scripts, and web/ is +# the Streamlit app (excluded from every gate for now) -- neither is part of +# the typed dlml API. +exclude = "^src/dlml/(data|web)/" +ignore_missing_imports = true + [tool.codespell] ignore-words = ["ignore_words.txt"] -skip = ["*.html", "*/build/*", "*/DB/*"] +skip = [ + "*.html", + "*/build/*", + "*/DB/*", + "src/dlml/data/*", + "src/dlml/web/*", + "data_sources/*", + "*/.venv/*", + "./dist/*", +] diff --git a/requirements.txt b/requirements.txt index 136d8f80..2db26f82 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,13 +1,10 @@ -numpy -scipy -pandas -matplotlib -plotly -pelicun -colorlover -sphinx -sphinx_design -sphinx-rtd-theme -sphinxcontrib-bibtex -numpydoc -tqdm +# The DLML Explorer and all its dependencies are defined by the packaged +# `explorer` extra in pyproject.toml -- there is no separate dependency list to +# keep in sync. This one line installs the app from a checkout (e.g. Streamlit +# Community Cloud, which reads this file and should point its main file at +# src/dlml/web/app.py). After the package is published to PyPI this can become +# `simcenter-dlml[explorer]`. +# +# Note: `[explorer]` pulls onnxruntime (via fastembed), so it targets Python +# >=3.10. +.[explorer] diff --git a/run_checks.sh b/run_checks.sh deleted file mode 100755 index f6609fbb..00000000 --- a/run_checks.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -# Spell-check -echo "Spell-checking." -echo -codespell . -if [ $? -ne 0 ]; then - echo "Spell-checking failed." - exit 1 -fi - -# Check formatting with ruff -echo "Checking formatting with 'ruff format --diff'." -echo -ruff format --diff -if [ $? -ne 0 ]; then - echo "ruff format failed." - exit 1 -fi - -# Run ruff for linting -echo "Linting with 'ruff check --fix'." -echo -ruff check --fix --output-format concise -if [ $? -ne 0 ]; then - echo "ruff check failed." - exit 1 -fi - -echo "All checks passed successfully." -echo diff --git a/scripts/check.sh b/scripts/check.sh new file mode 100755 index 00000000..003f34da --- /dev/null +++ b/scripts/check.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# +# Local mirror of the CI checks. Run from the repository root: +# ./scripts/check.sh +# (also wired up as a git pre-commit hook). +# +# Scope note: checks cover `src/dlml` and `tests`. The Streamlit web app under +# `src/dlml/web` is intentionally excluded from every gate for now (see the +# exclusions in pyproject.toml); conforming it to the package's standards is a +# tracked follow-up. + +set -e + +echo '=== Stage 1: Lint & Format ===' + +echo 'Running Ruff Linter...' +uv run ruff check src/dlml tests + +echo 'Running Ruff Formatter Check...' +uv run ruff format --check --diff src/dlml tests + +echo 'Running Codespell...' +uv run codespell src/dlml tests README.md + +echo '=== Stage 2: Type Check ===' + +echo 'Running Mypy...' +uv run mypy + +echo '=== Stage 3: Tests ===' + +echo 'Running Pytest with Coverage...' +uv run pytest \ + --cov=dlml \ + --cov-branch \ + --cov-report=term-missing \ + --cov-fail-under=90 \ + -v + +echo 'All checks passed!' diff --git a/src/dlml/__init__.py b/src/dlml/__init__.py new file mode 100644 index 00000000..812f52ea --- /dev/null +++ b/src/dlml/__init__.py @@ -0,0 +1,50 @@ +"""Damage and Loss Model Library (dlml).""" + +from importlib import metadata + +from dlml._catalog import DatasetFileNotFoundError, UnknownDatasetError +from dlml.api import ( + available_collections, + convert_to_MultiIndex, + get_consequence_repair, + get_file, + get_fragility, + get_loss_repair, + get_metadata, + get_parameters, + get_schema, + list_datasets, + validate_asset, + validate_assets, +) +from dlml.vocabulary import ( + DEMAND_TYPES, + DISTRIBUTION_FAMILIES, + EDP_to_demand_type, +) + +try: + __version__ = metadata.version('simcenter-dlml') +except metadata.PackageNotFoundError: # pragma: no cover + __version__ = '0.0.0+local' + +__all__ = [ + 'DEMAND_TYPES', + 'DISTRIBUTION_FAMILIES', + 'DatasetFileNotFoundError', + 'EDP_to_demand_type', + 'UnknownDatasetError', + '__version__', + 'available_collections', + 'convert_to_MultiIndex', + 'get_consequence_repair', + 'get_file', + 'get_fragility', + 'get_loss_repair', + 'get_metadata', + 'get_parameters', + 'get_schema', + 'list_datasets', + 'validate_asset', + 'validate_assets', +] diff --git a/src/dlml/_catalog.py b/src/dlml/_catalog.py new file mode 100644 index 00000000..ae525d0b --- /dev/null +++ b/src/dlml/_catalog.py @@ -0,0 +1,343 @@ +""" +Convention-based discovery and resolution of dlml datasets. + +Datasets are discovered by walking the packaged ``data/`` tree, and their +files are resolved by an enforced naming convention: a file is found only +if it is named exactly as the convention dictates. + +A **dataset** is a leaf folder under ``data/`` that directly contains at +least one collection's parameters CSV; its ID is the folder path relative +to ``data/``, e.g. ``seismic/building/portfolio/Hazus v6.1``. Within a +dataset, models are grouped into **collections** -- ``fragility``, +``consequence_repair`` and ``loss_repair`` -- and each model is one row of +a collection's table. The naming conventions are: + +- collection parameters: ``.csv`` +- collection metadata: ``.json`` (may be absent) +- input validation schema: ``input_schema.json`` (optional) +- Pelicun auto-population script: ``pelicun_config.py`` (optional) +- any other file is an extra file, reachable through :func:`file_path` + +This module is pelicun-free and only resolves paths; it does not read file +contents. +""" + +from __future__ import annotations + +import difflib +import functools +from importlib import resources +from pathlib import Path +from typing import cast + +#: Collections a dataset may provide, each stored as a parameters CSV and +#: an optional metadata JSON. +_COLLECTIONS = ('fragility', 'consequence_repair', 'loss_repair') +#: Conventional name of the input-validation schema file. +_SCHEMA_FILE = 'input_schema.json' +#: Conventional name of the Pelicun auto-population script. +_CONFIG_SCRIPT_FILE = 'pelicun_config.py' + + +class UnknownDatasetError(KeyError): + """Raised when a dataset ID does not exist in the data tree.""" + + +class DatasetFileNotFoundError(KeyError): + """Raised when a requested file is absent for a dataset.""" + + +def data_root() -> Path: + """ + Return the root of the packaged library data tree. + + Returns + ------- + Path + A path-like handle to the ``data`` directory inside the + installed ``dlml`` package. + + """ + # importlib.resources types this as a Traversable; for a normal + # (unpacked) installation it is a concrete pathlib.Path. + return cast(Path, resources.files('dlml') / 'data') + + +@functools.lru_cache(maxsize=1) +def _discover_dataset_ids() -> tuple[str, ...]: + """ + Discover dataset IDs by walking the packaged data tree. + + A folder is a dataset if it directly contains at least one + collection's parameters CSV. Dataset folders are not descended into. + The result is cached as an immutable tuple. + + Returns + ------- + tuple of str + The dataset IDs (folder paths relative to ``data/``), sorted. + + """ + found: list[str] = [] + stack: list[tuple[Path, str]] = [(data_root(), '')] + while stack: + node, prefix = stack.pop() + children = list(node.iterdir()) + names = {child.name for child in children if child.is_file()} + if any(f'{collection}.csv' in names for collection in _COLLECTIONS): + found.append(prefix) + continue + for child in children: + # Intermediate folders hold only subfolders, so the false + # branch (a loose file) never fires for real data. + if child.is_dir(): # pragma: no branch + rel = f'{prefix}/{child.name}' if prefix else child.name + stack.append((child, rel)) + return tuple(sorted(found)) + + +def dataset_ids() -> list[str]: + """ + Return the discovered dataset IDs. + + Returns + ------- + list of str + The dataset IDs (folder paths relative to ``data/``), sorted. A + new list is returned on each call. + + """ + return list(_discover_dataset_ids()) + + +def _validate_dataset_id(dataset_id: str) -> None: + """ + Check that a dataset ID is known. + + Raises + ------ + UnknownDatasetError + If the dataset ID does not exist. The error message lists the + closest known IDs as suggestions. + + """ + known = dataset_ids() + if dataset_id in known: + return + suggestions = difflib.get_close_matches(dataset_id, known, n=3) + msg = f'unknown dataset ID: {dataset_id!r}' + if suggestions: + hint = ', '.join(repr(item) for item in suggestions) + msg = f'{msg}. Did you mean: {hint}?' + raise UnknownDatasetError(msg) + + +def _dataset_root(dataset_id: str) -> Path: + """Return the resolved data folder for a validated dataset.""" + _validate_dataset_id(dataset_id) + node = data_root() + for part in dataset_id.split('/'): + node = node / part + return node + + +def available_collections(dataset_id: str) -> list[str]: + """ + Return the collections a dataset provides parameters for. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + + Returns + ------- + list of str + The sorted collections whose parameters CSV exists. + + """ + root = _dataset_root(dataset_id) + return sorted(c for c in _COLLECTIONS if (root / f'{c}.csv').is_file()) + + +def _reject_unknown_collection(collection: str) -> None: + """ + Check that a collection name is recognized. + + Raises + ------ + DatasetFileNotFoundError + If ``collection`` is not one of the known collections. + + """ + if collection not in _COLLECTIONS: + msg = ( + f'{collection!r} is not a known collection; ' + f'expected one of {list(_COLLECTIONS)}' + ) + raise DatasetFileNotFoundError(msg) + + +def parameters_path(dataset_id: str, collection: str) -> Path: + """ + Resolve the parameters CSV for a collection. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + collection: str + One of ``'fragility'``, ``'consequence_repair'`` or + ``'loss_repair'``. + + Returns + ------- + Path + A path-like handle to ``.csv``. + + Raises + ------ + DatasetFileNotFoundError + If the dataset provides no parameters for the collection. The + error lists the available collections. + + """ + root = _dataset_root(dataset_id) + _reject_unknown_collection(collection) + path = root / f'{collection}.csv' + if not path.is_file(): + msg = ( + f"dataset '{dataset_id}' has no {collection} parameters; " + f'available collections: {available_collections(dataset_id)}' + ) + raise DatasetFileNotFoundError(msg) + return path + + +def metadata_path(dataset_id: str, collection: str) -> Path: + """ + Resolve the metadata JSON for a collection. + + Metadata may be absent even when the parameters CSV is present. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + collection: str + One of ``'fragility'``, ``'consequence_repair'`` or + ``'loss_repair'``. + + Returns + ------- + Path + A path-like handle to ``.json``. + + Raises + ------ + DatasetFileNotFoundError + If the dataset provides no metadata for the collection. The + error lists the available collections. + + """ + root = _dataset_root(dataset_id) + _reject_unknown_collection(collection) + path = root / f'{collection}.json' + if not path.is_file(): + msg = ( + f"dataset '{dataset_id}' has no {collection} metadata; " + f'available collections: {available_collections(dataset_id)}' + ) + raise DatasetFileNotFoundError(msg) + return path + + +def schema_path(dataset_id: str) -> Path: + """ + Resolve the input-validation schema for a dataset. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + + Returns + ------- + Path + A path-like handle to ``input_schema.json``. + + Raises + ------ + DatasetFileNotFoundError + If the dataset has no input schema. + + """ + root = _dataset_root(dataset_id) + path = root / _SCHEMA_FILE + if not path.is_file(): + msg = f"dataset '{dataset_id}' has no input schema" + raise DatasetFileNotFoundError(msg) + return path + + +def config_script_path(dataset_id: str) -> Path: + """ + Resolve the Pelicun auto-population script for a dataset. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + + Returns + ------- + Path + A path-like handle to ``pelicun_config.py``. + + Raises + ------ + DatasetFileNotFoundError + If the dataset has no config script. + + """ + root = _dataset_root(dataset_id) + path = root / _CONFIG_SCRIPT_FILE + if not path.is_file(): + msg = f"dataset '{dataset_id}' has no config script" + raise DatasetFileNotFoundError(msg) + return path + + +def file_path(dataset_id: str, filename: str) -> Path: + """ + Resolve any file in a dataset's folder by its exact name. + + This is the escape hatch for extra files (e.g. + ``combine_wind_flood.csv``) that fall outside the naming convention. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + filename: str + The exact name of a file in the dataset's folder. + + Returns + ------- + Path + A path-like handle to the file. + + Raises + ------ + DatasetFileNotFoundError + If the folder has no such file. The error lists the folder's + files. + + """ + root = _dataset_root(dataset_id) + path = root / filename + if not path.is_file(): + present = sorted(c.name for c in root.iterdir() if c.is_file()) + msg = f"dataset '{dataset_id}' has no file {filename!r}; files: {present}" + raise DatasetFileNotFoundError(msg) + return path diff --git a/src/dlml/_tabular.py b/src/dlml/_tabular.py new file mode 100644 index 00000000..e36d3c4b --- /dev/null +++ b/src/dlml/_tabular.py @@ -0,0 +1,250 @@ +""" +Tabular (CSV) format deserializer for the dlml library. + +The functions in this module are ported from pelicun (``base.py`` and +``file_io.py``) and serve as dlml's deserializer for its own CSV format. +They must remain behavior-compatible with pelicun: a behavioral +equivalence test against pelicun lands in a later step. The logic is +preserved verbatim from the pelicun source, adjusting only imports and +inlining pelicun-internal references so the module is standalone and +pelicun-free. +""" + +from __future__ import annotations + +from pathlib import Path +from typing import Any + +import numpy as np +import pandas as pd + + +def convert_to_MultiIndex( # noqa: N802 + data: pd.DataFrame | pd.Series, axis: int = 0, *, inplace: bool = False +) -> pd.DataFrame | pd.Series: + """ + Convert the index of a DataFrame to a MultiIndex. + + We assume that the index uses standard SimCenter convention to + identify different levels: a dash character ('-') is expected to + separate each level of the index. + + Parameters + ---------- + data: DataFrame + The DataFrame that will be modified. + axis: int, optional, default:0 + Identifies if the index (0) or the columns (1) shall be + edited. + inplace: bool, optional, default:False + If yes, the operation is performed directly on the input + DataFrame and not on a copy of it. + + Returns + ------- + DataFrame + The modified DataFrame. + + Raises + ------ + ValueError + If an invalid axis is specified. + + """ + # check if the requested axis is already a MultiIndex + if ((axis == 0) and (isinstance(data.index, pd.MultiIndex))) or ( + (axis == 1) and (isinstance(data.columns, pd.MultiIndex)) + ): + # if yes, return the data unchanged + return data + + if axis == 0: + index_labels = [str(label).split('-') for label in data.index] + + elif axis == 1: + index_labels = [str(label).split('-') for label in data.columns] + + else: + msg = f'Invalid axis parameter: {axis}' + raise ValueError(msg) + + max_lbl_len = np.max([len(labels) for labels in index_labels]) + + for l_i, labels in enumerate(index_labels): + if len(labels) != max_lbl_len: + labels += [''] * (max_lbl_len - len(labels)) # noqa: PLW2901 + index_labels[l_i] = labels + + index_labels_np = np.array(index_labels) + + if index_labels_np.shape[1] > 1: + data_mod = data if inplace else data.copy() + + if axis == 0: + data_mod.index = pd.MultiIndex.from_arrays(index_labels_np.T) + + else: + data_mod.columns = pd.MultiIndex.from_arrays(index_labels_np.T) + + return data_mod + + return data + + +def convert_dtypes(dataframe: pd.DataFrame) -> pd.DataFrame: + """ + Convert columns to a numeric datatype whenever possible. + + The function replaces None with NA otherwise columns containing + None would continue to have the `object` type. + + Parameters + ---------- + dataframe: DataFrame + The DataFrame that will be modified. + + Returns + ------- + DataFrame + The modified DataFrame. + + """ + with ( + pd.option_context('future.no_silent_downcasting', True), # noqa: FBT003 + pd.option_context('mode.copy_on_write', True), # noqa: FBT003 + ): + dataframe = dataframe.fillna(value=np.nan).infer_objects() + + # We want numeric conversion to be best-effort: columns that parse + # as numbers are converted, columns that do not (e.g. unit strings) + # are left untouched. Historically this was expressed as + # `pd.to_numeric(x, errors='ignore')`, but that option is deprecated + # in pandas 2.2 and scheduled to raise in a future release. The + # replacement recommended by the pandas docs is to catch the + # parse failure ourselves and fall back to the original column. + # See: https://pandas.pydata.org/docs/reference/api/pandas.to_numeric.html + def _to_numeric_if_possible(column: pd.Series) -> pd.Series: + try: + return pd.to_numeric(column) + except (ValueError, TypeError): + return column + + # note: `axis=0` applies the function to the columns + return dataframe.apply(_to_numeric_if_possible, axis=0) + + +def check_if_str_is_na(string: Any) -> bool: + """ + Check if the provided string can be interpreted as N/A. + + Parameters + ---------- + string: object + The string to evaluate + + Returns + ------- + bool + The evaluation result. Yes, if the string is considered N/A. + """ + na_vals = { + '', + 'N/A', + '-1.#QNAN', + 'null', + 'None', + '', + 'nan', + '-NaN', + '1.#IND', + 'NaN', + '#NA', + '1.#QNAN', + 'NULL', + '-nan', + '#N/A', + '#N/A N/A', + 'n/a', + '-1.#IND', + 'NA', + } + # obtained from Pandas' internal STR_NA_VALUES variable. + + return isinstance(string, str) and string in na_vals + + +def with_parsed_str_na_values(df: pd.DataFrame) -> pd.DataFrame: + """ + Identify string values interpretable as N/A. + + Given a dataframe, this function identifies values that have + string type and can be interpreted as N/A, and replaces them with + actual NA's. + + Parameters + ---------- + df: pd.DataFrame + Dataframe to process + + Returns + ------- + pd.DataFrame + The dataframe with proper N/A values. + """ + # Replace string NA values with actual NaNs + return df.apply( + lambda col: col.map(lambda x: np.nan if check_if_str_is_na(x) else x) + ) + + +def load_tabular(path: str | Path) -> pd.DataFrame: + """ + Load a dlml model-parameter CSV into a tidy DataFrame. + + Replicates exactly what pelicun does when it loads a + model-parameter CSV, i.e. ``file_io.load_data`` called with + ``unit_conversion_factors=None``, ``orientation=1``, + ``reindex=False`` and ``return_units=False``. The data is assumed + to follow the standard SimCenter tabular schema: a single header + line and an index column, with levels separated by a dash + character ('-'). + + Parameters + ---------- + path: str or Path + The location of the source CSV file. + + Returns + ------- + pd.DataFrame + The parsed data, with both columns and index converted to a + MultiIndex where applicable and sorted. + + """ + filepath = Path(path).resolve() + + # read the CSV using the same parameters as pelicun's load_from_file + data = pd.read_csv( + filepath, + header=0, + index_col=0, + low_memory=False, + encoding_errors='replace', + ) + + # NOTE on pelicun fidelity: load_data separates an optional 'units' + # row/column at this point. The DLML tabular schema never uses one -- + # units are carried in named columns such as 'Demand-Unit' / 'DV-Unit', + # never a bare 'units' entry -- so that branch is intentionally omitted. + # The output stays identical to pelicun's + # load_data(None, orientation=1, reindex=False) for every DLML file, as + # the behavioral equivalence test verifies. + data = convert_dtypes(data) + + # convert columns to MultiIndex if needed, then sort + data = convert_to_MultiIndex(data, axis=1) + data = data.sort_index(axis=1) + + # reindex=False: convert index to MultiIndex if needed, then sort + data = convert_to_MultiIndex(data, axis=0) + return data.sort_index() diff --git a/src/dlml/api.py b/src/dlml/api.py new file mode 100644 index 00000000..cc9b09d2 --- /dev/null +++ b/src/dlml/api.py @@ -0,0 +1,335 @@ +""" +Public API of the Damage and Loss Model Library. + +This module is the supported entry point for reading packaged datasets. It +exposes dataset and collection discovery, parsed model parameters and +metadata, input schemas, an escape hatch for extra files, and asset +validation against a dataset's input schema. + +Parsed objects (DataFrames, dicts, validators) are cached so repeated calls +are cheap. The public accessors return defensive copies, so callers may +freely mutate what they receive without corrupting the shared cache. + +The module is pelicun-free: importing it never imports pelicun. +""" + +from __future__ import annotations + +import copy +import functools +import json +from typing import TYPE_CHECKING + +import jsonschema + +from dlml import _catalog +from dlml._tabular import convert_to_MultiIndex, load_tabular + +if TYPE_CHECKING: + from pathlib import Path + + import pandas as pd + +__all__ = [ + 'available_collections', + 'convert_to_MultiIndex', + 'get_consequence_repair', + 'get_file', + 'get_fragility', + 'get_loss_repair', + 'get_metadata', + 'get_parameters', + 'get_schema', + 'list_datasets', + 'validate_asset', + 'validate_assets', +] + + +# --------------------------------------------------------------------------- +# Dataset and collection discovery +# --------------------------------------------------------------------------- + + +def list_datasets() -> list[str]: + """ + List the IDs of every packaged dataset. + + Returns + ------- + list of str + The dataset IDs (folder paths relative to ``data/``), sorted. + + """ + return _catalog.dataset_ids() + + +def available_collections(dataset_id: str) -> list[str]: + """ + List the collections a dataset provides parameters for. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + + Returns + ------- + list of str + The sorted collections whose parameters CSV exists, a subset of + ``('fragility', 'consequence_repair', 'loss_repair')``. + + """ + return _catalog.available_collections(dataset_id) + + +# --------------------------------------------------------------------------- +# Model parameters +# --------------------------------------------------------------------------- + + +@functools.cache +def _load_parameters(dataset_id: str, collection: str) -> pd.DataFrame: + """Resolve and parse a collection's parameters CSV (cached).""" + return load_tabular(_catalog.parameters_path(dataset_id, collection)) + + +def get_parameters(dataset_id: str, collection: str) -> pd.DataFrame: + """ + Return the parsed model parameters for a collection. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + collection: str + One of ``'fragility'``, ``'consequence_repair'`` or + ``'loss_repair'``. + + Returns + ------- + pandas.DataFrame + The parsed parameters, with MultiIndex columns and a + component-ID index. A defensive copy is returned on each call. + + """ + return _load_parameters(dataset_id, collection).copy() + + +def get_fragility(dataset_id: str) -> pd.DataFrame: + """ + Return the fragility model parameters for a dataset. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + + Returns + ------- + pandas.DataFrame + The fragility parameters. A defensive copy is returned on each + call. + + """ + return get_parameters(dataset_id, 'fragility') + + +def get_consequence_repair(dataset_id: str) -> pd.DataFrame: + """ + Return the consequence-repair model parameters for a dataset. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + + Returns + ------- + pandas.DataFrame + The consequence-repair parameters. A defensive copy is returned + on each call. + + """ + return get_parameters(dataset_id, 'consequence_repair') + + +def get_loss_repair(dataset_id: str) -> pd.DataFrame: + """ + Return the loss-repair model parameters for a dataset. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + + Returns + ------- + pandas.DataFrame + The loss-repair parameters. A defensive copy is returned on each + call. + + """ + return get_parameters(dataset_id, 'loss_repair') + + +# --------------------------------------------------------------------------- +# Metadata and schema +# --------------------------------------------------------------------------- + + +@functools.cache +def _load_metadata(dataset_id: str, collection: str) -> dict: + """Resolve and parse a collection's metadata JSON (cached).""" + path = _catalog.metadata_path(dataset_id, collection) + return json.loads(path.read_text(encoding='utf-8')) + + +def get_metadata(dataset_id: str, collection: str) -> dict: + """ + Return the metadata for a collection. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + collection: str + One of ``'fragility'``, ``'consequence_repair'`` or + ``'loss_repair'``. + + Returns + ------- + dict + The parsed metadata. A defensive deep copy is returned on each + call. + + """ + return copy.deepcopy(_load_metadata(dataset_id, collection)) + + +@functools.cache +def _load_schema(dataset_id: str) -> dict: + """Resolve and parse a dataset's input schema (cached).""" + path = _catalog.schema_path(dataset_id) + return json.loads(path.read_text(encoding='utf-8')) + + +def get_schema(dataset_id: str) -> dict: + """ + Return the input-validation schema for a dataset. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + + Returns + ------- + dict + The parsed JSON schema. A defensive deep copy is returned on each + call. + + """ + return copy.deepcopy(_load_schema(dataset_id)) + + +# --------------------------------------------------------------------------- +# Extra files +# --------------------------------------------------------------------------- + + +def get_file(dataset_id: str, filename: str) -> Path: + """ + Resolve any file in a dataset's folder by its exact name. + + This is the escape hatch for extra files (e.g. + ``combine_wind_flood.csv``) that fall outside the naming convention. + The file is not read; a path is returned. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + filename: str + The exact name of a file in the dataset's folder. + + Returns + ------- + Path + The path to the file. + + """ + return _catalog.file_path(dataset_id, filename) + + +# --------------------------------------------------------------------------- +# Asset validation +# --------------------------------------------------------------------------- + + +@functools.cache +def _load_validator(dataset_id: str) -> jsonschema.Draft7Validator: + """Build a Draft7 validator from a dataset's cached schema (cached).""" + return jsonschema.Draft7Validator(_load_schema(dataset_id)) + + +def _format_errors( + validator: jsonschema.Draft7Validator, features: dict +) -> list[str]: + """Return sorted ``': '`` strings for all violations.""" + return sorted( + f'{error.json_path}: {error.message}' + for error in validator.iter_errors(features) + ) + + +def validate_asset(dataset_id: str, features: dict) -> list[str]: + """ + Validate a single asset's features against a dataset's input schema. + + Every schema violation is reported, not just the first. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + features: dict + The asset's feature values, keyed by feature name. + + Returns + ------- + list of str + Sorted human-readable messages, one per violation, each formatted + as ``': '``. An empty list means the asset is + valid. + + """ + return _format_errors(_load_validator(dataset_id), features) + + +def validate_assets(dataset_id: str, assets: dict) -> dict: + """ + Validate many assets against a dataset's input schema. + + Parameters + ---------- + dataset_id: str + The dataset identifier. + assets: dict + A mapping of asset ID to that asset's feature dict. + + Returns + ------- + dict + A report of failures: a mapping of asset ID to its sorted list of + violation messages, including only assets that have at least one + violation. An empty dict means every asset is valid. + + """ + validator = _load_validator(dataset_id) + report: dict = {} + for asset_id, features in assets.items(): + errors = _format_errors(validator, features) + if errors: + report[asset_id] = errors + return report diff --git a/src/dlml/cli.py b/src/dlml/cli.py new file mode 100644 index 00000000..27aa30f1 --- /dev/null +++ b/src/dlml/cli.py @@ -0,0 +1,191 @@ +""" +Command-line interface for the Damage and Loss Model Library. + +The console-script entry point (``dlml``, registered in ``pyproject.toml``) +exposes three subcommands: + +* ``dlml explorer`` -- launch the DLML Explorer (needs the ``[explorer]`` extra). +* ``dlml list`` -- list the packaged datasets and their collections. +* ``dlml info `` -- show a dataset's collections and model counts. + +``list`` and ``info`` use only the core dependencies, so they work from a bare +``pip install simcenter-dlml``; ``explorer`` checks for the optional +dependencies and prints an install hint if they are missing. +""" + +from __future__ import annotations + +import argparse +import importlib.util +import subprocess +import sys +from importlib import resources +from pathlib import Path + +from dlml import api + +#: The app's base theme, mirrored from ``.streamlit/config.toml``. Streamlit +#: reads that file only from the working directory or the user's home, never +#: from inside an installed package, so ``dlml explorer`` passes these as +#: ``--theme.*`` flags to give pip users the intended base palette. The in-app +#: light/dark toggle is a CSS overlay and works regardless of these values. +_THEME = { + 'base': 'light', + 'primaryColor': '#C8382E', + 'backgroundColor': '#F4F6FB', + 'secondaryBackgroundColor': '#FFFFFF', + 'textColor': '#171C26', + 'font': 'sans serif', +} + + +def _streamlit_installed() -> bool: + """Return whether the optional ``streamlit`` dependency is importable.""" + return importlib.util.find_spec('streamlit') is not None + + +def _locate_app() -> Path: + """Return the path to the packaged Streamlit entry script.""" + return Path(str(resources.files('dlml.web'))) / 'app.py' + + +def _theme_args() -> list[str]: + """Return the Streamlit ``--theme.*`` flags carrying the base palette.""" + args: list[str] = [] + for key, value in _THEME.items(): + args += [f'--theme.{key}', value] + return args + + +def _explorer_command(app_path: Path, port: int | None) -> list[str]: + """Assemble the headless, themed ``streamlit run`` command line. + + ``--server.port`` is added only when *port* is given; otherwise Streamlit + uses its own default (typically 8501) and prints the URL itself. + """ + command = [ + sys.executable, + '-m', + 'streamlit', + 'run', + str(app_path), + '--server.headless', + 'true', + '--browser.gatherUsageStats', + 'false', + *_theme_args(), + ] + if port is not None: + command += ['--server.port', str(port)] + return command + + +def _prefetch_search_models() -> None: + """Download the search models up front so first search isn't a silent wait. + + Best-effort: if the search extra is absent, or the download fails (e.g. + offline), the explorer still launches and degrades gracefully in the + browser. + """ + if importlib.util.find_spec('fastembed') is None: + return + print( + 'Preparing the search models ' + '(first run downloads them from HuggingFace; cached afterwards) …', + flush=True, + ) + try: + module = importlib.import_module('dlml.web.st_search.semantic_index') + module.prefetch_embedding_models() + except Exception as exc: # noqa: BLE001 -- non-fatal; search retries on demand + print( + f' note: could not preload the search models ({exc}); ' + 'they will download on first search instead', + file=sys.stderr, + ) + + +def _cmd_explorer(port: int | None) -> int: + """Launch the DLML Explorer web app; return the process exit code.""" + if not _streamlit_installed(): + print( + "The 'dlml explorer' command needs the optional explorer " + "dependencies.\nInstall them with: pip install 'simcenter-dlml[explorer]'", + file=sys.stderr, + ) + return 1 + app_path = _locate_app() + if not app_path.is_file(): + print(f'could not locate the packaged app at: {app_path}', file=sys.stderr) + return 1 + _prefetch_search_models() + if port is None: + print( + 'Launching the DLML Explorer — Streamlit will print the URL below.', + flush=True, + ) + else: + print(f'Launching the DLML Explorer at http://localhost:{port}', flush=True) + return subprocess.call(_explorer_command(app_path, port)) # noqa: S603 + + +def _cmd_list() -> int: + """Print every packaged dataset ID with its collections.""" + for dataset_id in api.list_datasets(): + collections = ', '.join(api.available_collections(dataset_id)) + print(f'{dataset_id} [{collections}]') + return 0 + + +def _cmd_info(dataset_id: str) -> int: + """Print a dataset's collections and per-collection model counts.""" + try: + collections = api.available_collections(dataset_id) + except KeyError as exc: + print(exc.args[0], file=sys.stderr) + return 1 + print(dataset_id) + for collection in collections: + count = len(api.get_parameters(dataset_id, collection)) + print(f' {collection}: {count} models') + return 0 + + +def _build_parser() -> argparse.ArgumentParser: + """Build the argument parser for the ``dlml`` console script.""" + parser = argparse.ArgumentParser( + prog='dlml', + description='Damage and Loss Model Library command-line interface.', + ) + sub = parser.add_subparsers(dest='command', required=True) + + explorer = sub.add_parser('explorer', help='launch the DLML Explorer web app') + explorer.add_argument( + '--port', + type=int, + default=None, + help='port to serve on (default: the Streamlit default, typically 8501)', + ) + + sub.add_parser('list', help='list the packaged datasets and their collections') + + info = sub.add_parser( + 'info', help="show a dataset's collections and model counts" + ) + info.add_argument('dataset', help="dataset ID (see 'dlml list')") + + return parser + + +def main(argv: list[str] | None = None) -> int: + """Parse arguments and dispatch to the selected subcommand.""" + args = _build_parser().parse_args(argv) + if args.command == 'list': + return _cmd_list() + if args.command == 'info': + return _cmd_info(args.dataset) + return _cmd_explorer(args.port) + + +if __name__ == '__main__': # pragma: no cover + raise SystemExit(main()) diff --git a/flood/building/portfolio/Hazus v6.1/FloodRulesets.py b/src/dlml/data/flood/building/portfolio/Hazus v6.1/FloodRulesets.py similarity index 100% rename from flood/building/portfolio/Hazus v6.1/FloodRulesets.py rename to src/dlml/data/flood/building/portfolio/Hazus v6.1/FloodRulesets.py diff --git a/flood/building/portfolio/Hazus v6.1/loss_repair.csv b/src/dlml/data/flood/building/portfolio/Hazus v6.1/loss_repair.csv similarity index 100% rename from flood/building/portfolio/Hazus v6.1/loss_repair.csv rename to src/dlml/data/flood/building/portfolio/Hazus v6.1/loss_repair.csv diff --git a/flood/building/portfolio/Hazus v6.1/pelicun_config.py b/src/dlml/data/flood/building/portfolio/Hazus v6.1/pelicun_config.py similarity index 100% rename from flood/building/portfolio/Hazus v6.1/pelicun_config.py rename to src/dlml/data/flood/building/portfolio/Hazus v6.1/pelicun_config.py diff --git a/hurricane/building/component/SimCenter Wind Component Library/fragility.csv b/src/dlml/data/hurricane/building/component/SimCenter Wind Component Library/fragility.csv similarity index 100% rename from hurricane/building/component/SimCenter Wind Component Library/fragility.csv rename to src/dlml/data/hurricane/building/component/SimCenter Wind Component Library/fragility.csv diff --git a/hurricane/building/component/SimCenter Wind Component Library/fragility.json b/src/dlml/data/hurricane/building/component/SimCenter Wind Component Library/fragility.json similarity index 95% rename from hurricane/building/component/SimCenter Wind Component Library/fragility.json rename to src/dlml/data/hurricane/building/component/SimCenter Wind Component Library/fragility.json index f1c4c0b3..6f2c6ee4 100644 --- a/hurricane/building/component/SimCenter Wind Component Library/fragility.json +++ b/src/dlml/data/hurricane/building/component/SimCenter Wind Component Library/fragility.json @@ -82,7 +82,7 @@ "Description": "Roof-Wall Connection - General fragility", "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft) and a roof type of 6:12 slope gable roof without overhang. Roof sheathing panels are nailed at a spacing of 150mm at the edges. The steel fasteners used are assumed to be hot-dip galvanized to ASTM A153, Class D, with a zinc coating thickness of 43 mm. Panels are nailed to structural trusses or rafters made of spruce-pine-fir (SPF) lumber, spaced 0.6m on center with a specific gravity of 0.36. \n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "dong2016" ], @@ -98,7 +98,7 @@ "Description": "Roof-Wall Connection with Straps", "Comments": "The modeled failure mode related to this component would be the failure of the roof-to-wall connection under wind-induced uplift loads, potentially leading to roof deck or even complete roof failure, which are defined within the damage state descriptions. The installation of roof-to-wall straps is considered a mitigation option within the HAZUS-MH model, specifically for single-family residential buildings that currently have toe-nailed roof-wall connections. \n\nLIMITATIONS: A limitation of this capacity function, as with other component resistances in the model, lies in the fact that these are statistical representations based on laboratory data, engineering analyses, and sometimes engineering judgment. Additionally, they do not give a detailed physical description of the straps themselves, such as their dimensions, material, or specific installation methods. The focus is on the functional capacity of the connection rather than a precise engineering specification of the strap itself. The underlying details of what constitutes a \"strap\" in the model's calculations are likely based on engineering standards and typical construction practices, but these specifics are not elaborated upon in the provided excerpts.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "vickery2006" ], @@ -114,7 +114,7 @@ "Description": "Roof-Wall Connection with Toe nails", "Comments": "This roof-to-wall connection configuration with toenails, specifically represents a connections with old lumber. The modeled failure mode for this connection type would be exceedance of its uplift resistance by wind-induced forces, potentially leading to roof sheathing failure or even roof detachment, which can compromise the building envelope.\n\nLIMITATIONS: Limitations of this capacity function are not explicitly discussed in the provided text, but it is important to acknowledge that this is a simplified representation of a complex structural element, and its actual performance in a hurricane can be influenced by factors such as the age and condition of the lumber, the quality and installation of the nails, and the specific geometry of the connection, none of which are detailed in relation to a specific test series within these sources.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "peng2013", "gurley2005" @@ -131,7 +131,7 @@ "Description": "Roof-Wall Connection with Toe nails", "Comments": "This configuration, consisting of three 8d common toenails connecting a rafter (38x140 mm, #2 grade Southern yellow pine or spruce-pine-fir) to a double top plate (two 38x89 mm, #2 grade Southern yellow pine) at a 3:12 pitch, was investigated in individual connection Test Series 1 and System Tests 1 and 2. In individual tests, the predominant failure mode observed was nail pullout from the top plate. In system tests, where multiple rafters were toe-nailed to a continuous top plate, load-sharing behavior was observed, with the equivalent rafter load exceeding the capacity of the individual toe-nailed connection. However, the ultimate capacities remained low compared to connections with straps or adhesives. \n\nLIMITATIONS: The high variability observed in individual tests suggests a limitation in the predictability of these connections. Results are specific to the tested materials and setup.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997", "shanmugam2009" @@ -148,7 +148,7 @@ "Description": "Roof-Wall Connection with Toe nails", "Comments": "For configurations with toe-nailed roof-to-wall connections, the model would consider the uplift resistance provided by this type of connection. The failure mode modeled would be the failure of the toe-nailed connection under wind-induced uplift forces, which could lead to subsequent damage such as roof cover loss, roof deck failure, or even more severe structural damage. The model implicitly recognizes the relative weakness of toe-nailed connections compared to strapped connections by considering the installation of straps as a mitigation measure for buildings with existing toe-nailed connections.\n\nLIMITATIONS: The provided sources do not explicitly detail specific test series for roof-to-wall connections using toe nails. The capacity function for toe-nailed connections is a statistical representation of their resistance, derived from laboratory test data, engineering analyses, and potentially engineering judgment, as mentioned for other building components. A key limitation of this capacity function is that it represents a simplified model of a complex failure mechanism and relies on statistical data which may not fully capture the variability in actual construction practices and the performance of toe-nailed connections under diverse hurricane conditions.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "vickery2006" ], @@ -164,7 +164,7 @@ "Description": "Roof-Wall Connection with Toe nails and a small strap inside", "Comments": "This connection (Test Series 2) was constructed with three 8d common toenails between the rafter and top plate, along with a small 18-gauge galvanized steel strap secured with five short 8d common nails into the rafter and five 8d common nails into the top plate, installed on the inside face of the wall. Materials used included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure modes observed were strap tear, rafter split, and nail pullout of the rafter. \n\nLIMITATIONS: Placing the strap on the inside reduces uplift capacity compared to an outside installation due to the resulting eccentric load path and rotation of the top plate. High variability was also noted for this configuration", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -180,7 +180,7 @@ "Description": "Roof-Wall Connection with Toe nails and a small strap outside", "Comments": "This connection (Test Series 3) involved three 8d common toenails between the rafter and top plate, combined with a small 18-gauge galvanized steel strap secured with five short 8d common nails into the rafter and five 8d common nails into the top plate, installed on the outside face of the wall. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure modes observed were strap tear and nail pullout of the rafter. \n\nLIMITATIONS: While showing higher uplift capacity than when the strap was installed on the inside, the capacity data is specific to the idealized test setup. Manufacturers' published values may differ due to their reliance on ASTM testing procedures and safety factors", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -196,7 +196,7 @@ "Description": "Roof-Wall Connection with Toe nails and small straps on both sides", "Comments": "This setup (Test Series 4) consisted of three 8d common toenails between the rafter and top plate, supplemented by two small 18-gauge galvanized steel straps, each secured with five short 8d common nails into the rafter and five 8d common nails into the top plate, with one strap installed on the inside and the other on the outside. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure modes reported for this configuration were strap tear and nail pullout of the top plate. \n\nLIMITATIONS: While this configuration significantly increased the uplift capacity compared to a single strap, the capacity was not doubled, suggesting potential interaction or non-linear behavior. System tests (9 and 11) using this configuration did not reach rafter-to-top plate connection failure, as failure occurred in the crib wall. This limits the ultimate capacity data specifically for the connection itself in those system tests.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -212,7 +212,7 @@ "Description": "Roof-Wall Connection with Toe nails, a small strap outside, and plywood nailed.", "Comments": "This connection (Test Series 5) consisted of three 8d common toenails between the rafter and a double top plate, along with a small 18-gauge galvanized steel strap secured with five short 8d common nails into the rafter and five 8d common nails into the top plate, installed on the outside. Additionally, a plywood spacer was placed between the strap and the top plate and was nailed to the top plate. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure mode observed in this test series was strap tear. \n\nLIMITATIONS: While this test aimed to simulate the presence of wall sheathing, the plywood spacer implementation might not fully replicate a full wall sheathing system. Results are from individual tests and may not directly translate to behavior in a continuous roof system.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -228,7 +228,7 @@ "Description": "Roof-Wall Connection with Toe nails, a small strap outside, and plywood not nailed.", "Comments": "This connection (Test Series 6) involved three 8d common toenails between the rafter and a double top plate, along with a small 18-gauge galvanized steel strap secured with five short 8d common nails into the rafter and five 8d common nails into the top plate, installed on the outside face. A plywood spacer was placed between the strap and the top plate but was not nailed. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure mode observed in this test series was nail pullout. \n\nLIMITATIONS: The un-nailed plywood spacer's effect might differ from a fully integrated wall sheathing system. Results are specific to individual connection tests and may not fully represent performance in a continuous roof system where load-sharing occurs", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -244,7 +244,7 @@ "Description": "Roof-Wall Connection with Toe nails and a large strap outside", "Comments": "This connection (Test Series 7) consisted of three 8d common toenails between the rafter and top plate, combined with a large 18-gauge galvanized steel strap secured with eight short 8d common nails into the rafter and eight 8d common nails into the top plate. Importantly, the rafter was sandwiched between two small flanges bent from the metal plate. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure mode observed for this configuration was nail pullout of the top plate. \n\nLIMITATIONS: These results are derived from individual connection tests, and the behavior and capacity might differ in a full roof system due to potential load-sharing effects and the presence of sheathing and other structural elements", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -260,7 +260,7 @@ "Description": "Roof-Wall Connection with Toe nails and a large strap inside", "Comments": "This connection (Test Series 8) was constructed with three 8d common toenails between the rafter and top plate, along with a new large 16-gauge galvanized steel strap secured with eight short 8d common nails into the rafter and eight short 8d common nails into the wall stud (spruce-pine-fir). The strap was located on the inside of the wall. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure mode observed for this configuration was block shear in wood. \n\nLIMITATIONS: A key limitation is that this 'new large strap' provided a direct connection from the rafter to the wall stud, bypassing the top plate for the strap's nailed connection, which is different from typical large straps. As with individual tests, results may not fully reflect the behavior in a complete roof system", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -276,7 +276,7 @@ "Description": "Roof-Wall Connection with Epoxy.", "Comments": "This connection (Test Series 9), using no toe nails, was formed by applying a two-part, hand-mixed epoxy paste between the rafter and top plate, allowed to cure for one week. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure modes observed were rafter split and top-plate fibers pulling apart. \n\nLIMITATIONS: High variability was observed, suggesting that the capacity of such connections may be less predictable compared to mechanically fastened connections. Performance of adhesive connections can be sensitive to factors such as surface preparation, application technique, and environmental conditions during curing.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -292,7 +292,7 @@ "Description": "Roof-Wall Connection with Toe nails and epoxy.", "Comments": "This connection (Test Series 10) was created by applying a two-part, hand-mixed epoxy paste between the rafter and top plate, with three 8d common toenails installed while the epoxy was still wet. The epoxy cured for one week before testing. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure mode observed in this test series was top-plate fibers pulling apart. \n\nLIMITATIONS: A key limitation is the relatively high variability in the capacity data. The specific interaction between the wet epoxy and the toenails and reliance on this particular epoxy product and application method are factors to consider.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -308,7 +308,7 @@ "Description": "Roof-Wall Connection with Toe nails and epoxy on small wood blocks.", "Comments": "This connection (Test Series 11, exploring retrofit) involved three 8d common toenails along with epoxy applied to small wood blocks (approximately 38 x 89 mm, made of either spruce-pine-fir or Southern pine) placed between the rafter and top plate. The epoxy was allowed to set for one week before testing. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure modes observed were rafter split, tearing of top-plate and rafter fibers, failure of wood block fibers, and epoxy failure. \n\nLIMITATIONS: Use of standardized small wood blocks might not fully represent actual retrofit applications. One-week epoxy set time is specific; performance might differ with shorter or longer cure times or different epoxy products.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -324,7 +324,7 @@ "Description": "Roof-Wall Connection with Toe nails and epoxy on small wood blocks.", "Comments": "This connection (Test Series 12, exploring retrofit) included three 8d common toenails along with epoxy applied to small wood blocks (approximately 38 x 89 mm, made of either spruce-pine-fir or Southern pine) placed between the rafter and top plate. The epoxy was allowed to set for only 24 to 48 hours before testing. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure modes observed were rafter split, tearing of top-plate and rafter fibers, failure of wood block fibers, and epoxy failure. \n\nLIMITATIONS: Use of standardized small wood blocks might not fully represent actual retrofit applications. The short 24-48 hour epoxy set time is specific; performance might vary with different products or cure durations. As with other individual tests, results might not entirely reflect the behavior within a complete roof system", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -340,7 +340,7 @@ "Description": "Roof-Wall Connection with Toe nails and epoxy on large wood blocks.", "Comments": "This connection (Test Series 13, exploring retrofit) consisted of three 8d common toenails in addition to epoxy applied to large wood blocks (approximately 89 x 89 mm, made of pressure-treated Southern pine) installed between the rafter and top plate. The epoxy was allowed to cure for one week before the connections were tested. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure modes observed in this test series were top-plate and rafter fiber tear, and wood block split. \n\nLIMITATIONS: Use of standardized large wood blocks might not fully represent actual retrofit applications. One-week epoxy set time is specific; performance might differ with various epoxy products or cure durations. As with individual tests, results might not entirely reflect the behavior within a complete roof system. Note that larger blocks were shown to provide greater capacity than small blocks", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -356,7 +356,7 @@ "Description": "Roof-Wall Connection with Toe nails and acrylic adhesive", "Comments": "This connection (Test Series 14) involved the application of a two-part acrylic adhesive through a diffuser nozzle between the rafter and top plate, immediately followed by the installation of three 8d common toenails while the adhesive was wet. The adhesive was allowed to set for one week before testing. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure modes observed in this test series were toe-nail pullout and top-plate fiber tear. \n\nLIMITATIONS: Results are based on individual connection tests and may not reflect behavior in a complete roof system where load-sharing and sheathing presence influence performance. Performance is specific to the type of acrylic adhesive, application method (wet toenails), and cure time.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -372,7 +372,7 @@ "Description": "Roof-Wall Connection with Toe nails and soaked with acrylic adhesive.", "Comments": "In this setup (Test Series 15), the wood members (rafter and top plate) were first soaked for 24 hours prior to the application of a two-part acrylic adhesive through a diffuser nozzle between them, followed immediately by the installation of three 8d common toenails while the adhesive was wet. The adhesive was then allowed to set for one week before testing. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure modes observed in this test series were toe-nail pullout and top-plate fiber tear. \n\nLIMITATIONS: A significant limitation is the high coefficient of variation, indicating considerable variability in the uplift capacity achieved. Soaking the wood makes these results specific to this pre-treatment. Results may not fully capture the behavior within a complete roof system.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -388,7 +388,7 @@ "Description": "Roof-Wall Connection with Toe nails and acrylic adhesive on small wood blocks.", "Comments": "This connection (Test Series 16, exploring retrofit) was created using three 8d common toenails along with a two-part acrylic adhesive applied through a diffuser nozzle to small wood blocks (approximately 38 x 89 mm, made of either spruce-pine-fir or Southern pine) placed between the rafter and top plate. The acrylic adhesive was allowed to set for one week before the connections were tested. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure modes observed in this test series were rafter split and top-plate fiber tear. \n\nLIMITATIONS: Use of standardized small wood blocks as a retrofit method might not fully represent actual applications. One-week adhesive set time is specific; performance might differ with various acrylic adhesive products or cure durations. As with individual tests, results might not entirely reflect the behavior within a complete roof system.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -404,7 +404,7 @@ "Description": "Roof-Wall Connection with Toe nails and 1/4 inch acrylic adhesive bead", "Comments": "This connection (Test Series 17) consisted of three 8d common toenails along with a 1/4 inch bead of acrylic adhesive applied on either side of the rafter along the top plate. The adhesive was allowed to set for one week before the uplift capacity was tested. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure mode observed in this test series was wood fiber failure. \n\nLIMITATIONS: The connection method using small adhesive beads might not provide a substantial contact area, potentially limiting overall uplift capacity. Performance is specific to the application of a 1/4 inch acrylic adhesive bead. As with individual tests, results may not entirely reflect behavior within a complete roof system.\"", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -420,7 +420,7 @@ "Description": "Roof-Wall Connection with Toe nails and 1/2 inch acrylic adhesive bead", "Comments": "This connection (Test Series 18 in reed1997) was created using three 8d common toenails along with a 1/2 inch bead of acrylic adhesive applied on either side of the rafter along the top plate. The adhesive was allowed to set for one week before the uplift capacity was tested. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure mode observed in this test series was wood fiber failure. \n\nLIMITATIONS: The connection method using small adhesive beads might not provide a substantial contact area, potentially limiting overall uplift capacity, and the relatively high coefficient of variation indicates considerable variability. Performance is specific to the application of a 1/2 inch acrylic adhesive bead. As with individual tests, results may not entirely reflect behavior within a complete roof system.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -436,7 +436,7 @@ "Description": "Roof-Wall Connection with Toe nails and foaming polyurethane adhesive.", "Comments": "This connection (Test Series 19) consisted of three 8d common toenails along with a foaming polyurethane adhesive product generously applied using an air pressure gun to form large fillets. The adhesive was allowed to set for one week before the uplift capacity was tested. Materials included Southern yellow pine double top plates and Southern yellow pine or spruce-pine-fir rafters (#2 grade) at a 3:12 pitch. The predominant failure mode observed in this test series was adhesive shear. \n\nLIMITATIONS: The small sample size of only three specimens might not provide a comprehensive understanding of the connection's behavior and could affect the statistical significance of the results. Performance is specific to the foaming polyurethane adhesive product and application method. As with individual tests, results may not entirely reflect the behavior within a complete roof system", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "reed1997" ], @@ -452,7 +452,7 @@ "Description": "Roof-Wall Connection with Toe nails and Simpson Strong-Tie H10.", "Comments": "The roof-to-wall connection using toenails and a Simpson Strong-Tie H10 metal connector on every truss. The capacity function for this connection type is based on tests conducted at Clemson University. The primary modeled failure mode for this reinforced connection is the exceedance of this higher uplift resistance by wind-induced forces, which, if it occurs, could still lead to roof uplift or detachment and compromise the building envelope. The Simpson Strong-Tie H10 metal connector is identified as a component used to enhance roof-to-wall connections, thereby increasing their resistance to uplift forces. The use of the Simpson Strong-Tie H10 connector is also associated with the \"Reinforce roof-to-wall connections (IBHS Gold)\" retrofit strategy. This strategy aims to provide an uplift connection for each roof support member to the bearing wall by adding metal connectors, described generally as \"hurricane straps\".\n\nLIMITATIONS: Limitations of this capacity function are not explicitly detailed in the provided text, but it is important to note that as it is based on unpublished tests at a specific university and assumes the use of Simpson Strong-Tie H10 connectors on every truss, its accuracy in representing the full spectrum of real-world installations and conditions might be limited by variations in construction quality, specific connector installation details, and the age and condition of the underlying structural members, none of which are addressed within these sources. They also do not offer a detailed description of the connector's physical characteristics or design.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "peng2013", "gurley2005" @@ -468,7 +468,7 @@ "RWC.hurricane_clip.001a": { "Description": "Roof-Wall Connection with Hurricane Clip H2.5.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "li2006", "canfield1991" @@ -484,7 +484,7 @@ "RWC.hurricane_clip.001b": { "Description": "Roof-Wall Connection with Hurricane Clip H2.5.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "li2006", "canfield1991" @@ -500,7 +500,7 @@ "RWC.toe_nail.003": { "Description": "Roof-Wall Connection with Toe nails, 2-16d layout.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "shanmugam2009" ], @@ -515,7 +515,7 @@ "RWC.toe_nail.004": { "Description": "Roof-Wall Connection with Toe nails, 3-8d layout.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "li2006", "reed1997" @@ -531,7 +531,7 @@ "RWC.toe_nail.005": { "Description": "Roof-Wall Connection with Toe nails, 3-16d layout.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "jain2020", "shanmugam2009" @@ -547,7 +547,7 @@ "RWC.toe_nail.006a": { "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "shanmugam2009", "cheng2004" @@ -563,7 +563,7 @@ "RWC.toe_nail.006b": { "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "shanmugam2009", "cheng2004" @@ -579,7 +579,7 @@ "RWC.toe_nail.006c": { "Description": "Roof-Wall Connection with Toe nails, 2-16d layout, box nails.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "shanmugam2009", "cheng2004" @@ -596,7 +596,7 @@ "Description": "Regular Window - General fragility", "Comments": "This window capacity is taken from the 2005 version of the Florida Public Hurricane Loss Model (FPHLM). The modeled failure mode for this window configuration is implicitly defined as the exceedance of its pressure resistance by wind loads calculated for a given hurricane scenario.\n\nLIMITATIONS: Limitations of this capacity function are not explicitly discussed in the provided text, but it is important to recognize that the model likely uses a simplified representation of window performance, and the actual failure of standard windows in a hurricane can be influenced by a variety of factors not detailed in these excerpts, such as the size and type of the window, the quality of installation, and the impact of wind-borne debris (though debris damage is modeled separately in the study).", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "peng2013", "gurley2005" @@ -612,7 +612,7 @@ "WIN.regular.001b": { "Description": "Regular Window - General fragility", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "unnikrishnan2017", @@ -629,7 +629,7 @@ "WIN.regular.001c": { "Description": "Regular Window - General fragility", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "lin2019" ], @@ -644,7 +644,7 @@ "WIN.regular.002a": { "Description": "Regular Window on windward wall", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "lin2019" ], @@ -659,7 +659,7 @@ "WIN.regular.002b": { "Description": "Regular Window on non-windward wall", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "lin2019" ], @@ -675,7 +675,7 @@ "Description": "Window on a 1-story building", "Comments": "This capacity function is used for all windows on a 1-story home. Modeled failure modes for windows on a 1-story building include pressure-induced breakage when the wind load exceeds the window's pressure resistance.\n\nLIMITATIONS: This study does not explicitly specify the type of glass (e.g., annealed, tempered). A limitation of these capacity functions is that they are statistical representations based on laboratory test data, engineering analyses, and in some cases engineering judgment, which may not fully capture the complexities of real-world window installations, the variability in material properties, and the diverse characteristics of windborne debris. The model also simplifies by considering representative building geometries and may not account for specific details of individual windows on a given 1-story structure. The specific size of the window described in the capacity function is not mentioned.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "vickery2006" ], @@ -691,7 +691,7 @@ "Description": "Window on a 2-story building with 2 large windows", "Comments": "This capacity function is used for all windows on a 2-story home. Modeled failure modes for windows on a 2-story building include pressure-induced breakage when the wind load exceeds the window's pressure resistance.\n\nLIMITATIONS: This study does not explicitly specify the type of glass (e.g., annealed, tempered). A limitation of these capacity functions is that they are statistical representations based on laboratory test data, engineering analyses, and in some cases engineering judgment, which may not fully capture the complexities of real-world window installations, the variability in material properties, and the diverse characteristics of windborne debris. The model also simplifies by considering representative building geometries and may not account for specific details of individual windows on a given 2-story structure. The specific size of the window described in the capacity function is not mentioned.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "vickery2006" ], @@ -707,7 +707,7 @@ "Description": "Impact resistant laminated glass window", "Comments": "This window capacity is taken from the 2005 version of the Florida Public Hurricane Loss Model (FPHLM). The modeled failure mode for this window configuration is implicitly defined as the exceedance of its pressure resistance by wind loads calculated for a given hurricane scenario. This configuration aims to increase window and door pressure capacity (resistance). Furthermore, for homes with this type of opening protection, the probability of debris damage is reduced. \n\nLIMITATIONS: Limitations of this capacity function are not explicitly detailed within these excerpts, but it's reasonable to assume that the FPHLM likely relies on standardized testing procedures and that real-world performance could still vary based on factors such as the specific manufacturer and installation quality of the impact-resistant windows, which are not elaborated upon in this dissertation.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "peng2013" @@ -724,7 +724,7 @@ "Description": "Regular Window with Hurricane Shutters", "Comments": "This window capacity is taken from the 2005 version of the Florida Public Hurricane Loss Model (FPHLM). Implementing engineered shutters on all windows is also identified as a key component of the \"Protect openings (shutters) (IBHS Silver)\" retrofit strategy, which aims to increase the window and door pressure capacity (resistance). Additionally, for this configuration, the probability of debris damage is modeled as zero. The modeled failure mode for this window protection type would be the wind load exceeding the pressure resistance of the shutters, leading to potential failure of the window. \n\nLIMITATIONS: Limitations of this capacity function are not explicitly discussed within the provided text, but it is important to acknowledge that real-world performance can vary based on the specific type and quality of the shutters, the installation methods, and the condition of the underlying window frame, details of which are not elaborated upon.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "peng2013" @@ -741,7 +741,7 @@ "Description": "Regular Window 1/8 in 20 sq ft", "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft). A window size of 3.72 square meters with 3.175 mm thick glass was considered. The authors used the American Society of Testing and Materials (ASTM) Standard E-1300 (2003) to specify the strength of annealed glass under uniform wind pressure with a 60-second load duration and a probability of failure of 0.0081. The 60-second resistance value of annealed glass was converted to a 3-second strength by multiplying it by a factor of 1.21. This conversion was done to be consistent with the 3-second gust wind used in ASCE-7. A Weibull cumulative distribution was used to model the probability of failure of the brittle material (glass) under uniform wind load. This is stated as a common model for defining the failure probability of brittle materials like glass. The coefficient of variation of glass strength was noted to be in the range of 0.22\u20130.27.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. Finally, the fragility analysis mentions a specific window size (3.175 mm in 3.72 sq. m window) for calibration. Glass strength is known to be dependent on size and boundary conditions, so the fragility derived for this specific size might not be directly applicable to windows of different dimensions or mounting.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "norville1985", "minor1998", @@ -759,7 +759,7 @@ "WIN.regular.005a": { "Description": "Regular Window 3/16 in 40 sq ft", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "norville1985", "minor1998", @@ -776,7 +776,7 @@ "WIN.regular.005b": { "Description": "Regular Window 3/16 in 40 sq ft", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "norville1985", "minor1998", @@ -793,7 +793,7 @@ "WIN.regular.006": { "Description": "Regular Window 3/16 in 20 sq ft", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "norville1985", "minor1998", @@ -810,7 +810,7 @@ "WIN.regular.007": { "Description": "Regular Window small sized (3.5' x 3.5')", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "yau2011", @@ -827,7 +827,7 @@ "WIN.regular.008": { "Description": "Regular Window medium sized (3.5' x 5.0')", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "grayson2013", @@ -844,7 +844,7 @@ "WIN.regular.009": { "Description": "Regular Window tall sized (3.5' x 6.5')", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "grayson2013" @@ -860,7 +860,7 @@ "WIN.regular.010": { "Description": "Regular Window picture size (6.5' x 6.5')", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "grayson2013" @@ -877,7 +877,7 @@ "Description": "Regular Door - General fragility", "Comments": "This door capacity is taken from the 2005 version of the Florida Public Hurricane Loss Model (FPHLM). The modeled failure mode for this door configuration is implicitly defined as the wind load exceeding its pressure resistance during a simulated hurricane event.\n\nLIMITATIONS: Limitations of this capacity function are not explicitly discussed in the provided text, but it is important to understand that the model likely uses a simplified representation of door performance, and the actual failure of standard doors can be influenced by factors such as the door material, the quality of the doorframe and its attachment to the wall, the locking mechanisms, and potential damage from wind-borne debris (though debris impact is modeled separately for openings) - none of which are detailed.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "peng2013", "gurley2005" @@ -893,7 +893,7 @@ "DOOR.regular.001b": { "Description": "Regular Door - General fragility", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "jain2020" @@ -910,7 +910,7 @@ "Description": "Regular Door - General fragility", "Comments": "This is the general representation of an entry door's resistance to pressure. The primary failure mode considered for the entry door under pressure is pressure-induced failure, where the wind load acting on the door exceeds its resistance capacity, leading to a breach in the building envelope. This breach can then affect internal pressure and potentially lead to further damage.\n\nLIMITATIONS: The sources do not explicitly specify the precise type of entry door that this capacity function considers. Resistances assigned to building components are based on results from laboratory test data, engineering analyses coupled with laboratory data, and in some cases, engineering judgment. The model might not fully capture the wide variety of entry door constructions, installation methods, the condition of the door and its frame, or the complexities of failure mechanisms that can occur during a hurricane. Further, the lack of specific details about the test series or engineering analyses used to derive these fragility parameters for entry doors, makes it difficult to fully understand the empirical or analytical basis for this specific capacity function.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "vickery2006" ], @@ -926,7 +926,7 @@ "Description": "Impact resistant laminated glass door", "Comments": "This door capacity is taken from the 2005 version of the Florida Public Hurricane Loss Model (FPHLM). This configuration aims to increase the pressure capacity of entry doors. The modeled failure mode is implicitly the exceedance of this higher pressure resistance by wind loads during a hurricane. \n\nLIMITATIONS: Limitations of this capacity function are not explicitly detailed in these excerpts, but it's reasonable to infer that the FPHLM likely uses standardized testing procedures, and the actual performance of impact-resistant doors in a hurricane could still be influenced by factors not fully captured in the model, such as the specifics of the door construction, the quality of frame installation, and the performance under prolonged or cyclic loading, which are not elaborated upon.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "peng2013" @@ -943,7 +943,7 @@ "Description": "Regular Door with Hurricane Shutters", "Comments": "This door capacity is taken from the 2005 version of the Florida Public Hurricane Loss Model (FPHLM). This configuration aims to increase the pressure capacity of entry doors. The modeled failure mode is implicitly the exceedance of this higher pressure resistance by wind loads during a hurricane. Furthermore, the model assumes that with hurricane shutters on doors, the probability of debris damage is zero.\n\nLIMITATIONS: Limitations of this capacity function are not explicitly discussed within the provided text, but it is important to acknowledge that real-world performance can vary based on the specific type and quality of the shutters, the installation methods used for doors, and the condition of the underlying door frame, details of which are not elaborated upon in these excerpts.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "peng2013" @@ -960,7 +960,7 @@ "Description": "Glass Door", "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft). The authors used the American Society of Testing and Materials (ASTM) Standard E-1300 (2003) to specify the strength of annealed glass under uniform wind pressure with a 60-second load duration and a probability of failure of 0.0081. The 60-second resistance value of annealed glass was converted to a 3-second strength by multiplying it by a factor of 1.21. This conversion was done to be consistent with the 3-second gust wind used in ASCE-7. A Weibull cumulative distribution was used to model the probability of failure of the brittle material (glass) under uniform wind load. This is stated as a common model for defining the failure probability of brittle materials like glass. The coefficient of variation of glass strength was noted to be in the range of 0.22\u20130.27.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. ASTM E-1300 specifies strength under uniform wind pressure. However, wind loads on buildings, especially during hurricanes, can be complex and non-uniform, with varying pressures at different locations on a window. Additionally, while the study converts the 60-second resistance to a 3-second strength, this conversion factor is an approximation. The actual behavior of glass under different load durations might be more complex. Additionally, the strength of weathered or previously damaged glass might be lower than that of new, undamaged glass, which is likely what ASTM standards address. This time-dependent degradation of glass strength is not explicitly considered.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "dong2016" ], @@ -976,7 +976,7 @@ "Description": "Glass Door", "Comments": "This is the general representation of single-glazed (SG) doors as a specific type of door component, which would include sliding glass doors with single panes of glass. The primary failure mode considered for the SG door under pressure is pressure-induced failure, where the wind load acting on the door exceeds its resistance capacity, leading to a breach in the building envelope. This breach can then affect internal pressure and potentially lead to further damage.\n\nLIMITATIONS: The sources do not explicitly specify the precise type of entry door that this capacity function considers. Resistances assigned to building components are based on results from laboratory test data, engineering analyses coupled with laboratory data, and in some cases, engineering judgment. The model might not fully capture the wide variety of SG door constructions, installation methods, the condition of the door and its frame, or the complexities of failure mechanisms that can occur during a hurricane. Further, the lack of specific details about the test series or engineering analyses used to derive these fragility parameters for SG doors, makes it difficult to fully understand the empirical or analytical basis for this specific capacity function.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "vickery2006" ], @@ -991,7 +991,7 @@ "DOOR.regular.002": { "Description": "Regular Door 6'10\" x 3'2\" size", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "yau2011", @@ -1010,7 +1010,7 @@ "Description": "Garage Door - General fragility", "Comments": "This garage door capacity is taken from the 2005 version of the Florida Public Hurricane Loss Model (FPHLM). The primary modeled failure mode is the garage door being torn from its tracks when wind load exceeds its resistance capacity.\n\nLIMITATIONS: Limitations of this capacity function are not explicitly discussed in the provided text. The failure can be influenced by factors such as the material and construction of the door, the strength and attachment of the supporting tracks and hardware, and potential damage from wind-borne debris (though debris impact is modeled separately for openings) - none of which are detailed.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "peng2013", "gurley2005" @@ -1026,7 +1026,7 @@ "DOOR.garage.001b": { "Description": "Garage Door - General fragility", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "shen2013", "jain2020" @@ -1042,7 +1042,7 @@ "DOOR.garage.001c": { "Description": "Garage Door - General fragility", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "unnikrishnan2017" ], @@ -1058,7 +1058,7 @@ "Description": "Garage Door - General fragility", "Comments": "This fragility describes the interior garage door. It is treated as a general category of a door located within the building, separating the garage space from the interior living space.\n\nLIMITATIONS: The capacity function represents a simplification of real-world door behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of garage door. The model also does not explicitly account for potential vulnerabilities related to the door's connection to the surrounding wall or the operation of the garage door mechanism itself under pressure loads.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "vickery2006" ], @@ -1074,7 +1074,7 @@ "Description": "Wind-reinforced Garage Door", "Comments": "This enhanced garage door capacity is assumed 1.5 times the standard capacity. The modeled failure mode for this garage door configuration is implicitly defined as the wind load exceeding its pressure resistance during a simulated hurricane event. \n\nLIMITATIONS: Limitations of this capacity function are not explicitly discussed in the provided text, but it is reasonable to assume that this is a simplified representation. The actual performance of reinforced garage doors can be influenced by the specifics of the reinforcement, the quality of installation of tracks and hardware, and potential impact from debris (though debris impact is modeled separately for openings), details of which are not elaborated upon in these excerpts.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "peng2013" ], @@ -1089,7 +1089,7 @@ "DOOR.garage.003": { "Description": "2-car Garage Door (6'10\" x 12\")", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "yau2011", @@ -1108,7 +1108,7 @@ "Description": "Double garage door - weak", "Comments": "The primary modeled failure mode for this component is pressure-induced failure, occurring when the wind load exceeds this resistance, leading to a breach in the building envelope. The distinction between \"weak\" and \"strong\" double garage doors within the model implies different construction or reinforcement levels, resulting in varying resistance to pressure, although the sources do not provide specific details on the structural characteristics that differentiate them. Resistances assigned to building components in the HAZUS model are based on results from laboratory test data, engineering analyses coupled with laboratory data, and in some cases, engineering judgment. \n\nLIMITATIONS: This capacity function represents a simplification of real-world door behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of garage door.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "vickery2006" ], @@ -1124,7 +1124,7 @@ "Description": "Double garage door - strong", "Comments": "The primary modeled failure mode for this component is pressure-induced failure, occurring when the wind load exceeds this resistance, leading to a breach in the building envelope. The distinction between \"weak\" and \"strong\" double garage doors within the model implies different construction or reinforcement levels, resulting in varying resistance to pressure, although the sources do not provide specific details on the structural characteristics that differentiate them. Resistances assigned to building components in the HAZUS model are based on results from laboratory test data, engineering analyses coupled with laboratory data, and in some cases, engineering judgment. \n\nLIMITATIONS: This capacity function represents a simplification of real-world door behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of garage door.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "vickery2006" ], @@ -1140,7 +1140,7 @@ "Description": "Wall Sheathing - General fragility", "Comments": "This is a general representation of wall sheathing resistance. Wall sheathing is included as a modeled structural component in the HAZUS-MH hurricane model. The primary failure mode modeled for this component is sheathing being torn off. Resistances assigned to building components in the HAZUS model are based on results from laboratory test data, engineering analyses coupled with laboratory data, and in some cases, engineering judgment. \n\nLIMITATIONs: This capacity function represents a simplification of real-world wall sheathing behavior under wind loads. ", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "vickery2006", "kakareko2021" @@ -1156,7 +1156,7 @@ "WSH.001b": { "Description": "Wall Sheathing - General fragility", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "cope2004", "unnikrishnan2017" @@ -1172,7 +1172,7 @@ "WSH.002a": { "Description": "Wall Sheathing - 6d common nails (2\" length) @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "rosowsky1999", "lee2005", @@ -1189,7 +1189,7 @@ "WSH.002b": { "Description": "Wall Sheathing - 6d common nails (2\" length) @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "rosowsky1999", "lee2005", @@ -1206,7 +1206,7 @@ "WSH.003a": { "Description": "Wall Sheathing - 8d common nails (2.5\" length) @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "rosowsky1999", "lee2005", @@ -1223,7 +1223,7 @@ "WSH.003b": { "Description": "Wall Sheathing - 8d common nails (2.5\" length) @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "rosowsky1999", "lee2005", @@ -1240,7 +1240,7 @@ "WALL.001a": { "Description": "Wood Wall - General fragility", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "cope2004" ], @@ -1255,7 +1255,7 @@ "WALL.001b": { "Description": "Wood Wall - General fragility", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "cope2004" ], @@ -1270,7 +1270,7 @@ "WALL.001c": { "Description": "Wood Wall - General fragility", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "cope2004" ], @@ -1285,7 +1285,7 @@ "WALL.001d": { "Description": "Wood Wall - General fragility", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "cope2004", "unnikrishnan2017" @@ -1301,7 +1301,7 @@ "WALL.001e": { "Description": "Wood Wall - General fragility", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "cope2004", "unnikrishnan2017" @@ -1318,7 +1318,7 @@ "Description": "Wall - Unreinforced gable ends", "Comments": "This component represents an unreinforced gable end wall within the structural damage simulation model developed for the Florida Public Hurricane Loss Model (FPHLM). Gable end walls are modeled as part of the overall wall damage framework, which uses unity checks to determine potential failure. The specific failure mode for this component is Shear failure. \n\nLIMITATIONS: The wall model in the FPHLM is a simplification, for example, treating walls as having simple supports, which is noted as an oversimplification of true conditions. Specific construction details for these unreinforced gable end walls, such as materials or specific fastening schedules, are not explicitly detailed within the provided excerpts. Component capacities in the model are statistical representations based on available literature and engineering judgment, which may not fully capture the variability in actual construction practices or performance. Validation of the model, including wall damage, is limited by available detailed damage data.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "peng2013" @@ -1335,7 +1335,7 @@ "Description": "Wall - Unreinforced gable ends", "Comments": "This component represents an unreinforced gable end wall within the structural damage simulation model developed for the Florida Public Hurricane Loss Model (FPHLM). Gable end walls are modeled as part of the overall wall damage framework, which uses unity checks to determine potential failure. The model predicts failure based on wind-induced loads exceeding the component's capacity, with the specific failure mode for this component being Out of plane failure. \n\nLIMITATIONS: The wall model in the FPHLM is a simplification, for example, treating walls as having simple supports, which is noted as an oversimplification of true conditions. Specific construction details for these unreinforced gable end walls, such as materials or specific fastening schedules, are not explicitly detailed within the provided excerpts. Component capacities in the model are statistical representations based on available literature and engineering judgment, which may not fully capture the variability in actual construction practices or performance. Validation of the model, including wall damage, is limited by available detailed damage data", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "peng2013" @@ -1352,7 +1352,7 @@ "Description": "Wall - Unreinforced gable ends", "Comments": "This component represents an unreinforced gable end wall within the structural damage simulation model developed for the Florida Public Hurricane Loss Model (FPHLM). Gable end walls are modeled as part of the overall wall damage framework, which uses unity checks to determine potential failure. The model predicts failure based on wind-induced loads exceeding the component's capacity, with the specific failure mode for this component being Uplift.\n \nLIMITATIONS: The wall model in the FPHLM is a simplification, for example, treating walls as having simple supports, which is noted as an oversimplification of true conditions. Specific construction details for these unreinforced gable end walls, such as materials or specific fastening schedules, are not explicitly detailed within the provided excerpts. Component capacities in the model are statistical representations based on available literature and engineering judgment, which may not fully capture the variability in actual construction practices or performance. Validation of the model, including wall damage, is limited by available detailed damage data", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "peng2013" @@ -1369,7 +1369,7 @@ "Description": "Wall - Reinforced gable ends", "Comments": "This component represents a reinforced gable end wall within the structural damage simulation model developed for the Florida Public Hurricane Loss Model (FPHLM). Gable end walls are modeled as part of the overall wall damage framework, which uses unity checks to determine potential failure. The model predicts failure based on wind-induced loads exceeding the component's capacity, with the specific failure mode for this component being Shear failure. This type is categorized as \"Reinforced\", implying an enhanced resistance compared to \"Unreinforced\" walls, and potentially corresponding to a retrofit strategy. \n\nLIMITATIONS: The wall model in the FPHLM is a simplification, for example, treating walls as having simple supports, which is noted as an oversimplification of true conditions. Specific construction details for these reinforced gable end walls, particularly the nature and extent of the \"Reinforcement\", are not explicitly detailed within the provided excerpts. Component capacities in the model are statistical representations based on available literature and engineering judgment, which may not fully capture the variability in actual construction practices or performance. Validation of the model, including wall damage, is limited by available detailed damage data", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "peng2013" @@ -1386,7 +1386,7 @@ "Description": "Wall - Reinforced gable ends", "Comments": "This component represents a reinforced gable end wall within the structural damage simulation model developed for the Florida Public Hurricane Loss Model (FPHLM). Gable end walls are modeled as part of the overall wall damage framework, which uses unity checks to determine potential failure. The model predicts failure based on wind-induced loads exceeding the component's capacity, with the specific failure mode for this component being Out of plane failure. This type is categorized as \"Reinforced\", implying an enhanced resistance compared to \"Unreinforced\" walls, and potentially corresponding to a retrofit strategy. \n\nLIMITATIONS: The wall model in the FPHLM is a simplification, for example, treating walls as having simple supports, which is noted as an oversimplification of true conditions. Specific construction details for these reinforced gable end walls, particularly the nature and extent of the \"Reinforcement\", are not explicitly detailed within the provided excerpts. Component capacities in the model are statistical representations based on available literature and engineering judgment, which may not fully capture the variability in actual construction practices or performance. Validation of the model, including wall damage, is limited by available detailed damage data", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "peng2013" @@ -1403,7 +1403,7 @@ "Description": "Wall - Reinforced gable ends", "Comments": "This component represents a reinforced gable end wall within the structural damage simulation model developed for the Florida Public Hurricane Loss Model (FPHLM). Gable end walls are modeled as part of the overall wall damage framework, which uses unity checks to determine potential failure. The model predicts failure based on wind-induced loads exceeding the component's capacity, with the specific failure mode for this component being Uplift. This type is categorized as \"Reinforced\", implying an enhanced resistance compared to \"Unreinforced\" walls, and potentially corresponding to a retrofit strategy. \n\nLIMITATIONS: The wall model in the FPHLM is a simplification, for example, treating walls as having simple supports, which is noted as an oversimplification of true conditions. Specific construction details for these reinforced gable end walls, particularly the nature and extent of the \"Reinforcement\", are not explicitly detailed within the provided excerpts. Component capacities in the model are statistical representations based on available literature and engineering judgment, which may not fully capture the variability in actual construction practices or performance. Validation of the model, including wall damage, is limited by available detailed damage data", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "peng2013" @@ -1419,7 +1419,7 @@ "WALL.004a": { "Description": "Concrete block", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "cope2004" ], @@ -1434,7 +1434,7 @@ "WALL.004b": { "Description": "Concrete block", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "cope2004" ], @@ -1450,7 +1450,7 @@ "Description": "Roof Sheathing with 6d nails @ 6/12 in", "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, a \"6d\" nail is a common size, typically referring to a nail that is approximately 2 inches (51 mm) long. The diameter will also be standardized for this penny size. While the HAZUS model uses \"6d\" to differentiate between different roof sheathing connection strengths. 6/12 in nail pattern for roof sheathing with 6d nails most likely means that the 6d nails are spaced 6 inches apart along one axis of the sheathing panel and 12 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure.\n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "vickery2006" ], @@ -1466,7 +1466,7 @@ "Description": "Roof Sheathing with 8d nails @ 6/6 in", "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, an \"8d\" nail is a common size, typically referring to a nail that is approximately 2 1/2 inches (64 mm) long, and it will have a standardized diameter for this penny size. While the HAZUS model uses \"8d\" to differentiate between different roof sheathing connection strengths. 6/6 in nail pattern for roof sheathing with 8d nails most likely means that the 8d nails are spaced 6 inches apart along one axis of the sheathing panel and 6 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure.\n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "vickery2006" ], @@ -1481,7 +1481,7 @@ "RSH.nails.8d.6p12.001a": { "Description": "Roof Sheathing with 8d nails @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "rosowsky1996", "li2006" @@ -1497,7 +1497,7 @@ "RSH.nails.8d.6p12.001b": { "Description": "Roof Sheathing with 8d nails @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "unnikrishnan2017" ], @@ -1513,7 +1513,7 @@ "Description": "Roof Sheathing with 8d nails @ 6/12 in", "Comments": "The HAZUS model considers plywood and oriented strand board (OSB) as typical materials for roof sheathing panels. In the American wire gauge (AWG) system, an \"8d\" nail is a common size, typically referring to a nail that is approximately 2 1/2 inches (64 mm) long, and it will have a standardized diameter for this penny size. While the HAZUS model uses \"8d\" to differentiate between different roof sheathing connection strengths. 6/12 in nail pattern for roof sheathing with 6d nails most likely means that the 8d nails are spaced 6 inches apart along one axis of the sheathing panel and 12 inches apart along the perpendicular axis. This creates a grid pattern of nail fasteners securing the sheathing to the underlying roof structure. \n\nLIMITATIONS: The capacity function represents a simplification of real-world roof sheathing behavior, and the sources lack specific information on the test series or engineering analyses used to derive these parameters for this particular type of roof sheathing.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "vickery2006" ], @@ -1528,7 +1528,7 @@ "RSH.nails.6d.6p12.002": { "Description": "Roof Sheathing with 6d common nails (2.375\" length) @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1543,7 +1543,7 @@ "RSH.nails.6d.6p12.003a": { "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1558,7 +1558,7 @@ "RSH.nails.6d.6p12.003b": { "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "rosowsky1996", "rosowsky1999", @@ -1577,7 +1577,7 @@ "RSH.nails.6d.6p12.003c": { "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "rosowsky1999", "lee2005", @@ -1594,7 +1594,7 @@ "RSH.nails.6d.6p6.001": { "Description": "Roof Sheathing with 6d common nails (2\" length) @ 6/6 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1609,7 +1609,7 @@ "RSH.nails.8d.6p12.002a": { "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1624,7 +1624,7 @@ "RSH.nails.8d.6p12.002b": { "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "rosowsky1999", "lee2005", @@ -1641,7 +1641,7 @@ "RSH.nails.8d.6p12.002c": { "Description": "Roof Sheathing with 8d common nails (2.5\" length) @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "rosowsky1999", "lee2005", @@ -1658,7 +1658,7 @@ "RSH.nails.8d.6p8.001": { "Description": "Roof Sheathing with 8d common nails (2.5 in length) @ 6/8 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1673,7 +1673,7 @@ "RSH.nails.8d.6p6.002": { "Description": "Roof Sheathing with 8d common nails (2.5 in length) @ 6/6 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1688,7 +1688,7 @@ "RSH.nails.8d.6p12.003": { "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/12 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1703,7 +1703,7 @@ "RSH.nails.8d.6p8.002": { "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/8 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1718,7 +1718,7 @@ "RSH.nails.8d.6p6.003": { "Description": "Roof Sheathing with 8d ring shank nails (2.5 in length) @ 6/6 in", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1733,7 +1733,7 @@ "RSH.nails_ccspf.8d.6p12.001": { "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a fillet ccSPF application", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1748,7 +1748,7 @@ "RSH.nails_ccspf.6d.6p12.001": { "Description": "Roof Sheathing with 6d common nails @ 6/12 in and a fillet ccSPF application", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1763,7 +1763,7 @@ "RSH.ccspf.001": { "Description": "Roof Sheathing with no nails and a fillet ccSPF application", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1778,7 +1778,7 @@ "RSH.ccspf.002": { "Description": "Roof Sheathing with no nails and a fillet plus 0.5 in coverage ccSPF application", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1793,7 +1793,7 @@ "RSH.nails_ccspf.8d.6p12.002": { "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a 3 in full coverage ccSPF application with 24-39 day cure time", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1808,7 +1808,7 @@ "RSH.nails_ccspf.6d.6p12.002": { "Description": "Roof Sheathing with 6d common nails @ 6/12 in and a 3 in full coverage ccSPF application with 19-20 day cure time", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1823,7 +1823,7 @@ "RSH.nails_ccspf.8d.6p12.003": { "Description": "Roof Sheathing with 8d ring shank nails @ 6/12 in and a 3 in full coverage ccSPF application with 129-130 day cure time", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1838,7 +1838,7 @@ "RSH.ccspf.003": { "Description": "Roof Sheathing with no nails and a 3 in full coverage ccSPF application with 12-15 day cure time", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "datin2011" ], @@ -1853,7 +1853,7 @@ "WCOV.001a": { "Description": "Wall Cover - General fragility, lower end", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "abdelhady2022" ], @@ -1868,7 +1868,7 @@ "WCOV.001b": { "Description": "Wall Cover - General fragility, higher end", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "abdelhady2022" ], @@ -1883,7 +1883,7 @@ "WCOV.002": { "Description": "Wall Cover with Vinyl Siding", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "jain2020" @@ -1899,7 +1899,7 @@ "WCOV.003": { "Description": "Wall Cover with Curtain Walls 30 sq ft size and 6:5 aspect ratio", "SuggestedComponentBlockSize": "30 ft2", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "puga2015", "angeles2021" @@ -1916,7 +1916,7 @@ "Description": "Roof Cover - Clay Tiles with adhesive", "Comments": "The study uses a light-frame residential building archetype to assess hurricane damage in Port St. Lucie, FL. Damage analysis described in this study does not explicitly model or account for the effects of wind-borne debris. The archetype building is 8.5m (28 ft) by 12.2m (40 ft), one story, with a mean roof height of 3.8m (12.5 ft) and a roof type of 6:12 slope gable roof without overhang. The roof covering is adhesive-set clay tiles with parameters determined from published experimental studies.\n\nLIMITATIONS: The building archetype may not represent the diversity of real-world residential structures and ages within a community. Further, the study does not account for complex terrain effects on wind loads, potentially limiting the applicability of the findings to more varied real-world scenarios. Though the tiles' fragilities are taken from experimental data, the authors acknowledge this is among the first to analyze the fragility of clay tiles, implying there's a lack of established comparison data.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "shdid2011", "dong2016" @@ -1932,7 +1932,7 @@ "RCOV.tiles.concrete.001": { "Description": "Roof Cover - Concrete Tiles with adhesive", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "shdid2011" ], @@ -1947,7 +1947,7 @@ "RCOV.tiles.clay.002": { "Description": "Roof Cover - Clay Tiles with mortar", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "shdid2011" ], @@ -1962,7 +1962,7 @@ "RCOV.tiles.concrete.002": { "Description": "Roof Cover - Concrete Tiles with mortar", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "shdid2011" ], @@ -1978,7 +1978,7 @@ "Description": "Roof Cover - Asphalt Shingles with standard construction and nail pattern", "Comments": "This asphalt shingle capacity is taken from the 2005 version of the Florida Public Hurricane Loss Model (FPHLM). The modeled failure mode for this roof cover configuration is implicitly defined as the wind load exceeding its resistance capacity during a simulated hurricane event. \n\nLIMITATIONS: Limitations of this capacity function are not explicitly discussed in the provided text. The actual failure can be influenced by factors such as the specific type and age of shingles, the quality and spacing of nails, the condition of the underlying sheathing, and potential damage from wind-borne debris (though debris impact is modeled separately for openings) - none of which are detailed.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "peng2013" @@ -1994,7 +1994,7 @@ "RCOV.shingles.001b": { "Description": "Roof Cover - Asphalt Shingles with standard construction and nail pattern", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "jain2020" @@ -2010,7 +2010,7 @@ "RCOV.shingles.002a": { "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "grayson2013" @@ -2026,7 +2026,7 @@ "RCOV.shingles.002b": { "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "kakareko2021" @@ -2043,7 +2043,7 @@ "Description": "Roof Cover - Shingles with high-wind construction and nail pattern", "Comments": "In the context of this study, high wind shingles refer to a specific type of roof covering that is designed and installed to offer enhanced resistance to wind damage compared to standard asphalt shingles. Their installation involves a \"high wind nail pattern\" with 6 nails per shingle, which contributes to their increased resistance. This asphalt shingle capacity is taken from the 2005 version of the Florida Public Hurricane Loss Model (FPHLM). The modeled failure mode for this roof cover configuration is implicitly defined as the wind load exceeding its resistance capacity during a simulated hurricane event.\n\nLIMITATIONS: Limitations of this capacity function are not explicitly discussed in the provided text. The actual failure can be influenced by factors such as the specific type and quality of high wind shingles, the precise application of the 6-nail pattern, the condition of the underlying sheathing, and potential damage from wind-borne debris (though debris impact is modeled separately for openings) - none of which are detailed.", "SuggestedComponentBlockSize": "1 EA", - "RoudUpToIntegerQuantity": 1, + "RoundUpToIntegerQuantity": "True", "Reference": [ "gurley2005", "peng2013" diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/combine_wind_flood.csv b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/combine_wind_flood.csv similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 coupled/combine_wind_flood.csv rename to src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/combine_wind_flood.csv diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/consequence_repair.csv b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/consequence_repair.csv similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 coupled/consequence_repair.csv rename to src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/consequence_repair.csv diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/consequence_repair.json b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/consequence_repair.json similarity index 99% rename from hurricane/building/portfolio/Hazus v5.1 coupled/consequence_repair.json rename to src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/consequence_repair.json index dcdc91c2..80225ec5 100644 --- a/hurricane/building/portfolio/Hazus v5.1 coupled/consequence_repair.json +++ b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/consequence_repair.json @@ -1,7 +1,7 @@ { "_GeneralInformation": { - "ShortName": "Hazus Hurricane Methodology - Buildings", - "Description": "The models in this dataset are based on version 4.2 of the Hazus Hurricane Model Technical Manual", + "ShortName": "SimCenter Coupled Hurricane Models (Hazus-calibrated)", + "Description": "These building models are a SimCenter recalibration of the building models from the Hazus Hurricane Methodology for damage-driven (coupled) loss assessment. The Hazus models provide damage and loss using separate multilinear functions of wind speed; here, normal and lognormal fragility functions were fit to the Hazus damage curves, and a deterministic loss ratio was calibrated for each damage state so that the results closely approximate most of the original Hazus loss functions. This adapts the model form for coupled analysis while preserving the underlying Hazus data. For the unmodified source models, see the 'Hazus Hurricane Methodology - Buildings' dataset.", "Version": "1.0", "ComponentGroups": { "W - Wood": { diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/fragility.csv b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/fragility.csv similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 coupled/fragility.csv rename to src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/fragility.csv diff --git a/hurricane/building/portfolio/Hazus v5.1 original/fragility.json b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/fragility.json similarity index 99% rename from hurricane/building/portfolio/Hazus v5.1 original/fragility.json rename to src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/fragility.json index dbc42068..da654de9 100644 --- a/hurricane/building/portfolio/Hazus v5.1 original/fragility.json +++ b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/fragility.json @@ -1,7 +1,7 @@ { "_GeneralInformation": { - "ShortName": "Hazus Hurricane Methodology - Buildings", - "Description": "The models in this dataset are based on version 4.2 of the Hazus Hurricane Model Technical Manual", + "ShortName": "SimCenter Coupled Hurricane Models (Hazus-calibrated)", + "Description": "These building models are a SimCenter recalibration of the building models from the Hazus Hurricane Methodology for damage-driven (coupled) loss assessment. The Hazus models provide damage and loss using separate multilinear functions of wind speed; here, normal and lognormal fragility functions were fit to the Hazus damage curves, and a deterministic loss ratio was calibrated for each damage state so that the results closely approximate most of the original Hazus loss functions. This adapts the model form for coupled analysis while preserving the underlying Hazus data. For the unmodified source models, see the 'Hazus Hurricane Methodology - Buildings' dataset.", "Version": "1.0", "ComponentGroups": { "W - Wood": { diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/input_schema.json b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/input_schema.json similarity index 99% rename from hurricane/building/portfolio/Hazus v5.1 coupled/input_schema.json rename to src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/input_schema.json index e4b48624..2a423ad8 100644 --- a/hurricane/building/portfolio/Hazus v5.1 coupled/input_schema.json +++ b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/input_schema.json @@ -682,7 +682,8 @@ "type": "number", "exclusiveMinimum": 15 } - } + }, + "required": ["Height"] }, "then": { "properties": { @@ -1145,7 +1146,8 @@ "NumberOfStories": { "const": 1 } - } + }, + "required": ["NumberOfStories"] }, "then": { "properties": { diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/pelicun_config.py b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/pelicun_config.py similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 coupled/pelicun_config.py rename to src/dlml/data/hurricane/building/portfolio/Hazus v5.1 coupled/pelicun_config.py diff --git a/hurricane/building/portfolio/Hazus v5.1 original/combine_wind_flood.csv b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 original/combine_wind_flood.csv similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 original/combine_wind_flood.csv rename to src/dlml/data/hurricane/building/portfolio/Hazus v5.1 original/combine_wind_flood.csv diff --git a/hurricane/building/portfolio/Hazus v5.1 original/fragility.csv b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 original/fragility.csv similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 original/fragility.csv rename to src/dlml/data/hurricane/building/portfolio/Hazus v5.1 original/fragility.csv diff --git a/hurricane/building/portfolio/Hazus v5.1 coupled/fragility.json b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 original/fragility.json similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 coupled/fragility.json rename to src/dlml/data/hurricane/building/portfolio/Hazus v5.1 original/fragility.json diff --git a/hurricane/building/portfolio/Hazus v5.1 original/loss_repair.csv b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 original/loss_repair.csv similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 original/loss_repair.csv rename to src/dlml/data/hurricane/building/portfolio/Hazus v5.1 original/loss_repair.csv diff --git a/hurricane/building/portfolio/Hazus v5.1 original/loss_repair.json b/src/dlml/data/hurricane/building/portfolio/Hazus v5.1 original/loss_repair.json similarity index 100% rename from hurricane/building/portfolio/Hazus v5.1 original/loss_repair.json rename to src/dlml/data/hurricane/building/portfolio/Hazus v5.1 original/loss_repair.json diff --git a/seismic/building/component/FEMA P-58 2nd Edition/consequence_repair.csv b/src/dlml/data/seismic/building/component/FEMA P-58 2nd Edition/consequence_repair.csv similarity index 100% rename from seismic/building/component/FEMA P-58 2nd Edition/consequence_repair.csv rename to src/dlml/data/seismic/building/component/FEMA P-58 2nd Edition/consequence_repair.csv diff --git a/seismic/building/component/FEMA P-58 2nd Edition/consequence_repair.json b/src/dlml/data/seismic/building/component/FEMA P-58 2nd Edition/consequence_repair.json similarity index 97% rename from seismic/building/component/FEMA P-58 2nd Edition/consequence_repair.json rename to src/dlml/data/seismic/building/component/FEMA P-58 2nd Edition/consequence_repair.json index 17199949..3cffd03f 100644 --- a/seismic/building/component/FEMA P-58 2nd Edition/consequence_repair.json +++ b/src/dlml/data/seismic/building/component/FEMA P-58 2nd Edition/consequence_repair.json @@ -1,7 +1,7 @@ { "_GeneralInformation": { "ShortName": "FEMA P-58 2nd Edition", - "Description": "The models in this dataset are based on the 2nd edition of FEMA P-58. Specifically, the parameters are parsed from the FEMAP-58_FragilityDatabase_v3.1.2.xls file that is published as part of Volume 3 of the methodology. A few obvious typos and errors have been fixed in that file; these adjustments are captured in the changelog at https://github.com/NHERI-SimCenter/DamageAndLossModelLibrary/blob/main/data_sources/FEMA_P58/changelog.txt . Simultaneous damage states have been replaced with equivalent Mutually exclusive damage states. Component classification is based on UNIFORMAT II as per NISTIR 6389.", + "Description": "The models in this dataset are based on the [2nd edition of FEMA P-58](https://femap58.atcouncil.org/). Specifically, the parameters are parsed from the FEMAP-58_FragilityDatabase_v3.1.2.xls file that is published as part of Volume 3 of the methodology. A few obvious typos and errors have been fixed in that file; these adjustments are captured in the [changelog](https://github.com/NHERI-SimCenter/DamageAndLossModelLibrary/blob/main/data_sources/FEMA_P58/changelog.txt). Simultaneous damage states have been replaced with equivalent Mutually exclusive damage states. Component classification is based on UNIFORMAT II as per NISTIR 6389.", "Version": "1.0", "ComponentGroups": { "B - Shell": { @@ -93,7 +93,7 @@ "Description": "Bolted shear tab gravity connections", "Comments": "Costing is on a per connection basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -118,7 +118,7 @@ "Description": "Steel Column Base Plates, Column W < 150 plf", "Comments": "Costing is on a per connection basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -143,7 +143,7 @@ "Description": "Steel Column Base Plates, Column 150 plf < W < 300 plf", "Comments": "Costing is on a per connection basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -168,7 +168,7 @@ "Description": "Steel Column Base Plates, Column W > 300 plf", "Comments": "Costing is on a per connection basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -193,7 +193,7 @@ "Description": "Welded column splices, Column W < 150 plf", "Comments": "Costing is on a per connection basis. Costing does not include fireproofing removal or reapplication cost.\nNotes: Fracture is not expected where weld has adequate toughness and the maximum weld root stress is below 1.5Fu from column P/A+M/S under story drift using A and S from weld root area. \nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -214,7 +214,7 @@ "Description": "Welded column splices, Column 150 plf < W < 300 plf", "Comments": "Costing is on a per connection basis. Costing does not include fireproofing removal or reapplication cost.\nNotes: Fracture is not expected where weld has adequate toughness and the maximum weld root stress is below 1.5Fu from column P/A+M/S under story drift using A and S from weld root area. \nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -235,7 +235,7 @@ "Description": "Welded column splices, Column W > 300 plf", "Comments": "Costing is on a per connection basis. Costing does not include fireproofing removal or reapplication cost.\nNotes: Fracture is not expected where weld has adequate toughness and the maximum weld root stress is below 1.5Fu from column P/A+M/S under story drift using A and S from weld root area. \nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -256,7 +256,7 @@ "Description": "Special Concentric Braced Frame w WF braces, balanced design criteria, Chevron Brace, Brace w < 40 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -281,7 +281,7 @@ "Description": "Special Concentric Braced Frame w WF braces, balanced design criteria, Chevron Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -306,7 +306,7 @@ "Description": "Special Concentric Braced Frame w WF braces, balanced design criteria, Chevron Brace, Brace w > 100 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -331,7 +331,7 @@ "Description": "Special Concentric Braced Frame w WF braces, balanced design criteria, Single Diagonal Brace, Brace w < 40 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -356,7 +356,7 @@ "Description": "Special Concentric Braced Frame w WF braces, balanced design criteria, Single Diagonal Brace, 41 PLF < w < 99 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -381,7 +381,7 @@ "Description": "Special Concentric Braced Frame w WF braces, balanced design criteria, Single Diagonal Brace, Brace w > 100 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -406,7 +406,7 @@ "Description": "Special Concentric Braced Frame w WF braces, balanced design criteria, X Brace, Brace w < 40 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -431,7 +431,7 @@ "Description": "Special Concentric Braced Frame w WF braces, balanced design criteria, X Brace, 41 PLF < w < 99 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -456,7 +456,7 @@ "Description": "Special Concentric Braced Frame w WF braces, balanced design criteria, X Brace, Brace w > 100 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -481,7 +481,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, balanced design criteria, Chevron Brace, Brace w < 40 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -506,7 +506,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, balanced design criteria, Chevron Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -531,7 +531,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, balanced design criteria, Chevron Brace, Brace w > 100 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -556,7 +556,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, balanced design criteria, Single Diagonal Brace, Brace w < 40 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -581,7 +581,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, balanced design criteria, Single Diagonal Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -606,7 +606,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, balanced design criteria, Single Diagonal Brace, Brace w > 100 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -631,7 +631,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, balanced design criteria, X Brace, Brace w < 40 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -656,7 +656,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, balanced design criteria, X Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -681,7 +681,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, balanced design criteria, X Brace, Brace w > 100 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -706,7 +706,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, tapered gusset plates & design to AISC minimum standard, Chevron Brace, Brace w < 40 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -731,7 +731,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, tapered gusset plates & design to AISC minimum standard, Chevron Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -756,7 +756,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, tapered gusset plates & design to AISC minimum standard, Chevron Brace, Brace w > 100 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -781,7 +781,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, tapered gusset plates & design to AISC minimum standard Single Diagonal Brace, Brace w < 40 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -806,7 +806,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, tapered gusset plates & design to AISC minimum standard, Single Diagonal Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -831,7 +831,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, tapered gusset plates & design to AISC minimum standard, Single Diagonal Brace, Brace w > 100 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -856,7 +856,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, tapered gusset plates & design to AISC minimum standard, X Brace, Brace w < 40 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -881,7 +881,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, tapered gusset plates & design to AISC minimum standard, X Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -906,7 +906,7 @@ "Description": "Special Concentric Braced Frame w HSS braces, tapered gusset plates & design to AISC minimum standard, X Brace, Brace w > 100 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -931,7 +931,7 @@ "Description": "Special Concentric Braced Frame, design to AISC minimum standards, Chevron Brace, Brace w < 40 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -952,7 +952,7 @@ "Description": "Special Concentric Braced Frame, design to AISC minimum standards, Chevron Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -973,7 +973,7 @@ "Description": "Special Concentric Braced Frame, design to AISC minimum standards, Chevron Brace, Brace w > 100 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -994,7 +994,7 @@ "Description": "Special Concentric Braced Frame, design to AISC minimum standards, Single Diagonal Brace, Brace w < 40 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1015,7 +1015,7 @@ "Description": "Special Concentric Braced Frame, design to AISC minimum standards, Single Diagonal Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1036,7 +1036,7 @@ "Description": "Special Concentric Braced Frame, design to AISC minimum standards, Single Diagonal Brace, Brace w > 100 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1057,7 +1057,7 @@ "Description": "Special Concentric Braced Frame, design to AISC minimum standards, X Brace, Brace w < 40 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1082,7 +1082,7 @@ "Description": "Special Concentric Braced Frame, design to AISC minimum standards, X Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1107,7 +1107,7 @@ "Description": "Special Concentric Braced Frame, design to AISC minimum standards, X Brace, Brace w > 100 PLF", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1132,7 +1132,7 @@ "Description": "Special Concentric Braced Frame w double angle braces, Chevron Brace, Brace w < 40 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC minimum SCBF criteria. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1153,7 +1153,7 @@ "Description": "Special Concentric Braced Frame w double angle braces, Chevron Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC minimum SCBF criteria. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1174,7 +1174,7 @@ "Description": "Special Concentric Braced Frame w double angle braces, Chevron Brace, Brace w > 100 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC minimum SCBF criteria. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1195,7 +1195,7 @@ "Description": "Special Concentric Braced Frame w double angle braces, Single Diagonal Brace, Brace w < 40 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC minimum SCBF criteria. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1216,7 +1216,7 @@ "Description": "Special Concentric Braced Frame w double angle braces, Single Diagonal Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC minimum SCBF criteria. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1237,7 +1237,7 @@ "Description": "Special Concentric Braced Frame w double angle braces, Single Diagonal Brace, Brace w > 100 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC minimum SCBF criteria. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1258,7 +1258,7 @@ "Description": "Special Concentric Braced Frame w double angle braces, X Brace, Brace w < 40 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC minimum SCBF criteria. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1279,7 +1279,7 @@ "Description": "Special Concentric Braced Frame w double angle braces, X Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC minimum SCBF criteria. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1300,7 +1300,7 @@ "Description": "Special Concentric Braced Frame w double angle braces, X Brace, Brace w > 100 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC minimum SCBF criteria. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1321,7 +1321,7 @@ "Description": "Ordinary Concentric Braced Frame w compact braces, Chevron Brace, Brace w < 40 PLF", "Comments": "Costing on a per bay basis, braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1342,7 +1342,7 @@ "Description": "Ordinary Concentric Braced Frame w compact braces, Chevron Brace, Brace w, 41 PLF < w < 99 PLF", "Comments": "Costing on a per bay basis, braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1363,7 +1363,7 @@ "Description": "Ordinary Concentric Braced Frame w compact braces, Chevron Brace, Brace w > 100 PLF", "Comments": "Costing on a per bay basis, braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1384,7 +1384,7 @@ "Description": "Ordinary Concentric Braced Frame w compact braces, Single Diagonal Brace, Brace w < 40 PLF", "Comments": "Costing on a per bay basis, braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1405,7 +1405,7 @@ "Description": "Ordinary Concentric Braced Frame w compact braces, Single Diagonal Brace, Brace w, 41 PLF < w < 99 PLF", "Comments": "Costing on a per bay basis, braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1426,7 +1426,7 @@ "Description": "Ordinary Concentric Braced Frame w compact braces, Single Diagonal Brace, Brace w > 100 PLF", "Comments": "Costing on a per bay basis, braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1447,7 +1447,7 @@ "Description": "Ordinary Concentric Braced Frame w compact braces, X Brace, Brace w < 40 PLF", "Comments": "Costing on a per bay basis, braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1468,7 +1468,7 @@ "Description": "Ordinary Concentric Braced Frame w compact braces, X Brace, Brace w, 41 PLF < w < 99 PLF", "Comments": "Costing on a per bay basis, braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1489,7 +1489,7 @@ "Description": "Ordinary Concentric Braced Frame w compact braces, X Brace, Brace w > 100 PLF", "Comments": "Costing on a per bay basis, braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1510,7 +1510,7 @@ "Description": "Ordinary Concentric Braced Frame, braces design to ductile slenderness limits, Chevron Brace, Brace w < 40 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC OCBF criteria. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1531,7 +1531,7 @@ "Description": "Ordinary Concentric Braced Frame, braces design to ductile slenderness limits, Chevron Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC OCBF criteria. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1552,7 +1552,7 @@ "Description": "Ordinary Concentric Braced Frame, braces design to ductile slenderness limits, Chevron Brace, Brace w > 100 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC OCBF criteria. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1573,7 +1573,7 @@ "Description": "Ordinary Concentric Braced Frame, braces design to ductile slenderness limits, Single Diagonal Brace, Brace w < 40 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC OCBF criteria. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1594,7 +1594,7 @@ "Description": "Ordinary Concentric Braced Frame, braces design to ductile slenderness limits, Single Diagonal Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC OCBF criteria. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1615,7 +1615,7 @@ "Description": "Ordinary Concentric Braced Frame, braces design to ductile slenderness limits, Single Diagonal Brace, Brace w > 100 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC OCBF criteria. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1636,7 +1636,7 @@ "Description": "Ordinary Concentric Braced Frame, braces design to ductile slenderness limits, X Brace, Brace w < 40 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC OCBF criteria. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1657,7 +1657,7 @@ "Description": "Ordinary Concentric Braced Frame, braces design to ductile slenderness limits, X Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC OCBF criteria. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1678,7 +1678,7 @@ "Description": "Ordinary Concentric Braced Frame, braces design to ductile slenderness limits, X Brace, Brace w > 100 PLF", "Comments": "Costing on a per bay basis, equivalent to AISC OCBF criteria. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1699,7 +1699,7 @@ "Description": "Braced frame, design for factored loads, no additional seismic detailing, Chevron Brace, Brace w < 40 PLF", "Comments": "Costing on a per bay basis, equivalent to current AISC R=3. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.\nNotes: Performance data has 1 damage state where as the cost data has 3 damage states. The performance data listed in DS1 appears to correspond to the cost data currently shown in DS3\u2026 Please confirm if two additional damage state performances should be added or if only one cost damage state should be included.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1712,7 +1712,7 @@ "Description": "Braced frame, design for factored loads, no additional seismic detailing, Chevron Brace, 41 PLF < w < 99 PLF", "Comments": "Costing on a per bay basis, equivalent to current AISC R=3. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.\nNotes: Performance data has 1 damage state where as the cost data has 3 damage states. The performance data listed in DS1 appears to correspond to the cost data currently shown in DS3\u2026 Please confirm if two additional damage state performances should be added or if only one cost damage state should be included.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1725,7 +1725,7 @@ "Description": "Braced frame, design for factored loads, no additional seismic detailing, Chevron Brace, Brace w > 100 PLF", "Comments": "Costing on a per bay basis, equivalent to current AISC R=3. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.\nNotes: Performance data has 1 damage state where as the cost data has 3 damage states. The performance data listed in DS1 appears to correspond to the cost data currently shown in DS3\u2026 Please confirm if two additional damage state performances should be added or if only one cost damage state should be included.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1738,7 +1738,7 @@ "Description": "Braced frame, design for factored loads, no additional seismic detailing, Single Diagonal Brace, Brace w < 40 PLF", "Comments": "Costing on a per bay basis, equivalent to current AISC R=3. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.\nNotes: Performance data has 1 damage state where as the cost data has 3 damage states. The performance data listed in DS1 appears to correspond to the cost data currently shown in DS3\u2026 Please confirm if two additional damage state performances should be added or if only one cost damage state should be included.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1751,7 +1751,7 @@ "Description": "Braced frame, design for factored loads, no additional seismic detailing, Single Diagonal Brace, 41 PLF < w < 99 PLF", "Comments": "Costing on a per bay basis, equivalent to current AISC R=3. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.\nNotes: Performance data has 1 damage state where as the cost data has 3 damage states. The performance data listed in DS1 appears to correspond to the cost data currently shown in DS3\u2026 Please confirm if two additional damage state performances should be added or if only one cost damage state should be included.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1764,7 +1764,7 @@ "Description": "Braced frame, design for factored loads, no additional seismic detailing, Single Diagonal Brace, Brace w > 100 PLF", "Comments": "Costing on a per bay basis, equivalent to current AISC R=3. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.\nNotes: Performance data has 1 damage state where as the cost data has 3 damage states. The performance data listed in DS1 appears to correspond to the cost data currently shown in DS3\u2026 Please confirm if two additional damage state performances should be added or if only one cost damage state should be included.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1777,7 +1777,7 @@ "Description": "Braced frame, design for factored loads, no additional seismic detailing, X Brace, Brace w < 40 PLF", "Comments": "Costing on a per bay basis, equivalent to current AISC R=3. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.\nNotes: Performance data has 1 damage state where as the cost data has 3 damage states. The performance data listed in DS1 appears to correspond to the cost data currently shown in DS3\u2026 Please confirm if two additional damage state performances should be added or if only one cost damage state should be included.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1790,7 +1790,7 @@ "Description": "Braced frame, design for factored loads, no additional seismic detailing, X Brace, Brace 41 PLF < w < 99 PLF", "Comments": "Costing on a per bay basis, equivalent to current AISC R=3. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.\nNotes: Performance data has 1 damage state where as the cost data has 3 damage states. The performance data listed in DS1 appears to correspond to the cost data currently shown in DS3\u2026 Please confirm if two additional damage state performances should be added or if only one cost damage state should be included.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1803,7 +1803,7 @@ "Description": "Braced frame, design for factored loads, no additional seismic detailing, X Brace, Brace w > 100 PLF", "Comments": "Costing on a per bay basis, equivalent to current AISC R=3. Braces may be HSS, WF, or Angle. Costing does not include fireproofing removal or reapplication cost.\nNotes: Performance data has 1 damage state where as the cost data has 3 damage states. The performance data listed in DS1 appears to correspond to the cost data currently shown in DS3\u2026 Please confirm if two additional damage state performances should be added or if only one cost damage state should be included.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1816,7 +1816,7 @@ "Description": "Steel Buckling Restrained Brace (BRB), Chevron Brace, Weight of brace < 40 plf.", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1829,7 +1829,7 @@ "Description": "Steel Buckling Restrained Brace (BRB), Chevron brace, Weight of brace > 41 plf and < 99 plf.", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1842,7 +1842,7 @@ "Description": "Steel Buckling Restrained Brace (BRB), Chevron Brace, Weight of brace > 100 plf.", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1855,7 +1855,7 @@ "Description": "Steel Buckling Restrained Brace (BRB), Single Diagonal Brace, Weight of brace < 40 plf.", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1868,7 +1868,7 @@ "Description": "Steel Buckling Restrained Brace (BRB), Single Diagonal brace, Weight of brace > 41 plf and < 99 plf.", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1881,7 +1881,7 @@ "Description": "Steel Buckling Restrained Brace (BRB), Single Diagonal Brace, Weight of brace > 100 plf.", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1894,7 +1894,7 @@ "Description": "Post-Northridge RBS connection with welded web, beam one side of column only, beam depth <= W27", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1915,7 +1915,7 @@ "Description": "Post-Northridge RBS connection with welded web, beam one side of column only, beam depth >= W30", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1936,7 +1936,7 @@ "Description": "Post-Northridge RBS connection with welded web, beams both sides of column, beam depth <= W27", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1957,7 +1957,7 @@ "Description": "Post-Northridge RBS connection with welded web, beams both sides of column, beam depth >= W30", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1978,7 +1978,7 @@ "Description": "Post-Northridge welded steel moment connection other than RBS, beam one side, beam depth <= W27", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -1999,7 +1999,7 @@ "Description": "Post-Northridge welded steel moment connection other than RBS, beam one side, beam depth >= W30", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2020,7 +2020,7 @@ "Description": "Post-Northridge welded steel moment connection other than RBS, beams both sides, beam depth <= W27", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2041,7 +2041,7 @@ "Description": "Post-Northridge welded steel moment connection other than RBS, beams both sides, beam depth >= W30", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2062,7 +2062,7 @@ "Description": "Pre-Northridge WUF-B beam-column joint, beam one side of column, beam depth <= W27", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2091,7 +2091,7 @@ "Description": "Pre-Northridge WUF-B beam-column joint, beam one side of column, beam depth >= W30", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2120,7 +2120,7 @@ "Description": "Pre-Northridge WUF-B beam-column joint, beam both sides of column, beam depth <= W27", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2149,7 +2149,7 @@ "Description": "Pre-Northridge WUF-B beam-column joint, beam both sides of column, beam depth >= W30", "Comments": "Costing is on a per bay basis. Costing does not include fireproofing removal or reapplication cost.\nAuthor: Greg Deierlein", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2178,7 +2178,7 @@ "Description": "EBF Shear Link, no floor beams, link w < 100 PLF", "Comments": "Costing is on a per connection basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2199,7 +2199,7 @@ "Description": "EBF Shear Link, no floor beams, link w < 200 PLF", "Comments": "Costing is on a per connection basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2220,7 +2220,7 @@ "Description": "EBF Shear Link, with floor beams, link w < 100 PLF", "Comments": "Costing is on a per connection basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2241,7 +2241,7 @@ "Description": "EBF Shear Link, with floor beams, link w < 200 PLF", "Comments": "Costing is on a per connection basis. Costing does not include fireproofing removal or reapplication cost.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2262,7 +2262,7 @@ "Description": "ACI 318 SMF , Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "ACI318 Concrete SMF, ductile response. Meets the requirements of ACI318 SMF. Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2287,7 +2287,7 @@ "Description": "ACI 318 SMF , Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "ACI318 Concrete SMF, ductile response. Meets the requirements of ACI318 SMF. Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2312,7 +2312,7 @@ "Description": "ACI 318 SMF , Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "ACI318 Concrete SMF, ductile response. Meets the requirements of ACI318 SMF. Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2337,7 +2337,7 @@ "Description": "ACI 318 SMF , Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "ACI318 Concrete SMF, ductile response. Meets the requirements of ACI318 SMF. Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2362,7 +2362,7 @@ "Description": "ACI 318 SMF , Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "ACI318 Concrete SMF, ductile response. Meets the requirements of ACI318 SMF. Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2387,7 +2387,7 @@ "Description": "ACI 318 SMF , Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "ACI318 Concrete SMF, ductile response. Meets the requirements of ACI318 SMF. Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2412,7 +2412,7 @@ "Description": "MF with SMF-conforming beam and column flexural and confinement reinforcement but weak joints , Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "Non-conforming SMF, joint shear damage, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Column Pu < 0.6f'cAg, (3) Column flexural response with HIGH ductility, (4) Beam compliant transverse reinforcing with low beam V/bwd(f'c)^0.5, (5) Joints with compliant transverse reinforcing details with spacing < d(column)/2 and Joint V/Vn < 1.2. Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2437,7 +2437,7 @@ "Description": "MF with SMF-conforming beam and column flexural and confinement reinforcement but weak joints , Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "Non-conforming SMF, joint shear damage, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Column Pu < 0.6f'cAg, (3) Column flexural response with HIGH ductility, (4) Beam compliant transverse reinforcing with low beam V/bwd(f'c)^0.5, (5) Joints with compliant transverse reinforcing details with spacing < d(column)/2 and Joint V/Vn < 1.2. Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2462,7 +2462,7 @@ "Description": "MF with SMF-conforming beam and column flexural and confinement reinforcement but weak joints , Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "Non-conforming SMF, joint shear damage, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Column Pu < 0.6f'cAg, (3) Column flexural response with HIGH ductility, (4) Beam compliant transverse reinforcing with low beam V/bwd(f'c)^0.5, (5) Joints with compliant transverse reinforcing details with spacing < d(column)/2 and Joint V/Vn < 1.2. Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2487,7 +2487,7 @@ "Description": "MF with SMF-conforming beam and column flexural and confinement reinforcement but weak joints , Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "Non-conforming SMF, joint shear damage, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Column Pu < 0.6f'cAg, (3) Column flexural response with HIGH ductility, (4) Beam compliant transverse reinforcing with low beam V/bwd(f'c)^0.5, (5) Joints with compliant transverse reinforcing details with spacing < d(column)/2 and Joint V/Vn < 1.2. Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2512,7 +2512,7 @@ "Description": "MF with SMF-conforming beam and column flexural and confinement reinforcement but weak joints , Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "Non-conforming SMF, joint shear damage, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Column Pu < 0.6f'cAg, (3) Column flexural response with HIGH ductility, (4) Beam compliant transverse reinforcing with low beam V/bwd(f'c)^0.5, (5) Joints with compliant transverse reinforcing details with spacing < d(column)/2 and Joint V/Vn < 1.2. Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2537,7 +2537,7 @@ "Description": "MF with SMF-conforming beam and column flexural and confinement reinforcement but weak joints , Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "Non-conforming SMF, joint shear damage, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Column Pu < 0.6f'cAg, (3) Column flexural response with HIGH ductility, (4) Beam compliant transverse reinforcing with low beam V/bwd(f'c)^0.5, (5) Joints with compliant transverse reinforcing details with spacing < d(column)/2 and Joint V/Vn < 1.2. Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2562,7 +2562,7 @@ "Description": "ACI 318 IMF, Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "ACI318 IMF, joint shear damage or failure, beam or column flexure-shear response. Meets the following requirements: (1) Column Pu < 0.3Agf'c Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2587,7 +2587,7 @@ "Description": "ACI 318 IMF, Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "ACI318 IMF, joint shear damage or failure, beam or column flexure-shear response. Meets the following requirements: (1) Column Pu < 0.3Agf'c Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2612,7 +2612,7 @@ "Description": "ACI 318 IMF, Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "ACI318 IMF, joint shear damage or failure, beam or column flexure-shear response. Meets the following requirements: (1) Column Pu < 0.3Agf'c Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2637,7 +2637,7 @@ "Description": "ACI 318 IMF, Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "ACI318 IMF, joint shear damage or failure, beam or column flexure-shear response. Meets the following requirements: (1) Column Pu < 0.3Agf'c Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2662,7 +2662,7 @@ "Description": "ACI 318 IMF, Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "ACI318 IMF, joint shear damage or failure, beam or column flexure-shear response. Meets the following requirements: (1) Column Pu < 0.3Agf'c Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2687,7 +2687,7 @@ "Description": "ACI 318 IMF, Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "ACI318 IMF, joint shear damage or failure, beam or column flexure-shear response. Meets the following requirements: (1) Column Pu < 0.3Agf'c Costing is on a per joint basis.\nNotes: Note: DS4 is a copy of DS2 to create a mutually exclusive compliment to DS3.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2712,7 +2712,7 @@ "Description": "ACI 318 OMF with weak joints and beam flexural response, Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "ACI318 OMF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Beam Vn > Veq, (3) Column Vn > Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2733,7 +2733,7 @@ "Description": "ACI 318 OMF with weak joints and beam flexural response, Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "ACI318 OMF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Beam Vn > Veq, (3) Column Vn > Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2754,7 +2754,7 @@ "Description": "ACI 318 OMF with weak joints and beam flexural response, Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "ACI318 OMF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Beam Vn > Veq, (3) Column Vn > Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2775,7 +2775,7 @@ "Description": "ACI 318 OMF with weak joints and beam flexural response, Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "ACI318 OMF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Beam Vn > Veq, (3) Column Vn > Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2796,7 +2796,7 @@ "Description": "ACI 318 OMF with weak joints and beam flexural response, Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "ACI318 OMF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Beam Vn > Veq, (3) Column Vn > Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2817,7 +2817,7 @@ "Description": "ACI 318 OMF with weak joints and beam flexural response, Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "ACI318 OMF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Beam Vn > Veq, (3) Column Vn > Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2838,7 +2838,7 @@ "Description": "ACI 318 OMF with weak joints and column flexural response, Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "ACI318 OMF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Beam Vn > Veq, (3) Column Vn > Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2859,7 +2859,7 @@ "Description": "ACI 318 OMF with weak joints and column flexural response, Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "ACI318 OMF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Beam Vn > Veq, (3) Column Vn > Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2880,7 +2880,7 @@ "Description": "ACI 318 OMF with weak joints and column flexural response, Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "ACI318 OMF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Beam Vn > Veq, (3) Column Vn > Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2901,7 +2901,7 @@ "Description": "ACI 318 OMF with weak joints and column flexural response, Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "ACI318 OMF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Beam Vn > Veq, (3) Column Vn > Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2922,7 +2922,7 @@ "Description": "ACI 318 OMF with weak joints and column flexural response, Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "ACI318 OMF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Beam Vn > Veq, (3) Column Vn > Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2943,7 +2943,7 @@ "Description": "ACI 318 OMF with weak joints and column flexural response, Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "ACI318 OMF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) Beam Vn > Veq, (3) Column Vn > Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2964,7 +2964,7 @@ "Description": "ACI 318 OMF with weak beams and weak joints, beam flexural or shear response, Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "ACI318 OMF, beam flexure-shear or shear failure, beam flexural response. Meets the following requirements: (1) Beam Vn < Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -2985,7 +2985,7 @@ "Description": "ACI 318 OMF with weak beams and weak joints, beam flexural or shear response, Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "ACI318 OMF, beam flexure-shear or shear failure, beam flexural response. Meets the following requirements: (1) Beam Vn < Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3006,7 +3006,7 @@ "Description": "ACI 318 OMF with weak beams and weak joints, beam flexural or shear response, Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "ACI318 OMF, beam flexure-shear or shear failure, beam flexural response. Meets the following requirements: (1) Beam Vn < Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3027,7 +3027,7 @@ "Description": "ACI 318 OMF with weak beams and weak joints, beam flexural or shear response, Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "ACI318 OMF, beam flexure-shear or shear failure, beam flexural response. Meets the following requirements: (1) Beam Vn < Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3048,7 +3048,7 @@ "Description": "ACI 318 OMF with weak beams and weak joints, beam flexural or shear response, Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "ACI318 OMF, beam flexure-shear or shear failure, beam flexural response. Meets the following requirements: (1) Beam Vn < Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3069,7 +3069,7 @@ "Description": "ACI 318 OMF with weak beams and weak joints, beam flexural or shear response, Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "ACI318 OMF, beam flexure-shear or shear failure, beam flexural response. Meets the following requirements: (1) Beam Vn < Veq. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3090,7 +3090,7 @@ "Description": "ACI 318 OMF with weak columns, Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "ACI318 OMF, column shear or flexural-shear failure, column flexural response. Meets the following requirements: (1) Column Pu < 0.6Agf'c, (2) Column Vn < Veq Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3111,7 +3111,7 @@ "Description": "ACI 318 OMF with weak columns, Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "ACI318 OMF, column shear or flexural-shear failure, column flexural response. Meets the following requirements: (1) Column Pu < 0.6Agf'c, (2) Column Vn < Veq Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3132,7 +3132,7 @@ "Description": "ACI 318 OMF with weak columns, Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "ACI318 OMF, column shear or flexural-shear failure, column flexural response. Meets the following requirements: (1) Column Pu < 0.6Agf'c, (2) Column Vn < Veq Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3153,7 +3153,7 @@ "Description": "ACI 318 OMF with weak columns, Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "ACI318 OMF, column shear or flexural-shear failure, column flexural response. Meets the following requirements: (1) Column Pu < 0.6Agf'c, (2) Column Vn < Veq Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3174,7 +3174,7 @@ "Description": "ACI 318 OMF with weak columns, Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "ACI318 OMF, column shear or flexural-shear failure, column flexural response. Meets the following requirements: (1) Column Pu < 0.6Agf'c, (2) Column Vn < Veq Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3195,7 +3195,7 @@ "Description": "ACI 318 OMF with weak columns, Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "ACI318 OMF, column shear or flexural-shear failure, column flexural response. Meets the following requirements: (1) Column Pu < 0.6Agf'c, (2) Column Vn < Veq Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3216,7 +3216,7 @@ "Description": "ACI 318 OMF weak columns w/ high axial load, Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "ACI318 OMF, column flexure, flexural-shear, or shear failure at high axial load. Column flexural-shear response. Meets the following requirements: (1) Column Pu > 0.6Agf'c, (2) Column Vn < Veq Costing is on a per joint basis.\nNotes: This fragility has been changed to match B1041.121. ASCE6 is closest to column high axial OMF.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3233,7 +3233,7 @@ "Description": "ACI 318 OMF weak columns w/ high axial load, Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "ACI318 OMF, column flexure, flexural-shear, or shear failure at high axial load. Column flexural-shear response. Meets the following requirements: (1) Column Pu > 0.6Agf'c, (2) Column Vn < Veq Costing is on a per joint basis.\nNotes: This fragility has been changed to match B1041.121. ASCE6 is closest to column high axial OMF.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3250,7 +3250,7 @@ "Description": "ACI 318 OMF weak columns w/ high axial load, Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "ACI318 OMF, column flexure, flexural-shear, or shear failure at high axial load. Column flexural-shear response. Meets the following requirements: (1) Column Pu > 0.6Agf'c, (2) Column Vn < Veq Costing is on a per joint basis.\nNotes: This fragility has been changed to match B1041.121. ASCE6 is closest to column high axial OMF.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3267,7 +3267,7 @@ "Description": "ACI 318 OMF weak columns w/ high axial load, Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "ACI318 OMF, column flexure, flexural-shear, or shear failure at high axial load. Column flexural-shear response. Meets the following requirements: (1) Column Pu > 0.6Agf'c, (2) Column Vn < Veq Costing is on a per joint basis.\nNotes: This fragility has been changed to match B1041.121. ASCE6 is closest to column high axial OMF.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3284,7 +3284,7 @@ "Description": "ACI 318 OMF weak columns w/ high axial load, Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "ACI318 OMF, column flexure, flexural-shear, or shear failure at high axial load. Column flexural-shear response. Meets the following requirements: (1) Column Pu > 0.6Agf'c, (2) Column Vn < Veq Costing is on a per joint basis.\nNotes: This fragility has been changed to match B1041.121. ASCE6 is closest to column high axial OMF.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3301,7 +3301,7 @@ "Description": "ACI 318 OMF weak columns w/ high axial load, Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "ACI318 OMF, column flexure, flexural-shear, or shear failure at high axial load. Column flexural-shear response. Meets the following requirements: (1) Column Pu > 0.6Agf'c, (2) Column Vn < Veq Costing is on a per joint basis.\nNotes: This fragility has been changed to match B1041.121. ASCE6 is closest to column high axial OMF.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3318,7 +3318,7 @@ "Description": "Non-conforming MF with weak joints and beam flexural response, Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "Non-Conforming MF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) ASCE41 non-compliant joint transverse reinforcing and or joint V/Vn > 1.2, (3) IGH beam ductility per ASCE41-06 Table 6-7i, (4) Compliant beam transverse reinforcing with LOW beam V / bwd(f'c)^0.5. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3339,7 +3339,7 @@ "Description": "Non-conforming MF with weak joints and beam flexural response, Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "Non-Conforming MF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) ASCE41 non-compliant joint transverse reinforcing and or joint V/Vn > 1.2, (3) IGH beam ductility per ASCE41-06 Table 6-7i, (4) Compliant beam transverse reinforcing with LOW beam V / bwd(f'c)^0.5. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3360,7 +3360,7 @@ "Description": "Non-conforming MF with weak joints and beam flexural response, Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "Non-Conforming MF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) ASCE41 non-compliant joint transverse reinforcing and or joint V/Vn > 1.2, (3) IGH beam ductility per ASCE41-06 Table 6-7i, (4) Compliant beam transverse reinforcing with LOW beam V / bwd(f'c)^0.5. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3381,7 +3381,7 @@ "Description": "Non-conforming MF with weak joints and beam flexural response, Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "Non-Conforming MF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) ASCE41 non-compliant joint transverse reinforcing and or joint V/Vn > 1.2, (3) IGH beam ductility per ASCE41-06 Table 6-7i, (4) Compliant beam transverse reinforcing with LOW beam V / bwd(f'c)^0.5. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3402,7 +3402,7 @@ "Description": "Non-conforming MF with weak joints and beam flexural response, Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "Non-Conforming MF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) ASCE41 non-compliant joint transverse reinforcing and or joint V/Vn > 1.2, (3) IGH beam ductility per ASCE41-06 Table 6-7i, (4) Compliant beam transverse reinforcing with LOW beam V / bwd(f'c)^0.5. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3423,7 +3423,7 @@ "Description": "Non-conforming MF with weak joints and beam flexural response, Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "Non-Conforming MF, joint shear failure, beam flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam > 1.2, (2) ASCE41 non-compliant joint transverse reinforcing and or joint V/Vn > 1.2, (3) IGH beam ductility per ASCE41-06 Table 6-7i, (4) Compliant beam transverse reinforcing with LOW beam V / bwd(f'c)^0.5. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3444,7 +3444,7 @@ "Description": "Non-conforming MF with weak joints and column flexural response, Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "Non-Conforming MF, joint shear failure, column flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam < 0.8, (2) [...TBD\u2026], (3) Non-compliant column transverse reinforcement and or joint V/Vn > 1.2 Costing is on a per joint basis.\nNotes: This fragility is same as B1041.061. Closest match available.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3465,7 +3465,7 @@ "Description": "Non-conforming MF with weak joints and column flexural response, Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "Non-Conforming MF, joint shear failure, column flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam < 0.8, (2) [...TBD\u2026], (3) Non-compliant column transverse reinforcement and or joint V/Vn > 1.2 Costing is on a per joint basis.\nNotes: This fragility is same as B1041.061. Closest match available.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3486,7 +3486,7 @@ "Description": "Non-conforming MF with weak joints and column flexural response, Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "Non-Conforming MF, joint shear failure, column flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam < 0.8, (2) [...TBD\u2026], (3) Non-compliant column transverse reinforcement and or joint V/Vn > 1.2 Costing is on a per joint basis.\nNotes: This fragility is same as B1041.061. Closest match available.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3507,7 +3507,7 @@ "Description": "Non-conforming MF with weak joints and column flexural response, Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "Non-Conforming MF, joint shear failure, column flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam < 0.8, (2) [...TBD\u2026], (3) Non-compliant column transverse reinforcement and or joint V/Vn > 1.2 Costing is on a per joint basis.\nNotes: This fragility is same as B1041.061. Closest match available.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3528,7 +3528,7 @@ "Description": "Non-conforming MF with weak joints and column flexural response, Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "Non-Conforming MF, joint shear failure, column flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam < 0.8, (2) [...TBD\u2026], (3) Non-compliant column transverse reinforcement and or joint V/Vn > 1.2 Costing is on a per joint basis.\nNotes: This fragility is same as B1041.061. Closest match available.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3549,7 +3549,7 @@ "Description": "Non-conforming MF with weak joints and column flexural response, Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "Non-Conforming MF, joint shear failure, column flexural response. Meets the following requirements: (1) Sum Mcol / Sum Mbeam < 0.8, (2) [...TBD\u2026], (3) Non-compliant column transverse reinforcement and or joint V/Vn > 1.2 Costing is on a per joint basis.\nNotes: This fragility is same as B1041.061. Closest match available.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3570,7 +3570,7 @@ "Description": "Non-conforming MF, weak beams and strong joints, Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "Non-Conforming MF, beam shear failure, beam flexural response. Meets the following requirements: (1) Beam with HIGH V/bwd(f'c)^0.5 or non-compliant transverse beam reinforcing. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3591,7 +3591,7 @@ "Description": "Non-conforming MF, weak beams and strong joints, Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "Non-Conforming MF, beam shear failure, beam flexural response. Meets the following requirements: (1) Beam with HIGH V/bwd(f'c)^0.5 or non-compliant transverse beam reinforcing. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3612,7 +3612,7 @@ "Description": "Non-conforming MF, weak beams and strong joints, Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "Non-Conforming MF, beam shear failure, beam flexural response. Meets the following requirements: (1) Beam with HIGH V/bwd(f'c)^0.5 or non-compliant transverse beam reinforcing. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3633,7 +3633,7 @@ "Description": "Non-conforming MF, weak beams and strong joints, Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "Non-Conforming MF, beam shear failure, beam flexural response. Meets the following requirements: (1) Beam with HIGH V/bwd(f'c)^0.5 or non-compliant transverse beam reinforcing. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3654,7 +3654,7 @@ "Description": "Non-conforming MF, weak beams and strong joints, Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "Non-Conforming MF, beam shear failure, beam flexural response. Meets the following requirements: (1) Beam with HIGH V/bwd(f'c)^0.5 or non-compliant transverse beam reinforcing. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3675,7 +3675,7 @@ "Description": "Non-conforming MF, weak beams and strong joints, Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "Non-Conforming MF, beam shear failure, beam flexural response. Meets the following requirements: (1) Beam with HIGH V/bwd(f'c)^0.5 or non-compliant transverse beam reinforcing. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3696,7 +3696,7 @@ "Description": "Non-conforming MF, weak columns, Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "Non-Conforming MF, column flexure-shear or shear failure, column flexural response. Meets the following requirements: (1) [\u2026TBD\u2026] Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3717,7 +3717,7 @@ "Description": "Non-conforming MF, weak columns, Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "Non-Conforming MF, column flexure-shear or shear failure, column flexural response. Meets the following requirements: (1) [\u2026TBD\u2026] Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3738,7 +3738,7 @@ "Description": "Non-conforming MF, weak columns, Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "Non-Conforming MF, column flexure-shear or shear failure, column flexural response. Meets the following requirements: (1) [\u2026TBD\u2026] Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3759,7 +3759,7 @@ "Description": "Non-conforming MF, weak columns, Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "Non-Conforming MF, column flexure-shear or shear failure, column flexural response. Meets the following requirements: (1) [\u2026TBD\u2026] Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3780,7 +3780,7 @@ "Description": "Non-conforming MF, weak columns, Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "Non-Conforming MF, column flexure-shear or shear failure, column flexural response. Meets the following requirements: (1) [\u2026TBD\u2026] Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3801,7 +3801,7 @@ "Description": "Non-conforming MF, weak columns, Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "Non-Conforming MF, column flexure-shear or shear failure, column flexural response. Meets the following requirements: (1) [\u2026TBD\u2026] Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3822,7 +3822,7 @@ "Description": "Non-conforming MF, weak columns and strong joints, Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "Non-Conforming MF, column flexure, flexure-shear, or shear failure, column flexural response. Meets the following requirements: (1) Column Pu > 0.6f'cAg, (2) Column Vn < Veq Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3839,7 +3839,7 @@ "Description": "Non-conforming MF, weak columns and strong joints, Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "Non-Conforming MF, column flexure, flexure-shear, or shear failure, column flexural response. Meets the following requirements: (1) Column Pu > 0.6f'cAg, (2) Column Vn < Veq Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3856,7 +3856,7 @@ "Description": "Non-conforming MF, weak columns and strong joints, Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "Non-Conforming MF, column flexure, flexure-shear, or shear failure, column flexural response. Meets the following requirements: (1) Column Pu > 0.6f'cAg, (2) Column Vn < Veq Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3873,7 +3873,7 @@ "Description": "Non-conforming MF, weak columns and strong joints, Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "Non-Conforming MF, column flexure, flexure-shear, or shear failure, column flexural response. Meets the following requirements: (1) Column Pu > 0.6f'cAg, (2) Column Vn < Veq Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3890,7 +3890,7 @@ "Description": "Non-conforming MF, weak columns and strong joints, Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "Non-Conforming MF, column flexure, flexure-shear, or shear failure, column flexural response. Meets the following requirements: (1) Column Pu > 0.6f'cAg, (2) Column Vn < Veq Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3907,7 +3907,7 @@ "Description": "Non-conforming MF, weak columns and strong joints, Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "Non-Conforming MF, column flexure, flexure-shear, or shear failure, column flexural response. Meets the following requirements: (1) Column Pu > 0.6f'cAg, (2) Column Vn < Veq Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3924,7 +3924,7 @@ "Description": "Non-conforming MF with inadequate development of reinforcing, Conc Col & Bm = 24\" x 24\", Beam one side", "Comments": "Non-Conforming MF, non-ductile failure, non-ductile response. May exhibit the following: (1) Splice detailing or length inadequate per ASCE 41-06 Table 6-7iii, (2) Beam or column reinforcing spliced at the face of joint, (3) Beam longitudinal steel discontinuous through joint per ASCE41-06 Table 6-7iii. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3941,7 +3941,7 @@ "Description": "Non-conforming MF with inadequate development of reinforcing, Conc Col & Bm = 24\" x 24\", Beam both sides", "Comments": "Non-Conforming MF, non-ductile failure, non-ductile response. May exhibit the following: (1) Splice detailing or length inadequate per ASCE 41-06 Table 6-7iii, (2) Beam or column reinforcing spliced at the face of joint, (3) Beam longitudinal steel discontinuous through joint per ASCE41-06 Table 6-7iii. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3958,7 +3958,7 @@ "Description": "Non-conforming MF with inadequate development of reinforcing, Conc Col & Bm = 24\" x 36\", Beam one side", "Comments": "Non-Conforming MF, non-ductile failure, non-ductile response. May exhibit the following: (1) Splice detailing or length inadequate per ASCE 41-06 Table 6-7iii, (2) Beam or column reinforcing spliced at the face of joint, (3) Beam longitudinal steel discontinuous through joint per ASCE41-06 Table 6-7iii. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3975,7 +3975,7 @@ "Description": "Non-conforming MF with inadequate development of reinforcing, Conc Col & Bm = 24\" x 36\", Beam both sides", "Comments": "Non-Conforming MF, non-ductile failure, non-ductile response. May exhibit the following: (1) Splice detailing or length inadequate per ASCE 41-06 Table 6-7iii, (2) Beam or column reinforcing spliced at the face of joint, (3) Beam longitudinal steel discontinuous through joint per ASCE41-06 Table 6-7iii. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -3992,7 +3992,7 @@ "Description": "Non-conforming MF with inadequate development of reinforcing, Conc Col & Bm = 36\" x 36\", Beam one side", "Comments": "Non-Conforming MF, non-ductile failure, non-ductile response. May exhibit the following: (1) Splice detailing or length inadequate per ASCE 41-06 Table 6-7iii, (2) Beam or column reinforcing spliced at the face of joint, (3) Beam longitudinal steel discontinuous through joint per ASCE41-06 Table 6-7iii. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4009,7 +4009,7 @@ "Description": "Non-conforming MF with inadequate development of reinforcing, Conc Col & Bm = 36\" x 36\", Beam both sides", "Comments": "Non-Conforming MF, non-ductile failure, non-ductile response. May exhibit the following: (1) Splice detailing or length inadequate per ASCE 41-06 Table 6-7iii, (2) Beam or column reinforcing spliced at the face of joint, (3) Beam longitudinal steel discontinuous through joint per ASCE41-06 Table 6-7iii. Costing is on a per joint basis.\nAuthor: Laura Lowes", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4026,7 +4026,7 @@ "Description": "Concrete link beam, diagonally reinforced, aspect ratio between 1.0 and 2.0, beam < 16\" wide and depth < 30\"", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4047,7 +4047,7 @@ "Description": "Concrete link beam, diagonally reinforced, aspect ratio between 2.0 and 4.0, beam < 16\" wide and depth < 30\"", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4068,7 +4068,7 @@ "Description": "Concrete link beam, conventionally reinforced, aspect ratio between 1.0 and 2.0, beam < 16\" wide and depth < 30\"", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4089,7 +4089,7 @@ "Description": "Concrete link beam, conventionally reinforced, aspect ratio between 2.0 and 4.0, beam < 16\" wide and depth < 30\"", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4110,7 +4110,7 @@ "Description": "Concrete link beam, diagonally reinforced, aspect ratio between 1.0 and 2.0, beam > 16\" wide and depth < 30\"", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4131,7 +4131,7 @@ "Description": "Concrete link beam, diagonally reinforced, aspect ratio between 2.0 and 4.0, beam > 16\" wide and depth < 30\"", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4152,7 +4152,7 @@ "Description": "Concrete link beam, conventionally reinforced, aspect ratio between 1.0 and 2.0, beam > 16\" wide and depth < 30\"", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4173,7 +4173,7 @@ "Description": "Concrete link beam, conventionally reinforced, aspect ratio between 2.0 and 4.0, beam > 16\" wide and depth < 30\"", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4194,7 +4194,7 @@ "Description": "Concrete link beam, diagonally reinforced, aspect ratio between 1.0 and 2.0, beam > 24\" wide and depth < 30\"", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4215,7 +4215,7 @@ "Description": "Concrete link beam, diagonally reinforced, aspect ratio between 2.0 and 4.0, beam > 24\" wide and depth < 30\"", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4236,7 +4236,7 @@ "Description": "Concrete link beam, conventionally reinforced, aspect ratio between 1.0 and 2.0, beam > 24\" wide and depth < 30\"", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4257,7 +4257,7 @@ "Description": "Concrete link beam, conventionally reinforced, aspect ratio between 2.0 and 4.0, beam > 24\" wide and depth < 30\"", "Comments": "\nAuthor: John Wallace", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4278,7 +4278,7 @@ "Description": "Rectangular low aspect ratio concrete walls 8\" or less thick single curtain up to 15' high", "Comments": "Costing for each 144 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4299,7 +4299,7 @@ "Description": "Rectangular low aspect ratio concrete walls 8\" or less thick single curtain 16' high to 24' high", "Comments": "Costing for each 400 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "400 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4320,7 +4320,7 @@ "Description": "Rectangular low aspect ratio concrete walls 8\" or less thick single curtain 25' high to 40' high", "Comments": "Costing for each 900 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "900 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4341,7 +4341,7 @@ "Description": "Rectangular low aspect ratio concrete walls 8\"-16\" double curtain; with heights of up to 15'", "Comments": "Costing for each 144 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4362,7 +4362,7 @@ "Description": "Rectangular low aspect ratio concrete walls 8\"-16\" double curtain; with heights of 16' to 24'", "Comments": "Costing for each 400 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "400 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4383,7 +4383,7 @@ "Description": "Rectangular low aspect ratio concrete walls 8\"-16\" double curtain; with heights of 24' to 40'", "Comments": "Costing for each 900 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "900 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4404,7 +4404,7 @@ "Description": "Rectangular low aspect ratio concrete walls 18\"-24\" thick with double curtain and heights up to 15' ", "Comments": "Costing for each 144 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4425,7 +4425,7 @@ "Description": "Rectangular low aspect ratio concrete walls 18\"-24\" thick with double curtain and heights 16' - 24' ", "Comments": "Costing for each 400 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "400 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4446,7 +4446,7 @@ "Description": "Rectangular low aspect ratio concrete walls 18\"-24\" thick with double curtain and heights 25' - 40' ", "Comments": "Costing for each 900 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "900 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4467,7 +4467,7 @@ "Description": "Low-rise reinforced concrete walls with return flanges, less than 8\" thick up to 15' high", "Comments": "Costing for each 144 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4484,7 +4484,7 @@ "Description": "Low-rise reinforced concrete walls with return flanges, less than 8\" thick, 16' to 24' high", "Comments": "Costing for each 400 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "400 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4501,7 +4501,7 @@ "Description": "Low-rise reinforced concrete walls with return flanges, less than 8\" thick, 25' to 40' high", "Comments": "Costing for each 900 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "900 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4518,7 +4518,7 @@ "Description": "Low-rise reinforced concrete walls with return flanges, 8\" to 16\" thick up to 15' high", "Comments": "Costing for each 144 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4535,7 +4535,7 @@ "Description": "Low-rise reinforced concrete walls with return flanges, 8\" to 16\" thick, 16' to 24' high", "Comments": "Costing for each 400 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "400 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4552,7 +4552,7 @@ "Description": "Low-rise reinforced concrete walls with return flanges, 8\" to 16\" thick, 25' to 40' high", "Comments": "Costing for each 900 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "900 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4569,7 +4569,7 @@ "Description": "Low-rise reinforced concrete walls with return flanges, 17\" to 24\" thick\" up to 15' high", "Comments": "Costing for each 144 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4586,7 +4586,7 @@ "Description": "Low-rise reinforced concrete walls with return flanges, 17\" to 24\" thick, 16' to 24' high", "Comments": "Costing for each 400 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "400 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4603,7 +4603,7 @@ "Description": "Low-rise reinforced concrete walls with return flanges, 17\" to 24\" thick, 25' to 40' high", "Comments": "Costing for each 900 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "900 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4620,7 +4620,7 @@ "Description": "Low rise reinforced concrete walls with boundary columns, less than 8\" thick, height <15'", "Comments": "Costing for each 144 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4637,7 +4637,7 @@ "Description": "Low rise reinforced concrete walls with boundary columns, less than 8\" thick, height between 16'-24'", "Comments": "Costing for each 400 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "400 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4654,7 +4654,7 @@ "Description": "Low rise reinforced concrete walls with boundary columns, less than 8\" thick, height between 24'-40'", "Comments": "Costing for each 900 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "900 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4671,7 +4671,7 @@ "Description": "Low rise reinforced concrete walls with boundary columns, 8\" to 16\" thick, height <15'", "Comments": "Costing for each 144 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4688,7 +4688,7 @@ "Description": "Low rise reinforced concrete walls with boundary columns, 8\" to 16\" thick, height between 16'-24'", "Comments": "Costing for each 400 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "400 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4705,7 +4705,7 @@ "Description": "Low rise reinforced concrete walls with boundary columns, 8\" to 16\" thick, height between 24'-40'", "Comments": "Costing for each 900 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "900 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4722,7 +4722,7 @@ "Description": "Low rise reinforced concrete walls with boundary columns, 17\"-24\" thick, height <15'", "Comments": "Costing for each 144 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4739,7 +4739,7 @@ "Description": "Low rise reinforced concrete walls with boundary columns, 17\"-24\" thick, height between 16'-24'", "Comments": "Costing for each 400 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "400 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4756,7 +4756,7 @@ "Description": "Low rise reinforced concrete walls with boundary columns, 17\"-24\" thick, height between 24'-40'", "Comments": "Costing for each 900 ft^2 Wall Panel, Orthogonal web reinforcement, f'c > 2500 psi, P/(A*f'c) <= 0.2\nNotes: Full repair description does not fully fit on sheet - consider shortening. Description will fit in PACT.\nAuthor: Andrew Whittaker", "SuggestedComponentBlockSize": "900 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4773,7 +4773,7 @@ "Description": "Slender Concrete Wall, 12\" thick, 12' high, 15' long", "Comments": "Slender concrete shear wall with aspect ratio greater than or equal to 2.0. Costing assumes a 144 ft^2 wall panel.", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4794,7 +4794,7 @@ "Description": "Slender Concrete Wall, 12\" thick, 12' high, 20' long", "Comments": "Slender concrete shear wall with aspect ratio greater than or equal to 2.0. Costing assumes a 144 ft^2 wall panel.", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4815,7 +4815,7 @@ "Description": "Slender Concrete Wall, 12\" thick, 12' high, 30' long", "Comments": "Slender concrete shear wall with aspect ratio greater than or equal to 2.0. Costing assumes a 144 ft^2 wall panel.", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4836,7 +4836,7 @@ "Description": "Slender Concrete Wall, 18\" thick, 12' high, 15' long", "Comments": "Slender concrete shear wall with aspect ratio greater than or equal to 2.0. Costing assumes a 144 ft^2 wall panel.", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4857,7 +4857,7 @@ "Description": "Slender Concrete Wall, 18\" thick, 12' high, 20' long", "Comments": "Slender concrete shear wall with aspect ratio greater than or equal to 2.0. Costing assumes a 144 ft^2 wall panel.", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4878,7 +4878,7 @@ "Description": "Slender Concrete Wall, 18\" thick, 12' high, 30' long", "Comments": "Slender concrete shear wall with aspect ratio greater than or equal to 2.0. Costing assumes a 144 ft^2 wall panel.", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4899,7 +4899,7 @@ "Description": "Slender Concrete Wall, 30\" thick, 12' high, 15' long", "Comments": "Slender concrete shear wall with aspect ratio greater than or equal to 2.0. Costing assumes a 144 ft^2 wall panel.", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4920,7 +4920,7 @@ "Description": "Slender Concrete Wall, 30\" thick, 12' high, 20' long", "Comments": "Slender concrete shear wall with aspect ratio greater than or equal to 2.0. Costing assumes a 144 ft^2 wall panel.", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4941,7 +4941,7 @@ "Description": "Slender Concrete Wall, 30\" thick, 12' high, 30' long", "Comments": "Slender concrete shear wall with aspect ratio greater than or equal to 2.0. Costing assumes a 144 ft^2 wall panel.", "SuggestedComponentBlockSize": "144 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -4962,7 +4962,7 @@ "Description": "Reinforced concrete flat slabs- columns without shear reinforcing 0 2500, Vert support only", "Comments": "Costing for each 2500 SF Unit, Suspended Lay-in Acoustic Tile Ceiling, Support: Vertical hanging wires only. Includes lighting fixtures in suspended ceiling.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A, B, or C", "SuggestedComponentBlockSize": "2500 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -7985,7 +7985,7 @@ "Description": "Suspended Ceiling, SDC D,E (Ip=1.0), Area (A): A < 250, Vert & Lat support", "Comments": "Costing for each 250 SF Unit, Suspended Lay-in Acoustic Tile Ceiling, Support: Vertical hanging wire, diagonal wires, and compression posts, 2 inch wide ledger support angles at wall and oversize holes around tile openings. Includes lighting fixtures in suspended ceiling.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D or E (Ip = 1.0)", "SuggestedComponentBlockSize": "250 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8006,7 +8006,7 @@ "Description": "Suspended Ceiling, SDC D,E (Ip=1.0), Area (A): 250 < A < 1000, Vert & Lat support", "Comments": "Costing for each 600 SF Unit, Suspended Lay-in Acoustic Tile Ceiling, Support: Vertical hanging wire, diagonal wires, and compression posts, 2 inch wide ledger support angles at wall and oversize holes around tile openings. Includes lighting fixtures in suspended ceiling.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D or E (Ip = 1.0)", "SuggestedComponentBlockSize": "600 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8027,7 +8027,7 @@ "Description": "Suspended Ceiling, SDC D,E (Ip=1.0), Area (A): 1000 < A < 2500, Vert & Lat support", "Comments": "Costing for each 1800 SF Unit, Suspended Lay-in Acoustic Tile Ceiling, Support: Vertical hanging wire, diagonal wires, and compression posts, 2 inch wide ledger support angles at wall and oversize holes around tile openings. Includes lighting fixtures in suspended ceiling.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D or E (Ip = 1.0)", "SuggestedComponentBlockSize": "1800 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8048,7 +8048,7 @@ "Description": "Suspended Ceiling, SDC D,E (Ip=1.0), Area (A): A > 2500, Vert & Lat support", "Comments": "Costing for each 2500 SF Unit, Suspended Lay-in Acoustic Tile Ceiling, Support: Vertical hanging wire, diagonal wires, and compression posts, 2 inch wide ledger support angles at wall and oversize holes around tile openings. Includes lighting fixtures in suspended ceiling.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D or E (Ip = 1.0)", "SuggestedComponentBlockSize": "2500 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8069,7 +8069,7 @@ "Description": "Suspended Ceiling, SDC D,E,F (Ip=1.5), Area (A): A < 250, Vert & Lat support", "Comments": "Costing for each 250 SF Unit, Suspended Lay-in Acoustic Tile Ceiling, Support: Vertical hanging wire, diagonal wires, and compression posts, 2 inch wide ledger support angles at wall and oversize holes around tile openings. Includes lighting fixtures in suspended ceiling.\nConstruction Quality: Special Inspection (e.g. OSHPD)\nSeismic Installation Conditions: SDC D, E or F (Ip = 1.5)", "SuggestedComponentBlockSize": "250 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8090,7 +8090,7 @@ "Description": "Suspended Ceiling, SDC D,E,F (Ip=1.5), Area (A): 250 < A < 1000, Vert & Lat support", "Comments": "Costing for each 600 SF Unit, Suspended Lay-in Acoustic Tile Ceiling, Support: Vertical hanging wire, diagonal wires, and compression posts, 2 inch wide ledger support angles at wall and oversize holes around tile openings. Includes lighting fixtures in suspended ceiling.\nConstruction Quality: Special Inspection (e.g. OSHPD)\nSeismic Installation Conditions: SDC D, E or F (Ip = 1.5)", "SuggestedComponentBlockSize": "600 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8111,7 +8111,7 @@ "Description": "Suspended Ceiling, SDC D,E,F (Ip=1.5), Area (A): 1000 < A < 2500, Vert & Lat support", "Comments": "Costing for each 1800 SF Unit, Suspended Lay-in Acoustic Tile Ceiling, Support: Vertical hanging wire, diagonal wires, and compression posts, 2 inch wide ledger support angles at wall and oversize holes around tile openings. Includes lighting fixtures in suspended ceiling.\nConstruction Quality: Special Inspection (e.g. OSHPD)\nSeismic Installation Conditions: SDC D, E or F (Ip = 1.5)", "SuggestedComponentBlockSize": "1800 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8132,7 +8132,7 @@ "Description": "Suspended Ceiling, SDC D,E,F (Ip=1.5), Area (A): A > 2500, Vert & Lat support", "Comments": "Costing for each 2500 SF Unit, Suspended Lay-in Acoustic Tile Ceiling, Support: Vertical hanging wire, diagonal wires, and compression posts, 2 inch wide ledger support angles at wall and oversize holes around tile openings. Includes lighting fixtures in suspended ceiling.\nConstruction Quality: Special Inspection (e.g. OSHPD)\nSeismic Installation Conditions: SDC D, E or F (Ip = 1.5)", "SuggestedComponentBlockSize": "2500 SF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8153,7 +8153,7 @@ "Description": "Independent Pendant Lighting - non seismic", "Comments": "Horizontal light fixtures 4 to 16 ft long suspended 12 to 24 inches from ceiling. No seismic design or bracing. Hung from ceiling above by two or more rods or cables. \nConstruction Quality: Normal\nSeismic Installation Conditions: All\nNotes: Low cost industrial hung lighting in warehouse or gymnasium that is not part of suspended ceiling or hanging from a suspended ceiling space.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8166,7 +8166,7 @@ "Description": "Independent Pendant Lighting - seismically rated", "Comments": "Horizontal light fixtures 4 to 16 ft long suspended 12 to 24 inches from ceiling. Hung from ceiling above by two or more rods or cables. Fixture and rods or cables are either designed for seismic movements or are laterally braced to prevent sway.\nConstruction Quality: Normal\nSeismic Installation Conditions: All\nNotes: Low cost industrial hung lighting in warehouse or gymnasium that is not part of suspended ceiling or hanging from a suspended ceiling space.", "SuggestedComponentBlockSize": " 1 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8179,7 +8179,7 @@ "Description": "Traction Elevator \u2013 Applies to most California Installations 1976 or later, most western states installations 1982 or later and most other U.S installations 1998 or later.", "Comments": "Costing per elevator. Elevator demand parameter shall be defined as the peak floor acceleration at the first floor. The elevator fragility for a multiple story building should only be entered once on the first floor.\nConstruction Quality: Any", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8248,7 +8248,7 @@ "Description": "Traction Elevator \u2013 Applies to most California Installations prior to 1976, most western states installations prior to 1982 and most other U.S installations prior to 1998.", "Comments": "Costing per elevator. Elevator demand parameter shall be defined as the peak floor acceleration at the first floor. The elevator fragility for a multiple story building should only be entered once on the first floor.\nConstruction Quality: Any", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8317,7 +8317,7 @@ "Description": "Hydraulic Elevator \u2013 Applies to most California Installations 1976 or later, most western states installations postdating 1982 and most U.S installations postdating 1998.", "Comments": "Costing per elevator. Elevator demand parameter shall be defined as the peak floor acceleration at the first floor. The elevator fragility for a multiple story building should only be entered once on the first floor.\nConstruction Quality: Any", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8386,7 +8386,7 @@ "Description": "Hydraulic Elevator \u2013 Applies to most California Installations prior to 1976, most western states installations prior to 1982 and most U.S installations prior to 1998.", "Comments": "Costing per elevator. Elevator demand parameter shall be defined as the peak floor acceleration at the first floor. The elevator fragility for a multiple story building should only be entered once on the first floor.\nConstruction Quality: Any", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8455,7 +8455,7 @@ "Description": "Cold or Hot Potable - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC A or B, PIPING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8472,7 +8472,7 @@ "Description": "Cold or Hot Potable - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC A or B, BRACING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8489,7 +8489,7 @@ "Description": "Cold or Hot Potable - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC C, PIPING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8506,7 +8506,7 @@ "Description": "Cold or Hot Potable - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC C, BRACING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8523,7 +8523,7 @@ "Description": "Cold or Hot Potable - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F, PIPING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8540,7 +8540,7 @@ "Description": "Cold or Hot Potable - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F, BRACING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8553,7 +8553,7 @@ "Description": "Cold or Hot Potable - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F (OSHPD or sim), PIPING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Special Regulation (e.g. OSHPD) for piping installations\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8570,7 +8570,7 @@ "Description": "Cold or Hot Potable - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F (OSHPD or sim), BRACING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Special Regulation (e.g. OSHPD) for piping installations\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8583,7 +8583,7 @@ "Description": "Cold or Hot Potable Water Piping (dia > 2.5 inches), SDC A or B, PIPING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8600,7 +8600,7 @@ "Description": "Cold or Hot Potable Water Piping (dia > 2.5 inches), SDC C, PIPING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8617,7 +8617,7 @@ "Description": "Cold or Hot Potable Water Piping (dia > 2.5 inches), SDC D,E,F, PIPING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8634,7 +8634,7 @@ "Description": "Cold or Hot Potable Water Piping (dia > 2.5 inches), SDC D,E,F, BRACING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8651,7 +8651,7 @@ "Description": "Cold or Hot Potable Water Piping (dia > 2.5 inches), SDC D,E,F (OSPHD or sim), PIPING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Special Regulation (e.g. OSHPD) for piping installations\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8668,7 +8668,7 @@ "Description": "Cold or Hot Potable Water Piping (dia > 2.5 inches), SDC D,E,F (OSPHD or sim), BRACING FRAGILITY", "Comments": "Potable water. Costing based upon 1000 ft segments.\nConstruction Quality: Special Regulation (e.g. OSHPD) for piping installations\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8685,7 +8685,7 @@ "Description": "Heating hot Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC A or B, PIPING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B (no seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8702,7 +8702,7 @@ "Description": "Heating hot Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC A or B, BRACING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B (no seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8719,7 +8719,7 @@ "Description": "Heating hot Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC C, PIPING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C (low seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8736,7 +8736,7 @@ "Description": "Heating hot Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC C, BRACING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C (low seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8753,7 +8753,7 @@ "Description": "Heating hot Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F, PIPING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8770,7 +8770,7 @@ "Description": "Heating hot Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F, BRACING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8783,7 +8783,7 @@ "Description": "Heating hot Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F (OSHPD or sim), PIPING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Special Regulations (e.g. OSHPD) for Piping Installations\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8800,7 +8800,7 @@ "Description": "Heating hot Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F (OSHPD or sim), BRACING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Special Regulations (e.g. OSHPD) for Piping Installations\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8813,7 +8813,7 @@ "Description": "Heating hot Water Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC A or B, PIPING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B (no seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8830,7 +8830,7 @@ "Description": "Heating hot Water Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC C, PIPING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C (low seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8847,7 +8847,7 @@ "Description": "Heating hot Water Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC D, E, or F, PIPING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E, F (high seismic design\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8864,7 +8864,7 @@ "Description": "Heating hot Water Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC D, E, or F, BRACING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E, F (high seismic design\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8881,7 +8881,7 @@ "Description": "Heating hot Water Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC D, E, or F (OSHPD or sim), PIPING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Special Regulation (e.g. OSHPD) for Piping Installations\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8898,7 +8898,7 @@ "Description": "Heating hot Water Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC D, E, or F (OSHPD or sim), BRACING FRAGILITY", "Comments": "Heating water. Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Special Regulation (e.g. OSHPD) for Piping Installations\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8915,7 +8915,7 @@ "Description": "Sanitary Waste Piping - Cast Iron w/flexible couplings, SDC A,B, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8932,7 +8932,7 @@ "Description": "Sanitary Waste Piping - Cast Iron w/flexible couplings, SDC C, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8949,7 +8949,7 @@ "Description": "Sanitary Waste Piping - Cast Iron w/flexible couplings, SDC D,E,F, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8962,7 +8962,7 @@ "Description": "Sanitary Waste Piping - Cast Iron w/flexible couplings, SDC D,E,F (OSHPD or sim), BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe\nConstruction Quality: Special Regulation (e.g. OSHPD) for piping installations\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8975,7 +8975,7 @@ "Description": "Sanitary Waste Piping - Cast Iron w/bell and spigot couplings, SDC A,B, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -8988,7 +8988,7 @@ "Description": "Sanitary Waste Piping - Cast Iron w/bell and spigot couplings, SDC A,B, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9005,7 +9005,7 @@ "Description": "Sanitary Waste Piping - Cast Iron w/bell and spigot couplings, SDC C, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9018,7 +9018,7 @@ "Description": "Sanitary Waste Piping - Cast Iron w/bell and spigot couplings, SDC C, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9035,7 +9035,7 @@ "Description": "Sanitary Waste Piping - Cast Iron w/bell and spigot couplings, SDC D,E,F, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9048,7 +9048,7 @@ "Description": "Sanitary Waste Piping - Cast Iron w/bell and spigot couplings, SDC D,E,F, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9061,7 +9061,7 @@ "Description": "Sanitary Waste Piping - Cast Iron w/bell and spigot couplings, SDC D,E,F (OSHPD or sim), PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe\nConstruction Quality: Special Regulation (e.g. OSHPD) for piping installations\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9074,7 +9074,7 @@ "Description": "Sanitary Waste Piping - Cast Iron w/bell and spigot couplings, SDC D,E,F (OSHPD or sim), BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe\nConstruction Quality: Special Regulation (e.g. OSHPD) for piping installations\nSeismic Installation Conditions: SDC D, E or F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9087,7 +9087,7 @@ "Description": "Chilled Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC A or B, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B (no seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9104,7 +9104,7 @@ "Description": "Chilled Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC A or B, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B (no seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9121,7 +9121,7 @@ "Description": "Chilled Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC C, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C (low seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9138,7 +9138,7 @@ "Description": "Chilled Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC C, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C (low seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9155,7 +9155,7 @@ "Description": "Chilled Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9172,7 +9172,7 @@ "Description": "Chilled Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9185,7 +9185,7 @@ "Description": "Chilled Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F (OSHPD or sim), PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Special Regulations (e.g. OSHPD) for Piping Installations\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9202,7 +9202,7 @@ "Description": "Chilled Water Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F (OSHPD or sim), BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Special Regulations (e.g. OSHPD) for Piping Installations\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9215,7 +9215,7 @@ "Description": "Chilled Water Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC A or B, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe greater than 2.5 inches in diameter\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B (no seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9232,7 +9232,7 @@ "Description": "Chilled Water Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC A or B, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe greater than 2.5 inches in diameter\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B (no seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9245,7 +9245,7 @@ "Description": "Chilled Water Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC C, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe greater than 2.5 inches in diameter\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C (low seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9262,7 +9262,7 @@ "Description": "Chilled Water Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC D, E, or F, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe greater than 2.5 inches in diameter\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E, F (high seismic design\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9279,7 +9279,7 @@ "Description": "Chilled Water Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC D, E, or F, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe greater than 2.5 inches in diameter\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E, F (high seismic design\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9296,7 +9296,7 @@ "Description": "Chilled Water Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC D, E, or F (OSHPD or sim), PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe greater than 2.5 inches in diameter\nConstruction Quality: Special Regulation (e.g. OSHPD) for Piping Installations\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9313,7 +9313,7 @@ "Description": "Chilled Water Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC D, E, or F (OSHPD or sim), BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe greater than 2.5 inches in diameter\nConstruction Quality: Special Regulation (e.g. OSHPD) for Piping Installations\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9330,7 +9330,7 @@ "Description": "Steam Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC A or B, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B (no seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9347,7 +9347,7 @@ "Description": "Steam Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC A or B, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B (no seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9364,7 +9364,7 @@ "Description": "Steam Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC C, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C (low seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9381,7 +9381,7 @@ "Description": "Steam Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC C, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C (low seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9398,7 +9398,7 @@ "Description": "Steam Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9415,7 +9415,7 @@ "Description": "Steam Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9428,7 +9428,7 @@ "Description": "Steam Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F (OSHPD or sim), PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Special Regulations (e.g. OSHPD) for Piping Installations\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9445,7 +9445,7 @@ "Description": "Steam Piping - Small Diameter Threaded Steel - (2.5 inches in diameter or less), SDC D, E, or F (OSHPD or sim), BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe 2.5 inches in diameter or less\nConstruction Quality: Special Regulations (e.g. OSHPD) for Piping Installations\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9458,7 +9458,7 @@ "Description": "Steam Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC A or B, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe greater than 2.5 inches in diameter\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B (no seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9475,7 +9475,7 @@ "Description": "Steam Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC C, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe greater than 2.5 inches in diameter\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C (low seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9492,7 +9492,7 @@ "Description": "Steam Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC D, E, or F, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe greater than 2.5 inches in diameter\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9509,7 +9509,7 @@ "Description": "Steam Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC D, E, or F, BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe greater than 2.5 inches in diameter\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9526,7 +9526,7 @@ "Description": "Steam Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC D, E, or F (OSHPD or sim), PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe greater than 2.5 inches in diameter\nConstruction Quality: Special Regulation (e.g. OSHPD) for Piping Installations\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9543,7 +9543,7 @@ "Description": "Steam Piping - Large Diameter Welded Steel - (greater than 2.5 inches in diameter), SDC D, E, or F (OSHPD or sim), BRACING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, pipe greater than 2.5 inches in diameter\nConstruction Quality: Special Regulation (e.g. OSHPD) for Piping Installations\nSeismic Installation Conditions: SDC D, E, F (high seismic design)\nNotes: Consequence is for piping only. Enter floor wetting consequence separately. Cost includes allowance for MEP relocation to perform work.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9560,7 +9560,7 @@ "Description": "Chiller - Capacity: < 100 Ton - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9573,7 +9573,7 @@ "Description": "Chiller - Capacity: 100 to <350 Ton - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9586,7 +9586,7 @@ "Description": "Chiller - Capacity: 350 to <750 Ton - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9599,7 +9599,7 @@ "Description": "Chiller - Capacity: 750 to <1000 Ton - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9612,7 +9612,7 @@ "Description": "Chiller - Capacity: < 100 Ton - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9629,7 +9629,7 @@ "Description": "Chiller - Capacity: < 100 Ton - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9642,7 +9642,7 @@ "Description": "Chiller - Capacity: < 100 Ton - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9663,7 +9663,7 @@ "Description": "Chiller - Capacity: 100 to <350 Ton - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9680,7 +9680,7 @@ "Description": "Chiller - Capacity: 100 to <350 Ton - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9693,7 +9693,7 @@ "Description": "Chiller - Capacity: 100 to <350 Ton - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9714,7 +9714,7 @@ "Description": "Chiller - Capacity: 350 to <750 Ton - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9731,7 +9731,7 @@ "Description": "Chiller - Capacity: 350 to <750 Ton - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9744,7 +9744,7 @@ "Description": "Chiller - Capacity: 350 to <750 Ton - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9765,7 +9765,7 @@ "Description": "Chiller - Capacity: 750 to <1000 Ton - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9782,7 +9782,7 @@ "Description": "Chiller - Capacity: 750 to <1000 Ton - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9795,7 +9795,7 @@ "Description": "Chiller - Capacity: 750 to <1000 Ton - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9816,7 +9816,7 @@ "Description": "Chiller - Capacity: < 100 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9833,7 +9833,7 @@ "Description": "Chiller - Capacity: < 100 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9846,7 +9846,7 @@ "Description": "Chiller - Capacity: < 100 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9867,7 +9867,7 @@ "Description": "Chiller - Capacity: 100 to <350 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9884,7 +9884,7 @@ "Description": "Chiller - Capacity: 100 to <350 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9897,7 +9897,7 @@ "Description": "Chiller - Capacity: 100 to <350 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9918,7 +9918,7 @@ "Description": "Chiller - Capacity: 350 to <750 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9935,7 +9935,7 @@ "Description": "Chiller - Capacity: 350 to <750 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9948,7 +9948,7 @@ "Description": "Chiller - Capacity: 350 to <750 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9969,7 +9969,7 @@ "Description": "Chiller - Capacity: 750 to <1000 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9986,7 +9986,7 @@ "Description": "Chiller - Capacity: 750 to <1000 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -9999,7 +9999,7 @@ "Description": "Chiller - Capacity: 750 to <1000 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10020,7 +10020,7 @@ "Description": "Cooling Tower - Capacity: < 100 Ton - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10033,7 +10033,7 @@ "Description": "Cooling Tower - Capacity: 100 to <350 Ton - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10046,7 +10046,7 @@ "Description": "Cooling Tower - Capacity: 350 to <750 Ton - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10059,7 +10059,7 @@ "Description": "Cooling Tower - Capacity: 750 to <1000 Ton - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10072,7 +10072,7 @@ "Description": "Cooling Tower - Capacity: < 100 Ton - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10089,7 +10089,7 @@ "Description": "Cooling Tower - Capacity: < 100 Ton - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10102,7 +10102,7 @@ "Description": "Cooling Tower - Capacity: < 100 Ton - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10123,7 +10123,7 @@ "Description": "Cooling Tower - Capacity: 100 to <350 Ton - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10140,7 +10140,7 @@ "Description": "Cooling Tower - Capacity: 100 to <350 Ton - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10153,7 +10153,7 @@ "Description": "Cooling Tower - Capacity: 100 to <350 Ton - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10174,7 +10174,7 @@ "Description": "Cooling Tower - Capacity: 350 to <750 Ton - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10191,7 +10191,7 @@ "Description": "Cooling Tower - Capacity: 350 to <750 Ton - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10204,7 +10204,7 @@ "Description": "Cooling Tower - Capacity: 350 to <750 Ton - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10225,7 +10225,7 @@ "Description": "Cooling Tower - Capacity: 750 to <1000 Ton - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10242,7 +10242,7 @@ "Description": "Cooling Tower - Capacity: 750 to <1000 Ton - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10255,7 +10255,7 @@ "Description": "Cooling Tower - Capacity: 750 to <1000 Ton - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10276,7 +10276,7 @@ "Description": "Cooling Tower - Capacity: < 100 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10293,7 +10293,7 @@ "Description": "Cooling Tower - Capacity: < 100 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10306,7 +10306,7 @@ "Description": "Cooling Tower - Capacity: < 100 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 75 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10327,7 +10327,7 @@ "Description": "Cooling Tower - Capacity: 100 to <350 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10344,7 +10344,7 @@ "Description": "Cooling Tower - Capacity: 100 to <350 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10357,7 +10357,7 @@ "Description": "Cooling Tower - Capacity: 100 to <350 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 250 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10378,7 +10378,7 @@ "Description": "Cooling Tower - Capacity: 350 to <750 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10395,7 +10395,7 @@ "Description": "Cooling Tower - Capacity: 350 to <750 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10408,7 +10408,7 @@ "Description": "Cooling Tower - Capacity: 350 to <750 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 500 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10429,7 +10429,7 @@ "Description": "Cooling Tower - Capacity: 750 to <1000 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10446,7 +10446,7 @@ "Description": "Cooling Tower - Capacity: 750 to <1000 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10459,7 +10459,7 @@ "Description": "Cooling Tower - Capacity: 750 to <1000 Ton - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 850 Ton.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10480,7 +10480,7 @@ "Description": "Compressor - Capacity: Small non medical air supply - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10497,7 +10497,7 @@ "Description": "Compressor - Capacity: Large non medical air supply - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10514,7 +10514,7 @@ "Description": "Compressor - Capacity: Small medical quality air supply - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10531,7 +10531,7 @@ "Description": "Compressor - Capacity: Large medical quality air supply - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10548,7 +10548,7 @@ "Description": "Compressor - Capacity: Small non medical air supply - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10565,7 +10565,7 @@ "Description": "Compressor - Capacity: Small non medical air supply - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10582,7 +10582,7 @@ "Description": "Compressor - Capacity: Small non medical air supply - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10607,7 +10607,7 @@ "Description": "Compressor - Capacity: Large non medical air supply - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10624,7 +10624,7 @@ "Description": "Compressor - Capacity: Large non medical air supply - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10641,7 +10641,7 @@ "Description": "Compressor - Capacity: Large non medical air supply - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10666,7 +10666,7 @@ "Description": "Compressor - Capacity: Small medical quality air supply - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10683,7 +10683,7 @@ "Description": "Compressor - Capacity: Small medical quality air supply - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10700,7 +10700,7 @@ "Description": "Compressor - Capacity: Small medical quality air supply - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10725,7 +10725,7 @@ "Description": "Compressor - Capacity: Large medical quality air supply - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10742,7 +10742,7 @@ "Description": "Compressor - Capacity: Large medical quality air supply - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10759,7 +10759,7 @@ "Description": "Compressor - Capacity: Large medical quality air supply - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10784,7 +10784,7 @@ "Description": "Compressor - Capacity: Small non medical air supply - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10801,7 +10801,7 @@ "Description": "Compressor - Capacity: Small non medical air supply - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10818,7 +10818,7 @@ "Description": "Compressor - Capacity: Small non medical air supply - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10843,7 +10843,7 @@ "Description": "Compressor - Capacity: Large non medical air supply - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10860,7 +10860,7 @@ "Description": "Compressor - Capacity: Large non medical air supply - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10877,7 +10877,7 @@ "Description": "Compressor - Capacity: Large non medical air supply - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10902,7 +10902,7 @@ "Description": "Compressor - Capacity: Small medical quality air supply - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10919,7 +10919,7 @@ "Description": "Compressor - Capacity: Small medical quality air supply - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10936,7 +10936,7 @@ "Description": "Compressor - Capacity: Small medical quality air supply - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10961,7 +10961,7 @@ "Description": "Compressor - Capacity: Large medical quality air supply - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10978,7 +10978,7 @@ "Description": "Compressor - Capacity: Large medical quality air supply - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -10995,7 +10995,7 @@ "Description": "Compressor - Capacity: Large medical quality air supply - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11020,7 +11020,7 @@ "Description": "HVAC Fan In Line Fan, Fan independently supported and vibration isolators, SDC A or B", "Comments": "Costing per 10 units\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC A or B\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11037,7 +11037,7 @@ "Description": "HVAC Fan In Line Fan, Fan independently supported and vibration isolators, SDC C", "Comments": "Costing per 10 units\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC C\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11054,7 +11054,7 @@ "Description": "HVAC Fan In Line Fan, Fan independently supported and vibration isolators, SDC D, E, F", "Comments": "Costing per 10 units\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC D, E or F\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11071,7 +11071,7 @@ "Description": "HVAC Fan In Line Fan, Fan independently supported and vibration isolators, SDC D, E, F (OSHPD or sim)", "Comments": "Costing per 10 units\nConstruction Quality: Special Regulation (e.g. OSHPD) for HVAC installations\nSeismic Installation Conditions: Special Regulation (e.g. OSHPD) for HVAC installations - SDC D, E or F (high seismic design)\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11088,7 +11088,7 @@ "Description": "HVAC Fan In Line Fan, Fan independently supported but not on vibration isolators, SDC A or B", "Comments": "Costing per 10 units\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC A or B\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11101,7 +11101,7 @@ "Description": "HVAC Fan In Line Fan, Fan independently supported but not on vibration isolators, SDC C", "Comments": "Costing per 10 units\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC C\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11114,7 +11114,7 @@ "Description": "HVAC Fan In Line Fan, Fan independently supported but not on vibration isolators, SDC D, E, F", "Comments": "Costing per 10 units\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC D, E or F\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11127,7 +11127,7 @@ "Description": "HVAC Fan In Line Fan, Fan independently supported but not on vibration isolators, SDC D, E, F (OSHPD or sim)", "Comments": "Costing per 10 units\nConstruction Quality: Special Regulation (e.g. OSHPD) for HVAC installations\nSeismic Installation Conditions: Special Regulation (e.g. OSHPD) for HVAC installations - SDC D, E or F (high seismic design)\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11140,7 +11140,7 @@ "Description": "HVAC Galvanized Sheet Metal Ducting less than 6 sq. ft in cross sectional area, SDC A or B", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC A or B", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11157,7 +11157,7 @@ "Description": "HVAC Galvanized Sheet Metal Ducting less than 6 sq. ft in cross sectional area, SDC C", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC C", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11174,7 +11174,7 @@ "Description": "HVAC Galvanized Sheet Metal Ducting less than 6 sq. ft in cross sectional area, SDC D, E, or F", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC D, E or F", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11191,7 +11191,7 @@ "Description": "HVAC Galvanized Sheet Metal Ducting less than 6 sq. ft in cross sectional area, SDC D, E, or F (OSHPD or sim)", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Special Regulation (e.g. OSHPD) for HVAC ducting installation\nSeismic Installation Conditions: Special Regulation (e.g. OSHPD) for HVAC ducting installation - SDC D, E or F (high seismic design)", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11208,7 +11208,7 @@ "Description": "HVAC Galvanized Sheet Metal Ducting - 6 sq. ft cross sectional area or greater, SDC A or B", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC A or B", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11225,7 +11225,7 @@ "Description": "HVAC Galvanized Sheet Metal Ducting - 6 sq. ft cross sectional area or greater, SDC C", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC C", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11242,7 +11242,7 @@ "Description": "HVAC Galvanized Sheet Metal Ducting - 6 sq. ft cross sectional area or greater, SDC D, E, or F", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC D, E or F", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11259,7 +11259,7 @@ "Description": "HVAC Galvanized Sheet Metal Ducting - 6 sq. ft cross sectional area or greater, SDC D, E, or F (OSHPD or sim)", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Special Regulation (e.g. OSHPD) for HVAC ducting installation\nSeismic Installation Conditions: Special Regulation (e.g. OSHPD) for HVAC ducting installation - SDC D, E or F (high seismic design)", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11276,7 +11276,7 @@ "Description": "HVAC Stainless Steel Ducting less than 6 sq. ft in cross sectional area, SDC A or B", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC A or B", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11293,7 +11293,7 @@ "Description": "HVAC Stainless Steel Ducting less than 6 sq. ft in cross sectional area, SDC C", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC C", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11310,7 +11310,7 @@ "Description": "HVAC Stainless Steel Ducting less than 6 sq. ft in cross sectional area, SDC D, E, or F", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC D, E or F", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11327,7 +11327,7 @@ "Description": "HVAC Stainless Steel Ducting less than 6 sq. ft in cross sectional area, SDC D, E, or F (OSHPD or sim)", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Special Regulation (e.g. OSHPD) for HVAC ducting installation\nSeismic Installation Conditions: Special Regulation (e.g. OSHPD) for HVAC ducting installation - SDC D, E or F (high seismic design)", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11344,7 +11344,7 @@ "Description": "HVAC Stainless Steel Ducting - 6 sq. ft cross sectional area or greater, SDC A or B", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC A or B", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11361,7 +11361,7 @@ "Description": "HVAC Stainless Steel Ducting - 6 sq. ft cross sectional area or greater, SDC C", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC C", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11378,7 +11378,7 @@ "Description": "HVAC Stainless Steel Ducting - 6 sq. ft cross sectional area or greater, SDC D, E, or F", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC D, E or F", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11395,7 +11395,7 @@ "Description": "HVAC Stainless Steel Ducting - 6 sq. ft cross sectional area or greater, SDC D, E, or F (OSHPD or sim)", "Comments": "Costing based upon 1000 ft segments of duct\nConstruction Quality: Special Regulation (e.g. OSHPD) for HVAC ducting installation\nSeismic Installation Conditions: Special Regulation (e.g. OSHPD) for HVAC ducting installation - SDC D, E or F (high seismic design)", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11412,7 +11412,7 @@ "Description": "HVAC Drops / Diffusers in suspended ceilings - No independent safety wires, SDC A or B", "Comments": "Costing per 10 units, No independent safety wires\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC A or B\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11425,7 +11425,7 @@ "Description": "HVAC Drops / Diffusers in suspended ceilings - No independent safety wires, SDC C", "Comments": "Costing per 10 units, No independent safety wires\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC C\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11438,7 +11438,7 @@ "Description": "HVAC Drops / Diffusers without ceilings - supported by ducting only - No independent safety wires, SDC A or B", "Comments": "Costing per 10 units, unit supported by ducting only, no independent safety wires\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC A or B\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11451,7 +11451,7 @@ "Description": "HVAC Drops / Diffusers without ceilings - supported by ducting only - No independent safety wires, SDC C", "Comments": "Costing per 10 units, unit supported by ducting only, no independent safety wires\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC C\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11464,7 +11464,7 @@ "Description": "HVAC Drops / Diffusers without ceilings - supported by ducting only - No independent safety wires, SDC D, E, or F", "Comments": "Costing per 10 units, unit supported by ducting only, no independent safety wires\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC D, E or F\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11477,7 +11477,7 @@ "Description": "HVAC Drops / Diffusers without ceilings - supported by ducting only - No independent safety wires, SDC D, E, or F (OSHPD or sim)", "Comments": "Costing per 10 units, unit supported by ducting only, no independent safety wires\nConstruction Quality: Special Regulation (e.g. OSHPD) for HVAC Ducting Installation\nSeismic Installation Conditions: Special Regulation (e.g. OSHPD) for HVAC Ducting Installation - SDC D, E or F (high seismic design)\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11490,7 +11490,7 @@ "Description": "Variable Air Volume (VAV) box with in-line coil, SDC A or B", "Comments": "Costing per 10 units\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC A or B\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11503,7 +11503,7 @@ "Description": "Variable Air Volume (VAV) box with in-line coil, SDC C", "Comments": "Costing per 10 units\nConstruction Quality: Normal\nSeismic Installation Conditions: Normal - SDC C\nNotes: One failure is expected per 10 units.", "SuggestedComponentBlockSize": "10 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11516,7 +11516,7 @@ "Description": "HVAC Fan - Capacity: all - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11529,7 +11529,7 @@ "Description": "HVAC Fan - Capacity: all - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11546,7 +11546,7 @@ "Description": "HVAC Fan - Capacity: all - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11559,7 +11559,7 @@ "Description": "HVAC Fan - Capacity: all - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11580,7 +11580,7 @@ "Description": "HVAC Fan - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11597,7 +11597,7 @@ "Description": "HVAC Fan - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11610,7 +11610,7 @@ "Description": "HVAC Fan - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11631,7 +11631,7 @@ "Description": "Air Handling Unit - Capacity: <5000 CFM - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 4000 CFM.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11648,7 +11648,7 @@ "Description": "Air Handling Unit - Capacity: 5000 to <10000 CFM - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 8000 CFM.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11665,7 +11665,7 @@ "Description": "Air Handling Unit - Capacity: 10000 to <25000 CFM - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 20000 CFM.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11682,7 +11682,7 @@ "Description": "Air Handling Unit - Capacity: 25000 to <40000 CFM - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 30000 CFM.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11699,7 +11699,7 @@ "Description": "Air Handling Unit - Capacity: <5000 CFM - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 4000 CFM.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11716,7 +11716,7 @@ "Description": "Air Handling Unit - Capacity: <5000 CFM - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 4000 CFM.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11733,7 +11733,7 @@ "Description": "Air Handling Unit - Capacity: <5000 CFM - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 4000 CFM.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11758,7 +11758,7 @@ "Description": "Air Handling Unit - Capacity: 5000 to <10000 CFM - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 8000 CFM.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11775,7 +11775,7 @@ "Description": "Air Handling Unit - Capacity: 5000 to <10000 CFM - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 8000 CFM.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11792,7 +11792,7 @@ "Description": "Air Handling Unit - Capacity: 5000 to <10000 CFM - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 8000 CFM.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11817,7 +11817,7 @@ "Description": "Air Handling Unit - Capacity: 10000 to <25000 CFM - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 20000 CFM.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11834,7 +11834,7 @@ "Description": "Air Handling Unit - Capacity: 10000 to <25000 CFM - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 20000 CFM.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11851,7 +11851,7 @@ "Description": "Air Handling Unit - Capacity: 10000 to <25000 CFM - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 20000 CFM.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11876,7 +11876,7 @@ "Description": "Air Handling Unit - Capacity: 25000 to <40000 CFM - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 30000 CFM.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11893,7 +11893,7 @@ "Description": "Air Handling Unit - Capacity: 25000 to <40000 CFM - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 30000 CFM.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11910,7 +11910,7 @@ "Description": "Air Handling Unit - Capacity: 25000 to <40000 CFM - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 30000 CFM.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11935,7 +11935,7 @@ "Description": "Control Panel - Capacity: all - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11948,7 +11948,7 @@ "Description": "Control Panel - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11965,7 +11965,7 @@ "Description": "Control Panel - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11978,7 +11978,7 @@ "Description": "Control Panel - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -11999,7 +11999,7 @@ "Description": "Fire Sprinkler Water Piping - Horizontal Mains and Branches - Old Style Victaulic - Thin Wall Steel - No bracing, SDC A or B, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, horizontal main and branches\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B (no seismic design)\nNotes: One failure is expected per 1000 feet of pipe. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12016,7 +12016,7 @@ "Description": "Fire Sprinkler Water Piping - Horizontal Mains and Branches - Old Style Victaulic - Thin Wall Steel - No bracing, SDC C, PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, horizontal main and branches\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C (low seismic design)\nNotes: One failure is expected per 1000 feet of pipe. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12033,7 +12033,7 @@ "Description": "Fire Sprinkler Water Piping - Horizontal Mains and Branches - Old Style Victaulic - Thin Wall Steel - Poorly designed bracing, SDC D, E, or F , PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, horizontal main and branches\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D,E,F (high seismic design)\nNotes: One failure is expected per 1000 feet of pipe. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12050,7 +12050,7 @@ "Description": "Fire Sprinkler Water Piping - Horizontal Mains and Branches - Old Style Victaulic - Thin Wall Steel - with designed bracing, SDC D, E, or F (OSHPD or sim), PIPING FRAGILITY", "Comments": "Costing based upon 1000 ft segments of pipe, horizontal main and branches\nConstruction Quality: Special Regulation (e.g. OSHPD) for sprinkler installations\nSeismic Installation Conditions: SDC D,E,F (high seismic design)\nNotes: One failure is expected per 1000 feet of pipe. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "1000 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12067,7 +12067,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - Dropping into unbraced lay-in tile SOFT ceiling - 6 ft. long drop maximum, SDC A or B", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B (no seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12084,7 +12084,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - Dropping into unbraced lay-in tile SOFT ceiling - 6 ft. long drop maximum, SDC C", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C (low seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12101,7 +12101,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - Dropping into unbraced lay-in tile SOFT ceiling - 6 ft. long drop maximum, SDC D, E, or F", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D,E,F (high seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12114,7 +12114,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - Dropping into unbraced lay-in tile SOFT ceiling - 6 ft. long drop maximum, SDC D, E, or F (OSHPD or sim)", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Special Regulation (e.g. OSHPD) for sprinkler installations\nSeismic Installation Conditions: SDC D,E,F (high seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12127,7 +12127,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - Dropping into unbraced lay-in tile HARD ceiling - 6 ft. long drop maximum, SDC A or B", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A or B (no seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12144,7 +12144,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - Dropping into unbraced lay-in tile HARD ceiling - 6 ft. long drop maximum, SDC C", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C (low seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12161,7 +12161,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - Dropping into braced lay-in tile SOFT ceiling - 6 ft. long drop maximum, SDC D, E, or F", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D,E,F (high seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12178,7 +12178,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - Dropping into braced lay-in tile SOFT ceiling - 6 ft. long drop maximum, SDC D, E, or F (OSHPD or sim)", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Special Regulation (e.g. OSHPD) for sprinkler installations\nSeismic Installation Conditions: SDC D,E,F (high seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12195,7 +12195,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - Dropping into braced lay-in tile HARD ceiling - 6 ft. long drop maximum, SDC D, E, or F", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D,E,F (high seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12212,7 +12212,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - Dropping into braced lay-in tile HARD ceiling - 6 ft. long drop maximum, SDC D, E, or F (OSHPD or sim)", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Special Regulation (e.g. OSHPD) for sprinkler installations\nSeismic Installation Conditions: SDC D,E,F (high seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12229,7 +12229,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - No Ceiling - 6 ft. long drop maximum, SDC A or B", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC A, B ( no seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12246,7 +12246,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - No Ceiling - 6 ft. long drop maximum, SDC C", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC C ( low seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12263,7 +12263,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - No Ceiling - 6 ft. long drop maximum, SDC D, E, or F", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Normal\nSeismic Installation Conditions: SDC D,E,F (high seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12280,7 +12280,7 @@ "Description": "Fire Sprinkler Drop Standard Threaded Steel - No Ceiling - 6 ft. long drop maximum, SDC D, E, or F (OSHPD or sim)", "Comments": "Costing per 100 units, Standard threaded steel drop, 6 ft. long drop maximum\nConstruction Quality: Special Regulation (e.g. OSHPD) for sprinkler installations\nSeismic Installation Conditions: SDC D,E,F ( high seismic design)\nNotes: One failure is expected per 100 units. Allowance included for MEP modifications for repair.", "SuggestedComponentBlockSize": "100 EA", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12297,7 +12297,7 @@ "Description": "Transformer/primary service - Capacity: <100 kVA - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 75 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12310,7 +12310,7 @@ "Description": "Transformer/primary service - Capacity: 100 to <350 kVA - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 250 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12323,7 +12323,7 @@ "Description": "Transformer/primary service - Capacity: 350 to <750 kVA - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 500 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12336,7 +12336,7 @@ "Description": "Transformer/primary service - Capacity: 750 to 1500 kVA - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 1000 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12349,7 +12349,7 @@ "Description": "Transformer/primary service - Capacity: <100 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 75 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12366,7 +12366,7 @@ "Description": "Transformer/primary service - Capacity: <100 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 75 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12379,7 +12379,7 @@ "Description": "Transformer/primary service - Capacity: <100 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 75 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12400,7 +12400,7 @@ "Description": "Transformer/primary service - Capacity: 100 to <350 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 250 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12417,7 +12417,7 @@ "Description": "Transformer/primary service - Capacity: 100 to <350 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 250 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12430,7 +12430,7 @@ "Description": "Transformer/primary service - Capacity: 100 to <350 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 250 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12451,7 +12451,7 @@ "Description": "Transformer/primary service - Capacity: 350 to <750 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 500 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12468,7 +12468,7 @@ "Description": "Transformer/primary service - Capacity: 350 to <750 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 500 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12481,7 +12481,7 @@ "Description": "Transformer/primary service - Capacity: 350 to <750 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 500 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12502,7 +12502,7 @@ "Description": "Transformer/primary service - Capacity: 750 to 1500 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 1000 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12519,7 +12519,7 @@ "Description": "Transformer/primary service - Capacity: 750 to 1500 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 1000 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12532,7 +12532,7 @@ "Description": "Transformer/primary service - Capacity: 750 to 1500 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 1000 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12553,7 +12553,7 @@ "Description": "Motor Control Center - Capacity: all - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12566,7 +12566,7 @@ "Description": "Motor Control Center - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12583,7 +12583,7 @@ "Description": "Motor Control Center - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12596,7 +12596,7 @@ "Description": "Motor Control Center - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12617,7 +12617,7 @@ "Description": "Low Voltage Switchgear - Capacity: 100 to <350 Amp - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 225 Amp.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12630,7 +12630,7 @@ "Description": "Low Voltage Switchgear - Capacity: 350 to <750 Amp - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 400 Amp.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12643,7 +12643,7 @@ "Description": "Low Voltage Switchgear - Capacity: 750 to <1200 Amp - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 800 Amp.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12656,7 +12656,7 @@ "Description": "Low Voltage Switchgear - Capacity: 1200 to 2000 Amp - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 1600 Amp.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12669,7 +12669,7 @@ "Description": "Low Voltage Switchgear - Capacity: 100 to <350 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 225 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12686,7 +12686,7 @@ "Description": "Low Voltage Switchgear - Capacity: 100 to <350 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 225 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12699,7 +12699,7 @@ "Description": "Low Voltage Switchgear - Capacity: 100 to <350 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 225 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12720,7 +12720,7 @@ "Description": "Low Voltage Switchgear - Capacity: 350 to <750 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 400 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12737,7 +12737,7 @@ "Description": "Low Voltage Switchgear - Capacity: 350 to <750 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 400 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12750,7 +12750,7 @@ "Description": "Low Voltage Switchgear - Capacity: 350 to <750 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 400 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12771,7 +12771,7 @@ "Description": "Low Voltage Switchgear - Capacity: 750 to <1200 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 800 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12788,7 +12788,7 @@ "Description": "Low Voltage Switchgear - Capacity: 750 to <1200 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 800 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12801,7 +12801,7 @@ "Description": "Low Voltage Switchgear - Capacity: 750 to <1200 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 800 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12822,7 +12822,7 @@ "Description": "Low Voltage Switchgear - Capacity: 1200 to 2000 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 1600 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12839,7 +12839,7 @@ "Description": "Low Voltage Switchgear - Capacity: 1200 to 2000 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 1600 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12852,7 +12852,7 @@ "Description": "Low Voltage Switchgear - Capacity: 1200 to 2000 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 1600 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12873,7 +12873,7 @@ "Description": "Distribution Panel - Capacity: 100 to <350 Amp - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 225 Amp.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12886,7 +12886,7 @@ "Description": "Distribution Panel - Capacity: 350 to <750 Amp - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 400 Amp.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12899,7 +12899,7 @@ "Description": "Distribution Panel - Capacity: 750 to <1200 Amp - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 800 Amp.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12912,7 +12912,7 @@ "Description": "Distribution Panel - Capacity: 1200 to 2000 Amp - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 1600 Amp.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12925,7 +12925,7 @@ "Description": "Distribution Panel - Capacity: 100 to <350 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 225 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12942,7 +12942,7 @@ "Description": "Distribution Panel - Capacity: 100 to <350 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 225 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12955,7 +12955,7 @@ "Description": "Distribution Panel - Capacity: 100 to <350 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 225 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12976,7 +12976,7 @@ "Description": "Distribution Panel - Capacity: 350 to <750 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 400 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -12993,7 +12993,7 @@ "Description": "Distribution Panel - Capacity: 350 to <750 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 400 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13006,7 +13006,7 @@ "Description": "Distribution Panel - Capacity: 350 to <750 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 400 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13027,7 +13027,7 @@ "Description": "Distribution Panel - Capacity: 750 to <1200 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 800 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13044,7 +13044,7 @@ "Description": "Distribution Panel - Capacity: 750 to <1200 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 800 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13057,7 +13057,7 @@ "Description": "Distribution Panel - Capacity: 750 to <1200 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 800 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13078,7 +13078,7 @@ "Description": "Distribution Panel - Capacity: 1200 to 2000 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 1600 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13095,7 +13095,7 @@ "Description": "Distribution Panel - Capacity: 1200 to 2000 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 1600 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13108,7 +13108,7 @@ "Description": "Distribution Panel - Capacity: 1200 to 2000 Amp - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 1600 Amp.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13129,7 +13129,7 @@ "Description": "Battery Rack - Capacity: all - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13166,7 +13166,7 @@ "Description": "Battery Rack - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13183,7 +13183,7 @@ "Description": "Battery Rack - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13220,7 +13220,7 @@ "Description": "Battery Rack - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13249,7 +13249,7 @@ "Description": "Battery Charger - Capacity: all - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13266,7 +13266,7 @@ "Description": "Battery Charger - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13283,7 +13283,7 @@ "Description": "Battery Charger - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13300,7 +13300,7 @@ "Description": "Battery Charger - Capacity: all - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13325,7 +13325,7 @@ "Description": "Diesel generator - Capacity: 100 to <350 kVA - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 250 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13350,7 +13350,7 @@ "Description": "Diesel generator - Capacity: 350 to <750 kVA - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 500 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13375,7 +13375,7 @@ "Description": "Diesel generator - Capacity: 750 to 1200 kVA - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 1000 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13400,7 +13400,7 @@ "Description": "Diesel generator - Capacity: 1200 to 2000 kVa - Unanchored equipment that is not vibration isolated - Equipment fragility only", "Comments": "Costing is per unit and is based upon 1500 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Unanchored equipment that is not vibration isolated", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13425,7 +13425,7 @@ "Description": "Diesel generator - Capacity: 100 to <350 kVA - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 250 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13442,7 +13442,7 @@ "Description": "Diesel generator - Capacity: 100 to <350 kVA - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit and is based upon 250 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13467,7 +13467,7 @@ "Description": "Diesel generator - Capacity: 100 to <350 kVA - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 250 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13496,7 +13496,7 @@ "Description": "Diesel generator - Capacity: 350 to <750 kVA - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 500 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13513,7 +13513,7 @@ "Description": "Diesel generator - Capacity: 350 to <750 kVA - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit and is based upon 500 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13538,7 +13538,7 @@ "Description": "Diesel generator - Capacity: 350 to <750 kVA - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 500 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13567,7 +13567,7 @@ "Description": "Diesel generator - Capacity: 750 to 1200 kVA - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 1000 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13584,7 +13584,7 @@ "Description": "Diesel generator - Capacity: 750 to 1200 kVA - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit and is based upon 1000 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13609,7 +13609,7 @@ "Description": "Diesel generator - Capacity: 750 to 1200 kVA - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 1000 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13638,7 +13638,7 @@ "Description": "Diesel generator - Capacity: 1200 to 2000 kVa - Vibration isolated equipment that is not snubbed or restrained - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 1500 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13655,7 +13655,7 @@ "Description": "Diesel generator - Capacity: 1200 to 2000 kVa - Vibration isolated equipment that is not snubbed or restrained - Equipment fragility only", "Comments": "Costing is per unit and is based upon 1500 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13680,7 +13680,7 @@ "Description": "Diesel generator - Capacity: 1200 to 2000 kVa - Vibration isolated equipment that is not snubbed or restrained - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 1500 kVa.\nConstruction Quality: Normal - Not designed for seismic loads\nSeismic Installation Conditions: Vibration isolated equipment that is not snubbed or restrained\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13709,7 +13709,7 @@ "Description": "Diesel generator - Capacity: 100 to <350 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 250 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13726,7 +13726,7 @@ "Description": "Diesel generator - Capacity: 100 to <350 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 250 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13751,7 +13751,7 @@ "Description": "Diesel generator - Capacity: 100 to <350 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 250 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13780,7 +13780,7 @@ "Description": "Diesel generator - Capacity: 350 to <750 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 500 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13797,7 +13797,7 @@ "Description": "Diesel generator - Capacity: 350 to <750 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 500 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13822,7 +13822,7 @@ "Description": "Diesel generator - Capacity: 350 to <750 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 500 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13851,7 +13851,7 @@ "Description": "Diesel generator - Capacity: 750 to 1200 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 1000 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13868,7 +13868,7 @@ "Description": "Diesel generator - Capacity: 750 to 1200 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 1000 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13893,7 +13893,7 @@ "Description": "Diesel generator - Capacity: 750 to 1200 kVA - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 1000 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13922,7 +13922,7 @@ "Description": "Diesel generator - Capacity: 1200 to 2000 kVa - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Anchorage fragility only", "Comments": "Costing is per unit and is based upon 1500 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13939,7 +13939,7 @@ "Description": "Diesel generator - Capacity: 1200 to 2000 kVa - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Equipment fragility only", "Comments": "Costing is per unit and is based upon 1500 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13964,7 +13964,7 @@ "Description": "Diesel generator - Capacity: 1200 to 2000 kVa - Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints - Combined anchorage/isolator & equipment fragility", "Comments": "Costing is per unit and is based upon 1500 kVa.\nConstruction Quality: Normal - Designed for seismic loads but no special seismic certification\nSeismic Installation Conditions: Equipment that is either hard anchored or is vibration isolated with seismic snubbers/restraints\nNotes: User to provide median demand and dispersion values. The values listed are default PACT values and do not represent the response of this component.", "SuggestedComponentBlockSize": "1 EA", - "RoundUpToIntegerQuantity": "YES", + "RoundUpToIntegerQuantity": "True", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { @@ -13993,7 +13993,7 @@ "Description": "Storage racks designed and installed before 2007, big box retail (12' to 15' tall)", "Comments": "Standard pallet back to back storage rack. Three to five levels tall with total height from 15 to 20 ft. Costing assumes one single side access rack. Costing of rack and restocking based upon 50 LF of rack. Costing of rack contents to be furnished by user. \nConstruction Quality: Normal\nSeismic Installation Conditions: Varies", "SuggestedComponentBlockSize": "50 LF", - "RoundUpToIntegerQuantity": "NO", + "RoundUpToIntegerQuantity": "False", "ControllingDemand": "Damage Quantity", "DamageStates": { "DS1": { diff --git a/seismic/building/component/FEMA P-58 2nd Edition/fragility.csv b/src/dlml/data/seismic/building/component/FEMA P-58 2nd Edition/fragility.csv similarity index 100% rename from seismic/building/component/FEMA P-58 2nd Edition/fragility.csv rename to src/dlml/data/seismic/building/component/FEMA P-58 2nd Edition/fragility.csv diff --git a/seismic/building/component/FEMA P-58 2nd Edition/fragility.json b/src/dlml/data/seismic/building/component/FEMA P-58 2nd Edition/fragility.json similarity index 99% rename from seismic/building/component/FEMA P-58 2nd Edition/fragility.json rename to src/dlml/data/seismic/building/component/FEMA P-58 2nd Edition/fragility.json index aa9a8462..7e376dcd 100644 --- a/seismic/building/component/FEMA P-58 2nd Edition/fragility.json +++ b/src/dlml/data/seismic/building/component/FEMA P-58 2nd Edition/fragility.json @@ -1,7 +1,7 @@ { "_GeneralInformation": { "ShortName": "FEMA P-58 2nd Edition", - "Description": "The models in this dataset are based on the 2nd edition of FEMA P-58. Specifically, the parameters are parsed from the FEMAP-58_FragilityDatabase_v3.1.2.xls file that is published as part of Volume 3 of the methodology. A few obvious typos and errors have been fixed in that file; these adjustments are captured in the changelog at https://github.com/NHERI-SimCenter/DamageAndLossModelLibrary/blob/main/data_sources/FEMA_P58/changelog.txt . Simultaneous damage states have been replaced with equivalent Mutually exclusive damage states. Component classification is based on UNIFORMAT II as per NISTIR 6389.", + "Description": "The models in this dataset are based on the [2nd edition of FEMA P-58](https://femap58.atcouncil.org/). Specifically, the parameters are parsed from the FEMAP-58_FragilityDatabase_v3.1.2.xls file that is published as part of Volume 3 of the methodology. A few obvious typos and errors have been fixed in that file; these adjustments are captured in the [changelog](https://github.com/NHERI-SimCenter/DamageAndLossModelLibrary/blob/main/data_sources/FEMA_P58/changelog.txt). Simultaneous damage states have been replaced with equivalent Mutually exclusive damage states. Component classification is based on UNIFORMAT II as per NISTIR 6389.", "Version": "1.0", "ComponentGroups": { "B - Shell": { diff --git a/seismic/building/portfolio/Hazus v5.1/consequence_repair.csv b/src/dlml/data/seismic/building/portfolio/Hazus v5.1/consequence_repair.csv similarity index 100% rename from seismic/building/portfolio/Hazus v5.1/consequence_repair.csv rename to src/dlml/data/seismic/building/portfolio/Hazus v5.1/consequence_repair.csv diff --git a/seismic/building/portfolio/Hazus v5.1/consequence_repair.json b/src/dlml/data/seismic/building/portfolio/Hazus v5.1/consequence_repair.json similarity index 100% rename from seismic/building/portfolio/Hazus v5.1/consequence_repair.json rename to src/dlml/data/seismic/building/portfolio/Hazus v5.1/consequence_repair.json diff --git a/seismic/building/portfolio/Hazus v5.1/fragility.csv b/src/dlml/data/seismic/building/portfolio/Hazus v5.1/fragility.csv similarity index 100% rename from seismic/building/portfolio/Hazus v5.1/fragility.csv rename to src/dlml/data/seismic/building/portfolio/Hazus v5.1/fragility.csv diff --git a/seismic/building/portfolio/Hazus v5.1/fragility.json b/src/dlml/data/seismic/building/portfolio/Hazus v5.1/fragility.json similarity index 100% rename from seismic/building/portfolio/Hazus v5.1/fragility.json rename to src/dlml/data/seismic/building/portfolio/Hazus v5.1/fragility.json diff --git a/seismic/building/portfolio/Hazus v6.1/consequence_repair.csv b/src/dlml/data/seismic/building/portfolio/Hazus v6.1/consequence_repair.csv similarity index 100% rename from seismic/building/portfolio/Hazus v6.1/consequence_repair.csv rename to src/dlml/data/seismic/building/portfolio/Hazus v6.1/consequence_repair.csv diff --git a/seismic/building/portfolio/Hazus v6.1/consequence_repair.json b/src/dlml/data/seismic/building/portfolio/Hazus v6.1/consequence_repair.json similarity index 100% rename from seismic/building/portfolio/Hazus v6.1/consequence_repair.json rename to src/dlml/data/seismic/building/portfolio/Hazus v6.1/consequence_repair.json diff --git a/seismic/building/portfolio/Hazus v6.1/fragility.csv b/src/dlml/data/seismic/building/portfolio/Hazus v6.1/fragility.csv similarity index 100% rename from seismic/building/portfolio/Hazus v6.1/fragility.csv rename to src/dlml/data/seismic/building/portfolio/Hazus v6.1/fragility.csv diff --git a/seismic/building/portfolio/Hazus v6.1/fragility.json b/src/dlml/data/seismic/building/portfolio/Hazus v6.1/fragility.json similarity index 100% rename from seismic/building/portfolio/Hazus v6.1/fragility.json rename to src/dlml/data/seismic/building/portfolio/Hazus v6.1/fragility.json diff --git a/seismic/building/portfolio/Hazus v6.1/input_schema.json b/src/dlml/data/seismic/building/portfolio/Hazus v6.1/input_schema.json similarity index 98% rename from seismic/building/portfolio/Hazus v6.1/input_schema.json rename to src/dlml/data/seismic/building/portfolio/Hazus v6.1/input_schema.json index 63525d28..1e04edf3 100644 --- a/seismic/building/portfolio/Hazus v6.1/input_schema.json +++ b/src/dlml/data/seismic/building/portfolio/Hazus v6.1/input_schema.json @@ -128,7 +128,8 @@ "GroundFailure":{ "const": true } - } + }, + "required": ["GroundFailure"] }, "then": { "required": ["FoundationType"] diff --git a/seismic/building/portfolio/Hazus v6.1/pelicun_config.py b/src/dlml/data/seismic/building/portfolio/Hazus v6.1/pelicun_config.py similarity index 100% rename from seismic/building/portfolio/Hazus v6.1/pelicun_config.py rename to src/dlml/data/seismic/building/portfolio/Hazus v6.1/pelicun_config.py diff --git a/seismic/building/subassembly/Hazus v5.1/consequence_repair.csv b/src/dlml/data/seismic/building/subassembly/Hazus v5.1/consequence_repair.csv similarity index 100% rename from seismic/building/subassembly/Hazus v5.1/consequence_repair.csv rename to src/dlml/data/seismic/building/subassembly/Hazus v5.1/consequence_repair.csv diff --git a/seismic/building/subassembly/Hazus v5.1/consequence_repair.json b/src/dlml/data/seismic/building/subassembly/Hazus v5.1/consequence_repair.json similarity index 100% rename from seismic/building/subassembly/Hazus v5.1/consequence_repair.json rename to src/dlml/data/seismic/building/subassembly/Hazus v5.1/consequence_repair.json diff --git a/seismic/building/subassembly/Hazus v5.1/fragility.csv b/src/dlml/data/seismic/building/subassembly/Hazus v5.1/fragility.csv similarity index 100% rename from seismic/building/subassembly/Hazus v5.1/fragility.csv rename to src/dlml/data/seismic/building/subassembly/Hazus v5.1/fragility.csv diff --git a/seismic/building/subassembly/Hazus v5.1/fragility.json b/src/dlml/data/seismic/building/subassembly/Hazus v5.1/fragility.json similarity index 100% rename from seismic/building/subassembly/Hazus v5.1/fragility.json rename to src/dlml/data/seismic/building/subassembly/Hazus v5.1/fragility.json diff --git a/seismic/building/subassembly/Hazus v5.1/pelicun_config.py b/src/dlml/data/seismic/building/subassembly/Hazus v5.1/pelicun_config.py similarity index 100% rename from seismic/building/subassembly/Hazus v5.1/pelicun_config.py rename to src/dlml/data/seismic/building/subassembly/Hazus v5.1/pelicun_config.py diff --git a/seismic/power_network/portfolio/Hazus v5.1/fragility.csv b/src/dlml/data/seismic/power_network/portfolio/Hazus v5.1/fragility.csv similarity index 100% rename from seismic/power_network/portfolio/Hazus v5.1/fragility.csv rename to src/dlml/data/seismic/power_network/portfolio/Hazus v5.1/fragility.csv diff --git a/seismic/power_network/portfolio/Hazus v5.1/fragility.json b/src/dlml/data/seismic/power_network/portfolio/Hazus v5.1/fragility.json similarity index 100% rename from seismic/power_network/portfolio/Hazus v5.1/fragility.json rename to src/dlml/data/seismic/power_network/portfolio/Hazus v5.1/fragility.json diff --git a/seismic/power_network/portfolio/Hazus v5.1/pelicun_config.py b/src/dlml/data/seismic/power_network/portfolio/Hazus v5.1/pelicun_config.py similarity index 100% rename from seismic/power_network/portfolio/Hazus v5.1/pelicun_config.py rename to src/dlml/data/seismic/power_network/portfolio/Hazus v5.1/pelicun_config.py diff --git a/seismic/transportation_network/portfolio/Hazus v5.1/consequence_repair.csv b/src/dlml/data/seismic/transportation_network/portfolio/Hazus v5.1/consequence_repair.csv similarity index 100% rename from seismic/transportation_network/portfolio/Hazus v5.1/consequence_repair.csv rename to src/dlml/data/seismic/transportation_network/portfolio/Hazus v5.1/consequence_repair.csv diff --git a/seismic/transportation_network/portfolio/Hazus v5.1/consequence_repair.json b/src/dlml/data/seismic/transportation_network/portfolio/Hazus v5.1/consequence_repair.json similarity index 100% rename from seismic/transportation_network/portfolio/Hazus v5.1/consequence_repair.json rename to src/dlml/data/seismic/transportation_network/portfolio/Hazus v5.1/consequence_repair.json diff --git a/seismic/transportation_network/portfolio/Hazus v5.1/fragility.csv b/src/dlml/data/seismic/transportation_network/portfolio/Hazus v5.1/fragility.csv similarity index 100% rename from seismic/transportation_network/portfolio/Hazus v5.1/fragility.csv rename to src/dlml/data/seismic/transportation_network/portfolio/Hazus v5.1/fragility.csv diff --git a/seismic/transportation_network/portfolio/Hazus v5.1/fragility.json b/src/dlml/data/seismic/transportation_network/portfolio/Hazus v5.1/fragility.json similarity index 100% rename from seismic/transportation_network/portfolio/Hazus v5.1/fragility.json rename to src/dlml/data/seismic/transportation_network/portfolio/Hazus v5.1/fragility.json diff --git a/seismic/transportation_network/portfolio/Hazus v5.1/pelicun_config.py b/src/dlml/data/seismic/transportation_network/portfolio/Hazus v5.1/pelicun_config.py similarity index 100% rename from seismic/transportation_network/portfolio/Hazus v5.1/pelicun_config.py rename to src/dlml/data/seismic/transportation_network/portfolio/Hazus v5.1/pelicun_config.py diff --git a/seismic/water_network/portfolio/Hazus v6.1/fragility.csv b/src/dlml/data/seismic/water_network/portfolio/Hazus v6.1/fragility.csv similarity index 100% rename from seismic/water_network/portfolio/Hazus v6.1/fragility.csv rename to src/dlml/data/seismic/water_network/portfolio/Hazus v6.1/fragility.csv diff --git a/seismic/water_network/portfolio/Hazus v6.1/pelicun_config.py b/src/dlml/data/seismic/water_network/portfolio/Hazus v6.1/pelicun_config.py similarity index 100% rename from seismic/water_network/portfolio/Hazus v6.1/pelicun_config.py rename to src/dlml/data/seismic/water_network/portfolio/Hazus v6.1/pelicun_config.py diff --git a/src/dlml/vocabulary.py b/src/dlml/vocabulary.py new file mode 100644 index 00000000..285ca65f --- /dev/null +++ b/src/dlml/vocabulary.py @@ -0,0 +1,85 @@ +""" +Canonical controlled vocabularies for the model parameters. + +These enumerations are the authoritative definition of the controlled +vocabularies that appear in the packaged model parameters: the demand types a +fragility or loss model may be conditioned on, and the statistical +distribution families a model parameter may use. They are owned here, in the +data library, so a single source of truth governs what the data may contain. + +The values mirror pelicun's current definitions -- ``EDP_to_demand_type`` in +``pelicun.base`` and the ``rv_class_map`` registry in ``pelicun.uq`` -- and +are intended to be imported from here by pelicun rather than redefined there. +""" + +from __future__ import annotations + +#: Mapping from a demand's full descriptive name to its short demand-type +#: code (e.g. ``'Peak Floor Acceleration' -> 'PFA'``). The keys are the +#: demand-type names a model's ``Demand``/``Type`` field may use; a spectral +#: name may additionally carry a ``|`` qualifier in the data, such as +#: ``'Spectral Acceleration|1.0'``. +EDP_to_demand_type: dict[str, str] = { # pelicun-compatible name + # Drifts + 'Story Drift Ratio': 'PID', + 'Peak Interstory Drift Ratio': 'PID', + 'Roof Drift Ratio': 'PRD', + 'Peak Roof Drift Ratio': 'PRD', + 'Damageable Wall Drift': 'DWD', + 'Racking Drift Ratio': 'RDR', + 'Mega Drift Ratio': 'PMD', + 'Residual Drift Ratio': 'RID', + 'Residual Interstory Drift Ratio': 'RID', + 'Peak Effective Drift Ratio': 'EDR', + # Floor response + 'Peak Floor Acceleration': 'PFA', + 'Peak Floor Velocity': 'PFV', + 'Peak Floor Displacement': 'PFD', + # Component response + 'Peak Link Rotation Angle': 'LR', + 'Peak Link Beam Chord Rotation': 'LBR', + # Wind Intensity + 'Peak Gust Wind Speed': 'PWS', + # Wind Demands + 'Peak Wind Force': 'PWF', + 'Peak Internal Force': 'PIF', + 'Peak Line Force': 'PLF', + 'Peak Wind Pressure': 'PWP', + # Inundation Intensity + 'Peak Inundation Height': 'PIH', + # Shaking Intensity + 'Peak Ground Acceleration': 'PGA', + 'Peak Ground Velocity': 'PGV', + 'Spectral Acceleration': 'SA', + 'Spectral Velocity': 'SV', + 'Spectral Displacement': 'SD', + 'Peak Spectral Acceleration': 'SA', + 'Peak Spectral Velocity': 'SV', + 'Peak Spectral Displacement': 'SD', + 'Permanent Ground Deformation': 'PGD', + # Placeholder for advanced calculations + 'One': 'ONE', +} + +#: The valid demand-type names (the keys of :data:`EDP_to_demand_type`). A +#: data value may append a ``|`` qualifier to one of these names. +DEMAND_TYPES: frozenset[str] = frozenset(EDP_to_demand_type) + +#: The statistical distribution families a model parameter may declare, from +#: pelicun's random-variable registry (``pelicun.uq.rv_class_map``). An absent +#: or empty family is treated as ``'deterministic'``. +DISTRIBUTION_FAMILIES: frozenset[str] = frozenset( + { + 'normal', + 'normal_std', + 'normal_cov', + 'lognormal', + 'uniform', + 'weibull', + 'multilinear_CDF', + 'empirical', + 'multinomial', + 'coupled_empirical', + 'deterministic', + } +) diff --git a/src/dlml/web/__init__.py b/src/dlml/web/__init__.py new file mode 100644 index 00000000..870d4b83 --- /dev/null +++ b/src/dlml/web/__init__.py @@ -0,0 +1,7 @@ +"""The dlml Streamlit web app -- the ``dlml explorer`` app. + +This subpackage is the packaged Streamlit application (entry point ``app.py``, +launched by ``dlml explorer``). It is intentionally excluded from the project's +ruff, mypy, codespell, and coverage gates (see ``pyproject.toml``); bringing it +up to dlml-core's standards is a tracked follow-up. +""" diff --git a/src/dlml/web/app.py b/src/dlml/web/app.py new file mode 100644 index 00000000..32a9d0b3 --- /dev/null +++ b/src/dlml/web/app.py @@ -0,0 +1,226 @@ +""" +app.py +------ +Entry point and landing page for the DLML Explorer — a primarily-text About +page modeled on a good project README. It explains what the library and this web +interface are, how it's run, and how to contribute, then sends people into the +Browse & Search tool (``pages/1_Browse_and_Search.py``) via a prominent call to +action and the top-bar navigation. +""" + +import streamlit as st + +# set_page_config must be the first Streamlit command of the run, before the +# other imports (which may render widgets) execute. +st.set_page_config( + page_title="DLML Explorer", + page_icon="📊", + layout="wide", +) + +from dlml.web.st_ui.branding import ( + render_contributors, + render_header, + render_top_bar, +) +from dlml.web.st_ui.sidebar import render_sidebar +from dlml.web.st_ui.theme import apply_theme + + +# ---------------- Header, nav & sidebar ---------------- +apply_theme() +render_sidebar() +render_top_bar() +render_header("DLML Explorer", subtitle="Damage and Loss Model Library") +st.caption( + "A growing, open library of standardized damage and loss models for " + "natural-hazards engineering." +) + +# ---------------- Call to action ---------------- +# The primary way into the tool — visible up front so first-time visitors don't +# have to discover the top-bar link on their own. +if st.button( + "🔍 Browse & Search the model library →", + type="primary", + key="cta_browse", +): + st.switch_page("pages/1_Browse_and_Search.py") + +# ---------------- What is the DLML Explorer? ---------------- +st.header("What is the DLML Explorer?") +st.markdown( + """ +NHERI SimCenter's **[Damage and Loss Model Library (DLML)](https://github.com/NHERI-SimCenter/DamageAndLossModelLibrary)** is a curated, +open-source, **version-controlled** library of damage and loss models — the +fragility and consequence data that power natural-hazard risk simulations. It +gathers models from established sources such as **FEMA P-58** and **Hazus**, +converts them into a single standardized format, and pairs every model with +**rich metadata and a reference to its source**, so any model can be traced +back to its origin. + +The **DLML Explorer** is the web interface to that library. It lets you browse +the data, compare models side by side, and pull exactly the component data your +project needs — without digging through raw CSV and JSON files by hand. + +The vision is a **living, community-driven library** for practicing engineers +and researchers alike: one that features the several primary datasets in use +today and keeps growing as the field advances. + """ +) + +# ---------------- Using the Explorer ---------------- +st.header("Using the Explorer") +st.markdown( + "Most people use the Explorer to **discover** the right models and then " + "**collect and download** them for a project." +) + +st.subheader("1. Discover models") +st.markdown( + "Use the **search** and the **browse tree** to find the models you care " + "about, then **compare fragility and consequence models** across components " + "— with interactive plots and full parameter tables — to choose what fits " + "your project." +) + +st.subheader("2. Get data for your project") +st.markdown( + "As you browse, **add models to your selection**, then **download them in " + "one bundle**. The data is directly compatible with " + "[Pelicun](https://github.com/NHERI-SimCenter/pelicun) — the SimCenter's " + "open-source damage-and-loss engine, which uses the DLML as its model " + "source — so you can run with it right away, or hand the CSVs to any other " + "tool." +) + +# ---------------- Governance & privacy ---------------- +st.header("Governance and privacy") +st.markdown( + """ +The DLML Explorer is **managed by the NHERI SimCenter**. Degenkolb Engineers +generously supported its development — but Degenkolb does not host or operate it. + +- **Your work stays yours.** No one — not even the SimCenter — monitors which + models you review or collects data on how you use the Explorer. +- **Metadata as published.** For large published datasets like FEMA P-58 and + Hazus, the technical notes and metadata are reproduced **as-is from the + original source** — the SimCenter does not edit, re-interpret, or add to them. +- **Traceable and reproducible.** Every model carries a reference to its source, + and the whole library is version-controlled — so an analysis can be tied to an + exact version of the data, for reproducibility and accountability. + """ +) + +# ---------------- More than FEMA P-58 ---------------- +st.header("More than FEMA P-58") +st.markdown( + """ +The library is **not limited to FEMA P-58**, and it is **hazard-agnostic** — it +already spans seismic and hurricane models. The **SimCenter Wind Component +Library** is a good template for what a purpose-built, well-referenced dataset +can look like, and a model for how the seismic side can grow. + +It is also built to extend. Vulnerability models from the +**[NIST Nonstructural Element Database](https://github.com/usnistgov/NED)** will join the library soon as +one such addition. And because the Explorer can +**run locally against your own data**, you can add your **private fragilities** +right alongside the public models and use the Explorer to display, discover, +and select from them. + """ +) + +# Wrapped in a keyed container so the theme can give the expander a little more +# room above it (see the .st-key-ril-block rule) without loosening the tree. +with st.container(key="ril-block"): + with st.expander("Run it locally — and add your own private models"): + st.markdown( + "All you need is " + "[Python 3.10 or newer](https://www.python.org/downloads/) " + "(3.12 recommended). Install the Explorer and launch it:" + ) + st.code( + "pip install simcenter-dlml[explorer]\ndlml explorer", + language="bash", + ) + st.markdown( + "It opens in your browser at the address Streamlit prints — typically " + "[http://localhost:8501](http://localhost:8501); press `Ctrl+C` in the " + "terminal to stop. Running locally, you can point the Explorer at your " + "own data and display, discover, and select from your private models " + "right alongside the public ones." + ) + +# ---------------- Contribute ---------------- +st.header("Contribute") +st.markdown( + """ +Do you have fragility or consequence models you'd like to see here? We'd +love your help building a growing library of **vetted, well-referenced** models, +and **we're glad to help you get them in** — reach out (see Contact below) and +join the conversation. We don't have a formal submission-and-vetting process +yet, and **making contributing easier is on our near-term roadmap**; for now +the plan is to collect new contributions in a dedicated dataset (for example, +**"FEMA P-58 ext"** for seismic component models), and give clear credit to the +contributors. + +**What we ask:** every model needs **at least one supporting reference** — a +publication or report that documents it — just as the SimCenter Wind Component +Library does. This is to keep the library trustworthy. + """ +) + +# ---------------- License ---------------- +st.header("License") +st.markdown( + """ +The DLML Explorer and the underlying Damage and Loss Model Library are +distributed under the **BSD 3-Clause License**. You are free to use the data +for any purpose, **including commercial use**. See the `LICENSE` file for the +full terms. + """ +) + +# ---------------- Acknowledgments ---------------- +st.header("Acknowledgments") +st.markdown( + """ +We gratefully acknowledge the generous in-kind contribution from Degenkolb +Engineers, which supported the development work on the DLML Explorer. This +material is based upon work supported by the U.S. National Science Foundation +under Grants No. 1612843 and No. 2131111. Any opinions, findings, conclusions, +or recommendations expressed in this material are those of the author(s) and do +not necessarily reflect the views of the U.S. National Science Foundation. + +We also wish to express our gratitude to colleagues at the NHERI SimCenter and +Degenkolb Engineers for their feedback and input. The insights shared by many +engineers and experts in the natural hazards engineering community were +instrumental in shaping the priorities for this work. In particular, +discussions with Dustin Cook (NIST), Curt Haselton (HBRisk), Jon Heintz +(Applied Technology Council), John Hooper (MKA), James Malley (Degenkolb), +Peter Morris (AECOM), and Robert Pekelnicky (Degenkolb) were especially +valuable. We also appreciate the collaboration with the NIST NED development +team. + """ +) + +# ---------------- Contact ---------------- +st.header("Contact") +st.markdown( + "Adam Zsarnoczay — NHERI SimCenter, Stanford University — " + "[adamzs@stanford.edu](mailto:adamzs@stanford.edu)" +) + +# ---------------- Developed by ---------------- +st.header("Developed by") +st.markdown( + """ +- **Tshajlij Lee** — Degenkolb Engineers +- **Hannah Thompson** — Degenkolb Engineers +- **Insung Kim** — Degenkolb Engineers +- **Adam Zsarnoczay** — NHERI SimCenter, Stanford University + """ +) + +# ---------------- Contributor logos ---------------- +render_contributors() diff --git a/src/dlml/web/assets/degenkolb.svg b/src/dlml/web/assets/degenkolb.svg new file mode 100644 index 00000000..3225e312 --- /dev/null +++ b/src/dlml/web/assets/degenkolb.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/dlml/web/assets/nsf_nheri_simcenter.png b/src/dlml/web/assets/nsf_nheri_simcenter.png new file mode 100644 index 00000000..6665064e Binary files /dev/null and b/src/dlml/web/assets/nsf_nheri_simcenter.png differ diff --git a/src/dlml/web/pages/1_Browse_and_Search.py b/src/dlml/web/pages/1_Browse_and_Search.py new file mode 100644 index 00000000..e41d694d --- /dev/null +++ b/src/dlml/web/pages/1_Browse_and_Search.py @@ -0,0 +1,25 @@ +""" +1_Browse_and_Search.py +---------------------- +The Browse & Search page — the interactive tool for finding, comparing, and +collecting damage and loss models. The About page (``app.py``) is the landing +page; this is reached from the top-bar navigation or the call-to-action there. +""" + +import streamlit as st + +# set_page_config must be the first Streamlit command of the run, before the +# sidebar (which renders widgets) executes. +st.set_page_config( + page_title="Browse & Search • DLML Explorer", + page_icon="📊", + layout="wide", +) + +from dlml.web.st_ui.theme import apply_theme +from dlml.web.st_ui.sidebar import render_sidebar +from dlml.web.st_ui.main_page import render_main_page + +apply_theme() +render_sidebar() +render_main_page() diff --git a/src/dlml/web/st_core/__init__.py b/src/dlml/web/st_core/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/dlml/web/st_core/component.py b/src/dlml/web/st_core/component.py new file mode 100644 index 00000000..e2467ccc --- /dev/null +++ b/src/dlml/web/st_core/component.py @@ -0,0 +1,1048 @@ +""" +component.py +------------ +Standalone display module for Level 5 component leaf nodes. + +Provides three public functions for rendering individual fragility-library +component records outside (or inside) the collapsible tree: + + render_component_leaf(comp_id, comp_data, json_path, *, key_prefix="") + Full seismic leaf: metadata, damage states, fragility curves, and + consequence curves. + + render_wind_component_leaf(comp_id, comp_data, json_path, *, key_prefix="") + Wind leaf: metadata, damage states, and fragility curve only + (SimCenter Wind library carries no consequence data). + + render_component_leaf_button(comp_id, comp_data, json_path, *, key_prefix="", hazard="seismic") + Drop-in wrapper that replicates the "Load details" session-state guard + used inside the tree, so the same lazy-loading pattern can be applied + when embedding a leaf anywhere in the app. + + render_added_components_list() + Render the list of all components the user has added via the + "Add component" button. Each entry is shown in a collapsible + expander using the appropriate detail renderer (seismic or wind), + with a "Remove" button to delete it from the list. + +Leaf detail renderers +--------------------- + _render_component_detail(comp_id, comp_data, json_path, *, key_prefix="") + Internal seismic detail panel — called by render_component_leaf. + + _render_wind_component_detail(comp_id, comp_data, json_path, *, key_prefix="") + Internal wind detail panel — called by render_wind_component_leaf. + +Usage +----- + from dlml.web.st_core.component import render_component_leaf, render_wind_component_leaf + from dlml.web.st_core.component import render_component_leaf_button + from dlml.web.st_core.component import render_added_components_list + + # Render a seismic component directly (no lazy-load gate): + render_component_leaf("B.10.31.001a", comp_data_dict, "/path/to/fragility.json") + + # Render with the lazy-load button guard (matches tree behaviour): + render_component_leaf_button( + "B.10.31.001a", comp_data_dict, "/path/to/fragility.json", + key_prefix="my_page_", hazard="seismic", + ) + + # Render the running list of added components (place anywhere on the page): + render_added_components_list() +""" + +from __future__ import annotations + +import html +import json +from typing import List, Optional + +import pandas as pd +import streamlit as st + +from dlml.web.st_visuals.figures import ( + make_consequence_figure, + make_fragility_figure, + make_loss_function_figure, +) +from dlml.web.st_visuals.helpers_visual import ( + load_consequence_df, + load_fragility_df, + load_full_json, +) +from dlml.web.st_core.downloads import render_download_section +from dlml.web.st_ui.theme import is_dark + +# Consequence type options shown in the selectbox +_C_TYPES: List[str] = ["Cost", "Time", "Carbon", "Energy"] + +# Session-state key for the added-components list +_ADDED_KEY = "added_components" + + +# ─── Session-state helpers ───────────────────────────────────────────────────── + +def _initialize_added_components_state() -> None: + """ + Ensure the added-components list exists in ``st.session_state``. + + Each entry is a dict with keys: + ``comp_id`` – component identifier string + ``comp_data`` – full component record dict + ``json_path`` – path to the source fragility.json + ``hazard`` – ``"seismic"`` or ``"wind"`` + """ + if _ADDED_KEY not in st.session_state: + st.session_state[_ADDED_KEY] = [] + + +def _is_component_added(comp_id: str, json_path: Optional[str] = None) -> bool: + """ + Return True if the record is already in the added-components list. + + The dedup key is ``(comp_id, json_path)`` so a consequence record and a + fragility component that share an ID (e.g. FEMA ``B.10.31.001`` in both + fragility.json and consequence_repair.json) are tracked independently. When + *json_path* is None, any entry matching *comp_id* counts. + """ + _initialize_added_components_state() + return any( + entry["comp_id"] == comp_id + and (json_path is None or entry.get("json_path") == json_path) + for entry in st.session_state[_ADDED_KEY] + ) + + +# ─── Public selection API ────────────────────────────────────────────────────── +# Shared so any surface (tree, search results, …) adds to the SAME session-state +# list the sidebar and downloads read from. + +def is_component_added(comp_id: str, json_path: Optional[str] = None) -> bool: + """Public: True if the record is already in the added-components list.""" + return _is_component_added(comp_id, json_path) + + +def add_component( + comp_id: str, + comp_data: dict, + json_path: str, + hazard: str, + kind: str = "fragility", +) -> bool: + """ + Add a record to the shared added-components list. + + Parameters + ---------- + comp_id, comp_data, json_path : see :func:`render_component_leaf`. + hazard : {"seismic", "wind"} + Used to pick the detail renderer for fragility records. Note this is + ``"wind"`` (not ``"hurricane"``) to match the existing list contract. + kind : {"fragility", "consequence"} + Which detail renderer the sidebar uses, and how downloads treat it. + Consequence records (e.g. Hazus occupancy classes) have no fragility row + but do contribute to consequence_repair.csv. + + Returns + ------- + bool + True if the record was added, False if it was already present. + """ + _initialize_added_components_state() + if _is_component_added(comp_id, json_path): + return False + st.session_state[_ADDED_KEY].append( + { + "comp_id": comp_id, + "comp_data": comp_data, + "json_path": json_path, + "hazard": hazard, + "kind": kind, + } + ) + return True + + +# ─── Internal: consequence tab ───────────────────────────────────────────────── + +def _render_consequence_tab( + comp_id: str, + json_path: str, + *, + key_prefix: str = "", +) -> None: + """ + Render the consequence-curves tab for a single component. + + Handles both consequence forms found in the library: the damage-state + ``consequence_repair`` model (seismic, Hazus hurricane "coupled") and the + continuous ``loss_repair`` loss function (Hazus hurricane "original"). Picks + the matching plot and falls back to an informational message when no data + exists. + + Parameters + ---------- + comp_id : str + Component identifier, e.g. ``"B.10.31.001a"``. + json_path : str + Path to the source JSON; used to locate the sibling consequence/loss + CSV in the same directory. + key_prefix : str, optional + Prepended to all widget keys to prevent collisions when the same + component is rendered more than once on the page. + """ + repair_df = load_consequence_df(json_path) + + if repair_df is None: + st.info( + "No consequence data file found for this source directory.", + icon="ℹ️", + ) + return + + lvl0 = repair_df.index.get_level_values(0) + if comp_id not in lvl0: + st.info( + f"No consequence records found for `{comp_id}` in the repair database.", + icon="ℹ️", + ) + return + + available_types = [t for t in _C_TYPES if t in repair_df.loc[comp_id].index] + + if not available_types: + st.info("No consequence types available for this component.", icon="ℹ️") + return + + # Continuous loss function (loss_repair) vs damage-state consequence model. + is_loss = any( + "LossFunction" in str(c) for c in repair_df.columns.get_level_values(0) + ) + + c_type = st.radio( + "Consequence type", + options=available_types, + horizontal=True, + key=f"{key_prefix}cons_type_{comp_id}", + ) + + figure = ( + make_loss_function_figure(comp_id, c_type, json_path, dark=is_dark()) + if is_loss + else make_consequence_figure(comp_id, c_type, json_path, dark=is_dark()) + ) + st.plotly_chart( + figure, + use_container_width=True, + # theme=None so Plotly honors the figure's own template (plotly_white / + # plotly_dark); "streamlit" would re-skin it with the light config theme. + theme=None, + key=f"{key_prefix}cons_{comp_id}_{c_type}", + ) + if is_loss: + st.caption( + "Continuous loss function — repair-cost loss ratio vs. peak gust " + "wind speed (Hazus hurricane)." + ) + + +# ─── Internal: add-component button ─────────────────────────────────────────── + +def _render_add_button( + comp_id: str, + comp_data: dict, + json_path: str, + hazard: str, + *, + key_prefix: str = "", + kind: str = "fragility", +) -> None: + """ + Render the "Add component" button at the bottom of a detail panel. + + If the record is already in the added list the button is replaced by a + muted caption so the user has clear feedback without a disabled widget. + + Parameters + ---------- + comp_id : str + Component identifier. + comp_data : dict + Full record from ``fragility.json`` or ``consequence_repair.json``. + json_path : str + Path to the source JSON (also the dedup key alongside *comp_id*). + hazard : {"seismic", "wind"} + Hazard type (picks the fragility detail renderer in the list). + key_prefix : str, optional + Prepended to the button widget key to prevent collisions. + kind : {"fragility", "consequence"} + Record kind, forwarded to :func:`add_component`. + """ + _initialize_added_components_state() + + if _is_component_added(comp_id, json_path): + st.caption(f"✅ `{comp_id}` is already in your selection.") + else: + if st.button( + "➕ Add model to selection", + key=f"{key_prefix}add_btn_{comp_id}", + type="primary", + help="Add this record to the page list for side-by-side review and download.", + ): + add_component(comp_id, comp_data, json_path, hazard, kind=kind) + st.rerun() + + +def _render_remove_button( + comp_id: str, list_index: int, *, key_prefix: str = "" +) -> None: + """ + Render the "Remove from selection" button. + + Shown in the header action slot (where the Add button sits in Browse & + Search) when a panel is rendered inside the selection list. ``list_index`` + is the slot to drop; it is bounds-checked in case the list changed between + reruns. + """ + _initialize_added_components_state() + if st.button( + "🗑️ Remove from selection", + key=f"{key_prefix}remove_btn_{comp_id}", + type="secondary", + help="Remove this model from your selection.", + ): + entries: list = st.session_state[_ADDED_KEY] + if 0 <= list_index < len(entries): + entries.pop(list_index) + st.rerun() + + +# ─── Internal: fragility chart + consequence availability ───────────────────── + +def _has_consequence_data(comp_id: str, json_path: str) -> bool: + """ + True if the source's consequence_repair.csv has a record for *comp_id*. + + Hazus sources key repair consequences by occupancy class (RES1, COM1, …) + rather than by fragility component, so their components have no + per-component consequence curve — in that case the Consequence tab is + omitted instead of showing an empty "no records" message. + """ + repair_df = load_consequence_df(json_path) + if repair_df is None: + return False + return comp_id in repair_df.index.get_level_values(0) + + +def _render_fragility_chart( + comp_id: str, + json_path: str, + limit_states: dict, + *, + key_prefix: str = "", +) -> None: + """Render the fragility-curve plot for a single component.""" + frag_df = load_fragility_df(json_path) + if frag_df is not None and comp_id in frag_df.index: + csv_row = frag_df.loc[comp_id] + csv_row_flat = { + f"{a}-{b}" if b else str(a): v + for (a, b), v in csv_row.items() + } + st.plotly_chart( + make_fragility_figure( + comp_id, + json.dumps(limit_states), + json.dumps(csv_row_flat, default=str), + dark=is_dark(), + ), + use_container_width=True, + theme=None, + key=f"{key_prefix}frag_{comp_id}", + ) + else: + st.info("No fragility data available to generate curves.", icon="ℹ️") + + +# ─── Internal: raw-data table ───────────────────────────────────────────────── + +def _render_fragility_characteristics(full: pd.DataFrame) -> None: + """Show demand + completeness characteristics above the limit-state table.""" + if "Demand" in full.index: + demand = full.loc["Demand"] + dtype = demand.get("Type") + if dtype is not None and pd.notna(dtype): + unit = demand.get("Unit") + suffix = ( + f" [{unit}]" + if unit is not None and pd.notna(unit) and str(unit) != "unitless" + else "" + ) + st.caption(f"**Demand type:** {dtype}{suffix}") + directional = demand.get("Directional") + if directional is not None and pd.notna(directional): + label = "Directional" if float(directional) else "Non-directional" + st.caption(f"**Directionality:** {label}") + offset = demand.get("Offset") + if ( + offset is not None + and pd.notna(offset) + and str(offset) not in ("0", "0.0") + ): + st.caption(f"**Demand offset:** {offset}") + if "Incomplete" in full.index: + incomplete = full.loc["Incomplete"].dropna() + if len(incomplete) and str(incomplete.iloc[0]) in ("1", "1.0"): + st.caption("⚠️ **Incomplete:** some model parameters are missing.") + + +def _render_param_table(frame: pd.DataFrame) -> None: + """ + Render a small parameter table as themed HTML instead of ``st.dataframe``. + + ``st.dataframe`` renders to a canvas that (a) sizes each column to its + *cell* contents, so longer headers like "Incomplete"/"Quantity" clip, and + (b) cannot follow our CSS dark-mode overlay, so it stays white. A plain HTML + table sizes columns to fit the header too, renders MultiIndex columns as a + grouped two-row header, and inherits the theme variables (transparent fill, + light text in dark mode). It is wrapped in a horizontally scrollable card so + a wide table stays inside its panel. + """ + html_table = frame.to_html(border=0, na_rep="", classes="dlml-table") + st.markdown( + f"
{html_table}
", + unsafe_allow_html=True, + ) + + +def _render_data_table( + comp_id: str, + json_path: str, + *, + key_prefix: str = "", +) -> None: + """ + Render the underlying model parameters for a component as tables. + + Shows whichever data exist for the record: + * **Fragility parameters** — the distribution parameters per limit state + (Theta_0, Theta_1, Family, …), pivoted to one row per level. + * **Consequence parameters** — the repair model parameters per consequence + type (Cost / Time / …), as stored in the consequence CSV. + + Used as the "Data table" tab in the detail panels. Each dataframe gets a + ``key_prefix``-scoped key so the same component can render in more than one + place (tree + added-list) without duplicate-element-id collisions. + """ + shown = False + + frag_df = load_fragility_df(json_path) + if frag_df is not None and comp_id in frag_df.index: + _section_label("Fragility parameters") + # Series indexed by (level, parameter) → rows = level, cols = parameter. + try: + full = frag_df.loc[comp_id].unstack() + except Exception: + full = None + if full is not None: + _render_fragility_characteristics(full) + # Keep only limit states that carry parameters, and drop the + # demand-only (all-empty) columns, leaving a clean + # limit-state × parameter grid. + ls_rows = [lvl for lvl in full.index if str(lvl).startswith("LS")] + defined = [ls for ls in ls_rows if full.loc[ls].notna().any()] + if defined: + _render_param_table(full.loc[defined].dropna(axis=1, how="all")) + else: + _render_param_table(frag_df.loc[[comp_id]]) + shown = True + + repair_df = load_consequence_df(json_path) + if repair_df is not None and comp_id in repair_df.index.get_level_values(0): + _section_label("Consequence parameters") + # Drop damage states with no data so undefined DS columns don't appear. + _render_param_table(repair_df.loc[comp_id].dropna(axis=1, how="all")) + shown = True + + if not shown: + st.info( + "No tabular parameter data available for this component.", + icon="ℹ️", + ) + + +# ─── Shared panel header (metadata + notes + add button + references) ───────── + +def _load_references(json_path: str) -> dict: + """Return the ``{reference_id: citation text}`` map from the source JSON.""" + try: + return load_full_json(json_path).get("References", {}) or {} + except Exception: # noqa: BLE001 -- references are best-effort, never fatal + return {} + + +def _section_label(text: str) -> None: + """ + Render a bold section label with a little more air than the base gap. + + Uses the ``dlml-section-label`` class (see :mod:`dlml.web.st_ui.theme`) so + labels like "Model metadata" and "Damage states" read as headers instead of + crowding the content directly beneath them. + """ + st.markdown( + f"", + unsafe_allow_html=True, + ) + + +def _render_panel_header( + comp_id: str, + comp_data: dict, + json_path: str, + *, + hazard: str, + key_prefix: str, + kind: str = "fragility", + list_index: int | None = None, +) -> None: + """ + Render the shared top of a model detail panel. + + Consistent across the seismic, wind, and consequence panels: a **Model + metadata** heading, the full-width description, a row pairing the + technical-notes expander (wide, left) with an action button (far right), + and a collapsible **References** section that resolves each reference ID to + its full citation text. + + The far-right action depends on context: in Browse & Search it is the + "Add model to selection" button; when the panel is shown inside the + selection list (``list_index`` given, the slot to drop on removal) it is a + "Remove from selection" button instead — so the list never shows the + "already in your selection" note, which makes no sense there. + """ + description = comp_data.get("Description", "") + comments = comp_data.get("Comments", "") + references = comp_data.get("Reference", []) or [] + + _section_label("Model metadata") + if description: + st.markdown( + f"
{html.escape(description)}
", + unsafe_allow_html=True, + ) + + # Technical notes (wide, collapsible) share a row with the add button (far + # right): collapsed, they line up; expanded, the notes just grow taller. + notes_col, btn_col = st.columns([3, 1], gap="medium") + with notes_col: + if comments: + with st.expander( + "**Technical notes**", + expanded=False, + key=f"{key_prefix}notes_{comp_id}", + ): + st.caption(comments) + else: + st.caption("_No technical notes for this model._") + with btn_col: + if list_index is not None: + _render_remove_button(comp_id, list_index, key_prefix=key_prefix) + else: + _render_add_button( + comp_id, + comp_data, + json_path, + hazard=hazard, + key_prefix=key_prefix, + kind=kind, + ) + + if references: + ref_map = _load_references(json_path) + with st.expander( + f"**References ({len(references)})**", + expanded=False, + key=f"{key_prefix}refs_{comp_id}", + ): + for i, ref_id in enumerate(references, start=1): + st.caption(f"{i}. {ref_map.get(ref_id, ref_id)}") + + st.divider() + + +# ─── Internal: seismic detail panel ─────────────────────────────────────────── + +def _render_component_detail( + comp_id: str, + comp_data: dict, + json_path: str, + *, + key_prefix: str = "", + list_index: int | None = None, +) -> None: + """ + Render the full inline detail panel for a seismic component leaf. + + Displays a two-column layout: + * Left — component metadata (ID, block size, integer-qty flag) and an + expandable list of damage states with repair actions. + * Right — "Add component" button, optional technical-notes expander, + then tabbed charts: *Fragility curves* and *Consequence curves*. + + Parameters + ---------- + comp_id : str + Component identifier, e.g. ``"B.10.31.001a"``. + comp_data : dict + Full component record loaded from ``fragility.json``. + json_path : str + Path to the source ``fragility.json``. + key_prefix : str, optional + Prepended to all widget keys and expander labels to prevent collisions + when the same component is rendered more than once on the page (e.g. + simultaneously in the tree and in the added-components list). + """ + block_size = comp_data.get("SuggestedComponentBlockSize", "") + round_up = comp_data.get("RoundUpToIntegerQuantity", "") + limit_states: dict = comp_data.get("LimitStates", {}) + + _render_panel_header( + comp_id, + comp_data, + json_path, + hazard="seismic", + key_prefix=key_prefix, + list_index=list_index, + ) + + col_left, col_right = st.columns([1, 2], gap="medium") + + # ── Left: metadata rows + damage states ─────────────────────────────── + with col_left: + for label, value in [ + ("ID", f"`{comp_id}`"), + ("Block size", f"`{block_size}`" if block_size else "—"), + ("Integer qty", round_up if round_up else "—"), + ]: + c1, c2 = st.columns([1, 1]) + c1.caption(label) + c2.caption(value) + + _section_label("Damage states") + + total_ds = sum(len(ds_dict) for ds_dict in limit_states.values()) + if total_ds: + for ls_key, ls_data in limit_states.items(): + for ds_key, ds_data in ls_data.items(): + desc_text = ( + ds_data.get("Description", "No description.") + if isinstance(ds_data, dict) + else str(ds_data) + ) + # key_prefix goes in the key (not the label) so the same + # component can render twice on the page without a collision. + with st.expander( + f"{ls_key} / {ds_key}", + expanded=False, + key=f"{key_prefix}ds_{comp_id}_{ls_key}_{ds_key}", + ): + st.caption(desc_text) + if isinstance(ds_data, dict) and ds_data.get("RepairAction"): + st.caption( + f"**Repair action:** {ds_data['RepairAction']}" + ) + else: + st.caption("No limit-state data found.") + + # ── Right: charts ───────────────────────────────────────────────────── + with col_right: + # Only show the Consequence tab when this component actually has + # consequence records. Hazus sources key consequences by occupancy + # class, not by component, so the tab is omitted there (rather than + # showing a confusing "no records found" message). + if _has_consequence_data(comp_id, json_path): + tab_frag, tab_cons, tab_data = st.tabs( + ["Fragility curves", "Consequence curves", "Data table"] + ) + with tab_frag: + _render_fragility_chart( + comp_id, json_path, limit_states, key_prefix=key_prefix + ) + with tab_cons: + _render_consequence_tab(comp_id, json_path, key_prefix=key_prefix) + with tab_data: + _render_data_table(comp_id, json_path, key_prefix=key_prefix) + else: + tab_frag, tab_data = st.tabs(["Fragility curves", "Data table"]) + with tab_frag: + _render_fragility_chart( + comp_id, json_path, limit_states, key_prefix=key_prefix + ) + st.caption( + "No component-level consequence (repair) curves are " + "available for this component in this source." + ) + with tab_data: + _render_data_table(comp_id, json_path, key_prefix=key_prefix) + + +# ─── Internal: wind detail panel ────────────────────────────────────────────── + +def _render_wind_component_detail( + comp_id: str, + comp_data: dict, + json_path: str, + *, + key_prefix: str = "", + list_index: int | None = None, +) -> None: + """ + Render the inline detail panel for a wind library component leaf. + + Mirrors ``_render_component_detail`` but omits the consequence tab because + the SimCenter Wind Component Library carries no consequence data. + + Parameters + ---------- + comp_id : str + Component identifier, e.g. ``"DOOR.garage.001a"``. + comp_data : dict + Full component record from ``fragility.json``. + json_path : str + Path to the source ``fragility.json``. + key_prefix : str, optional + Prepended to all widget keys and expander labels to prevent collisions + when the same component is rendered more than once on the page. + """ + block_size: str = comp_data.get("SuggestedComponentBlockSize", "") + limit_states: dict = comp_data.get("LimitStates", {}) + + _render_panel_header( + comp_id, + comp_data, + json_path, + hazard="wind", + key_prefix=key_prefix, + list_index=list_index, + ) + + col_left, col_right = st.columns([1, 2], gap="medium") + + # ── Left: metadata rows + damage states ─────────────────────────────── + with col_left: + c1, c2 = st.columns([1, 1]) + c1.caption("Block size") + c2.caption(f"`{block_size}`" if block_size else "—") + + if limit_states: + _section_label("Damage states") + for ls_key, ls_data in limit_states.items(): + if not isinstance(ls_data, dict): + continue + for ds_key, ds_data in ls_data.items(): + desc_text = ( + ds_data.get("Description", "") + if isinstance(ds_data, dict) + else str(ds_data) + ) + with st.expander( + f"{ls_key} / {ds_key}", + expanded=False, + key=f"{key_prefix}ds_{comp_id}_{ls_key}_{ds_key}", + ): + st.caption(desc_text) + else: + st.caption("No limit-state data found.") + + # ── Right: fragility chart ──────────────────────────────────────────── + with col_right: + tab_frag, tab_data = st.tabs(["Fragility curves", "Data table"]) + with tab_frag: + frag_df = load_fragility_df(json_path) + if frag_df is not None and comp_id in frag_df.index: + csv_row = frag_df.loc[comp_id] + csv_row_flat = { + f"{a}-{b}" if b else str(a): v + for (a, b), v in csv_row.items() + } + st.plotly_chart( + make_fragility_figure( + comp_id, + json.dumps(limit_states), + json.dumps(csv_row_flat, default=str), + dark=is_dark(), + ), + use_container_width=True, + theme=None, + key=f"{key_prefix}wind_frag_{comp_id}", + ) + else: + st.info( + "No fragility data available to generate curves.", icon="ℹ️" + ) + with tab_data: + _render_data_table(comp_id, json_path, key_prefix=key_prefix) + + +# ─── Public API ──────────────────────────────────────────────────────────────── + +def render_component_leaf( + comp_id: str, + comp_data: dict, + json_path: str, + *, + key_prefix: str = "", +) -> None: + """ + Render the full detail panel for a seismic component leaf node. + + Parameters + ---------- + comp_id : str + Component identifier, e.g. ``"B.10.31.001a"``. + comp_data : dict + Full component record from ``fragility.json``. + json_path : str + Absolute path to the source ``fragility.json``. + key_prefix : str, optional + Prepended to all Streamlit widget keys to prevent key collisions when + multiple leaves are rendered on the same page. + """ + _render_component_detail(comp_id, comp_data, json_path, key_prefix=key_prefix) + + +def render_wind_component_leaf( + comp_id: str, + comp_data: dict, + json_path: str, + *, + key_prefix: str = "", +) -> None: + """ + Render the detail panel for a wind / hurricane component leaf node. + + Parameters + ---------- + comp_id : str + Component identifier, e.g. ``"DOOR.garage.001a"``. + comp_data : dict + Full component record from ``fragility.json``. + json_path : str + Absolute path to the source ``fragility.json``. + key_prefix : str, optional + Prepended to all Streamlit widget keys to prevent key collisions. + """ + _render_wind_component_detail(comp_id, comp_data, json_path, key_prefix=key_prefix) + + +def render_consequence_leaf( + comp_id: str, + comp_data: dict, + json_path: str, + *, + key_prefix: str = "", + list_index: int | None = None, +) -> None: + """ + Render the detail panel for a consequence_repair leaf node. + + Consequence records are keyed by component (FEMA P-58) or by occupancy class + (Hazus, e.g. ``STR.RES1``). Shows metadata and damage states on the left and + the repair-consequence curves (Cost / Time / …) on the right, with an "Add" + button so the record can be included in the consequence_repair.csv download. + + Parameters + ---------- + comp_id : str + Consequence identifier, e.g. ``"STR.RES1"`` or ``"B.10.31.001"``. + comp_data : dict + Full record from ``consequence_repair.json``. + json_path : str + Path to the source ``consequence_repair.json`` (its sibling + ``consequence_repair.csv`` supplies the curves). + key_prefix : str, optional + Prepended to widget keys to prevent collisions. + """ + block_size = comp_data.get("SuggestedComponentBlockSize", "") + damage_states: dict = comp_data.get("DamageStates", {}) + + _render_panel_header( + comp_id, + comp_data, + json_path, + hazard="seismic", + key_prefix=key_prefix, + kind="consequence", + list_index=list_index, + ) + + col_left, col_right = st.columns([1, 2], gap="medium") + + # ── Left: metadata rows + damage states ─────────────────────────────── + with col_left: + for label, value in [ + ("ID", f"`{comp_id}`"), + ("Block size", f"`{block_size}`" if block_size else "—"), + ]: + c1, c2 = st.columns([1, 1]) + c1.caption(label) + c2.caption(value) + + _section_label("Damage states") + + if damage_states: + for ds_key, ds_data in damage_states.items(): + desc_text = ( + ds_data.get("Description", "No description.") + if isinstance(ds_data, dict) + else str(ds_data) + ) + with st.expander( + f"{ds_key}", + expanded=False, + key=f"{key_prefix}ds_{comp_id}_{ds_key}", + ): + st.caption(desc_text) + else: + st.caption("No damage-state data found.") + + # ── Right: consequence curves ───────────────────────────────────────── + with col_right: + tab_cons, tab_data = st.tabs(["Consequence curves", "Data table"]) + with tab_cons: + _render_consequence_tab(comp_id, json_path, key_prefix=key_prefix) + with tab_data: + _render_data_table(comp_id, json_path, key_prefix=key_prefix) + + +def render_component_leaf_button( + comp_id: str, + comp_data: dict, + json_path: str, + *, + key_prefix: str = "", + hazard: str = "seismic", +) -> None: + """ + Render a component leaf with the lazy-load button guard from the tree. + + Parameters + ---------- + comp_id : str + Component identifier. + comp_data : dict + Full component record from ``fragility.json``. + json_path : str + Absolute path to the source ``fragility.json``. + key_prefix : str, optional + Prepended to session-state and widget keys for collision-free use on + multi-component pages. + hazard : {"seismic", "wind"}, optional + Which detail renderer to call once loaded. Defaults to ``"seismic"``. + """ + load_key = f"{key_prefix}loaded_{comp_id}" + btn_key = f"{key_prefix}btn_{comp_id}" + + if load_key not in st.session_state: + if st.button("Load details", key=btn_key, type="secondary"): + st.session_state[load_key] = True + st.rerun() + elif comp_data: + if hazard == "wind": + _render_wind_component_detail( + comp_id, comp_data, json_path, key_prefix=key_prefix + ) + else: + _render_component_detail( + comp_id, comp_data, json_path, key_prefix=key_prefix + ) + else: + st.warning( + f"Full data for `{comp_id}` was not found in the source file.", + icon="⚠️", + ) + + +def render_added_components_list() -> None: + """ + Render the list of components added via the "Add component" button. + + Each component is shown in a collapsible expander whose header contains + the component ID and a short description preview. The appropriate detail + renderer is called with a unique ``key_prefix`` derived from the slot + index so that widget keys never collide — even if the same component + appears in both the tree and this list simultaneously. + + The detail panel's header action slot shows a **🗑️ Remove from selection** + button here (via ``list_index``), where Browse & Search shows the Add + button. A **🗑️ Clear all** button and the download tools sit below the + list; if the list is empty, an info message is shown instead. + + Usage + ----- + from dlml.web.st_core.component import render_added_components_list + render_added_components_list() + """ + _initialize_added_components_state() + entries: list = st.session_state[_ADDED_KEY] + + if not entries: + st.info( + "No models selected yet. Open **Browse & Search**, find a model, " + "and use its **➕ Add model to selection** button.", + icon="📋", + ) + return + + st.caption( + f"**{len(entries)}** model{'s' if len(entries) != 1 else ''} selected" + ) + + for idx, entry in enumerate(entries): + comp_id: str = entry["comp_id"] + comp_data: dict = entry["comp_data"] + json_path: str = entry["json_path"] + hazard: str = entry["hazard"] + kind: str = entry.get("kind", "fragility") + + # Unique prefix per list slot — prevents any key collision with the + # tree or with other slots that happen to share the same comp_id. + slot_prefix = f"list{idx}_" + + raw_desc: str = comp_data.get("Description", "") + preview = raw_desc[:80] + "…" if len(raw_desc) > 80 else raw_desc + badge = "🧾" if kind == "consequence" else ("🌀" if hazard == "wind" else "〰️") + + with st.expander( + f"{badge} **{comp_id}** · {preview}", + expanded=False, + ): + # Full detail panel, keyed per slot. `list_index` swaps the header's + # Add button for a "Remove from selection" button scoped to this slot. + if kind == "consequence": + render_consequence_leaf( + comp_id, comp_data, json_path, + key_prefix=slot_prefix, list_index=idx, + ) + elif hazard == "wind": + _render_wind_component_detail( + comp_id, comp_data, json_path, + key_prefix=slot_prefix, list_index=idx, + ) + else: + _render_component_detail( + comp_id, comp_data, json_path, + key_prefix=slot_prefix, list_index=idx, + ) + + st.divider() + if st.button( + "🗑️ Clear all", + key="added_components_clear_all", + type="secondary", + ): + st.session_state[_ADDED_KEY].clear() + st.rerun() + + render_download_section() \ No newline at end of file diff --git a/src/dlml/web/st_core/downloads.py b/src/dlml/web/st_core/downloads.py new file mode 100644 index 00000000..05a694bf --- /dev/null +++ b/src/dlml/web/st_core/downloads.py @@ -0,0 +1,304 @@ +""" +downloads.py +------------ +Manages functions that let the user download data from their selected +components. + +Public functions +---------------- + get_component_quantity_csv() -> bytes + Build and return a component_quantity CSV for the user's current + added-components list. The ID column is populated from session + state; all other columns are left blank (to be implemented). + + get_fragility_csv() -> bytes + Build and return a fragility CSV filtered to the added components, + preserving the exact column layout of each source fragility.csv. + + get_consequence_csv() -> bytes + Build and return a consequence_repair CSV filtered to the added + components (all consequence types: Cost, Time, Carbon, Energy), + preserving the exact column layout of each source CSV. + + render_download_section() + Render the download checklist and a single button (CSV, or a zip when + several files are selected) for the user's current selection. + +Usage +----- + from dlml.web.st_core.downloads import render_download_section + + render_download_section() +""" + +from __future__ import annotations + +import io +import zipfile +from collections import defaultdict +from pathlib import Path +from typing import Callable, Optional + +import pandas as pd +import streamlit as st + +# Session-state key used by component.py for the added-components list. +_ADDED_KEY = "added_components" + +# Columns matching the component_quantity.csv format. +_COMPONENT_QUANTITY_COLUMNS = [ + "ID", + "Units", + "Location", + "Direction", + "Theta_0", + "Blocks", + "Family", + "Theta_1", + "Comment", +] + + +# ─── Internal helpers ────────────────────────────────────────────────────────── + +def _df_to_csv_bytes(df: pd.DataFrame) -> bytes: + """Serialise a DataFrame to UTF-8-encoded CSV bytes.""" + buffer = io.StringIO() + df.to_csv(buffer, index=False) + return buffer.getvalue().encode("utf-8") + + +def _group_entries_by_json_path(entries: list) -> dict[str, list[str]]: + """ + Group added-component IDs by their source ``json_path``. + + Returns a mapping of ``{json_path: [comp_id, ...]}``. Components that + share the same library directory are batched together so each CSV file + is opened only once. + """ + groups: dict[str, list[str]] = defaultdict(list) + for entry in entries: + groups[entry["json_path"]].append(entry["comp_id"]) + return dict(groups) + + +@st.cache_data(show_spinner=False) +def _load_raw_csv(csv_path: str) -> Optional[pd.DataFrame]: + """ + Load a CSV from *csv_path* with ``ID`` as a plain string column. + + Results are cached by Streamlit so each file is read from disk at most + once per session. Returns ``None`` if the file does not exist or cannot + be parsed. + """ + p = Path(csv_path) + if not p.exists(): + return None + try: + return pd.read_csv(p, dtype=str) + except Exception: + return None + + +# ─── Data builders ───────────────────────────────────────────────────────────── + +def get_component_quantity_csv() -> bytes: + """ + Build a component_quantity CSV for the current added-components list. + + Only the ``ID`` column is populated; all other columns are left blank. + The returned bytes are suitable for use directly with + ``st.download_button``. + + Returns + ------- + bytes + UTF-8-encoded CSV content. + """ + entries: list = st.session_state.get(_ADDED_KEY, []) + ids = [entry["comp_id"] for entry in entries] + + df = pd.DataFrame(columns=_COMPONENT_QUANTITY_COLUMNS) + df["ID"] = ids + + return _df_to_csv_bytes(df) + + +def get_fragility_csv() -> bytes: + """ + Build a fragility CSV filtered to the current added-components list. + + For each unique source library (identified by ``json_path``), the + sibling ``fragility.csv`` is loaded and rows matching the selected + component IDs are extracted. All matched rows are concatenated and + returned, preserving the original column layout of the source files. + + Components whose IDs are not found in their source file are silently + skipped. + + Returns + ------- + bytes + UTF-8-encoded CSV content, or an empty CSV if no data is found. + """ + entries: list = st.session_state.get(_ADDED_KEY, []) + groups = _group_entries_by_json_path(entries) + + frames: list[pd.DataFrame] = [] + for json_path, comp_ids in groups.items(): + csv_path = str(Path(json_path).parent / "fragility.csv") + df = _load_raw_csv(csv_path) + if df is None: + continue + matched = df[df["ID"].isin(comp_ids)] + if not matched.empty: + frames.append(matched) + + if not frames: + # Return an empty CSV with just the header from the first available + # source, or a minimal stub if none could be loaded. + for json_path in groups: + csv_path = str(Path(json_path).parent / "fragility.csv") + df = _load_raw_csv(csv_path) + if df is not None: + return _df_to_csv_bytes(df.iloc[0:0]) + return _df_to_csv_bytes(pd.DataFrame(columns=["ID"])) + + result = pd.concat(frames, ignore_index=True) + return _df_to_csv_bytes(result) + + +def get_consequence_csv() -> bytes: + """ + Build a consequence_repair CSV filtered to the current added-components list. + + Each component contributes up to four rows in the consequence file + (Cost, Time, Carbon, Energy), identified by the ``{comp_id}-{Type}`` + pattern in the ``ID`` column. Rows are matched using a prefix filter + so all consequence types are included automatically. + + For each unique source library the sibling ``consequence_repair.csv`` + is loaded and filtered. All matched rows are concatenated and returned, + preserving the original column layout. + + Components with no consequence data in their source file are silently + skipped. + + Returns + ------- + bytes + UTF-8-encoded CSV content, or an empty CSV if no data is found. + """ + entries: list = st.session_state.get(_ADDED_KEY, []) + groups = _group_entries_by_json_path(entries) + + frames: list[pd.DataFrame] = [] + for json_path, comp_ids in groups.items(): + csv_path = str(Path(json_path).parent / "consequence_repair.csv") + df = _load_raw_csv(csv_path) + if df is None: + continue + # Match rows whose ID starts with "{comp_id}-" to capture all + # consequence types (Cost, Time, Carbon, Energy) for each component. + prefixes = tuple(f"{cid}-" for cid in comp_ids) + matched = df[df["ID"].str.startswith(prefixes)] + if not matched.empty: + frames.append(matched) + + if not frames: + for json_path in groups: + csv_path = str(Path(json_path).parent / "consequence_repair.csv") + df = _load_raw_csv(csv_path) + if df is not None: + return _df_to_csv_bytes(df.iloc[0:0]) + return _df_to_csv_bytes(pd.DataFrame(columns=["ID"])) + + result = pd.concat(frames, ignore_index=True) + return _df_to_csv_bytes(result) + + +# ─── Streamlit renderers ─────────────────────────────────────────────────────── + +# The download menu: (state key, checkbox label, file name, CSV builder, help). +_DOWNLOAD_FILES: list[tuple[str, str, str, Callable[[], bytes], str]] = [ + ( + "quantity", + "Component quantity table", + "component_quantity.csv", + get_component_quantity_csv, + "One row per selected model; the ID column is filled in, the rest are " + "blank for you to complete.", + ), + ( + "fragility", + "Fragility parameters", + "fragility.csv", + get_fragility_csv, + "Fragility model parameters for the selected models, in the source " + "CSV layout.", + ), + ( + "consequence", + "Consequence data", + "consequence_repair.csv", + get_consequence_csv, + "Repair consequence data (Cost, Time, Carbon, Energy) for the selected " + "models, in the source CSV layout.", + ), +] + + +def _build_zip(files: list[tuple[str, bytes]]) -> bytes: + """Bundle ``(file_name, csv_bytes)`` pairs into a single zip archive.""" + buffer = io.BytesIO() + with zipfile.ZipFile(buffer, "w", zipfile.ZIP_DEFLATED) as archive: + for name, data in files: + archive.writestr(name, data) + return buffer.getvalue() + + +def render_download_section() -> None: + """ + Render the download tools for the current selection. + + A checklist (all checked by default) picks which CSVs to include — + component quantity table, fragility parameters, consequence data — and a + single button downloads them: the CSV directly when one file is chosen, or + a zip of the CSVs when several are. Assumes the caller has already handled + the empty-selection case (see :func:`render_added_components_list`). + """ + entries: list = st.session_state.get(_ADDED_KEY, []) + if not entries: + return + + st.markdown("### 📥 Download model data") + st.caption("Choose what to include, then download. Several files come as a zip.") + + chosen: list[tuple[str, bytes]] = [] + for key, label, file_name, builder, help_text in _DOWNLOAD_FILES: + if st.checkbox(label, value=True, key=f"dl_{key}", help=help_text): + chosen.append((file_name, builder())) + + if not chosen: + st.caption("Select at least one file to enable the download.") + return + + if len(chosen) == 1: + file_name, data = chosen[0] + st.download_button( + label="⬇️ Download CSV", + data=data, + file_name=file_name, + mime="text/csv", + type="primary", + width="stretch", + ) + else: + st.download_button( + label=f"⬇️ Download {len(chosen)} files (zip)", + data=_build_zip(chosen), + file_name="dlml_model_data.zip", + mime="application/zip", + type="primary", + width="stretch", + ) \ No newline at end of file diff --git a/src/dlml/web/st_search/__init__.py b/src/dlml/web/st_search/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/dlml/web/st_search/search_ui.py b/src/dlml/web/st_search/search_ui.py new file mode 100644 index 00000000..fb6d4191 --- /dev/null +++ b/src/dlml/web/st_search/search_ui.py @@ -0,0 +1,452 @@ +""" +search_ui.py +------------ +Streamlit UI for the semantic + structured component search. + +Replaces the old rapidfuzz ``fuzzy_visuals`` panel. It drives +``dlml.web.st_search.semantic_index.SemanticIndex`` and follows the hybrid +model agreed for this library: + + * **Facets always prune the tree.** With no text query, the hazard / source / + group selectors narrow the collapsible library tree in place (via the + ``allowed_ids`` parameter the tree renderers now accept). + * **A text query swaps in a ranked list.** When the user types a query, the + tree is replaced by relevance-ranked results — each with a breadcrumb back + to its tree location, a lazy details panel, and an "Add" button that feeds + the same ``added_components`` list the sidebar and downloads read from. + +Retrieval routing lives in the engine: dense + BM25 hybrid for descriptions, +exact/substring for component IDs. + +Note on scores +~~~~~~~~~~~~~~ +Hybrid description scores are RRF (reciprocal-rank-fusion) values, not cosine +similarities — meaningful for ordering, not as an absolute "match %". The result +list shows a *relative* relevance bar (normalised to the top hit), never a +percentage. +""" + +from __future__ import annotations + +from typing import Dict, List, Optional, Tuple + +import streamlit as st + +from dlml.web.st_search.semantic_index import ( + SearchFilters, + SemanticIndex, + build_tree_corpus, +) +from dlml.web.st_core.component import add_component, is_component_added +from dlml.web.st_visuals.helpers_visual import load_full_json +from dlml.web.st_visuals.tree_visuals import ( + render_consequence_tree, + render_seismic_tree, + render_wind_tree, +) + +# Map UI hazard labels to the values stored on records / used by the trees. +_HAZARD_LABELS = ["All", "Seismic", "Hurricane"] +_HAZARD_TO_VALUE = {"Seismic": "seismic", "Hurricane": "hurricane"} + +# Search modes shown to the user → engine mode strings. +_MODE_LABELS = ["Description", "ID"] +_MODE_TO_ENGINE = {"Description": "description", "ID": "id"} + +# Dataset selector — scopes both search and browse. "All" spans both datasets. +_DATASET_LABELS = ["Fragility", "Consequence", "All"] +_DATASET_TO_VALUE = {"Fragility": "fragility", "Consequence": "consequence", "All": None} +_DATASET_BADGE = {"fragility": "🔧", "consequence": "🧾"} + +_RESULT_LIMIT = 30 + + +# ─── Cached engine ─────────────────────────────────────────────────────────── + + +@st.cache_resource(show_spinner="Building the component search index…") +def get_index() -> SemanticIndex: + """ + Build the semantic index once per process. + + Embeds the ~2.6k tree-visible records — both fragility (damage) and + consequence (repair) models — with fastembed (dense + BM25). The first cold + start also downloads the embedding models; subsequent re-runs reuse this + cached resource. + """ + return SemanticIndex(build_tree_corpus()) + + +# ─── Facet option helpers ──────────────────────────────────────────────────── + + +def _hazard_value(label: str) -> Optional[str]: + return _HAZARD_TO_VALUE.get(label) + + +def _source_options( + index: SemanticIndex, hazard: Optional[str], dataset: Optional[str] +) -> List[str]: + """Distinct source library names, scoped to the hazard + dataset selection.""" + names = { + r.short_name + for r in index.records + if (hazard is None or r.hazard == hazard) + and (dataset is None or r.dataset == dataset) + } + return sorted(names) + + +def _group_options( + index: SemanticIndex, + hazard: Optional[str], + source: Optional[str], + dataset: Optional[str], +) -> Dict[str, str]: + """ + ``{display label -> group prefix}`` for the group selector, scoped to the + current hazard / source / dataset selection so the choices stay relevant. + """ + labels: Dict[str, str] = {} + for r in index.records: + if hazard is not None and r.hazard != hazard: + continue + if source is not None and r.short_name != source: + continue + if dataset is not None and r.dataset != dataset: + continue + labels[r.group_label] = r.group + return dict(sorted(labels.items())) + + +def _clear_search_query() -> None: + """ + Empty the search box (used as a button ``on_click`` callback). + + Callbacks run before widgets are instantiated on the next rerun, so + resetting the ``search_query`` state here is allowed — and with an empty + query the page falls back to the browse tree. + """ + st.session_state["search_query"] = "" + + +# ─── Controls ──────────────────────────────────────────────────────────────── + + +def render_search_controls( + index: SemanticIndex, + dataset: Optional[str], +) -> Tuple[str, str, SearchFilters, str]: + """ + Render the query box, mode selector, and facet filters. + + ``dataset`` (from the dataset selector) scopes the source/group options and + is baked into the returned filters so search and browse stay in sync. + + Returns + ------- + (query, engine_mode, filters, hazard_label) + """ + col_query, col_clear, col_mode = st.columns([5, 1, 2]) + with col_query: + query = st.text_input( + "Search components", + placeholder="Describe a model, e.g. “roof-to-wall connection” or a code like B.10.31", + key="search_query", + label_visibility="collapsed", + ) + with col_clear: + st.button( + "✕ Clear", + key="clear_search", + on_click=_clear_search_query, + disabled=not query.strip(), + width="stretch", + help="Clear the search and return to the browse tree", + ) + with col_mode: + mode_label = st.radio( + "Search by", + _MODE_LABELS, + horizontal=True, + key="search_mode", + label_visibility="collapsed", + ) + + with st.expander("🔧 Filters", expanded=False): + c1, c2, c3 = st.columns(3) + with c1: + hazard_label = st.selectbox("Hazard", _HAZARD_LABELS, key="filter_hazard") + hazard = _hazard_value(hazard_label) + + with c2: + sources = _source_options(index, hazard, dataset) + source_label = st.selectbox( + "Source", ["All"] + sources, key="filter_source" + ) + source = None if source_label == "All" else source_label + + with c3: + group_map = _group_options(index, hazard, source, dataset) + group_label = st.selectbox( + "Component group", ["All"] + list(group_map), key="filter_group" + ) + group = None if group_label == "All" else group_map.get(group_label) + + filters = SearchFilters( + hazard=hazard, source=source, group=group, dataset=dataset + ) + return query, _MODE_TO_ENGINE[mode_label], filters, hazard_label + + +# ─── Results ───────────────────────────────────────────────────────────────── + + +def _hazard_for_added(payload_hazard: str) -> str: + """Engine hazard ('hurricane'/'seismic') → added-list hazard ('wind'/'seismic').""" + return "wind" if payload_hazard == "hurricane" else "seismic" + + +def _breadcrumb(payload: dict) -> str: + parts = [ + payload.get("short_name"), + payload.get("group_label"), + payload.get("subgroup_label"), + ] + # Drop empties and collapse the common case where group == subgroup label. + crumbs: List[str] = [] + for p in parts: + if p and (not crumbs or p != crumbs[-1]): + crumbs.append(p) + return " › ".join(crumbs) + + +def render_results( + index: SemanticIndex, + query: str, + mode: str, + filters: SearchFilters, +) -> None: + """Render the ranked result list for a non-empty query.""" + hits = index.search(query, mode=mode, filters=filters, limit=_RESULT_LIMIT) + + st.markdown(f"### 🔎 Results · `{len(hits)}`") + if not hits: + st.info( + "No matches. Try different or fewer words, switch the search mode, " + "or relax the filters.", + icon="🔍", + ) + return + + max_score = max((h.score for h in hits), default=1.0) or 1.0 + + for rank, hit in enumerate(hits, 1): + payload = hit.payload + col_main, col_score, col_add = st.columns([7, 2, 2]) + + with col_main: + desc = payload.get("description", "") + preview = desc[:160] + "…" if len(desc) > 160 else desc + badge = _DATASET_BADGE.get(payload.get("dataset", ""), "") + st.markdown(f"{badge} **`{hit.component_id}`** — {preview}") + st.caption(_breadcrumb(payload)) + + with col_score: + st.caption(f"#{rank}") + st.progress(min(hit.score / max_score, 1.0)) + + with col_add: + if is_component_added(hit.component_id, payload.get("file_path")): + st.button( + "✅ Added", + key=f"sr_added_{rank}_{hit.component_id}", + disabled=True, + width="stretch", + ) + elif st.button( + "➕ Add", + key=f"sr_add_{rank}_{hit.component_id}", + width="stretch", + ): + fp = payload["file_path"] + comp_data = load_full_json(fp).get(hit.component_id, {}) + add_component( + hit.component_id, + comp_data, + fp, + _hazard_for_added(payload.get("hazard", "")), + kind=payload.get("dataset", "fragility"), + ) + st.rerun() + + # Lazy detail panel. The expander body runs on every re-run regardless + # of open state, so the leaf is gated behind a "Load details" button + # (render_component_leaf_button) to avoid building 30 charts per run. + with st.expander("Details & curves", expanded=False): + _render_result_details(rank, hit) + + st.divider() + + +def _render_result_details(rank: int, hit) -> None: + # Imported lazily to keep the module import graph shallow. + from dlml.web.st_core.component import render_component_leaf_button, render_consequence_leaf + + payload = hit.payload + fp = payload["file_path"] + cid = hit.component_id + + if payload.get("dataset") == "consequence": + # Same lazy "Load details" guard render_component_leaf_button uses, so + # consequence charts aren't built for every result on every re-run. + load_key = f"sr{rank}_loaded_{cid}" + if load_key not in st.session_state: + if st.button("Load details", key=f"sr{rank}_btn_{cid}", type="secondary"): + st.session_state[load_key] = True + st.rerun() + else: + comp_data = load_full_json(fp).get(cid, {}) + if comp_data: + render_consequence_leaf(cid, comp_data, fp, key_prefix=f"sr{rank}_") + return + + comp_data = load_full_json(fp).get(cid, {}) + render_component_leaf_button( + cid, + comp_data, + fp, + key_prefix=f"sr{rank}_", + hazard=_hazard_for_added(payload.get("hazard", "")), + ) + + +# ─── Tree (browse) ─────────────────────────────────────────────────────────── + + +def _has_component_filter(filters: SearchFilters) -> bool: + """True when a facet narrows *within* a hazard (source/group), needing IDs.""" + return any( + getattr(filters, f) is not None + for f in ("source", "category", "group", "subgroup", "type") + ) + + +def render_library( + index: SemanticIndex, + hazard_label: str, + filters: SearchFilters, + dataset: Optional[str], +) -> None: + """ + Render the browse tree(s), pruned to the active facets. + + The dataset selector chooses which trees show: fragility (seismic/wind), + consequence (seismic + hurricane), or both when "All". ``filter_only`` + already respects ``filters.dataset``, so the shared ``allowed_ids`` set + prunes each tree to just its own members. + """ + allowed_ids: Optional[set] = None + if _has_component_filter(filters): + allowed_ids = set(index.filter_only(filters)) + _render_trees(dataset, hazard_label, allowed_ids) + + +def _render_trees( + dataset: Optional[str], hazard_label: str, allowed_ids: Optional[set] +) -> None: + """ + Render the browse tree(s) for a dataset + hazard selection. + + ``allowed_ids`` prunes every tree to a shared set of component IDs (facet + filtering); pass ``None`` to render the full library unpruned. This is the + one place the trees are laid out, shared by the normal facet path and the + search-unavailable fallback. + """ + show_fragility = dataset in ("fragility", None) + show_consequence = dataset in ("consequence", None) + show_seismic = hazard_label in ("All", "Seismic") + show_hurricane = hazard_label in ("All", "Hurricane") + + if show_fragility: + if show_seismic: + render_seismic_tree(allowed_ids=allowed_ids) + if show_hurricane: + render_wind_tree(allowed_ids=allowed_ids) + + if show_consequence: + if show_seismic: + render_consequence_tree("seismic", allowed_ids=allowed_ids) + if show_hurricane: + render_consequence_tree("hurricane", allowed_ids=allowed_ids) + + +# ─── Orchestrator ──────────────────────────────────────────────────────────── + + +def render_search_and_library() -> None: + """ + Top-level entry. + + A **Dataset** selector (Fragility / Consequence / All) scopes both search and + browse. Both datasets are indexed, so a query searches whichever the selector + allows; with no query, the matching browse tree(s) render. "All" spans both — + useful for finding a model without knowing which dataset it lives in. + + If the search index cannot be built (the optional search dependencies are + missing, or the first-run model download fails offline), the page degrades + gracefully: a notice explains why and the full browse tree still renders. + """ + dataset_label = st.radio( + "Dataset", + _DATASET_LABELS, + horizontal=True, + key="dataset_filter", + help=( + "Fragility = damage models. Consequence = repair cost/time models " + "(some keyed by occupancy class, with no fragility component). " + "Both are searchable; 'All' spans both." + ), + ) + dataset = _DATASET_TO_VALUE[dataset_label] + + try: + index = get_index() + except Exception as exc: # noqa: BLE001 -- degrade gracefully, browsing works + _render_search_unavailable(exc) + st.divider() + _render_trees(dataset, "All", None) + return + + query, mode, filters, hazard_label = render_search_controls(index, dataset) + st.divider() + + if query.strip(): + render_results(index, query, mode, filters) + else: + render_library(index, hazard_label, filters, dataset) + + +def _render_search_unavailable(exc: Exception) -> None: + """ + Explain why component search is unavailable, without a traceback. + + An ``ImportError`` means the optional search dependencies are not installed; + anything else (typically a network error while fetching the embedding models + on first run) is reported as a transient failure. Browsing still works in + both cases. + """ + if isinstance(exc, ImportError): + st.info( + "🔍 **Component search is unavailable** because its optional " + "dependencies are not installed. Install them with " + "`pip install 'simcenter-dlml[explorer]'` (bundles qdrant-client + fastembed). " + "You can still browse the full library below." + ) + else: + st.warning( + "🔍 **Component search is temporarily unavailable** — the embedding " + "models could not be loaded. The first run downloads them and needs " + "internet access; check your connection and reload. You can still " + "browse the full library below." + ) diff --git a/src/dlml/web/st_search/semantic_index.py b/src/dlml/web/st_search/semantic_index.py new file mode 100644 index 00000000..5b4ee30a --- /dev/null +++ b/src/dlml/web/st_search/semantic_index.py @@ -0,0 +1,707 @@ +""" +semantic_index.py +----------------- +Semantic + structured retrieval engine for the fragility component library. + +This replaces the description half of the old rapidfuzz search. It indexes the +*tree-visible* component libraries (the same files ``render_seismic_tree`` and +``render_wind_tree`` render) into an in-process Qdrant collection backed by +fastembed, and exposes a small hybrid API: + + * ``search(query, mode=...)`` — hybrid dense + BM25 (RRF-fused) for + descriptions, exact/substring matching for + component IDs. + * ``filter_only(filters)`` — facet pruning with no text query, used to + narrow the tree. + +Design notes +~~~~~~~~~~~~ +* **Framework-free.** Nothing here imports Streamlit, so the engine can be + driven from the command line to sanity-check retrieval quality before any UI + is wired up:: + + python -m dlml.web.st_search.semantic_index "steel column connection" + python -m dlml.web.st_search.semantic_index --mode id "B.10.31" + python -m dlml.web.st_search.semantic_index --hazard seismic "exterior wall debris" + +* **Corpus parity with the tree.** ``build_tree_corpus`` globs exactly the files + the two tree renderers load: every ``fragility.json`` under ``seismic/`` plus + the ``hurricane/building/component/`` libraries. The 25k-row Hazus hurricane + *portfolio* files are deliberately excluded — they are near-duplicate + templated strings and are not shown in the tree. + +* **Rich embedding context.** ``ComponentGroups`` in the source JSON carries + human-readable labels ("B.10.31 - Steel Columns", "RWC - Roof-Wall + Connection") that the current tree throws away. We parse them back out and + prepend the label chain to each component's description before embedding, so a + query like "roof to wall connection" matches even when the raw description + never spells it out. + +* **In-process Qdrant.** ``location=":memory:"`` builds a fresh collection at + startup (cheap at ~1.6k vectors). Pass ``path=...`` instead to persist on + disk. No server required. +""" + +from __future__ import annotations + +import argparse +import json +from dataclasses import dataclass, field +from pathlib import Path +from typing import Dict, List, Optional + +from dlml._catalog import data_root + +# qdrant-client + fastembed are imported lazily inside SemanticIndex so that the +# corpus-building half of this module (and `import` in general) does not require +# the heavy ONNX runtime to be installed. + +# ─── Constants ─────────────────────────────────────────────────────────────── + +#: Default fastembed model. Small (384-dim), CPU-friendly, no torch dependency — +#: chosen to stay within Streamlit Community Cloud's memory/cold-start budget. +DEFAULT_MODEL = "BAAI/bge-small-en-v1.5" + +#: Sparse model for the lexical half of hybrid search. BM25 is pure IDF-weighted +#: term matching (no neural net — computed via py-rust-stemmers), so it adds +#: almost nothing to cold start or memory. It rescues rare salient tokens the +#: small dense model dilutes: dense ranks "elevator failure" by the common word +#: "failure", BM25 weights the rare "elevator" far higher. Set to None for +#: dense-only. Results from the two are fused with Reciprocal Rank Fusion. +DEFAULT_SPARSE_MODEL = "Qdrant/bm25" + +DEFAULT_COLLECTION = "components" + +#: Top-level keys in a fragility.json that are not components. +_NON_COMPONENT_KEYS = {"References"} + +# Scores assigned to non-vector (ID) matches so they can be ranked and +# merged on the same 0–1 scale as cosine similarity. +_SCORE_EXACT = 1.0 +_SCORE_PREFIX = 0.9 +_SCORE_SUBSTRING = 0.7 + + +# ─── Records & filters ─────────────────────────────────────────────────────── + + +@dataclass +class ComponentRecord: + """One indexable component, flattened from a fragility.json entry.""" + + component_id: str + description: str + short_name: str # source library, e.g. "FEMA P-58 2nd Edition" + file_path: str + hazard: str # "seismic" | "hurricane" | "flood" | "" + category: str # "FEMA" | "HAZUS" | "" + group: str # 1-segment prefix, e.g. "B" (tree level 3) + group_label: str # human label, e.g. "B - Shell" + subgroup: str # 2-segment prefix, e.g. "B.10" (tree level 4) + subgroup_label: str # human label, e.g. "B.10 - Super Structure" + dataset: str = "fragility" # "fragility" | "consequence" — which file it came from + type: str = "Damage" # "Damage" | "Consequence" + #: Whether this record's description is embedded for semantic search. False + #: for the huge hurricane building portfolio (≈51.6k templated near-duplicate + #: records) — those stay findable via ID/substring + facet filters and the + #: browse tree without paying the (~minutes) embedding cost at startup. + embed: bool = True + #: Extra label names (deepest group chain) used only to enrich the embedding. + _name_chain: List[str] = field(default_factory=list, repr=False) + + @property + def embed_text(self) -> str: + """ + Text fed to the embedding model. + + Prepends the source and the human-readable group/sub-group name chain to + the raw description so the vector carries context the bare attribute + string lacks. Tweak this method to experiment with retrieval quality. + """ + names = " / ".join(self._name_chain) if self._name_chain else "" + parts = [self.short_name, names, self.description] + return " | ".join(p for p in parts if p) + + @property + def payload(self) -> dict: + """Qdrant payload — every field a facet filter or the UI might need.""" + return { + "component_id": self.component_id, + "description": self.description, + "short_name": self.short_name, + "file_path": self.file_path, + "hazard": self.hazard, + "category": self.category, + "group": self.group, + "group_label": self.group_label, + "subgroup": self.subgroup, + "subgroup_label": self.subgroup_label, + "dataset": self.dataset, + "type": self.type, + } + + +@dataclass +class SearchFilters: + """Structured facets. Any ``None`` field is ignored (matches everything).""" + + hazard: Optional[str] = None + category: Optional[str] = None + source: Optional[str] = None # matches short_name + group: Optional[str] = None # 1-segment prefix + subgroup: Optional[str] = None # 2-segment prefix + dataset: Optional[str] = None # "fragility" | "consequence" + type: Optional[str] = None + + def is_empty(self) -> bool: + return all( + getattr(self, f) is None + for f in ("hazard", "category", "source", "group", "subgroup", "dataset", "type") + ) + + def matches(self, payload: dict) -> bool: + """Pure-Python evaluation, used for ID mode and ``filter_only``.""" + checks = { + "hazard": self.hazard, + "category": self.category, + "short_name": self.source, + "group": self.group, + "subgroup": self.subgroup, + "dataset": self.dataset, + "type": self.type, + } + return all(want is None or payload.get(key) == want for key, want in checks.items()) + + +@dataclass +class SearchHit: + """A single ranked result.""" + + component_id: str + score: float + payload: dict + + @property + def description(self) -> str: + return self.payload.get("description", "") + + @property + def file_path(self) -> str: + return self.payload.get("file_path", "") + + +# ─── Corpus building ───────────────────────────────────────────────────────── + + +def _human_name(label: str) -> str: + """'B.10.31 - Steel Columns' -> 'Steel Columns'. Falls back to the label.""" + parts = label.split(" - ", 1) + return parts[1].strip() if len(parts) == 2 else label.strip() + + +def _prefix_of(label: str) -> str: + """'B.10.31 - Steel Columns' -> 'B.10.31'.""" + return label.split(" - ", 1)[0].strip() + + +def _flatten_group_labels(node, acc: Dict[str, str]) -> Dict[str, str]: + """ + Walk a ComponentGroups structure and build ``prefix -> full label``. + + ComponentGroups nests arbitrarily: ``{label: {label: [label, ...]}}``. Every + string label anywhere in the tree is parsed into its dotted prefix and + recorded, so a component ID can later be resolved to the most specific label + available. + """ + if isinstance(node, dict): + for label, child in node.items(): + if isinstance(label, str): + acc[_prefix_of(label)] = label + _flatten_group_labels(child, acc) + elif isinstance(node, list): + for label in node: + if isinstance(label, str): + acc[_prefix_of(label)] = label + return acc + + +def _hazard_from_path(file_path: str) -> str: + parts = Path(file_path).parts + for hz in ("seismic", "hurricane", "flood"): + if hz in parts: + return hz + return "" + + +def _category_from_path(file_path: str) -> str: + if "FEMA" in file_path: + return "FEMA" + if "Hazus" in file_path: + return "HAZUS" + if "SimCenter" in file_path: + return "SIMCENTER" + return "" + + +def _record_from_component( + comp_id: str, + comp_data: dict, + *, + short_name: str, + file_path: str, + hazard: str, + category: str, + label_map: Dict[str, str], + source_type: str, + dataset: str, + embed: bool, +) -> Optional[ComponentRecord]: + """Build one ComponentRecord, or None if it has no usable description.""" + description = (comp_data.get("Description") or "").strip() + if not description: + return None + + segments = comp_id.split(".") + group = segments[0] + subgroup = ".".join(segments[:2]) if len(segments) >= 2 else group + + # Resolve labels for the group and sub-group prefixes. + group_label = label_map.get(group, group) + subgroup_label = label_map.get(subgroup, subgroup) + + # Collect the human-name chain across every resolvable prefix depth + # (group, sub-group, leaf-group …) for the embedding context. De-duplicate + # while preserving order. + name_chain: List[str] = [] + for depth in range(1, len(segments)): + prefix = ".".join(segments[:depth]) + label = label_map.get(prefix) + if label: + name = _human_name(label) + if name and name not in name_chain: + name_chain.append(name) + + # Type: prefer explicit JSON, else keyword heuristic (mirrors old behaviour). + comp_type = source_type + text = (short_name + " " + description).lower() + if "consequence" in text: + comp_type = "Consequence" + + return ComponentRecord( + component_id=comp_id, + description=description, + short_name=short_name, + file_path=file_path, + hazard=hazard, + category=category, + group=group, + group_label=group_label, + subgroup=subgroup, + subgroup_label=subgroup_label, + dataset=dataset, + embed=embed, + type=comp_type, + _name_chain=name_chain, + ) + + +def _records_from_file( + file_path: str, dataset: str = "fragility", embed: bool = True +) -> List[ComponentRecord]: + try: + with open(file_path, "r", encoding="utf-8") as fh: + data = json.load(fh) + except Exception as exc: # pragma: no cover - defensive + print(f"Error reading {file_path}: {exc}") + return [] + + meta: dict = data.get("_GeneralInformation", {}) or {} + short_name: str = meta.get("ShortName", Path(file_path).parent.name) + label_map = _flatten_group_labels(meta.get("ComponentGroups", {}), {}) + + hazard = _hazard_from_path(file_path) + category = _category_from_path(file_path) + source_type = "Consequence" if "consequence" in str(meta.get("Type", "")).lower() else "Damage" + + records: List[ComponentRecord] = [] + for comp_id, comp_data in data.items(): + if comp_id.startswith("_") or comp_id in _NON_COMPONENT_KEYS: + continue + if not isinstance(comp_data, dict): + continue + rec = _record_from_component( + comp_id, + comp_data, + short_name=short_name, + file_path=file_path, + hazard=hazard, + category=category, + label_map=label_map, + source_type=source_type, + dataset=dataset, + embed=embed, + ) + if rec is not None: + records.append(rec) + return records + + +#: Candidate filenames per dataset. Consequence has two forms: Hazus hurricane +#: "coupled" uses ``consequence_repair.*`` (damage-state based); "original" uses +#: ``loss_repair.*`` (a continuous loss function). A directory has at most one. +_DATASET_FILENAMES = { + "fragility": ("fragility.json",), + "consequence": ("consequence_repair.json", "loss_repair.json"), +} + + +def tree_corpus_files( + base_path: str | Path | None = None, dataset: str = "fragility" +) -> List[str]: + """ + Return the tree-visible data files for *dataset*, in a stable order. + + Scope (mirrors tree_visuals): + * seismic — every matching file under ``seismic/`` + * hurricane — the ``building/component/`` library and the + ``building/portfolio/`` Hazus models. + + The consequence dataset matches both ``consequence_repair.json`` and + ``loss_repair.json``; directories lacking a match simply don't appear. + + ``base_path`` defaults to the packaged dlml data root (:func:`data_root`), + so discovery is independent of the current working directory. Pass an + explicit path only to point the corpus at a different data tree (e.g. the + CLI ``--base`` override or a test fixture). + """ + filenames = _DATASET_FILENAMES[dataset] + base = Path(base_path) if base_path is not None else data_root() + roots = [ + base / "seismic", + base / "hurricane" / "building" / "component", + base / "hurricane" / "building" / "portfolio", + ] + files: List[str] = [] + for root in roots: + if not root.exists(): + continue + for filename in filenames: + files.extend(sorted(str(p) for p in root.rglob(filename))) + return files + + +def build_tree_corpus(base_path: str | Path | None = None) -> List[ComponentRecord]: + """ + Parse every tree-visible record into a flat list of ComponentRecords. + + Includes both the fragility (damage) models and the consequence (repair) + models, each tagged via ``ComponentRecord.dataset`` so search can filter by + one or span both. A component that exists in both files (e.g. FEMA + ``B.10.31.001``) yields two distinct records. + """ + records: List[ComponentRecord] = [] + for dataset in ("fragility", "consequence"): + for fp in tree_corpus_files(base_path, dataset): + parts = Path(fp).parts + # The hurricane building portfolio is huge (≈51.6k templated + # near-duplicate records). Index it for ID/facet search + the tree, + # but don't embed it — that keeps cold start fast. + embed = not ("hurricane" in parts and "portfolio" in parts) + records.extend(_records_from_file(fp, dataset, embed=embed)) + return records + + +def prefetch_embedding_models() -> None: + """ + Download the search models into the local cache if not already present. + + Called by ``dlml explorer`` at startup so the first search does not stall on + a silent download from HuggingFace. Safe to call repeatedly: fastembed + caches the models on disk, so later calls just load from that cache. Requires + the search extra (fastembed); instantiating each model triggers its download. + """ + from fastembed import SparseTextEmbedding, TextEmbedding + + TextEmbedding(DEFAULT_MODEL) + if DEFAULT_SPARSE_MODEL: + SparseTextEmbedding(DEFAULT_SPARSE_MODEL) + + +# ─── The index ─────────────────────────────────────────────────────────────── + + +class SemanticIndex: + """ + Hybrid retrieval over a list of ComponentRecords. + + Vectors (via Qdrant + fastembed) power description search; exact/substring + matching powers ID search. Facets are evaluated as Qdrant payload + filters for vector queries and in Python everywhere else. + """ + + def __init__( + self, + records: List[ComponentRecord], + *, + model_name: str = DEFAULT_MODEL, + sparse_model_name: Optional[str] = DEFAULT_SPARSE_MODEL, + collection_name: str = DEFAULT_COLLECTION, + location: str = ":memory:", + path: Optional[str] = None, + ) -> None: + self.records = records + self.collection_name = collection_name + self.model_name = model_name + self.sparse_model_name = sparse_model_name + + # Lazy import keeps the corpus helpers usable without qdrant installed. + try: + from qdrant_client import QdrantClient, models + except ImportError as exc: # pragma: no cover + raise ImportError( + "qdrant-client with fastembed is required for SemanticIndex. " + "Install it with: pip install 'qdrant-client[fastembed]'" + ) from exc + self._models = models + + self.client = ( + QdrantClient(path=path) if path else QdrantClient(location=location) + ) + self.client.set_model(model_name) + # Registering a sparse model makes add()/query() embed and search both + # dense and sparse vectors; query() then fuses them with RRF server-side. + if sparse_model_name: + self.client.set_sparse_model(sparse_model_name) + + self._index_records() + + @property + def hybrid(self) -> bool: + """True when sparse (BM25) fusion is active alongside dense vectors.""" + return self.sparse_model_name is not None + + # -- build ----------------------------------------------------------------- + + def _index_records(self) -> None: + """ + Embed and upsert the embeddable records. Integer ids; component_id in payload. + + Only records flagged ``embed=True`` are sent to the model — the huge + hurricane portfolio is skipped (it stays in ``self.records`` for ID and + facet search but never reaches the embedder). ``add`` embeds with both + the dense and (if registered) sparse models. + """ + to_embed = [r for r in self.records if r.embed] + if not to_embed: + return + self.client.add( + collection_name=self.collection_name, + documents=[r.embed_text for r in to_embed], + metadata=[r.payload for r in to_embed], + ids=list(range(len(to_embed))), + ) + + # -- filters --------------------------------------------------------------- + + def _qdrant_filter(self, filters: Optional[SearchFilters]): + if filters is None or filters.is_empty(): + return None + m = self._models + conditions = [] + field_map = { + "hazard": filters.hazard, + "category": filters.category, + "short_name": filters.source, + "group": filters.group, + "subgroup": filters.subgroup, + "dataset": filters.dataset, + "type": filters.type, + } + for key, value in field_map.items(): + if value is not None: + conditions.append( + m.FieldCondition(key=key, match=m.MatchValue(value=value)) + ) + return m.Filter(must=conditions) if conditions else None + + # -- queries --------------------------------------------------------------- + + def search( + self, + query: str, + *, + mode: str = "description", + filters: Optional[SearchFilters] = None, + limit: int = 50, + score_cutoff: float = 0.0, + ) -> List[SearchHit]: + """ + Run a hybrid search. + + Parameters + ---------- + query : str + The user's query text. + mode : {"description", "id"} + * ``description`` — semantic vector search over the description. + * ``id`` — exact / prefix / substring match on component IDs. + filters : SearchFilters, optional + Structured facet constraints applied to the candidate pool. + limit : int + Maximum number of hits to return. + score_cutoff : float + Drop hits scoring below this (0–1). + """ + query = (query or "").strip() + if not query: + return [] + + if mode == "id": + return self._search_field(query, "component_id", filters, limit, score_cutoff) + return self._search_vector(query, filters, limit, score_cutoff) + + def _search_vector( + self, + query: str, + filters: Optional[SearchFilters], + limit: int, + score_cutoff: float, + ) -> List[SearchHit]: + # When a sparse model is registered, ``query`` runs dense and BM25 + # searches and fuses them with RRF. NOTE: fused scores are reciprocal- + # rank values (small magnitude, ~0.01–0.03), not cosine similarities — + # use them for ordering, not as an absolute "match %". With sparse + # disabled, scores are cosine similarity (0–1). + responses = self.client.query( + collection_name=self.collection_name, + query_text=query, + query_filter=self._qdrant_filter(filters), + limit=limit, + ) + hits: List[SearchHit] = [] + for r in responses: + if r.score < score_cutoff: + continue + payload = r.metadata or {} + hits.append( + SearchHit( + component_id=payload.get("component_id", ""), + score=float(r.score), + payload=payload, + ) + ) + return hits + + def _search_field( + self, + query: str, + field_name: str, + filters: Optional[SearchFilters], + limit: int, + score_cutoff: float, + ) -> List[SearchHit]: + """Exact/prefix/substring match against a single payload string field.""" + q = query.casefold() + hits: List[SearchHit] = [] + for rec in self.records: + payload = rec.payload + if filters is not None and not filters.matches(payload): + continue + value = str(payload.get(field_name, "")).casefold() + if not value: + continue + if value == q: + score = _SCORE_EXACT + elif value.startswith(q): + score = _SCORE_PREFIX + elif q in value: + score = _SCORE_SUBSTRING + else: + continue + if score < score_cutoff: + continue + hits.append(SearchHit(rec.component_id, score, payload)) + hits.sort(key=lambda h: h.score, reverse=True) + return hits[:limit] + + def filter_only(self, filters: Optional[SearchFilters] = None) -> List[str]: + """ + Return component IDs matching the facets, with no text query. + + Used to prune the tree when the user has selected facets but not typed a + query. Order follows the corpus (stable). + """ + if filters is None or filters.is_empty(): + return [r.component_id for r in self.records] + return [r.component_id for r in self.records if filters.matches(r.payload)] + + # -- introspection --------------------------------------------------------- + + def summary(self) -> Dict[str, int]: + by_hazard: Dict[str, int] = {} + by_source: Dict[str, int] = {} + for r in self.records: + by_hazard[r.hazard] = by_hazard.get(r.hazard, 0) + 1 + by_source[r.short_name] = by_source.get(r.short_name, 0) + 1 + return {"total": len(self.records), **{f"hazard:{k}": v for k, v in by_hazard.items()}, + **{f"source:{k}": v for k, v in by_source.items()}} + + +# ─── CLI sanity harness ────────────────────────────────────────────────────── + + +def _main() -> None: + parser = argparse.ArgumentParser( + description="Sanity-check the component semantic index from the command line." + ) + parser.add_argument("query", nargs="?", default="", help="search query") + parser.add_argument("--mode", default="description", + choices=["description", "id"]) + parser.add_argument("--hazard", default=None, help="facet: seismic / hurricane") + parser.add_argument("--source", default=None, help="facet: source short name") + parser.add_argument("--category", default=None, help="facet: FEMA / HAZUS") + parser.add_argument("--limit", type=int, default=10) + parser.add_argument("--base", default=None, + help="override the data root (defaults to the packaged " + "dlml data)") + parser.add_argument("--no-hybrid", action="store_true", + help="disable BM25 sparse fusion (dense-only, for A/B)") + args = parser.parse_args() + + effective_base = args.base if args.base is not None else str(data_root()) + print(f"Building corpus from '{effective_base}' …") + records = build_tree_corpus(args.base) + print(f" {len(records)} components from {len(tree_corpus_files(args.base))} files") + + sparse = None if args.no_hybrid else DEFAULT_SPARSE_MODEL + mode_desc = "dense-only" if args.no_hybrid else f"hybrid (dense + {DEFAULT_SPARSE_MODEL})" + print(f"Embedding with {DEFAULT_MODEL}, {mode_desc} (first run downloads models) …") + index = SemanticIndex(records, sparse_model_name=sparse) + + summary = index.summary() + print("Corpus summary:") + for k, v in summary.items(): + print(f" {k:<40} {v}") + + if not args.query: + print("\nNo query given — corpus built successfully. Pass a query to search.") + return + + filters = SearchFilters( + hazard=args.hazard, source=args.source, category=args.category + ) + print(f"\nQuery: {args.query!r} (mode={args.mode})") + hits = index.search(args.query, mode=args.mode, filters=filters, limit=args.limit) + if not hits: + print(" no results") + return + for i, h in enumerate(hits, 1): + p = h.payload + desc = (h.description[:90] + "…") if len(h.description) > 90 else h.description + print(f" {i:>2}. {h.score:.3f} [{p.get('category') or p.get('hazard')}] " + f"{h.component_id} ({p.get('subgroup_label')})") + print(f" {desc}") + + +if __name__ == "__main__": + _main() diff --git a/src/dlml/web/st_ui/__init__.py b/src/dlml/web/st_ui/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/dlml/web/st_ui/branding.py b/src/dlml/web/st_ui/branding.py new file mode 100644 index 00000000..a1c1ed0c --- /dev/null +++ b/src/dlml/web/st_ui/branding.py @@ -0,0 +1,217 @@ +""" +branding.py +----------- +Organization attribution / branding for the app. + +Shows the organizations behind the project — the NSF NHERI SimCenter (whose +Damage and Loss Model Library this app is built on) and Degenkolb Engineers +(who built this app). Logos are embedded as base64 data URIs from ``assets/`` +so there is no runtime dependency on external URLs, and they sit on a light +card so the dark Degenkolb wordmark stays legible on both light and dark themes. + +* ``render_header(title)`` — the page header: title and contributor logos on + the same line (title left, logos vertically centered on the right). +* ``render_brand_header()`` — just the compact, right-aligned logo bar. +* ``render_contributors()`` — fuller centered footer block. +""" + +from __future__ import annotations + +import base64 +from functools import lru_cache +from pathlib import Path + +import streamlit as st + +_ASSETS = Path(__file__).resolve().parent.parent / "assets" + +_SIMCENTER_URL = "https://simcenter.designsafe-ci.org/" +_DEGENKOLB_URL = "https://degenkolb.com/" + + +@lru_cache(maxsize=None) +def _data_uri(filename: str, mime: str) -> str: + """Return a base64 ``data:`` URI for a logo file in ``assets/``.""" + raw = (_ASSETS / filename).read_bytes() + b64 = base64.b64encode(raw).decode("ascii") + return f"data:{mime};base64,{b64}" + + +def _logos() -> tuple[str, str] | None: + """(simcenter, degenkolb) data URIs, or None if the assets are missing.""" + try: + return ( + _data_uri("nsf_nheri_simcenter.png", "image/png"), + _data_uri("degenkolb.svg", "image/svg+xml"), + ) + except FileNotFoundError: + return None + + +def render_header(title: str, subtitle: str | None = None) -> None: + """ + Render the page hero — an editorial header: the title with a short + SimCenter-red rule, an optional subtitle, and a one-line note making it + clear the Explorer is managed by the SimCenter and was built with + Degenkolb's support. The contributor logos live in the sticky top bar + (:func:`render_top_bar`) and the footer, so the hero stays text-only. + + Emitted as one HTML block so the typography and red rule style as a unit; + the matching ``.dlml-hero*`` CSS lives in :mod:`dlml.web.st_ui.theme`. + """ + # Flush-left HTML (no leading whitespace on any line) — st.markdown parses + # the string as Markdown first, and any line indented 4+ spaces becomes a + # literal code block instead of rendered HTML. The contributor logos live in + # the sticky top bar (render_top_bar) and the footer, not here. + subtitle_html = ( + f'

{subtitle}

' if subtitle else "" + ) + st.markdown( + '
' + '
' + f'

{title}

' + f'{subtitle_html}' + '

Managed by the NHERI SimCenter' + ' · developed with support from Degenkolb Engineers

' + '
' + '
', + unsafe_allow_html=True, + ) + + +def render_top_bar() -> None: + """ + Render the slim, sticky brand bar shown on every page. + + Left: the two contributor logos on a white card and the "DLML Explorer" + wordmark. Right: the page links and the light/dark switch. The + ``.st-key-dlml-topbar`` rules (see :mod:`dlml.web.st_ui.theme`) pin it to the + top so the branding and nav stay visible on scroll, and Streamlit's own + header chrome is hidden. The sidebar is left entirely for selected models. + Page-link paths are relative to the entry script (``app.py``, the About + landing page). + """ + from dlml.web.st_ui.theme import render_theme_toggle + + # Brand block (flush-left HTML — see render_header): the two contributor + # logos on a white card, then the "DLML Explorer" wordmark. + logos = _logos() + if logos is not None: + simcenter, degenkolb = logos + logos_html = ( + '' + f'' + f'NSF NHERI SimCenter' + f'' + f'Degenkolb Engineers' + '' + ) + else: + logos_html = "" + brand_html = ( + '
' + + logos_html + + 'DLML Explorer' + + '
' + ) + + # Keyed container so the theme can pin this bar to the top and keep its + # columns from wrapping (see the .st-key-dlml-topbar rules). The empty + # marker div is what the sticky CSS selector keys off (the proven Streamlit + # sticky-header recipe: target the flow element that *contains* the marker). + # Order: brand, Browse, About, toggle — left-packed. The theme makes the row + # wrap (not full-stack) and pushes the toggle to the right, so on a narrow + # bar the toggle wraps first, then the two links join it on the second row. + with st.container(key="dlml-topbar"): + st.markdown('
', unsafe_allow_html=True) + brand, browse, about, toggle = st.columns( + [5, 2.6, 1.3, 2.2], gap="small", vertical_alignment="center" + ) + with brand: + st.markdown(brand_html, unsafe_allow_html=True) + browse.page_link( + "pages/1_Browse_and_Search.py", label="Browse & Search", icon="🔍" + ) + about.page_link("app.py", label="About", icon="ℹ️") + with toggle: + render_theme_toggle() + + +def render_brand_header() -> None: + """Render a compact, right-aligned logo bar.""" + logos = _logos() + if logos is None: + return + simcenter, degenkolb = logos + + st.markdown( + f""" +
+ + + + NSF NHERI SimCenter + + + Degenkolb Engineers + + +
+ """, + unsafe_allow_html=True, + ) + + +def render_contributors() -> None: + """Render a fuller centered contributor block (footer variant).""" + logos = _logos() + if logos is None: + return + simcenter, degenkolb = logos + + st.markdown( + f""" +
+
+

+ +

+ Built with the support of Degenkolb Engineers on the NHERI SimCenter + Damage and Loss Model Library. +

+
+ """, + unsafe_allow_html=True, + ) diff --git a/src/dlml/web/st_ui/main_page.py b/src/dlml/web/st_ui/main_page.py new file mode 100644 index 00000000..44da9c1a --- /dev/null +++ b/src/dlml/web/st_ui/main_page.py @@ -0,0 +1,24 @@ +import streamlit as st +from dlml.web.st_search.search_ui import render_search_and_library +from dlml.web.st_ui.branding import render_top_bar +from dlml.web.st_ui.theme import use_full_width + + +def render_main_page() -> None: + """ + Render the Browse & Search page: the sticky brand bar, the component search + panel, and the browse tree. + + The hero is intentionally omitted here — the brand bar already shows the + "DLML Explorer" name and logos, so the tool goes straight to work and saves + the vertical space. The full hero stays on the About landing page. + + ``st.set_page_config`` is intentionally NOT called here — it must be the + first Streamlit command of the run and is set in ``app.py`` before the + sidebar renders. + """ + # Data-dense page — use the full page width on large monitors (the base + # stylesheet caps content for readability, which we lift here). + use_full_width() + render_top_bar() + render_search_and_library() diff --git a/src/dlml/web/st_ui/sidebar.py b/src/dlml/web/st_ui/sidebar.py new file mode 100644 index 00000000..df078035 --- /dev/null +++ b/src/dlml/web/st_ui/sidebar.py @@ -0,0 +1,25 @@ +import streamlit as st +from dlml.web.st_core.component import render_added_components_list + + +def render_sidebar() -> None: + """ + Render the sidebar. + + Reserved entirely for the user's selected models — navigation and the + light/dark switch live in the top bar (see + :func:`dlml.web.st_ui.branding.render_top_bar`). A short intro explains the + panel, then :func:`render_added_components_list` renders the selection and + the download tools. + """ + with st.sidebar: + st.markdown("### 🗂️ Selected models") + st.caption( + "Models you add from **Browse & Search** are collected here. Keep " + "them for side-by-side review as you explore, then download their " + "data for your project. Your selection follows you across pages. " + "You can hide this panel any time with the **«** at its top-right " + "corner." + ) + st.divider() + render_added_components_list() diff --git a/src/dlml/web/st_ui/theme.py b/src/dlml/web/st_ui/theme.py new file mode 100644 index 00000000..0f04b458 --- /dev/null +++ b/src/dlml/web/st_ui/theme.py @@ -0,0 +1,718 @@ +""" +theme.py +-------- +The visual design system for the DLML Explorer. + +Streamlit only lets you set *one* default theme (in ``.streamlit/config.toml``), +so a true in-app light/dark switch has to be done as a CSS overlay driven by +session state. That is what this module does: + +* ``apply_theme()`` injects the global stylesheet on every page run. It always + defines the **light** palette (the default), and when the dark flag is set it + appends a second layer that re-binds the same CSS custom properties to the + **dark** palette. Because every rule is written against ``var(--…)`` tokens, + flipping the palette restyles the whole app — no per-rule duplication. +* ``render_theme_toggle()`` is the manual switch (defaults to light) and lives + in the sidebar so it is present on every page. + +Accents differ by theme on purpose: a deep electric blue on light, a luminous +cyan glow on dark. + +The hero/header structure lives in :mod:`dlml.web.st_ui.branding`; the matching +``.dlml-hero*`` rules live here so all styling stays in one place. +""" + +from __future__ import annotations + +import streamlit as st + +# Session-state flag for the manual dark-mode toggle (default: light). +_DARK_KEY = "dlml_dark" + +# Google Fonts — loaded from the viewer's browser (no CSP restriction here): +# Inter for UI text, JetBrains Mono for component IDs / code chips. +_FONT_IMPORT = ( + "@import url('https://fonts.googleapis.com/css2?" + "family=Inter:wght@400;500;600;700;800&" + "family=JetBrains+Mono:wght@400;500;600&display=swap');" +) + +# ── Palettes ────────────────────────────────────────────────────────────────── +# Light is the default; dark is the toggled overlay. Same token names in both so +# the static CSS below never needs to branch on theme. + +# Brand colors, sampled from the NSF NHERI SimCenter logo: the SimCenter red +# (#C84038) is the signature accent used throughout; the NHERI-triangle blue is +# the cool secondary reserved for filled utility actions (Add / Download). The +# -soft / -glow tints are derived from the red so focus rings and washes read as +# one family. +_LIGHT = { + "--bg": "#F4F6FB", + "--bg-grad-a": "#EEF2FB", + "--bg-grad-b": "#F7F8FC", + "--surface": "#FFFFFF", + "--surface-2": "#EEF2F8", + "--surface-3": "#E6EBF3", + "--text": "#171C26", + "--text-muted": "#5B6573", + "--border": "rgba(16,24,40,0.10)", + "--border-strong": "rgba(16,24,40,0.18)", + "--accent": "#C8382E", + "--accent-2": "#1A5CC4", + "--accent-contrast": "#FFFFFF", + "--accent-soft": "rgba(200,56,46,0.10)", + "--accent-glow": "rgba(200,56,46,0.20)", + "--shadow-sm": "0 1px 2px rgba(16,24,40,0.06)", + "--shadow": "0 1px 3px rgba(16,24,40,0.07), 0 12px 28px rgba(16,24,40,0.06)", + "--code-text": "#1A5CC4", +} + +_DARK = { + "--bg": "#0A0D14", + "--bg-grad-a": "#0E1422", + "--bg-grad-b": "#0A0D14", + "--surface": "#141A27", + "--surface-2": "#1B2333", + "--surface-3": "#232C40", + "--text": "#E8ECF3", + "--text-muted": "#9BA6B8", + "--border": "rgba(255,255,255,0.09)", + "--border-strong": "rgba(255,255,255,0.16)", + "--accent": "#E15A4B", + "--accent-2": "#5A8DE8", + "--accent-contrast": "#FFFFFF", + "--accent-soft": "rgba(225,90,75,0.16)", + "--accent-glow": "rgba(225,90,75,0.28)", + "--shadow-sm": "0 1px 2px rgba(0,0,0,0.4)", + "--shadow": "0 2px 6px rgba(0,0,0,0.45), 0 18px 40px rgba(0,0,0,0.40)", + "--code-text": "#8FB4F2", +} + + +def _vars_block(selector: str, variables: dict[str, str]) -> str: + """Render a CSS rule binding the palette tokens on *selector*.""" + body = " ".join(f"{name}:{value};" for name, value in variables.items()) + return f"{selector}{{{body}}}" + + +# ── Static stylesheet ────────────────────────────────────────────────────────── +# Written entirely against the var(--…) tokens above, so it is palette-agnostic. +_STATIC_CSS = """ +html, body, .stApp, [class*="css"] { + font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; +} + +/* Canvas: a soft diagonal wash rather than a flat fill. */ +.stApp { + background: + radial-gradient(1200px 600px at 100% -10%, var(--accent-soft), transparent 60%), + linear-gradient(160deg, var(--bg-grad-a), var(--bg-grad-b)); + background-attachment: fixed; + color: var(--text); +} + +/* Translucent top bar so the canvas wash shows through. */ +[data-testid="stHeader"] { + background: transparent; + backdrop-filter: blur(6px); +} +[data-testid="stToolbar"] { color: var(--text-muted); } + +/* Main column: enough top padding for the brand bar (the first element) to + clear Streamlit's translucent header; the bar then sticks at that same offset + (see the .st-key-dlml-topbar rule) so it pins just under the header. */ +.block-container, +[data-testid="stMainBlockContainer"] { + padding-top: 2.9rem; + padding-bottom: 2.2rem; + max-width: 1180px; +} + +/* ── Vertical rhythm ───────────────────────────────────────────────────────── + Streamlit stacks every element in a flex column with a uniform ~1rem gap, + which reads as a lot of ambient whitespace on data-dense pages. Tighten the + default so elements that belong together sit close; genuine section breaks + are carried deliberately by dividers, card borders, and the hero margin — + not by ambient space. !important because the gap ships on an emotion class we + need to beat regardless of its specificity. */ +[data-testid="stVerticalBlock"] { gap: 0.6rem !important; } +/* Trim only the LAST paragraph's trailing margin so inter-element spacing is + governed by the gap above rather than doubled by it. Multi-paragraph prose + keeps its internal paragraph spacing untouched. */ +[data-testid="stMarkdownContainer"] p:last-child { margin-bottom: 0; } + +/* Section labels ("Model metadata", "Damage states", …) read as headers, so + they get a little more air than the base gap — above (to break from the + previous group) and below (to sit apart from their own content). Padding, not + margin, so it can't collapse away. The model description that follows the + metadata label gets matching breathing room before the Technical-notes row. */ +.dlml-section-label { font-weight: 700; padding: 0.35rem 0 0.3rem; } +.dlml-model-desc { padding-bottom: 0.4rem; } + +/* Typography */ +h1, h2, h3, h4 { + color: var(--text); + font-weight: 700; + letter-spacing: -0.012em; +} +h2 { font-size: 1.55rem; margin-top: 0.4rem; } +h3 { font-size: 1.2rem; } +a { color: var(--accent); text-decoration: none; } +a:hover { text-decoration: underline; } +p, li, span, label, [data-testid="stMarkdownContainer"] { color: var(--text); } + +/* Mono code chips — component IDs read like data, not prose. */ +code, kbd { + font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace !important; + background: var(--surface-2) !important; + color: var(--code-text) !important; + border: 1px solid var(--border); + border-radius: 6px; + padding: 0.08em 0.4em; + font-size: 0.86em; +} + +/* ── Sidebar ─────────────────────────────────────────────────────────────── */ +[data-testid="stSidebar"] { + background: var(--surface); + border-right: 1px solid var(--border); +} +[data-testid="stSidebar"] .block-container { padding-top: 1.4rem; } +/* Navigation lives in the custom top bar (see st_ui.branding.render_top_bar), + so hide Streamlit's automatic multipage list — the sidebar is reserved for + the user's selected models. */ +[data-testid="stSidebarNav"] { display: none; } +/* The sidebar collapse control ("«") is a Material *font* glyph, so it takes + `color`, not `fill`; the default dark ink vanishes against the dark sidebar. + Target the button and all its descendants (the icon span) so it stays visible + in both modes. */ +[data-testid="stSidebarCollapseButton"], +[data-testid="stSidebarCollapseButton"] *, +[data-testid="stSidebarCollapsedControl"], +[data-testid="stSidebarCollapsedControl"] * { + color: var(--text) !important; + fill: var(--text) !important; + opacity: 0.9; +} + +/* Top bar columns keep their content width (no forced shrink) so the nav labels + never clip; on a genuinely narrow window they wrap to a second row instead of + being cut off. */ +/* position:sticky only engages if no ancestor between the sticky element and + the scroll container clips it. Streamlit puts the content in nested blocks; + force the ones above the bar to overflow:visible so the sticky context + reaches the scrolling main area. */ +[data-testid="stMainBlockContainer"], +[data-testid="stMainBlockContainer"] > [data-testid="stVerticalBlock"] { + overflow: visible !important; +} +/* Pin the brand bar just under Streamlit's header (top offset ≈ its height) so + the logos, the "DLML Explorer" wordmark, and the nav stay visible on scroll. + Two selectors for robustness: the keyed container class, and the proven + marker recipe — the direct child of a vertical block that contains our + sticky marker (that's the flow element Streamlit sticky needs). */ +[class*="st-key-dlml-topbar"], +[data-testid="stVerticalBlock"] > div:has(.dlml-sticky-marker) { + position: sticky; + position: -webkit-sticky; + top: 2.875rem; + z-index: 100; +} +[class*="st-key-dlml-topbar"] { + background: var(--surface); + border-bottom: 1px solid var(--border); + box-shadow: var(--shadow-sm); + padding: 0.85rem 0.9rem; + margin-bottom: 0.6rem; +} +.dlml-sticky-marker { height: 0; margin: 0; } +/* Fully collapse the marker's element container so it adds no height (its + residual line-height was pushing the bar's contents toward the bottom). It + stays in the DOM, so the :has() sticky selector still matches. */ +[class*="st-key-dlml-topbar"] [data-testid="stElementContainer"]:has(.dlml-sticky-marker) { + display: none !important; +} +[class*="st-key-dlml-topbar"] [data-testid="stVerticalBlock"] { gap: 0 !important; } +/* Center the logos, wordmark, and nav vertically; let the row WRAP (to at most + two rows) rather than full-stack. Each column is content-width (no shrink → + labels never clip), and the toggle is pushed to the right so it's the first + to wrap, with the two links following onto the second row as the bar narrows. */ +[class*="st-key-dlml-topbar"] [data-testid="stHorizontalBlock"] { + align-items: center !important; + flex-wrap: wrap !important; + row-gap: 0.75rem; +} +[class*="st-key-dlml-topbar"] [data-testid="stColumn"] { + flex: 0 0 auto !important; + width: auto !important; + min-width: 0 !important; +} +[class*="st-key-dlml-topbar"] [data-testid="stColumn"]:last-child { margin-left: auto; } +/* Keep the brand block a fixed size — don't let the logos or wordmark shrink as + the column reflows. */ +.dlml-brand { + display: flex; + align-items: center; + gap: 0.9rem; + flex-shrink: 0; +} +.dlml-brand-name { + font-weight: 800; + font-size: 1.08rem; + letter-spacing: -0.015em; + color: var(--text); + white-space: nowrap; +} +/* White fill kept so the dark Degenkolb/SimCenter wordmarks read in dark mode, + but no border — in light mode the fill matches the white bar, so the logos + sit cleanly on the bar with no visible outline. */ +.dlml-brand-logos { + display: inline-flex; + align-items: center; + gap: 0.9rem; + background: #ffffff; + border-radius: 8px; + padding: 0.3rem 0.6rem; +} +.dlml-brand-logos img { max-width: none !important; flex-shrink: 0; } +/* The sidebar is drag-resizable from its right edge, but Streamlit caps the + expanded width at 600px. Raise that ceiling so it can be dragged to at least + half the page — handy for viewing the selected-model panels (charts + + parameter tables) side by side with the main content. A viewport-relative + cap (not a fixed px) guarantees it always clears 50% on any monitor; scoped + to the expanded state (aria-expanded="true") so the collapse control still + works. */ +[data-testid="stSidebar"][aria-expanded="true"] { + max-width: 60vw !important; +} + +/* ── Buttons ─────────────────────────────────────────────────────────────── */ +/* Descendant combinator (not ">"): a button with a `help` tooltip is wrapped + in an extra div, so a direct-child selector would miss it — which is what + left the download buttons unstyled (white) in dark mode. */ +.stButton button, +.stDownloadButton button { + border-radius: 10px; + border: 1px solid var(--border-strong); + background: var(--surface); + color: var(--text); + font-weight: 600; + transition: transform .08s ease, box-shadow .15s ease, + border-color .15s ease, background .15s ease; +} +.stButton button:hover, +.stDownloadButton button:hover { + border-color: var(--accent); + color: var(--accent); + box-shadow: 0 0 0 3px var(--accent-soft); + transform: translateY(-1px); +} +/* Primary / download actions get the accent fill. */ +.stButton button[kind="primary"], +[data-testid="stBaseButton-primary"], +.stDownloadButton button { + background: linear-gradient(135deg, var(--accent), var(--accent-2)); + color: var(--accent-contrast); + border: none; + box-shadow: 0 6px 16px var(--accent-glow); +} +.stButton button[kind="primary"]:hover, +[data-testid="stBaseButton-primary"]:hover, +.stDownloadButton button:hover { + filter: brightness(1.05); + box-shadow: 0 8px 22px var(--accent-glow); +} +/* The download buttons use a flat solid fill (no gradient), matching the + "Add component" button, with a white label that stays legible in both + themes (the dark theme's --accent-contrast is a near-black ink that would + be unreadable on the fill). */ +.stDownloadButton button, +.stDownloadButton button:hover { + background: var(--accent-2) !important; + background-image: none !important; + color: #ffffff !important; +} +.stButton button:disabled, +.stButton button:disabled:hover { + opacity: 0.55; transform: none; box-shadow: none; + border-color: var(--border); color: var(--text-muted); +} +/* The component-detail "Add component" button uses a flat solid fill instead of + the accent gradient other primary actions get. Targeted via the + st-key-…add_btn_… wrapper class Streamlit adds for the keyed widget. */ +[class*="st-key-"][class*="add_btn_"] button { + background: var(--accent-2) !important; + background-image: none !important; + color: #ffffff !important; + box-shadow: var(--shadow-sm) !important; +} +/* Keep the filled-action button LABELS white in both themes. The label is an + inner

/markdown element, and the global text rule colors it with --text + directly — which an inherited color (even !important on the