feat: add CFD/radiance/urban/community schema files, pres, docs

This commit is contained in:
ringo
2026-05-28 15:06:30 +08:00
parent 9f730223ce
commit 68bb9e2181
40 changed files with 11373 additions and 686 deletions
+180 -132
View File
@@ -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
```
+349
View File
@@ -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 定义
+1285
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

File diff suppressed because it is too large Load Diff
+723
View File
@@ -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>
&nbsp;&nbsp;^[.A-Za-z0-9_-]+$<br>
&nbsp;&nbsp;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>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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>
&nbsp;&nbsp;&nbsp;&nbsp;Road / GreenSpace / WaterBody<br>
<strong>community-energy</strong>:DistrictEnergy<br>
&nbsp;&nbsp;&nbsp;&nbsp;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>
&nbsp;&nbsp;&nbsp;&nbsp;气候分区 / 用地性质<br>
<strong>urban-energy</strong>:需求聚合<br>
&nbsp;&nbsp;&nbsp;&nbsp;可再生能源潜力 / 碳平衡<br>
<strong>urban-cfd</strong>:行人风舒适评估<br>
&nbsp;&nbsp;&nbsp;&nbsp;(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>
&nbsp;&nbsp;jsonschema.validate(<br>
&nbsp;&nbsp;&nbsp;&nbsp;json.load(f),<br>
&nbsp;&nbsp;&nbsp;&nbsp;json.load(open(<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'schema-building.json')))"
</div>
</div>
<div class="comp-box">
<div class="comp-box-title">TypeScript 生成</div>
<div class="comp-box-desc">
npx quicktype <br>
&nbsp;&nbsp;schema-building.json<br>
&nbsp;&nbsp;-o dist/building.d.ts<br>
&nbsp;&nbsp;--lang typescript<br><br>
npx quicktype ...<br>
&nbsp;&nbsp;schema-energy.json<br>
&nbsp;&nbsp;-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>
&nbsp;&nbsp;--input schema-building.json \<br>
&nbsp;&nbsp;--output dist/building.py \<br>
&nbsp;&nbsp;--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>
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

+41
View File
@@ -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"
}
}
}
+943 -369
View File
File diff suppressed because it is too large Load Diff
+735
View File
@@ -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
}
}
}
+662
View File
@@ -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
}
]
}
}
}
+263
View File
@@ -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
}
]
}
}
}
+68
View File
@@ -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
}
]
}
}
}
+321
View File
@@ -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
}
]
}
}
}
+2697 -185
View File
File diff suppressed because it is too large Load Diff
+980
View File
@@ -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
}
}
}
+741
View File
@@ -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
}
]
}
}
}
+234
View File
@@ -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
}
]
}
}
}
+148
View File
@@ -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
}
]
}
}
}