Fluid Zones¶
The fluidic zone properties are defined using consecutively numbered blocks like:
'FZ_1' : {...},
'FZ_2' : {...},
'FZ_3' : {...},
Each block corresponds to a specific fluid zone within the simulation domain and is identified by a unique key (e.g., ‘FZ_1’). The properties within each block specify the type of zone (such as translating, rotating, porous, disc, or canopy) and the relevant parameters required for that zone type. These parameters control the physical behavior and characteristics of the fluid zone, such as velocity vectors, resistance factors, geometric definitions, and other model-specific settings.
The configuration allows for flexible definition of multiple fluid zones, each with its own set of properties, to accurately represent complex flow regions within the computational mesh.
For translating regions
'FZ_1':{
'type':'translating',
# Use def when the vtp file specifies a closed volumetric region defining the translating region
'def':'translating.vtp',
# Use zone when the mesh containns a predefined cell zone
'zone': [10],
# Velocity vector in mesh units/sec
'vector': [1.0, 0.0, 0.0],
},
For rotating regions
'FZ_1':{
'type':'rotating',
# Use def when the vtp file specifies a closed volumetric region defining the rotating region
'def':'rotating.vtp',
# Use zone when the mesh containns a predefined cell zone
'zone': [10],
'omega': -0.52, # rad/s
'axis': [1.0, 0.0, 0.0],
'origin': [0.0, 0.0, 0.0],
},
For porous regions
'FZ_1':{
'type':'porous',
# Use def when the vtp file specifies a closed volumetric region defining the porous region
'def':'porous.vtp',
# Use zone when the mesh containens a predefined cell zone
'zone': [10],
# Inertial resistance factor
'C2': 500,
# Permeability
'alpha': 10e-7,
},
Note
The model constants need to be provided in mesh units. The examples below assume a mesh in metres (Units of alpha is :math 1/m and C2 is :math 1/m^2)
The momentum source term for porous media is given by:
where \(S_i\) is the source term in the \(i\)-th direction, \(\mu\) is the dynamic viscosity, \(\alpha\) is the permeability, \(\rho\) is the fluid density, \(C_2\) is the inertial resistance factor, and \(V_i\) is the velocity component.
In laminar flow using Darcy’s power law:
where \(\Delta P\) is the pressure drop, \(\mu\) is the dynamic viscosity, \(\alpha\) is the permeability, and \(V\) is the velocity.
For actuator disk zones
Note
The actuator disk model is a simplified representation of a rotating disc that generates thrust and drag forces in a fluid flow. It is commonly used in computational fluid dynamics (CFD) simulations to model the effects of wind turbines, propellers, or other rotating machinery on the surrounding fluid.
The simple actuator disk model assumes that the disc has a uniform distribution of thrust and drag forces across its surface. The thrust coefficient (CT) and tip speed ratio (TSR) are key parameters that define the performance of the actuator disk. The thrust coefficient (CT) is a dimensionless parameter that relates the thrust force generated by the disc to the dynamic pressure of the incoming flow. It is defined as: .. math:
CT = \frac{T}{\frac{1}{2} \rho V^2 A}
where \(T\) is the thrust force, \(\rho\) is the fluid density, \(V\) is the velocity of the incoming flow, and \(A\) is the area of the disc.
'FZ_1':{
'type':'disc',
"discretisation": {"type": "disc", "number of elements": 24},
"model": {
# simple or BET
"type": "simple",
# Thrust coefficient
'thrust coefficient':0.84,
# Power coefficient
'power coefficient':0.84,
},
"controller": {
# none, tsr curve, fixed, schedule
"type": "none",
},
"geometry": {
# Thrust direction
"normal": [0.0, 0.0, 1.0],
# Disc centre
"centre": [0.0, 0.0, 1e-06],
# Up vector
"up": [1.0, 0.0, 0.0],
# Inner radius
"inner radius": 0.039025,
# Outer radius
"outer radius": 0.175,
},
"name": "R01",
# Rotation direction clockwise or anticlockwise
"rotation direction": "clockwise",
# closed surface defining region of cells to distribute momemtum source
'def':'T38-248.75.vtp',
# Location of reference conditions used to calculate thrust from disc
'reference point': [1.0,1.0,1.0],
# Rotational speed
'omega': 314.1592653589793, # rad/s
},
Blade Element Theory (BET) actuator disk model The BET actuator disk model is a more advanced representation of a rotating disc that takes into account the aerodynamic characteristics of the blades or elements on the disc. It is commonly used in simulations of wind turbines, propellers, and other rotating machinery to accurately predict their performance in fluid flows. The BET model divides the disc into multiple sections or elements, each with its own aerodynamic properties. The thrust and drag forces are calculated for each element based on its local angle of attack, lift and drag coefficients, and other parameters. This allows for a more detailed representation of the flow around the disc and the interaction between the blades and the fluid.
"FZ_1": {
"type": "disc",
"discretisation": {"type": "disc", "number of elements": 24},
"model": {
# simple or BET
"type": "BET",
# propellor or turbine
"kind": "propellor",
# Blade chord (span %, chord length)
"blade chord": [
[0.2333, 0.1468],
[0.2667, 0.1681],
[0.3333, 0.211],
[0.4, 0.2261],
[0.4667, 0.2271],
[0.5333, 0.2208],
[0.6, 0.2091],
[0.6667, 0.1926],
[0.7333, 0.1715],
[0.8, 0.1462],
[0.8667, 0.1212],
[0.9091, 0.1027],
[1.0, 0.0581],
],
# Blade twist (span %, angle degrees)
"blade twist": [
[0.2333, 28.6202],
[0.2667, 25.5228],
[0.3333, 20.9055],
[0.4, 18.3605],
[0.4667, 16.665],
[0.5333, 14.8896],
[0.6, 13.4845],
[0.6667, 12.3585],
[0.7333, 11.4509],
[0.8, 10.2263],
[0.8667, 9.0608],
[0.9091, 8.5419],
[1.0, 0.0],
],
# Number of circumferential sections
"number of sections": 24,
# Number of blades
"number of blades": 2,
# list of aerofoil sections [[spanwise %, airofoil_name1], ...] names should correlate to entries in "aerofoils"
"aerofoil positions": [[0.0, "aerofoil1"], [1.0, "aerofoil1"]],
# Aerofoil data
"aerofoils": {
# dictionary of aerofoil coefficient tables
"aerofoil1": {
# drag polar in [degrees, cd]
"cd": [
[-60.0, 1.4552],
[-50.0, 1.0992],
[-40.0, 0.748],
[-30.0, 0.4605],
[-25.0, 0.3701],
[-20.0, 0.284],
[-15.0, 0.1842],
[-10.0, 0.1157],
[-6.0, 0.0883],
[-5.0, 0.0806],
[-4.0, 0.074],
[-3.0, 0.0583],
[-2.0, 0.0353],
[-1.0, 0.0314],
[0.0, 0.0289],
[1.0, 0.0276],
[2.0, 0.0291],
[3.0, 0.0308],
[4.0, 0.0333],
[5.0, 0.0357],
[6.0, 0.0409],
[10.0, 0.0667],
[15.0, 0.2908],
[20.0, 0.4857],
[25.0, 0.6023],
[30.0, 0.7409],
[40.0, 1.1456],
[50.0, 1.8184],
[60.0, 2.3542],
],
# lift polar in [degrees, cl]
"cl": [
[-60.0, -0.7978],
[-50.0, -0.8195],
[-40.0, -0.7204],
[-30.0, -0.5429],
[-25.0, -0.4336],
[-20.0, -0.3499],
[-15.0, -0.1601],
[-10.0, -0.0623],
[-6.0, -0.1109],
[-5.0, -0.1771],
[-4.0, -0.146],
[-3.0, -0.0018],
[-2.0, 0.4084],
[-1.0, 0.556],
[0.0, 0.7093],
[1.0, 0.8542],
[2.0, 0.9736],
[3.0, 1.0824],
[4.0, 1.1568],
[5.0, 1.2398],
[6.0, 1.2964],
[10.0, 1.5453],
[15.0, 1.4509],
[20.0, 1.5137],
[25.0, 1.3547],
[30.0, 1.3587],
[40.0, 1.4378],
[50.0, 1.5453],
[60.0, 1.3818],
],
},
},
# Tip loss correction radius (span %)
"tip loss correction radius": 0.8,
# elliptic, acos-fit, accos shift-fit, f-fit, none, rstar
"tip loss correction": "rstar",
},
"controller": {
# none, tsr curve, fixed, schedule
"type": "fixed",
# angular velocity
"omega": 314.1592653589793,
# blade pitch angle
"pitch": 0.0
},
# Rotation direction clockwise or anticlockwise
"rotation direction": "clockwise",
# Geometry of the actuator disk
"geometry": {
# Thrust direction
"normal": [0.0, 0.0, 1.0],
# Disc centre
"centre": [0.0, 0.0, 1e-06],
# Up vector
"up": [1.0, 0.0, 0.0],
# Inner radius
"inner radius": 0.039025,
# Outer radius
"outer radius": 0.175,
},
"name": "R01",
"reference plane": True,
# "reference point": [0.0, 0.0, 0.0],
"status": "on",
"verbose": True,
"update frequency": 1,
"output": True,
"def": "R01.vtp",
},
For tree canopies in terrain wind models
'FZ_1':{
'type':'canopy',
# Use def when the vtp file specifies a closed volumetric region defining the canopy
'def':'canopy_dacosta.vtp',
# Use field when the vtp specifies a set of points on the surface (see below for details)
'field':'canopy_field.vtp',
'func':lad_function,
'cd':0.25,
'beta_p':0.17,
'beta_d':3.37,
'Ceps_4':0.9,
'Ceps_5':0.9,
},
where the parameters cd, beta_p,beta_d, Ceps_4 and Ceps_5 are defined in the literature (for example Desmond, 2014) and the leaf area density (LAD) is typically specified using a function
def lad_function(cell_centre_list):
lai = 5.0 # for example following Da Costa 2007
h_can = 20.0
lad_list = []
for cell in cell_centre_list:
wall_distance = cell[3]
lad = (np.interp(wall_distance, a_z[0] * h_can, a_z[1]) * lai / h_can,)
lad_list.append(lad)
return lad_list
and the variation in leaf area density is a function of height
a_z = (
np.asarray([0.0,0.43,0.1,0.45,0.2,0.56,0.3,0.74,0.4,1.10,
0.5,1.35,0.6,1.48,0.7,1.47,0.8,1.35,0.9,1.01,1.0,0.00]).reshape(11, 2).T
)
Note
When using the field specification the height of the canopy at each boundary face is set by finding the nearest point to the face centre on the supplied VTK file with the height value looked up in a node based scalar array called ‘Height’