Jump to content

View more

Image of the Day

Inventory ! Va falloir trouver une autre couleur pour le cadre D: #AzTroScreenshot #screenshotsaturday https://t.co/PvxhGL7cOH
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Sign up now

Whats a good mathematical model for heat transfer?

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 vadevaman   Members   


Posted 16 May 2014 - 01:51 AM

Well basically I have  one main heat variable wich increases and decreases by its modifyers.
Now the interesting part for me is, that how would I transfer the heat dynamically to another variable?

For a good example, heat transfer from oil to water in cars. The oil Heats up and if the water is colder than the oil, it heats up to the same temperature, but it wont do this instantly. It takes some time to transfer heat from one fluid to another.

If possible Id like to ignore if/else sentences and do it all mathematically, this way it would stay dynamic.


So to start things of, obviously I need  a heattransfer variable, so the higher this is the faster the transfer takes place. I'd like to keep this 1.0 at highest, where the heat transfer is almost instant., so a variable of 0.3 would give smoother transfer.
And I also need a cooling variable, so that the heat can be cooled down if its higher than the desired temperature. Same criteria for heating applys to cooling.

As I understand I have to take use of a formula like this:

// decrease
transfer -= (constant + transfer)*transferspeed*dT;
// increase
transfer += (constant - transfer)*transferspeed*dT;

right? But how could I write it as close to a single line code with cooling included ?



Also how to make it so that the desired heat will also decrease, because its a heat transfer procedure.  As a law of physics theres no such thing as a free lunch.


Edited by vadevaman, 16 May 2014 - 02:07 AM.

#2 godmodder   Members   


Posted 16 May 2014 - 05:43 AM

The real way is to use something like Fourier's law like in this article.


Though that might be overkill for your purposes.

#3 CombatWombat   Members   


Posted 16 May 2014 - 06:51 AM

Start by thinking about it as heat energy, not as temperature.

You can get temperature from the internal energy by having the mass and thermal heat capacity of the objects.

The difference in temperature drives a flow of heat energy between the objects.

A thermal resistance slows this flow.


It works like Ohms law.  (E=IR)

But with thermal-ness it would be (T = QR)

where T is temperature delta, Q is heat flow, R is thermal resistance.


How you calculate R is the crux of how complicated your system is!  For a simple "looks good enough" you can just base it on surface area of the objects in contact with a scaling factor. 

For a more accurate effect, you'd have to deal with things like arriving at a convection coefficient which is brilliantly convoluted to calculate.  For round objects there are some natural logs that show up in the calculation of R.  There are Nussault numbers and Prandl numbers.  You can go nuts here.


Your specific example of heat transfer from oil->water is an example of a heat exchanger.


If you can be more specific about what you need to accomplish, we can advise you better.

#4 Buckeye   GDNet+   


Posted 16 May 2014 - 07:02 AM

You may want to use a relatively simple heat transfer simulation.




Thermal units (BTUs) are driven by temperature differences. I've shown it as linear but it's actually a higher order curve.


The oil is at one temperature. Near the radiator wall there's a transfer region whose coefficient is oil dependent. The radiator wall has a coefficient, as does the water.


Given oil and water temperatures, setup equations for each transfer region and solve for the temperature at each interface.

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.

You don't forget how to play when you grow old; you grow old when you forget how to play.

#5 Álvaro   Members   


Posted 16 May 2014 - 07:02 AM

Simple version: The amount of heat transferred per unit of time is proportional to the difference in temperature. The constant of proportionality is what controls how fast the transfer happens.
  // Each timestep

  transfer_heat = control_variable * timestep_length * (object_B.temp - object_A.temp);
  object_A.temp += transfer_heat / object_A.heat_capacity;
  object_B.temp -= transfer_heat / object_B.heat_capacity;

Edited by Álvaro, 16 May 2014 - 07:21 AM.

#6 cadjunkie   Members   


Posted 16 May 2014 - 12:01 PM

Depends on the type of heat transfer and how detailed you want. Are you trying to model conduction and convection or radiation as well? Conduction and convection are pretty simple, but radiation takes a bit of code. For a simple model with conduction and convection, the resistive model is a good one.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.