flow360.WindTunnelFarfield#
- class WindTunnelFarfield[source]#
Bases:
_FarfieldBaseSettings for analytic wind tunnel farfield generation. The user only needs to provide tunnel dimensions and floor type and dimensions, rather than a geometry.
Important: By default, the volume mesher will grow boundary layers on
WindTunnelFarfield. UsePassiveSpacingto project or disable boundary layer growth.Example
>>> fl.WindTunnelFarfield( width = 10 * fl.u.m, height = 5 * fl.u.m, inlet_x_position = -10 * fl.u.m, outlet_x_position = 20 * fl.u.m, floor_z_position = 0 * fl.u.m, floor_type = fl.CentralBelt( central_belt_x_range = (-1, 4) * fl.u.m, central_belt_width = 1.2 * fl.u.m ) )
- width: Annotated[_Constrained, PlainSerializer(func=_dimensioned_type_serializer, return_type=PydanticUndefined, when_used=always)] = unyt_quantity(10, 'm')#
Width of the wind tunnel.
- Constraints:
func = <function _dimensioned_type_serializer at 0x76d26c7ff370>
return_type = PydanticUndefined
when_used = always
- height: Annotated[_Constrained, PlainSerializer(func=_dimensioned_type_serializer, return_type=PydanticUndefined, when_used=always)] = unyt_quantity(6, 'm')#
Height of the wind tunnel.
- Constraints:
func = <function _dimensioned_type_serializer at 0x76d26c7ff370>
return_type = PydanticUndefined
when_used = always
- inlet_x_position: Annotated[_LengthType, PlainSerializer(func=_dimensioned_type_serializer, return_type=PydanticUndefined, when_used=always)] = unyt_quantity(-20, 'm')#
X-position of the inlet.
- Constraints:
func = <function _dimensioned_type_serializer at 0x76d26c7ff370>
return_type = PydanticUndefined
when_used = always
- outlet_x_position: Annotated[_LengthType, PlainSerializer(func=_dimensioned_type_serializer, return_type=PydanticUndefined, when_used=always)] = unyt_quantity(40, 'm')#
X-position of the outlet.
- Constraints:
func = <function _dimensioned_type_serializer at 0x76d26c7ff370>
return_type = PydanticUndefined
when_used = always
- floor_z_position: Annotated[_LengthType, PlainSerializer(func=_dimensioned_type_serializer, return_type=PydanticUndefined, when_used=always)] = unyt_quantity(0, 'm')#
Z-position of the floor.
- Constraints:
func = <function _dimensioned_type_serializer at 0x76d26c7ff370>
return_type = PydanticUndefined
when_used = always
- floor_type: StaticFloor | FullyMovingFloor | CentralBelt | WheelBelts [Optional]#
Floor type of the wind tunnel.
- property symmetry_plane: GhostSurface#
Returns the symmetry plane boundary surface for half body domains.
- left = WindTunnelGhostSurface(private_attribute_entity_type_name='WindTunnelGhostSurface', private_attribute_id='windTunnelLeft', name='windTunnelLeft', private_attribute_full_name=None, used_by=['all'])#
- right = WindTunnelGhostSurface(private_attribute_entity_type_name='WindTunnelGhostSurface', private_attribute_id='windTunnelRight', name='windTunnelRight', private_attribute_full_name=None, used_by=['all'])#
- inlet = WindTunnelGhostSurface(private_attribute_entity_type_name='WindTunnelGhostSurface', private_attribute_id='windTunnelInlet', name='windTunnelInlet', private_attribute_full_name=None, used_by=['all'])#
- outlet = WindTunnelGhostSurface(private_attribute_entity_type_name='WindTunnelGhostSurface', private_attribute_id='windTunnelOutlet', name='windTunnelOutlet', private_attribute_full_name=None, used_by=['all'])#
- ceiling = WindTunnelGhostSurface(private_attribute_entity_type_name='WindTunnelGhostSurface', private_attribute_id='windTunnelCeiling', name='windTunnelCeiling', private_attribute_full_name=None, used_by=['all'])#
- floor = WindTunnelGhostSurface(private_attribute_entity_type_name='WindTunnelGhostSurface', private_attribute_id='windTunnelFloor', name='windTunnelFloor', private_attribute_full_name=None, used_by=['all'])#
- friction_patch = WindTunnelGhostSurface(private_attribute_entity_type_name='WindTunnelGhostSurface', private_attribute_id='windTunnelFrictionPatch', name='windTunnelFrictionPatch', private_attribute_full_name=None, used_by=['StaticFloor'])#
- central_belt = WindTunnelGhostSurface(private_attribute_entity_type_name='WindTunnelGhostSurface', private_attribute_id='windTunnelCentralBelt', name='windTunnelCentralBelt', private_attribute_full_name=None, used_by=['CentralBelt', 'WheelBelts'])#
- front_wheel_belts = WindTunnelGhostSurface(private_attribute_entity_type_name='WindTunnelGhostSurface', private_attribute_id='windTunnelFrontWheelBelt', name='windTunnelFrontWheelBelt', private_attribute_full_name=None, used_by=['WheelBelts'])#
- rear_wheel_belts = WindTunnelGhostSurface(private_attribute_entity_type_name='WindTunnelGhostSurface', private_attribute_id='windTunnelRearWheelBelt', name='windTunnelRearWheelBelt', private_attribute_full_name=None, used_by=['WheelBelts'])#
- domain_type: Literal['half_body_positive_y', 'half_body_negative_y', 'full_body'] | None = None#
half_body_positive_y: Trim to a half-model by slicing with the global Y=0 plane; keep the ‘+y’ side for meshing and simulation.
half_body_negative_y: Trim to a half-model by slicing with the global Y=0 plane; keep the ‘-y’ side for meshing and simulation.
full_body: Keep the full body for meshing and simulation without attempting to add symmetry planes.
Warning: When using AutomatedFarfield, setting domain_type overrides the ‘auto’ symmetry plane behavior.