From afbb48f81ac95f1b67a07c58b2bbec1e5fd85b40 Mon Sep 17 00:00:00 2001 From: hzhang Date: Mon, 13 Jan 2025 15:34:49 +0000 Subject: [PATCH] add: measurements --- src/HeterogeneousMixture.cs | 43 +++++++++++++++++++++++++++++++++++++ src/HomogeneousMixture.cs | 20 +++++++++++------ src/Measurements/Basic.cs | 17 ++++++++++++--- src/Measurements/Energy.cs | 15 +++++++++++++ 4 files changed, 86 insertions(+), 9 deletions(-) create mode 100644 src/HeterogeneousMixture.cs create mode 100644 src/Measurements/Energy.cs diff --git a/src/HeterogeneousMixture.cs b/src/HeterogeneousMixture.cs new file mode 100644 index 0000000..bff1b7a --- /dev/null +++ b/src/HeterogeneousMixture.cs @@ -0,0 +1,43 @@ +using Skeleton.DataStructure.Link; + +namespace Hermeteus; + +public class HeterogeneousMixture +{ + public HeterogeneousMixture() + { + Layers = new Link(); + } + + internal Link 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(); + } + + + +} diff --git a/src/HomogeneousMixture.cs b/src/HomogeneousMixture.cs index 102df0a..168fc85 100644 --- a/src/HomogeneousMixture.cs +++ b/src/HomogeneousMixture.cs @@ -1,3 +1,5 @@ +using Hermeteus.Measurements; + namespace Hermeteus; public class HomogeneousMixture @@ -5,6 +7,7 @@ public class HomogeneousMixture public HomogeneousMixture() { Components = new Dictionary(); + Energy = 0; } internal Dictionary Components { get; } @@ -13,13 +16,18 @@ public class HomogeneousMixture .Select(x => x.EigenState.Log() * Ratio(x)) .Aggregate((a, b) => a + b) .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 - : 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(); + } } diff --git a/src/Measurements/Basic.cs b/src/Measurements/Basic.cs index d0708d9..58a9d7e 100644 --- a/src/Measurements/Basic.cs +++ b/src/Measurements/Basic.cs @@ -27,11 +27,22 @@ public static partial class Measurement .Select(p => p.Key.MolecularMass() * p.Value) .Sum(); - public static double Density(this HomogeneousMixture h) => + public static double MolecularDensity(this HomogeneousMixture h) => h.Components.Keys .Select(x => x.MolecularDensity() * h.Ratio(x)) .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(); } diff --git a/src/Measurements/Energy.cs b/src/Measurements/Energy.cs new file mode 100644 index 0000000..333167f --- /dev/null +++ b/src/Measurements/Energy.cs @@ -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(); + +} +