flow360.WindTunnelFarfield#

class WindTunnelFarfield[source]#

Bases: _FarfieldBase

Settings 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. Use PassiveSpacing to 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
    )
)
type: Literal['WindTunnelFarfield'] = 'WindTunnelFarfield'#
name: str = 'Wind Tunnel Farfield'#

Name of the wind tunnel farfield.

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.