Skip to content

Commit cf2eef1

Browse files
committed
move momentum coeffiients to real space transport output
1 parent 823cc61 commit cf2eef1

File tree

1 file changed

+49
-19
lines changed

1 file changed

+49
-19
lines changed

src/observable/coupled_observables.cpp

Lines changed: 49 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -460,12 +460,6 @@ void CoupledCoefficients::outputToJSON(const std::string &outFileName) {
460460
appendTransportTensorForOutput(seebeckDrag, dimensionality, convSeebeck, iCalc, seebeckDragOut);
461461
appendTransportTensorForOutput(seebeckSelf, dimensionality, convSeebeck, iCalc, seebeckSelfOut);
462462
appendTransportTensorForOutput(seebeckTotal, dimensionality, convSeebeck, iCalc, seebeckTotalOut);
463-
464-
// convert momentum contributions
465-
appendTransportTensorForOutput(sigmaMom, dimensionality, convSigma, iCalc, sigmaMomOut);
466-
appendTransportTensorForOutput(kappaElMom, dimensionality, convKappa, iCalc, kappaElMomOut);
467-
appendTransportTensorForOutput(kappaPhMom, dimensionality, convKappa, iCalc, kappaPhMomOut);
468-
appendTransportTensorForOutput(seebeckMom, dimensionality, convSeebeck, iCalc, seebeckMomOut);
469463
}
470464

471465
{ // so that the output json goes out of scope and it can be reused below
@@ -495,12 +489,7 @@ void CoupledCoefficients::outputToJSON(const std::string &outFileName) {
495489
output["selfElSeebeckCoefficient"] = seebeckSelfOut;
496490
output["totalSeebeckCoefficient"] = seebeckTotalOut;
497491
output["seebeckCoefficientUnit"] = unitsSeebeck;
498-
499-
output["momentumElectricalConductivity"] = sigmaMomOut;
500-
output["momentumSeebeck"] = seebeckMomOut;
501-
output["momentumElectronThermalConductivity"] = kappaElMomOut;
502-
output["momentumPhononThermalConductivity"] = kappaPhMomOut;
503-
492+
504493
std::ofstream o(outFileName);
505494
o << std::setw(3) << output << std::endl;
506495
o.close();
@@ -753,7 +742,6 @@ void CoupledCoefficients::outputDuToJSON(
753742
int numElStates = int(elBandStructure->irrStateIterator().size());
754743
auto calcStat =
755744
statisticsSweep.getCalcStatistics(0); // only one calc for relaxons
756-
double kBT = calcStat.temperature;
757745
double T = calcStat.temperature / kBoltzmannRy;
758746

759747
// write D to file before diagonalizing, as the scattering matrix
@@ -914,15 +902,40 @@ void CoupledCoefficients::outputDuToJSON(
914902
}
915903
}
916904

905+
// output the transport coefficients
906+
int numCalculations = statisticsSweep.getNumCalculations();
907+
908+
auto [unitsSigma, unitsKappa, unitsViscosity, unitsSeebeck, unitsMobility,
909+
convSigma, convKappa, convViscosity, convSeebeck, convMobility] = getTransportUnitsWithDimensions(dimensionality);
910+
911+
std::vector<double> temps, dopings, chemPots;
912+
std::vector<std::vector<std::vector<double>>> sigmaMomOut, seebeckMomOut, kappaElMomOut, kappaPhMomOut;
913+
914+
for (int iCalc = 0; iCalc < numCalculations; iCalc++) {
915+
916+
// store temperatures
917+
auto calcStat = statisticsSweep.getCalcStatistics(iCalc);
918+
double temp = calcStat.temperature;
919+
temps.push_back(temp * temperatureAuToSi);
920+
double doping = calcStat.doping;
921+
dopings.push_back(doping); // output in (cm^-3)
922+
double chemPot = calcStat.chemicalPotential;
923+
chemPots.push_back(chemPot * energyRyToEv); // output in eV
924+
925+
// convert momentum contributions
926+
appendTransportTensorForOutput(sigmaMom, dimensionality, convSigma, iCalc, sigmaMomOut);
927+
appendTransportTensorForOutput(kappaElMom, dimensionality, convKappa, iCalc, kappaElMomOut);
928+
appendTransportTensorForOutput(kappaPhMom, dimensionality, convKappa, iCalc, kappaPhMomOut);
929+
appendTransportTensorForOutput(seebeckMom, dimensionality, convSeebeck, iCalc, seebeckMomOut);
930+
931+
}
932+
917933
// NOTE we cannot use nested vectors from the start, as
918934
// vector<vector> is not necessarily contiguous and MPI
919935
// cannot all reduce on it
920936
std::vector<std::vector<double>> vecDu, vecDuEl, vecDuPh, vecDuDragPh, vecDuDragEl;
921937
std::vector<std::vector<double>> vecWji0, vecWji0_el, vecWji0_ph, vecWjie;
922-
923-
//auto [unitsSigma, unitsKappa, unitsViscosity, unitsSeebeck, unitsMobility,
924-
// convSigma, convKappa, convViscosity, convSeebeck, convMobility] = getTransportUnitsWithDimensions(dimensionality);
925-
938+
926939
for (auto i : {0, 1, 2}) {
927940
std::vector<double> t1, t2, t3, t4, t5, t6, t7, t8, t9;
928941
for (auto j : {0, 1, 2}) {
@@ -983,7 +996,6 @@ void CoupledCoefficients::outputDuToJSON(
983996
std::string outFileName = "relaxons_coupled_real_space_coefficients.json";
984997
//if(isSymmetrized) outFileName = "sym_relaxons_coupled_real_space_coefficients.json";
985998
nlohmann::json output;
986-
output["temperature"] = kBT * temperatureAuToSi;
987999
output["Wji0"] = vecWji0;
9881000
output["phononWji0"] = vecWji0_ph;
9891001
output["electronWji0"] = vecWji0_el;
@@ -993,7 +1005,6 @@ void CoupledCoefficients::outputDuToJSON(
9931005
output["phononDu"] = vecDuPh;
9941006
output["crossDuPh"] = vecDuDragPh;
9951007
output["crossDuEl"] = vecDuDragEl;
996-
output["temperatureUnit"] = "K";
9971008
output["wUnit"] = "m/s";
9981009
output["DuUnit"] = "fs^{-1}";
9991010
output["phononSpecificHeat"] = Cph * specificHeatConversion;
@@ -1011,6 +1022,25 @@ void CoupledCoefficients::outputDuToJSON(
10111022
output["GiUnit"] = AiUnits;
10121023
output["Ai"] = Atemp;
10131024
output["AiUnit"] = AiUnits;
1025+
1026+
// momentum contribution to transport coefficients
1027+
output["temperatures"] = temps;
1028+
output["temperatureUnit"] = "K";
1029+
output["dopingConcentrations"] = dopings;
1030+
output["dopingConcentrationUnit"] = "cm$^{-" + std::to_string(dimensionality) + "}$";
1031+
output["chemicalPotentials"] = chemPots;
1032+
output["chemicalPotentialUnit"] = "eV";
1033+
1034+
output["electricalConductivityUnit"] = unitsSigma;
1035+
output["mobilityUnit"] = unitsMobility;
1036+
output["seebeckCoefficientUnit"] = unitsSeebeck;
1037+
output["thermalConductivityUnit"] = unitsKappa;
1038+
1039+
output["momentumElectricalConductivity"] = sigmaMomOut;
1040+
output["momentumSeebeck"] = seebeckMomOut;
1041+
output["momentumElectronThermalConductivity"] = kappaElMomOut;
1042+
output["momentumPhononThermalConductivity"] = kappaPhMomOut;
1043+
10141044
std::ofstream o(outFileName);
10151045
o << std::setw(3) << output << std::endl;
10161046
o.close();

0 commit comments

Comments
 (0)