{ "$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 } ] } } }