Resources
3Install
npx skillscat add silico-quantum/quantum-chem-skills/momap Install via the SkillsCat registry.
MOMAP Skill (v2 — 2024A Verified)
MOMAP (Molecular Materials Property Prediction Package) — 分子材料光物理/传输性质预测
Version 2024A (2.3.7), Hongzhiwei Technology / Z.G. Shuai Group
Server Setup
# On marcus / marcus2
source /opt/MOMAP-2024A/env.sh
# or
module load momap/2024A-openmpiKey env vars set by env.sh:
MOMAP_ROOT=/opt/MOMAP-2024AMOMAP_BIN=/opt/MOMAP-2024A/binMOMAP_MPI_BIN=/opt/MOMAP-2024A/bin/openmpi/binMOMAP_LICENSE=/opt/MOMAP-2024A/license/hzwtech.licLD_LIBRARY_PATHincludes.../openmpi/liband.../lib
MPI compatibility note: MOMAP ships OpenMPI 1.x but the system OpenMPI is 3.1.4.
The -machinefile flag is not supported in OpenMPI 3.x (use --hostfile).
→ Copy and patch momap script: sed 's/-machinefile/--hostfile/g'
→ Run python momap_patched -i momap.inp
→ Nodefile format for 3.x: localhost slots=4
Real Input Format (MOMAP 2024A)
No &control block, no jobtype. Each calculation type is a top-level flag + a named block.
Step 1: Electron-Vibration Coupling (EVC)
Prerequisites: Gaussian .log AND .fchk files for both states.
Generate .fchk with: formchk job.chk job.fchk
do_evc = 1
&evc
ffreq(1) = "mol-s0.log" # Ground state freq (S0)
ffreq(2) = "mol-s1.log" # Excited state freq (S1/T1)
ftdipd = "mol-s1.log" # Optional: transition dipole from this file
sort_mode = 1 # Mode sorting (1=default)
/momap -i momap.inpOutput files:
| File | Content |
|---|---|
evc.cart.dat |
Duschinsky matrix + Huang-Rhys factors (Cartesian) |
evc.dint.dat |
Duschinsky matrix (internal coords) |
evc.cart.abs |
Absorption data |
evc.dint.abs |
Absorption (internal coords) |
evc.out |
Full log with frequencies, mode pairing, reorganization energies |
evc.vib*.xyz |
Vibration mode visualizations |
evc.dx.x.xyz |
Displacement vectors |
evc.dx.x.com |
Displaced structure (Gaussian input) |
Step 2: Spectrum (spec_tvcf)
do_spec_tvcf_ft = 1 # Fourier transform of time correlation function
do_spec_tvcf_spec = 1 # Generate spectrum
&spec_tvcf
DUSHIN = .t. # Use Duschinsky rotation
HERZ = .t. # Herzberg-Teller effect (optional)
Temp = 300 K
tmax = 5000 fs # Correlation time
dt = 0.001 fs # Time step
Ead = 0.07509 au # ⚠️ Adiabatic excitation energy (S1_min - S0_min)
EDMA = 0.92694 debye # ⚠️ Absorption transition dipole (vertical)
EDME = 0.64751 debye # ⚠️ Emission transition dipole (from S1 min)
FreqScale = 1.0
DSFile = "evc.cart.dat" # From EVC step
Emax = 0.3 au # Max energy for output
dE = 0.00001 au # Energy resolution
logFile = "spec.tvcf.log"
FtFile = "spec.tvcf.ft.dat"
FoFile = "spec.tvcf.fo.dat"
FoSFile = "spec.tvcf.spec.dat"
/momap -i momap.inpOutput (spec.tvcf.spec.dat):
#1Energy(Hartree) 2Energy(eV) 3Wavenumber(cm-1) 4Wavelength(nm) 5FC_abs 6FC_emi 7FC_emi_intensityStep 3: ISC Rate (isc_tvcf)
do_isc_tvcf_ft = 1 # Fourier transform
do_isc_tvcf_spec = 1 # Phosphorescence spectrum
&isc_tvcf
DUSHIN = .t.
Temp = 298 K
tmax = 5000 fs
dt = 0.001 fs
Ead = 0.094 au # S1-T1 adiabatic gap
Hso = 116.9 cm-1 # ⚠️ Spin-orbit coupling (from PySOC or exp.)
DSFile = "evc.cart.dat"
Emax = 0.3 au
logFile = "isc.tvcf.log"
FtFile = "isc.tvcf.ft.dat"
FoFile = "isc.tvcf.fo.dat"
/Output: ISC rate (k_ISC), phosphorescence spectrum.
Step 4: Internal Conversion (ic_tvcf)
do_ic_tvcf_ft = 1
do_ic_tvcf_spec = 1
&ic_tvcf
DUSHIN = .t.
Temp = 300 K
tmax = 655 fs
dt = 0.01 fs
Ead = 0.094 au
DSFile = "evc.cart.dat"
CoulFile = "evc.cart.nac" # ⚠️ Non-adiabatic coupling
logFile = "ic.tvcf.log"
FtFile = "ic.tvcf.ft.dat"
/Output: IC rate (k_IC) — non-radiative decay S₁→S₀.
Step 5: Spin-Orbit Coupling (PySOC)
Auto-generates SOC matrix elements from TDDFT:
do_pysoc = 1
&pysoc
sched_type = local
qc_exe = g16
qc_ppn = 8
pysoc_QM_code = 'gauss_tddft'
n_excited_singlets = 4
n_excited_triplets = 4
/Output: Hso values (cm⁻¹) for S₁→T₁, S₁→T₂, ... → feeds into isc_tvcf.
Step 6: Full Rate Summary (spec_sums)
Sum-over-states method — computes k_r, k_IC, k_ISC simultaneously:
do_spec_sums = 1
&spec_sums
DSFile = "evc.cart.dat"
Ead = 0.094 au
dipole_abs = 0.092 debye
dipole_emi = 0.441 debye
maxvib = 10
if_cal_ic = .t.
FWHM = 500 cm-1
/Output: All rates + quantum yield Φ in one pass.
Step 7: Charge Transport (transport)
Carrier mobility for OLED charge balance:
&transport
do_transport_prepare = 1
do_transport_get_transferintegral = 1
do_transport_get_re_evc = 1
do_transport_run_MC = 1
do_transport_get_mob_MC = 1
compute_engine = 1 # Gaussian
qc_exe = g16
basis_name = b3lyp STO-3g
temp = 300
ratetype = marcus # marcus or quanta
lat_cutoff = 4
nsimu = 2000
tsimu = 1000 # ns
crystal = molecule.cif
/Output: Hole/electron mobility (cm²/V·s), transfer integrals, reorganization energies.
OLED TADF Design — Complete Workflow
Gaussian MOMAP
┌──────────────┐ ┌─────────────────────┐
│ S0 opt+freq │──────┐ │ EVC (S₁→S₀) │
│ S1 opt+freq │ ├──────→│ EVC (S₁→T₁) │
│ T1 opt+freq │──────┘ │ │
│ NACT calc │──→ NACME ──→│ ic_tvcf → k_IC │
│ PySOC calc │──→ Hso ───→│ isc_tvcf → k_ISC │
│ TDDFT (vert) │──→ EDMA/EDME│ spec_tvcf → k_r │
└──────────────┘ │ spec_sums → Φ (QY) │
│ transport → μ_h, μ_e│
└─────────────────────┘Key OLED figures of merit:
| Quantity | MOMAP Module | Required Input |
|---|---|---|
| k_r (radiative) | spec_tvcf | EVC + EDMA/EDME |
| k_IC (internal conv.) | ic_tvcf | EVC + NACME |
| k_ISC (S₁→T₁) | isc_tvcf | EVC + Hso (SOC) |
| k_RISC (T₁→S₁) | isc_tvcf | k_ISC × exp(-ΔE_ST/kT) |
| Φ (quantum yield) | spec_sums | all above |
| μ_h (hole mobility) | transport | Transfer integral + λ |
| μ_e (electron mob.) | transport | Transfer integral + λ |
Extracting Parameters from Gaussian Output
Ead (adiabatic excitation energy)
# From S0 log:
grep "SCF Done" s0.log | tail -1 → E_SCF_S0
# From S1 log (last SCF Done = S1 min):
grep "SCF Done" s1.log | tail -1 → E_SCF_S1
# Ead = E_SCF_S1 - E_SCF_S0 (in Hartree)EDMA (absorption transition dipole moment)
From S0 geometry TDDFT output:
grep -A5 "transition electric dipole" s1.log | head -10
# state X Y Z Dip.S. Osc.
# 1 0.2169 0.2932 0.0000 0.1330 0.0079
# Dip.S. (au) → multiply by 2.5417 to convert to debyeEDME (emission transition dipole moment)
From S1 minimum geometry TDDFT (last Excited State block):
# Same as EDMA but from the last TDDFT block in s1.log
# Use Dip.S. of state 1 at S1-optimized geometryExample: Azulene (bundled test)
Test directory: /opt/MOMAP-2024A/tests/azulene/gaussian/
mkdir ~/momap_azulene && cd ~/momap_azulene
# Copy ref log + fchk files
cp /opt/MOMAP-2024A/tests/azulene/gaussian/ref/azulene-s0.* .
cp /opt/MOMAP-2024A/tests/azulene/gaussian/ref/azulene-s1.* .
# Step 1: EVC
cat > momap_evc.inp << 'EOF'
do_evc = 1
&evc
ffreq(1) = "azulene-s0.log"
ffreq(2) = "azulene-s1.log"
/
EOF
source /opt/MOMAP-2024A/env.sh
momap -i momap_evc.inp
# Step 2: Spectrum (copy ref params)
cp /opt/MOMAP-2024A/tests/azulene/kr/momap.inp momap_spec.inp
momap -i momap_spec.inpTADF Workflow Integration
For TADF molecules, the MOMAP pipeline is:
Gaussian S0 opt+freq → s0.log + s0.fchk
Gaussian T1 opt+freq → t1.log + t1.fchk
Gaussian S1 TDDFT → s1.log + s1.fchk (vertical + adiabatic)
↓
EVC (S0 vs S1) → evc_s1.cart.dat
EVC (S1 vs T1) → evc_t1.cart.dat
↓
spec_tvcf (S1→S0) → fluorescence spectrum
ISC (S1→T1) → k_ISC rate
↓
Quantum yield: Φ = k_r / (k_r + k_IC + k_ISC)Troubleshooting
mpiexec: Error: unknown option "-machinefile"
MOMAP was compiled with OpenMPI 1.x, system has 3.x.
Fix: Copy + patch momap script:
cp $MOMAP_BIN/momap momap_patched
sed -i 's/-machinefile/--hostfile/g' momap_patched
echo "localhost slots=4" > nodefile
python momap_patched -i momap.inpCan not find Gaussian fchk file!
MOMAP needs both .log and .fchk files in the same directory.
formchk job.chk job.fchkspec_tvcf killed (OOM)
Use MPI on a compute node with more memory:
#SBATCH --mem=64G
mpirun -np 4 momap -i momap.inpReference files
All test examples with pre-computed Gaussian logs:
/opt/MOMAP-2024A/tests/azulene/gaussian/ref/— azulene S0/S1/opt/MOMAP-2024A/tests/porphine/gaussian_g16/— porphine/opt/MOMAP-2024A/tests/Irppy3/— Ir(ppy)₃
Citations
- Y. Niu et al., Molecular Physics, 2018, doi: 10.1080/00268976.2017.1402966
- Q. Peng et al., J. Am. Chem. Soc., 2007, 129, 9333-9339
- Z. Shuai, Q. Peng, Phys. Rep., 2014, 537, 123
- Z. Shuai, Q. Peng, Nat. Sci. Rev., 2017, 4, 224
Official: http://www.momap.cn
Toolkit (momap/tools/)
Four Python CLI tools for automated MOMAP workflows:
momap-extract — Gaussian → MOMAP params
python3 tools/extract.py --s0 mol-s0.log --s1 mol-s1.log [--t1 mol-t1.log]
# Output: spec_tvcf input + JSON params (Ead, EDMA, EDME)
# Auto-handles TDDFT: Ead = SCF_S1 + E_exc_adiabatic - SCF_S0momap-run — One-command MOMAP wrapper
python3 tools/runner.py momap.inp [--slurm] [--nprocs 4]
# Auto: MPI --hostfile patch, formchk (.chk→.fchk), Slurm submitmomap-tadf — Full TADF pipeline
python3 tools/tadf.py mol_id --s0 s0.log --s1 s1.log --t1 t1.log
# Runs: EVC(S1→S0) → spec_tvcf → ISC(S1→T1) → summary
# Output: spectrum, peak λ, blue window check, ΔE_STmomap-plot — Spectrum visualization
python3 tools/plot.py spec.tvcf.spec.dat -D --blue 450 490
# Pillow fallback if no matplotlib. -D = save to Desktop.
# Prints peak analysis with blue window highlighting.momap-oled — OLED extended modules (v3)
python3 tools/oled.py isc --ead 0.094 --hso 116.9 # isc_tvcf → k_ISC
python3 tools/oled.py ic --ead 0.094 --nac evc.cart.nac # ic_tvcf → k_IC
python3 tools/oled.py pysoc --com mol.com # PySOC → Hso values
python3 tools/oled.py sums --ead 0.094 --dipole-abs 0.09 --dipole-emi 0.44 # Φ, all rates
python3 tools/oled.py transport --cif crystal.cif # μ_h, μ_e
# Each generates a ready-to-run MOMAP input file.