add: measurements

This commit is contained in:
h z
2025-01-13 15:34:49 +00:00
parent 08293bbf3a
commit afbb48f81a
4 changed files with 86 additions and 9 deletions

View File

@@ -0,0 +1,43 @@
using Skeleton.DataStructure.Link;
namespace Hermeteus;
public class HeterogeneousMixture
{
public HeterogeneousMixture()
{
Layers = new Link<HomogeneousMixture>();
}
internal Link<HomogeneousMixture> Layers { get; }
public double ExternalTemperature { get; internal set; }
public void React()
{
throw new NotImplementedException();
}
private void HeatExchange()
{
throw new NotImplementedException();
}
private void Precipitate()
{
throw new NotImplementedException();
}
private void Stand()
{
throw new NotImplementedException();
}
internal void Add(HeterogeneousMixture m)
{
throw new NotImplementedException();
}
}

View File

@@ -1,3 +1,5 @@
using Hermeteus.Measurements;
namespace Hermeteus; namespace Hermeteus;
public class HomogeneousMixture public class HomogeneousMixture
@@ -5,6 +7,7 @@ public class HomogeneousMixture
public HomogeneousMixture() public HomogeneousMixture()
{ {
Components = new Dictionary<Molecule, double>(); Components = new Dictionary<Molecule, double>();
Energy = 0;
} }
internal Dictionary<Molecule, double> Components { get; } internal Dictionary<Molecule, double> Components { get; }
@@ -14,12 +17,17 @@ public class HomogeneousMixture
.Aggregate((a, b) => a + b) .Aggregate((a, b) => a + b)
.Exp(); .Exp();
public double Amount => Components.Sum(p => p.Value);
public double Ratio(Molecule m) => Amount == 0 public double Ratio(Molecule m) => this.Amount() == 0
? 0 ? 0
: Components.GetValueOrDefault(m, 0) / Amount; : Components.GetValueOrDefault(m, 0) / this.Amount();
public double Energy { get; internal set; }
public double Temperature
{
get => Energy / this.Amount();
internal set => Energy = value * this.Amount();
}
} }

View File

@@ -27,11 +27,22 @@ public static partial class Measurement
.Select(p => p.Key.MolecularMass() * p.Value) .Select(p => p.Key.MolecularMass() * p.Value)
.Sum(); .Sum();
public static double Density(this HomogeneousMixture h) => public static double MolecularDensity(this HomogeneousMixture h) =>
h.Components.Keys h.Components.Keys
.Select(x => x.MolecularDensity() * h.Ratio(x)) .Select(x => x.MolecularDensity() * h.Ratio(x))
.Sum(); .Sum();
public static double Amount(this HomogeneousMixture h) =>
h.Components.Sum(x => x.Value);
public static double IntrinsicDensity(this HomogeneousMixture h)
{
H3 w = (BlueFilter * h.EigenState * OpacityFilter).ConjugateOn(new DiagR3(
Math.E / 8, Math.E, Math.E * 2
));
return w.Rayleigh(w.ColumnAverage + h.EigenState.ColumnAverage);
}
public static double IntrinsicVolume(this HomogeneousMixture h) =>
h.Mass() / h.IntrinsicDensity();
} }

View File

@@ -0,0 +1,15 @@
namespace Hermeteus.Measurements;
public static partial class Measurements
{
public static double HeatCapacity(this HomogeneousMixture m)
{
H3 w = m.EigenState.Log().CayleyNegative().ConjugateOn(new DiagR3(0d, 0.5d, 1d));
return w.Rayleigh(m.EigenState.ColumnAverageBivariant);
}
public static double Phase(this HomogeneousMixture m) =>
throw new NotImplementedException();
}