feat: add CFD/radiance/urban/community schema files, pres, docs
@@ -1,178 +1,226 @@
|
||||
# bps-schema
|
||||
|
||||
多尺度多性能协同数据模型。
|
||||
建筑性能模拟数据模型。所有类型定义以 draft-2020-12 标准 JSON Schema 为准。
|
||||
|
||||
## 仓库文件
|
||||
## 文件架构
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `schema-building.json` | 建筑几何 + 核心实体(Building, Floor, Room, Aperture, Boundary, Element, Shaft 等) |
|
||||
| `schema-energy.json` | 能耗模拟领域(Material, Construction, RoomProgram, Schedule 等) |
|
||||
采用"尺度 × 模拟域"二维分文件架构。每个尺度按几何和模拟域拆分为独立文件。
|
||||
|
||||
## Schema 规则
|
||||
### 建筑单体尺度
|
||||
|
||||
### 1. JSON 为唯一真理源
|
||||
| 文件 | $id | defs | 说明 |
|
||||
|------|-----|------|------|
|
||||
| `schema-building.json` | bps/building | 30 | 建筑几何实体,对齐 HBJSON 几何层级 |
|
||||
| `schema-energy.json` | bps/energy | 49 | EnergyPlus 能耗模拟参数 |
|
||||
| `schema-radiance.json` | bps/radiance | 25 | Radiance 采光模拟参数 |
|
||||
| `schema-cfd.json` | bps/cfd | 14 | CFD 建筑风环境模拟参数(AI 生成的示例文件,需人工审核后使用) |
|
||||
|
||||
所有类型定义以 JSON 文件为准。TypeScript / Python 等语言的绑定代码均从 JSON 生成,不得手工维护。
|
||||
### 社区尺度
|
||||
|
||||
### 2. 不保存派生数据
|
||||
| 文件 | $id | defs | 说明 |
|
||||
|------|-----|------|------|
|
||||
| `schema-community.json` | bps/community | 7 | 社区几何:Site / Terrain / Road / GreenSpace / WaterBody(AI 生成的示例文件,需人工审核后使用) |
|
||||
| `schema-community-energy.json` | bps/community-energy | 8 | 区域能源:Plant / Network / Pipe / BuildingConnection(AI 生成的示例文件,需人工审核后使用) |
|
||||
| `schema-community-cfd.json` | bps/community-cfd | 13 | 社区风环境:计算域 / 网格 / 湍流 / 边界条件 / 求解器(AI 生成的示例文件,需人工审核后使用) |
|
||||
| `schema-community-microclimate.json` | bps/community-microclimate | 2 | 微气候:UHI 强度 / 风速修正 / 地表反照率(AI 生成的示例文件,需人工审核后使用) |
|
||||
|
||||
Schema 只保存**原始定义数据**,不包含任何可从已有字段计算得出的值。
|
||||
### 城市尺度
|
||||
|
||||
```
|
||||
❌ area — 可由 region 计算
|
||||
❌ volume — 可由 region + height 计算
|
||||
❌ boundingBox — 可由子实体几何计算
|
||||
✅ region — 房间轮廓点集
|
||||
✅ height — 房间高度
|
||||
```
|
||||
| 文件 | $id | defs | 说明 |
|
||||
|------|-----|------|------|
|
||||
| `schema-urban.json` | bps/urban | 3 | 城市几何:ClimateZone / LandUse(AI 生成的示例文件,需人工审核后使用) |
|
||||
| `schema-urban-energy.json` | bps/urban-energy | 5 | 城市能源:需求聚合 / 可再生能源潜力 / 碳平衡(AI 生成的示例文件,需人工审核后使用) |
|
||||
| `schema-urban-cfd.json` | bps/urban-cfd | 15 | 城市风环境:行人高度评估 / 街道峡谷 / 风舒适标准(AI 生成的示例文件,需人工审核后使用) |
|
||||
|
||||
### 3. 字段命名
|
||||
### 聚合入口
|
||||
|
||||
| 规则 | 示例 |
|
||||
|------|------|
|
||||
| 使用 camelCase | `siteBasePoint`, `sillHeight`, `openRatio` |
|
||||
| 避免缩写(广为人知的除外) | `identifier` 而非 `id`, `displayName` 而非 `name` |
|
||||
| 布尔值用正面语义 | `operable` 而非 `nonOperable` |
|
||||
| 枚举值用 snake_case | `exterior_wall`, `curtain_wall` |
|
||||
| 文件 | $id | defs | 说明 |
|
||||
|------|-----|------|------|
|
||||
| `schema-all.json` | bps/all | 11 | 引用以上所有文件,提供完整验证入口 |
|
||||
|
||||
### 4. 类型系统
|
||||
**合计**:11 个领域文件 + 1 个聚合文件,171 个类型定义。
|
||||
|
||||
**基础类型:**
|
||||
- `string` — 字符串
|
||||
- `number` — 浮点数
|
||||
- `integer` — 整数
|
||||
- `boolean` — 布尔值
|
||||
- `object` — 任意对象
|
||||
## Schema 规范
|
||||
|
||||
**复合类型:**
|
||||
- `TypeName[]` — 数组,如 `Polyline3d` 的 `points` 字段类型为 `Point3d[]`
|
||||
- `TypeName` — 引用自定义类型或实体
|
||||
所有文件均遵循 [JSON Schema draft-2020-12](https://json-schema.org/draft/2020-12/release-notes):
|
||||
|
||||
**自定义类型**定义在 `types` 段,描述纯数据结构,不是业务实体。例如 `Point3d`(三维点)、`Polyline3d`(多段线)、`TimePoint`(时刻点)。
|
||||
- `$defs` — 所有类型、枚举、实体的定义区
|
||||
- `$ref` — 类型引用,使用 JSON Schema 标准 `$ref` 机制
|
||||
- `oneOf` — 判别联合体(如边界条件的 5 种类型)
|
||||
- `allOf` — 实体组合(`_IdentifiedObject` + 具体属性)
|
||||
- `const` / `enum` — 类型判别字段和枚举值
|
||||
- `required` — 必填字段
|
||||
- `default` — 缺省值
|
||||
- `minimum` / `maximum` / `exclusiveMinimum` — 数值约束
|
||||
- `pattern` / `minLength` / `maxLength` — 字符串约束
|
||||
- `additionalProperties: false` — 严格模式,禁止额外字段
|
||||
|
||||
### 5. 实体结构
|
||||
## schema-building.json:建筑几何
|
||||
|
||||
```json
|
||||
"EntityName": {
|
||||
"description": "中文说明",
|
||||
"tags": { "scale": ["building"], "simulation": ["energy"] },
|
||||
"attributes": {
|
||||
"fieldName": {
|
||||
"type": "string",
|
||||
"required": true,
|
||||
"unit": "m",
|
||||
"default": 0,
|
||||
"description": "字段说明",
|
||||
"tags": { "scale": ["building"], "simulation": ["energy", "daylight"] }
|
||||
}
|
||||
},
|
||||
"children": {
|
||||
"childName": {
|
||||
"type": "ChildEntity",
|
||||
"multiple": true,
|
||||
"description": "子实体说明"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
对齐 [honeybee-schema](https://github.com/ladybug-tools/honeybee-schema) 几何层级,覆盖 Model → Room → Face → Aperture/Door → Shade 层级。
|
||||
|
||||
- `attributes` — 标量字段(string, number, boolean, enum, 自定义类型)
|
||||
- `children` — 关联的子实体(1:1 或 1:N)
|
||||
- `required: true` — 必填字段,序列化时必须存在
|
||||
- `default` — 缺省值(可选字段未提供时使用)
|
||||
- `unit` — 单位标注(仅文档用途)
|
||||
### 几何原语
|
||||
|
||||
### 6. 判别联合体(Discriminated Union)
|
||||
- `Point3D` — 三维坐标 (x, y, z)
|
||||
- `Face3D` — 平面多边形(boundary + holes + plane)
|
||||
- `Mesh3D` — 三角/四边形网格(vertices + faces + colors)
|
||||
- `Plane` — 平面(法线 n + 原点 o + x 轴)
|
||||
- `Color` — RGBA 颜色
|
||||
|
||||
当一个实体存在多种形态时,使用 `variants` 表达:
|
||||
### 边界条件
|
||||
|
||||
```json
|
||||
"Room": {
|
||||
"discriminator": "creationMethod",
|
||||
"variants": {
|
||||
"planar_extrude": { ... },
|
||||
"mass_slice": { ... },
|
||||
"manual": { ... }
|
||||
}
|
||||
}
|
||||
```
|
||||
- `Outdoors` / `Surface` / `Ground` / `Adiabatic` / `OtherSideTemperature`
|
||||
- Aperture/Door 仅支持 Outdoors 和 Surface 两种
|
||||
|
||||
不同变体可包含不同的必填字段。判别字段的值决定了使用哪个变体。当前使用判别联合体的实体:
|
||||
- `Room` — 判别字段 `creationMethod`,变体:`planar_extrude`、`mass_slice`、`manual`
|
||||
- `Aperture` — 判别字段 `sourceType`,变体:`hosted`、`declarative`
|
||||
### 标识符规范
|
||||
|
||||
### 7. 枚举
|
||||
- `identifier`:`^[.A-Za-z0-9_-]+$`,1-100 字符
|
||||
- `display_name`:无限制(仅用于 UI 展示)
|
||||
- `user_data`:可选字典
|
||||
|
||||
枚举定义在 `enums` 段,每个枚举列出所有允许值。
|
||||
## schema-energy.json:能耗模拟参数
|
||||
|
||||
### 8. 尺度与模拟类型标签(tags)
|
||||
覆盖 HBJSON energy properties 核心实体:材料、构造、时间表、负荷、HVAC、构造集、程序类型。
|
||||
|
||||
每个字段可标注两个维度的标签:
|
||||
### 材料
|
||||
|
||||
**尺度(scale):**
|
||||
| 标签 | 说明 |
|
||||
|------|------|
|
||||
| `building` | 建筑尺度 |
|
||||
| `community` | 社区/街区尺度 |
|
||||
| `urban` | 城市尺度 |
|
||||
- `EnergyMaterial` — 有质量材料
|
||||
- `EnergyMaterialNoMass` — 无质量材料
|
||||
- `EnergyMaterialVegetation` — 植被材料
|
||||
- `EnergyWindowMaterialGlazing` / `Gas` / `GasCustom` / `GasMixture` / `SimpleGlazSys` — 窗材料
|
||||
- `EnergyWindowMaterialBlind` / `Shade` — 百叶/遮阳
|
||||
- `EnergyWindowFrame` — 窗框
|
||||
|
||||
**模拟类型(simulation):**
|
||||
| 标签 | 说明 |
|
||||
|------|------|
|
||||
| `energy` | 能耗模拟 |
|
||||
| `daylight` | 采光分析 |
|
||||
| `solar` | 日照分析 |
|
||||
| `thermal_comfort` | 热舒适分析 |
|
||||
| `carbon` | 碳排放核算 |
|
||||
| `wind` | 风环境模拟 |
|
||||
| `general` | 通用(不特定于某种模拟) |
|
||||
### 构造
|
||||
|
||||
标签用于快速筛选特定尺度或某类模拟分析所需的字段。例如:
|
||||
- `OpaqueConstruction` / `WindowConstruction` / `AirBoundaryConstruction` / `ShadeConstruction`
|
||||
- 各自 Abridged 版本(identifier 引用)
|
||||
- `WindowConstructionShade` / `WindowConstructionDynamic` — 含动态遮阳的窗构造
|
||||
|
||||
```json
|
||||
"northAngle": {
|
||||
"type": "number",
|
||||
"tags": { "simulation": ["energy", "daylight", "solar", "thermal_comfort", "wind"] }
|
||||
}
|
||||
```
|
||||
### 时间表
|
||||
|
||||
表示 `northAngle` 对能耗、采光、日照、热舒适、风环境模拟均有影响。
|
||||
- `ScheduleTypeLimit` / `ScheduleDay` / `ScheduleFixedInterval` / `ScheduleRulesetAbridged` / `ScheduleRule`
|
||||
|
||||
```json
|
||||
"embodiedCarbon": {
|
||||
"type": "number",
|
||||
"tags": { "scale": ["building", "community", "urban"], "simulation": ["carbon"] }
|
||||
}
|
||||
```
|
||||
### 负荷与设定值
|
||||
|
||||
表示 `embodiedCarbon` 适用于建筑/社区/城市三个尺度,仅用于碳排放核算。
|
||||
- `PeopleAbridged` / `LightingAbridged` / `ElectricEquipmentAbridged` / `GasEquipmentAbridged`
|
||||
- `ServiceHotWaterAbridged` / `InfiltrationAbridged` / `VentilationAbridged`
|
||||
- `SetpointAbridged` / `InternalMassAbridged` / `ProcessAbridged`
|
||||
|
||||
### 9. 只描述数据本身
|
||||
### 程序类型 / 构造集 / HVAC
|
||||
|
||||
Schema 只描述**建筑数据本身**,不描述数据的生成方式。
|
||||
- `ProgramTypeAbridged` / `ConstructionSetAbridged`
|
||||
- `DefaultProgramTypesAbridged` / `DefaultConstructionSetAbridged`
|
||||
- `IdealAirSystemAbridged`
|
||||
|
||||
## schema-radiance.json:采光模拟参数
|
||||
|
||||
兼容 HBJSON radiance properties,覆盖 Radiance 材质、构造集、传感器网格、视角。
|
||||
|
||||
### 材质(Modifiers)
|
||||
|
||||
- `Plastic` — 塑料材质(RGB 反射率 + 镜面度 + 粗糙度)
|
||||
- `Metal` — 金属材质(继承 Plastic,镜面度默认 0.9)
|
||||
- `Trans` — 半透明材质(透射漫反射比 + 透射镜面比)
|
||||
- `Glass` — 玻璃材质(RGB 透射率 + 折射率)
|
||||
- `Mirror` — 镜面材质(RGB 反射率)
|
||||
- `Light` / `Glow` — 发光材质(RGB 发射率)
|
||||
- `BSDF` — 双向散射分布函数材质(BSDF XML 数据 + 朝向)
|
||||
- `Void` — 空材质
|
||||
|
||||
### 材质集(Modifier Sets)
|
||||
|
||||
- `WallModifierSetAbridged` / `FloorModifierSetAbridged` / `RoofCeilingModifierSetAbridged`
|
||||
- `ApertureModifierSetAbridged` / `DoorModifierSetAbridged` / `ShadeModifierSetAbridged`
|
||||
- `ModifierSet` — 材质集聚合
|
||||
|
||||
### 传感器与视角
|
||||
|
||||
- `Sensor` / `SensorGrid` — 传感器网格
|
||||
- `View` — Radiance 视角(6 种视角类型)
|
||||
|
||||
## schema-cfd.json:CFD 风环境模拟
|
||||
|
||||
独立领域(非 HBJSON),覆盖 CFD 建筑风环境分析的完整参数体系。
|
||||
|
||||
### 核心参数
|
||||
|
||||
- `WindProfile` — 风剖面(4 种剖面 + 地形类别 + 风向)
|
||||
- `CFDDomain` — 计算域定义
|
||||
- `MeshParameters` — 网格设置(基础网格 + 局部加密 + 壁面层)
|
||||
- `TurbulenceParameters` — 湍流设置(6 种模型 + 壁面函数)
|
||||
- `BoundaryConditions` — 进出口/顶部/侧面/地面/建筑墙面边界类型
|
||||
- `SolverSettings` — 求解器设置(稳态/瞬态 + SIMPLE/PISO + 收敛准则)
|
||||
|
||||
## schema-community*.json:社区尺度
|
||||
|
||||
### 几何(schema-community.json)
|
||||
|
||||
- `Site` — 场地顶级实体,含 2D 边界
|
||||
- `TerrainGrid` / `TerrainTIN` — 高程网格或三角网
|
||||
- `Road` / `GreenSpace` / `WaterBody` — 基础设施
|
||||
|
||||
### 区域能源(schema-community-energy.json)
|
||||
|
||||
- `DistrictEnergy` — 区域能源系统顶级实体
|
||||
- `Plant` — 源站(CHP / Boiler / HeatPump / Chiller / PV 等)
|
||||
- `Network` — 管网(CHW / HW / Steam / Electricity)
|
||||
- `Pipe` / `BuildingConnection` — 管段与建筑接入
|
||||
|
||||
### 风环境(schema-community-cfd.json)
|
||||
|
||||
- `CFDDomain` — 社区尺度计算域
|
||||
- `MeshParameters` — 含局部加密区域
|
||||
- `SolverSettings` / `TurbulenceParameters` / `BoundaryConditions`
|
||||
|
||||
## schema-urban*.json:城市尺度
|
||||
|
||||
### 几何(schema-urban.json)
|
||||
|
||||
- `ClimateZone` — 气候分区(边界 + 气候区代码 + 度日数)
|
||||
- `LandUse` — 用地性质(边界 + 用地类型 + 容积率 + 建筑密度)
|
||||
|
||||
### 能源(schema-urban-energy.json)
|
||||
|
||||
- `UrbanEnergyDemand` — 各用地类型年度能耗
|
||||
- `RenewablePotential` — 屋顶/立面/地面可再生能源潜力
|
||||
- `UrbanEnergyBalance` — 城市能源平衡(自给率 / 碳排放 / EUI)
|
||||
|
||||
### 风环境(schema-urban-cfd.json)
|
||||
|
||||
- `UrbanCFDSettings` — 城市级 CFD 设置
|
||||
- `WindComfortAssessment` — 行人风舒适评估(Laws / NEN_8100 / COST_732 标准)
|
||||
- `MeshParameters` — 含行人高度加密层
|
||||
|
||||
## 使用方式
|
||||
|
||||
各项目从 JSON schema 生成对应语言的类型代码:
|
||||
### 数据验证
|
||||
|
||||
```bash
|
||||
# TypeScript(示例)
|
||||
python3 scripts/gen-ts.py schema-building.json > dist/building.d.ts
|
||||
|
||||
# Python Pydantic(示例)
|
||||
python3 scripts/gen-py.py schema-building.json > archgen_schema/building.py
|
||||
pip install jsonschema
|
||||
python3 -c "
|
||||
import json, jsonschema
|
||||
with open('schema-building.json') as f:
|
||||
schema = json.load(f)
|
||||
with open('model.hbjson') as f:
|
||||
data = json.load(f)
|
||||
jsonschema.validate(data, schema)
|
||||
"
|
||||
```
|
||||
|
||||
具体生成器暂时不在本仓库维护。
|
||||
### TypeScript 类型生成
|
||||
|
||||
---
|
||||
```bash
|
||||
npx quicktype schema-building.json -o dist/building.d.ts --lang typescript
|
||||
npx quicktype schema-energy.json -o dist/energy.d.ts --lang typescript
|
||||
npx quicktype schema-radiance.json -o dist/radiance.d.ts --lang typescript
|
||||
npx quicktype schema-cfd.json -o dist/cfd.d.ts --lang typescript
|
||||
```
|
||||
|
||||
## TODO
|
||||
### Python Pydantic 生成
|
||||
|
||||
- [ ] 定义 building / community / urban 每个尺度的最小字段集合
|
||||
- [ ] 制定 `required` 与 `default` 的判定规则文档
|
||||
- [ ] 梳理影响模拟性能的字段并标注影响等级
|
||||
- [ ] 明确"智能优化"的定义和 scope(形态优化 vs 性能目标驱动)
|
||||
- [ ] 确定优化变量、约束条件在 schema 中的表达方式
|
||||
- [ ] 完善 schema 的 tags 系统(如需新增 `minScale` / `maxScale` / `performanceImpact` / `optimizable` 等属性)
|
||||
```bash
|
||||
pip install datamodel-code-generator
|
||||
datamodel-codegen --input schema-building.json --output dist/building.py --output-model-type pydantic_v2.BaseModel
|
||||
datamodel-codegen --input schema-energy.json --output dist/energy.py --output-model-type pydantic_v2.BaseModel
|
||||
```
|
||||
|
||||
@@ -0,0 +1,349 @@
|
||||
# 基于 HBJSON 扩展多尺度数据模型:方案设计
|
||||
|
||||
> 日期:2026-05-28
|
||||
> 来源:HBJSON Schema 分析与多尺度扩展讨论
|
||||
|
||||
---
|
||||
|
||||
## 一、背景
|
||||
|
||||
HBJSON(Honeybee Schema)是 Ladybug Tools 生态中建筑单体性能模拟的标准数据交换格式。它以 Room → Face → Aperture/Door 的层级结构表达建筑三维几何,并通过 `properties` 扩展点挂载 EnergyPlus/Radiance/DOE-2 的模拟参数。
|
||||
|
||||
本课题"多尺度绿色性能云端模拟"需要在建筑单体之上,覆盖社区和城市尺度的模拟需求。本文先解读 HBJSON 结构,再分析 Ladybug Tools 现有方案(Dragonfly)的能力与局限,最后提出多尺度扩展方案。
|
||||
|
||||
---
|
||||
|
||||
## 二、HBJSON Schema 结构解读
|
||||
|
||||
### 2.1 整体文件结构
|
||||
|
||||
HBJSON 是一个自包含的 JSON 文件,由一个顶层 `Model` 对象统领所有数据。文件不依赖外部引用,所有几何、构造、材料、负荷、时间表均内嵌或通过 identifier 引用。
|
||||
|
||||
### 2.2 顶层 Model 对象
|
||||
|
||||
`Model` 是文件的根节点,核心字段如下:
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| `type` | string | 固定为 `"Model"` |
|
||||
| `version` | string | Schema 版本号,格式 `x.y.z` |
|
||||
| `rooms[]` | Room[] | 建筑房间列表,每个 Room 是一个封闭三维空间 |
|
||||
| `orphaned_faces[]` | Face[] | 无父 Room 的面(不可用于能耗模拟导出) |
|
||||
| `orphaned_apertures[]` | Aperture[] | 无父 Face 的窗 |
|
||||
| `orphaned_doors[]` | Door[] | 无父 Face 的门 |
|
||||
| `orphaned_shades[]` | Shade[] | 无父对象的独立遮阳 |
|
||||
| `shade_meshes[]` | ShadeMesh[] | 网格遮阳(周边建筑、地形) |
|
||||
| `units` | enum | 几何单位:`Meters` / `Millimeters` / `Feet` / `Inches` / `Centimeters` |
|
||||
| `tolerance` | float | 顶点容差(米制默认 0.01),用于几何容差检查 |
|
||||
| `angle_tolerance` | float | 角度容差(默认 1.0 度),用于共线/共面检查 |
|
||||
| `properties` | ModelProperties | 模型级扩展属性(Energy / Radiance / DOE-2) |
|
||||
|
||||
### 2.3 几何层级与嵌套关系
|
||||
|
||||
几何对象按严格的层级嵌套:
|
||||
|
||||
```
|
||||
Model
|
||||
├── rooms[]
|
||||
│ ├── faces[] ← 包围 Room 的面(≥4 个形成封闭体积)
|
||||
│ │ ├── apertures[] ← 窗(开洞,透光)
|
||||
│ │ │ ├── indoor_shades[] ← 室内遮阳(窗帘、窗台)
|
||||
│ │ │ └── outdoor_shades[] ← 室外遮阳(百叶、格栅)
|
||||
│ │ ├── doors[] ← 门
|
||||
│ │ ├── indoor_shades[]
|
||||
│ │ └── outdoor_shades[] ← 室外遮阳(阳台、挑檐)
|
||||
│ ├── indoor_shades[] ← 室内家具/隔断
|
||||
│ └── outdoor_shades[] ← 室外树木/景观
|
||||
└── shade_meshes[] ← 独立网格遮阳
|
||||
```
|
||||
|
||||
各对象核心字段:
|
||||
- `Room`:`faces[]`(面列表)、`multiplier`(标准层复用系数)、`zone`(热区标识)、`story`(楼层标识)、`exclude_floor_area`(是否排除楼板面积)
|
||||
- `Face`:`face_type`(`Wall` / `Floor` / `RoofCeiling` / `AirBoundary`)、`boundary_condition`(边界条件)
|
||||
- `Aperture` / `Door`:`is_operable`(可开启)、`is_glass`(玻璃门)
|
||||
- `Shade`:`is_detached`(是否脱离主体)
|
||||
|
||||
### 2.4 几何原语
|
||||
|
||||
所有 3D 几何基于以下原语构建:
|
||||
|
||||
**Point3D**:三维坐标点
|
||||
```json
|
||||
{ "type": "Point3D", "x": 0.0, "y": 0.0, "z": 0.0 }
|
||||
```
|
||||
|
||||
**Face3D**:平面多边形(Face/Aperture/Door 的几何基础)
|
||||
```json
|
||||
{
|
||||
"type": "Face3D",
|
||||
"boundary": [[x,y,z], [x,y,z], ...], // 外轮廓顶点,≥3 个
|
||||
"holes": [[...], ...], // 孔洞轮廓(可选)
|
||||
"plane": { "n": [0,0,1], "o": [0,0,0] } // 法线 + 原点(可选,自动推导)
|
||||
}
|
||||
```
|
||||
|
||||
**Mesh3D**:三角/四边形网格(ShadeMesh 的几何基础)
|
||||
```json
|
||||
{
|
||||
"type": "Mesh3D",
|
||||
"vertices": [[x,y,z], ...], // 顶点池
|
||||
"faces": [[0,1,2], [1,3,2]], // 面索引(3 或 4 个索引)
|
||||
"colors": [{ "r":255, "g":0, "b":0, "a":255 }] // 顶点/面着色(可选)
|
||||
}
|
||||
```
|
||||
|
||||
### 2.5 边界条件(Boundary Conditions)
|
||||
|
||||
Face 的 `boundary_condition` 字段定义面与外部环境的关系,共 5 种类型:
|
||||
|
||||
| 类型 | 适用场景 | 核心参数 |
|
||||
|---|---|---|
|
||||
| `Outdoors` | 外表面暴露于室外 | `sun_exposure`、`wind_exposure`、`view_factor`(对地视角系数) |
|
||||
| `Surface` | 与另一表面对接 | `boundary_condition_objects`(相邻对象 identifier 列表,Face 为 2 个,SubFace 为 3 个) |
|
||||
| `Ground` | 接地面 | 无附加参数 |
|
||||
| `Adiabatic` | 绝热面(相邻空间温湿度相同) | 无附加参数 |
|
||||
| `OtherSideTemperature` | 给定外侧温度边界 | `heat_transfer_coefficient`(W/m²K)、`temperature`(℃) |
|
||||
|
||||
约束:`AirBoundary` 类型的 Face **必须**有 `Surface` 边界条件,校验器会强制检查。
|
||||
|
||||
### 2.6 Abridged(简写)模式
|
||||
|
||||
HBJSON 的核心设计特征。每个 properties 对象均有两种形态:
|
||||
|
||||
| 模式 | 结构 | 用途 |
|
||||
|---|---|---|
|
||||
| `XXXProperties` | 内嵌完整对象(含所有 Material、Construction 定义) | 运行时内存对象 |
|
||||
| `XXXPropertiesAbridged` | 仅存 identifier 字符串引用 | 序列化到 JSON 文件 |
|
||||
|
||||
工作机制:
|
||||
```
|
||||
Room.properties.energy.construction_set: "Generic2005Construction"
|
||||
│
|
||||
▼
|
||||
Model.properties.energy.construction_sets: [
|
||||
{ "identifier": "Generic2005Construction",
|
||||
"wall_construction": "WallCons_Generic", ... }
|
||||
]
|
||||
Model.properties.energy.constructions: [
|
||||
{ "identifier": "WallCons_Generic", "layers": ["mat_1", "mat_2"] }
|
||||
]
|
||||
Model.properties.energy.materials: [
|
||||
{ "identifier": "mat_1", "type": "EnergyMaterial", ... }
|
||||
]
|
||||
```
|
||||
|
||||
这种"外键引用"模式避免了几何层级的循环嵌套,大幅减小文件体积,是处理大型建筑模型的关键优化。
|
||||
|
||||
### 2.7 扩展属性系统(Properties Extension)
|
||||
|
||||
每个几何层级都通过 `properties` 字段挂载多引擎数据,采用插件式架构:
|
||||
|
||||
```
|
||||
properties:
|
||||
├── energy — EnergyPlus(构造、负荷、HVAC、时间表)
|
||||
├── radiance — Radiance(材质、动态遮阳状态、传感器网格)
|
||||
└── doe2 — DOE-2(历史兼容)
|
||||
```
|
||||
|
||||
各层级的 Energy 属性举例:
|
||||
- `Model` 级:`constructions[]`、`materials[]`、`programs[]`(使用模式)、`schedules[]`、`hvacs[]`
|
||||
- `Room` 级:`construction_set`(引用)、`program_type`(引用)、`hvac`(引用)、`shw`(引用),以及逐条覆盖的 `people`、`lighting`、`equipment`、`infiltration`、`ventilation`、`setpoint`
|
||||
- `Face` 级:`construction`(引用)、`vent_crack`(AirflowNetwork 裂缝)
|
||||
- `Aperture` 级:`construction`(引用)、`vent_opening`
|
||||
- `Shade` 级:`construction`(引用)、`transmittance_schedule`(透射率时间表)、`pv_properties`(光伏)
|
||||
|
||||
### 2.8 标识符与元数据
|
||||
|
||||
所有对象继承 `IDdBaseModel`,统一标识规范:
|
||||
|
||||
| 字段 | 约束 | 说明 |
|
||||
|---|---|---|
|
||||
| `identifier` | `^[.A-Za-z0-9_-]+$`,1-100 字符 | 唯一标识,序列化/引用/跨引擎传递均使用此字段 |
|
||||
| `display_name` | 无限制 | 仅用于 UI 展示,可含中文、空格、特殊字符 |
|
||||
| `user_data` | 可选字典 | 用户自定义附加数据,键值需为基本类型 |
|
||||
|
||||
### 2.9 容差机制
|
||||
|
||||
HBJSON 通过两个参数处理 CAD 几何导入时的浮点误差:
|
||||
|
||||
- `tolerance`(距离容差):顶点坐标差值小于此值视为重合,用于封闭体积检查、法线校正
|
||||
- `angle_tolerance`(角度容差):边方向夹角小于此值视为共线,用于冗余顶点清理
|
||||
|
||||
EnergyPlus 要求几何单位为米且封闭体积,因此 `units: "Meters"` + 合理的 `tolerance` 是导出成功的必要条件。
|
||||
|
||||
---
|
||||
|
||||
## 三、Ladybug Tools 现有方案:Dragonfly
|
||||
|
||||
Dragonfly 是 Ladybug Tools 生态中面向社区/城市尺度的独立项目,schema 定义在 `dragonfly-schema`。
|
||||
|
||||
### 3.1 Dragonfly 层级结构
|
||||
|
||||
```
|
||||
Dragonfly Model
|
||||
├── buildings[]
|
||||
│ ├── unique_stories[]
|
||||
│ │ ├── room_2ds[] ← 2D 楼层板 + 参数化立面
|
||||
│ │ └── multiplier ← 标准层复用
|
||||
│ ├── room_3ds[] ← 可选的完整 Honeybee Room(3D)
|
||||
│ └── roof ← 屋顶几何
|
||||
├── context_shades[] ← 周边建筑/地形(Face3D / Mesh3D)
|
||||
├── units / tolerance / angle_tolerance
|
||||
└── properties ← Energy / Radiance / DOE-2 / Comparison
|
||||
```
|
||||
|
||||
### 3.2 Dragonfly 与 Honeybee 的关系
|
||||
|
||||
```
|
||||
Dragonfly (社区/城市尺度)
|
||||
│ 几何: 2D 楼层板 + 参数化窗户/遮阳/屋顶
|
||||
│ ↓ translate_to_honeybee()
|
||||
▼
|
||||
Honeybee (建筑单体尺度)
|
||||
│ 几何: 完整 3D Face3D
|
||||
│ ↓ to_idf() / to_rad()
|
||||
▼
|
||||
EnergyPlus / Radiance
|
||||
```
|
||||
|
||||
关键事实:Dragonfly 不是 HBJSON 的"上层扩展",而是一个**独立的 schema**,通过 `translate_to_honeybee()` 降维生成 HBJSON。
|
||||
|
||||
### 3.3 Dragonfly 的能力与局限
|
||||
|
||||
| 尺度 | 能力 | 局限 |
|
||||
|---|---|---|
|
||||
| 建筑单体 | Room2D(2D 楼板+参数化立面)→ 可转 Honeybee | 非 3D 精确几何 |
|
||||
| 建筑群 | Building 列表 + ContextShade | 仅遮阳关系,无交互 |
|
||||
| 社区 | 多 Building + reference_vector 定位 | 无管网/微气候/能源系统 |
|
||||
|
||||
### 3.4 缺失层(社区 → 城市之间)
|
||||
|
||||
- **区域能源系统**(District Energy)——冷热源站、管网拓扑、换热站
|
||||
- **场地要素**——道路、绿地、水体、地形
|
||||
- **微气候**——UHI(城市热岛)、风环境耦合
|
||||
- **城市尺度**——土地利用分区、交通、人口密度
|
||||
- **跨建筑交互**——阴影投射、反射辐射、废热排放
|
||||
|
||||
---
|
||||
|
||||
## 四、扩展方案对比
|
||||
|
||||
### 4.1 方案对比
|
||||
|
||||
| 方案 | 核心思路 | 优势 | 劣势 |
|
||||
|---|---|---|---|
|
||||
| 一:HBJSON 之上增加 Site 层 | 包裹 MultiScaleModel,内嵌 HBJSON | 完全向后兼容,单文件云端模拟 | 文件体积较大 |
|
||||
| 二:扩展 Dragonfly properties | 在 Dragonfly Model 增加城市扩展 | 与 Ladybug Tools 原生兼容 | Room2D 几何精度不足,HBJSON 反向映射不完美 |
|
||||
| 三:独立格式 + HBJSON 引用 | CityModel 引用外部 hbjson 文件 | 解耦,可版本控制 | 多文件依赖,不适合云端一键模拟 |
|
||||
|
||||
### 4.2 推荐方案:方案一的增强版
|
||||
|
||||
在 HBJSON 之上增加 `MultiScaleModel` 容器,保持 HBJSON 结构不变,新增 Site 和 Urban 层级。
|
||||
|
||||
设计原则:
|
||||
1. 完全向后兼容——`sites[].buildings[]` 是标准 HBJSON Model,现有工具无需修改
|
||||
2. 增量扩展——只增加 Site 和 Urban 两个新层级
|
||||
3. 可分级模拟——可只取一个 Site 做社区模拟,也可取全部做城市模拟
|
||||
|
||||
---
|
||||
|
||||
## 五、MultiScaleModel Schema 设计
|
||||
|
||||
### 5.1 顶层结构
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "MultiScaleModel",
|
||||
"version": "0.1.0",
|
||||
"units": "Meters",
|
||||
"tolerance": 0.01,
|
||||
"sites": [...],
|
||||
"properties": { "urban": {...} }
|
||||
}
|
||||
```
|
||||
|
||||
### 5.2 Site 结构(社区/街区尺度)
|
||||
|
||||
```
|
||||
Site
|
||||
├── identifier ← 场地标识
|
||||
├── boundary ← 2D 边界 [[x,y], ...]
|
||||
├── buildings[] ← HBJSON Model(内嵌)
|
||||
├── context_shades[] ← 周边建筑/地形
|
||||
│
|
||||
├── terrain ← 地形
|
||||
│ ├── type: "Grid" | "TIN"
|
||||
│ └── data ← 高程网格或三角网
|
||||
│
|
||||
├── infrastructure ← 基础设施
|
||||
│ ├── roads[] ← 道路中心线 + 断面
|
||||
│ ├── green_spaces[] ← 绿地(Face3D + 植被类型)
|
||||
│ └── water_bodies[] ← 水体
|
||||
│
|
||||
├── district_energy ← 区域能源系统
|
||||
│ ├── plants[] ← 源站(CHP、地源热泵、锅炉房)
|
||||
│ │ ├── type, capacity, cop, fuel_type
|
||||
│ │ └── location [x, y, z]
|
||||
│ ├── networks[] ← 管网
|
||||
│ │ ├── type: "CHW" | "HW" | "Steam"
|
||||
│ │ ├── pipes[] ← 管段(起点、终点、管径、保温)
|
||||
│ │ └── supply_temp, return_temp
|
||||
│ └── connections[] ← 建筑-管网接入
|
||||
│ ├── building_ref, network_ref, flow_rate
|
||||
│
|
||||
└── properties
|
||||
├── energy
|
||||
└── microclimate ← 微气候
|
||||
├── uhi_model ← 热岛强度参数
|
||||
└── wind_model ← 风场参数
|
||||
```
|
||||
|
||||
### 5.3 Urban 结构(城市尺度)
|
||||
|
||||
```
|
||||
properties.urban
|
||||
├── climate_zones[] ← 气候分区
|
||||
├── land_use[] ← 用地性质
|
||||
└── schedule ← 城市级时间表(交通、人口)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、关键技术决策
|
||||
|
||||
| 决策点 | 推荐 | 理由 |
|
||||
|---|---|---|
|
||||
| 建筑几何引用 | 内嵌 HBJSON | 保持与 HBJSON 自包含格式的一致性,减少解析复杂度;多文件方案需额外处理文件依赖和版本一致性 |
|
||||
| 几何精度 | 社区用 Dragonfly Room2D,城市用简模 | 城市尺度不需要 Face 级精度,简化计算 |
|
||||
| 微气候耦合 | 参数化而非 CFD | CFD 耦合计算量过大,用 UHI 修正系数 |
|
||||
| 区域能源 | 拓扑网络 + 简化水力模型 | 不需要详细水力计算,关注热平衡 |
|
||||
| 向后兼容 | 完全保留 HBJSON 结构 | 现有 honeybee 工具链零修改 |
|
||||
|
||||
---
|
||||
|
||||
## 七、下一步:新增 community/urban 尺度实体
|
||||
|
||||
当前 `schema-building.json` 已完全对齐 HBJSON(建筑单体几何尺度)。社区和城市尺度的实体定义需要新建独立的 `schema-community.json` / `schema-urban.json`,不应直接混入 schema-building.json,以保持与 HBJSON 的严格兼容。
|
||||
|
||||
除几何外,各模拟领域均已独立建库,且按尺度拆分:
|
||||
|
||||
- 建筑尺度:`schema-building.json`(几何)/ `schema-energy.json` / `schema-radiance.json` / `schema-cfd.json`
|
||||
- 社区尺度:`schema-community.json`(几何)/ `schema-community-energy.json` / `schema-community-cfd.json` / `schema-community-microclimate.json`
|
||||
- 城市尺度:`schema-urban.json`(几何)/ `schema-urban-energy.json` / `schema-urban-cfd.json`
|
||||
|
||||
新增实体规划:
|
||||
|
||||
| 层级 | 文件 | 实体 |
|
||||
|---|---|---|
|
||||
| Site 几何 | `schema-community.json` | Site / TerrainGrid / TerrainTIN / Road / GreenSpace / WaterBody |
|
||||
| 区域能源 | `schema-community-energy.json` | DistrictEnergy / Plant / Network / Pipe / BuildingConnection |
|
||||
| 社区 CFD | `schema-community-cfd.json` | CommunityCFDSettings / WindProfile / CFDDomain / Mesh / Turbulence |
|
||||
| 微气候 | `schema-community-microclimate.json` | MicroClimate |
|
||||
| 城市几何 | `schema-urban.json` | ClimateZone / LandUse |
|
||||
| 城市能源 | `schema-urban-energy.json` | UrbanEnergyDemand / RenewablePotential / UrbanEnergyBalance |
|
||||
| 城市 CFD | `schema-urban-cfd.json` | UrbanCFDSettings / WindComfortAssessment |
|
||||
|
||||
MultiScaleModel 作为顶层容器,通过引用方式关联三个尺度:
|
||||
- `sites[].buildings[]` → 引用 bps/building 的 HBJSON Model
|
||||
- `sites[].terrain/infrastructure` → 由 bps/community 定义
|
||||
- `properties.urban` → 由 bps/urban 定义
|
||||
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
@@ -0,0 +1,723 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>bps-schema 数据模型方案介绍</title>
|
||||
<link rel="stylesheet" href="./assets/base.css">
|
||||
<style>aside.notes, .notes { display: none !important; }</style>
|
||||
</head>
|
||||
<body data-themes="cctc-cadg,minimal-white,corporate-clean" data-theme-base="./assets/themes/">
|
||||
<div class="deck tpl-cctc-cadg">
|
||||
|
||||
<link rel="stylesheet" id="theme-link" href="./assets/themes/cctc-cadg.css">
|
||||
|
||||
<!-- ==================== 封面 ==================== -->
|
||||
<section class="slide slide-cover" data-anim="fade-up" data-title="封面">
|
||||
<img class="cover-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<div class="cover-content">
|
||||
<div class="cover-org">多尺度多性能协同模型自动生成与智能优化</div>
|
||||
<div class="cover-title">bps-schema:建筑性能模拟数据模型</div>
|
||||
<div class="cover-subtitle">多尺度协同设计标准方案</div>
|
||||
<div class="cover-presenter">
|
||||
<p>林波整理</p>
|
||||
<p>2026年5月28日</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dot-grid"></div>
|
||||
<div class="cover-url">www.cadreg.com.cn</div>
|
||||
<aside class="notes">介绍 bps-schema 项目的背景、5月28日课题协同会议决议、数据格式方案、文件架构和下一步计划。</aside>
|
||||
</section>
|
||||
|
||||
<!-- ==================== 目录 ==================== -->
|
||||
<section class="slide slide-toc" data-anim="fade-up" data-title="目录">
|
||||
<div class="toc-title">目录</div>
|
||||
<ul class="toc-list">
|
||||
<li><span class="toc-num">一、</span>项目背景与课题分工<span class="toc-sub">—— 课题2/3/4技术路线与协作</span></li>
|
||||
<li><span class="toc-num">二、</span>数据格式决议<span class="toc-sub">—— HBJSON基础与多尺度扩展方案</span></li>
|
||||
<li><span class="toc-num">三、</span>Schema 标准与规范<span class="toc-sub">—— draft-2020-12 与设计原则</span></li>
|
||||
<li><span class="toc-num">四、</span>文件架构与结构<span class="toc-sub">—— 尺度 × 领域二维体系</span></li>
|
||||
<li><span class="toc-num">五、</span>集成与使用方式<span class="toc-sub">—— 验证、代码生成、平台集成</span></li>
|
||||
<li><span class="toc-num">六、</span>下一步工作计划<span class="toc-sub">—— 待办事项与时间节点</span></li>
|
||||
</ul>
|
||||
<img class="toc-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
</section>
|
||||
|
||||
<!-- ==================== 一、项目背景与课题分工 ==================== -->
|
||||
<section class="slide slide-section" data-anim="fade-up" data-title="一、项目背景与课题分工">
|
||||
<div class="section-body">
|
||||
<div class="section-num">一</div>
|
||||
<div class="section-main-title">项目背景与课题分工</div>
|
||||
<div class="section-subtitle">—— 课题2/3/4技术路线与协作</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 课题2目标 -->
|
||||
<section class="slide slide-content" data-anim="fade-up" data-title="课题2目标">
|
||||
<div class="page-header"></div>
|
||||
<div class="page-title">一、课题2研究目标</div>
|
||||
<div class="page-subtitle">1.1 多尺度多性能协同模型自动生成与智能优化</div>
|
||||
<div class="page-body">
|
||||
<div class="content-card" style="padding:3vh;border-left:0.6vh solid var(--accent);background:var(--bg-card);margin-bottom:2vh;">
|
||||
<p style="font-size:2.8vh;line-height:1.6;margin:0;">
|
||||
针对我国现有绿色建筑模型构建机理缺失、数据集成度不足、模型自动生成识别方法缺失等问题,依据多模态数据融合与智能生成算法理论,运用多源异构数据集成与模型自动生成技术方法,开展基于多模态数据融合、多尺度模型自动适应、多性能协同优化的绿色建筑模型自动生成方法与智能优化研究。
|
||||
</p>
|
||||
</div>
|
||||
<div class="three-col text-compact">
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">建筑尺度</div>
|
||||
<div class="comp-box-desc">建筑层级绿色性能模拟模型生成与优化</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">社区尺度</div>
|
||||
<div class="comp-box-desc">社区层级绿色性能耦合模型生成与优化</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">城市尺度</div>
|
||||
<div class="comp-box-desc">城市层级绿色性能协同模型生成与优化</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
<aside class="notes">课题2的核心目标是在建筑、社区、城市三个尺度上,建立绿色建筑性能模拟模型的自动生成方法和智能优化体系。这是bps-schema项目要支撑的核心业务场景。</aside>
|
||||
</section>
|
||||
|
||||
<!-- 课题分工 -->
|
||||
<section class="slide slide-content" data-anim="fade-up" data-title="课题分工">
|
||||
<div class="page-header"></div>
|
||||
<div class="page-title">一、课题分工与技术路线</div>
|
||||
<div class="page-subtitle">1.2 5月28日课题协同会议决议</div>
|
||||
<div class="page-body">
|
||||
<table class="sci-table" style="margin-bottom:2.5vh;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:18%">课题</th>
|
||||
<th style="width:18%">定位</th>
|
||||
<th style="width:22%">核心任务</th>
|
||||
<th style="width:22%">优化目标</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>课题二</strong></td>
|
||||
<td>方案生成与优化</td>
|
||||
<td>CAD/图片→绿色建筑模型自动生成</td>
|
||||
<td>形态合理性、设计品质</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>课题三</strong></td>
|
||||
<td>性能优化</td>
|
||||
<td>基于生成模型的优化算法提升</td>
|
||||
<td>能耗、碳排放等考核指标</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>课题四</strong></td>
|
||||
<td>计算引擎</td>
|
||||
<td>性能仿真计算(能耗、风场等)</td>
|
||||
<td>计算精度与效率</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="two-col text-compact">
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">协作流程</div>
|
||||
<div class="comp-box-desc">
|
||||
课题二生成模型 → 课题三性能优化 → 课题四计算反馈 → 迭代循环<br><br>
|
||||
课题二侧重方案生成,性能评估仅用于方案筛选与排序;课题三侧重基于优化算法的性能提升。
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">成果集成平台</div>
|
||||
<div class="comp-box-desc">
|
||||
由构力提供统一云端集成平台<br>
|
||||
各课题以API形式暴露算法/服务<br>
|
||||
平台展示:课题一数据集、课题二/三生成与优化、课题四仿真工具、课题五评审平台
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
<aside class="notes">5月28日会议明确了三个课题的分工边界。课题二做生成,课题三做优化,课题四做计算。最终成果是构力提供的云端集成平台,各课题通过API接入。</aside>
|
||||
</section>
|
||||
|
||||
<!-- ==================== 二、数据格式决议 ==================== -->
|
||||
<section class="slide slide-section" data-anim="fade-up" data-title="二、数据格式决议">
|
||||
<div class="section-body">
|
||||
<div class="section-num">二</div>
|
||||
<div class="section-main-title">数据格式决议</div>
|
||||
<div class="section-subtitle">—— HBJSON基础与多尺度扩展方案</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 数据格式决议总览 -->
|
||||
<section class="slide slide-content" data-anim="fade-up" data-title="数据格式决议">
|
||||
<div class="page-header"></div>
|
||||
<div class="page-title">二、数据格式决议</div>
|
||||
<div class="page-subtitle">2.1 多尺度格式方案</div>
|
||||
<div class="page-body">
|
||||
<table class="sci-table" style="margin-bottom:2.5vh;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:20%">尺度</th>
|
||||
<th style="width:25%">几何格式</th>
|
||||
<th style="width:25%">参数格式</th>
|
||||
<th style="width:30%">说明</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>建筑</strong></td>
|
||||
<td>HB JSON</td>
|
||||
<td>HB JSON</td>
|
||||
<td>Honeybee JSON为基础格式</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>社区/城市</strong></td>
|
||||
<td>3DM</td>
|
||||
<td>HB JSON+</td>
|
||||
<td>HB JSON处理大规模几何效率不足,采用数形结合方案</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="three-col text-compact">
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">数据流转</div>
|
||||
<div class="comp-box-desc">
|
||||
HB JSON → IDF:课题二生成的模型转为IDF供课题四计算引擎使用<br><br>
|
||||
计算结果以JSON格式返回课题二、三
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">接口方式</div>
|
||||
<div class="comp-box-desc">
|
||||
倾向RESTful API<br><br>
|
||||
各课题算法/服务以API形式暴露,供构力平台调用
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">牵头单位</div>
|
||||
<div class="comp-box-desc">
|
||||
课题二、四牵头推进格式方案确定<br><br>
|
||||
一周内明确HB JSON格式支持情况
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
<aside class="notes">数据格式是本次会议的核心决议之一。建筑尺度用HB JSON,社区城市用3DM加HB JSON+的数形结合。接口倾向RESTful API,由构力提供统一平台。</aside>
|
||||
</section>
|
||||
|
||||
<!-- HBJSON结构解读 -->
|
||||
<section class="slide slide-content" data-anim="fade-up" data-title="HBJSON结构">
|
||||
<div class="page-header"></div>
|
||||
<div class="page-title">二、HBJSON 结构解读</div>
|
||||
<div class="page-subtitle">2.2 Honeybee Schema 核心设计</div>
|
||||
<div class="page-body">
|
||||
<div class="two-col">
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">几何层级</div>
|
||||
<div class="comp-box-desc text-compact">
|
||||
Model → Room → Face → Aperture/Door → Shade<br><br>
|
||||
<strong>Room</strong>:封闭三维空间,faces[]≥4<br>
|
||||
<strong>Face</strong>:Wall/Floor/RoofCeiling/AirBoundary<br>
|
||||
<strong>Aperture</strong>:窗(开洞,透光)<br>
|
||||
<strong>Door</strong>:门(可开启、玻璃门)<br>
|
||||
<strong>Shade</strong>:室内外遮阳构件
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">关键设计特征</div>
|
||||
<div class="comp-box-desc text-compact">
|
||||
<strong>Abridged模式</strong>:identifier外键引用,避免循环嵌套,减小文件体积<br><br>
|
||||
<strong>Properties扩展</strong>:energy/radiance/doe2 插件式挂载<br><br>
|
||||
<strong>容差机制</strong>:tolerance + angle_tolerance 处理CAD浮点误差<br><br>
|
||||
<strong>5种边界条件</strong>:Outdoors / Surface / Ground / Adiabatic / OtherSideTemp
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
<aside class="notes">HBJSON是建筑尺度的基础格式。核心特点是Abridged外键引用模式和Properties扩展系统。bps-schema的building文件完全对齐这个结构。</aside>
|
||||
</section>
|
||||
|
||||
<!-- ==================== 三、Schema 标准与规范 ==================== -->
|
||||
<section class="slide slide-section" data-anim="fade-up" data-title="三、Schema标准与规范">
|
||||
<div class="section-body">
|
||||
<div class="section-num">三</div>
|
||||
<div class="section-main-title">Schema 标准与规范</div>
|
||||
<div class="section-subtitle">—— draft-2020-12 与设计原则</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="slide slide-content" data-anim="fade-up" data-title="标准规范">
|
||||
<div class="page-header"></div>
|
||||
<div class="page-title">三、Schema 标准与规范</div>
|
||||
<div class="page-subtitle">3.1 格式选型与设计原则</div>
|
||||
<div class="page-body">
|
||||
<div class="three-col">
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">draft-2020-12</div>
|
||||
<div class="comp-box-desc text-compact">
|
||||
全库采用 JSON Schema draft-2020-12 标准。<br><br>
|
||||
$defs — 类型定义区<br>
|
||||
$ref — 标准引用机制<br>
|
||||
oneOf — 判别联合体<br>
|
||||
allOf — 实体组合<br>
|
||||
const/enum — 枚举<br>
|
||||
required — 必填字段
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">设计原则</div>
|
||||
<div class="comp-box-desc text-compact">
|
||||
• 几何与模拟域解耦<br>
|
||||
• 尺度 × 领域二维分文件<br>
|
||||
• 严格模式,禁止额外字段<br>
|
||||
• 标识符统一规范<br>
|
||||
^[.A-Za-z0-9_-]+$<br>
|
||||
1-100 字符
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">兼容性</div>
|
||||
<div class="comp-box-desc text-compact">
|
||||
building / energy / radiance 三文件对齐 honeybee-schema (HBJSON 开源定义)。<br><br>
|
||||
CFD、community、urban 为独立领域扩展,非 HBJSON。
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ==================== 四、文件架构与结构 ==================== -->
|
||||
<section class="slide slide-section" data-anim="fade-up" data-title="四、文件架构与结构">
|
||||
<div class="section-body">
|
||||
<div class="section-num">四</div>
|
||||
<div class="section-main-title">文件架构与结构</div>
|
||||
<div class="section-subtitle">—— 尺度 × 领域二维体系</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 文件架构总览 -->
|
||||
<section class="slide slide-content" data-anim="fade-up" data-title="文件架构总览">
|
||||
<div class="page-header"></div>
|
||||
<div class="page-title">四、文件架构总览</div>
|
||||
<div class="page-subtitle">4.1 11 领域文件 + 1 聚合入口</div>
|
||||
<div class="page-body">
|
||||
<table class="sci-table" style="margin-bottom:2vh;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:18%">尺度</th>
|
||||
<th style="width:22%">几何文件</th>
|
||||
<th style="width:18%">类型数</th>
|
||||
<th style="width:42%">模拟域文件</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>建筑</strong></td>
|
||||
<td>schema-building.json</td>
|
||||
<td>30</td>
|
||||
<td>schema-energy (49) / schema-radiance (25) / schema-cfd (14)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>社区</strong></td>
|
||||
<td>schema-community.json</td>
|
||||
<td>7</td>
|
||||
<td>schema-community-energy (8) / schema-community-cfd (13) / schema-community-microclimate (2)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>城市</strong></td>
|
||||
<td>schema-urban.json</td>
|
||||
<td>3</td>
|
||||
<td>schema-urban-energy (5) / schema-urban-cfd (15)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>聚合</strong></td>
|
||||
<td colspan="3">schema-all.json — 引用全部11个文件,171个类型定义</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div style="font-size:2vh;color:#888;">* CFD、community、urban 系列为 AI 生成的示例文件,需人工审核后使用</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Building 几何层级 -->
|
||||
<section class="slide slide-content" data-anim="fade-up" data-title="Building几何">
|
||||
<div class="page-header"></div>
|
||||
<div class="page-title">四、Building 几何层级</div>
|
||||
<div class="page-subtitle">4.2 HBJSON 完全对齐(30 类型定义)</div>
|
||||
<div class="page-body">
|
||||
<div class="two-col">
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">层级关系</div>
|
||||
<div class="comp-box-desc text-compact">
|
||||
Model → Room → Face → Aperture / Door → Shade<br><br>
|
||||
<strong>Room</strong>:faces[] (≥4), multiplier, zone, story, shades<br>
|
||||
<strong>Face</strong>:face_type, boundary_condition, apertures[], doors[]<br>
|
||||
<strong>Aperture</strong>:is_operable, indoor/outdoor_shades[]<br>
|
||||
<strong>Door</strong>:is_glass, indoor/outdoor_shades[]<br>
|
||||
<strong>Shade</strong>:is_detached
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">边界条件(5 种)</div>
|
||||
<div class="comp-box-desc text-compact">
|
||||
<strong>Outdoors</strong> — sun/wind_exposure, view_factor<br>
|
||||
<strong>Surface</strong> — boundary_condition_objects<br>
|
||||
<strong>Ground</strong> — 无参数<br>
|
||||
<strong>Adiabatic</strong> — 无参数<br>
|
||||
<strong>OtherSideTemperature</strong> — htc + temperature<br><br>
|
||||
<strong>几何原语</strong>:Point3D / Face3D / Plane / Mesh3D / Color
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Energy / Radiance / CFD -->
|
||||
<section class="slide slide-content" data-anim="fade-up" data-title="Energy/Radiance/CFD">
|
||||
<div class="page-header"></div>
|
||||
<div class="page-title">四、模拟参数覆盖</div>
|
||||
<div class="page-subtitle">4.3 Energy / Radiance / CFD</div>
|
||||
<div class="page-body">
|
||||
<div class="three-col text-compact">
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">Energy(49 defs)</div>
|
||||
<div class="comp-box-desc">
|
||||
材料:11 种(常规/无质量/植被/窗材)<br>
|
||||
构造:6 类 + Abridged 引用模式<br>
|
||||
时间表:5 类<br>
|
||||
负荷:People/Lighting/Equipment<br>
|
||||
HVAC:IdealAirSystem<br>
|
||||
构造集 / 程序类型
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">Radiance(25 defs)</div>
|
||||
<div class="comp-box-desc">
|
||||
材质:Plastic/Metal/Glass/BSDF 等 8 种<br>
|
||||
材质集:Wall/Floor/RoofCeiling<br>
|
||||
Aperture/Door/Shade<br>
|
||||
传感器:Sensor / SensorGrid<br>
|
||||
视角:View(6 种类型)
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">CFD*(14 defs)</div>
|
||||
<div class="comp-box-desc">
|
||||
风剖面:4 种 + 地形类别<br>
|
||||
计算域 / 网格(+wall layer)<br>
|
||||
湍流:6 种模型 + 壁面函数<br>
|
||||
边界条件 / 求解器<br>
|
||||
(AI 示例文件)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 社区+城市实体 -->
|
||||
<section class="slide slide-content" data-anim="fade-up" data-title="社区城市实体">
|
||||
<div class="page-header"></div>
|
||||
<div class="page-title">四、社区与城市尺度实体</div>
|
||||
<div class="page-subtitle">4.4 多尺度扩展(AI 示例,需审核)</div>
|
||||
<div class="page-body">
|
||||
<div class="two-col">
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">社区尺度(4 文件,30 defs)</div>
|
||||
<div class="comp-box-desc text-compact">
|
||||
<strong>community</strong>:Site / TerrainGrid / TerrainTIN<br>
|
||||
Road / GreenSpace / WaterBody<br>
|
||||
<strong>community-energy</strong>:DistrictEnergy<br>
|
||||
Plant(10种) / Network / Pipe / Connection<br>
|
||||
<strong>community-cfd</strong>:计算域/网格/湍流/求解器<br>
|
||||
<strong>community-microclimate</strong>:UHI 强度/反照率
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">城市尺度(3 文件,23 defs)</div>
|
||||
<div class="comp-box-desc text-compact">
|
||||
<strong>urban</strong>:ClimateZone / LandUse<br>
|
||||
气候分区 / 用地性质<br>
|
||||
<strong>urban-energy</strong>:需求聚合<br>
|
||||
可再生能源潜力 / 碳平衡<br>
|
||||
<strong>urban-cfd</strong>:行人风舒适评估<br>
|
||||
(Laws/Davenport/NEN_8100 标准)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ==================== 五、集成与使用方式 ==================== -->
|
||||
<section class="slide slide-section" data-anim="fade-up" data-title="五、集成与使用方式">
|
||||
<div class="section-body">
|
||||
<div class="section-num">五</div>
|
||||
<div class="section-main-title">集成与使用方式</div>
|
||||
<div class="section-subtitle">—— 验证、代码生成、平台集成</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="slide slide-content" data-anim="fade-up" data-title="使用方式">
|
||||
<div class="page-header"></div>
|
||||
<div class="page-title">五、使用方式</div>
|
||||
<div class="page-subtitle">5.1 数据验证与代码生成</div>
|
||||
<div class="page-body">
|
||||
<div class="three-col text-compact">
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">数据验证</div>
|
||||
<div class="comp-box-desc">
|
||||
pip install jsonschema<br><br>
|
||||
python3 -c "<br>
|
||||
import json, jsonschema<br>
|
||||
with open('model.hbjson') as f:<br>
|
||||
jsonschema.validate(<br>
|
||||
json.load(f),<br>
|
||||
json.load(open(<br>
|
||||
'schema-building.json')))"
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">TypeScript 生成</div>
|
||||
<div class="comp-box-desc">
|
||||
npx quicktype <br>
|
||||
schema-building.json<br>
|
||||
-o dist/building.d.ts<br>
|
||||
--lang typescript<br><br>
|
||||
npx quicktype ...<br>
|
||||
schema-energy.json<br>
|
||||
-o dist/energy.d.ts
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">Python Pydantic 生成</div>
|
||||
<div class="comp-box-desc">
|
||||
pip install datamodel-codegen<br><br>
|
||||
datamodel-codegen \<br>
|
||||
--input schema-building.json \<br>
|
||||
--output dist/building.py \<br>
|
||||
--output-model-type pydantic_v2
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 平台集成架构 -->
|
||||
<section class="slide slide-content" data-anim="fade-up" data-title="平台集成">
|
||||
<div class="page-header"></div>
|
||||
<div class="page-title">五、平台集成架构</div>
|
||||
<div class="page-subtitle">5.2 构力云端平台与各课题协作</div>
|
||||
<div class="page-body">
|
||||
<div class="research-framework" style="margin-bottom:2.5vh;">
|
||||
<div class="rf-column">
|
||||
<div class="rf-header">课题二</div>
|
||||
<div class="rf-body text-compact"><p>方案生成<br>CAD/图片→HB JSON</p></div>
|
||||
</div>
|
||||
<div class="rf-column rf-arrow">→</div>
|
||||
<div class="rf-column">
|
||||
<div class="rf-header">课题三</div>
|
||||
<div class="rf-body text-compact"><p>性能优化<br>遗传算法/粒子群</p></div>
|
||||
</div>
|
||||
<div class="rf-column rf-arrow">→</div>
|
||||
<div class="rf-column">
|
||||
<div class="rf-header">课题四</div>
|
||||
<div class="rf-body text-compact"><p>计算引擎<br>能耗/风场/采光</p></div>
|
||||
</div>
|
||||
<div class="rf-column rf-arrow">→</div>
|
||||
<div class="rf-column">
|
||||
<div class="rf-header">构力平台</div>
|
||||
<div class="rf-body text-compact"><p>云端集成<br>API调用与展示</p></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="two-col text-compact">
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">数据流转协议</div>
|
||||
<div class="comp-box-desc">
|
||||
1. 课题二生成 HB JSON 模型<br>
|
||||
2. 转为 IDF 供课题四计算<br>
|
||||
3. 课题四返回 JSON 性能结果<br>
|
||||
4. 课题三基于结果进行优化<br>
|
||||
5. RESTful API 暴露服务接口
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">与 bps-schema 的关系</div>
|
||||
<div class="comp-box-desc">
|
||||
bps-schema 提供统一数据格式定义<br><br>
|
||||
• 课题二:生成 HB JSON 合规数据<br>
|
||||
• 课题三:优化结果写入扩展字段<br>
|
||||
• 课题四:计算引擎读取 schema 验证输入
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
<aside class="notes">这一页展示了完整的协作流程。bps-schema是整个数据流转的格式基础,确保各课题之间数据可互操作。</aside>
|
||||
</section>
|
||||
|
||||
<!-- ==================== 六、下一步工作计划 ==================== -->
|
||||
<section class="slide slide-section" data-anim="fade-up" data-title="六、下一步工作计划">
|
||||
<div class="section-body">
|
||||
<div class="section-num">六</div>
|
||||
<div class="section-main-title">下一步工作计划</div>
|
||||
<div class="section-subtitle">—— 待办事项与时间节点</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="slide slide-content" data-anim="fade-up" data-title="待办事项">
|
||||
<div class="page-header"></div>
|
||||
<div class="page-title">六、下一步工作计划</div>
|
||||
<div class="page-subtitle">6.1 会议待办与技术路线固化</div>
|
||||
<div class="page-body">
|
||||
<div class="three-col text-compact">
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">技术路线固化</div>
|
||||
<div class="comp-box-desc">
|
||||
一是课题二与课题三形成书面技术路线说明,明确优化变量、目标函数和方法<br><br>
|
||||
二是提交项目组确认
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">格式方案确定</div>
|
||||
<div class="comp-box-desc">
|
||||
一是各课题评估HB JSON格式可行性与工作量<br><br>
|
||||
二是提交转换器开发方案(HB JSON ↔ IDF / 3DM ↔ HB JSON+)<br><br>
|
||||
三是一周内明确格式支持情况
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">API与平台对接</div>
|
||||
<div class="comp-box-desc">
|
||||
一是组织课题二/三/四与构力团队完成API接口详细方案设计<br><br>
|
||||
二是各课题本周内向构力提交数据格式和API需求清单<br><br>
|
||||
三是课题一本周内向各课题提供数据需求表格
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
<aside class="notes">三个方向的待办:技术路线固化、格式方案确定、API与平台对接。格式方案是一周内要确认的关键节点。</aside>
|
||||
</section>
|
||||
|
||||
<section class="slide slide-content" data-anim="fade-up" data-title="实体完善与工程化">
|
||||
<div class="page-header"></div>
|
||||
<div class="page-title">六、实体完善与工程化</div>
|
||||
<div class="page-subtitle">6.2 bps-schema 后续开发计划</div>
|
||||
<div class="page-body">
|
||||
<div class="three-col">
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">实体审核完善</div>
|
||||
<div class="comp-box-desc text-compact">
|
||||
community / urban / cfd 为 AI 生成的示例文件<br><br>
|
||||
• 人工审核实体定义<br>
|
||||
• 补充字段约束和校验规则<br>
|
||||
• 领域专家审核物理合理性
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">工程化工具</div>
|
||||
<div class="comp-box-desc text-compact">
|
||||
• schema-all.json 自动验证脚本<br>
|
||||
• CI/CD 集成<br>
|
||||
• 多文件 $ref 解析测试<br>
|
||||
• 补充更多领域(water / transportation)
|
||||
</div>
|
||||
</div>
|
||||
<div class="comp-box">
|
||||
<div class="comp-box-title">代码生成器</div>
|
||||
<div class="comp-box-desc text-compact">
|
||||
• TypeScript 类型声明自动生成<br>
|
||||
• Python Pydantic v2 模型生成<br>
|
||||
• 与 ant-model 引擎数据对接<br>
|
||||
• 格式转换器(HB JSON ↔ IDF)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<img class="footer-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<span class="footer-url">www.cadreg.com.cn</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ==================== 感谢页 ==================== -->
|
||||
<section class="slide slide-thanks" data-anim="fade-up" data-title="结束">
|
||||
<img class="thanks-logo" src="./assets/images/cctc-cadg/logo.png" alt="CCTC 中国建科">
|
||||
<div class="thanks-pattern"></div>
|
||||
<div class="thanks-text">感谢聆听 | 欢迎指导</div>
|
||||
<div class="thanks-url">www.cadreg.com.cn</div>
|
||||
<aside class="notes">感谢大家的关注和聆听,欢迎提出宝贵意见和建议。</aside>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
<script src="./assets/runtime.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 37 KiB |
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "bps/all",
|
||||
"title": "All-Scale Schema Aggregation",
|
||||
"description": "Aggregation entry point that references all scale-specific schemas organized by geometry and simulation domain.",
|
||||
"$defs": {
|
||||
"building": {
|
||||
"$ref": "./schema-building.json"
|
||||
},
|
||||
"energy": {
|
||||
"$ref": "./schema-energy.json"
|
||||
},
|
||||
"radiance": {
|
||||
"$ref": "./schema-radiance.json"
|
||||
},
|
||||
"cfd": {
|
||||
"$ref": "./schema-cfd.json"
|
||||
},
|
||||
"community": {
|
||||
"$ref": "./schema-community.json"
|
||||
},
|
||||
"community-energy": {
|
||||
"$ref": "./schema-community-energy.json"
|
||||
},
|
||||
"community-cfd": {
|
||||
"$ref": "./schema-community-cfd.json"
|
||||
},
|
||||
"community-microclimate": {
|
||||
"$ref": "./schema-community-microclimate.json"
|
||||
},
|
||||
"urban": {
|
||||
"$ref": "./schema-urban.json"
|
||||
},
|
||||
"urban-energy": {
|
||||
"$ref": "./schema-urban-energy.json"
|
||||
},
|
||||
"urban-cfd": {
|
||||
"$ref": "./schema-urban-cfd.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,735 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "bps/cfd",
|
||||
"title": "CFD Wind Environment Simulation Schema",
|
||||
"description": "Computational Fluid Dynamics simulation parameters for building wind environment analysis. Covers domain definition, mesh parameters, turbulence models, boundary conditions, and solver settings. Not part of HBJSON; provided as a parallel simulation domain.",
|
||||
"$defs": {
|
||||
"_IdentifiedObject": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"identifier": {
|
||||
"type": "string",
|
||||
"pattern": "^[.A-Za-z0-9_-]+$",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"display_name": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"user_data": {
|
||||
"type": [
|
||||
"object",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"identifier"
|
||||
]
|
||||
},
|
||||
"WindProfileType": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"power_law",
|
||||
"log_law",
|
||||
"uniform",
|
||||
"atmospheric_boundary_layer"
|
||||
]
|
||||
},
|
||||
"TerrainCategory": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"open_sea",
|
||||
"open_country",
|
||||
"suburban",
|
||||
"urban_center",
|
||||
"dense_urban"
|
||||
]
|
||||
},
|
||||
"TurbulenceModel": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"k_epsilon_standard",
|
||||
"k_epsilon_realizable",
|
||||
"k_epsilon_RNG",
|
||||
"k_omega_SST",
|
||||
"LES",
|
||||
"DES"
|
||||
]
|
||||
},
|
||||
"SolverType": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"steady",
|
||||
"transient"
|
||||
]
|
||||
},
|
||||
"WindProfile": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "WindProfile"
|
||||
},
|
||||
"profile_type": {
|
||||
"$ref": "#/$defs/WindProfileType",
|
||||
"default": "power_law"
|
||||
},
|
||||
"reference_wind_speed": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "m/s at reference height"
|
||||
},
|
||||
"reference_height": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 10,
|
||||
"description": "m"
|
||||
},
|
||||
"power_law_exponent": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Alpha for power law profile, terrain-dependent"
|
||||
},
|
||||
"roughness_length": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "z0 in meters for log law profile"
|
||||
},
|
||||
"ground_elevation": {
|
||||
"type": "number",
|
||||
"default": 0,
|
||||
"description": "Ground elevation in meters"
|
||||
},
|
||||
"terrain_category": {
|
||||
"$ref": "#/$defs/TerrainCategory",
|
||||
"default": "suburban"
|
||||
},
|
||||
"wind_direction": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 360,
|
||||
"default": 0,
|
||||
"description": "Wind direction in degrees, 0=N, 90=E"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"reference_wind_speed"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"CFDDomain": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "CFDDomain"
|
||||
},
|
||||
"domain_size": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"x_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"x_max": {
|
||||
"type": "number"
|
||||
},
|
||||
"y_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"y_max": {
|
||||
"type": "number"
|
||||
},
|
||||
"z_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"z_max": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"x_min",
|
||||
"x_max",
|
||||
"y_min",
|
||||
"y_max",
|
||||
"z_min",
|
||||
"z_max"
|
||||
],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"upstream_distance": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "Distance from building to inlet, typically 5H"
|
||||
},
|
||||
"downstream_distance": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "Distance from building to outlet, typically 15H"
|
||||
},
|
||||
"lateral_distance": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "Distance from building to side walls, typically 5H"
|
||||
},
|
||||
"height_distance": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "Distance from building top to domain top, typically 5H"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"domain_size"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"MeshParameters": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "MeshParameters"
|
||||
},
|
||||
"base_cell_size": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "Background mesh cell size in meters"
|
||||
},
|
||||
"refinement_zones": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"zone_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"cell_size": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"extent": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"x_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"x_max": {
|
||||
"type": "number"
|
||||
},
|
||||
"y_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"y_max": {
|
||||
"type": "number"
|
||||
},
|
||||
"z_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"z_max": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"x_min",
|
||||
"x_max",
|
||||
"y_min",
|
||||
"y_max",
|
||||
"z_min",
|
||||
"z_max"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"zone_name",
|
||||
"cell_size",
|
||||
"extent"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"wall_layer_first_cell_height": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "First cell height at wall boundaries in meters"
|
||||
},
|
||||
"wall_layer_growth_rate": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 1,
|
||||
"maximum": 1.5,
|
||||
"default": 1.2
|
||||
},
|
||||
"wall_layer_total_layers": {
|
||||
"type": "integer",
|
||||
"minimum": 3,
|
||||
"default": 10
|
||||
},
|
||||
"mesh_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"hexahedral",
|
||||
"polyhedral",
|
||||
"tetrahedral",
|
||||
"snappy_hex"
|
||||
],
|
||||
"default": "snappy_hex"
|
||||
},
|
||||
"total_cells_estimate": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"base_cell_size"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"TurbulenceParameters": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "TurbulenceParameters"
|
||||
},
|
||||
"turbulence_model": {
|
||||
"$ref": "#/$defs/TurbulenceModel",
|
||||
"default": "k_epsilon_RNG"
|
||||
},
|
||||
"turbulence_intensity": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"description": "Inlet turbulence intensity (0-1)"
|
||||
},
|
||||
"turbulent_length_scale": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "Characteristic turbulent length scale in meters"
|
||||
},
|
||||
"wall_function_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"standard_wall_function",
|
||||
"non_equilibrium",
|
||||
"enhanced_wall_treatment",
|
||||
"scalable_wall_function"
|
||||
],
|
||||
"default": "standard_wall_function"
|
||||
},
|
||||
"y_plus_target": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "Target y+ value for wall-adjacent cells"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"turbulence_model"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"BoundaryConditions": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "BoundaryConditions"
|
||||
},
|
||||
"inlet_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"velocity_inlet",
|
||||
"pressure_inlet"
|
||||
],
|
||||
"default": "velocity_inlet"
|
||||
},
|
||||
"outlet_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"pressure_outlet",
|
||||
"outflow"
|
||||
],
|
||||
"default": "pressure_outlet"
|
||||
},
|
||||
"top_boundary_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"symmetry",
|
||||
"slip_wall",
|
||||
"velocity_inlet"
|
||||
],
|
||||
"default": "symmetry"
|
||||
},
|
||||
"side_boundary_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"symmetry",
|
||||
"slip_wall"
|
||||
],
|
||||
"default": "symmetry"
|
||||
},
|
||||
"ground_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"no_slip_wall",
|
||||
"rough_wall"
|
||||
],
|
||||
"default": "no_slip_wall"
|
||||
},
|
||||
"building_wall_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"no_slip_wall",
|
||||
"rough_wall"
|
||||
],
|
||||
"default": "no_slip_wall"
|
||||
},
|
||||
"surface_roughness_height": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001,
|
||||
"description": "Physical roughness height in meters for wall boundaries"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"SolverSettings": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "SolverSettings"
|
||||
},
|
||||
"solver_type": {
|
||||
"$ref": "#/$defs/SolverType",
|
||||
"default": "steady"
|
||||
},
|
||||
"pressure_velocity_coupling": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"SIMPLE",
|
||||
"SIMPLEC",
|
||||
"PISO",
|
||||
"Coupled"
|
||||
],
|
||||
"default": "SIMPLE"
|
||||
},
|
||||
"spatial_discretization": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"first_order",
|
||||
"second_order",
|
||||
"QUICK",
|
||||
"MUSCL"
|
||||
],
|
||||
"default": "second_order"
|
||||
},
|
||||
"max_iterations": {
|
||||
"type": "integer",
|
||||
"minimum": 100,
|
||||
"default": 1000
|
||||
},
|
||||
"convergence_criteria": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"continuity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"x_velocity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"y_velocity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"z_velocity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"k": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"epsilon": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"omega": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"under_relaxation_factors": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pressure": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.3
|
||||
},
|
||||
"momentum": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.7
|
||||
},
|
||||
"turbulent_kinetic_energy": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.8
|
||||
},
|
||||
"turbulent_dissipation": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.8
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"time_step": {
|
||||
"type": [
|
||||
"number",
|
||||
"null"
|
||||
],
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "Time step in seconds (for transient only)"
|
||||
},
|
||||
"total_time": {
|
||||
"type": [
|
||||
"number",
|
||||
"null"
|
||||
],
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "Total simulation time in seconds (for transient only)"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"OutputParameters": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "OutputParameters"
|
||||
},
|
||||
"output_variables": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"velocity",
|
||||
"pressure",
|
||||
"turbulent_kinetic_energy",
|
||||
"turbulent_dissipation",
|
||||
"wall_shear_stress",
|
||||
"vorticity"
|
||||
]
|
||||
},
|
||||
"default": [
|
||||
"velocity",
|
||||
"pressure"
|
||||
]
|
||||
},
|
||||
"monitoring_points": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"point_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"position": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"point_name",
|
||||
"position"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"output_format": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"ensight",
|
||||
"paraview",
|
||||
"tecplot",
|
||||
"csv",
|
||||
"vtk"
|
||||
],
|
||||
"default": "vtk"
|
||||
},
|
||||
"output_interval": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"default": 100,
|
||||
"description": "Write output every N iterations"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"CFDSettings": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "CFDSettings"
|
||||
},
|
||||
"wind_profiles": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/WindProfile"
|
||||
}
|
||||
},
|
||||
"domain": {
|
||||
"$ref": "#/$defs/CFDDomain"
|
||||
},
|
||||
"mesh": {
|
||||
"$ref": "#/$defs/MeshParameters"
|
||||
},
|
||||
"turbulence": {
|
||||
"$ref": "#/$defs/TurbulenceParameters"
|
||||
},
|
||||
"boundary_conditions": {
|
||||
"$ref": "#/$defs/BoundaryConditions"
|
||||
},
|
||||
"solver": {
|
||||
"$ref": "#/$defs/SolverSettings"
|
||||
},
|
||||
"output": {
|
||||
"$ref": "#/$defs/OutputParameters"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"ModelCFDProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "ModelCFDProperties"
|
||||
},
|
||||
"cfd_settings": {
|
||||
"$ref": "#/$defs/CFDSettings"
|
||||
},
|
||||
"building_surfaces": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "List of building surface identifiers to be used as wall boundaries"
|
||||
},
|
||||
"terrain_surfaces": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "List of terrain/ground surface identifiers"
|
||||
},
|
||||
"porous_surfaces": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "List of surface identifiers treated as porous media (trees, screens)"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,662 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "bps/community-cfd",
|
||||
"title": "Community-Scale CFD Wind Environment Schema",
|
||||
"description": "CFD parameters for community/site wind environment analysis. Covers domain setup, mesh, turbulence, boundary conditions, and solver settings for neighborhood-scale simulations.",
|
||||
"$defs": {
|
||||
"_IdentifiedObject": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"identifier": {
|
||||
"type": "string",
|
||||
"pattern": "^[.A-Za-z0-9_-]+$",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"display_name": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"user_data": {
|
||||
"type": [
|
||||
"object",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"identifier"
|
||||
]
|
||||
},
|
||||
"WindProfileType": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"power_law",
|
||||
"log_law",
|
||||
"uniform",
|
||||
"atmospheric_boundary_layer"
|
||||
]
|
||||
},
|
||||
"TerrainCategory": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"open_sea",
|
||||
"open_country",
|
||||
"suburban",
|
||||
"urban_center",
|
||||
"dense_urban"
|
||||
]
|
||||
},
|
||||
"TurbulenceModel": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"k_epsilon_standard",
|
||||
"k_epsilon_realizable",
|
||||
"k_epsilon_RNG",
|
||||
"k_omega_SST",
|
||||
"LES",
|
||||
"DES"
|
||||
]
|
||||
},
|
||||
"SolverType": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"steady",
|
||||
"transient"
|
||||
]
|
||||
},
|
||||
"WindProfile": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "WindProfile"
|
||||
},
|
||||
"profile_type": {
|
||||
"$ref": "#/$defs/WindProfileType",
|
||||
"default": "power_law"
|
||||
},
|
||||
"reference_wind_speed": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"reference_height": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 10
|
||||
},
|
||||
"power_law_exponent": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"roughness_length": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"ground_elevation": {
|
||||
"type": "number",
|
||||
"default": 0
|
||||
},
|
||||
"terrain_category": {
|
||||
"$ref": "#/$defs/TerrainCategory",
|
||||
"default": "suburban"
|
||||
},
|
||||
"wind_direction": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 360,
|
||||
"default": 0
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"reference_wind_speed"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"CFDDomain": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "CFDDomain"
|
||||
},
|
||||
"domain_size": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"x_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"x_max": {
|
||||
"type": "number"
|
||||
},
|
||||
"y_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"y_max": {
|
||||
"type": "number"
|
||||
},
|
||||
"z_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"z_max": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"x_min",
|
||||
"x_max",
|
||||
"y_min",
|
||||
"y_max",
|
||||
"z_min",
|
||||
"z_max"
|
||||
],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"upstream_distance": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "typically 5H"
|
||||
},
|
||||
"downstream_distance": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "typically 15H"
|
||||
},
|
||||
"lateral_distance": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "typically 5H"
|
||||
},
|
||||
"height_distance": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "typically 5H"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"domain_size"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"MeshParameters": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "MeshParameters"
|
||||
},
|
||||
"base_cell_size": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"refinement_zones": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"zone_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"cell_size": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"extent": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"x_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"x_max": {
|
||||
"type": "number"
|
||||
},
|
||||
"y_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"y_max": {
|
||||
"type": "number"
|
||||
},
|
||||
"z_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"z_max": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"x_min",
|
||||
"x_max",
|
||||
"y_min",
|
||||
"y_max",
|
||||
"z_min",
|
||||
"z_max"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"zone_name",
|
||||
"cell_size",
|
||||
"extent"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"wall_layer_first_cell_height": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"wall_layer_growth_rate": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 1,
|
||||
"maximum": 1.5,
|
||||
"default": 1.2
|
||||
},
|
||||
"wall_layer_total_layers": {
|
||||
"type": "integer",
|
||||
"minimum": 3,
|
||||
"default": 10
|
||||
},
|
||||
"mesh_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"hexahedral",
|
||||
"polyhedral",
|
||||
"tetrahedral",
|
||||
"snappy_hex"
|
||||
],
|
||||
"default": "snappy_hex"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"base_cell_size"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"TurbulenceParameters": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "TurbulenceParameters"
|
||||
},
|
||||
"turbulence_model": {
|
||||
"$ref": "#/$defs/TurbulenceModel",
|
||||
"default": "k_epsilon_RNG"
|
||||
},
|
||||
"turbulence_intensity": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
},
|
||||
"turbulent_length_scale": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"wall_function_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"standard_wall_function",
|
||||
"non_equilibrium",
|
||||
"enhanced_wall_treatment",
|
||||
"scalable_wall_function"
|
||||
],
|
||||
"default": "standard_wall_function"
|
||||
},
|
||||
"y_plus_target": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"turbulence_model"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"BoundaryConditions": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "BoundaryConditions"
|
||||
},
|
||||
"inlet_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"velocity_inlet",
|
||||
"pressure_inlet"
|
||||
],
|
||||
"default": "velocity_inlet"
|
||||
},
|
||||
"outlet_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"pressure_outlet",
|
||||
"outflow"
|
||||
],
|
||||
"default": "pressure_outlet"
|
||||
},
|
||||
"top_boundary_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"symmetry",
|
||||
"slip_wall",
|
||||
"velocity_inlet"
|
||||
],
|
||||
"default": "symmetry"
|
||||
},
|
||||
"side_boundary_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"symmetry",
|
||||
"slip_wall"
|
||||
],
|
||||
"default": "symmetry"
|
||||
},
|
||||
"ground_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"no_slip_wall",
|
||||
"rough_wall"
|
||||
],
|
||||
"default": "no_slip_wall"
|
||||
},
|
||||
"building_wall_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"no_slip_wall",
|
||||
"rough_wall"
|
||||
],
|
||||
"default": "no_slip_wall"
|
||||
},
|
||||
"surface_roughness_height": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"SolverSettings": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "SolverSettings"
|
||||
},
|
||||
"solver_type": {
|
||||
"$ref": "#/$defs/SolverType",
|
||||
"default": "steady"
|
||||
},
|
||||
"pressure_velocity_coupling": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"SIMPLE",
|
||||
"SIMPLEC",
|
||||
"PISO",
|
||||
"Coupled"
|
||||
],
|
||||
"default": "SIMPLE"
|
||||
},
|
||||
"spatial_discretization": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"first_order",
|
||||
"second_order",
|
||||
"QUICK",
|
||||
"MUSCL"
|
||||
],
|
||||
"default": "second_order"
|
||||
},
|
||||
"max_iterations": {
|
||||
"type": "integer",
|
||||
"minimum": 100,
|
||||
"default": 1000
|
||||
},
|
||||
"convergence_criteria": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"continuity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"x_velocity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"y_velocity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"z_velocity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"k": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"epsilon": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"under_relaxation_factors": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pressure": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.3
|
||||
},
|
||||
"momentum": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.7
|
||||
},
|
||||
"k": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.8
|
||||
},
|
||||
"epsilon": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.8
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"OutputParameters": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "OutputParameters"
|
||||
},
|
||||
"output_variables": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"velocity",
|
||||
"pressure",
|
||||
"turbulent_kinetic_energy",
|
||||
"turbulent_dissipation",
|
||||
"wall_shear_stress",
|
||||
"vorticity"
|
||||
]
|
||||
},
|
||||
"default": [
|
||||
"velocity",
|
||||
"pressure"
|
||||
]
|
||||
},
|
||||
"monitoring_points": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"point_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"position": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"point_name",
|
||||
"position"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"output_format": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"ensight",
|
||||
"paraview",
|
||||
"tecplot",
|
||||
"csv",
|
||||
"vtk"
|
||||
],
|
||||
"default": "vtk"
|
||||
},
|
||||
"output_interval": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"default": 100
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"CommunityCFDSettings": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "CommunityCFDSettings"
|
||||
},
|
||||
"wind_profiles": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/WindProfile"
|
||||
}
|
||||
},
|
||||
"domain": {
|
||||
"$ref": "#/$defs/CFDDomain"
|
||||
},
|
||||
"mesh": {
|
||||
"$ref": "#/$defs/MeshParameters"
|
||||
},
|
||||
"turbulence": {
|
||||
"$ref": "#/$defs/TurbulenceParameters"
|
||||
},
|
||||
"boundary_conditions": {
|
||||
"$ref": "#/$defs/BoundaryConditions"
|
||||
},
|
||||
"solver": {
|
||||
"$ref": "#/$defs/SolverSettings"
|
||||
},
|
||||
"output": {
|
||||
"$ref": "#/$defs/OutputParameters"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,263 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "bps/community-energy",
|
||||
"title": "Community-Scale Energy Schema",
|
||||
"description": "District energy system parameters for community scale. Covers plants, networks, pipes, and building connections.",
|
||||
"$defs": {
|
||||
"_IdentifiedObject": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"identifier": {
|
||||
"type": "string",
|
||||
"pattern": "^[.A-Za-z0-9_-]+$",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"display_name": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"user_data": {
|
||||
"type": [
|
||||
"object",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"identifier"
|
||||
]
|
||||
},
|
||||
"PlantType": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"CHP",
|
||||
"GasBoiler",
|
||||
"ElectricBoiler",
|
||||
"GroundSourceHeatPump",
|
||||
"AirSourceHeatPump",
|
||||
"Chiller",
|
||||
"CoolingTower",
|
||||
"ThermalStorage",
|
||||
"SolarThermal",
|
||||
"PV"
|
||||
]
|
||||
},
|
||||
"NetworkType": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"CHW",
|
||||
"HW",
|
||||
"Steam",
|
||||
"Electricity"
|
||||
]
|
||||
},
|
||||
"Plant": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Plant"
|
||||
},
|
||||
"plant_type": {
|
||||
"$ref": "#/$defs/PlantType"
|
||||
},
|
||||
"rated_capacity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "kW"
|
||||
},
|
||||
"cop": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"fuel_type": {
|
||||
"type": "string",
|
||||
"default": "natural_gas"
|
||||
},
|
||||
"location": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"plant_type",
|
||||
"rated_capacity"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"Pipe": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Pipe"
|
||||
},
|
||||
"start_node": {
|
||||
"type": "string"
|
||||
},
|
||||
"end_node": {
|
||||
"type": "string"
|
||||
},
|
||||
"length": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "m"
|
||||
},
|
||||
"diameter": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "m"
|
||||
},
|
||||
"insulation_thickness": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"default": 0
|
||||
},
|
||||
"insulation_conductivity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.04
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"start_node",
|
||||
"end_node",
|
||||
"length",
|
||||
"diameter"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"Network": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Network"
|
||||
},
|
||||
"network_type": {
|
||||
"$ref": "#/$defs/NetworkType"
|
||||
},
|
||||
"supply_temperature": {
|
||||
"type": "number",
|
||||
"description": "Celsius"
|
||||
},
|
||||
"return_temperature": {
|
||||
"type": "number",
|
||||
"description": "Celsius"
|
||||
},
|
||||
"pipes": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/Pipe"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"network_type",
|
||||
"pipes"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"BuildingConnection": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "BuildingConnection"
|
||||
},
|
||||
"building_ref": {
|
||||
"type": "string"
|
||||
},
|
||||
"network_ref": {
|
||||
"type": "string"
|
||||
},
|
||||
"design_flow_rate": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"building_ref",
|
||||
"network_ref"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"DistrictEnergy": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "DistrictEnergy"
|
||||
},
|
||||
"plants": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/Plant"
|
||||
}
|
||||
},
|
||||
"networks": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/Network"
|
||||
}
|
||||
},
|
||||
"connections": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/BuildingConnection"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "bps/community-microclimate",
|
||||
"title": "Community-Scale Microclimate Schema",
|
||||
"description": "Microclimate parameters for community scale: urban heat island, wind correction, and surface albedo.",
|
||||
"$defs": {
|
||||
"_IdentifiedObject": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"identifier": {
|
||||
"type": "string",
|
||||
"pattern": "^[.A-Za-z0-9_-]+$",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"display_name": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"user_data": {
|
||||
"type": [
|
||||
"object",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"identifier"
|
||||
]
|
||||
},
|
||||
"MicroClimate": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "MicroClimate"
|
||||
},
|
||||
"uhi_intensity": {
|
||||
"type": "number",
|
||||
"description": "Urban heat island intensity in degrees Celsius"
|
||||
},
|
||||
"wind_correction_factor": {
|
||||
"type": "number",
|
||||
"default": 1
|
||||
},
|
||||
"albedo": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.2
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,321 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "bps/community",
|
||||
"title": "Community-Scale Geometry Schema",
|
||||
"description": "Community/site scale geometry: site boundaries, terrain, roads, green spaces, and water bodies. Energy, CFD, and other simulation parameters are in separate schema-community-*.json files.",
|
||||
"$defs": {
|
||||
"_IdentifiedObject": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"identifier": {
|
||||
"type": "string",
|
||||
"pattern": "^[.A-Za-z0-9_-]+$",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"display_name": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"user_data": {
|
||||
"type": [
|
||||
"object",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"identifier"
|
||||
]
|
||||
},
|
||||
"TerrainGrid": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "TerrainGrid"
|
||||
},
|
||||
"grid_origin": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
},
|
||||
"grid_size_x": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"grid_size_y": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"cell_size": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"elevations": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"grid_origin",
|
||||
"grid_size_x",
|
||||
"grid_size_y",
|
||||
"cell_size",
|
||||
"elevations"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"TerrainTIN": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "TerrainTIN"
|
||||
},
|
||||
"vertices": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
},
|
||||
"minItems": 3
|
||||
},
|
||||
"triangles": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"minimum": 0
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
},
|
||||
"minItems": 1
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"vertices",
|
||||
"triangles"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"Road": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Road"
|
||||
},
|
||||
"centerline": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 2,
|
||||
"maxItems": 3
|
||||
},
|
||||
"minItems": 2
|
||||
},
|
||||
"width": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"surface_material": {
|
||||
"type": "string",
|
||||
"default": "asphalt"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"centerline",
|
||||
"width"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"GreenSpace": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "GreenSpace"
|
||||
},
|
||||
"boundary": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 2,
|
||||
"maxItems": 2
|
||||
},
|
||||
"minItems": 3
|
||||
},
|
||||
"vegetation_type": {
|
||||
"type": "string",
|
||||
"default": "grass"
|
||||
},
|
||||
"leaf_area_index": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"default": 1
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"boundary"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"WaterBody": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "WaterBody"
|
||||
},
|
||||
"boundary": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 2,
|
||||
"maxItems": 2
|
||||
},
|
||||
"minItems": 3
|
||||
},
|
||||
"depth": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 1
|
||||
},
|
||||
"water_temperature": {
|
||||
"type": "number",
|
||||
"default": 20
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"boundary"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"Site": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Site"
|
||||
},
|
||||
"boundary": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 2,
|
||||
"maxItems": 2
|
||||
},
|
||||
"minItems": 3
|
||||
},
|
||||
"terrain": {
|
||||
"oneOf": [
|
||||
{
|
||||
"$ref": "#/$defs/TerrainGrid"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/TerrainTIN"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
},
|
||||
"roads": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/Road"
|
||||
}
|
||||
},
|
||||
"green_spaces": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/GreenSpace"
|
||||
}
|
||||
},
|
||||
"water_bodies": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/WaterBody"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,980 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "bps/radiance",
|
||||
"title": "HBJSON Radiance Daylighting Schema",
|
||||
"description": "Radiance daylighting simulation parameters compatible with honeybee-schema radiance properties. Covers modifiers, modifier sets, sensor grids, views, and dynamic states.",
|
||||
"$defs": {
|
||||
"_IdentifiedObject": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"identifier": {
|
||||
"type": "string",
|
||||
"pattern": "^[.A-Za-z0-9_-]+$",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"display_name": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"user_data": {
|
||||
"type": [
|
||||
"object",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"identifier"
|
||||
]
|
||||
},
|
||||
"Void": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Void"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"Plastic": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Plastic"
|
||||
},
|
||||
"r_reflectance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"g_reflectance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"b_reflectance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"specularity": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"roughness": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"Metal": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Metal"
|
||||
},
|
||||
"r_reflectance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"g_reflectance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"b_reflectance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"specularity": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.9
|
||||
},
|
||||
"roughness": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"Trans": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Trans"
|
||||
},
|
||||
"r_reflectance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"g_reflectance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"b_reflectance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"specularity": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"roughness": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"transmitted_diff": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"transmitted_spec": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"Glass": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Glass"
|
||||
},
|
||||
"r_transmissivity": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"g_transmissivity": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"b_transmissivity": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"refraction_index": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 1,
|
||||
"default": 1.52
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"Mirror": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Mirror"
|
||||
},
|
||||
"r_reflectance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 1
|
||||
},
|
||||
"g_reflectance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 1
|
||||
},
|
||||
"b_reflectance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 1
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"Light": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Light"
|
||||
},
|
||||
"r_emittance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"g_emittance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"b_emittance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"Glow": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Glow"
|
||||
},
|
||||
"r_emittance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"g_emittance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"b_emittance": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0
|
||||
},
|
||||
"max_radius": {
|
||||
"type": "number",
|
||||
"default": 0
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"BSDF": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "BSDF"
|
||||
},
|
||||
"up_orientation": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3,
|
||||
"default": [
|
||||
0.01,
|
||||
0.01,
|
||||
1.0
|
||||
]
|
||||
},
|
||||
"thickness": {
|
||||
"type": "number",
|
||||
"default": 0
|
||||
},
|
||||
"function_file": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 100,
|
||||
"default": "."
|
||||
},
|
||||
"transform": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
],
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"bsdf_data": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"front_diffuse_reflectance": {
|
||||
"type": [
|
||||
"array",
|
||||
"null"
|
||||
],
|
||||
"items": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
},
|
||||
"back_diffuse_reflectance": {
|
||||
"type": [
|
||||
"array",
|
||||
"null"
|
||||
],
|
||||
"items": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
},
|
||||
"diffuse_transmittance": {
|
||||
"type": [
|
||||
"array",
|
||||
"null"
|
||||
],
|
||||
"items": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"bsdf_data"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"Modifier": {
|
||||
"oneOf": [
|
||||
{
|
||||
"$ref": "#/$defs/Plastic"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/Metal"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/Trans"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/Glass"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/Mirror"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/Light"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/Glow"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/BSDF"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/Void"
|
||||
}
|
||||
]
|
||||
},
|
||||
"WallModifierSetAbridged": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "WallModifierSetAbridged"
|
||||
},
|
||||
"exterior_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"interior_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"FloorModifierSetAbridged": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "FloorModifierSetAbridged"
|
||||
},
|
||||
"exterior_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"interior_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"RoofCeilingModifierSetAbridged": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "RoofCeilingModifierSetAbridged"
|
||||
},
|
||||
"exterior_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"interior_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"ApertureModifierSetAbridged": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "ApertureModifierSetAbridged"
|
||||
},
|
||||
"window_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"interior_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"skylight_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"operable_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"DoorModifierSetAbridged": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "DoorModifierSetAbridged"
|
||||
},
|
||||
"exterior_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"interior_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"ShadeModifierSetAbridged": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "ShadeModifierSetAbridged"
|
||||
},
|
||||
"exterior_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"interior_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"ModifierSet": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "ModifierSet"
|
||||
},
|
||||
"wall_set": {
|
||||
"$ref": "#/$defs/WallModifierSetAbridged"
|
||||
},
|
||||
"floor_set": {
|
||||
"$ref": "#/$defs/FloorModifierSetAbridged"
|
||||
},
|
||||
"roof_ceiling_set": {
|
||||
"$ref": "#/$defs/RoofCeilingModifierSetAbridged"
|
||||
},
|
||||
"aperture_set": {
|
||||
"$ref": "#/$defs/ApertureModifierSetAbridged"
|
||||
},
|
||||
"door_set": {
|
||||
"$ref": "#/$defs/DoorModifierSetAbridged"
|
||||
},
|
||||
"shade_set": {
|
||||
"$ref": "#/$defs/ShadeModifierSetAbridged"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"RadianceSubFaceStateAbridged": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "RadianceSubFaceStateAbridged"
|
||||
},
|
||||
"aperture_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"door_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"RadianceShadeStateAbridged": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "RadianceShadeStateAbridged"
|
||||
},
|
||||
"shade_modifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"Sensor": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "Sensor"
|
||||
},
|
||||
"pos": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
},
|
||||
"dir": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"pos",
|
||||
"dir"
|
||||
],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"SensorGrid": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "SensorGrid"
|
||||
},
|
||||
"sensors": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/Sensor"
|
||||
},
|
||||
"minItems": 1
|
||||
},
|
||||
"mesh": {
|
||||
"type": "object"
|
||||
},
|
||||
"base_geometry": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"group_identifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"room_identifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"light_path": {
|
||||
"type": [
|
||||
"array",
|
||||
"null"
|
||||
],
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"sensors"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"ViewType": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"v",
|
||||
"h",
|
||||
"l",
|
||||
"c",
|
||||
"a",
|
||||
"s"
|
||||
]
|
||||
},
|
||||
"View": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "View"
|
||||
},
|
||||
"position": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
},
|
||||
"direction": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
},
|
||||
"up_vector": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
},
|
||||
"view_type": {
|
||||
"$ref": "#/$defs/ViewType",
|
||||
"default": "v"
|
||||
},
|
||||
"h_size": {
|
||||
"type": "number",
|
||||
"default": 60
|
||||
},
|
||||
"v_size": {
|
||||
"type": "number",
|
||||
"default": 60
|
||||
},
|
||||
"shift": {
|
||||
"type": [
|
||||
"number",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"lift": {
|
||||
"type": [
|
||||
"number",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"fore_clip": {
|
||||
"type": [
|
||||
"number",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"aft_clip": {
|
||||
"type": [
|
||||
"number",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"group_identifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"room_identifier": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"position",
|
||||
"direction",
|
||||
"up_vector"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"ModelRadianceProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "ModelRadianceProperties"
|
||||
},
|
||||
"modifiers": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/Modifier"
|
||||
}
|
||||
},
|
||||
"modifier_sets": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/ModifierSet"
|
||||
}
|
||||
},
|
||||
"sensor_grids": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/SensorGrid"
|
||||
}
|
||||
},
|
||||
"views": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/View"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,741 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "bps/urban-cfd",
|
||||
"title": "Urban-Scale CFD Wind Environment Schema",
|
||||
"description": "CFD parameters for urban-scale wind environment analysis. Covers larger domains with multiple districts, street canyon effects, pedestrian-level wind comfort assessment.",
|
||||
"$defs": {
|
||||
"_IdentifiedObject": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"identifier": {
|
||||
"type": "string",
|
||||
"pattern": "^[.A-Za-z0-9_-]+$",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"display_name": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"user_data": {
|
||||
"type": [
|
||||
"object",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"identifier"
|
||||
]
|
||||
},
|
||||
"WindProfileType": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"power_law",
|
||||
"log_law",
|
||||
"uniform",
|
||||
"atmospheric_boundary_layer"
|
||||
]
|
||||
},
|
||||
"TerrainCategory": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"open_sea",
|
||||
"open_country",
|
||||
"suburban",
|
||||
"urban_center",
|
||||
"dense_urban"
|
||||
]
|
||||
},
|
||||
"TurbulenceModel": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"k_epsilon_standard",
|
||||
"k_epsilon_realizable",
|
||||
"k_epsilon_RNG",
|
||||
"k_omega_SST",
|
||||
"LES",
|
||||
"DES"
|
||||
]
|
||||
},
|
||||
"SolverType": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"steady",
|
||||
"transient"
|
||||
]
|
||||
},
|
||||
"WindComfortCriteria": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"Laws",
|
||||
"Davenport",
|
||||
"NEN_8100",
|
||||
"COST_732"
|
||||
]
|
||||
},
|
||||
"WindProfile": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "WindProfile"
|
||||
},
|
||||
"profile_type": {
|
||||
"$ref": "#/$defs/WindProfileType",
|
||||
"default": "power_law"
|
||||
},
|
||||
"reference_wind_speed": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"reference_height": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 10
|
||||
},
|
||||
"power_law_exponent": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"roughness_length": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"ground_elevation": {
|
||||
"type": "number",
|
||||
"default": 0
|
||||
},
|
||||
"terrain_category": {
|
||||
"$ref": "#/$defs/TerrainCategory",
|
||||
"default": "suburban"
|
||||
},
|
||||
"wind_direction": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 360,
|
||||
"default": 0
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"reference_wind_speed"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"CFDDomain": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "CFDDomain"
|
||||
},
|
||||
"domain_size": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"x_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"x_max": {
|
||||
"type": "number"
|
||||
},
|
||||
"y_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"y_max": {
|
||||
"type": "number"
|
||||
},
|
||||
"z_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"z_max": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"x_min",
|
||||
"x_max",
|
||||
"y_min",
|
||||
"y_max",
|
||||
"z_min",
|
||||
"z_max"
|
||||
],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"upstream_distance": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "typically 5H"
|
||||
},
|
||||
"downstream_distance": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "typically 15H"
|
||||
},
|
||||
"lateral_distance": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "typically 5H"
|
||||
},
|
||||
"height_distance": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "typically 5H"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"domain_size"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"MeshParameters": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "MeshParameters"
|
||||
},
|
||||
"base_cell_size": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"refinement_zones": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"zone_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"cell_size": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"extent": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"x_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"x_max": {
|
||||
"type": "number"
|
||||
},
|
||||
"y_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"y_max": {
|
||||
"type": "number"
|
||||
},
|
||||
"z_min": {
|
||||
"type": "number"
|
||||
},
|
||||
"z_max": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"x_min",
|
||||
"x_max",
|
||||
"y_min",
|
||||
"y_max",
|
||||
"z_min",
|
||||
"z_max"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"zone_name",
|
||||
"cell_size",
|
||||
"extent"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"pedestrian_level_height": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 3,
|
||||
"default": 1.5,
|
||||
"description": "m, height for pedestrian wind assessment"
|
||||
},
|
||||
"pedestrian_cell_size": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 1.0,
|
||||
"description": "m, fine mesh at pedestrian level"
|
||||
},
|
||||
"wall_layer_first_cell_height": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"wall_layer_growth_rate": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 1,
|
||||
"maximum": 1.5,
|
||||
"default": 1.2
|
||||
},
|
||||
"wall_layer_total_layers": {
|
||||
"type": "integer",
|
||||
"minimum": 3,
|
||||
"default": 10
|
||||
},
|
||||
"mesh_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"hexahedral",
|
||||
"polyhedral",
|
||||
"tetrahedral",
|
||||
"snappy_hex"
|
||||
],
|
||||
"default": "snappy_hex"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"base_cell_size"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"TurbulenceParameters": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "TurbulenceParameters"
|
||||
},
|
||||
"turbulence_model": {
|
||||
"$ref": "#/$defs/TurbulenceModel",
|
||||
"default": "k_epsilon_RNG"
|
||||
},
|
||||
"turbulence_intensity": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
},
|
||||
"turbulent_length_scale": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
},
|
||||
"wall_function_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"standard_wall_function",
|
||||
"non_equilibrium",
|
||||
"enhanced_wall_treatment",
|
||||
"scalable_wall_function"
|
||||
],
|
||||
"default": "standard_wall_function"
|
||||
},
|
||||
"y_plus_target": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"turbulence_model"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"BoundaryConditions": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "BoundaryConditions"
|
||||
},
|
||||
"inlet_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"velocity_inlet",
|
||||
"pressure_inlet"
|
||||
],
|
||||
"default": "velocity_inlet"
|
||||
},
|
||||
"outlet_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"pressure_outlet",
|
||||
"outflow"
|
||||
],
|
||||
"default": "pressure_outlet"
|
||||
},
|
||||
"top_boundary_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"symmetry",
|
||||
"slip_wall",
|
||||
"velocity_inlet"
|
||||
],
|
||||
"default": "symmetry"
|
||||
},
|
||||
"side_boundary_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"symmetry",
|
||||
"slip_wall"
|
||||
],
|
||||
"default": "symmetry"
|
||||
},
|
||||
"ground_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"no_slip_wall",
|
||||
"rough_wall"
|
||||
],
|
||||
"default": "no_slip_wall"
|
||||
},
|
||||
"building_wall_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"no_slip_wall",
|
||||
"rough_wall"
|
||||
],
|
||||
"default": "no_slip_wall"
|
||||
},
|
||||
"surface_roughness_height": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"SolverSettings": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "SolverSettings"
|
||||
},
|
||||
"solver_type": {
|
||||
"$ref": "#/$defs/SolverType",
|
||||
"default": "steady"
|
||||
},
|
||||
"pressure_velocity_coupling": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"SIMPLE",
|
||||
"SIMPLEC",
|
||||
"PISO",
|
||||
"Coupled"
|
||||
],
|
||||
"default": "SIMPLE"
|
||||
},
|
||||
"spatial_discretization": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"first_order",
|
||||
"second_order",
|
||||
"QUICK",
|
||||
"MUSCL"
|
||||
],
|
||||
"default": "second_order"
|
||||
},
|
||||
"max_iterations": {
|
||||
"type": "integer",
|
||||
"minimum": 100,
|
||||
"default": 1000
|
||||
},
|
||||
"convergence_criteria": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"continuity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"x_velocity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"y_velocity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"z_velocity": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"k": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
},
|
||||
"epsilon": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"default": 0.001
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"under_relaxation_factors": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pressure": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.3
|
||||
},
|
||||
"momentum": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.7
|
||||
},
|
||||
"k": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.8
|
||||
},
|
||||
"epsilon": {
|
||||
"type": "number",
|
||||
"exclusiveMinimum": 0,
|
||||
"maximum": 1,
|
||||
"default": 0.8
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"WindComfortAssessment": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "WindComfortAssessment"
|
||||
},
|
||||
"criteria": {
|
||||
"$ref": "#/$defs/WindComfortCriteria",
|
||||
"default": "NEN_8100"
|
||||
},
|
||||
"pedestrian_level_height": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 3,
|
||||
"default": 1.5
|
||||
},
|
||||
"evaluation_points": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"point_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"position": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"point_name",
|
||||
"position"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"OutputParameters": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "OutputParameters"
|
||||
},
|
||||
"output_variables": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"velocity",
|
||||
"pressure",
|
||||
"turbulent_kinetic_energy",
|
||||
"turbulent_dissipation",
|
||||
"wall_shear_stress",
|
||||
"vorticity"
|
||||
]
|
||||
},
|
||||
"default": [
|
||||
"velocity",
|
||||
"pressure"
|
||||
]
|
||||
},
|
||||
"monitoring_points": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"point_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"position": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"point_name",
|
||||
"position"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"output_format": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"ensight",
|
||||
"paraview",
|
||||
"tecplot",
|
||||
"csv",
|
||||
"vtk"
|
||||
],
|
||||
"default": "vtk"
|
||||
},
|
||||
"output_interval": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"default": 100
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"UrbanCFDSettings": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "UrbanCFDSettings"
|
||||
},
|
||||
"wind_profiles": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/WindProfile"
|
||||
}
|
||||
},
|
||||
"domain": {
|
||||
"$ref": "#/$defs/CFDDomain"
|
||||
},
|
||||
"mesh": {
|
||||
"$ref": "#/$defs/MeshParameters"
|
||||
},
|
||||
"turbulence": {
|
||||
"$ref": "#/$defs/TurbulenceParameters"
|
||||
},
|
||||
"boundary_conditions": {
|
||||
"$ref": "#/$defs/BoundaryConditions"
|
||||
},
|
||||
"solver": {
|
||||
"$ref": "#/$defs/SolverSettings"
|
||||
},
|
||||
"wind_comfort": {
|
||||
"$ref": "#/$defs/WindComfortAssessment"
|
||||
},
|
||||
"output": {
|
||||
"$ref": "#/$defs/OutputParameters"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,234 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "bps/urban-energy",
|
||||
"title": "Urban-Scale Energy Schema",
|
||||
"description": "Urban scale energy parameters: aggregate energy demand, renewable energy potential, and city-level energy systems.",
|
||||
"$defs": {
|
||||
"_IdentifiedObject": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"identifier": {
|
||||
"type": "string",
|
||||
"pattern": "^[.A-Za-z0-9_-]+$",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"display_name": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"user_data": {
|
||||
"type": [
|
||||
"object",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"identifier"
|
||||
]
|
||||
},
|
||||
"UrbanEnergyDemand": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "UrbanEnergyDemand"
|
||||
},
|
||||
"land_use_ref": {
|
||||
"type": "string",
|
||||
"description": "Reference to LandUse identifier"
|
||||
},
|
||||
"annual_heating_demand": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kWh per year"
|
||||
},
|
||||
"annual_cooling_demand": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kWh per year"
|
||||
},
|
||||
"annual_lighting_demand": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kWh per year"
|
||||
},
|
||||
"annual_equipment_demand": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kWh per year"
|
||||
},
|
||||
"peak_heating_demand": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kW"
|
||||
},
|
||||
"peak_cooling_demand": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kW"
|
||||
},
|
||||
"demand_density": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kWh per square meter per year"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"RenewablePotential": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "RenewablePotential"
|
||||
},
|
||||
"land_use_ref": {
|
||||
"type": "string"
|
||||
},
|
||||
"solar_roof_potential": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kWh per year from rooftop PV"
|
||||
},
|
||||
"solar_facade_potential": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kWh per year from facade BIPV"
|
||||
},
|
||||
"solar_ground_potential": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kWh per year from ground-mounted PV"
|
||||
},
|
||||
"geothermal_potential": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kWh per year from ground source"
|
||||
},
|
||||
"wind_potential": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kWh per year from small wind turbines"
|
||||
},
|
||||
"available_roof_area": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "square meters suitable for PV"
|
||||
},
|
||||
"suitable_facade_area": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "square meters suitable for BIPV"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"UrbanEnergyBalance": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "UrbanEnergyBalance"
|
||||
},
|
||||
"annual_total_demand": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kWh per year"
|
||||
},
|
||||
"annual_total_renewable_generation": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kWh per year"
|
||||
},
|
||||
"renewable_self_sufficiency_ratio": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
},
|
||||
"annual_co2_emissions": {
|
||||
"type": "number",
|
||||
"description": "tonnes CO2 per year"
|
||||
},
|
||||
"carbon_intensity": {
|
||||
"type": "number",
|
||||
"description": "kg CO2 per kWh"
|
||||
},
|
||||
"energy_use_intensity": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "kWh per square meter per year"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"UrbanEnergyProperties": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "UrbanEnergyProperties"
|
||||
},
|
||||
"demands": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/UrbanEnergyDemand"
|
||||
}
|
||||
},
|
||||
"renewable_potentials": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/RenewablePotential"
|
||||
}
|
||||
},
|
||||
"energy_balance": {
|
||||
"$ref": "#/$defs/UrbanEnergyBalance"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "bps/urban",
|
||||
"title": "Urban-Scale Geometry Schema",
|
||||
"description": "Urban scale geometry: climate zones and land use boundaries. Energy, CFD, and other simulation parameters are in separate schema-urban-*.json files.",
|
||||
"$defs": {
|
||||
"_IdentifiedObject": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"identifier": {
|
||||
"type": "string",
|
||||
"pattern": "^[.A-Za-z0-9_-]+$",
|
||||
"minLength": 1,
|
||||
"maxLength": 100
|
||||
},
|
||||
"display_name": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"user_data": {
|
||||
"type": [
|
||||
"object",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"identifier"
|
||||
]
|
||||
},
|
||||
"ClimateZone": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "ClimateZone"
|
||||
},
|
||||
"boundary": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 2,
|
||||
"maxItems": 2
|
||||
},
|
||||
"minItems": 3
|
||||
},
|
||||
"climate_zone_code": {
|
||||
"type": "string",
|
||||
"description": "e.g. ASHRAE (1A-8B), Chinese (\u4e25\u5bd2/\u5bd2\u51b7/\u590f\u70ed\u51ac\u51b7/\u590f\u70ed\u51ac\u6696/\u6e29\u548c)"
|
||||
},
|
||||
"heating_degree_days": {
|
||||
"type": "number"
|
||||
},
|
||||
"cooling_degree_days": {
|
||||
"type": "number"
|
||||
},
|
||||
"design_heating_temperature": {
|
||||
"type": "number"
|
||||
},
|
||||
"design_cooling_temperature": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"LandUse": {
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/_IdentifiedObject"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "LandUse"
|
||||
},
|
||||
"boundary": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"minItems": 2,
|
||||
"maxItems": 2
|
||||
},
|
||||
"minItems": 3
|
||||
},
|
||||
"land_use_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"residential",
|
||||
"commercial",
|
||||
"industrial",
|
||||
"institutional",
|
||||
"agricultural",
|
||||
"park",
|
||||
"water",
|
||||
"transportation",
|
||||
"mixed"
|
||||
]
|
||||
},
|
||||
"floor_area_ratio": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"building_coverage_ratio": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
},
|
||||
"green_ratio": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
},
|
||||
"population_density": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "people per hectare"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"land_use_type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||