User-Defined Fluid
Provides a fluid implementation where applications supply the core property
values directly. Prefer creating this fluid with scp.get_fluid("user_defined", ...).
Viscosity, specific heat, density, and conductivity are required. Each property
can be a constant value or a callable that accepts temperature in Celsius.
Freeze point is optional and defaults to 0 C.
Example with inline property values:
from scp import get_fluid
if __name__ == "__main__":
custom_fluid = get_fluid(
"user_defined",
name="CustomFluid",
viscosity=lambda temp: 0.003 - 1.0e-5 * temp,
specific_heat=3200.0,
density=lambda temp: 1000.0 - 0.5 * temp,
conductivity=0.42,
freeze_point=-12.0,
t_min=-20.0,
t_max=80.0,
)
temp = 20.0 # Celsius
viscosity = custom_fluid.viscosity(temp)
density = custom_fluid.density(temp)
specific_heat = custom_fluid.specific_heat(temp)
conductivity = custom_fluid.conductivity(temp)
prandtl = custom_fluid.prandtl(temp)
thermal_diffusivity = custom_fluid.thermal_diffusivity(temp)
freeze_point = custom_fluid.freeze_point()
print(f"Viscosity: {viscosity} {custom_fluid.viscosity_units()}")
print(f"Density: {density} {custom_fluid.density_units()}")
print(f"Specific heat: {specific_heat} {custom_fluid.specific_heat_units()}")
print(f"Conductivity: {conductivity} {custom_fluid.conductivity_units()}")
print(f"Prandtl number: {prandtl} {custom_fluid.prandtl_units()}")
print(f"Thermal diffusivity: {thermal_diffusivity} {custom_fluid.thermal_diffusivity_units()}")
print(f"Freeze point: {freeze_point} {custom_fluid.freeze_point_units()}")
Example using a reusable property object:
from scp import UserDefinedProperties, get_fluid
properties = UserDefinedProperties(
viscosity=0.002,
specific_heat=3200.0,
density=1050.0,
conductivity=0.42,
freeze_point=-12.0,
)
custom_fluid = get_fluid(
"user_defined",
name="CustomFluid",
properties=properties,
t_min=-20.0,
t_max=80.0,
)
- class scp.user_defined.UserDefinedFluid(properties: UserDefinedProperties, *, name: str = 'UserDefinedFluid', t_min: float = -273.15, t_max: float = 1000.0)[source]
Bases:
BaseFluidA fluid whose core properties are provided by the user.
Each temperature-dependent property may be supplied as either a constant value or a callable that accepts temperature in Celsius and returns the property value in the same units used by
scp.base_fluid.BaseFluid.- conductivity(temp: float) float[source]
Returns the user-defined thermal conductivity.
@param temp: Fluid temperature, in degrees Celsius @return: Thermal conductivity in [W/m-K]
- density(temp: float) float[source]
Returns the user-defined density.
@param temp: Fluid temperature, in degrees Celsius @return: Density in [kg/m3]
- property fluid_name: str
Returns the descriptive fluid name.
@return: Fluid name
- freeze_point(x: float | None = None) float[source]
Returns the user-defined freezing point.
@param x: Optional concentration fraction @return: Freezing point temperature in Celsius
- specific_heat(temp: float) float[source]
Returns the user-defined specific heat.
@param temp: Fluid temperature, in degrees Celsius @return: Specific heat in [J/kg-K]
- viscosity(temp: float) float[source]
Returns the user-defined dynamic viscosity.
@param temp: Fluid temperature, in degrees Celsius @return: Dynamic viscosity in [Pa-s]
- class scp.user_defined.UserDefinedProperties(viscosity: float | Callable[[float], float], specific_heat: float | Callable[[float], float], density: float | Callable[[float], float], conductivity: float | Callable[[float], float], freeze_point: float | Callable[[float | None], float] = 0.0)[source]
Bases:
objectCore user-defined fluid properties.
- conductivity: float | Callable[[float], float]
- density: float | Callable[[float], float]
- freeze_point: float | Callable[[float | None], float] = 0.0
- specific_heat: float | Callable[[float], float]
- viscosity: float | Callable[[float], float]