/// <summary>
        /// Broombridge serializer
        /// </summary>
        /// <param name="filename">Broombridge filename to serialize</param>
        /// <returns>Serialized Broombridge</returns>
        public static void SerializeBroombridgev0_2(V0_2.Data data, string filename)
        {
            var stringBuilder = new StringBuilder();
            var serializer    = new Serializer();

            stringBuilder.AppendLine(serializer.Serialize(data));
            Console.WriteLine(stringBuilder);
            Console.WriteLine("");
        }
예제 #2
0
        /// <summary>
        /// Converts v0.1 Broombridge to v0.2.
        /// </summary>
        /// <param name="input">Source Broombridge in v0.1 format.</param>
        /// <returns>Converted Broombridge in v0.2 format.</returns>
        public static V0_2.Data Update(V0_1.Data input)
        {
            var output = new V0_2.Data()
            {
                Schema              = input.Schema,
                Format              = input.Format,
                Generator           = input.Generator,
                Bibliography        = input.Bibliography,
                ProblemDescriptions = new List <V0_2.ProblemDescription>()
            };

            foreach (var integralSet in input.IntegralSets)
            {
                var problemDescription = new V0_2.ProblemDescription()
                {
                    Metadata         = integralSet.Metadata,
                    BasisSet         = integralSet.BasisSet,
                    Geometry         = integralSet.Geometry,
                    CoulombRepulsion = integralSet.CoulombRepulsion,
                    ScfEnergy        = integralSet.ScfEnergy,
                    ScfEnergyOffset  = integralSet.ScfEnergyOffset,
                    FciEnergy        = integralSet.FciEnergy,
                    NOrbitals        = integralSet.NOrbitals,
                    NElectrons       = integralSet.NElectrons,
                    EnergyOffset     = integralSet.EnergyOffset,
                    Hamiltonian      = integralSet.Hamiltonian,
                    InitialStates    = new List <V0_2.State>()
                };



                if (integralSet.SuggestedState != null)
                {
                    foreach (var sourceInitialState in integralSet.SuggestedState)
                    {
                        var initialState = new V0_2.State()
                        {
                            Label         = sourceInitialState.SuggestedStateData.Label,
                            Energy        = sourceInitialState.SuggestedStateData.Energy,
                            Method        = V0_2.UpdaterStrings.SparseMultiConfigurational,
                            Superposition = sourceInitialState.SuggestedStateData.Superposition
                        };

                        problemDescription.InitialStates.Add(initialState);
                    }
                }

                output.ProblemDescriptions.Add(problemDescription);
            }

            return(output);
        }
        /// <summary>
        /// Returns Broombridge deserialized into the current version data structure.
        /// Data structure is automatically updated to the current Broombridge version.
        /// </summary>
        /// <param name="filename">Broombridge file address.</param>
        /// <returns>Deserializer Broombridge data strauture.</returns>
        public static Data DeserializeBroombridge(string filename)
        {
            VersionNumber versionNumber = GetVersionNumber(filename);
            var           output        = new V0_2.Data();

            if (versionNumber == VersionNumber.v0_1)
            {
                output = DataStructures.Update(Deserialize <V0_1.Data>(filename));
            }
            else if (versionNumber == VersionNumber.v0_2)
            {
                output = Deserialize <V0_2.Data>(filename);
            }
            else
            {
                throw new System.InvalidOperationException("Unrecognized Broombridge version number.");
            }
            return(new Data(output));
        }