/// <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); }
// Parses all wavefunctions. internal static (StateType, double, object) ToWavefunction(V0_2.State state) { StateType method = ParseInitialStateMethod(state.Method); double energy = state.Energy != null ? state.Energy.Value : 0.0; List <List <string> > superposition = state.Superposition ?? new List <List <string> >(); ClusterOperator clusterOperator = state.ClusterOperator; object outputState; if (method == StateType.SparseMultiConfigurational) { outputState = ToSparseMultiCFWavefunction(superposition); } else if (method == StateType.UnitaryCoupledCluster) { outputState = ToUnitaryCCWavefunction(clusterOperator); } else { throw new System.ArgumentException($"initial state `{state.Label}` is not recognized or implemented."); } return(method, energy, outputState); }