Loading lib/qsim/base/qcor_qsim.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,19 @@ ModelBuilder::createModel(ModelType type, const HeterogeneousMap ¶ms) { }; model.hamiltonian = H; // Non-zero initial spin state: if (std::find(hs_model.initial_spins.begin(), hs_model.initial_spins.end(), 1) != hs_model.initial_spins.end()) { auto initialSpinPrep = qcor::__internal__::create_composite("InitialSpin"); auto provider = qcor::__internal__::get_provider(); for (int i = 0; i < hs_model.initial_spins.size(); ++i) { if (hs_model.initial_spins[i] == 1) { initialSpinPrep->addInstruction(provider->createInstruction("X", i)); } } model.user_defined_ansatz = std::make_shared<KernelFunctor>(initialSpinPrep); } return model; } else { qcor::error("Unknown model type."); Loading lib/qsim/impls/workflow/time_dependent.cpp +7 −1 Original line number Diff line number Diff line Loading @@ -42,7 +42,13 @@ TimeDependentWorkflow::execute(const QuantumSimulationModel &model) { // std::cout << stepAnsatz.circuit->toString() << "\n"; // First step: if (!totalCirc) { // If there is a state-prep circuit (non-zero initial state) if (model.user_defined_ansatz) { totalCirc = model.user_defined_ansatz->evaluate_kernel({}); totalCirc->addInstructions(stepAnsatz.circuit->getInstructions()); } else { totalCirc = stepAnsatz.circuit; } } else { // Append Trotter steps totalCirc->addInstructions(stepAnsatz.circuit->getInstructions()); Loading Loading
lib/qsim/base/qcor_qsim.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,19 @@ ModelBuilder::createModel(ModelType type, const HeterogeneousMap ¶ms) { }; model.hamiltonian = H; // Non-zero initial spin state: if (std::find(hs_model.initial_spins.begin(), hs_model.initial_spins.end(), 1) != hs_model.initial_spins.end()) { auto initialSpinPrep = qcor::__internal__::create_composite("InitialSpin"); auto provider = qcor::__internal__::get_provider(); for (int i = 0; i < hs_model.initial_spins.size(); ++i) { if (hs_model.initial_spins[i] == 1) { initialSpinPrep->addInstruction(provider->createInstruction("X", i)); } } model.user_defined_ansatz = std::make_shared<KernelFunctor>(initialSpinPrep); } return model; } else { qcor::error("Unknown model type."); Loading
lib/qsim/impls/workflow/time_dependent.cpp +7 −1 Original line number Diff line number Diff line Loading @@ -42,7 +42,13 @@ TimeDependentWorkflow::execute(const QuantumSimulationModel &model) { // std::cout << stepAnsatz.circuit->toString() << "\n"; // First step: if (!totalCirc) { // If there is a state-prep circuit (non-zero initial state) if (model.user_defined_ansatz) { totalCirc = model.user_defined_ansatz->evaluate_kernel({}); totalCirc->addInstructions(stepAnsatz.circuit->getInstructions()); } else { totalCirc = stepAnsatz.circuit; } } else { // Append Trotter steps totalCirc->addInstructions(stepAnsatz.circuit->getInstructions()); Loading