General Question Simulate heat shield

marcogavazzeni

Addon Developer
Addon Developer
Joined
Jan 5, 2009
Messages
219
Reaction score
0
Points
16
Location
Near Verona
Website
orbiteritalia.forumotion.com
Hi guys
I have an idea,and want to know if i can achieve it.

Orbiter gives us the ability to use the spot light or point light by varying the intensity:

LightEmitter *le = AddPointLight (_V(0,-2.0,-29), 200, 1e-3, 0, 2e-3, col_d, col_s, col_a);
le->SetIntensityRef (&th_main_level);

It would be possible to transform the dynamic pressure in a level to simulate the heating of the shield?

double i20;

i20=GetDynPressure();

if (i20 < 0 ) i20= 0;
if (i20 > 100 ) i20= 1;

SpotLight *le1 = (SpotLight*)AddSpotLight (_V(0.0,-10.0,20), _V(0,0.3,-1.0), 150, 1e-3, 0, 1e-3, RAD*45, RAD*80, col_r, col_r, col_a);
le1->SetIntensity (i20);

But that does not work:facepalm:




 
Last edited:

Urwumpe

Not funny anymore
Addon Developer
Donator
Joined
Feb 6, 2008
Messages
37,588
Reaction score
2,312
Points
203
Location
Wolfsburg
Preferred Pronouns
Sire
aerodynamic Heatflux in W/m² is the product of dynamic pressure and velocity.

The light emission is in the best case just a black body radiation case of the heat flux, assuming the heat shield to be in equilibrium.
 

fausto

FOI SuperMod
Joined
Jul 13, 2008
Messages
797
Reaction score
2
Points
0
Location
Monza (Milan)
Marco, una pressione dinamica di 110000 pascal equivale sull'Eridanus ad una temperatura dello scudo termicodi 1200 gradi circa. che è il limite.. l'avevo calcolato tempo fa .. quindi la temperatura è uguale alla pressione dinamica diviso 91.6666!
 

Thundersnook

New member
Joined
Jul 22, 2010
Messages
78
Reaction score
0
Points
0
That sounds awesome! Would be cool if anyone manages to solve this tricky stuff (unfortunatlay my programming-skills are just enough to install Orbiter :lol:)
 

marcogavazzeni

Addon Developer
Addon Developer
Joined
Jan 5, 2009
Messages
219
Reaction score
0
Points
16
Location
Near Verona
Website
orbiteritalia.forumotion.com
Marco, una pressione dinamica di 110000 pascal equivale sull'Eridanus ad una temperatura dello scudo termicodi 1200 gradi circa. che è il limite.. l'avevo calcolato tempo fa .. quindi la temperatura è uguale alla pressione dinamica diviso 91.6666!
Si ma il mio problema è trasformare un certo range di pressione dinamica ad uno che venga usato per settare l'intensità da lvl o a lvl 1 o 10 non sò

---------- Post added 11-03-10 at 01:51 AM ---------- Previous post was 11-02-10 at 03:52 PM ----------

double heat=GetDynPressure();
if(heat<1000)shield_proc=0;
if(heat>5500)shield_proc=0.05;
if(heat>11000)shield_proc=0.1;
if(heat>16500)shield_proc=0.15;
if(heat>22000)shield_proc=0.20;
if(heat>27500)shield_proc=0.25;
if(heat>33000)shield_proc=0.30;
if(heat>38500)shield_proc=0.35;
if(heat>44000)shield_proc=0.40;
if(heat>49500)shield_proc=0.45;
if(heat>55000)shield_proc=0.50;
if(heat>60500)shield_proc=0.55;
if(heat>66000)shield_proc=0.60;
if(heat>71500)shield_proc=0.65;
if(heat>77000)shield_proc=0.70;
if(heat>82500)shield_proc=0.75;
if(heat>88000)shield_proc=0.80;
if(heat>93500)shield_proc=0.85;
if(heat>99000)shield_proc=0.90;
if(heat>104500)shield_proc=0.95;
if(heat>110000)shield_proc=1.0;

SpotLight* le1 =(SpotLight*)AddSpotLight(_V(0.0,-12.0,20), _V(0,0.5,-1.0), 50, 1e-3, 0, 1e-3, RAD*75, RAD*80, col_r, col_d, col_d);
le1->SetIntensityRef (&shield_proc);

:feedback:
 

tblaxland

O-F Administrator
Administrator
Addon Developer
Webmaster
Joined
Jan 1, 2008
Messages
7,320
Reaction score
25
Points
113
Location
Sydney, Australia
I don't understand your Italian, but instead of all those if statements, why not:
Code:
shield_proc = min(heat/110000.0, 1.0);
 

Urwumpe

Not funny anymore
Addon Developer
Donator
Joined
Feb 6, 2008
Messages
37,588
Reaction score
2,312
Points
203
Location
Wolfsburg
Preferred Pronouns
Sire
Why don't you use a Q value (Enthalpy)?

This formula here:

aeroheatflux.png


gives you how much energy you get per second (J/s = Watt) per square meter (cross section), for a section of the heat shield. The variable [math]T_w[/math] is the outside wall temperature of the section. [math]T_\infty[/math] is the ambient air temperature, etc.

The complete heat balance of a volume cell (voxel) at the heat shield is:
heatbalance.png


Nothing surprising.

If you integrate the [math]\dot{Q}_{voxel}[/math] of the voxel over time (eg by RK4), you get the stored energy Q in the voxel, which you can then use for calculating temperature and thus, for calculating the spectrum of the radiative heat: from black body temperature, you can use a simple look-up table for getting the color and intensity of the radiation.

if you pay attention, the heating is not proportional to the dynamic pressure, but the heat flux.

Code:
hflux = 0.5*GetDynamicPressure() * velocity;


For the colors, see this one about the theory:

[ame="http://en.wikipedia.org/wiki/Black_body"]Black body - Wikipedia, the free encyclopedia[/ame]

The intensity of the light is not proportional to temperature, but proportional to [math]T_{w}^4[/math]
 
Last edited:

marcogavazzeni

Addon Developer
Addon Developer
Joined
Jan 5, 2009
Messages
219
Reaction score
0
Points
16
Location
Near Verona
Website
orbiteritalia.forumotion.com
I don't understand your Italian, but instead of all those if statements, why not:
Code:
shield_proc = min(heat/110000.0, 1.0);

This formula is much better!:thumbup:
If i want from a higher value than zero?

Why don't you use a Q value (Enthalpy)?

This formula here:

aeroheatflux.png


gives you how much energy you get per second (J/s = Watt) per square meter (cross section), for a section of the heat shield. The variable [math]T_w[/math] is the outside wall temperature of the section. [math]T_\infty[/math] is the ambient air temperature, etc.

The complete heat balance of a volume cell (voxel) at the heat shield is:
heatbalance.png


Nothing surprising.

If you integrate the [math]\dot{Q}_{voxel}[/math] of the voxel over time (eg by RK4), you get the stored energy Q in the voxel, which you can then use for calculating temperature and thus, for calculating the spectrum of the radiative heat: from black body temperature, you can use a simple look-up table for getting the color and intensity of the radiation.

if you pay attention, the heating is not proportional to the dynamic pressure, but the heat flux.

Code:
hflux = 0.5*GetDynamicPressure() * velocity;


For the colors, see this one about the theory:

Black body - Wikipedia, the free encyclopedia

The intensity of the light is not proportional to temperature, but proportional to [math]T_{w}^4[/math]

I try changing the texture alpha channel to be able to find a right shade :rolleyes:


double heat = (0.5*GetDynPressure() * (GetAirspeed()))/100000;
shield_proc = min(heat/1200.0, 1.0);

SpotLight* le1 =(SpotLight*)AddSpotLight(_V(0.0,-12.0,20), _V(0,0.5,-1.0), 50, 1e-3, 0, 1e-3, RAD*75, RAD*80, col_r, col_d, col_d);
le1->SetIntensityRef (&shield_proc);
 

Wishbone

Clueless developer
Addon Developer
Joined
Sep 12, 2010
Messages
2,421
Reaction score
1
Points
0
Location
Moscow
Alpha channel is just the transparency. You have to transform temperature to wavelength through the black body curve, and then wavelength to RGB triplet (see here http://www.magnetkern.de/spektrum.html)

EDIT: while the BBC gives out the whole emission spectrum, you can actually use the maximum by Wien's law.
 
Last edited:

tblaxland

O-F Administrator
Administrator
Addon Developer
Webmaster
Joined
Jan 1, 2008
Messages
7,320
Reaction score
25
Points
113
Location
Sydney, Australia
This formula is much better!:thumbup:
If i want from a higher value than zero?
Many ways but an example:
Code:
const double max_proc = 1.0; // should always be 1.0
const double min_proc = 0.1; // range from 0 to max_proc
const double heat_at_min_proc = 1e3;
const double heat_at_max_proc = 1e5;

shield_proc = min_proc;
if (heat > heat_at_min_proc)
    shield_proc += min( (heat - heat_at_min_proc) * (max_proc - min_proc)/(heat_at_max_proc - heat_at_minproc), max_proc - min_proc;);
 

Ghostrider

Donator
Donator
Joined
Feb 16, 2008
Messages
3,606
Reaction score
2
Points
78
Location
Right behind you - don't look!
I don't understand your Italian, but instead of all those if statements, why not:
Code:
shield_proc = min(heat/110000.0, 1.0);

Because in Italian it sounds better. I mean, try whispering "una pressione dinamica di 110000 pascal equivale sull'Eridanus ad una temperatura dello scudo termico di 1200 gradi circa" in a girl's ear (provided she doesn't speak Italian). Success guaranteed!

... Or maybe you get your heatshield whacked. Whatever.
 

marcogavazzeni

Addon Developer
Addon Developer
Joined
Jan 5, 2009
Messages
219
Reaction score
0
Points
16
Location
Near Verona
Website
orbiteritalia.forumotion.com
Because in Italian it sounds better. I mean, try whispering "una pressione dinamica di 110000 pascal equivale sull'Eridanus ad una temperatura dello scudo termico di 1200 gradi circa" in a girl's ear (provided she doesn't speak Italian). Success guaranteed!

... Or maybe you get your heatshield whacked. Whatever.
:lol:

depends on what you do with the girl

double heat = (0.5*GetDynPressure() * (GetAirspeed()))/100000;
if (heat>300)shield_proc=0.01;
if (heat<1200) shield_proc=1.0;
shield_proc = min(heat/1200.0, 1.0);
 

tblaxland

O-F Administrator
Administrator
Addon Developer
Webmaster
Joined
Jan 1, 2008
Messages
7,320
Reaction score
25
Points
113
Location
Sydney, Australia
:lol: I'll try it with my wife tonight. She does talk French, but not Italian ;)
...code snipped...
You have a problem there for heat<300. I think you meant something like this...
Code:
if (heat<300) shield_proc=0.01;
else shield_proc = min(heat/1200.0, 1.0);
...or...
Code:
if (heat<300)shield_proc=0.01;
else if (heat>1200) shield_proc=1.0;
else shield_proc = heat/1200.0;
 

RisingFury

OBSP developer
Addon Developer
Joined
Aug 15, 2008
Messages
6,427
Reaction score
491
Points
173
Location
Among bits and Bytes...
The light emission is in the best case just a black body radiation case of the heat flux, assuming the heat shield to be in equilibrium.


I haven't done any research into the matter, but off the top of the head I wouldn't just say it's a blackbody. The heatshild itself would be a blackbody due to obvious high thermal energies... but you have a lot of plasma around that might act like gasses that radiate when excited...

So I'd be careful with the guess...
 

Wishbone

Clueless developer
Addon Developer
Joined
Sep 12, 2010
Messages
2,421
Reaction score
1
Points
0
Location
Moscow
The OP was talking about the heatshield. The dissociation of air and resultant nitrous oxides are quite well (for a sim) modelled by the orbiter itself...
 

computerex

Addon Developer
Addon Developer
Joined
Oct 16, 2007
Messages
1,282
Reaction score
17
Points
0
Location
Florida
Code:
hflux = 0.5*GetDynamicPressure() * velocity;

I thought velocity was cubed. In any case, for simulating "heat" in Orbiter you are going to end up with simplistic/semi-realistic results at best. Make good assumptions about your model and with fuzzy logic you should end up with a believable model to most.
 

fausto

FOI SuperMod
Joined
Jul 13, 2008
Messages
797
Reaction score
2
Points
0
Location
Monza (Milan)
i agree, computerex! I computed Antares capsule heat shield temperature by extracting it from a fraction of dynamic pressure!
 

Urwumpe

Not funny anymore
Addon Developer
Donator
Joined
Feb 6, 2008
Messages
37,588
Reaction score
2,312
Points
203
Location
Wolfsburg
Preferred Pronouns
Sire
I thought velocity was cubed. In any case, for simulating "heat" in Orbiter you are going to end up with simplistic/semi-realistic results at best. Make good assumptions about your model and with fuzzy logic you should end up with a believable model to most.

Dynamic Pressure is already [math]p_d = \frac{1}{2} \cdot \rho \cdot v^2[/math]
 
Top