@@ -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