-
Notifications
You must be signed in to change notification settings - Fork 0
Heat transfer
The heat transfer function is designed to simulate heat transfer between two objects. It takes the mass, temperature and specific heat capacity of the objects into account. *Note that later the list of factors being taken into account will be expanded.
The heat transfer function's main code is located in the src/modules/heat_transfer.rs source file. You can also find a unit test of the function at tests/heat_transfer_simulation_test.rs.
You can import these parts of the heat transfer function:
-
simulate_heat_transfer— The function that does most of the work and processes the calculations -
HeatTransferResult— The part of the heat transfer function that gives you the ability to return specific values -
Object— The part of the heat transfer function that gives you the ability to create new objects
You can import all of those simply with:
use openphys::{simulate_heat_transfer, HeatTransferResult, Object};These are the returnable values from the heat_transfer function:
-
time_steps— The current amount of time steps, counting from0 -
total_time— The total amount of time elapsed since the start of the heat transfer -
total_heat_transferred— Total heat transferred between the two objects in Jules -
final_temp_of_obj1— The final temperature ofobj1 -
final_temp_of_obj2— The final temperature ofobj2
Here's an example of how you could return one of these values:
println!("Total time: {:.2} seconds", result.total_time);You can create new objects with Object::new(mass, temperature, specific_heat_capacity).
-
mass— The mass of the object in kilograms (kg) -
temperature— The temperature of the object in Kelvin (K) -
specific_heat_capacity— The amount of energy required to change the temperature of the object by 1K (J/kg*K)
An example of a new object is:
let mut obj1 = Object::new(1.0, 273.15, 4186.0); // 1kg of water at its freezing pointThe variable is mutable because the simulate_heat_transfer function changes the temperature of the objects (obj1 in this case).
Before we can begin using the simulate_heat_transfer function we need to specify some variables.
-
time_step— The frequency we want thesimulate_heat_transferto update the temperature of an objects (1time_step= 1 second) - adjust based on the accuracy you want, the recommended value is0.1 -
equilibrium_threshold— Once the difference between two objects' temperatures fall into this threshold, no further changes are made to the objects' temperatures, thus assuming balance between the two objects' temperatures - the temperature difference between the two objects doesn't have to be exactly 0, just low enough that they don't affect each other anymore - adjust based on the accuracy you want, the recommended value is 10^-6 but anything lower than 10^-2 will do
An example of specifying these two variable is:
let time_step = 0.1; // 0.1 seconds
let equilibrium_threshold = 1e-6; // 10^-6We can pass the two objects and the other variables we made into the simulate_heat_transfer as parameters like this: simulate_heat_transfer(&mut obj1, &mut obj2, time_step, equilibrium_threshold).
Here's an example of using the simulate_heat_transfer function with the variables we specified:
let result = simulate_heat_transfer(&mut obj1, &mut obj2, time_step, equilibrium_threshold);Please use this ToC tree instead of the default one.