So I'm trying to model a thermal control system. I have what I think is the equation for calculating equilibrium but the results I've been getting are unrealistically low (as in 1* Kelvin) and I need some body to check my math/code.
First I calculate irradiance
Then I calculate area exposed to sunlight. (lsunPos is a normalised vector of the sun's position in local frame)
Finally we calc radiative heat input/output
The Absorptivity and Emissivity values are based on painted aluminium at 294 K. Waste heat is in watts provided by a seperate function.
Clearly I shouldn't be getting values of 0.91 K in earth orbit
What did I miss?
First I calculate irradiance
Code:
long double DistAU = vessel_Sun / 149597870700; // conversion of vessel_Sun distance from meters to AU
double Irradiance = 1361 * pow((1/DistAU), 2); // Irradiance from sun calculated using inverse square law
Then I calculate area exposed to sunlight. (lsunPos is a normalised vector of the sun's position in local frame)
Code:
VECTOR3 CrossSec;
double TotalArea, ExposedArea, ShadowArea;
v->GetCrossSections(CrossSec);
TotalArea = (CrossSec.x + CrossSec.y + CrossSec.z);
if (InShadow) ExposedArea = 0;
else ExposedArea = fabs(lsunPos.x)*CrossSec.x + fabs(lsunPos.y)*CrossSec.y + fabs(lsunPos.z)*CrossSec.z;
ShadowArea = TotalArea - ExposedArea;
Finally we calc radiative heat input/output
Code:
double Absorptivity = 0.25;
double Emissivity = 0.39;
double StefanBoltzmann = 5.67e-8;
double RadInput = (Irradiance * Absorptivity * ExposedArea) + WasteHeat;
double RadOutput = Emissivity * StefanBoltzmann * ShadowArea;
double eTemp = pow((RadInput/RadOutput), 1/4);
sprintf(oapiDebugString(),"In %0.2f, Out %0.2f, Equilibrium %0.2f", RadInput, RadOutput, eTemp);
The Absorptivity and Emissivity values are based on painted aluminium at 294 K. Waste heat is in watts provided by a seperate function.
Clearly I shouldn't be getting values of 0.91 K in earth orbit
What did I miss?