Advertisement
RA2lover

Solar Mirror Array Irradiance Calculator

Oct 27th, 2016
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.46 KB | None | 0 0
  1. --This assumes 100% reflective mirrors with M²=1 at all wavelengths. You'll likely need more to compensate for mirror inefficiencies.
  2.  
  3. local Temperature = 5777 --K
  4. local MirrorRadius = 10 --m
  5. local TargetDistance = 4.2e7 --m
  6. local DesiredIrradiance = 1e8 --W/m²
  7.  
  8. local StartingWavelength = 1e-9 --m
  9. local FinalWavelength = 20000e-9 --m
  10. local Step = 1e-11 --m
  11.  
  12. local SolarIrradiance = 1367 --W/m²
  13. --local MirrorEfficiency = 0.9 --unused
  14. -- Yes, i know mirrors have different reflectances at different wavelengths, but i'm too lazy to actually look on material data for it.
  15. --I'm stuck between using a silver(terrible at reflecting UV) or aluminum mirror(worse than silver on visible/IR light, but unlike silver it doesn't lose virtually all reflectance in UV).
  16.  
  17. local StefanBoltzmannConstant = 5.670367e-8 --W*m^-2*K^4
  18. local BoltzmannConstant = 1.38064852e-23 --J/K
  19. local PlanckConstant = 6.626070040e-34 --J/s
  20. local SpeedOfLight =  299792458 --m/s
  21.  
  22. function PlanckIntegral(Wavelength, Temperature)
  23.   --ported from http://www.spectralcalc.com/blackbody/appendixA.html
  24.   local c1 =  (PlanckConstant*SpeedOfLight/BoltzmannConstant)
  25.   local x =  c1  * (1/Wavelength) / Temperature
  26.   local iterations = math.floor(math.min((20 + 100/x),1024))
  27.   local sum=0
  28.   for n=1,iterations do
  29.     local dn=1/n
  30.     sum= sum + math.exp(-n*x)*((x^3) + (3 * (x^2) + 6*(x+dn)*dn)*dn)*dn
  31.   end
  32.   local c2 = (2*PlanckConstant*(SpeedOfLight^2))
  33.   return (c2*((Temperature/c1)^4)*sum*math.pi)/(StefanBoltzmannConstant*(Temperature^4))
  34. end
  35.  
  36. local SpectrumCurve={}
  37.  
  38. print("Integrating blackbody spectrum...")
  39. for n=StartingWavelength,FinalWavelength,Step do
  40.   table.insert(SpectrumCurve,{n,PlanckIntegral(n,Temperature)})
  41. end
  42.  
  43. print("Done. Calculating diffraction per wavelength...")
  44. local TotalIrradiance = 0
  45. for n=1,#SpectrumCurve-1 do
  46.   local p = SpectrumCurve[n]
  47.   local p2 = SpectrumCurve[n+1]
  48.   local DiffractionAngle = 1.22*p[1]/MirrorRadius
  49.   --print(DiffractionAngle)
  50.   local BeamPower = (p2[2]-p[2])*SolarIrradiance*(math.pi*(MirrorRadius^2))
  51.   --print(p2[2],p[2])
  52.   local BeamIrradiance = BeamPower/(math.pi * (TargetDistance * math.tan(DiffractionAngle/2))^2)
  53.   TotalIrradiance = TotalIrradiance+BeamIrradiance
  54.   --print(string.format("Beam intensity between %3d and %3d nm is %e W", p[1]*1e9,p2[1]*1e9,BeamIrradiance))
  55. end
  56.  
  57. print("Irradiance per mirror = "..TotalIrradiance.. "W/m²")
  58. print(DesiredIrradiance/TotalIrradiance.."mirrors needed to achieve desired irradiance")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement