Module:SpaceBodyLister/Bombard
From Terra Invicta Official Wiki
Documentation for this module may be created at Module:SpaceBodyLister/Bombard/doc
---
---Reads the SpaceBody data files and computes a table of SpaceBody to Bombard Values
--region Dependencies
local SpaceBodyData = mw.loadData('Module:CSVReader/SpaceBody')
--endregion
--region Private constants
--endregion
--region Private member variables
local bombardTable = {}
--endregion
--region Private methods
function getBombardTable()
for rowID, row in pairs(SpaceBodyData) do
local spaceBodyMass = row['mass_kg']
local meanRadius = row['meanRadius_km']
local equatorialRadius = row['equatorialRadius_km']
local oblateness = row['oblateness']
local dimX = row['dimensionX_km']
local dimY = row['dimensionY_km']
local dimZ = row['dimensionZ_km']
local barycenterName = row['barycenterName']
local semiMajorAxisAU = row['semiMajorAxis_AU']
local semiMajorAxiskm = row['semiMajorAxis_km']
local computedMeanRadius = 0
if meanRadius and meanRadius ~= '' and tonumber(meanRadius) then
computedMeanRadius = tonumber(meanRadius)
elseif equatorialRadius and equatorialRadius ~= '' and tonumber(equatorialRadius) then
if oblateness and oblateness ~= '' and tonumber(oblateness) then
computedMeanRadius = ( (3 - tonumber(oblateness)) * tonumber(equatorialRadius)) / 3
elseif dimX and dimX ~= '' and tonumber(dimX) and dimZ and dimZ ~= '' and tonumber(dimZ) then
computedMeanRadius = ( (3 - (tonumber(dimX) - tonumber(dimZ)) / tonumber(dimX)) * tonumber(equatorialRadius)) / 3
end
elseif dimX and dimX ~= '' and tonumber(dimX) then
computedMeanRadius = tonumber(dimX)
if dimY and dimY ~= '' and tonumber(dimY) then
computedMeanRadius = computedMeanRadius + tonumber(dimY)
else
computedMeanRadius = computedMeanRadius + tonumber(dimX)
end
if dimZ and dimZ ~= '' and tonumber(dimZ) then
computedMeanRadius = computedMeanRadius + tonumber(dimZ)
else
computedMeanRadius = computedMeanRadius + tonumber(dimX)
end
computedMeanRadius = computedMeanRadius / 6
end
local SOIradius = 0
if spaceBodyMass and spaceBodyMass ~= '' and tonumber(spaceBodyMass) and barycenterName and barycenterName ~= '' then
local barymass = SpaceBodyData[barycenterName]['mass_kg']
if barymass and barymass ~= '' and tonumber(barymass) then
if semiMajorAxiskm and semiMajorAxiskm ~= '' and tonumber(semiMajorAxiskm) then
SOIradius = (tonumber(spaceBodyMass) / tonumber(barymass)) ^ 0.4 * semiMajorAxiskm
elseif semiMajorAxisAU and semiMajorAxisAU ~= '' and tonumber(semiMajorAxisAU) then
SOIradius = (tonumber(spaceBodyMass) / tonumber(barymass)) ^ 0.4 * semiMajorAxisAU * 149597870.7
end
end
end
local surfaceGravity = 0
if spaceBodyMass and spaceBodyMass ~= '' and tonumber(spaceBodyMass) and barycenterName and barycenterName ~= '' then
surfaceGravity = spaceBodyMass * 6.67384E-11 / (computedMeanRadius ^ 2) / 1000000
end
bombardTable[rowID] = {}
bombardTable[rowID]['computedMeanRadius'] = computedMeanRadius
bombardTable[rowID]['SOIradius'] = SOIradius
bombardTable[rowID]['surfaceGravity'] = surfaceGravity
end
return bombardTable
end
--endregion
--region Public methods
--endregion
return getBombardTable()


