See examples in VibronicC.mw and exam_VibCoup.mw
A,A2::Atoms ground/excited state geometryfrcc::Matrix force constants in ground state orientationN::posint number of normal modesVE::Vector(N) Vector of normal mode energies (frequencies)VS::Vector(N) Vector of corresponding Huang-Rhys factorsTorVn::{numeric,Vector(N)} temperature (canonic ensemble) or Vector of oscillator occupation numbers (microcanonic ensemble)sp::list list of [transition energy, line intensity].VibronicCouplings(A,A2,frcc,/output,{vibrationsonly,printout,nprint2,digits})
calculate vibronic couplings, where
output::string:="nesm" see VibrationalModes,
accepted codes are "egmMnstz", where "g" means couplings and "s" means Huang-Rhys factors,vibrationsonly::boolean:=false return vibrations only,nprint2::posint:=3 number of strong modes to print_rest passed to VibrationalModesTransSp(VE,VS,TorVn,vmin,
{absbin,relbin,sorted,avew,wdigits,maxnconf,maxerror,maxerror2,sort,Edigits,Sdigits,printout},$)::Vomax,lstr,Erng,vmax,err
tabulate transition spectral density combinatorially, where
vmin::numeric – minimal value of transition intensities, increase this value until you reach the required spectral progression,absbin::numeric:=infinity energy bin for the vibrational spectrum coarse graining,relbin::numeric:=0.5sorted::boolean:=false if true VE is assumed to be sorted,avew::numeric:=0.5 for each bin the coarse-grained energy is calculated as avew*coth_mean+(1-avew)*arithmetic_mean,wdigits::posint:=30 working precision for evaluating transition intensities (e.g. Franck-Condon factors),maxnconf::posint:=1e6 maximum allowed number of configurations per iteration,maxerror::numeric:=0.1, maxerror2::numeric:=maxerror/10 maximum allowed deviations from 1 of spectral progression sum and sum of elementary transition intensities respectively,sort::boolean:=false sort lstr by transition intensity,Edigits::nonnegint:=3, Sdigits::nonnegint:=2 for printout,Vomax::Vector(N) the strongest transition configuration, Vomax[i] gives the difference in the occupation numbers for i-th mode,lstr::list the transition spectral density is add(v[2]*delta(E-v[1]),v=lstr),
where delta is delta-function and v[1] is given in eV;
the last entry v[3]::list([i,o]), where o is the difference in the occupation numbers for i-th mode if differs from Vomax,Erng::range spectral range of lstr (the latter is unsorted),vmax::numeric maximum transition intensity,err::numeric spectral progression error.fTransSp(E::numeric,VE,VS,TorVn,sigma::numeric,{digits:=5},$)::float
calculate transition spectral density for energy E via correlator, where sigma is the dispersion of gaussian-shape line broadening.CoarsegrainSp(sp0::{Vector,sp},binE::numeric,{printout},$)::sp coarse grain spectrum to binE;
if sp0 is Vector or atomic list then it is treated as equal-weight list of energies and is normalized in the output.GenerateES(/ES0,N0,Edist,Sdist,Emax,S0,lambda0,
{output::{"list","vectors"}:="vectors",printout,plotout,colors::[string,string]:=["Red","Blue"],eunit::string:=" (eV)"},$)
generate energies and Huang-Rhys factors, where
ES0::list([numeric,numeric]):=[] list of explicitly provided modes,N0::nonnegint:=0 number of randomly generated modes,Edist,Sdist::anything:=undefined distributions of energies and Huang-Rhys factors,Emax,S0,lambda0::numeric:=0 maximum mode energy and approximate total Huang-Rhys factor and reorganization energy of randomly generated modes.SingleQMode(E,sigma,EQ,SQ) spectral function for a single quantum mode (the mode is quantum if its energy is much larger than the temperature).SingleQModeFit(sp,EQ0,SQ0,cy,cL,/cR,
{crop,porder,sratio,sestimate,Acor,Ecor,scor,maxvar,maxdev,EQSQfixed,digits,NLPopt},$)::
[ r, [ OS, EC+SQ*EQ, sqrt(s^2+SQ*EQ^2), EQ, SQ ], [OS,EC,s,EQ,SQ], [Emax,fmax,s1], E->OS*SingleQMode(E-EC,s,EQ,SQ), fitting_range ]
fit a spectral profile to a single quantum mode spectral function, where
s=sigma dispersion for the line broadening (inhomogeneous broadening or broading by a swarm of classical modes),EQ,SQ energy and Huang-Rhys factor for the quantum mode,EQ0,SQ0::numeric estimates for EQ and SQ,EC+SQ*EQ vertical excitation energy or the mean energy of the spectral profile; here EC would be the vertical excitation energy without the quantum mode,s^2+SQ*EQ^2 dispersion of the spectral profile,OS proportional to the oscillator strength of the electronic transition,r relative standard deviation for the fitting,ls0=list([E,f]) spectral profile to fit by f(E)=OS*SingleQMode(E-EC,s,EQ,SQ) (five parameters); note that the absorption spectrum is given by E*f(E),crop::range:=0..0, cL::numeric, cR::numeric:=cL the original data are cropped by energy to crop, then the left and right wings of the spectral peak at [Emax,fmax] is cut to cL*fmax and cR*fmax respectively,cy::numeric, porder::posint:=2 passed to FindExtremum,sratio<1::numeric:=0.9 if sqrt(SQ0)*EQ0/s1>sratio, then the dispersion s cannot be estimated by the formula s0=sqrt(s1^2-SQ*EQ^2), here s1 is the dispersion estimated by FindExtremum; this usually means wrong choice of EQ0,SQ0,sestimate::numeric:=0 an estimate to s must be provided if sratio is violated,Acor,Ecor,scor::numeric:=1,0,1 empirical corrections to A0,EC0,s0 estimated from the results of FindExtremum,maxvar>1::numeric:=2 the boundaries for a fitting parameter x are x0/max..x0*maxvar, here x=A,s,EQ,SQ; for EC the boundaries are EC0-SQ0*EQ0*(maxvar-1)..EC0+SQ0*EQ0*(maxvar-1),0<maxdev≤1::numeric:=1 if the optimized values for the parameters deviate from the estimated values by more than maxdev in relative scale then a warning is issued; if maxdev=1 no warnings are produced,EQSQfixed::boolean:=false do the 3-parameter fit,digits::posint:=Digits-2 precision for SingleQMode, should be larger then log10(1/r),NLPopt::list:=[] options for NLPSolve2.