Vapor box designer!

Constants and vapor pressure formulae

𝒮𝒸𝓇𝒾𝓅𝓉 characters are for quantities with dimensions. 𝔻ouble𝕊truck characters are for units themselves.

𝒬[a_,b_]:=Quantity[a,b];
𝒬[a_]:=Quantity[a];
𝒰c[a_,b_]:=UnitConvert[a,b];
𝒰c[a_]:=UnitConvert[a];
𝒰cSI[a_]:=UnitConvert[a,"SI"];
𝕜𝕘=𝒬["Kilograms"];
𝕞=𝒬["Meters"];
𝕂=𝒬["Kelvins"];
𝕁=𝒬["Joules"];
𝕤=𝒬["Seconds"];
ℙ𝕒=𝒬["Pascals"];
𝕎=𝒬["Watts"];

celsiusToKelvin=𝒬[0.,"DegreesCelsius"]//UnitConvert//QuantityMagnitude; (* 273.15 *)

Lithium

<<lithiumDataARK`

Other materials

<<materialDataARK`

Geometry

Assumes that only the walls and base are emitting/absorbing surfaces, (since the baffles are reflecting). Base is only for the first chamber.

calculateGeometryCylinder[boxLength_,boxDiameter_,nozzleDiameter_,nBoxes_]:=Block[{Awall,Anozz,ca,nozzleRadius,boxRadius},
ca=ConstantArray[1,nBoxes];(*hack to also accept differing (Subscript[slotWidth, i]),etc*)
nozzleRadius=nozzleDiameter/2;
boxRadius = boxDiameter/2;
Awall=2π boxRadius boxLength ca;
Awall[[1]]+=π (boxRadius^2);
Anozz=π (nozzleRadius^2) ca;
{Awall,Anozz}
]

Calculates the full area of the cylinder, minus the first hole.

calculateFullAreaCylinders[boxLength_,boxDiameter_,nozzleDiameter_,nBoxes_]:=
Block[{Awall,Anozz,ca,nozzleRadius,boxRadius},
ca=ConstantArray[1,nBoxes];(*hack to also accept differing (Subscript[slotWidth, i]),etc*)
nozzleRadius=nozzleDiameter/2;
boxRadius = boxDiameter/2;
Anozz=π (nozzleRadius^2) ca;
Awall=2π boxRadius boxLength ca +2 π (boxRadius^2)ca - 2Anozz;
Awall[[1]]+=(Anozz)[[1]];
{Awall,Anozz}
]

A combination of the above functions for a single-box. Needs some work as for I/O: what’s an array vs not.

geometry[length_,diameter_,nozzleRatio_,nBoxes_]:=Block[{AwallEvap,nozzleDiameter,AwallRadiate,Anozz},
nozzleDiameter=diameter/nozzleRatio;
{AwallEvap,Anozz}=calculateGeometryCylinder[length,diameter,nozzleDiameter,nBoxes];
{AwallRadiate,Anozz}=calculateFullAreaCylinders[length,diameter,nozzleDiameter,nBoxes];
<|"l"->length,"d"->diameter,"AWet"->AwallEvap,"ATot"->AwallRadiate,"Anoz"->Anozz,"dnoz"->nozzleDiameter,"nBoxes"->nBoxes|>
]

Can geometry

shellVolume[geom_,thickness_]:=geom["ATot"]thickness
shellMass[geom_,thickness_,material_]:=materialLib[material]["ρ"]shellVolume[geom,thickness]
shellThermalMass[geom_,thickness_,material_]:=materialLib[material]["𝓈"]shellVolume[geom,thickness]

Radiation calculation

Gross outgoing radiation (like radiating into a cold void) for a convex object with emissivity ϵ, area A, and temperature  𝒯.

radiatedPowerϵAσT4[ϵ_,𝒜_,𝒯_]:=Block[{σsb},
σsb=𝒬["StefanBoltzmannConstant"];
UnitConvert[ϵ σsb 𝒜 (𝒯^4),𝕎]
];

Radiation transfer between two concentric cylinders of negligibly different diameters, if they were infinite in length.

radiationTransferEfficiencyFactor[geom_,mat1_,mat2_]:=Block[{σsb,ϵ1,ϵ2},
σsb=Quantity["StefanBoltzmannConstant"];
{ϵ1,ϵ2}=materialLib[#]["ϵ"]&/@{mat1,mat2};

((σsb )/((1/(ϵ1))+(1/(ϵ2))-1))geom["ATot"][[1]]//UnitConvert[#,"Watts"(("Kelvins")^(-4))]&
]

Radiation transfer between cylindrical shells as if they were an infinite-length concentric cylinder geometry. This ignores the end faces of the cylinder.

concentricCylinderRTEF[length_,r1_,r2_,mat1_,mat2_]:=Block[{σsb,R,ϵ1,ϵ2},
σsb=Quantity["StefanBoltzmannConstant"];
{ϵ1,ϵ2}=materialLib[#]["ϵ"]&/@{mat1,mat2};
R=r2/r1;

((R ϵ1 ϵ2)/(ϵ1+R ϵ2-ϵ1 ϵ2))σsb 2π r1 length//UnitConvert[#,"Watts"(("Kelvins")^(-4))]&
];