:Title: AnyonSQCModule
:Context: AnyonSQCModule`
:Author: Bittner Research Group
:Date: [2025-04-14]
:Version: 1.0
:Mathematica Version: 13.2 or later
:Copyright: (c) 2025 University of Houston
:License: For academic use only; contact author for other uses
(* :Discussion:​​​​This package implements linear and nonlinear response calculations​​for systems of anyonic excitations coupled to dissipative environments.​​​​Key capabilities include:​​ - Construction of the effective non-Hermitian evolution matrix W_eff​​ - Green's functions and propagators for Heisenberg-picture dynamics​​ - Third-order SQC signals (both rephasing and non-rephasing)​​ - Linear response susceptibility calculations​​ - Eigenvalue analysis of the dissipative spectrum​​ - Full support for fractional statistical angle θ, environmental correlation ξ,​​ and thermal occupation encoded via n_θ(ω)​​​​Intended for use in modeling and interpreting anyon spectroscopy experiments,​​especially those seeking to resolve topological effects in nonlinear optical signals.​​​​This should be saved in you Wolfram $Path, eg (MacOS) in ~/Library/Wolfram/Applications ​​​​*)​​Print[​​ Style[​​ "\nAnyonSQCModule\n" <>​​ "---------------------------------------------\n" <>​​ "Simulating linear and nonlinear response of\n" <>​​ "anyon systems under dissipation and fractional statistics.\n\n" <>​​ "Available tools:\n" <>​​ " - WeffMatrix[params]: Effective evolution matrix\n" <>​​ " - GreensFunction[ω, Weff], Propagator[T, Weff]\n" <>​​ " - SQCNonRephasingSignal[...] and SQCRephasingSignal[...]\n" <>​​ " - LinearResponse[params, ω]: Frequency-domain susceptibility\n" <>​​ " - WeffEigenvalues[params]: Eigenmode analysis\n\n" <>​​ "Use Options[function] to view optional arguments.\n" <>​​ "For support: see arxiv: \n",​​ FontFamily -> "Courier", FontSize -> 12​​ ]​​];​​​​BeginPackage["AnyonSQCModule`"];​​​​WeffMatrix::usage = "WeffMatrix[params] returns the effective evolution matrix for given parameters.";​​nTheta::usage = "nTheta[omega, beta, theta] returns the fractional occupation number for anyons.";​​muVec::usage = "muVec[theta] returns the excitation dipole operator vector.";​​muVecDagger::usage = "muVecDagger[theta] returns the conjugate dipole operator vector.";​​GreensFunction::usage = "GreensFunction[ω, Weff] returns the frequency-domain Green's function.";​​Propagator::usage = "Propagator[T, Weff] returns the time-domain propagator.";​​x0::usage = "x0[params] returns the initial state vector (e.g., dipole-induced coherence).";​​​​SQCNonRephasingSignal::usage = "SQCNonRephasingSignal[params, ωτ, T, ωt] computes the SQC non-rephasing signal.";​​SQCRephasingSignal::usage = "SQCRephasingSignal[params, ωτ, T, ωt] computes the SQC rephasing signal.";​​SQCNonRephasing2DSpectrum::usage = "SQCNonRephasing2DSpectrum[params, T, {ωτmin, ωτmax}, {ωtmin, ωtmax}, npts] computes the 2D non-rephasing spectrum.";​​SQCRephasing2DSpectrum::usage = "SQCRephasing2DSpectrum[params, T, {ωτmin, ωτmax}, {ωtmin, ωtmax}, npts] computes the 2D rephasing spectrum.";​​LinearResponse::usage = "LinearResponse[params_Association, omega_, debug_: False]"
LinearResponse[params_Association, omega_, debug_: False] := Module[​​ {Weff, mu, muDagger, G, χ},​​ ​​ Weff = WeffMatrix[params];​​ mu = muVec[params["theta"]];​​ muDagger = muVecDagger[params["theta"]];​​ G = GreensFunction[omega, Weff];​​ ​​ χ = muDagger . G . mu;​​ ​​ If[debug,​​ Print["mu: ", mu];​​ Print["muDagger: ", muDagger];​​ Print["GreensFunction: ", G];​​ Print["Linear Response χ(ω): ", χ];​​ ];​​ ​​ χ[[1, 1]]​​];​​(*Example usage*)​​(***params=<|"gamma"->1,"theta"->Pi/3,"xi"->0.1,"omega"->1,"J"->0.2,"beta"->1|>;​​{wtau,wt,spectrum}=DQC2DSpectrum[params,0.5,{-2,2},{-2,2},100];​​ListDensityPlot[spectrum,DataRange->{{-2,2},{-2,2}},FrameLabel->{"ωτ","ωt"}]***)
End[];​​EndPackage[];