Skip to content

Commit ff981ce

Browse files
authored
Simplify Hamiltonian Creation (#133)
* now create hamiltonian with more tensor-y operations rather than in for loop, hopefully saving some time Also requires some fiddling with shape of different internal tensor values
1 parent ba3690a commit ff981ce

File tree

3 files changed

+8
-13
lines changed

3 files changed

+8
-13
lines changed

nuTens/propagator/base-matter-solver.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ class BaseMatterSolver
3535
NT_PROFILE();
3636

3737
energies = newEnergies;
38-
energiesRed = energies.getValues({"...", 0});
38+
energiesRed = energies.getValues({"..."});
39+
energiesRed.unsqueeze(-1);
3940

4041
hamiltonian = Tensor::zeros({energies.getBatchDim(), nGenerations, nGenerations}, dtypes::kComplexFloat).requiresGrad(false);
4142
}

nuTens/propagator/const-density-solver.cpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,11 @@ using namespace nuTens;
55
void ConstDensityMatterSolver::calculateEigenvalues(Tensor &eigenvectors, Tensor &eigenvalues)
66
{
77
NT_PROFILE();
8-
9-
for (int i = 0; i < nGenerations; i++)
10-
{
11-
for (int j = 0; j < nGenerations; j++)
12-
{
13-
hamiltonian.setValue({"...", i, j},
14-
Tensor::div(diagMassMatrix.getValues({i, j}), energiesRed) -
15-
electronOuter.getValues({i, j}));
16-
}
17-
}
8+
9+
hamiltonian.setValue({"..."}, (Tensor::div(diagMassMatrix, energiesRed) - electronOuter));
1810

1911
Tensor::eigh(hamiltonian, eigenvalues, eigenvectors);
12+
2013
}
2114

2215
void ConstDensityMatterSolver::buildElectronOuterProduct()
@@ -29,7 +22,6 @@ void ConstDensityMatterSolver::buildElectronOuterProduct()
2922
electronOuter =
3023
Tensor::scale(Tensor::outer(mixingMatrix.getValues({0, 0, "..."}).conj(), mixingMatrix.getValues({0, 0, "..."})),
3124
-nuTens::constants::Groot2 * density);
32-
3325
}
3426

3527
else
@@ -38,4 +30,6 @@ void ConstDensityMatterSolver::buildElectronOuterProduct()
3830
Tensor::scale(Tensor::outer(mixingMatrix.getValues({0, 0, "..."}), mixingMatrix.getValues({0, 0, "..."}).conj()),
3931
nuTens::constants::Groot2 * density);
4032
}
33+
34+
electronOuter.unsqueeze(0);
4135
}

nuTens/propagator/const-density-solver.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class ConstDensityMatterSolver : public BaseMatterSolver
8484
Tensor diag = Tensor::scale(Tensor::mul(m, m), 0.5);
8585

8686
// construct the diagonal mass^2 matrix used in the hamiltonian
87-
diagMassMatrix = Tensor::diag(diag).requiresGrad(false);
87+
diagMassMatrix = Tensor::diag(diag).requiresGrad(false).unsqueeze(0);
8888
}
8989

9090

0 commit comments

Comments
 (0)