# Data for "Multiscale ensemble Monte Carlo of transport and gas sensing in monolayer MoS2"

Lado Filipovic, Institute for Microelectronics, TU Wien. Licence: CC-BY 4.0.

This record contains the simulation outputs behind every figure and table of the submitted
manuscript and its supplementary notes S1 to S5, the input decks and drivers that produced
them, and the inputs and raw outputs of the first-principles calculations from which the
transport model takes its parameters. Version 1 of this record (submitted manuscript)
contained the outputs of the single-valley transport model with calibrated deformation potentials;
those files are kept here under `emc/single_valley/` for comparison.

Software: ViennaEMC (https://github.com/ViennaTools/ViennaEMC, header-only C++17, the
monolayer-MoS2 model of `examples/singleLayerMoS2/`), Quantum ESPRESSO 7.3.1 (pw.x, ph.x
with the Allen-Heine-Cardona electron-phonon output, pp.x, projwfc.x), EPW 5.8, Wannier90
3.1, the Bader analysis program of Henkelman et al. (Linux binary, bader_lnx_64), Python 3
with numpy and matplotlib for the figures. Pseudopotentials: PseudoDojo nc-sr-04 PBE
standard (Mo, S, N, O, H) and, for the PAW geometry of the K-Q study, the pslibrary PAW set.

## emc/

Ensemble Monte Carlo outputs. Units are given in the file headers. Standard errors (SE)
are the spread over independent random seeds divided by the square root of their number.

`figure_data/` The files read by `scripts/make_paper_figures.py` and
`scripts/make_supp_figures.py` (main-text figures 2 to 9, S2, S6 and S7):
- `mu_T_substrate_8seeds.txt`: mobility versus temperature (150 to 400 K) for the suspended
  layer and on hBN, SiO2, HfO2, Al2O3 and CaF2 at n_s = 1e12 cm^-2, means and SE over 8 seeds
  (Fig. 2, Fig. 4a). `mu_T_substrate.txt`: the same means without SE.
- `emc_vfield_intrinsic_4seeds.txt`: drift velocity versus field of the suspended layer,
  4 seeds (Fig. 6a); `emc_vfield.txt`: the same without SE.
- `emc_device_vfield.txt`: drift velocity versus field of the HfO2 device stack (screening
  at 1e13 cm^-2, N_it = 1e12 cm^-2), 4 seeds; input of the reduced device model.
- `emc_mu_vs_nimp.txt`: mobility of the HfO2 stack versus charged-impurity density, 4 seeds.
- `emc_mu_vs_density_hfo2.txt`: mobility of the HfO2 stack versus sheet density (Fig. 4b).
- `emc_sensitivity_300K.txt`: the sensitivity variants of Table 6, 4 seeds each.
- `emc_sensor_response.txt`: sensor transduction S = sigma0/sigma - 1 for NO2 and NH3 versus
  coverage at the 3e12 cm^-2 baseline, means and seed-paired SE over 8 seeds (Figs. 8, S7).
  `emc_sensor_response_n0_1e12.txt`: the same at the 1e12 cm^-2 baseline (the acceptor
  branch depletes the channel above coverage 0.4 and is not used).
- `emc_ambient_c1c2.txt`: ambient (O2) conductivity model, coverage, density, mobility and
  conductivity versus O2 pressure (Fig. 7).
- `liu2014_gas.txt`, `late2013_gas.txt`: digitised measured responses used in Figs. 8 and S7.

`production_v31/` The complete outputs of the runs of the revised transport model
(cluster array of 15 to 16 September 2026, model version 3.1: the version 3 model with
the corrected deflection-angle sampler of the two-dimensional polar channel, see
`drivers/emcFroehlichInteractionSingleLayer.hpp`; the outputs of the version 3 array of
12 September, which differ by 2 to 8 per cent in the mobilities, are not included): the
files above in their original form, plus
`twovalley_vE.txt` (velocity, valley occupation and per-valley velocities versus field,
suspended and HfO2 stack, 4 seeds), `muT_unscreened_eqk265.txt` and
`muT_unscreened_eqk118.txt` (mobility versus temperature with the polar coupling unscreened,
Q valleys at 265 and at 118 meV, 8 seeds; the comparison series of Table S9 and Fig. S6),
the density and substrate study (`density_substrate_capstone.log`) and the ambient model
log (`ambient_c1c2.log`).

`single_valley/` Outputs of the single-valley transport model: `*_singlevalley.txt` with the computed
constant couplings (first revision) and `*_calibrated_kernel.txt` with the calibrated
literature couplings (submitted version). Same file formats as `figure_data/`.

`device_sweep/` Direct three-dimensional self-consistent device simulations (Fig. 5).
`jobs3d.txt` lists the 17 bias points (name, V_g, V_ds, seed, simulated time, transient
and averaging windows in ns); `sw3d/<name>/` holds for each point the run log with the
Ramo current and its block standard error, the summary file and the averaged sheet
density and potential profiles along the channel; `device_crosscheck_v31.txt` is the
comparison with the reduced model.

`drivers/` The ViennaEMC drivers and parameter headers that produced the outputs:
`parameterTwoValley.hpp` (transport model of the revised manuscript), `parameterTwoValleyV2.hpp`
(the constant-coupling intermediate version), `parameterKaasbjerg.hpp` (single-valley
transport model), `parameterPilotto.hpp` (two-valley parameter set used for the K-Q sweep of Note
S1), `parameterKernelSelect.hpp` (compile-time switch), the two scattering classes added
for the revision, the drivers of every run, the build script and the SLURM job scripts.

## dfpt/

First-principles calculations. All with PBE, norm-conserving PseudoDojo pseudopotentials,
90 Ry cutoff (60 Ry for the adsorbates), a 12x12x1 mesh, the relaxed lattice constant
3.185 A and sulphur height 1.5625 A, in a cell of height 6.33 a.

`couplings/` Electron-phonon matrix elements of the direct chain (ph.x, Allen-Heine-Cardona
output) at explicit phonon wavevectors: `runs/ahc_q<n>/` for the electron at K (n = 1 to 21;
the wavevectors are listed in `inputs/inputs_mos2/qlist_ahc.txt`) and `runs/ahc_q_q<n>/`
for the electron at Q (n = 1 to 13, `qlist_ahc_q.txt`). Each directory contains the input
files, the dynamical matrix (`mos2a.dyn`), the compressed phonon output and the matrix
elements `ahc_gkk_iq1.bin` (complex128, Fortran order (nbnd, 4, 9), Ry/bohr, bands 14 to 17,
electron at the nscf wavevector). `ahc_couplings_output.txt` and
`ahc_couplings_q_output.txt` are the mode-resolved couplings produced by
`inputs/inputs_mos2/ahc_couplings.py`; the first-order K-K' couplings come from
`ahc_firstorder.py --nearK`. `README.md` documents the extraction and the tables of
Supplementary Note S2, including the periodic-slab artefact of this chain at small
wavevector.

`epw/` The Wannier-interpolation chain: `epw1.in`, `epw2.in` (inputs), `epw1.out.gz` (coarse
couplings, Wannierisation, interpolated couplings at k = K along Gamma-M, `prtgkk` block),
`mos2.wout`, `mos2_band.dat` (Wannier bands), `phband.freq` (interpolated phonons),
`epw_gkk_analysis_output.txt` (mode-resolved interpolated couplings, script
`epw_gkk_analysis.py`), `epw2.out` (Boltzmann mobility, SERTA and IBTE, on 200x200 meshes
at 1e12 cm^-2, the run of Table S9 and Fig. S6), `inv_taucb.fmt` (scattering rates per
state and temperature of that run), `IBTEvel_sup.fmt` (weights, velocities and energies of
its fine mesh), `epw_mobility_200.txt` (its SERTA mobility summed over all states),
`epw2_120.out` and `epw_mobility_120.txt` (the earlier 120x120 run at 1e13 cm^-2),
`ph_stageA.out.gz` (DFPT on the 12x12x1 mesh with the dielectric tensor and Born charges).
Note: EPW's printed mobilities count only states above the Fermi level, which matters at
1e13 cm^-2 (degenerate) and not at 1e12 cm^-2; the mobility with all states is obtained
from `inv_taucb.fmt` and `IBTEvel_sup.fmt` with `inputs/inputs_mos2/epw_mobility_allstates.py`.

`kq_separation/` The K-Q valley separation study of Supplementary Note S1: `runs/<case>/`
with the band-structure calculations at fixed and relaxed geometries with and without
spin-orbit coupling, `klist.txt` (wavevector list), `kq_extract2.py` (extraction of the
separation, the masses and the splittings), `emc/` (the two-valley EMC sweep versus the
separation, 3 seeds), `kq_literature.md` (published values with sources).

`adsorbates/` NO2, NH3 and O2 on the monolayer (Supplementary Note S3): `<case>/` with the
relaxation input and output, the Bader charges (`ACF.dat`) and the projwfc output for each
of the clean cells (4x4 and 5x5), the isolated molecules and the adsorbed cases (three sites
each, two 5x5 cells, three further NO2 starting orientations), `ads_analysis_output.txt` (adsorption energies and charge transfers, script
`ads_analysis.py`), `gen_ads.py` (geometry generator), `cases_ads.txt`.

`inputs/` The input templates, wavevector lists, extraction scripts and SLURM job scripts of
all chains (`inputs_mos2/`, `inputs_ads/`, `job_*.slurm`).

## scripts/

`make_paper_figures.py` (main-text figures), `make_supp_figures.py` (Figs. S1 to S6),
`device_crosscheck3d.py` and `device_direct_figure.py` (reduced model against the direct
device simulation, Fig. 5), `paperstyle.py` (plot style). They read the files of
`emc/figure_data/` and `emc/device_sweep/` from their own directory.
