Skip to main content

THz Time-domain modelling

· One min read
Kirill Vasin

Using a single Lorentz-Oscillator model we model the responce of a materials with a variable thickneses

Download original notebook

Evaluate initialization cells first

f[ω_, eps_, ω0_, ωp_, γ_] := eps + (*FB[*)(((*SpB[*)Power[ωp(*|*),(*|*)2](*]SpB*))(*,*)/(*,*)((*SpB[*)Power[ω0(*|*),(*|*)2](*]SpB*) - (*SpB[*)Power[ω(*|*),(*|*)2](*]SpB*) + I γ ω))(*]FB*)
n[ω_, params__] := (*SqB[*)Sqrt[f[ω, params]](*]SqB*)

e[ω_, L_, params__] := Exp[- (*FB[*)((I 2π (*SpB[*)Power[10(*|*),(*|*)12](*]SpB*) ω n[ω, params] L)(*,*)/(*,*)(c cm2THz))(*]FB*) ] /.{c -> 3.0 (*SpB[*)Power[10(*|*),(*|*)10](*]SpB*), cm2THz -> 33.4}

Material parameters (nn and κ\kappa)

Plot[n[x, 9.8, 28.66, 15, 1.5] // ReIm // Evaluate, {x,28.66 - 20, 28.66 + 20}, 
  FrameLabel->{"wavenumber (cm^{-1})"}, Frame->True
]
(*VB[*)(FrontEndRef["061e0ba5-ee09-492d-88fe-801fe1ab75b8"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKG5gZphokJZrqpqYaWOqaWBql6FpYpKXqWhgYpqUaJiaZmyZZAACFChXW"*)(*]VB*)

A responce of a material to a short pulse (δ\delta - function)

tds[params__] := (Join[#, Reverse[#]] &@ Table[e[ω, params], {ω, 0,100,0.1}]) // Fourier

Make it interactive

evaluate this after initialization cells

udata = {{0,0}, {500,0}};
Graphics[{
  ColorData[97][1],
  Line[udata // Offload], Black,
  Text[thick // Offload, {300, 2.5}]
  },
  
  PlotRange->{{0,400}, {-3,3}}, 
  
  TransitionDuration->30, 
  TransitionType->"Linear", 
  Axes->True, Frame->True, FrameLabel->{"time, ps", "Electric field, nA"}
]
(*VB[*)(FrontEndRef["e3983d02-81d7-4cd3-b061-3146e34e2e98"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKpxpbWhinGBjpWhimmOuaJKcY6yYZmBnqGhuamKUam6QapVpaAAB6jRUX"*)(*]VB*)

Try to drag this slider

EventHandler[InputRange[0.001, 0.1, 0.002, "Label"->"Thickness"], Function[thickness, 
  udata = {Range[Length[#]], #} &@ (Drop[#, -Length[#]/2//Ceiling] &@ tds[thickness, 9.8, 28., 15., 0.05] // Re) // Transpose;
  thick = ToString[thickness]<>" mm";
]]
(*VB[*)(EventObject[<|"Id" -> "67d72df1-7cee-4ad7-afb2-e6ddb517acf2", "Initial" -> 0.05, "View" -> "4ed9c3e4-cfe4-4227-b9b1-9cbaf7910793"|>])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKm6SmWCYbp5roJqcBCRMjI3PdJMskQ13L5KTENHNLQwNzS2MAkHoV4A=="*)(*]VB*)