using System; using System.Linq; using VirtualChemistry.Chemistry.Atoms.Implements; using VirtualChemistry.Chemistry.Atoms.Resolver; using VirtualChemistry.Chemistry.Compounds.Implements; using VirtualChemistry.Chemistry.Containers; using VirtualChemistry.Chemistry.Mixtures.Implements; using VirtualChemistry.Constants; namespace VirtualChemistryTest; public static class AtomSoupTest { private static BaseAtom[] AllAtoms() => ChemistryConstant.ElementSymbols.Select(AtomResolver.Resolve).ToArray(); private class Container : IChemicalContainer { public Container(HeterogeneousMixture h) => Content = h; public double Volume() => 200; public HeterogeneousMixture Content { get; set; } public double EnvironmentPressure { get; set; } public double EnvironmentTemperature { get; set; } } [Test] public static void AtomSoupTest1() { HeterogeneousMixture h = new (); h.Container = new Container(h); HomogeneousMixture m = new(); h.AddLayer(m); foreach (BaseAtom a in AllAtoms()) { Compound c = a.GrabCompound; a.Compound = c; c.Amount = 1; m.AddCompound(c); } m.Volume = m.FreeVolume; h.Container.EnvironmentTemperature = 4.4; for (int i = 1; i < 50; i++) h.OneStep(); Console.WriteLine($"{h.Layers.Count} {h.Layers.Sum(x => x.Volume)} --- {h.FreeVolume}"); foreach (HomogeneousMixture mx in h.Layers) { Console.WriteLine($"{mx.Temperature} ====={mx.FreeVolume}==={mx.Density}={mx.Volume}={mx.CompressionStiffness}"); foreach (Compound cx in mx.Compounds) { var b = cx.Atoms.First().NextUnconnected("m"); Console.WriteLine($"{cx.Expression}\t\tAMT:{cx.Amount}\t\tRes:{mx.Resolvability(cx)}\t\tE:{b.Energy}"); } } m.RPC(); } [Test] public static void SoTest1() { HeterogeneousMixture h = new (); h.Container = new Container(h); HomogeneousMixture m = new(); h.AddLayer(m); BaseAtom a = new SoAtom(); a.C(); Compound c = a.GrabCompound; a.Compound = c; c.Amount = 1; m.AddCompound(c); m.Volume = m.FreeVolume; h.Container.EnvironmentTemperature = 2.4; h.OneStep(); foreach (HomogeneousMixture mx in h.Layers) { Console.WriteLine($"{mx.Temperature} ==================="); foreach (Compound cx in mx.Compounds) { var b = cx.Atoms.First().NextUnconnected("m"); Console.WriteLine($"{cx.Expression}\t\tAMT:{cx.Amount}\t\tRes:{mx.Resolvability(cx)}\t\tE:{b.Energy}"); } } } }