Application Center - Maplesoft

App Preview:

Mathematical ultrashort-pulse laser physics

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application


 

UltrashortPulseLaser.mws

Mathematical ultrashort-pulse laser physics

V.L. Kalashnikov,

Institut fuer Photonik, TU Wien, Gusshausstrasse 27/387, A-1040 Vienna, Austria

vladimir.kalashnikov@tuwien.ac.at 

http://www.geocities.com/optomaplev

Abstract:  The analytical and numerical approaches to the analysis of the ultrashort-pulse solid-state lasers are presented. The unique self-consistent method of the laser dynamics analysis is based on the symbolical, numerical, programming, and graphical capacities of Maple 6. The algorithmization of basic conceptions as well as sophisticated research methods is of interest to both students and experts in the laser physics and the nonlinear dynamics.

Application Areas/Subjects : Optics, Laser Physics, Nonlinear Physics, Differential Equations, and Programming

Keywords:  soliton, ultrashort pulse, mode locking, Q-switching, solid-state laser, nonlinear Schroedinger equation, nonlinear Landau-Ginzburg equation, nonlinear Klein-Gordon equation, harmonic oscillator, nonlinear oscillator, self-phase modulation, group-delay dispersion, self-induced transparency, stimulated Raman scattering

Introduction

The ultrashort laser pulses, i.e. the pulses with the durations ~ 10^(-10) - 10^(-15)  sec, have a lot of the applications, which range ultrafast spectroscopy,  tracing chemical reactions, precision processing of materials, optical networks and computing, nuclear fusion and X - ray lasing, ophthalmology and surgery (for review see T. Brabec, F. Krausz , "Intense few-cycle laser fields: Frontiers of nonlinear optics", Rev. Mod. Phys. 72 , 545 (2000)). The mechanisms of the ultrashort pulse generation are active or passive loss switching (so-called Q-switching, part I) and locking of the longitudinal laser modes (part II) due to the active (part IV) or passive ultrafast modulation resulting in the laser quasi-soliton formation. Such quasi-soliton is very similar to the well-known Schroedinger soliton, which runs in the optical networks (part V). As a matter of fact, the model describing active mode locking is based on the usual equation of the harmonic oscillator or its nonlinear modifications, while for the passive mode locking description we have primordially nonlinear Landau-Ginzburg equation (part VI). This equation is the dissipative analog of the nonlinear Schroedinger equation and, as a result of the nonlinear dissipation, there exist a lot of nonstationary regimes of the ultrashort pulse generation (part VII). This requires the generalization of the model, which leads to the numerical simulations on the basis of FORTRAN (or C) codes generated by Maple (part VIII). Simultaneously, the obtained numerical results are supported by the analytical modelling in the framework of the computer algebra approach. The last takes into account the main features of the nonlinear dissipation in the mode-locked laser, viz. the power- (part VI) or energy-dependent (part IX) response of the loss to the generation field. In the latter case, there is the possibility of the so-called self-induced transparency formation, which is described by the nonlinear Klein-Gordon equation (part X).

Our considerations are based on the analytical or semi-analytical search of the steady-state soliton-like solutions of the laser dynamical equations and on the investigation of their stability in the framework of linear stability analysis. Also, the breezer-like solutions are considered using the aberrationless approximation. The computer algebra analysis is supported by the numerical simulations on the basis of the Maple generated FORTRAN-code. We present the analysis of these topics by means of the powerful capacities of Maple 6 in the analytical and numerical computations. This worksheet contains some numerical blocks, which can take about of 12 Mb and 18 min of computation (1 GHz Athlon).

Author is Lise Meitner Fellow at TU Vienna and would like to acknowledge the support of Austrian Science Fund's grant #M611. I am grateful to Dr. I.T. Sorokina and Dr. E. Sorokin for their hospitality at the Photonics Institute (TU Vienna), for stimulating discussions and experimental support of Part VIII. Also, I thank D.O. Krimer for his help in programming of part V.

Contents:

1. Nonstationary lasing: passive Q-switching

2. Conception of mode locking

3. Basic model

4. Active mode locking: harmonic oscillator

5. Nonlinear Schroedinger equation: construction of the soliton solution using the direct Hirota's method

6. Nonlinear Landau-Ginzburg equation: quasi-soliton solution

7. Autooscillations of quasi-solitons in the laser

8. Numerical approaches: ultrashort pulse spectrum, stability and multipulsing

9. Mode locking due to a "slow" saturable absorber

10. Coherent pulses: self-induced transparency in the laser

Part I. Nonstationary lasing: passive Q-switching

Continuous-wave oscillation

The basic principle of Q-switching is rather simple, but in the beginning let's consider the steady-state oscillation of laser. The near-steady-state laser containing an active medium and pumped by an external source of the energy (lamp, other laser or diode, for example) obeys the following coupled equations:

>    restart:
 with(linalg):
 
 eq1 := diff(Phi(t),t) = (alpha(t) - rho)*Phi(t);# field evolution
  eq2 := diff(alpha(t),t) = sigma[p]*(a[m]-alpha(t))*P/(h*nu[p]) - alpha(t)*sigma[g]*Phi(t)/(h*nu[g]) - alpha(t)/T[r];# gain evolution for quasi-two-level active medium

Warning, the protected names norm and trace have been redefined and unprotected

eq1 := diff(Phi(t),t) = (alpha(t)-rho)*Phi(t)

eq2 := diff(alpha(t),t) = sigma[p]*(a[m]-alpha(t))*P/(h*nu[p])-alpha(t)*sigma[g]*Phi(t)/(h*nu[g])-alpha(t)/T[r]

Here Phi(t)  is the time-dependent field intensity, alpha(t)  is the dimensionless gain coefficient, P  is the time-independent (for simplicity sake) pump intensity, nu[p]  and nu[p]  are the frequencies of the pump and generation fields, respectively, sigma[p]  and sigma[g]  are the absorption and generation cross-sections, respectively, T[r]  is the gain relaxation time, rho  is the linear loss inclusive the output loss of the laser cavity, and, at last, a[m]  is the gain coefficient for the full population inversion in the active medium. The pump increases the gain coefficient (first term in eq2 ), that results in the laser field growth (first term in eq1 ). But the latter causes the gain saturation (second term), which can result in the steady-state operation (so-called continuous-wave, or simply cw, oscillation):

>    rhs( subs({alpha(t)=alpha,Phi(t)=Phi},eq1) ) = 0;
 rhs( subs({alpha(t)=alpha,Phi(t)=Phi},eq2) ) = 0;
  sol := solve({%,%%},{Phi,alpha});

(alpha-rho)*Phi = 0

sigma[p]*(a[m]-alpha)*P/(h*nu[p])-alpha*sigma[g]*Phi/(h*nu[g])-alpha/T[r] = 0

sol := {Phi = 0, alpha = sigma[p]*P*T[r]*a[m]/(sigma[p]*P*T[r]+h*nu[p])}, {alpha = rho, Phi = -nu[g]*(-sigma[p]*P*T[r]*a[m]+sigma[p]*P*T[r]*rho+rho*h*nu[p])/(rho*sigma[g]*nu[p]*T[r])}

The second solution defines the cw intensity, which is the linear function of pump intensity:

>    expand( subs( sol[2],Phi ) ):
 Phi = collect(%,P);
  plot( subs( {lambda[g]=8e-5, lambda[p]=5.6e-5},subs( {h=6.62e-34, sigma[g]= 3e-19, sigma[p]= 1e-19, rho=0.1, nu[g]=3e10/lambda[g], nu[p]=3e10/lambda[p], T[r]=3e-6, a[m]=2.5},rhs(rho*%) ) ), P=4.9e4..1e5, axes=boxed, title=`output intensity vs. pump, [W/cm^2]` );# lambda is the wavelength in [cm]

Phi = (nu[g]*sigma[p]*a[m]/(rho*sigma[g]*nu[p])-nu[g]*sigma[p]/(sigma[g]*nu[p]))*P-nu[g]*h/(sigma[g]*T[r])

[Maple Plot]

The pump corresponding to Phi =0 defines so-called generation threshold.
Now let's consider the character of the steady-state points of our system {
eq1 , eq2 } presented by sol . The Jacobian of the system { eq1 , eq2 } is:

>    eq3 := subs( {Phi(t)=x,alpha(t)=y},rhs(eq1) ):# x = Phi(t), y = alpha(t)
 eq4 := subs( {Phi(t)=x,alpha(t)=y},rhs(eq2) ):
  A := vector( [eq3, eq4] );# vector made from the right-hand side of system {eq1, eq2}
   B := jacobian(A, [x,y]);

A := vector([(y-rho)*x, sigma[p]*(a[m]-y)*P/(h*nu[p])-y*sigma[g]*x/(h*nu[g])-y/T[r]])

B := matrix([[y-rho, x], [-y*sigma[g]/(h*nu[g]), -sigma[p]*P/(h*nu[p])-sigma[g]*x/(h*nu[g])-1/T[r]]])

For the cw-solution the eigenvalues of the perturbations are:

>    BB := eigenvalues(B):
 BBB := subs( {x=subs( sol[2],Phi ),y=subs( sol[2],alpha )},BB[1] ):
  BBBB := subs( {x=subs( sol[2],Phi ),y=subs( sol[2],alpha )},BB[2] ):
 plot( [subs( \
{lambda[g]=8e-5, lambda[p]=5.6e-5}\
,subs( \
{h=6.62e-34, sigma[g]= 3e-19, sigma[p]= 1e-19, rho=0.1, nu[g]=3e10/lambda[g], nu[p]=3e10/lambda[p], T[r]=3e-6, a[m]=2.5}\
,BBB ) ),\
subs( \
{lambda[g]=8e-5, lambda[p]=5.6e-5}\
,subs( \
{h=6.62e-34, sigma[g]= 3e-19, sigma[p]= 1e-19, rho=0.1, nu[g]=3e10/lambda[g], nu[p]=3e10/lambda[p], T[r]=3e-6, a[m]=2.5}\
,BBBB/1e7 ) )], P=4.9e4..1e5, axes=boxed, title=`perturbation eigenvalues vs. pump` );# second eigenvalue is divided by 1e7

[Maple Plot]

So, cw oscillations is stable in our simple case because the eigenvalues are negative. For the zero field solution the perturbation eigenvalues are:

>    BB := eigenvalues(B):
 BBB := subs( {x=subs( sol[1],Phi ),y=subs( sol[1],alpha )},BB[1] ):
  BBBB := subs( {x=subs( sol[1],Phi ),y=subs( sol[1],alpha )},BB[2] ):
 plot( [subs( \
{lambda[g]=8e-5, lambda[p]=5.6e-5}\
,subs( \
{h=6.62e-34, sigma[g]= 3e-19, sigma[p]= 1e-19, rho=0.1, nu[g]=3e10/lambda[g], nu[p]=3e10/lambda[p], T[r]=3e-6, a[m]=2.5}\
,BBB ) ),\
subs( \
{lambda[g]=8e-5, lambda[p]=5.6e-5}\
,subs( \
{h=6.62e-34, sigma[g]= 3e-19, sigma[p]= 1e-19, rho=0.1, nu[g]=3e10/lambda[g], nu[p]=3e10/lambda[p], T[r]=3e-6, a[m]=2.5}\
,BBBB/1e7 ) )], P=4.9e4..1e5, axes=boxed, title=`perturbation eigenvalues vs. pump` );# second eigenvalue is divided by 1e7

[Maple Plot]

The existence of the positive eigenvalue suggests the instability of the zero-field steady-state solution. Hence there is the spontaneous generation of the cw oscillation above threshold in the model under consideration.

Q-switching

The situation changes radically due to insertion of the saturable absorber into laser cavity. In this case, in addition to the gain saturation, the loss saturation appears. This breaks the steady-state operation and produces the short laser pulses. As a result of the additional absorption, Q-factor of laser is comparatively low (high threshold). This suppresses the generation. When Phi  is small, the gain increases in the absence of the gain saturation (see eq2 from the previous subsection). This causes the field growth. The last saturates the absorption and abruptly increases Q-factor. The absorption "switching off" leads to the explosive generation, when the most part of the energy, which is stored in the active medium during pumping process, converts into laser field. The increased field saturates the gain and this finishes the generation.

As the reference for the model in question see, for example, J.J. Degnan, "Theory of the optimally coupled Q-switched laser", IEEE J. Quant. Elect. 25 , 214   (1989). To formulate the quantitative model of the laser pulse formation let's use the next approximations: 1) the pulse width is much larger than the cavity period, and 2) is less than the relaxation time, 3) the pump action during the stage of the pulse generation is negligible. We shall use the quasi-two level schemes for the gain and loss media (the relaxation from the intermediate levels is fast). Also, the excited-state absorption in absorber will be taken into account.

The system of equation describing the evolution of the photon density phi(t)  is

>    restart:
with(plots):

print(`System of basic equations:`);
e1 := Diff(n[1](t),t) =\
      -sigma[s]*c*phi(t)*n[1](t);# EVOLUTION OF ABSORPTION. The ground level population n[1](t) defines the absorption (quasi-two level scheme). The relaxation is slow in the comparison with the pulse duration, phi(t) is the photon density
  e2 := Diff(phi(t),t) =\
     (phi(t)/t_cav)*\
     (2*sigma[g]*x(t)*l - log(1/R) - L - 2*sigma[s]*n[1](t)*l[s]-2*sigma[esa]*(n[0]-n[1](t))*l[s]);# EVOLUTION OF PHOTON DENSITY. The field variation over cavity round-trip is small, sigma[g] is the gain cross-section, x(t) is the inversion in amplifier defining the gain coefficient, t_cav is the cavity period, l is the active medium length, R is the output coupler refractivity, L is the linear loss, l[s] is the absorber length
         e3 := Diff(x(t),t) =\
              -gamma*sigma[g]*c*phi(t)*x(t);# EVOLUTION OF GAIN. c is the light velocity, gamma is the parameter of the inversion reduction (2 for the pure three-level scheme and 1 for the pure four-level scheme)

Warning, the name changecoords has been redefined

`System of basic equations:`

e1 := Diff(n[1](t),t) = -sigma[s]*c*phi(t)*n[1](t)

e2 := Diff(phi(t),t) = phi(t)*(2*sigma[g]*x(t)*l-ln(1/R)-L-2*sigma[s]*n[1](t)*l[s]-2*sigma[esa]*(n[0]-n[1](t))*l[s])/t_cav

e3 := Diff(x(t),t) = -gamma*sigma[g]*c*phi(t)*x(t)

Now we shall search the ground state population in the absorber as a function of the initial population inversion in amplifier:

>    Diff(n1(n),n) = subs({n[1](t)=n[1](n),x(t)=x},rhs(e1)/rhs(e3));# devision of e1 by e3
 Int(1/y,y=n[0]..n[1]) = Int(zeta/z,z=x_i..x);# zeta = sigma[s]/gamma/sigma[g], x_i is the initial inversion in amplifier, n[0] is the concentration of active ions in absorber
   solve(value(%),n[1]):
    n[1] = expand(%);
     print(`Ground state population in absorber:`);
      sol_1 := n[1] = n[0]*(x/x_i)^zeta;

Diff(n1(n),n) = sigma[s]*n[1](n)/(gamma*sigma[g]*x)

Int(1/y,y = n[0] .. n[1]) = Int(zeta/z,z = x_i .. x)

n[1] = x^zeta*n[0]/(x_i^zeta)

`Ground state population in absorber:`

sol_1 := n[1] = n[0]*(x/x_i)^zeta

The similar manipulation allows to find the photon density as a function of inversion in amplifier:

>    A := Diff(phi(x),x) =\
     simplify( subs( n[1](t)=rhs(sol_1),subs( {x(t)=x},rhs(e2)/rhs(e3) ) ) );# devision of e2 by e3
  B := numer( rhs(A) );
   C := denom( rhs(A) );
    BB := subs( {op(4,B)=(x/x_i)^(zeta)*log(1/T[0]^2),2*sigma[esa]*l[s]*n[0]=ln(1/T[s]^2),op(6,B)=-ln(1/T[s]^2)*(x/x_i)^zeta}, B );# T[0] is the initial transmission of the absorber (log(1/T[0]^2)= 2*sigma[s]*l[s]*n[0], l[s] is the absorber length)
      CC := 2*l_cav*gamma*sigma[g]*x;# l_cav=t_cav*c/2 is the cavity length, t_cav is the cavity period

A := Diff(phi(x),x) = (-2*sigma[g]*x*l+ln(1/R)+L+2*sigma[s]*n[0]*(x/x_i)^zeta*l[s]+2*sigma[esa]*l[s]*n[0]-2*sigma[esa]*l[s]*n[0]*(x/x_i)^zeta)/(t_cav*gamma*sigma[g]*c*x)

B := -2*sigma[g]*x*l+ln(1/R)+L+2*sigma[s]*n[0]*(x/x_i)^zeta*l[s]+2*sigma[esa]*l[s]*n[0]-2*sigma[esa]*l[s]*n[0]*(x/x_i)^zeta

C := t_cav*gamma*sigma[g]*c*x

BB := -2*sigma[g]*x*l+ln(1/R)+L+(x/x_i)^zeta*ln(1/(T[0]^2))+ln(1/(T[s]^2))-ln(1/(T[s]^2))*(x/x_i)^zeta

CC := 2*l_cav*gamma*sigma[g]*x

>    print(`Evolution of the photon density:`);
       e4 := diff(phi(x),x) = subs(ln(1/(T[s]^2))=delta*ln(1/(T[0]^2)),BB)/CC;# delta=sigma[esa]/sigma[s]=ln(T[s])/ln(T[0]) is the parameter defining the contribution of an excited-state absorption with cross-section sigma[esa], T[s] is the fully saturated transmission of absorber

`Evolution of the photon density:`

e4 := diff(phi(x),x) = 1/2*(-2*sigma[g]*x*l+ln(1/R)+L+(x/x_i)^zeta*ln(1/(T[0]^2))+delta*ln(1/(T[0]^2))-delta*ln(1/(T[0]^2))*(x/x_i)^zeta)/(l_cav*gamma*sigma[g]*x)

Hence the photon density is:

>    dsolve({e4,phi(x_0)=0},phi(x)):
 simplify( subs(x_0=x_i,%) ):
  print(`This is the basic dependence for photon density:`);
   sol_2 := collect(combine(%,ln),{log(1/T[0]^2),sigma[g],zeta});

`This is the basic dependence for photon density:`

sol_2 := phi(x) = 1/2*(-2*l*x+2*l*x_i)/(l_cav*gamma)+(1/2*ln(x/x_i)*delta*ln(1/(T[0]^2))/(l_cav*gamma)+1/2*(ln(x/x_i)*ln(1/R)+ln(x/x_i)*L)/(l_cav*gamma)+1/2*((x/x_i)^zeta-delta*(x/x_i)^zeta-1+delta)*ln...

So, we have:

phi ( x )= l*(x[i]-x-ln(x[i]/x)*(ln(1/R)+L+delta*ln(1/(T[0]^2)))/(2*sigma[g]*l)-(1-(x/x[i])^zeta)*ln(1/(T[0]^2))*(1-delta)/(2*sigma[g]*l*zeta))/(l[cav]*gamma)          ( Eq. 1 )  

Now let's define the key Q-switching parameters:

>    subs( n[1](t)=n[0],rhs(e2)*t_cav/phi(t)) = 0;# Q-switching start, n[1](0) = n[0]
 print(`Solution for the initial inversion:`);
  sol_3 := x_i = subs( 2*sigma[s]*n[0]*l[s]=log(1/T[0]^2), solve(%,x(t)) );

2*sigma[g]*x(t)*l-ln(1/R)-L-2*sigma[s]*n[0]*l[s] = 0

`Solution for the initial inversion:`

sol_3 := x_i = 1/2*(ln(1/R)+L+ln(1/(T[0]^2)))/(sigma[g]*l)

So, the initial inversion defining the gain at Q-switching start is

x[i] = (ln(1/R)+ln(1/(T[0]^2))+L)/(2*sigma[g]*l)            ( Eq. 2 )

>    e5 := numer( rhs(e4) ) = 0;# definition of the pulse maximum
 print(`The inversion at the pulse maximum:`);
  sol_4 := x_t = solve(e5,x);

e5 := -2*sigma[g]*x*l+ln(1/R)+L+(x/x_i)^zeta*ln(1/(T[0]^2))+delta*ln(1/(T[0]^2))-delta*ln(1/(T[0]^2))*(x/x_i)^zeta = 0

`The inversion at the pulse maximum:`

sol_4 := x_t = exp(RootOf(2*exp(_Z)*sigma[g]*x_i*l-ln(1/R)-L-exp(_Z*zeta)*ln(1/(T[0]^2))-delta*ln(1/(T[0]^2))+delta*ln(1/(T[0]^2))*exp(_Z*zeta)))*x_i

>    e6 := numer( simplify( rhs(sol_2) ) ) = 0;# definition of the Q-switching finish
 print(`The inversion at Q-switching finish`);
  sol_5 := x_f = solve(e6,x);

e6 := (x/x_i)^zeta*ln(1/(T[0]^2))-delta*ln(1/(T[0]^2))*(x/x_i)^zeta-2*l*x*sigma[g]*zeta+ln(x/x_i)*ln(1/R)*zeta+ln(x/x_i)*L*zeta+ln(x/x_i)*delta*ln(1/(T[0]^2))*zeta-ln(1/(T[0]^2))+delta*ln(1/(T[0]^2))+2...
e6 := (x/x_i)^zeta*ln(1/(T[0]^2))-delta*ln(1/(T[0]^2))*(x/x_i)^zeta-2*l*x*sigma[g]*zeta+ln(x/x_i)*ln(1/R)*zeta+ln(x/x_i)*L*zeta+ln(x/x_i)*delta*ln(1/(T[0]^2))*zeta-ln(1/(T[0]^2))+delta*ln(1/(T[0]^2))+2...

`The inversion at Q-switching finish`

sol_5 := x_f = exp(RootOf(2*exp(_Z)*l*x_i*sigma[g]*zeta-exp(_Z*zeta)*ln(1/(T[0]^2))+delta*ln(1/(T[0]^2))*exp(_Z*zeta)-_Z*ln(1/R)*zeta-_Z*L*zeta-_Z*delta*ln(1/(T[0]^2))*zeta+ln(1/(T[0]^2))-delta*ln(1/(T...
sol_5 := x_f = exp(RootOf(2*exp(_Z)*l*x_i*sigma[g]*zeta-exp(_Z*zeta)*ln(1/(T[0]^2))+delta*ln(1/(T[0]^2))*exp(_Z*zeta)-_Z*ln(1/R)*zeta-_Z*L*zeta-_Z*delta*ln(1/(T[0]^2))*zeta+ln(1/(T[0]^2))-delta*ln(1/(T...
sol_5 := x_f = exp(RootOf(2*exp(_Z)*l*x_i*sigma[g]*zeta-exp(_Z*zeta)*ln(1/(T[0]^2))+delta*ln(1/(T[0]^2))*exp(_Z*zeta)-_Z*ln(1/R)*zeta-_Z*L*zeta-_Z*delta*ln(1/(T[0]^2))*zeta+ln(1/(T[0]^2))-delta*ln(1/(T...

Additionally, we define the inversion at the pulse maximum, when zeta   tends to infinity:

>    subs( (x/x_i)^zeta=0,e5 );# by virtue of x_i > x and zeta -> infinity
 print(`Inversion at the pulse maximum for large zeta`);
  sol_6 := x_t0 = solve(%,x);

-2*sigma[g]*x*l+ln(1/R)+L+delta*ln(1/(T[0]^2)) = 0

`Inversion at the pulse maximum for large zeta`

sol_6 := x_t0 = 1/2*(ln(1/R)+L+delta*ln(1/(T[0]^2)))/(sigma[g]*l)

So, we have the expressions for x[i]  (initial inversion, sol_3 ), x[t]  (the inversion at pulse maximum, sol_4  and e5 ), x[t,0]  (the inversion at pulse maximum when zeta --> infinity , sol_6 ), x[f]   (the final inversion, sol_5  and e6 ) and the photon density phi  as function of inversion x  ( sol_2 ).

As an example, we consider the real situation of Yb/Er-glass laser with the crystalline Co:MALO saturable absorber. The obtained expressions allow to plot the typical dependencies for the pulse parameters:

>    print(`Pulse energy:`);
 fun_1 := (h*nu*S)/(2*sigma[g]*gamma)*log(1/R)*log(x_i/x_f);
  print(`Pulse power:`);
   fun_2 := (h*nu*S*l)/(t_cav*gamma)*log(1/R)*(x_i - x_t - x_t0*log(x_i/x_t) - (x_i-x_t0)*(1-(x_t/x_i)^alpha)/alpha);
     print(`Pulse width:`);
fun_3 := simplify(fun_1/fun_2);

`Pulse energy:`

fun_1 := 1/2*h*nu*S*ln(1/R)*ln(x_i/x_f)/(sigma[g]*gamma)

`Pulse power:`

fun_2 := h*nu*S*l*ln(1/R)*(x_i-x_t-x_t0*ln(x_i/x_t)-(x_i-x_t0)*(1-(x_t/x_i)^alpha)/alpha)/(t_cav*gamma)

`Pulse width:`

fun_3 := -1/2*ln(x_i/x_f)*t_cav*alpha/(sigma[g]*l*(-x_i*alpha+x_t*alpha+x_t0*ln(x_i/x_t)*alpha+x_i-x_i*(x_t/x_i)^alpha-x_t0+x_t0*(x_t/x_i)^alpha))

This numerical procedure plots the dependence of the output pulse energy on the reflectivity of the output mirror:

>    En := proc(gam,L,T_0,l,w0,i)
# definition of system's parameters
delta := 0.028:
 sigma[g] := 7e-21:# the gain cross-section in [cm^2]
  sigma[s] := 3.5e-19:# the absorption cross-section in Co:MALO
   alpha := sigma[s]/(sigma[g]*gam):
    h := 6.63e-34:# J*s
     nu := evalf(3e8/1.535e-6):# lasing frequency for 1.54 micrometers
      S := Pi*w0^2/2:# area of Gaussian beam in amplifier, w0 is the beam radius
     R := 0.5+0.5*i/100:
       
x_i := 1/2*(ln(1/R) + L + ln(1/(T_0^2)))/(l*sigma[g]):
 eq := ln(x)*delta*ln(1/(T_0^2))*alpha-ln(x_i)*delta*ln(1/(T_0^2))*alpha-2*l*x*sigma[g]*alpha+2*l*x_i*sigma[g]*alpha+ln(x)*L*alpha+ln(x)*ln(1/R)*alpha-ln(x_i)*L*alpha-ln(x_i)*ln(1/R)*alpha+(x/x_i)^alpha*ln(1/(T_0^2))-delta*ln(1/(T_0^2))*(x/x_i)^alpha-ln(1/(T_0^2))+delta*ln(1/(T_0^2)) = 0:# e6

sol_f := fsolve(eq, x, avoid={x=0}):
 sol_En := evalf( 1/2*h*nu*S*ln(1/R)*ln(x_i/sol_f)/(sigma[g]*gam) * 1e3 ):# [mJ]

end:

print(`The parameters are:`);
print(`1) inversion reduction factor gamma`);
print(`2) linear loss L`);
print(`3) initial transmission of absorber T[0]`);
print(`4) gain medium length l in cm`);
print(`5) beam radius in amplifier w0 in cm`);

Warning, `delta` is implicitly declared local to procedure `En`

Warning, `sigma` is implicitly declared local to procedure `En`

Warning, `alpha` is implicitly declared local to procedure `En`

Warning, `h` is implicitly declared local to procedure `En`

Warning, `nu` is implicitly declared local to procedure `En`

Warning, `S` is implicitly declared local to procedure `En`

Warning, `R` is implicitly declared local to procedure `En`

Warning, `x_i` is implicitly declared local to procedure `En`

Warning, `eq` is implicitly declared local to procedure `En`

Warning, `sol_f` is implicitly declared local to procedure `En`

Warning, `sol_En` is implicitly declared local to procedure `En`

`The parameters are:`

`1) inversion reduction factor gamma`

`2) linear loss L`

`3) initial transmission of absorber T[0]`

`4) gain medium length l in cm`

`5) beam radius in amplifier w0 in cm`

For the comparison we use the experimental data (crosses in Figure):

>    points := {seq([0.5+0.5*k/100,En(1.9,0.04,0.886,4.9,0.065,k)],k=1..100)}:
 points_exp := {[0.793,10.5],[0.88,9],[0.916,5.5]}:
 plot(points,x=0.5..1,style=point,axes=boxed,symbol=circle,color=black,title=`Pulse energy vs. R, [mJ]`):
  plot(points_exp,x=0.5..1,style=point,symbol=cross,axes=boxed,color=black):
   display({%,%%});

[Maple Plot]

Similarly, for the output power we have:

>    Pow := proc(gam,L,T_0,l,l_cav,w0,i)
# definition of system's parameters
delta := 0.028:
 sigma[g] := 7e-21:# in [cm^2]
  sigma[s] := 3.5e-19:# Co:MALO
   alpha := sigma[s]/(sigma[g]*gam):
    h := 6.63e-34:# J*s
     nu := evalf(3e8/1.354e-6):# frequency for 1.54 micrometers
      S := Pi*w0^2/2:# area for Gaussian beam
     R := 0.5 + 0.5*i/100:
    c := 3e10:
   refractivity := 1.6:# refractivity coefficient for the active medium
  t_cav := 2*(l_cav - l)/c + 2*(l*refractivity)/c:
   
x_i := 1/2*(ln(1/R) + L + ln(1/(T_0^2)))/(l*sigma[g]):
x_t0 := 1/2*(ln(1/R)+L+delta*ln(1/(T_0^2)))/(sigma[g]*l):
eq := -2*sigma[g]*x*l+ln(1/R)+L+(x/x_i)^alpha*ln(1/(T_0^2))+delta*ln(1/(T_0^2))-delta*ln(1/(T_0^2))*(x/x_i)^alpha = 0:# e5

sol_t[i] := fsolve(eq, x, avoid={x=0}):
 sol_Pow[i] := h*nu*S*l*ln(1/R)* (x_i-sol_t[i]-x_t0*ln(x_i/sol_t[i])-(x_i-x_t0)*(1-(sol_t[i]/x_i)^alpha)/alpha)/(t_cav*gam)/1e3:# [kW]

end:

print(`The parameters are:`);
print(`1) inversion reduction factor gamma`);
print(`2) linear loss L`);
print(`3) initial transmission of absorber T[0]`);
print(`4) gain medium length l in cm`);
print(`5) cavity length l_cav in cm`);
print(`6) beam radius in amplifier w0 in cm`);

Warning, `delta` is implicitly declared local to procedure `Pow`

Warning, `sigma` is implicitly declared local to procedure `Pow`

Warning, `alpha` is implicitly declared local to procedure `Pow`

Warning, `h` is implicitly declared local to procedure `Pow`

Warning, `nu` is implicitly declared local to procedure `Pow`

Warning, `S` is implicitly declared local to procedure `Pow`

Warning, `R` is implicitly declared local to procedure `Pow`

Warning, `c` is implicitly declared local to procedure `Pow`

Warning, `refractivity` is implicitly declared local to procedure `Pow`

Warning, `t_cav` is implicitly declared local to procedure `Pow`

Warning, `x_i` is implicitly declared local to procedure `Pow`

Warning, `x_t0` is implicitly declared local to procedure `Pow`

Warning, `eq` is implicitly declared local to procedure `Pow`

Warning, `sol_t` is implicitly declared local to procedure `Pow`

Warning, `sol_Pow` is implicitly declared local to procedure `Pow`

`The parameters are:`

`1) inversion reduction factor gamma`

`2) linear loss L`

`3) initial transmission of absorber T[0]`

`4) gain medium length l in cm`

`5) cavity length l_cav in cm`

`6) beam radius in amplifier w0 in cm`

>    points := {seq([0.5+0.5*k/100,Pow(1.6,0.01,0.886,4.9,35,0.06,k)],k=1..100)}:
 plot(points,x=0.5..1,style=point,symbol=circle,color=black,axes=boxed,title=`Pulse power vs. R, [kW]`);

[Maple Plot]

And, at last, the pulse durations are:

>    Width := proc(gam,L,T_0,l,l_cav,i)
# definition of system's parameters
delta := 0.028:
 sigma[g] := 7e-21:# in [cm^2]
  sigma[s] := 3.5e-19:# Co:MALO
   alpha := sigma[s]/(sigma[g]*gam):
    h := 6.63e-34:# J*s
     nu := evalf(3e8/1.354e-6):# frequency for 1.54 micrometers
      S := Pi*w0^2/2:# area for Gaussian beam
     R := 0.5 + 0.5*i/100:
    c := 3e10:
    refractivity := 1.5:# active medium
   t_cav := 2*(l_cav-l)/c + 2*(l*refractivity)/c:   
   
x_i := 1/2*(ln(1/R) + L + ln(1/(T_0^2)))/(l*sigma[g]):
x_t0 := 1/2*(ln(1/R)+L+delta*ln(1/(T_0^2)))/(sigma[g]*l):
eq1 := -2*sigma[g]*x*l+ln(1/R)+L+(x/x_i)^alpha*ln(1/(T_0^2))+delta*ln(1/(T_0^2))-delta*ln(1/(T_0^2))*(x/x_i)^alpha = 0:# e5
eq2 := ln(x)*delta*ln(1/(T_0^2))*alpha-ln(x_i)*delta*ln(1/(T_0^2))*alpha-2*l*x*sigma[g]*alpha+2*l*x_i*sigma[g]*alpha+ln(x)*L*alpha+ln(x)*ln(1/R)*alpha-ln(x_i)*L*alpha-ln(x_i)*ln(1/R)*alpha+(x/x_i)^alpha*ln(1/(T_0^2))-delta*ln(1/(T_0^2))*(x/x_i)^alpha-ln(1/(T_0^2))+delta*ln(1/(T_0^2)) = 0:# e6

sol_f := fsolve(eq2, x, avoid={x=0}):
sol_t := fsolve(eq1, x, avoid={x=0}):
 sol_Width := (-1/2*ln(x_i/sol_f)*t_cav*alpha/(sigma[g]*l*(-x_i*alpha+sol_t*alpha+x_t0*ln(x_i/sol_t)*alpha+x_i-x_i*(sol_t/x_i)^alpha-x_t0+x_t0*(sol_t/x_i)^alpha))) * 1e9:# [ns]

end:

print(`The parameters are:`);
print(`1) reducing parameter gamma`);
print(`2) linear loss L`);
print(`3) initial transmission of absorber T[0]`);
print(`4) gain medium length l in cm`);
print(`5) cavity length l_cav in cm`);

Warning, `delta` is implicitly declared local to procedure `Width`

Warning, `sigma` is implicitly declared local to procedure `Width`

Warning, `alpha` is implicitly declared local to procedure `Width`

Warning, `h` is implicitly declared local to procedure `Width`

Warning, `nu` is implicitly declared local to procedure `Width`

Warning, `S` is implicitly declared local to procedure `Width`

Warning, `R` is implicitly declared local to procedure `Width`

Warning, `c` is implicitly declared local to procedure `Width`

Warning, `refractivity` is implicitly declared local to procedure `Width`

Warning, `t_cav` is implicitly declared local to procedure `Width`

Warning, `x_i` is implicitly declared local to procedure `Width`

Warning, `x_t0` is implicitly declared local to procedure `Width`

Warning, `eq1` is implicitly declared local to procedure `Width`

Warning, `eq2` is implicitly declared local to procedure `Width`

Warning, `sol_f` is implicitly declared local to procedure `Width`

Warning, `sol_t` is implicitly declared local to procedure `Width`

Warning, `sol_Width` is implicitly declared local to procedure `Width`

`The parameters are:`

`1) reducing parameter gamma`

`2) linear loss L`

`3) initial transmission of absorber T[0]`

`4) gain medium length l in cm`

`5) cavity length l_cav in cm`

>    points := {seq([0.5+0.5*k/100,Width(1.9,0.04,0.89,4.9,35,k)],k=1..100)}:
 points_exp := {[0.793,70],[0.88,70],[0.916,75]}:
 plot(points,x=0.5..1,style=point,axes=boxed,symbol=circle,title=`Pulse width vs. R, [ns]`):
 plot(points_exp,x=0.5..1,style=point,axes=boxed,color=black):
 display({%,%%},view=50..100);

[Maple Plot]

The worse agreement with the experimental data for the pulse durations is caused by the deviation of the pulse shape from the Gaussian profile, which was used for the analytical estimations. More precise consideration is presented in J. Liu, D. Shen, S.-Ch. Tam, and Y.-L. Lam, "Modelling pulse shape of Q-switched lasers", IEEE J. Quantum Electr.   37 , 888 (2001).

The main advantage of the analytical model in question is the potential of the Q-switched laser optimization without any cumbersome numerical simulations. Let's slightly transform the above obtained expressions:

>    e7 := subs( x=x_t,expand( e5/(2*sigma[g]*x_i*l) ) );
 e8 := subs( x=x_f,expand( rhs(sol_2)*l_cav*gamma/l ) ) = 0;
  sol_6;
   sol_3;

e7 := -x_t/x_i+1/2*ln(1/R)/(sigma[g]*x_i*l)+1/2*L/(sigma[g]*x_i*l)+1/2*(x_t/x_i)^zeta*ln(1/(T[0]^2))/(sigma[g]*x_i*l)+1/2*delta*ln(1/(T[0]^2))/(sigma[g]*x_i*l)-1/2*delta*ln(1/(T[0]^2))*(x_t/x_i)^zeta/(...

e8 := -x_f+x_i+1/2*ln(x_f/x_i)*delta*ln(1/(T[0]^2))/(l*sigma[g])+1/2*ln(x_f/x_i)*ln(1/R)/(l*sigma[g])+1/2*ln(x_f/x_i)*L/(l*sigma[g])+1/2*ln(1/(T[0]^2))*(x_f/x_i)^zeta/(l*sigma[g]*zeta)-1/2*ln(1/(T[0]^2...
e8 := -x_f+x_i+1/2*ln(x_f/x_i)*delta*ln(1/(T[0]^2))/(l*sigma[g])+1/2*ln(x_f/x_i)*ln(1/R)/(l*sigma[g])+1/2*ln(x_f/x_i)*L/(l*sigma[g])+1/2*ln(1/(T[0]^2))*(x_f/x_i)^zeta/(l*sigma[g]*zeta)-1/2*ln(1/(T[0]^2...

x_t0 = 1/2*(ln(1/R)+L+delta*ln(1/(T[0]^2)))/(sigma[g]*l)

x_i = 1/2*(ln(1/R)+L+ln(1/(T[0]^2)))/(sigma[g]*l)

>    # Hence
 e9 := x_t/x_i = (ln(1/R)+L+delta*ln(1/(T[0]^2)))/(2*l*x_i*sigma[g]) + (x_t/x_i)^zeta*ln(1/T[0]^2)*(1-delta)/(2*l*x_i*sigma[g]);
  e10 := x_f - x_i = ln(x_f/x_i)*(ln(1/R) + L + delta*ln(1/(T[0]^2)))/(2*l*sigma[g]) - ln(1/T[0]^2)*(1-delta)*(1-(x_f/x_i)^zeta)/(2*l*sigma[g]*alpha);
   simplify( sol_6 - sol_3 );
    e11 := subs( ln(1/T[0]^2)=(x_i-x_t0)*2*l*sigma[g]/(1-delta),subs(ln(1/R)+L+delta*ln(1/(T[0]^2))=x_t0*2*l*sigma[g],e9));
     e12 := subs( ln(1/T[0]^2)=(x_i-x_t0)*2*l*sigma[g]/(1-delta),subs(ln(1/R)+L+delta*ln(1/(T[0]^2))=x_t0*2*l*sigma[g],e10));

e9 := x_t/x_i = 1/2*(ln(1/R)+L+delta*ln(1/(T[0]^2)))/(sigma[g]*x_i*l)+1/2*(x_t/x_i)^zeta*ln(1/(T[0]^2))*(1-delta)/(sigma[g]*x_i*l)

e10 := x_f-x_i = 1/2*ln(x_f/x_i)*(ln(1/R)+L+delta*ln(1/(T[0]^2)))/(l*sigma[g])-1/2*ln(1/(T[0]^2))*(1-delta)*(1-(x_f/x_i)^zeta)/(l*sigma[g]*alpha)

x_t0-x_i = 1/2*ln(1/(T[0]^2))*(-1+delta)/(l*sigma[g])

e11 := x_t/x_i = x_t0/x_i+(x_t/x_i)^zeta*(x_i-x_t0)/x_i

e12 := x_f-x_i = ln(x_f/x_i)*x_t0-(x_i-x_t0)*(1-(x_f/x_i)^zeta)/alpha

Now, let's plot some typical dependence for Q-switching.

>    eq := subs({x_t0=x,x_i=1},subs(x_t/x_i=y,expand(e11)));# here x=x_t0/x_i, y=x_t/x_i

eq := y = x+y^zeta-y^zeta*x

>    xt := proc(zeta,i)
sol := array(1..20):
  x := (i-1)/20:
   sol[i] := fsolve(y = x+y^zeta-y^zeta*x,y,avoid={y=1},0..infinity):
end:

Warning, `sol` is implicitly declared local to procedure `xt`

Warning, `x` is implicitly declared local to procedure `xt`

>    points := {seq([k/20,xt(1.5,k)],k=2..19)}:
p1 := plot(points,x=0..1,style=point,axes=boxed):
  points := {seq([k/20,xt(3,k)],k=2..19)}:
   p2 := plot(points,x=0..1,style=point,axes=boxed):
    points := {seq([k/20,xt(6,k)],k=2..19)}:
     p3 := plot(points,x=0..1,style=point,axes=boxed):

  display({p1,p2,p3},view=0..1,title=`x_t/x_i vs x_t0/x_i for different zeta`);

[Maple Plot]

From the definition of   x_t0  this dependence for growing zeta  tends to the linear one, which correspond to the maximal efficiency of the population inversion utilization. For the fixed absorption and emission cross-sections, the zeta  parameter increases as a result of the laser beam focusing in the saturable absorber. Then ( zeta --> infinity ), we have:

>    e13 := lhs(e11) = op(1,rhs(e11));
 e14 := expand(lhs(e12)/x_i) = expand(op(1,rhs(e12))/x_i);

e13 := x_t/x_i = x_t0/x_i

e14 := x_f/x_i-1 = ln(x_f/x_i)*x_t0/x_i

and the output energy optimization can be realized by this simple way:

>    #                         Energy optimization

e15 := x_f/x_i-1 = ln(x_f/x_i)*rhs(sol_6)/x_i;# from e14 and expression for x_t0
 e16 := lhs(%) = ln(x_f/x_i)*(a + b + delta*c);# a= ln(1/R)/(2*sigma[g]*x_i*l), b = L/(2*sigma[g]*x_i*l), c= ln(1/T[0]^2)/(2*sigma[g]*x_i*l) are the relative shares of the output, linear and saturable loss in the net-loss
  expand(solve(%,a)):
   sol_7 := (y/log(y) - 1/log(y) - (1-delta)*b - delta)/(1-delta);# solution for a, y = x_f/x_i, we used a+b+c=1
    epsilon := -a*log(y);# dimensionless energy, epsilon = En*2*sigma[g]*gamma/(h*nu*A)/(2*sigma[g]*x_i*l);
    simplify( subs(a=sol_7,epsilon) );
   diff(%,y) = 0;# maximum of energy
   print(`An optimal ratio of final and initial inversions:`);
  y_opt := solve(%,y);# optimal y
  print(`An optimal mirror:`);
 a_opt := subs(y=y_opt,sol_7);# optimal a
print(`A maximal dimensionless energy:`);
epsilon_opt := simplify( subs({a=a_opt,y=y_opt},epsilon) );# optimal epsilon

e15 := x_f/x_i-1 = 1/2*ln(x_f/x_i)*(ln(1/R)+L+delta*ln(1/(T[0]^2)))/(sigma[g]*l*x_i)

e16 := x_f/x_i-1 = ln(x_f/x_i)*(a+b+delta*c)

sol_7 := (y/ln(y)-1/ln(y)-(1-delta)*b-delta)/(1-delta)

epsilon := -a*ln(y)

(y-1-b*ln(y)+b*ln(y)*delta-delta*ln(y))/(-1+delta)

(1-b/y+b*delta/y-delta/y)/(-1+delta) = 0

`An optimal ratio of final and initial inversions:`

y_opt := b-b*delta+delta

`An optimal mirror:`

a_opt := ((b-b*delta+delta)/ln(b-b*delta+delta)-1/ln(b-b*delta+delta)-(1-delta)*b-delta)/(1-delta)

`A maximal dimensionless energy:`

epsilon_opt := (b-b*delta+delta-1-b*ln(b-b*delta+delta)+b*ln(b-b*delta+delta)*delta-delta*ln(b-b*delta+delta))/(-1+delta)

>      p1 := plot({[b,subs(delta=0,a_opt),b=0..1],[b,1-subs(delta=0,a_opt)-b,b=0..1]},color=black,axes=boxed,title=`optimal a and c versus b`):
    p2 := plot({[b,subs(delta=0.05,a_opt),b=0..1],[b,1-subs(delta=0.05,a_opt)-b,b=0..1]},color=red,axes=boxed,title=`optimal a and c versus b`):
     p3 := plot({[b,subs(delta=0.1,a_opt),b=0..1],[b,1-subs(delta=0.1,a_opt)-b,b=0..1]},color=blue,axes=boxed,title=`optimal a and c versus b`):
       
     display(p1,p2,p3,view=0..1);
 
     p1 := plot([b,subs(delta=0,epsilon_opt),b=0..1], axes=boxed,color=black, title=`optimal epsilon versus b`):
      p2 := plot([b,subs(delta=0.05,epsilon_opt),b=0..1], axes=boxed,color=red, title=`optimal epsilon versus b`):
      p3 := plot([b,subs(delta=0.1,epsilon_opt),b=0..1], axes=boxed,color=blue, title=`optimal epsilon versus b`):
       display(p1,p2,p3);

[Maple Plot]

[Maple Plot]

From the first figure the optimization can be performed by the simple graphical way. We have to define the appropriate for our scheme laser's net-loss and to determine (measure or calculate) the intracavity linear loss. This gives the value of b , which is the relation of the linear loss to the net-loss. The upper group of curves gives the value of c , the lower curves give a  (for the different contribution of the excited-state absorption, i. e. delta ).

Two-color pulsing

Now let consider a more complicated situation, which corresponds to the two-color Q-switching due to presence of the stimulated Raman scattering in the active medium (for example, Yb(3+):KGd(W0(4))(2), see A.A. Lagatsky, A. Abdolvand, N.V. Kuleshov, Opt. Lett. 25 , 616 (2000)). In this case the analytical modelling is not possible, but we can use the numerical capacities of Maple.

Let's the gain medium length is l[g]  and the Raman gain coefficient is g . We assume the exact Raman resonance and neglect the phase and group-velocity effects. Then the evolutional equations for the laser and scattered intensities I[p]  and I[s] , respectively, are:  

>    restart:
with(DEtools):
with(plots):

eq1 := diff(In[p](z),z) = -g*In[s](z)*In[p](z):# evolution of the laser intensity
 eq2 := diff(In[s](z),z) = g*In[p](z)*In[s](z):# evolution of the Stokes component intensity
  sys := {eq1,eq2};
   IC := {In[p](0)=In[p,0],In[s](0)=In[s,0]};# initial conditions
  sol := dsolve(sys union IC,{In[s](z),In[p](z)}):

Warning, the name changecoords has been redefined

sys := {diff(In[p](z),z) = -g*In[s](z)*In[p](z), diff(In[s](z),z) = g*In[s](z)*In[p](z)}

IC := {In[p](0) = In[p,0], In[s](0) = In[s,0]}

The integration produces:

>    subs(sol,In[s](z)):# z is the distance in the crystal
 sol_1 := In[s](z) = simplify(%);
subs(sol,In[p](z)):
 sol_2 := In[p](z) = simplify(%);

sol_1 := In[s](z) = exp(z*g*(In[p,0]+In[s,0]))*In[s,0]*(In[p,0]+In[s,0])/(In[p,0]+exp(z*g*(In[p,0]+In[s,0]))*In[s,0])

sol_2 := In[p](z) = (In[p,0]+In[s,0])*In[p,0]/(In[p,0]+exp(z*g*(In[p,0]+In[s,0]))*In[s,0])

There are the amplification of the scattered field and the depletion of the laser field, which plays a role of the pump for the Stokes component.

Now let's transit from the intensities to the photon densities:

>    #phi is the photon densities, the laser component at 1033 nm, the Stokes component at 1139 nm

sol_3 := simplify( subs({z=2*l[g],In[p,0]=c*h*nu[p]*phi[p,0]/2,In[s,0]=c*h*nu[s]*phi[s,0]/2,In[s](z)=c*h*nu[s]*phi[s](z)/2},2*sol_1) )/(c*h*nu[s]);
 
sol_4 := simplify( subs({z=2*l[g],In[p,0]=c*h*nu[p]*phi[p,0]/2,In[s,0]=c*h*nu[s]*phi[s,0]/2,In[p](z)=c*h*nu[p]*phi[p](z)/2},2*sol_2) )/(c*h*nu[p]);

sol_3 := phi[s](z) = exp(l[g]*g*c*h*(nu[p]*phi[p,0]+nu[s]*phi[s,0]))*phi[s,0]*(nu[p]*phi[p,0]+nu[s]*phi[s,0])/(nu[p]*phi[p,0]+exp(l[g]*g*c*h*(nu[p]*phi[p,0]+nu[s]*phi[s,0]))*nu[s]*phi[s,0])

sol_4 := phi[p](z) = (nu[p]*phi[p,0]+nu[s]*phi[s,0])*phi[p,0]/(nu[p]*phi[p,0]+exp(l[g]*g*c*h*(nu[p]*phi[p,0]+nu[s]*phi[s,0]))*nu[s]*phi[s,0])

Hence the photon densities evolution due to the stimulated Raman scattering obeys:

>    eq3 := diff(phi[p](t),t)[raman] = ( subs( {phi[p,0]=phi[p](t),phi[s,0]=phi[s](t)},rhs(sol_4) ) - phi[p](t) )/t[cav];# t[cav] is the laser cavity period

eq4 := diff(phi[s](t),t)[raman] = ( subs( {phi[p,0]=phi[p](t),phi[s,0]=phi[s](t)},rhs(sol_3) )- phi[s](t) )/t[cav];

eq3 := diff(phi[p](t),t)[raman] = ((nu[p]*phi[p](t)+nu[s]*phi[s](t))*phi[p](t)/(nu[p]*phi[p](t)+exp(l[g]*g*c*h*(nu[p]*phi[p](t)+nu[s]*phi[s](t)))*nu[s]*phi[s](t))-phi[p](t))/t[cav]

eq4 := diff(phi[s](t),t)[raman] = (exp(l[g]*g*c*h*(nu[p]*phi[p](t)+nu[s]*phi[s](t)))*phi[s](t)*(nu[p]*phi[p](t)+nu[s]*phi[s](t))/(nu[p]*phi[p](t)+exp(l[g]*g*c*h*(nu[p]*phi[p](t)+nu[s]*phi[s](t)))*nu[s]...

The inverse and ground-state populations for the gain medium and the absorber (Cr(4+):YAG) obey (see previous subsection):

>    eq5 := diff(n(t),t) = -gamma*sigma[g]*c*phi[p](t)*n(t);
 eq6 := diff(n[0](t),t) = -rho*sigma[a]*c*phi[p](t)*n[0](t);# rho=S[g]/S[a] is the ratio of the beam area in the gain medium to that in the absorber

eq5 := diff(n(t),t) = -gamma*sigma[g]*c*phi[p](t)*n(t)

eq6 := diff(n[0](t),t) = -rho*sigma[a]*c*phi[p](t)*n[0](t)

Contribution of gain, saturable, output and linear intracavity loss to the field's evolution results in:

>    eq7 := diff(phi[p](t),t)[gain] = 2*(sigma[g]*n(t)*l[g] - sigma[a]*n[0](t)*l[a])*phi[p](t)/t[cav];
 eq8 := diff(phi[p](t),t)[linear] = (-ln(1/R[p]) - L[p])*phi[p](t)/t[cav];
  eq9 := diff(phi[s](t),t)[linear] = (-ln(1/R[s]) - L[s] - 2*kappa*sigma[a]*n[0](t)*l[a])*phi[s](t)/t[cav];

eq7 := diff(phi[p](t),t)[gain] = 2*(sigma[g]*n(t)*l[g]-sigma[a]*n[0](t)*l[a])*phi[p](t)/t[cav]

eq8 := diff(phi[p](t),t)[linear] = (-ln(1/R[p])-L[p])*phi[p](t)/t[cav]

eq9 := diff(phi[s](t),t)[linear] = (-ln(1/R[s])-L[s]-2*kappa*sigma[a]*n[0](t)*l[a])*phi[s](t)/t[cav]

where L[p]  and L[s]  are the linear loss for the laser and Stokes components, respectively, R[p]  and R[s]  are the output mirror reflectivity at the laser and Stokes wavelengths, respectively, kappa  is the reduction factor taking into account the decrease of the loss cross-section at the Stokes wavelength relatively to the lasing one.

Hence, the field densities evaluate by virtue of:

>    eq10 := diff(phi[p](t),t) = rhs(eq3) + rhs(eq7) + rhs(eq8);
 eq11 := diff(phi[s](t),t) = rhs(eq4) + rhs(eq9);

eq10 := diff(phi[p](t),t) = ((nu[p]*phi[p](t)+nu[s]*phi[s](t))*phi[p](t)/(nu[p]*phi[p](t)+exp(l[g]*g*c*h*(nu[p]*phi[p](t)+nu[s]*phi[s](t)))*nu[s]*phi[s](t))-phi[p](t))/t[cav]+2*(sigma[g]*n(t)*l[g]-sigm...
eq10 := diff(phi[p](t),t) = ((nu[p]*phi[p](t)+nu[s]*phi[s](t))*phi[p](t)/(nu[p]*phi[p](t)+exp(l[g]*g*c*h*(nu[p]*phi[p](t)+nu[s]*phi[s](t)))*nu[s]*phi[s](t))-phi[p](t))/t[cav]+2*(sigma[g]*n(t)*l[g]-sigm...

eq11 := diff(phi[s](t),t) = (exp(l[g]*g*c*h*(nu[p]*phi[p](t)+nu[s]*phi[s](t)))*phi[s](t)*(nu[p]*phi[p](t)+nu[s]*phi[s](t))/(nu[p]*phi[p](t)+exp(l[g]*g*c*h*(nu[p]*phi[p](t)+nu[s]*phi[s](t)))*nu[s]*phi[s...

In the agreement with the results of the previous subsection we can transform the equation for the populations in the gain and absorption media:

>    diff(n[0](n),n) = subs( {n(t)=n,n[0](t)=n[0](n)},rhs(eq6)/rhs(eq5) );
 diff(n[0](n),n) = zeta*rho*n[0](n)/n;# zeta=sigma[a]/sigma[g]/gamma
  dsolve({%},n[0](n));

diff(n[0](n),n) = rho*sigma[a]*n[0](n)/(gamma*sigma[g]*n)

diff(n[0](n),n) = zeta*rho*n[0](n)/n

n[0](n) = _C1*n^(zeta*rho)

>    eq12 := n[0] = n[0,i]*(n/n[i])^(zeta*rho);

eq12 := n[0] = n[0,i]*(n/n[i])^(zeta*rho)

>    simplify( subs( phi[s](t)=0,subs( {n(t)=n[i],n[0](t)=n[0,i],phi[p](t)=0},expand( rhs(eq10)/phi[p](t) ) ) ) ) = 0:# the generation start
 numer(lhs(%)) = 0:
  eq13 := n[i] = subs( 2*sigma[a]*n[0,i]*l[a]=ln(1/T[0]^2),solve(%,n[i]) );

eq13 := n[i] = 1/2*(ln(1/(T[0]^2))+ln(1/R[p])+L[p])/(sigma[g]*l[g])

Let' introduce new variables:

>    Phi[p](t) = 2*sigma[g]*l[g]*phi[p];# note, that Phi is not the dimensional intensity from the first subsection!
 Phi[s](t) = 2*sigma[g]*l[g]*phi[s];
  tau = 2*sigma[g]*l[g]*n[i]*t/t[cav];
   Nu = nu[s]/nu[p];
    G = g*l[g]*c*h*nu[p]/(2*sigma[g]*l[g]);
     y(tau) = n(t)/n[i];
      Xi = ln(1/(T[0]^2))+ln(1/R[p])+L[p];
       kappa = 0.38;

Phi[p](t) = 2*sigma[g]*l[g]*phi[p]

Phi[s](t) = 2*sigma[g]*l[g]*phi[s]

tau = 2*sigma[g]*l[g]*n[i]*t/t[cav]

Nu = nu[s]/nu[p]

G = 1/2*g*c*h*nu[p]/sigma[g]

y(tau) = n(t)/n[i]

Xi = ln(1/(T[0]^2))+ln(1/R[p])+L[p]

kappa = .38

Then from Eqs. ( eq5, eq10, eq11, eq12 ):

>    f[1] := diff(Phi[p](tau),tau) = Phi[p](tau)/Xi*( Xi*y(tau) - ln(1/T[0]^2)*y(tau)^(alpha*rho) - (ln(1/R[p])+L[p]) +
( (Phi[p](tau)+N*Phi[s](tau))/(Phi[p](tau)+exp(G*(Phi[p](tau)+N*Phi[s](tau)))*N*Phi[s](tau)) - 1 ) );

f[2] := diff(Phi[s](tau),tau) = Phi[s](tau)/Xi*(-(ln(1/R[s])+L[s]+kappa*ln(1/(T[0]^2))*y(tau)^(alpha*rho)) + ( Phi[p](tau)+N*Phi[s](tau))/(Phi[p](tau)*exp(-G*(Phi[p](tau)+N*Phi[s](tau)))+N*Phi[s](tau) ) - 1 );

f[3] := diff(y(tau),tau) = -gamma*(l[cav]/l[g])*Phi[p](tau)/Xi;

f[1] := diff(Phi[p](tau),tau) = Phi[p](tau)*(Xi*y(tau)-ln(1/(T[0]^2))*y(tau)^(alpha*rho)-ln(1/R[p])-L[p]+(Phi[p](tau)+N*Phi[s](tau))/(Phi[p](tau)+exp(G*(Phi[p](tau)+N*Phi[s](tau)))*N*Phi[s](tau))-1)/Xi...

f[2] := diff(Phi[s](tau),tau) = Phi[s](tau)*(-ln(1/R[s])-L[s]-kappa*ln(1/(T[0]^2))*y(tau)^(alpha*rho)+(Phi[p](tau)+N*Phi[s](tau))/(Phi[p](tau)*exp(-G*(Phi[p](tau)+N*Phi[s](tau)))+N*Phi[s](tau))-1)/Xi

f[3] := diff(y(tau),tau) = -gamma*l[cav]*Phi[p](tau)/(l[g]*Xi)

The next procedures solve the obtained system numerically to obtain the dependences of the normalized photon densities at laser and Stokes wavelengths and the relative inversion vs. cavity roundtrip, n is the duration of the simulation in the cavity roundtrips):

>    ODE_plot1 := proc(T0,Rp,Rs,Lp,Ls,n)

gam := 1:# gamma parameter
rho := 1:
kappa := 0.38:
alpha := evalf( 5e-18/2.8e-20 ):#the ratio of the cross-sections
x := 29:#  x = l[cav]/l[g]
N := evalf(1033/1139):
G := subs( {g=4.8e-9,c=3e10,h=6.62e-34,nu_p=3e10/1.033e-4,sigma_g=2.8e-20},g*c*h*nu_p/(2*sigma_g) ):
Xi := ln(1/(T0^2))+ln(1/Rp)+Lp:

sys := [
D(Phip)(tau) = Phip(tau)*(Xi*y(tau)-ln(1/(T0^2))*y(tau)^(alpha*rho)-ln(1/Rp)-Lp+(Phip(tau)+N*Phis(tau))/(Phip(tau)+exp(G*(Phip(tau)+N*Phis(tau)))*N*Phis(tau))-1)/Xi, \

D(Phis)(tau) = Phis(tau)*(-ln(1/Rs)-Ls-kappa*ln(1/(T0^2))*y(tau)^(alpha*rho)+(Phip(tau)+N*Phis(tau))/(Phip(tau)*exp(-G*(Phip(tau)+N*Phis(tau)))+N*Phis(tau))-1)/Xi, \

D(y)(tau) = -gam*x*Phip(tau)/Xi]:

DEplot(sys,[Phip(tau),Phis(tau),y(tau)],tau=0..n,[[Phip(0)=1e-7,Phis(0)=1e-7,y(0)=1]],stepsize=0.1,scene=[tau,Phip(tau)],method=classical[abmoulton],axes=FRAME,linecolor=BLUE):
end:

ODE_plot2 := proc(T0,Rp,Rs,Lp,Ls,n)

gam := 1:
rho := 1:
kappa := 0.38:
alpha := evalf( 5e-18/2.8e-20 ):
x := 29:#  x = l[cav]/l[g]
N := evalf(1033/1139):
G := subs( {g=4.8e-9,c=3e10,h=6.62e-34,nu_p=3e10/1.033e-4,sigma_g=2.8e-20},g*c*h*nu_p/(2*sigma_g) ):
Xi := ln(1/(T0^2))+ln(1/Rp)+Lp:

sys := [
D(Phip)(tau) = Phip(tau)*(Xi*y(tau)-ln(1/(T0^2))*y(tau)^(alpha*rho)-ln(1/Rp)-Lp+(Phip(tau)+N*Phis(tau))/(Phip(tau)+exp(G*(Phip(tau)+N*Phis(tau)))*N*Phis(tau))-1)/Xi, \

D(Phis)(tau) = Phis(tau)*(-ln(1/Rs)-Ls-kappa*ln(1/(T0^2))*y(tau)^(alpha*rho)+(Phip(tau)+N*Phis(tau))/(Phip(tau)*exp(-G*(Phip(tau)+N*Phis(tau)))+N*Phis(tau))-1)/Xi, \

D(y)(tau) = -gam*x*Phip(tau)/Xi]:

DEplot(sys,[Phip(tau),Phis(tau),y(tau)],tau=0..n,[[Phip(0)=1e-7,Phis(0)=1e-7,y(0)=1]],stepsize=0.1,scene=[tau,Phis(tau)],method=classical[abmoulton],axes=FRAME,linecolor=RED):
end:

ODE_plot3 := proc(T0,Rp,Rs,Lp,Ls,n)

gam := 1:
rho := 1:
kappa := 0.38:
alpha := evalf( 5e-18/2.8e-20 ):
x := 29:#  x = l[cav]/l[g]
N := evalf(1033/1139):
G := subs( {g=4.8e-9,c=3e10,h=6.62e-34,nu_p=3e10/1.033e-4,sigma_g=2.8e-20},g*c*h*nu_p/(2*sigma_g) ):
Xi := ln(1/(T0^2))+ln(1/Rp)+Lp:

sys := [
D(Phip)(tau) = Phip(tau)*(Xi*y(tau)-ln(1/(T0^2))*y(tau)^(alpha*rho)-ln(1/Rp)-Lp+(Phip(tau)+N*Phis(tau))/(Phip(tau)+exp(G*(Phip(tau)+N*Phis(tau)))*N*Phis(tau))-1)/Xi, \

D(Phis)(tau) = Phis(tau)*(-ln(1/Rs)-Ls-kappa*ln(1/(T0^2))*y(tau)^(alpha*rho)+(Phip(tau)+N*Phis(tau))/(Phip(tau)*exp(-G*(Phip(tau)+N*Phis(tau)))+N*Phis(tau))-1)/Xi, \

D(y)(tau) = -gam*x*Phip(tau)/Xi]:

DEplot(sys,[Phip(tau),Phis(tau),y(tau)],tau=0..n,[[Phip(0)=1e-7,Phis(0)=1e-7,y(0)=1]],stepsize=0.1,scene=[tau,y(tau)],method=classical[abmoulton],axes=FRAME,linecolor=BLACK):
end:

Warning, `gam` is implicitly declared local to procedure `ODE_plot1`

Warning, `rho` is implicitly declared local to procedure `ODE_plot1`

Warning, `kappa` is implicitly declared local to procedure `ODE_plot1`

Warning, `alpha` is implicitly declared local to procedure `ODE_plot1`

Warning, `x` is implicitly declared local to procedure `ODE_plot1`

Warning, `N` is implicitly declared local to procedure `ODE_plot1`

Warning, `G` is implicitly declared local to procedure `ODE_plot1`

Warning, `Xi` is implicitly declared local to procedure `ODE_plot1`

Warning, `sys` is implicitly declared local to procedure `ODE_plot1`

Warning, `gam` is implicitly declared local to procedure `ODE_plot2`

Warning, `rho` is implicitly declared local to procedure `ODE_plot2`

Warning, `kappa` is implicitly declared local to procedure `ODE_plot2`

Warning, `alpha` is implicitly declared local to procedure `ODE_plot2`

Warning, `x` is implicitly declared local to procedure `ODE_plot2`

Warning, `N` is implicitly declared local to procedure `ODE_plot2`

Warning, `G` is implicitly declared local to procedure `ODE_plot2`

Warning, `Xi` is implicitly declared local to procedure `ODE_plot2`

Warning, `sys` is implicitly declared local to procedure `ODE_plot2`

Warning, `gam` is implicitly declared local to procedure `ODE_plot3`

Warning, `rho` is implicitly declared local to procedure `ODE_plot3`

Warning, `kappa` is implicitly declared local to procedure `ODE_plot3`

Warning, `alpha` is implicitly declared local to procedure `ODE_plot3`

Warning, `x` is implicitly declared local to procedure `ODE_plot3`

Warning, `N` is implicitly declared local to procedure `ODE_plot3`

Warning, `G` is implicitly declared local to procedure `ODE_plot3`

Warning, `Xi` is implicitly declared local to procedure `ODE_plot3`

Warning, `sys` is implicitly declared local to procedure `ODE_plot3`

>    display(ODE_plot1(0.65,0.75,0.96,5e-2,5e-2,300),axes=boxed,title=`laser photon density`);
display(ODE_plot2(0.65,0.75,0.96,5e-2,5e-2,300),axes=boxed,title=`Stokes photon density`);
display(ODE_plot3(0.65,0.75,0.96,5e-2,5e-2,300),axes=boxed,title=`relative inversion`);

[Maple Plot]

[Maple Plot]

[Maple Plot]

So, we can obtain a quite efficient two-color pulsing in the nanosecond time domain without any additional wavelength conversion.

The nonstationary lasing in question produces the pulses with the durations, which are larger than the cavity period. The cavity length shortening, i. e. the use of the microchip lasers, decreases the pulse durations down to ten-hundred picoseconds. But there is a method allowing the fundamental pulse width reduction, viz. mode locking.

Part II. Conception of mode locking

The laser cavity is, in fact, interferometer, which supports the propagation of only defined light waves. Let consider a plane wave, which is reflected from a laser mirror. The initial wave is ( cc  is the complex conjugated term):

>    restart:
 with(plots):
  with(DEtools):
   AI := A0*exp(I*(omega*t+k*x))+cc;

Warning, the name changecoords has been redefined

AI := A0*exp((omega*t+k*x)*I)+cc

Then the reflected wave (normal incidence and full reflectivity are supposed) is:

>    AR := A0*exp(I*(omega*t-k*x+Pi))+cc;

AR := A0*exp((omega*t-k*x+Pi)*I)+cc

where Pi  is the phase shift due to reflection. An interference between incident and reflected waves results in

>    convert(AI+AR,trig):
  expand(%):
factor(%);

-2*A0*sin(omega*t)*sin(k*x)+2*I*A0*cos(omega*t)*sin(k*x)+2*cc

This is the so-called standing wave:

>    animate(sin(x)*sin(t), x=0..2*Pi,t=0..2*Pi, axes=boxed, title=`Standing wave`, color=red);

[Maple Plot]

Note, that a wave node lies on a surface (point x =0). The similar situation takes place in the laser resonator. But the laser resonator consists of two (or more) mirrors and the standing wave is formed due to reflection from the each mirror. So, the wave in the resonator is the standing wave with the nodes placed on the mirrors. Such waves are called as the longitudinal laser modes . The laser resonator can contain a lot of modes with the different frequencies (but its nodes have to lie on the mirrors!) and these modes can interfere.

Let suppose, that the longitudinal modes are numbered by the index m . In fact, we have M  harmonic oscillators with the phase and frequency differences dphi  and domega , correspondingly. Let the amplitude of modes is A0 .

>    mode := 1/2*A0*exp(I*(phi0+m*dphi)+I*(omega0+m*domega)*t)+cc; # amplitude of the mode numbered by index m

mode := 1/2*A0*exp((phi0+m*dphi)*I+(omega0+m*domega)*t*I)+cc

Here phi 0 and omega 0 are the phase and frequency of the central mode, respectively.

The interference between these modes produces the wave packet:

>    packet := sum(mode-cc,m=-(M-1)/2..(M-1)/2)+cc;# interference of longitudinal modes with constant phases

packet := 1/2*A0*exp(phi0*I)*exp(omega0*t*I)*exp((1/2*M+1/2)*dphi*I)*exp(t*(1/2*M+1/2)*domega*I)/(exp(dphi*I)*exp(domega*t*I)-1)-1/2*A0*exp(phi0*I)*exp(omega0*t*I)*exp((-1/2*M+1/2)*dphi*I)*exp(t*(-1/2*...
packet := 1/2*A0*exp(phi0*I)*exp(omega0*t*I)*exp((1/2*M+1/2)*dphi*I)*exp(t*(1/2*M+1/2)*domega*I)/(exp(dphi*I)*exp(domega*t*I)-1)-1/2*A0*exp(phi0*I)*exp(omega0*t*I)*exp((-1/2*M+1/2)*dphi*I)*exp(t*(-1/2*...

Now, we can extract the term describing the fast oscillation on the central ("carrier") frequency omega 0 from the previous expression. The obtained result is the packet's envelope (its slowly varying amplitude):

>    envelope := expand((packet-cc)/exp(I*(t*omega0+phi0)));# slowly varying envelope of the wave packet

envelope := 1/2*A0*exp(1/2*I*dphi*M)*exp(1/2*I*dphi)*exp(1/2*I*domega*t*M)*exp(1/2*I*domega*t)/(exp(dphi*I)*exp(domega*t*I)-1)-1/2*A0*exp(-1/2*I*dphi*M)*exp(1/2*I*dphi)*exp(-1/2*I*domega*t*M)*exp(1/2*I...
envelope := 1/2*A0*exp(1/2*I*dphi*M)*exp(1/2*I*dphi)*exp(1/2*I*domega*t*M)*exp(1/2*I*domega*t)/(exp(dphi*I)*exp(domega*t*I)-1)-1/2*A0*exp(-1/2*I*dphi*M)*exp(1/2*I*dphi)*exp(-1/2*I*domega*t*M)*exp(1/2*I...

It is obviously, that this expression can be converted into following form:

>    envelope := 1/2*A0*sinh(1/2*I*M*(dphi+t*domega))/sinh(1/2*I*(dphi+t*domega));

envelope := 1/2*A0*sin(1/2*M*(dphi+domega*t))/sin(1/2*dphi+1/2*domega*t)

The squared envelope's amplitude (i. e. a field intensity) is depicted in the next figure for the different M .

>    plot({subs({M=5,A0=1,dphi=0.1,domega=0.1},2*envelope^2),subs({M=20,A0=1,dphi=0.1,domega=0.1},2*envelope^2)},t=-80..80, axes=boxed, title=`result of modes interference`);

[Maple Plot]

One can see, that the interference of modes results in the generation of short pulses. The interval between pulses is equal to 2 Pi / domega .   The growth of  M  decreases the pulse duration 2 Pi /( M*domega )   and to increases the pulse intensity M^2 * A0^2 . The last is the consequence of the following relation:

>    (limit(sin(M/2*x)/sin(x/2),x=0)*A0)^2;# maximal field intensity

M^2*A0^2

In this example, the phase difference between neighboring modes is constant. Such mode locking  causes the generation of short and intense pulses. But in the reality, the laser modes are not locked, i. e. the modes are the oscillations with the independent and accidental phases. In this case:

>    M := 20:# 20 longitudinal modes
 A0 := 1:# constant dimensionless amplitude of mode
  domega := 0.1:# constant frequency different
   phi0 := 0:# phase of the central mode
  omega0 := 1:# dimensionless frequency of central mode
 mode := 0:
for m from -(M-1)/2 to (M-1)/2 do:
 die := rand(6):
  dphi := die():# accidental phase difference between modes
 mode := mode+A0*cos(phi0+m*dphi+(omega0+m*domega)*t):
od:
plot(mode,t=-80..80, axes=boxed, title=`result of modes interference`);

[Maple Plot]

Thus, the interference of the unlocked modes produces the irregular field beatings, i. e.  the noise spikes with a duration ~ 1/(M*domega) .

What are the methods for the mode locking? Firstly, let consider the simplest model of the harmonic oscillation in the presence of the periodical force.

>    diff_equation := diff(diff(y(t),t),t)+omega^2*y(t)=cos(delta*t+phi);# oscillations in the presence of periodical force (delta and phi are the frequency and phase of the force oscillation, respectively)
      dsolve({diff_equation, y(0)=1, D(y)(0)=0},y(t)):
            oscill1 := combine(%);

diff_equation := diff(y(t),`$`(t,2))+omega^2*y(t) = cos(delta*t+phi)

oscill1 := y(t) = (-delta*cos(-phi+omega*t)+delta*cos(phi+omega*t)+omega*cos(-phi+omega*t)+omega*cos(phi+omega*t)-2*cos(omega*t)*omega^3+2*omega*cos(omega*t)*delta^2-2*cos(delta*t+phi)*omega)/(-2*omega...

>    animate(subs({omega=1,delta=0.1},subs(oscill1,y(t))),t=0..100,phi=0..2*Pi,color=red,style=point, axes=boxed);

[Maple Plot]

We can see, that the external force causes the oscillations with the additional frequencies: omega + delta  and omega - delta . If delta  is equal to the intermode interval, the additional oscillation of mode plays a role of the resonance external force for the neighboring modes. Let consider such resonant oscillation in the presence of the resonant external force:

>    diff_equation := diff(diff(y(t),t),t)+omega^2*y(t)=cos(omega*t+phi);# resonant external force
      dsolve({diff_equation,y(0)=1,D(y)(0)=0},y(t)):
            oscill2 := combine(%);

diff_equation := diff(y(t),`$`(t,2))+omega^2*y(t) = cos(phi+omega*t)

oscill2 := y(t) = 1/4*(-cos(-phi+omega*t)+cos(phi+omega*t)+4*cos(omega*t)*omega^2+2*omega*t*sin(phi+omega*t))/(omega^2)

The term, which is proportional to t  ("secular" term), equalizes the phase of the oscillations to the phase of the external force. It is the simplest model of a so-called active mode locking . Here the role of the external force can be played by the external amplitude or phase modulator. Main condition for this modulator is the equality of the modulation frequency to the intermode interval that causes the resonant interaction between modes and, as consequence, the mode locking (part 3 ).

The different mechanism, a passive mode locking , is produced by the nonlinear interaction of modes with an optical medium. Such nonlinearity can be caused by saturable absorption, self-focusing etc. (see further parts of worksheet). Now we shall consider the simplest model of the passive mode locking. Let suppose, that there are two modes, which oscillate with different phases and frequencies in the cubic nonlinear medium:

>    omega := 1:
 delta := 0.1:
  sys := [diff(diff(y(t),t),t)+omega^2*y(t)=-(y(t)^3+z(t)^3),\
   diff(diff(z(t),t),t)+(omega+delta)^2*z(t)=-(y(t)^3+z(t)^3)];#two oscillating modes with nonlinear coupling
 DEplot3d(sys,[y(t),z(t)],t=0..100,[[y(0)=-1,z(0)=1,D(y)(0)=0,D(z)(0)=0]],stepsize=1,scene=[y(t),z(t),t],axes=boxed,linecolor=BLACK,orientation=[-60,70], title=`mode locking`);

sys := [diff(y(t),`$`(t,2))+y(t) = -y(t)^3-z(t)^3, diff(z(t),`$`(t,2))+1.21*z(t) = -y(t)^3-z(t)^3]

[Maple Plot]

We can see, that the initial oscillations with the different phases are locked due to nonlinear interaction that produces the synchronous oscillations.

As conclusion, we note that the mode locking is resulted from the interference between standing waves with constant and locked phases. Such interference forms a train of the ultrashort pulses. The mechanisms of the mode locking are the external modulation with frequency, which is equal to intermode frequency interval, or the nonlinear response of the optical medium. Later on we shall consider both methods. But firstly we have to obtain the more realistic equations describing the ultrashort pulse generation.

Part III. Basic model

The models describing the laser field evolution are based usually on the so-called semi-classical approximation. In the framework of this approximation the field obeys the classical Maxwell equation and the medium evolution has the quantum-mechanical character. Here we shall consider the wave equation without concretization of the medium evolution.

The Maxwell equation for the light wave can be written as:

>    restart:
 with(PDEtools,dchange):
maxwell_eq := diff(E(z,t),z,z)-diff(E(z,t),t,t)/c^2=4*Pi*diff(P(t),t,t)/c^2;

maxwell_eq := diff(E(z,t),`$`(z,2))-diff(E(z,t),`$`(t,2))/(c^2) = 4*Pi*diff(P(t),`$`(t,2))/(c^2)

where E(z,t)  is the field strength, P(t)  is the medium polarization, z  is the longitudinal coordinate, t  is the time, c  is the light velocity. The change of the variables   z --> z* , t - z/c --> t*  produces

>    macro(zs=`z*`,ts=`t*`):
tr := {z = zs, t = ts + zs/c};
maxwell_m := dchange(tr,maxwell_eq,[zs,ts],simplify);

tr := {z = `z*`, t = `t*`+`z*`/c}

maxwell_m := (diff(E(`z*`,`t*`,c),`$`(`z*`,2))*c-2*diff(E(`z*`,`t*`,c),`t*`,`z*`))/c = 4*Pi*diff(P(`z*`,`t*`,c),`$`(`t*`,2))/(c^2)

We does not take into account the effects connected with a wave propagation in thin medium layer, that allows to eliminate the second-order derivation on z* . Then

>    int(op(2,expand(lhs(maxwell_m))),ts)-int(rhs(maxwell_m),ts):#integration of both sides of wave equation
    numer(%):
         wave_1 := expand(%/(-2));

wave_1 := diff(E(`z*`,`t*`,c),`z*`)*c+2*Pi*diff(P(`z*`,`t*`,c),`t*`)

So, we reduced the order of wave equation. The inverse transformation of the coordinates leads to the so-called shortened wave equation:

>    tr := {zs = z, ts = t - z/c};
wave_2 := dchange(tr,wave_1,[z,t],simplify);

tr := {`z*` = z, `t*` = t-z/c}

wave_2 := diff(E(z,t,c),z)*c+diff(E(z,t,c),t)+2*Pi*diff(P(z,t,c),t)

Next step is the transition to the slowly-varying amplitude approximation. We shall consider field envelope rho (z,t) and polarization P(t), which are filled by the fast oscillation with frequency omega  ( k  is the wave number, N is the concentration of the atoms, d  is the medium length):

>    Theta=omega*t-k*z;# phase
E := rho(z,t)*cos(Theta);# field
P := N*d*(a(t)*cos(Theta)-b(t)*sin(Theta));# polarization (a and b are the quadrature components)

Theta = omega*t-k*z

E := rho(z,t)*cos(Theta)

P := N*d*(a(t)*cos(Theta)-b(t)*sin(Theta))

Then the wave equation can be transformed as:

>    Theta:=omega*t-k*z:
  diff(E,z)+diff(E,t)/c+2*Pi*diff(P,t)/c:
    combine(%,trig):
      collect(%,cos(Theta)):
    wave_3 := collect(%,sin(Theta)):
  eq_field := op(1,expand(coeff(wave_3,cos(Theta))))+op(3,expand(coeff(wave_3,cos(Theta))))=-op(2,expand(coeff(wave_3,cos(Theta))))-op(4,expand(coeff(wave_3,cos(Theta))));# field equation
disp_conditions := Int(coeff(wave_3,sin(Theta)),t)=0;# dispersion condition

eq_field := diff(rho(z,t),z)+diff(rho(z,t),t)/c = -2*Pi*N*d*diff(a(t),t)/c+2*Pi*N*d*b(t)*omega/c

disp_conditions := Int((rho(z,t)*k*c-2*Pi*N*d*diff(b(t),t)-rho(z,t)*omega-2*Pi*N*d*a(t)*omega)/c,t) = 0

The obtained result is the system of the shortened wave equation and the dispersion condition. The right-hand side of the field equation (material part) will be different for the different applications (see below).

Part IV. Active mode locking: harmonic oscillator

Amplitude modulation

We start our consideration with  a relatively simple technique named as active mode locking due to amplitude modulation. The modulator, which is governed by external signal and changes the intracavity loss periodically, plays the role of the external "force" (see part 1). Let consider the situation, when the modulation period is equal and the pulse duration is much less than the cavity period. If the modulation curve is close to cosine, then the master equation for the ultrashort pulse evolution can be written as [ D. Kuizenga, A. Siegman,"FM and AM mode locking of homogeneous laser", IEEE J. Quant. Electr., 6 , 694 (1970) ]:

diff(rho(z,t),z)  = g rho(z,t)  + t[f]^2 diff(rho(z,t),`$`(t,2)) -M*t^2 rho(z,t) ,

where g  is the net-gain in the laser accounting for the saturated gain alpha  and linear loss l  (including output loss), t[f]   is the inverse bandwidth of the spectral filter, M  is the characteristic of the modulation strength taking into account curvature of the modulation curve at the point of maximal loss.

Let try to solve this equation in the case of the steady-state propagation of ultrashort pulse (when diff(rho(z,t),z) =0) and in the absence of detuning of modulation period from cavity period. If the time is normalized to t[f]  , then the obtained equation is a well-known equation of harmonic oscillator:

>    restart:
 with(plots):
  with('linalg'):
   ode[1] := diff(rho(t),`$`(t,2)) + g*rho(t) - M*t^2*rho(t);

Warning, the name changecoords has been redefined

Warning, the protected names norm and trace have been redefined and unprotected

ode[1] := diff(rho(t),`$`(t,2))+g*rho(t)-M*t^2*rho(t)

>    sol := dsolve(ode[1]=0,rho(t));

sol := rho(t) = _C1*WhittakerM(1/4*g/(sqrt(M)),1/4,sqrt(M)*t^2)/(sqrt(t))+_C2*WhittakerW(1/4*g/(sqrt(M)),1/4,sqrt(M)*t^2)/(sqrt(t))

The next step is suggested by the asymptotic behavior of the prospective solution: limit(rho(t),t = infinity)  = 0. But previously it is convenient to transit from Whittaker  functions to hypergeometric  and Kummer  functions:

WhittakerM( mu , nu ,z)= e^((-x)/2) x^(1/2+nu)  hypergeom( 1/2+nu-mu , 1+2 nu , x ),

 WhittakerW( mu , nu ,z)= e^((-x)/2) x^(1/2+nu)  KummerU( 1/2+nu-mu , 1+2 nu , x ).

As result, we have ( mu = g/(4*sqrt(M)) , nu = 1/4 , x = sqrt(M)*t^2 ):

rho (t)= C[1] exp(-sqrt(M)*t^2/2)   t   sqrt(sqrt(M))  hypergeom( 3/4-g/(4*sqrt(M)) , 3/2 , sqrt(M)*t^2 ) +

C[2] exp(-sqrt(M)*t^2/2)   t   sqrt(sqrt(M))  KummerU( 3/4-g/(4*sqrt(M)) , 3/2 , sqrt(M)*t^2 )=

C[1] exp(-sqrt(M)*t^2/2)   t   sqrt(sqrt(M))  hypergeom(( 1/4-g/(4*sqrt(M)) )+ 1/2 , 3/2 , sqrt(M)*t^2 ) +

C[2] exp(-sqrt(M)*t^2/2)    sqrt(sqrt(M))  hypergeom( 1/4-g/(4*sqrt(M)) , 1/2 , sqrt(M)*t^2 ).

Now, the asymptotic condition limit(rho(t),t = infinity)  = 0, which is similar to condition for quantum states in harmonic oscillator, results in (see, for example,  S. Flugge, Practical Quantum Mechanics I, Springer-Verlag (1971) )

rho[1] (t) =  C HermiteH[2*n] ( t sqrt(sqrt(M)) ) exp(-t^2*sqrt(M)/2)     for n= - ( 1/4-g/(4*sqrt(M)) ) && n is integer,

rho[2] (t) =  C HermiteH[2*n+1] ( t sqrt(sqrt(M)) ) exp(-t^2*sqrt(M)/2)     for n= - ( 3/4-g/(4*sqrt(M)) ) && n is integer,

where HermiteH[2*n]  and HermiteH[2*n+1]  are Hermite  polynomials. Value of constant C  can be obtained from the energy balance condition, which results from the equation of gain saturation:

alpha = alpha[0]/(1+chi*int(rho(t)^2,t = -infinity .. infinity))  .

Here chi  is the inverse flux of the gain saturation energy, alpha[0]  is the gain for small signal defined by gain medium properties and pump intensity (note, that g  = alpha-l ).

Now let investigate the parameters of the steady-state solution of the master equation.

With that end in view, we have to search the generation field energy:

>    C^2*int( HermiteH(0,t*surd(M, 4))^2 * exp( -t^2*sqrt(M) ), t=-infinity..infinity ); #energy of the first solution ("ground state"), where alpha=l+sqrt(M) (see above)

C^2*sqrt(Pi)/(M^(1/4))

The use of normalization of intensity rho^2  to (chi*t[f])^(-1)

and energy balance condition (see above) results in

>    eq := l+sqrt(M) - alpha[0]/(1+C^2*sqrt(Pi)/surd(M, 4)) = 0:
 sol := solve(eq, C^2);# pulse peak intensity

sol := -surd(M,4)*(l+sqrt(M)-alpha[0])/(sqrt(Pi)*(l+sqrt(M)))

Hence the ultrashort pulse obtained as result of active mode locking can be represented as

>    pulse := sol*HermiteH(0,t*surd(M, 4))^2 * exp( -t^2*sqrt(M) );# this is first solution of master equation, which represents a Gaussian pulse profile
 plot( subs({l=0.1,M=0.05,alpha[0]=1.2},pulse),
t=-6..6, axes=BOXED, title=`field intensity vs time` );

pulse := -surd(M,4)*(l+sqrt(M)-alpha[0])*exp(-sqrt(M)*t^2)/(sqrt(Pi)*(l+sqrt(M)))

[Maple Plot]

Now we calculate the pulse duration measured on half-level of maximal pulse intensity:

>    eq := exp( -sqrt(M)*t^2 ) = 1/2:
 sol := solve(eq, t):
  pulse_width := simplify( sol[1] - sol[2] );

pulse_width := 2*sqrt(M^(3/2)*ln(2))/M

>    plot( pulse_width,M=0.3..0.01, axes=BOXED, title=`pulse width vs M` );

[Maple Plot]

One can see, that the increase of modulation parameter decreases the pulse width, but this decrease is slow (~1/ sqrt(sqrt(M)) ).

Next step is the taking into account the detuning of cavity and modulation periods. The corresponding normalized parameter delta  can be introduced in the following form (see corresponding Doppler transformation: t-->t - z delta  and, as consequence, diff(%?,z) -->- delta diff(%?,t)  for steady-state pulse, here delta  is, in fact, inverse relative velocity with dimension [time/cavity transit], i. e. time delay on the cavity round-trip):

>    ode[2] := diff(rho(t),`$`(t,2)) + delta*diff(rho(t),t) + g*rho(t) - M*t^2*rho(t);

ode[2] := diff(rho(t),`$`(t,2))+delta*diff(rho(t),t)+g*rho(t)-M*t^2*rho(t)

>    sol := dsolve(ode[2]=0,rho(t));

sol := rho(t) = _C1*WhittakerW(1/16*(4*g-delta^2)/(sqrt(M)),1/4,sqrt(M)*t^2)*exp(-1/2*delta*t)/(sqrt(t))+_C2*WhittakerM(1/16*(4*g-delta^2)/(sqrt(M)),1/4,sqrt(M)*t^2)*exp(-1/2*delta*t)/(sqrt(t))

The comparison with above obtained result leads to

rho[1] (t) =  C HermiteH[2*n] ( t sqrt(sqrt(M)) ) exp(-t*(delta+sqrt(M)*t)/2)     for n= - ( 1/4+(delta^2-4*g)/(16*sqrt(M)) ) && n is integer,

rho[2] (t) =  C HermiteH[2*n+1] ( t sqrt(sqrt(M)) ) exp(-t*(delta+sqrt(M)*t)/2)     for n= - ( 3/4+(delta^2-4*g)/(16*sqrt(M)) ) && n is integer,

and we can repeat our previous analysis

>    C^2*int( HermiteH(0,t*surd(M, 4))^2 * exp( -t*(delta+sqrt(M)*t) ), t=-infinity..infinity ); # energy of the first solution ("ground state"), where alpha=l+sqrt(M)+delta^2/4

C^2*exp(1/4*delta^2/(sqrt(M)))*sqrt(Pi)/(M^(1/4))

>    eq := l+sqrt(M)+delta^2/4 - alpha[0]/(1+%) = 0:# energy balance condition
 sol_0 := solve(eq, C^2);# pulse peak intensity

sol_0 := -M^(1/4)*(4*l+4*sqrt(M)+delta^2-4*alpha[0])/(exp(1/4*delta^2/(sqrt(M)))*sqrt(Pi)*(4*l+4*sqrt(M)+delta^2))

Note, that there is the maximal abs(delta)  permitting the "ground state" ultrashort pulse generation:

>    -4*l-4*sqrt(M)-delta^2+4*alpha[0] > 0;
 solve(-4*l-4*sqrt(M)-delta^2+4*alpha[0]=0, delta);

0 < -4*l-4*sqrt(M)-delta^2+4*alpha[0]

2*sqrt(-l-sqrt(M)+alpha[0]), -2*sqrt(-l-sqrt(M)+alpha[0])

We see, that the upper permitted level of detuning parameter is increased due to pump growth (rise of alpha[0] ) and is decreased by M  growth.

It is of interest, that the growth of abs(delta)  does not leads to generation of the "excite state" pulses because of the corresponding limitation for these solutions is more strict:

>    En := C^2*int( expand( HermiteH(1,t*surd(M, 4) ))^2 * exp( -t*(delta+sqrt(M)*t) ), t=-infinity..infinity ):# energy of the second solution ("excite state")
 eq1 := 0 = - (3/4+(delta^2-4*(alpha-l))/(16*sqrt(M))):
  solve(%,alpha):
   eq := % - alpha[0]/(1+En) = 0:# energy balance condition
    solve(eq, C^2);# "excite state" pulse peak intensity
     -12*sqrt(M)-4*l-delta^2+4*alpha[0] > 0;# condition of generation

-M^(5/4)*(12*sqrt(M)+4*l+delta^2-4*alpha[0])/(exp(1/4*delta^2/(sqrt(M)))*surd(M,4)^2*sqrt(Pi)*(14*sqrt(M)*delta^2+24*M+delta^4+4*l*delta^2+8*l*sqrt(M)))

0 < -12*sqrt(M)-4*l-delta^2+4*alpha[0]

The dependence of pulse width on delta  has following form:

>    eq := exp( -t*(delta+sqrt(M)*t) ) = 1/2:
 sol := solve(eq, t):
  pulse_width := simplify( sol[1] - sol[2] );
   plot( subs(M=0.05,pulse_width),delta=-5..5, axes=BOXED, title=`pulse width vs delta` );

pulse_width := sqrt(M*(delta^2+4*sqrt(M)*ln(2)))/M

[Maple Plot]

We can see almost linear and symmetric rise of pulse width due to detuning increase. This is an important characteristic of active mode-locked lasers. But in practice (see below), the dependence of the pulse parameters on detuning has more complicated character.

The dependence of the pulse maximum location on detuning parameter can be obtained from the solution for pulse envelope's maximum: diff(exp(-t*(delta+sqrt(M)*t)/2),t)  = 0. Hence, the pulse maximum location is:

>    diff(exp(-t*(delta+sqrt(M)*t)/2), t) = 0:
 solve(%, t);

-1/2*delta/(sqrt(M))

>    plot( subs(M=0.05,%),delta=-5..5, axes=BOXED, title=`pulse shift vs delta` );

[Maple Plot]

The increase (decrease) of the pulse round-trip frequency ( delta <0 and delta >0, respectively) increases positive (negative) time shift of the pulse maximum relatively modulation curve extremum.

Phase modulation

The external modulation can change not only field amplitude, but its phase. In fact, this regime (phase active modulation) causes the Doppler frequency shift of all field components with the exception of those, which are located in the vicinity of extremum of modulation curve. Hence, there exists the steady-state generation only for field located in vicinity of points, where the phase is stationary. Steady-state regime is described by equation

>    ode[3] := diff(rho(t),`$`(t,2)) + g*rho(t) + I*phi*rho(t) + I*M*t^2*rho(t);

ode[3] := diff(rho(t),`$`(t,2))+g*rho(t)+phi*rho(t)*I+M*t^2*rho(t)*I

where phi  is the phase delay on the cavity round-trip.

This equation looks like previous one, but has complex character. This suggests to search its partial solution in the form rho ( t ) = C*exp((a+I*b)*t^2)  :

>    expand( subs(rho(t)=C*exp((a+I*b)*t^2), ode[3]) ):
 expand(%/C/exp(t^2*a)/exp(I*t^2*b)):
  eq1 := collect (coeff(%,I), t^2 ):
   eq2 := collect( coeff(%%,I,0), t^2 ):
    eq3 := coeff(eq1, t^2);
     eq4 := coeff(eq1, t,0);
      eq5 := coeff(eq2, t^2);
       eq6 := coeff(eq2, t,0);
        sol1 := solve(eq6=0, a);# solution for a
       sol2 := solve(subs(a=sol1,eq3=0), b);# solution for b
      sol3 := solve(subs(b=sol2,eq4)=0, phi);# solution for phi
# but NB that there is eq5 defining, in fact, g:
     solve( subs({a=sol1, b=sol2},eq5)=0, g);# solution for g

eq3 := 8*a*b+M

eq4 := 2*b+phi

eq5 := 4*a^2-4*b^2

eq6 := 2*a+g

sol1 := -1/2*g

sol2 := 1/4*M/g

sol3 := -1/2*M/g

1/2*sqrt(-2*M), -1/2*sqrt(-2*M), 1/2*sqrt(2)*sqrt(M), -1/2*sqrt(2)*sqrt(M)

So, we have rho ( t ) = C*exp((-sqrt(M/2)/2+I*sqrt(M/2)/2)*t^2)    and phi  = -sqrt(M/2)  , g= sqrt(M/2) . The time-dependent parabolic phase of ultrashort pulse is called chirp and is caused by phase modulation. Pulse width for this pulse is:    

>    exp(-sqrt(M/2)*t^2) = 1/2:
 sol := solve(%, t):
  pulse_width := simplify( sol[1] - sol[2] );

pulse_width := 2*sqrt(M^(3/2)*sqrt(2)*ln(2))/M

that is 2 sqrt(ln(2)*sqrt(2/M))  . As one can see, that result is equal to one for amplitude modulation. The main difference is the appearance of the chirp.

Let take into account the modulation detuning. In this case we may to suppose the modification of the steady-state solution:

>    ode[4] := diff(rho(t),`$`(t,2)) + g*rho(t) + delta*diff(rho(t),t) + I*phi*rho(t) + I*M*t^2*rho(t);
    expand( subs(rho(t)=C*exp((a+I*b)*t^2 + (c+I*d)*t), ode[4]) ):# c is the shift of the pulse profile from extremum of the modulation curve, d is the frequency shift of the pulse from the center of the gain band
    expand(%/C/exp(t^2*a)/exp(I*t^2*b)/exp(t*c)/exp(I*t*d)):
eq1 := collect (coeff(%,I), t ):
 eq2 := collect( coeff(%%,I,0), t ):
  eq3 := coeff(eq1, t^2):
   eq4 := coeff(eq1, t):
    eq5 := coeff(eq1, t, 0):
     eq6 := coeff(eq2, t^2);
      eq7 := coeff(eq2, t):
       eq8 := coeff(eq2, t, 0):
allvalues( solve(subs(b=-a,{eq3=0,eq4=0,eq5=0,eq7=0,eq8=0}),{a,c,d,g,phi}) );

ode[4] := diff(rho(t),`$`(t,2))+g*rho(t)+delta*diff(rho(t),t)+phi*rho(t)*I+M*t^2*rho(t)*I

eq6 := 4*a^2-4*b^2

{phi = 1/2*sqrt(2)*sqrt(M), a = 1/4*sqrt(2)*sqrt(M), g = -1/2*sqrt(2)*sqrt(M)+1/4*delta^2, c = -1/2*delta, d = 0}, {g = 1/2*sqrt(2)*sqrt(M)+1/4*delta^2, a = -1/4*sqrt(2)*sqrt(M), phi = -1/2*sqrt(2)*sqr...
{phi = 1/2*sqrt(2)*sqrt(M), a = 1/4*sqrt(2)*sqrt(M), g = -1/2*sqrt(2)*sqrt(M)+1/4*delta^2, c = -1/2*delta, d = 0}, {g = 1/2*sqrt(2)*sqrt(M)+1/4*delta^2, a = -1/4*sqrt(2)*sqrt(M), phi = -1/2*sqrt(2)*sqr...

We see, that there is not frequency shift of the pulse ( d= 0), but, as it was for amplitude modulation, the time delay appears ( c = -delta/2 ) that changes the pulse duration as result of modulation detuning. The rise of the detuning prevents from the pulse generation due to saturated net-gain coefficient increase ( g = sqrt(M/2)+delta^2/4 ). The pulse parameters behavior coincides with one for amplitude modulation.

Ultrashort pulse stability

Now we shall investigate the ultrashort pulse stability against low perturbation zeta ( t ). The substitution of the perturbed steady-state solution in dynamical equation with subsequent linearization on zeta ( t ) results in

diff(zeta(z,t),z)  = alpha zeta(z,t)  + alpha[p] rho(t)   - l zeta(z,t)  + diff(zeta(z,t),`$`(t,2))  - M*t^2 zeta(z,t) ,

where alpha[p]  is the perturbed saturated gain, which is obtained from the assumption about small contribution of perturbation to gain saturation process:   

>    alpha[p] = op(2,convert( series( alpha[0]/(1 + A + B), B=0,2), polynom));

alpha[p] = -alpha[0]*B/((1+A)^2)

Here A= int(a^2,t = -infinity .. infinity) , B= int(a*zeta,t = -infinity .. infinity)  and we neglected the high-order terms relatively perturbation amplitude. Note, that this is negative quantity.

Let the dependence of perturbation on z  has exponential form with increment lambda . Then

>    zeta(z,t) := upsilon(t)*exp(lambda*z):# perturbation
 ode[4] := expand( diff(zeta(z,t),z)/exp(lambda*z) ) =
 expand( (alpha*zeta(z,t) + alpha[p]*rho(t) - l*zeta(z,t) + diff(zeta(z,t),`$`(t,2)) - M*t^2*zeta(z,t))/exp(lambda*z) );

ode[4] := upsilon(t)*lambda = alpha*upsilon(t)+alpha[p]*rho(t)/exp(lambda*z)-l*upsilon(t)+diff(upsilon(t),`$`(t,2))-M*t^2*upsilon(t)

Now we introduce alpha[p] * where B*= int(a*upsilon,t = -infinity .. infinity) , that allows to eliminate the exponent from right-hand side of ode[4]  (we shall eliminate the asterix below).  

This is equation for eigenvalues lambda  and eigenfunctions upsilon(t)  of the perturbed laser operator. Stable generation of the ultrashort pulse corresponds to decaying of perturbations, i.e. lambda <0. For Gaussian pulse:

>    ode[4] := upsilon(t)*lambda = subs(rho(t)=sqrt(surd(M,4)*(alpha[0]-l-sqrt(M))/(sqrt(Pi)*(l+sqrt(M))))*exp(-t^2*sqrt(M)/2),
alpha*upsilon(t)+alpha[p]*rho(t)-l*upsilon(t)+diff(upsilon(t),`$`(t,2))-M*t^2*upsilon(t));

sol := dsolve( ode[4],upsilon(t) );

ode[4] := upsilon(t)*lambda = alpha*upsilon(t)+alpha[p]*sqrt(surd(M,4)*(-l-sqrt(M)+alpha[0])/(sqrt(Pi)*(l+sqrt(M))))*exp(-1/2*sqrt(M)*t^2)-l*upsilon(t)+diff(upsilon(t),`$`(t,2))-M*t^2*upsilon(t)

sol := upsilon(t) = alpha[p]*sqrt(-surd(M,4)*(l+sqrt(M)-alpha[0])/(l+sqrt(M)))*exp(-1/2*sqrt(M)*t^2)/(Pi^(1/4)*(lambda-alpha+l+sqrt(M)))+_C1*WhittakerW(-1/4*(lambda-alpha+l)/(sqrt(M)),1/4,sqrt(M)*t^2)/...
sol := upsilon(t) = alpha[p]*sqrt(-surd(M,4)*(l+sqrt(M)-alpha[0])/(l+sqrt(M)))*exp(-1/2*sqrt(M)*t^2)/(Pi^(1/4)*(lambda-alpha+l+sqrt(M)))+_C1*WhittakerW(-1/4*(lambda-alpha+l)/(sqrt(M)),1/4,sqrt(M)*t^2)/...

As result (see above), we have

upsilon (t) =   -alpha[p]*sqrt(sqrt(sqrt(M))*(alpha[0]-l-sqrt(M))/(l+sqrt(M)))*exp(-sqrt(M)*t^2/2)/((alpha-l-sqrt(M)-lambda)*Pi^(1/4))  + C HermiteH[2*n] ( t sqrt(sqrt(M)) ) exp(-t^2*sqrt(M)/2)     for n= - ( 1/4-(alpha-lambda-l)/(4*sqrt(M)) ) && n is integer,

upsilon (t) =   -alpha[p]*sqrt(sqrt(sqrt(M))*(alpha[0]-l-sqrt(M))/(l+sqrt(M)))*exp(-sqrt(M)*t^2/2)/((alpha-l-sqrt(M)-lambda)*Pi^(1/4))  + C HermiteH[2*n+1] ( t sqrt(sqrt(M)) ) exp(-t^2*sqrt(M)/2)     for n= - ( 3/4-(alpha-lambda-l)/(4*sqrt(M)) ) && n is integer,

>    eq1 := n = - (1/4-(alpha-lambda-l)/(4*sqrt(M))):
 eq2 := n = - (3/4-(alpha-lambda-l)/(4*sqrt(M))):
  En := subs( C^2=-surd(M,4)*(l+sqrt(M)-alpha[0])/(sqrt(Pi)*(l+sqrt(M))),
 C^2*sqrt(Pi)/(M^(1/4)) ):# ultrashort pulse energy (see above)
   lambda[1,n] = solve(eq1, lambda);# increment
    lambda[2,n] = solve(eq2, lambda);# increment

lambda[1,n] = -4*n*sqrt(M)-sqrt(M)+alpha-l

lambda[2,n] = -4*n*sqrt(M)-3*sqrt(M)+alpha-l

The glance on the solution is evidence of absence of solution corresponding to lambda[1,0] . For others modes we take into account, that alpha = l + sqrt(M) . As result, all perturbation modes are unstable because of

   lambda[1,n] = -4*n*sqrt(M)  < 0 ( n= 1, 2, ...),

lambda[2,n] = -4*n*sqrt(M)-2*sqrt(M)  < 0 ( n= 0, 1, ...).

It should be noted, that for the amplified pulse

lambda[1,n] = -4*n*sqrt(M)-sqrt(M)+alpha-l ,

lambda[2,n] = -4*n*sqrt(M)-3*sqrt(M)+alpha-l ,

Here we see the decrease of increment as result of n  rise. Therefore, only "ground state"  with lambda[1,0]  will be amplified predominantly. This fact provides for Gaussian pulse generation (see, F.X. Kartner, D.M. Zumbuhl, and N. Matuschek, "Turbulence in Mode-Locked Lasers", Phys. Rev. Lett. 82 , 4428 (1999)).

In the presence of detuning we have:

>    eq1 := n= - (1/4+(delta^2-4*(alpha-lambda-l))/(16*sqrt(M))):
 eq2 := n= - (3/4+(delta^2-4*(alpha-lambda-l))/(16*sqrt(M))):
  lambda[1,n] = simplify( solve(eq1, lambda) );
   lambda[2,n] = simplify( solve(eq2, lambda) );

lambda[1,n] = -4*n*sqrt(M)-sqrt(M)-1/4*delta^2+alpha-l

lambda[2,n] = -4*n*sqrt(M)-3*sqrt(M)-1/4*delta^2+alpha-l

It is surprisingly, but, as it was above, our linear analysis predicts the pulse stability regardless of detuning delta  (because of alpha = l + sqrt(M)+delta^2/4 ). But for the pulse the detuning growth decreases the increment that does not favor the single pulse generation.

Nonlinear processes: self-phase modulation and dynamical gain saturation

Among above considered effects only gain saturation by full pulse energy can be considered as nonlinear process, which, however, does not affect on the pulse envelope, but governs its energy. The time-dependent nonlinear effects, which can transform pulse profile, are self-phase modulation (SPM) and dynamical gain saturation. First one is the dependence of the field phase on its intensity and can play essential role in solid-state lasers [ V.L. Kalashnikov, I.G. Poloyko, V.P. Mikhailov, "Phase modulation of radiation of solid-state lasers in the presence of Kerr optical nonlinearity", Optics and Spectriscopy, 84 , 104 (1998) ]. Second effect is caused by the change of the gain along pulse profile and is essential in lasers with large gain cross-sections and comparatively narrow gain band [ V.L. Kalashnikov, I.G. Poloyko, V.P. Mikhailov, "Generation of ultrashort pulses in lasers with external frequency modulation", Quantum Electronics, 28 , 264 (1998) ].

At first, let analyze the presence of SPM, which can be considered as perturbation of our master equation describing active phase modulation:

>    ode[5] := diff(rho(t),`$`(t,2)) + g*rho(t) + I*phi*rho(t) + I*M*t^2*rho(t) - I*beta*C^2*exp(2*a*t^2)*rho(t);# phase perturbation in the form -I*beta*C^2*abs(rho(t))^2*rho(t), rho(t) has unperturbed profile

ode[5] := diff(rho(t),`$`(t,2))+g*rho(t)+phi*rho(t)*I+M*t^2*rho(t)*I-I*beta*C^2*exp(2*t^2*a)*rho(t)

>    expand( subs(rho(t)=C*exp((a+I*b)*t^2), ode[5])/exp(a*t^2)/exp(I*t^2*b)/C ):
 series(%,t=0,3):# approximate solution as result of expansion
  convert(%, polynom):# now we shall collect the coefficients of t and t^2 for real and imaginary parts
   eq1 := coeff(%,I):
    eq2 := coeff(%%,I,0):
     eq3 := coeff(eq1,t^2);
      eq4 := coeff(eq1,t,0);
       eq5 := coeff(eq2,t^2);
        eq6 := coeff(eq2,t,0);
       sol1 := solve(eq6=0, a);# solution for a
      sol2 := solve(subs(a=sol1,eq3=0), b);# solution for b
     sol3 := solve(subs(b=sol2,eq4)=0, phi);# solution for phi
# but NB that there is eq5 defining, in fact, g:
    solve( subs({a=sol1, b=sol2},eq5)=0, g);# solution for g

eq3 := 8*a*b+M-2*a*C^2*beta

eq4 := phi+2*b-C^2*beta

eq5 := 4*a^2-4*b^2

eq6 := 2*a+g

sol1 := -1/2*g

sol2 := 1/4*(M+g*C^2*beta)/g

sol3 := 1/2*(-M+g*C^2*beta)/g

1/4*C^2*beta+1/4*sqrt(C^4*beta^2+8*M), 1/4*C^2*beta-1/4*sqrt(C^4*beta^2+8*M), -1/4*C^2*beta+1/4*sqrt(C^4*beta^2-8*M), -1/4*C^2*beta-1/4*sqrt(C^4*beta^2-8*M)

Hence we have solution with perturbed parameters:

rho ( t ) = C*exp((-(beta*C^2+sqrt(beta^2*C^4+8*M))/4+I*(beta*C^2+sqrt(beta^2*C^4+8*M))/4)*t^2)    and   g= 1*beta*C^2/4+1*sqrt(beta^2*C^4+8*M)/4  .

As one can see, this solution has enlarged chirp and reduced pulse duration due to SPM.

Now we shall investigate the influence of dynamical gain saturation on the pulse characteristics in the case of active mode locking due to amplitude modulation. Let the contribution of the dynamical gain saturation can be considered as perturbation for Gaussian pulse (see above). The instant energy flux of such pulse is:

>    int(sol_0*exp(-t*(delta+sqrt(M)*t)/2),t):
 Energy := simplify( coeff( %, erf(1/2*sqrt(2)*M^(1/4)*t+1/4*delta*sqrt(2)/(M^(1/4))))*(1+erf(1/2*sqrt(2)*M^(1/4)*t+1/4*delta*sqrt(2)/(M^(1/4))) ) );

Energy := -1/2*sqrt(2)*(4*l+4*sqrt(M)+delta^2-4*alpha[0])*exp(-1/8*delta^2/(sqrt(M)))*(1+erf(1/4*sqrt(2)*(delta+2*sqrt(M)*t)/(M^(1/4))))/(4*l+4*sqrt(M)+delta^2)

The approximation of the small contribution of the gain saturation allows the expansion of energy into series on t  up to second order:

>    series(Energy,t=0,2):
 convert(%, polynom):
  simplify(%);

-1/2*(4*l+4*sqrt(M)+delta^2-4*alpha[0])*exp(-1/8*delta^2/(sqrt(M)))*(sqrt(2)*sqrt(Pi)+sqrt(2)*sqrt(Pi)*erf(1/4*delta*sqrt(2)/(M^(1/4)))+2*exp(-1/8*delta^2/(sqrt(M)))*M^(1/4)*t)/((4*l+4*sqrt(M)+delta^2)...

Hence we have the modified gain coefficient alpha ( 1-I[0] t ), where alpha  is the gain coefficient at pulse peak, I[0]  is the pulse intensity for unperturbed solution. Note, that the additional term in brackets is resulted from the shift of pulse maximum.

Then the master equation for perturbed solution (in our approximation!) is

>    ode[6] := diff(rho(t),`$`(t,2)) + g*rho(t) + delta*diff(rho(t),t) - (M*t^2+epsilon*t)*rho(t);# here epsilon is alpha*I[0]

ode[6] := diff(rho(t),`$`(t,2))+g*rho(t)+delta*diff(rho(t),t)-(M*t^2+epsilon*t)*rho(t)

>    dsolve(ode[6]=0, rho(t));

rho(t) = _C1*WhittakerW(1/16*(4*M*g-M*delta^2+epsilon^2)/(M^(3/2)),1/4,1/4*(2*M*t+epsilon)^2/(M^(3/2)))*exp(-1/2*delta*t)/(sqrt((2*M*t+epsilon)/(M^(3/4))))+_C2*WhittakerM(1/16*(4*M*g-M*delta^2+epsilon^...
rho(t) = _C1*WhittakerW(1/16*(4*M*g-M*delta^2+epsilon^2)/(M^(3/2)),1/4,1/4*(2*M*t+epsilon)^2/(M^(3/2)))*exp(-1/2*delta*t)/(sqrt((2*M*t+epsilon)/(M^(3/4))))+_C2*WhittakerM(1/16*(4*M*g-M*delta^2+epsilon^...

The comparison with above obtained result gives

rho[1] (t) =  C HermiteH[2*n] ( t sqrt(sqrt(M))+epsilon/(2*sqrt(M*sqrt(M))) ) exp(-(2*M*t+epsilon)^2/(8*M*sqrt(M))-delta*t/2)     for n= - ( 1/4-(4*g*M+epsilon^2-M*delta^2)/(16*M*sqrt(M)) ) && n is integer,

rho[2] (t) =  C HermiteH[2*n+1] ( t sqrt(sqrt(M))+epsilon/(2*sqrt(M*sqrt(M))) ) exp(-(2*M*t+epsilon)^2/(8*M*sqrt(M))-delta*t/2)     for n= - ( 3/4-(4*g*M+epsilon^2-M*delta^2)/(16*M*sqrt(M)) ) && n is integer.

In future we shall omit epsilon^2 -terms.
If we take the unperturbed intensity for calculation of perturbation action, the perturbed pulse energy is

>    C^2*HermiteH(0, t*sqrt(sqrt(M))+epsilon/(2*sqrt(M*sqrt(M))) )^2*
exp(-(4*M^2*t^2+4*M*t*epsilon)/(4*M*sqrt(M))-delta*t):# field intensity profile for "ground state" (1/4-(4*g*M-M*delta^2)/(16*M*sqrt(M))) = 0
  subs(epsilon=alpha*I[0],%):
    int(%,t=-infinity..infinity):
       En := simplify(%);# energy of the first "ground state"
    

En := exp(1/4*(alpha*I[0]+delta*sqrt(M))^2/(M^(3/2)))*C^2*sqrt(Pi)/(M^(1/4))

>    1/4-(4*(alpha-l)*M - M*delta^2)/(16*M*sqrt(M)):
 sol_a := solve(%=0,alpha):
  eq := sol_a - alpha[0]/(1+subs( alpha=%,En )) = 0:# energy balance condition
   sol_I := solve(eq, C^2);# pulse peak intensity

sol_I := -M^(5/4)*(4*l+4*sqrt(M)+delta^2-4*alpha[0])/(exp(1/64*(4*I[0]*M^(3/2)+4*I[0]*M*l+I[0]*M*delta^2+4*delta*M^(3/2))^2/(M^(7/2)))*sqrt(Pi)*(4*M^(3/2)+4*M*l+M*delta^2))

Now we plot the dependencies of the pulse intensity, width and maximum location versus detuning parameter delta .

>    plot(subs( {alpha[0]=1.2,l=0.1,M=0.05},subs(I[0]=sol_0,sol_I) ), delta=-2..1.5, axes=BOXED, title=`pulse intensity vs detuning`);

[Maple Plot]

>    eq := exp( -(4*M^2*t^2+4*M*t*epsilon)/(4*M*sqrt(M))-delta*t ) = 1/2:# we take into account pulse profile without epsilon^2
 sol := solve(eq, t):
  pulse_width := simplify( subs( epsilon^2=0,sol[1] - sol[2] ) ):
   subs(epsilon=alpha*I[0],pulse_width):
    subs({alpha=sol_a,I[0]=sol_0},%): # pulse width for perturbed solution

>    plot(subs( {alpha[0]=1.2,l=0.1,M=0.05},% ), delta=-2..1.5, axes=BOXED, title=`pulse width vs detuning`);

[Maple Plot]

>    # pulse maximum location
diff(exp(-(2*M*t+epsilon)^2/(8*M*sqrt(M))-delta*t/2), t) = 0:
 solve(%, t);

-1/2*(epsilon+delta*sqrt(M))/M

>    subs(epsilon=alpha*I[0],%):
 subs({alpha=sol_a,I[0]=sol_0},%):
  plot(subs( {alpha[0]=1.2,l=0.1,M=0.05},% ), delta=-2..1.5, axes=BOXED, title=`pulse location vs detuning`);

[Maple Plot]

We see, that the main peculiarity here is the asymmetric dependence of the pulse parameters on delta . The pulse width minimum and intensity maximum don't coincide with delta =0 and the detuning characteristics have sharper behavior in negative domain of detuning.

Now, as it was made in previous subsection, we estimate the condition of the ultrashort pulse stability.

Here we take into consideration epsilon^2 -term, but this does not fail our analysis because of this term contribute only to pulse energy without shift pulse inside modulation window.

For the sake of the simplification, we shall consider the contribution of the destabilizing field to dynamical gain saturation, but only in the form of the unperturbed peak intensity variation zeta  and perturbation of the saturated gain coefficient (see above). Then the stability condition:

>    eq1 := epsilon = subs(I[0]=sol_0,sol_a*(I[0]+zeta)):# zeta is the peak intensity variation
-(3/4-(4*(sol_a-lambda-l)*M+epsilon^2-M*delta^2)/(16*M*sqrt(M))):
 expand( solve(%=0, lambda) ) < 0;# perturbation increment from eigenvalue problem
  subs(epsilon=rhs(eq1),lhs(%)):
   animate3d(subs( {alpha[p]=0,alpha[0]=1.2,l=0.1},% ), delta=-2..1.5,  M=0.005..0.05, zeta=-0.15..0.15, axes=BOXED, title=`maximal increment of perturbation`);

-2*sqrt(M)+1/4*epsilon^2/M < 0

[Maple Plot]

We can see, that the perturbation rise can destabilize the pulse as result of   abs(delta)  increase (compare with subsection "Amplitude modulation" ). Also, there is the possibility of ultrashort pulse destabilization near delta =0. So, the presence of dynamical gain saturation gives the behavior of the ultrashort pulse parameters and stability condition, which is close to the experimentally observed and numerically obtained (see, for example, J.M. Dudley, C.M. Loh and J.D. Harvey, Stable and unstable operation of a mode-locked argon laser, Quantum and Semiclass. Opt. , 8 , 1029 ( 1996 )).

Now we try to investigate the influence of dynamical gain saturation in detail by using so-called aberrationless approximation . Let the pulse profile keeps its form with accuracy up to n -order of time-series expansion, but n  pulse parameters are modified as result of pulse propagation. Then the substitution of the expression for pulse profile in master equation with subsequent expansion in t -series produces the system of n  ODE describing the evolution of pulse parameters.

>         f1 := (z,t)->rho0(z)*exp(-a(z)^2*t^2+b(z)*t);# approximate pulse profile
     f2 := (z,tau)->rho0(z)*exp(-a(z)^2*tau^2+b(z)*tau):
     master := diff(rho(z,t),z) = (alpha - l)*rho(z,t) - chi*alpha*rho(z,t)*int(rho(z,tau)^2,tau=-infinity..t) + diff(rho(z,t),t$2) - M*t^2*rho(z,t) + delta*diff(rho(z,t),t);# approximate master equation with dynamical gain saturation (parameter chi), alpha is the gain coefficient before pulse front
expand(lhs(subs({rho(z,t)=f1(z,t),rho(z,tau)=f2(z,tau)},master))*exp(a(z)^2*t^2)/exp(t*b(z)) - rhs(subs({rho(z,t)=f1(z,t),rho(z,tau)=f2(z,tau)},master))*exp(a(z)^2*t^2)/exp(t*b(z))):# substitution of the approximate solution

convert( series(%,t=1/2*b(z)/(a(z)^2),3),polynom ):# expansion around  peak at t=1/2*b(z)/(a(z)^2)
  eq1 := collect(%,t):
   eq2 := subs({diff(rho0(z),z)=u,diff(a(z),z)=v,diff(b(z),z)=w},coeff(eq1,t^2)):
    eq3 := subs({diff(rho0(z),z)=u,diff(a(z),z)=v,diff(b(z),z)=w},coeff(eq1,t)):
     eq4 := subs({diff(rho0(z),z)=u,diff(a(z),z)=v,diff(b(z),z)=w},coeff(eq1,t,0)):
      sol := simplify (solve({eq2=0,eq3=0,eq4=0},{u,v,w}) );

f1 := proc (z, t) options operator, arrow; rho0(z)*exp(-a(z)^2*t^2+b(z)*t) end proc

master := diff(rho(z,t),z) = (alpha-l)*rho(z,t)-chi*alpha*rho(z,t)*int(rho(z,tau)^2,tau = -infinity .. t)+diff(rho(z,t),`$`(t,2))-M*t^2*rho(z,t)+delta*diff(rho(z,t),t)

sol := {w = -chi*alpha*rho0(z)^2*exp(1/2*b(z)^2/(a(z)^2))-2*delta*a(z)^2-4*b(z)*a(z)^2, v = 1/2*(M-4*a(z)^4)/a(z), u = -1/4*rho0(z)*(chi*alpha*rho0(z)^2*sqrt(Pi)*exp(1/2*b(z)^2/(a(z)^2))*sqrt(2)*limit(...
sol := {w = -chi*alpha*rho0(z)^2*exp(1/2*b(z)^2/(a(z)^2))-2*delta*a(z)^2-4*b(z)*a(z)^2, v = 1/2*(M-4*a(z)^4)/a(z), u = -1/4*rho0(z)*(chi*alpha*rho0(z)^2*sqrt(Pi)*exp(1/2*b(z)^2/(a(z)^2))*sqrt(2)*limit(...
sol := {w = -chi*alpha*rho0(z)^2*exp(1/2*b(z)^2/(a(z)^2))-2*delta*a(z)^2-4*b(z)*a(z)^2, v = 1/2*(M-4*a(z)^4)/a(z), u = -1/4*rho0(z)*(chi*alpha*rho0(z)^2*sqrt(Pi)*exp(1/2*b(z)^2/(a(z)^2))*sqrt(2)*limit(...

Now try to find the steady-state points of ODE-system, which correspond to stationary pulse parameters. For this aim let introduce substitution chi = chi*exp(1*b(z)^2/(2*a(z)^2))  :

>    sol_main := {w = -chi*alpha*rho0(z)^2-2*delta*a(z)^2-4*b(z)*a(z)^2, v = 1/2*(M-4*a(z)^4)/a(z), u = 1/4*rho0(z)*(-chi*alpha*rho0(z)^2*sqrt(Pi)*sqrt(2)*a(z)+4*alpha*a(z)^2-8*a(z)^4-4*l*a(z)^2+2*rho0(z)^2*b(z)*chi*alpha+4*b(z)*delta*a(z)^2+4*b(z)^2*a(z)^2)/(a(z)^2)};

sol_main := {v = 1/2*(M-4*a(z)^4)/a(z), w = -chi*alpha*rho0(z)^2-2*delta*a(z)^2-4*b(z)*a(z)^2, u = 1/4*rho0(z)*(-chi*alpha*rho0(z)^2*sqrt(Pi)*sqrt(2)*a(z)+4*alpha*a(z)^2-8*a(z)^4-4*l*a(z)^2+2*rho0(z)^2...
sol_main := {v = 1/2*(M-4*a(z)^4)/a(z), w = -chi*alpha*rho0(z)^2-2*delta*a(z)^2-4*b(z)*a(z)^2, u = 1/4*rho0(z)*(-chi*alpha*rho0(z)^2*sqrt(Pi)*sqrt(2)*a(z)+4*alpha*a(z)^2-8*a(z)^4-4*l*a(z)^2+2*rho0(z)^2...

>    eq1 := subs( {rho0(z)^2=x,a(z)=sqrt(y),a(z)^2=y,a(z)^4=y^2},expand( numer( subs(sol_main,u) )/rho0(z) )=0 );# here we eliminated the trivial solution
  eq2 := subs( a(z)^4=y^2,numer( subs(sol_main,v) )=0 );
    eq3 :=  subs( {rho0(z)^2=x,a(z)^2=y},subs(sol_main,w)=0 );

eq1 := -chi*alpha*x*sqrt(Pi)*sqrt(2)*sqrt(y)+4*alpha*y-8*y^2-4*l*y+2*x*b(z)*chi*alpha+4*b(z)*delta*y+4*b(z)^2*y = 0

eq2 := M-4*y^2 = 0

eq3 := -chi*alpha*x-2*delta*y-4*b(z)*y = 0

>    allvalues( solve({eq2,eq3},{y,b(z)}) );

{b(z) = -1/2*(chi*alpha*x+delta*sqrt(M))/(sqrt(M)), y = 1/2*sqrt(M)}, {b(z) = 1/2*(chi*alpha*x-delta*sqrt(M))/(sqrt(M)), y = -1/2*sqrt(M)}

Hence a^2 = sqrt(M)/2 , b = -delta/2-chi*x*alpha/(2*sqrt(M))  ( x  is the pulse intensity). So, the shift is b/(2*a^2) = -delta/sqrt(M)-chi*x*alpha/(2*M)   that differs from the usual result (see above) as result of dynamical gain saturation (last term), which shifts the pulse maximum in negative side. This additional shift has obvious explanation. The gain at the pulse front is greater than one at pulse tail due to gain saturation. This shifts the pulse forward as hole .

Pulse width is:

>    eq := exp( t*(-delta/2-chi*x*alpha/(2*sqrt(M))) - sqrt(M)*t^2/2 ) = 1/2:
 sol := solve(eq, t):
  pulse_width := simplify( sol[1] - sol[2] );

pulse_width := sqrt(M*delta^2+2*delta*sqrt(M)*chi*alpha*x+chi^2*alpha^2*x^2+8*M^(3/2)*ln(2))/M

We can see, that there is the minimum of the pulse duration in negative domain of delta  that corresponds to result, which was obtained on the basis of perturbation theory. The pulse intensity rho0^2 :

>    Intensity := simplify(
solve(
subs({y = 1/2*sqrt(M),b(z) = -1/2*(delta*M+chi*sqrt(M)*x*alpha)/M},eq1),
x)[1]);# pulse intensity

Intensity := (-sqrt(Pi)*M^(3/4)-delta*sqrt(M)+sqrt(-M*(-Pi*sqrt(M)-2*sqrt(Pi)*M^(1/4)*delta-4*alpha+4*sqrt(M)+4*l)))/(chi*alpha)

So, we have the following dependencies for the pulse duration

>    subs(x=Intensity,pulse_width):
animate(subs( {alpha=1.2,l=0.1},% ), delta=-4..4, M=0.01..0.1, numpoints=200, axes=BOXED, title=`pulse width vs detuning`);

[Maple Plot]

and pulse intensity

>    animate(subs( {alpha=1.2,l=0.1,chi=1},Intensity ), delta=-4..4, M=0.01..0.1, numpoints=200, axes=BOXED, view=0..0.45, title=`pulse intensity vs detuning`);

[Maple Plot]

The last step is the stability analysis. The stability of our solutions can be estimated from the eigenvalues of Jacobian of sol .

>    eq1 := subs({rho0(z)=x,a(z)=y,b(z)=z},subs(sol_main,u)):
 eq2 := subs({rho0(z)=x,a(z)=y,b(z)=z},subs(sol_main,v)):
  eq3 := subs({rho0(z)=x,a(z)=y,b(z)=z},subs(sol_main,w)):
m[1,1] := diff( eq1,x ):
 m[1,2] := diff( eq1,y ):
   m[1,3] := diff( eq1,z ):
m[2,1] := diff( eq2,x ):
 m[2,2] := diff( eq2,y ):
   m[2,3] := diff( eq2,z ):
m[3,1] := diff( eq3,x ):
 m[3,2] := diff( eq3,y ):
   m[3,3] := diff( eq3,z ):
A := array([[m[1,1],m[1,2],m[1,3]],[m[2,1],m[2,2],m[2,3]],[m[3,1],m[3,2],m[3,3]]]):# Jacobian

Now we find the eigenvalues lambda  of Jacobian directly by calculation of determinant.

>    evalm(A-[[lambda,0,0],[0,lambda,0],[0,0,lambda]]):
numer( simplify(det(%)) ):
sol := solve(%=0,lambda):

>    x := sqrt(Intensity):
 y := sqrt( sqrt(M)/2 ):
  z := -delta/2-x^2*alpha/(2*sqrt(M)):
   s1 := evalf( subs({chi=1,l=0.1,alpha=1.2},sol[1]) ):
    s2 := evalf( subs({chi=1,l=0.1,alpha=1.2},sol[2]) ):
     s3 := evalf( subs({chi=1,l=0.1,alpha=1.2},sol[3]) ):
plot3d({Re(s1),Re(s2),Re(s3)}, delta=-4..2, M=0.01..0.1, axes=boxed,title=`Re(lambda) for initial perturbation`);
   

[Maple Plot]

One can see that the pulse with Gaussian-like form is stable in the region of its existence (see two previous figures). We have to note that the considered here perturbations belong to limited class therefore this criterion is necessary but not sufficient condition of pulse stability (compare with previous consideration on the basis of perturbation theory, where we analyzed not only pulse peak variation but also gain coefficient change).

Part V. Nonlinear Schroedinger equation: construction of the soliton solution using the direct Hirota's method

The Schroedinger equation is the well-known nonlinear equation describing the weak nonlinear waves, in the particular, the laser pulse propagation in fibers. In the last case, a pulse can propagate without decaying over large distance due to  balance between two factors: SPM and group delay dispersion (GDD). These pulses are named as optical solitons [ M. J. Ablowitz, H. Segur, "Solitons and the Inverse Scattering Transform", SIAM Philadelphia, 1980 ]. The ultrashort pulse evolution obeys to the next master equation:

I*diff(rho,z) = k[2]*diff(rho,`$`(t,2))+beta*abs(rho)^2*rho

which is the consequence of eq_field  from part 2  in the case of transition to local time t-->t-z/c . The right-hand side terms describe GDD (with coefficient k[2] ) and SPM (with coefficient beta ), respectively .

It is very important to obtain the exact soliton solutions of nonlinear equations. There are the inverse and direct methods to obtain such solutions. One of the direct methods is the so-called Hirota's method. The main steps of this method are: 1) the selection of the suitable substitution instead of the function   rho   (see the master equation),   that allows to obtain the bilinear form of the evolution equation; 2) the consideration of the formal series of perturbation theory for this bilinear equation. In the case of soliton solutions these series are terminated.

The useful substitution for the nonlinear Schroedinger equation is rho (z,t)=G(z,t)/F(z,t). Let suppose that  F  is the real function. It should be noted that we can make any assumption about rho   to satisfy the assumptions 1) and 2). Hirota proposed to introduce a new D - operator   in following way:

Dz^m*Dt^n*a*b = (diff(%?,z)-diff(%?,z[1]))^m*(diff(%?,t)-diff(%?,t[1]))^n*a(z,t)*b(z[1],t[1])

After substitution of rho   in the terms of functions G  and F  we obtain two bilinear differential equations with regard to the new operator D :

[I*Dz+k[2]*Dt^2]*G*F = 0

             k[2]*Dt^2*FF-beta*G*`G*` = 0          (1)

The functions G  and F  can be expanded into the series of the formal parameter epsilon :

G = epsilon*G1+epsilon^3*G3+epsilon^5*G5; F = 1+epsilon^2*F2+epsilon^4*F4+epsilon^6*F6   

Let substitute G  and F  into Eq. (1) and treat the terms with powers of epsilon  as independent, to get the infinite set of the differential equations relatively G1, G3, ...; F2, F4, ...  . These formal series are terminated only in the case when the master equation has exact N -soliton solution. For instance, the set of first six differential equations in our case is:

I*diff(G1,z)+k[2]*diff(G1,`$`(t,2)) = 0; 2*k[2]*diff(F2,`$`(t,2))-beta*G1*`G1*` = 0; I*diff(G3,z)+k[2]*diff(G3,`$`(t,2))+[I*Dz+k[2]*Dt^2]*G1*F2 = 0; 2*k[2]*diff(F4,`$`(t,2))+Dt^2*F2F2-beta*(G3*`G1*`+G1...
I*diff(G1,z)+k[2]*diff(G1,`$`(t,2)) = 0; 2*k[2]*diff(F2,`$`(t,2))-beta*G1*`G1*` = 0; I*diff(G3,z)+k[2]*diff(G3,`$`(t,2))+[I*Dz+k[2]*Dt^2]*G1*F2 = 0; 2*k[2]*diff(F4,`$`(t,2))+Dt^2*F2F2-beta*(G3*`G1*`+G1...
I*diff(G1,z)+k[2]*diff(G1,`$`(t,2)) = 0; 2*k[2]*diff(F2,`$`(t,2))-beta*G1*`G1*` = 0; I*diff(G3,z)+k[2]*diff(G3,`$`(t,2))+[I*Dz+k[2]*Dt^2]*G1*F2 = 0; 2*k[2]*diff(F4,`$`(t,2))+Dt^2*F2F2-beta*(G3*`G1*`+G1...
I*diff(G1,z)+k[2]*diff(G1,`$`(t,2)) = 0; 2*k[2]*diff(F2,`$`(t,2))-beta*G1*`G1*` = 0; I*diff(G3,z)+k[2]*diff(G3,`$`(t,2))+[I*Dz+k[2]*Dt^2]*G1*F2 = 0; 2*k[2]*diff(F4,`$`(t,2))+Dt^2*F2F2-beta*(G3*`G1*`+G1...
I*diff(G1,z)+k[2]*diff(G1,`$`(t,2)) = 0; 2*k[2]*diff(F2,`$`(t,2))-beta*G1*`G1*` = 0; I*diff(G3,z)+k[2]*diff(G3,`$`(t,2))+[I*Dz+k[2]*Dt^2]*G1*F2 = 0; 2*k[2]*diff(F4,`$`(t,2))+Dt^2*F2F2-beta*(G3*`G1*`+G1...
I*diff(G1,z)+k[2]*diff(G1,`$`(t,2)) = 0; 2*k[2]*diff(F2,`$`(t,2))-beta*G1*`G1*` = 0; I*diff(G3,z)+k[2]*diff(G3,`$`(t,2))+[I*Dz+k[2]*Dt^2]*G1*F2 = 0; 2*k[2]*diff(F4,`$`(t,2))+Dt^2*F2F2-beta*(G3*`G1*`+G1...

For sake of the simplification of the very cumbersome manipulations we introduce the procedure for operator Dt^m*Dz^n , which acts on the functions a  and b . The lasts are the exponents (or linear combination of the exponents) in the form exp(eta) , where eta(z,t)  is linear function.

>    restart:
with(plots):

Warning, the name changecoords has been redefined

Procedure Dt^m Dz^n  

>    Dt_Dz := proc (a,b,m,n)
    local Summa,k,r,result:
    Summa := 0:
    if  (n>1) and (m<>0) then
        for k from 1 to n-1 do
            Summa := Summa+binomial(n,k)*(-1)^(n-k+m)*
            der( der(b,z,(n-k)),t,m)*der(a,z,k)+
            binomial(n,k)*(-1)^(n-k)*der(b,z,(n-k))*
            der( der(a,z,k),t,m)
        od:
    fi:

    if  (n>1) and (m>1) then
       for r from 1 to (m-1) do
           for k from 1 to (n-1) do
               Summa := Summa+binomial(m,r)*
               binomial(n,k)*(-1)^(n-k+m-r)*
               der( der(b,z,(n-k)),t,(m-r))*
               der( der(a,z,k),t,r);
           od:
       od:
    fi:

    if  (m>1) and (n<>0) then
       for r from 1 to (m-1) do
           Summa := Summa+binomial(m,r)*(-1)^(m-r+n)*
           der( der(b,z,n),t,(m-r))*der(a,t,r)+
           binomial(m,r)*(-1)^(m-r)*der(b,t,(m-r))*
           der( der(a,z,n),t,r);
       od;
    fi:

    if (m<>0) and (n<>0) then
       Summa := Summa+(-1)^(m+n)*der(der(b,z,n),t,m)*a+
       (-1)^m*der(a,z,n)*der(b,t,m)+(-1)^n*der(a,t,m)*
       der(b,z,n)+der(der(a,z,n),t,m)*b;  
    fi:
  
    if (m=0) and (n>1) then
       Summa := Summa+(-1)^(n)*der(b,z,n)*a+der(a,z,n)*b;
           for k from 1 to (n-1) do
               Summa := Summa+binomial(n,k)*(-1)^(n-k)*
               der(b,z,(n-k))*der(a,z,k);
           od:
    fi:

    if (m=0) and (n=1) then
       Summa := der(a,z,1)*b-der(b,z,1)*a:
    fi:

    if (n=0) and (m>1) then
       Summa := Summa+(-1)^(m)*der(b,t,m)*a+der(a,t,m)*b;
           for r from 1 to (m-1) do
               Summa := Summa+binomial(m,r)*(-1)^(m-r)*
               der(b,t,(m-r))*der(a,t,r);
           od:
    fi:
 
    if (n=0) and (m=1) then
       Summa := der(a,t,1)*b-der(b,t,1)*a:
    fi:

    if (n=0) and (m=0) then
       Summa := a*b
    fi:

    result := combine(Summa,exp):

 end:

The next procedure will be used for calculation of the derivative of exp(eta)  (or combination of exponents) on t  or z   with further simplification of the obtained expression.

Procedure der

>    der := proc (f,x,m)
   local  difF,i,function:
   subs(eta1=eta1(x),eta1s=eta1s(x),
   eta2=eta2(x),eta2s=eta2s(x),f):
   difF := diff(%,x$m):

   if (x=t) then
      function := subs({diff(eta1(x),x)=b1,
      diff(eta2(x),x)=b2,diff(eta1s(x),x)=b1s,
      diff(eta2s(x),x)=b2s},difF)
            else  
      function := subs({diff(eta1(x),x)=a1,
      diff(eta2(x),x)=a2,diff(eta1s(x),x)=a1s,
      diff(eta2s(x),x)=a2s},difF)
   fi;

   subs(eta1(x)=eta1,eta1s(x)=eta1s,
   eta2(x)=eta2,eta2s(x)=eta2s, function):

   if (m>1) then
      difF := subs({diff(a1,x)=0,diff(a2,x)=0,
      diff(b1,x)=0,diff(b2,x)=0,diff(a1s,x)=0,
      diff(a2s,x)=0,diff(b1s,x)=0,diff(b2s,x)=0},%)
            else
      combine(%)
   fi:

   collect(%,exp):

end:

The next procedure is used to calculate an integral of exp(eta)  (or combination of exponents) on t  or z with further simplification of the expression.

Procedure Integr

>    integr := proc (f,x,m)
     local intF,i,g1,g1s,g2,g2s,function:
     intF := subs(eta1=g1*x,eta1s=g1s*x,eta2=g2*x,
     eta2s=g2s*x,f):

     for i from 1 to m do
         intF := int(intF,x);
     od:

     if (x=t) then
         x := t; g1 := b1; g1s := b1s; g2 := b2; g2s := b2s;
              else
         x := z; g1 := a1; g1s := a1s; g2 := a2; g2s := a2s;
     fi:

     intF;

     collect(%,exp):

     subs(b1*t=eta1,b1s*t=eta1s,b2*t=eta2,
     b2s*t=eta2s,a1*z=eta1,a1s*z=eta1s,a2*z=eta2,
     a2s*z=eta2s,%);
end:

Now, let try to obtain a first-order soliton  for nonlinear Schroedinger equation.

>    macro(Gs=`G*`,G1s=`G1*`,G3s=`G3*`,G5s=`G5*`,
as=`a*`,bs=`b*`,eta0s = `eta0*`):

>    G1 := exp(eta1):# successful substitution!
I*der(%,z,1)+k_2*der(%,t,2): #first from the equations set
   factor(%);

exp(eta1)*(a1*I+b1^2*k_2)

>    #as result we can find the parameter a1
   a1 := I*k_2*b1^2:
      a1s := -I*k_2*b1s^2:

>    G1s := exp(eta1s):# conjugated to G1
   G1G1s := combine(G1*G1s):
       F2 := beta/(2*k_2)*integr(%,t,2);#F2 from the second equation of the set

F2 := 1/2*beta*exp(eta1+eta1s)/(k_2*(b1+b1s)^2)

>    # But the next equation of the set results in
   I_Dz_G1_F2 := I*factor(Dt_Dz(G1,F2,0,1)):
       d_Dt2_G1_F2 := k_2*factor(Dt_Dz(G1,F2,2,0)):
           factor(I_Dz_G1_F2+d_Dt2_G1_F2);
               Dt_Dz(F2,F2,2,0);

0

0

To obtain this result we use the trivial relationships:

>    eta1=a1*z+b1*t+eta10:
   eta2=a2*z+b2*t+eta20:
       Dz*exp(eta1)*exp(eta2)=(a1-a2)*exp(eta1+eta2);
           Dt^2*exp(eta1)*exp(eta2)=(b1-b2)^2*exp(eta1+eta2);

Dz*exp(eta1)*exp(eta2) = (k_2*b1^2*I-a2)*exp(eta1+eta2)

Dt^2*exp(eta1)*exp(eta2) = (b1-b2)^2*exp(eta1+eta2)

As was shown above a= - i k[2] b^2 , hence the last term in third equation of set is equal to 0 . So, we are to choose G3  = 0 to satisfy third equation. Furthermore Dt^2 F2  from fourth equation of the set is ( beta^2/((2(b+bs)^2*k_2)^2) ) Dt^2 exp( eta + eta _s). But in concordance with above obtained relationships this expression is equal to zero. So we can choose F4  = 0. Thus to satisfy other equations we can keep in the expansion of functions G  and F  only G1 , G3  and F2 .

So, the formal series are terminated. Since epsilon  is independent parameter we can take epsilon =1.

>    rho := G1/(1+F2);

rho := exp(eta1)/(1+1/2*beta*exp(eta1+eta1s)/(k_2*(b1+b1s)^2))

>    subs(eta1=a1*z+b1*t+eta10,eta1s=a1s*z+b1s*t+eta10s, rho):
soliton := expand(subs({b1s=b1,beta=1,k_2=1/2},%));#the choice of k_2 and beta is only normalization of the values in equation

soliton := exp(1/2*I*b1^2*z)*exp(b1*t)*exp(eta10)/(1+1/4*exp(b1*t)^2*exp(eta10)*exp(eta10s)/(b1^2))

>    # Now we check the obtained solution by substitution of one in dynamical equation
I*der(rho,z,1)/rho+beta*exp(eta1+eta1s)/((1+1/2*beta*exp(eta1+eta1s)/(k_2*(b1+b1s)^2)))^2+k_2*der(rho,t,2)/rho:
simplify(%);

0

All right! This is the exact solution of the Schroedinger equation. Physically b1  has a sense of the inverse pulse duration. So it is real parameter. But what is the free parameter eta 10 ? Let eta 10 is real and exp(eta10)  = b1. Then

>    subs({exp(eta10)=2*b1, exp(eta10s)=2*b1},soliton):
simplify(%);

2*exp(1/2*b1*(z*b1*I+2*t))*b1/(1+exp(2*b1*t))

The obtained solution is the so-called first-order soliton  with duration 1/b1  , amplitude b1  and phase b1^2 z/2 :

  rho (z,t)=b1*sech(b1*t)exp(i* b1^2 z/2)

>    plot(subs({z=0,b1=1},%),t=-5..5,axes=boxed, title=`first-order soliton`);

[Maple Plot]

But what is about different values of eta 10 ? The choice of the different values of eta 10  results in the obtaining of the so-called collapsing pulses, i. e. pulses with singularity in the dependence of their parameters on z .

The described here procedure is available for the analysis of the higher-order solitons. For example, the substitution of G1 = e^eta1 + e^eta2  causes the termination of the series on fifth equation (you can prove this statement by using of the described above procedures). The obtained solution depends on z  and is called as the second order soliton .

>    4*exp(-I*z/2)(cosh(3*t)+3*exp(-4*I*z)*cosh(t))/(cosh(4*t)+4*cosh(t)+3*cos(4*z)):# second-order soliton
   plot3d(abs(%)^2,t=-2..2,z=0..5,color=red,axes=boxed, title=`second-order soliton`);

[Maple Plot]

In the case of Schroedinger equation, the main feature of the described above method is the termination of the formal series for an arbitrary order of the solution. Such behavior results from a very rich mathematical structure of the dynamical equation: an existence of the infinitely many nontrivial symmetries and conservation laws, Painleve property and integrability by means of the inverse scattering method. The non-decaying pulse-like solutions of the integrable nonlinear evolutional equations are called as the solitons . But as we shall see later, some nonlinear equations have the soliton-like solutions, but do not belong to integrable class. For example, for nonlinear Landau-Ginzburg equation (see next part) there is the soliton-like solution in the first order of the Hirota's method. But the second-order solution does not lead to the termination of the series. Such soliton-like solutions of the nonintegrable dynamical equation are called as the quasi-solitons  (or solitary waves).

Part VI. Nonlinear Landau-Ginzburg equation: quasi-soliton solution

Here we shall consider a soliton-like pulse, which is generated in the continuous-wave solid-state laser due to power-dependent saturation of the diffraction loss in the presence of the field self-focusing in active medium [ H.A. Haus, "Theory of mode locking with a fast saturable absorber", J. Appl. Phys., 46 , 3049 (1975); H.A. Haus, J.G. Fujimoto, and E.P. Ippen, "Analytic theory of additive pulse and Kerr lens mode locking", IEEE J. Quantum Electronics, 28 , 2086 (1992) ]. The action of the saturable loss can be described by the real cubic nonlinear term. The energy dissipation due to spectral filtering can be introduced by means of the real second-order derivative on t . Then in the absence of SPM and GDD, the dynamical equation is a analog of the Schroedinger equation, but with pure real terms.

diff(rho(z,t),z)  = g rho(z,t)  + t[f]^2 diff(rho(z,t),`$`(t,2))  + sigma rho(z,t)^3   

Here g  is the net-gain in the laser taking into account the gain and linear loss in the active medium, output loss, and diffraction loss. For sake of simplification, we shall suppose the normalization of time to the inverse bandwidth of the spectral filter t[f]  (let t[f] = 2.5 fs, that corresponds to the full generation bandwidth of Ti: sapphire laser) and normalization of pulse intensity to the inverse intensity of the loss saturation sigma  (the typical values of sigma  are ~ 10^(-10)  - 10^(-12)    cm^2 /W). We will consider the steady-state pulse propagation, then diff(rho(z,t),z)  = 0. So, the master equation can be transformed to the well-known Duffing's type equation describing nonlinear oscillations without damping:

>    restart:
  with(plots):
    with(DEtools):
       ode := diff(rho(t),`$`(t,2)) + rho(t)^3 + g*rho(t);

Warning, the name changecoords has been redefined

ode := diff(rho(t),`$`(t,2))+rho(t)^3+g*rho(t)

Its implicit solutions are:

>    sol := dsolve(ode=0,rho(t));

sol := Int(2*1/(sqrt(-2*_a^4-4*g*_a^2+4*_C1)),_a = `` .. rho(t))-t-_C2 = 0, Int(-2*1/(sqrt(-2*_a^4-4*g*_a^2+4*_C1)),_a = `` .. rho(t))-t-_C2 = 0

The first integral of motion is:

>    numer(diff(lhs(sol[1]),t)):
   int_motion := simplify((op(1,%)^2-op(2,%)^2)/2);

int_motion := 2*diff(rho(t),t)^2+rho(t)^4+2*g*rho(t)^2-2*_C1

These equations describe the motion in the potential:

>    pot := simplify(op(2,int_motion)+op(3,int_motion));

pot := rho(t)^4+2*g*rho(t)^2

The value of 4*_C1  plays a role of the full energy of system. The dependence of potential on rho  for the different g  is shown in the next figure:

>    plot3d(subs(rho(t)=rho,pot),g=0.05..-0.1,rho=-0.5..0.5,axes=boxed,title=`Potential of pendulum`);

[Maple Plot]

We can see, that for g  > 0 there is one equilibrium state of pendulum in rho  = 0 (stable state), and for g  < 0 there are three one (unstable in rho  = 0 and stable in rho  = +/- sqrt(-g) ) . Obviously, that in this system the different oscillation regimes is possible, that is illustrated by the phase portrait on the plane [ y,   z=d rho /dt ] .

>    sys := convertsys(ode = 0,[],rho(t),t,z);
dfieldplot([diff(rho(t),t)=z(t),diff(z(t),t)=-rho(t)^3-subs(g=-0.1,g)*rho(t)], \
[z(t),rho(t)],t=-2..2,rho=-0.5..0.5,z=-0.1..0.1,\
arrows=LARGE,axes=boxed,title=`Nonlinear oscillations`,color=black);

sys := [[YP[1] = z[2], YP[2] = -z[1]^3-g*z[1]], [z[1] = rho(t), z[2] = diff(rho(t),t)], undefined, []]

[Maple Plot]

The quasi-soliton solution of the initial equation corresponds to the oscillation around the stable equilibrium state with infinite period. In this case the full energy is equal to 0. Then   _C1  = 0 and the motion begins from rho  = 0 at t  = - infinity :

>    plot({sqrt(subs({rho(t)=rho,g=-0.1},-pot))/2,-sqrt(subs({rho(t)=rho,g=-0.1},-pot))/2},\
rho=0..0.45,axes=boxed,labels=[`rho(t)`,`drho(t)/dt`],color=red,numpoints=200);

[Maple Plot]

The amplitude of quasi-soliton can be found from the integral of motion (i. e. pulse maximum correspond to d rho /dt = 0 and _C1 = 0 in the integral of motion).

>    rho0 := solve(factor(pot)/rho(t)^2=0,rho(t));

rho0 := sqrt(-2*g), -sqrt(-2*g)

The explicit integration of the solution produces:

>    assume(g<0):
  sol1_a := numer(value(subs(_C1=0,lhs(sol[1]))));
    sol1_b := numer(value(subs(_C1=0,lhs(sol[2]))));

sol1_a := rho(t)*sqrt(-2*rho(t)^2-4*g)*arctanh(2*g/(sqrt(-g)*sqrt(-2*rho(t)^2-4*g)))-t*sqrt(-2*rho(t)^4-4*g*rho(t)^2)*sqrt(-g)-_C2*sqrt(-2*rho(t)^4-4*g*rho(t)^2)*sqrt(-g)
sol1_a := rho(t)*sqrt(-2*rho(t)^2-4*g)*arctanh(2*g/(sqrt(-g)*sqrt(-2*rho(t)^2-4*g)))-t*sqrt(-2*rho(t)^4-4*g*rho(t)^2)*sqrt(-g)-_C2*sqrt(-2*rho(t)^4-4*g*rho(t)^2)*sqrt(-g)

sol1_b := -rho(t)*sqrt(-2*rho(t)^2-4*g)*arctanh(2*g/(sqrt(-g)*sqrt(-2*rho(t)^2-4*g)))-t*sqrt(-2*rho(t)^4-4*g*rho(t)^2)*sqrt(-g)-_C2*sqrt(-2*rho(t)^4-4*g*rho(t)^2)*sqrt(-g)
sol1_b := -rho(t)*sqrt(-2*rho(t)^2-4*g)*arctanh(2*g/(sqrt(-g)*sqrt(-2*rho(t)^2-4*g)))-t*sqrt(-2*rho(t)^4-4*g*rho(t)^2)*sqrt(-g)-_C2*sqrt(-2*rho(t)^4-4*g*rho(t)^2)*sqrt(-g)

Make some transformations:

>    sol2_a := numer(simplify(expand(sol1_a/op(1,sol1_a)),radical,symbolic));
sol2_b := numer(simplify(expand(sol1_b/op(1,sol1_b)),radical,symbolic));

sol2_a := arctanh(2*g/(sqrt(-g)*sqrt(-2*rho(t)^2-4*g)))-t*sqrt(-g)-_C2*sqrt(-g)

sol2_b := arctanh(2*g/(sqrt(-g)*sqrt(-2*rho(t)^2-4*g)))+t*sqrt(-g)+_C2*sqrt(-g)

When at the pulse maximum rho (0)  = rho[max] , the value of _C2  can be found as:

>    i_C2_a := solve(subs({t=0,rho(t)=rho_max},sol2_a)=0,_C2);
i_C2_b := solve(subs({t=0,rho(t)=rho_max},sol2_b)=0,_C2);

i_C2_a := arctanh(2*g/(sqrt(-g)*sqrt(-2*rho_max^2-4*g)))/(sqrt(-g))

i_C2_b := -arctanh(2*g/(sqrt(-g)*sqrt(-2*rho_max^2-4*g)))/(sqrt(-g))

Let tanh ( i_C2_a*sqrt ( -g ))  = tanh ( -i_C2_b*sqrt ( -g ) )  = -/+ upsilon , then from an expression for the tangents of sum of arguments: tanh ( a + b )  = tanh ( a )  + tanh ( b ) /(1 + tanh ( a ) tanh ( b ) ), the equations can be transformed as:

>    sol3_a := simplify(tanh(op(1,sol2_a)))=(tanh(-op(2,sol2_a))+upsilon)/\
(1+tanh(-op(2,sol2_a))*upsilon);
sol3_b := simplify(tanh(op(1,sol2_b)))=(tanh(-op(2,sol2_b))+upsilon)/\
(1+tanh(-op(2,sol2_b))*upsilon);

sol3_a := 2*g/(sqrt(-g)*sqrt(-2*rho(t)^2-4*g)) = (tanh(t*sqrt(-g))+upsilon)/(1+tanh(t*sqrt(-g))*upsilon)

sol3_b := 2*g/(sqrt(-g)*sqrt(-2*rho(t)^2-4*g)) = (-tanh(t*sqrt(-g))+upsilon)/(1-tanh(t*sqrt(-g))*upsilon)

>    sol4_a := solve(sol3_a, rho(t));
sol4_b := solve(sol3_b, rho(t));

sol4_a := 2*sqrt(2*g-2*g*upsilon^2)*exp(t*sqrt(-g))/(exp(t*sqrt(-g))^2-1+upsilon*exp(t*sqrt(-g))^2+upsilon), -2*sqrt(2*g-2*g*upsilon^2)*exp(t*sqrt(-g))/(exp(t*sqrt(-g))^2-1+upsilon*exp(t*sqrt(-g))^2+up...

sol4_b := 2*sqrt(2*g-2*g*upsilon^2)*exp(t*sqrt(-g))/(-exp(t*sqrt(-g))^2+1+upsilon*exp(t*sqrt(-g))^2+upsilon), -2*sqrt(2*g-2*g*upsilon^2)*exp(t*sqrt(-g))/(-exp(t*sqrt(-g))^2+1+upsilon*exp(t*sqrt(-g))^2+...

Now, we must note, that the transit rho[max]  -> rho 0  (see above) corresponds to the transit upsilon  --> infinity . Then the final solutions result from the next operations:

>    sol_fin_1 := limit(sol4_a[1],upsilon=infinity);
 sol_fin_2 := limit(sol4_a[2],upsilon=infinity);
   sol_fin_1 := limit(sol4_b[1],upsilon=infinity);
     sol_fin_2 := limit(sol4_b[2],upsilon=infinity);

sol_fin_1 := 2*sqrt(-2*g)*exp(t*sqrt(-g))/(exp(2*t*sqrt(-g))+1)

sol_fin_2 := -2*sqrt(-2*g)*exp(t*sqrt(-g))/(exp(2*t*sqrt(-g))+1)

sol_fin_1 := 2*sqrt(-2*g)*exp(t*sqrt(-g))/(exp(2*t*sqrt(-g))+1)

sol_fin_2 := -2*sqrt(-2*g)*exp(t*sqrt(-g))/(exp(2*t*sqrt(-g))+1)

The positive roots satisfy to the initial condition and the result is the quasi-soliton pulse with sech  - shape envelope, which has the duration 1/ sqrt(-g)  and the peak amplitude rho 0 = sqrt(-2*g) . The pulse intensity profile is shown in the next figure ( sigma  = 10^(-11)   cm^2 /W, iota  is the time normalized to t[f] ):

>    animate(evalf(subs(t=iota/(2.5e-15),sol_fin_1)^2*100),\
iota=-1e-13..1e-13,g=-0.05..-0.01,frames=50,\
axes=boxed,color=red,labels=[`time, fs`,`rho^2, GW/cm^2`],title=`Pulse envelope`);

[Maple Plot]

So, there is the close analogy between an ultrashort pulse generation in the laser with power-dependent loss saturation and an oscillation of nonlinear pendulum. The considered solution has the form of a steady-state quasi-soliton. But in the next part we are going to demonstrate some analogies of the high-order soliton behavior (laser breezers).

Part VII. Autooscillations of quasi-solitons in the laser

The main efforts in the design of the modern femtosecond lasers aim to the stabilization of the ultrashort pulse parameters. For example, as it was shown [ A. M. Sergeev, E. V. Vanin, F. W. Wise, Stability of passively mode-locked lasers with fast saturable absorbers, Opt. Commun., 140, 61 (1997) ], the pulse destabilizations are very important factors limiting the operation of laser with so-called fast saturable absorber (the bleaching of diffraction loss due to Kerr-lensing is the example of such saturable absorber, see previous part). The destabilization of the laser quasi-soliton can produce its destruction or regular/nonregular autooscillations. The last can be considered as the analog of a high-order soliton formation (see part 4), which is reminiscent of the breezers of nonlinear dynamical equation.

We shall consider the master laser equation, which joins the Landau-Ginzburg and Schroedinger equations. The main nonlinear factors now are SPM and power-dependent loss saturation. GDD and spectral filtering will be taken into consideration, too.

>    restart:
  with(DEtools):
    with(plots):
       master_1 := diff(rho(z,t),z) = alpha*rho(z,t)-gamma*rho(z,t)+I*phi*rho(z,t)+tf^2*diff(rho(z,t),`$`(t,2))+I*k_2*diff(rho(z,t),`$`(t,2))+sigma*rho(z,t)^2*conjugate(rho(z,t))-I*beta*rho(z,t)^2*conjugate(rho(z,t));

Warning, the name changecoords has been redefined

master_1 := diff(rho(z,t),z) = alpha*rho(z,t)-gamma*rho(z,t)+phi*rho(z,t)*I+tf^2*diff(rho(z,t),`$`(t,2))+k_2*diff(rho(z,t),`$`(t,2))*I+sigma*rho(z,t)^2*conjugate(rho(z,t))-I*beta*rho(z,t)^2*conjugate(r...

Here phi  is the phase delay on the full cavity round trip, alpha  and gamma  are the gain and loss coefficients, respectively. The general exact solution of this equation is not known, but there is the quasi-soliton solution in the following form:

>    f1 := (z,t)->rho0(z)*sech(t*tau(z))^(1+I*psi(z));

f1 := proc (z, t) options operator, arrow; rho0(z)*sech(t*tau(z))^(1+psi(z)*I) end proc

Here rho 0 is the pulse amplitude, tau  is the inverse pulse width, psi  is the chirp. This solution obeys the condition of steady-state propagation, when diff(rho,z)  = 0, i.e. the pulse parameters are constant. To describe the nonstationary pulse propagation, we shall use the aberrationless approximation: the changes of the pulse parameters do not cause the aberration of the pulse form. Next step is the substitution of f1  into master_1  with following expansion in t  - series. The coefficients of the expansion produce the set of ODE for the evaluating pulse parameters.

>    assume(tau(z),real):
  assume(t,real):
  expand(lhs(subs(rho(z,t)=f1(z,t),master_1))-rhs(subs(rho(z,t)=f1(z,t),master_1))):
  eq := subs({alpha=alpha(z),diff(rho0(z),z)=a,diff(tau(z),z)=b,diff(psi(z),z)=c},\
convert(series(%,t=0,3),polynom)):
  assume(rho0(z),real):
eq1 := evalc(coeff(eq,t^2)):
  eq2 := evalc(coeff(eq,t)):
    eq3 := evalc(coeff(eq,t,0)):
       eq4 := coeff(eq1,I):
          eq5 := coeff(eq1,I,0):
             eq6 := coeff(eq3,I):
                eq7 := coeff(eq3,I,0):
sol := solve({eq4=0,eq5=0,eq6=0,eq7=0},{a,b,c,phi}):
sys := diff(rho0(z),z)=subs(sol,a),diff(tau(z),z)=subs(sol,b),diff(psi(z),z)=subs(sol,c):

The obtained system sys  have to be supplemented with equation for gain evolution:

>    sys := {%,diff(alpha(z),z)=alpha(z)*exp(-2*xi*rho0(z)^2/tau(z)-1/Tr-Pump)+Pump*alphamx*(1-exp(-1/Tr-Pump))/(Pump+1/Tr)-alpha(z)};

sys := {diff(alpha(z),z) = alpha(z)*exp(-2*xi*rho0(z)^2/tau(z)-1/Tr-Pump)+Pump*alphamx*(1-exp(-1/Tr-Pump))/(Pump+1/Tr)-alpha(z), diff(rho0(z),z) = alpha(z)*rho0(z)+sigma*rho0(z)^3-gamma*rho0(z)-tf^2*rh...
sys := {diff(alpha(z),z) = alpha(z)*exp(-2*xi*rho0(z)^2/tau(z)-1/Tr-Pump)+Pump*alphamx*(1-exp(-1/Tr-Pump))/(Pump+1/Tr)-alpha(z), diff(rho0(z),z) = alpha(z)*rho0(z)+sigma*rho0(z)^3-gamma*rho0(z)-tf^2*rh...
sys := {diff(alpha(z),z) = alpha(z)*exp(-2*xi*rho0(z)^2/tau(z)-1/Tr-Pump)+Pump*alphamx*(1-exp(-1/Tr-Pump))/(Pump+1/Tr)-alpha(z), diff(rho0(z),z) = alpha(z)*rho0(z)+sigma*rho0(z)^3-gamma*rho0(z)-tf^2*rh...
sys := {diff(alpha(z),z) = alpha(z)*exp(-2*xi*rho0(z)^2/tau(z)-1/Tr-Pump)+Pump*alphamx*(1-exp(-1/Tr-Pump))/(Pump+1/Tr)-alpha(z), diff(rho0(z),z) = alpha(z)*rho0(z)+sigma*rho0(z)^3-gamma*rho0(z)-tf^2*rh...

Here Tr  is the gain relaxation time normalized to the cavity period, Pump is the dimensionless pump (see part 8 ), xi  is the inverse gain saturation energy.

At first let's find the parameters of a steady-state quasi-soliton, viz. the solution of sys independent on  z.

>    f[1] :=  -2*tf^2*psi*Tau-4*k_2*psi^2*Tau-4*k_2*Tau-2*tf^2*psi^3*Tau-2*sigma*Phi*psi-2*beta*Phi;# Tau = tau^2, Phi = rho^2

f[2] := alpha+sigma*Phi-gamma-tf^2*Tau+k_2*psi*Tau;

f[3] := 3*k_2*Tau*psi+tf^2*psi^2*Tau-2*tf^2*Tau+sigma*Phi;

f[1] := -2*tf^2*psi*Tau-4*k_2*psi^2*Tau-4*k_2*Tau-2*tf^2*psi^3*Tau-2*sigma*Phi*psi-2*beta*Phi

f[2] := alpha+sigma*Phi-gamma-tf^2*Tau+k_2*psi*Tau

f[3] := 3*k_2*psi*Tau+tf^2*psi^2*Tau-2*tf^2*Tau+sigma*Phi

>    sol1 := solve({f[2]=0,f[3]=0},{Tau,Phi});
 subs({Tau=subs(sol1,Tau),Phi=subs(sol1,Phi)},f[1]):
  simplify(%):
   numer(%)/2/(-alpha+gamma):
    sol2 := solve(%=0,psi);
 

sol1 := {Tau = -(-alpha+gamma)/(2*k_2*psi+tf^2*psi^2-tf^2), Phi = (-alpha+gamma)*(3*k_2*psi+tf^2*psi^2-2*tf^2)/((2*k_2*psi+tf^2*psi^2-tf^2)*sigma)}

sol2 := 1/2*(3*tf^2*sigma-3*beta*k_2+sqrt(9*tf^4*sigma^2-2*tf^2*sigma*beta*k_2+9*beta^2*k_2^2+8*beta^2*tf^4+8*k_2^2*sigma^2))/(beta*tf^2+k_2*sigma), 1/2*(3*tf^2*sigma-3*beta*k_2-sqrt(9*tf^4*sigma^2-2*t...
sol2 := 1/2*(3*tf^2*sigma-3*beta*k_2+sqrt(9*tf^4*sigma^2-2*tf^2*sigma*beta*k_2+9*beta^2*k_2^2+8*beta^2*tf^4+8*k_2^2*sigma^2))/(beta*tf^2+k_2*sigma), 1/2*(3*tf^2*sigma-3*beta*k_2-sqrt(9*tf^4*sigma^2-2*t...

Normalization of the time to tf  and the intensity to beta  allows simple plotting of the obtained result:  

>    plot({subs( {beta=1,tf=1,sigma=1},sol2[1] ),subs( {beta=1,tf=1,sigma=1},sol2[2] )},k_2=-100..10,axes=boxed,view=-10..1, title=`chirp vs. GDD`);

[Maple Plot]

To plot the pulse duration and its intensity we have to take into account the dependence of alpha  on the pulse energy. However for the sake of simplification we suppose alpha =const< gamma  (see previous section). Then  

>    plot(subs( {beta=1,tf=1,sigma=1,gamma=0.05, alpha=0.04},subs(psi=sol2[2],1/sqrt(subs(sol1,Tau))) ),k_2=-100..10,axes=boxed, title=`pulse width vs. GDD`);

[Maple Plot]

Only solution with psi >0 in the region of the negative GDD and psi <0 for the positive GDD (green curve) has a physical meaning because it corresponds to the positive square of the pulse width 1/ tau . The existence of the pulse duration minimum in the vicinity of zero GDD pays a very important role in the pulse shortening technique based on the creation of appropriate negative GDD in the laser cavity.

Now, we shall consider the evolution of ultrashort pulse parameters on the basis of the obtained system of ODE. Also, this allows to analyse the ultrashort pulse stability in the framework of our model. We suppose to solve the system by the standard operator DEplot. Let's normalize sigma  and beta  to 1,7* 10^(-12)   cm^2 /W, times to t[f]  (2,5 fs for Ti: sapphire laser), then xi  = 0.0018. The fundamental step is the assumption about saturation of the Kerr nonlinearity:

sigma  = sigma[0] (1 - rho[0]^2*sigma[0]/2  ),

beta  =   beta[0] (1 - rho[0]^2*beta[0]/2  ),

where sigma[0]  and beta[0]  are the unsaturated nonlinear parameters.

>    #procedure for solution of the obtained system of ODE

ODE_plot := proc(alphamx,gam,sigma0,beta0,Tr,Pump,xi,disp,tg,n)
 sigma := sigma0*(1 - sigma0*rho0(z)^2/2 ):
  beta := beta0*(1 - beta0*rho0(z)^2/2 ):
   sys := [D(alpha)(z) = alpha(z)*exp(-2*xi*rho0(z)^2/tau(z)-1/Tr-Pump)+Pump*alphamx*(1-exp(-1/Tr-Pump))/(Pump+1/Tr)-alpha(z), \
D(psi)(z) = -4*disp*tau(z)^2-2*tg^2*psi(z)*tau(z)^2-4*disp*psi(z)^2*tau(z)^2-2*beta*rho0(z)^2-2*beta*rho0(z)^2*psi(z)^2-2*tg^2*psi(z)^3*tau(z)^2, \
D(rho0)(z) = sigma*rho0(z)^3-gam*rho0(z)-tg^2*rho0(z)*tau(z)^2+alpha(z)*rho0(z)+disp*rho0(z)*psi(z)*tau(z)^2, \
D(tau)(z) = -2*tg^2*tau(z)^3+sigma*rho0(z)^2*tau(z)+3*disp*tau(z)^3*psi(z)+beta*rho0(z)^2*psi(z)*tau(z)+tg^2*psi(z)^2*tau(z)^3]:

DEplot(sys,[rho0(z),tau(z),psi(z),alpha(z)],z=0..n,[[rho0(0)=0.001,tau(0)=0.01,alpha(0)=0,psi(0)=0]],stepsize=1,scene=[z,rho0(z)],method=classical[foreuler],axes=FRAME,linecolor=BLACK):

end:

Warning, `sigma` is implicitly declared local to procedure `ODE_plot`

Warning, `beta` is implicitly declared local to procedure `ODE_plot`

Warning, `sys` is implicitly declared local to procedure `ODE_plot`

The next figure demonstrates the autooscillations of pulse amplitude (quasi-breezer behavior).

>    display(ODE_plot(0.5,0.05,10,1,300,0.0004,0.0018,-10,1,15000));

[Maple Plot]

The character of the pulse evolution strongly depends on the correlations between system's parameters. For example, next figure demonstrates the pulse stabilization due to negative dispersion growth.

>    display(ODE_plot(0.5,0.05,10,1,300,0.0004,0.0018,-20,1,15000));

[Maple Plot]

But the pumping growth produces the irregular autooscillations.

>    display(ODE_plot(0.5,0.05,10,1,300,0.00047,0.0018,-20,1,5000));

[Maple Plot]

The next parameter's set produces the chaotic oscillations:

>    display(ODE_plot(0.5,0.05,1,0,300,0.0004,0.0018,0,1,8000));

[Maple Plot]

The pulse parameters (amplitude and inverse pulse duration) corresponding to irregular oscillations can be shown on the basis of the iteration procedure, which realizes the direct Euler method for the solution of the described above ODE system.

>    # Attention! This block can take a lot of CPU-time
iterations := proc(iter)
 alphamx := 0.5:
   gam := 0.05:
     sigma0 := 1:
       beta0 := 0:
         Tr := 300:
            Pump := 0.0004:
         xi := 0.0018:
       disp := 0:
     tg := 1:
   rho0n:=0.001;  
 taun:=0.01;
    alphan:=0;
      psin:=0;
 for m from 1 to iter do
    rho0old:=rho0n;   
       tauold:=taun;
       psiold:=psin;
       alphaold:=alphan;
    sigma := evalhf(sigma0*(1 - sigma0*rho0old^2/2 )):
       beta := evalhf(beta0*(1 - beta0*rho0old^2/2 )):
    alphan := evalhf( alphaold*exp(-2*xi*rho0old^2/tauold-1/Tr-Pump)+Pump*alphamx*(1-exp(-1/Tr-Pump))/(Pump+1/Tr));
    psin := evalhf(psiold-4*disp*tauold^2-2*tg^2*psiold*tauold^2-4*disp*psiold^2*tauold^2-2*beta*rho0old^2-2*beta*rho0old^2*psiold^2-2*tg^2*psiold^3*tauold^2);
    rho0n := evalhf(rho0old+sigma*rho0old^3-gam*rho0old-tg^2*rho0old*tauold^2+alphaold*rho0old+disp*rho0old*psiold*tauold^2);
    taun := evalhf(tauold-2*tg^2*tauold^3+sigma*rho0old^2*tauold+3*disp*tauold^3*psiold+beta*rho0old^2*psiold*tauold+tg^2*psiold^2*tauold^3);

if m = iter then pts := [rho0n, taun] fi;

    od;
    pts
 end:

PLOT(seq(POINTS(iterations(i)), i=9800 .. 10000), SYMBOL(POINT));

Warning, `alphamx` is implicitly declared local to procedure `iterations`

Warning, `gam` is implicitly declared local to procedure `iterations`

Warning, `sigma0` is implicitly declared local to procedure `iterations`

Warning, `beta0` is implicitly declared local to procedure `iterations`

Warning, `Tr` is implicitly declared local to procedure `iterations`

Warning, `Pump` is implicitly declared local to procedure `iterations`

Warning, `xi` is implicitly declared local to procedure `iterations`

Warning, `disp` is implicitly declared local to procedure `iterations`

Warning, `tg` is implicitly declared local to procedure `iterations`

Warning, `rho0n` is implicitly declared local to procedure `iterations`

Warning, `taun` is implicitly declared local to procedure `iterations`

Warning, `alphan` is implicitly declared local to procedure `iterations`

Warning, `psin` is implicitly declared local to procedure `iterations`

Warning, `m` is implicitly declared local to procedure `iterations`

Warning, `rho0old` is implicitly declared local to procedure `iterations`

Warning, `tauold` is implicitly declared local to procedure `iterations`

Warning, `psiold` is implicitly declared local to procedure `iterations`

Warning, `alphaold` is implicitly declared local to procedure `iterations`

Warning, `sigma` is implicitly declared local to procedure `iterations`

Warning, `beta` is implicitly declared local to procedure `iterations`

Warning, `pts` is implicitly declared local to procedure `iterations`

[Maple Plot]

This is the so-called strange attractor, i. e. the chaotic attracting manifold: the pulse parameters are changed chaotically but within the limited range.

Thus, the pulse oscillations in the Kerr-lens mode-locked laser were analyzed (see J.Jasapara, V.L.Kalashnikov, D.O.Krimer, I.G.Polyko, M.Lenzner, W.Rudolph, "Automodulations in cw Kerr-lens mode-locked solid-state lasers", J. Opt. Soc. Am. B, 17, 319 (2000) , and arXiv: physics/0009020). Such oscillations accompany the negative dispersion decrease and the pump growth and close connect with the nonlinear factors in the system. The regular oscillation is the analogue of the high-order soliton propagation and the irregular one is the analogue of the nonlinear breezer.

Part VIII. Numerical approaches: ultrashort pulse spectrum, stability and multipulsing

Kerr-lens mode-locked Cr:LiSGaF-laser with the Raman self-scattering in active medium

The aberrationless approximation demonstrates the stability loss in the vicinity of zero dispersions. It is necessary to interpret the phenomenon. Moreover, we did not consider a lot of the lasing factors, which affect the ultrashort pulse dynamics in sub-100 fs region, viz. higher-order dispersion, stimulated Raman self-scattering (see Part I), strong fast absorber saturation etc. It is clear, that in order to take into account these phenomena we need the numerical simulations beyond the computer algebra abilities. Hovewer, Maple can help in the preparation of the source code and in the interpretation of the obtained results.

Now we describe the simplest generation model, which is highly useful for the numerical simulations. This model is based on the generalized Landau-Ginzburg equation:

>    restart:
 with(codegen,fortran):
  with('linalg'):
   with(stats):
    with(plots):
 
master1 := diff(a(z,t),z) = (alpha(z) - rho - gamma/(1+sigma*Phi(z,t)))*a(z,t) + diff(a(z,t),t$2) + sum('(-I)^(k+1)*D[k]*diff(a(z,t),t$k)','k'=2..N) - I*Phi(z,t)*a(z,t);

# Phi is the field intensity, gamma is the fast absorber modulation depth, sigma is the inverse saturation intensity, we used the normalization of the field to the self-phase modulation coefficient and the time to the inverse gain bandwidth, D[k] are the dispersion coefficients absorbed the (1/factorial(k)) factors

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the name changecoords has been redefined

master1 := diff(a(z,t),z) = (alpha(z)-rho-gamma/(1+sigma*Phi(z,t)))*a(z,t)+diff(a(z,t),`$`(t,2))+sum((-I)^(k+1)*D[k]*diff(a(z,t),`$`(t,k)),k = 2 .. N)-I*Phi(z,t)*a(z,t)

For the gain evolution we have:

>    master2 := diff(alpha(z),z) = P*(a - alpha(z)) -alpha(z)*Int(Phi(z,t),t=-T[cav]/2..T[cav]/2)/E[s] - T[cav]*alpha(z)/T[r];

master2 := diff(alpha(z),z) = P*(a-alpha(z))-alpha(z)*Int(Phi(z,t),t = -1/2*T[cav] .. 1/2*T[cav])/E[s]-T[cav]*alpha(z)/T[r]

Here a  is the maximal gain for the full population inversion, P  is the dimensionless pump ( Pump  from the previous section), T[cav]  and T[r]  are the cavity period and the gain relaxation time, respectively, E[s]  is the gain saturation energy taking into account the accepted normalization of time and intensity. The best methods for the solution of the system ( master1 , master2 ) is the split-step Fourier method. Then in the Fourier domain we escape to calculate the partial derivatives:

>    op(2,rhs(master1));
 inttrans[fourier](%, t, omega)*F(omega);
print(`F(w) takes into account the shape factors for the gainband and output coupler spectral profiles`);
   subs( N=6,op(3,rhs(master1)) );# we confine the maximal dispersion order
    inttrans[fourier](evalc( % ), t, omega):
      factor(%);

diff(a(z,t),`$`(t,2))

-omega^2*fourier(a(z,t),t,omega)*F(omega)

`F(w) takes into account the shape factors for the gainband and output coupler spectral profiles`

sum((-I)^(k+1)*D[k]*diff(a(z,t),`$`(t,k)),k = 2 .. 6)

-I*omega^2*fourier(a(z,t),t,omega)*(D[6]*omega^4+D[5]*omega^3+D[4]*omega^2+D[3]*omega+D[2])

To define the parameters of the simulation we use the experimental data for Cr:LiSGaF-laser kindly presented by Dr. I.T. Sorokina and Dr. E. Sorokin and written in the corresponding *.txt-files. NOTE! ALL DATA FILES HAVE TO BE PLACED IN YOUR CURRENT DIRECTORY:

>    currentdir();

We used the next experimental setup, which is typical for the Kerr-lens mode-locked lasers (high reflective plane and spherical (focal length f=5 cm) mirrors HR, chirped mirrors Ch, output mirror OC, distances are shown by the numbers in the figure):

[Maple OLE 2.0 Object]

The first step is the analysis of the gain band, which allows to define the gain bandwidth and the parameters of the time normalization ( tf  from the previous section) and the frequency normalization (this is the gain bandwidth).

>    gain_x := readdata(`gain_x.dat`,1,float):# wavelength
 gain_y := readdata(`gain_y.dat`,1,float):# gain cross-section
     n := vectdim(gain_y):
    plot([[gain_x[k],gain_y[k]] $k=1..n],color=red,view=0..3e-20,axes=boxed,title=`gain band profile`);
   max_cross_section := max(gain_y[k] $k=1..n);#gain band maximum
  half_cross_section := evalf(max_cross_section/2);#half of the gain band maximum
 P := array(1..n):
Q := array(1..n):
 for i from 2 to n do
  P[i] := evalf(2*Pi*3*1e10/(gain_x[i]*1e-7)):#transition from wavelength to frequency
   Q[i] := [P[i],gain_y[i]]:
    if gain_y[i]=max_cross_section then X_max := P[i] else fi:
   if gain_y[i]>half_cross_section and gain_y[i-1]<half_cross_section then X_half_1 :=  evalf((P[i-1]+P[i])/2) else fi:
  if gain_y[i]<half_cross_section and gain_y[i-1]>half_cross_section then X_half_2 := evalf((P[i-1]+P[i])/2) else fi:
 od:
print(`position of the gain maximum:`);
X_max;
print(`position of the first half of maximum:`);
 X_half_1;
print(`position of the second half of maximum:`);
  X_half_2;
print(`bandwidth:`);
   bandwidth := evalf(abs(X_half_2-X_half_1));
print(`inverse bandwidth for Gaussian approximation [s]:`);
    minimal_pulse_width:=evalf(4*ln(2)/bandwidth);
for i from 1 to n do
 P[i] := evalf((2*Pi*3*1e10/(gain_x[i]*1e-7)-X_max)/bandwidth):
  Q[i] := [P[i],gain_y[i]]: od:
   j := 'j':
     plot([Q[j] $j=1..n],axes=BOXED, color=red, title=`gain cross section versus normalized frequency`,view=0..3e-20,color=blue);

[Maple Plot]

max_cross_section := .2926e-19

half_cross_section := .1463000000e-19

`position of the gain maximum:`

.2245909122e16

`position of the first half of maximum:`

.2476565668e16

`position of the second half of maximum:`

.1994706028e16

`bandwidth:`

bandwidth := .481859640e15

`inverse bandwidth for Gaussian approximation [s]:`

minimal_pulse_width := .5753934325e-14

[Maple Plot]

The similar manipulations are performed for the output coupler. The fit-approximation gives the spectral shape factor for the output mirror.

>    Out_x := readdata(`out_x.dat`,1,float):
 Out_y := readdata(`out_y.dat`,1,float):
  n := vectdim(Out_y):
   plot([[Out_x[k],Out_y[k]] $k=1..n],color=red,axes=boxed,title=`experimental reflection profile`);
    P0 := array(1..n):
     Q0 := array(1..n):
      for i from 1 to n do
     P0[i] := evalf((2*Pi*3*1e10/(Out_x[i]*1e-7)-X_max)/bandwidth):#transition from wavelength to frequency
   Q0[i] := evalf(1-Out_y[i]):
 od:
f1 := plot([[P0[k],Q0[k]] $k=1..n],color=red):#experimental output loss profile in the dimensionless frequency domain
 eq0 := fit[leastsquare[[x,y], y=a*x^6+b*x^5+c*x^4+d*x^3+e*x^2+f*x+g]]([[P0[k] $k=1..n], [Q0[k] $k=1..n]]);# fit-approximation
  Q0 := [subs(x=P0[k],rhs(eq0)) $k=1..n]:
    f2 := plot([[P0[k],Q0[k]] $k=1..n],color=blue):
     display(f1,f2,axes=boxed,title=`comparison of the experimental and approximated profiles`);

[Maple Plot]

eq0 := y = 1.800575680*x^6-.5353754671e-1*x^5-.1603422410*x^4-.2641254098e-2*x^3+.6981141739e-1*x^2-.1534877123e-2*x+.9038433676e-2
eq0 := y = 1.800575680*x^6-.5353754671e-1*x^5-.1603422410*x^4-.2641254098e-2*x^3+.6981141739e-1*x^2-.1534877123e-2*x+.9038433676e-2

[Maple Plot]

The first picture presents the experimental data, the second results from the fit-approximation ( eq0 ) and the transition to the dimensionless frequencies .

Now let's find the group-delay dispersion (GDD) in the active medium from the measured data:

>    #crystal length is 0.8 cm for double pass
GDD_cry_x := readdata(`gdd_crystal_x.dat`,1,float):
 GDD_cry_y := readdata(`gdd_crystal_y.dat`,1,float):
  n := vectdim(GDD_cry_y):
   fig1 := plot([[GDD_cry_x[k],0.8*GDD_cry_y[k]] $k=1..n],color=red,axes=boxed):
    display(fig1,title=`measured GDD in active crystal`);
     P1 := array(1..n):
      Q1 := array(1..n):
     for i from 1 to n do
    P1[i] := evalf((2*Pi*3*1e10/(GDD_cry_x[i]*1e-7)-X_max)/bandwidth):#transition from wavelength to frequency
  od:
 f1 := plot([[P1[k],0.8*(bandwidth*10^(-15))**2*GDD_cry_y[k]]\ $k=1..n],color=red):
eq1 := fit[leastsquare[[x,y], y=a*x^2+b*x+c]]([[P1[k] $k=1..n], evalf(0.8*(bandwidth*10^(-15))**2)*GDD_cry_y]);# fit-approximation
 Q1 := [subs(x=P1[k],rhs(eq1)) $k=1..n]:
  f2 := plot([[P1[k],Q1[k]] $k=1..n],color=blue,axes=boxed):
   display(f1,f2,title=`GDD fit-approximation in frequency domain`);

[Maple Plot]

eq1 := y = 5.557558914*x^2+21.42668994*x+53.71773838

[Maple Plot]

eq1  is the result of the fit-approximation.

The main devices for the GDD manipulation are the chirp mirrors. Their parameters are:

>    #Ch1 (double pass)
GDD_Ch1_x := readdata(`gdd_ch1_x.dat`,1,float):
 GDD_Ch1_y := readdata(`gdd_ch1_y.dat`,1,float):
  n := vectdim(GDD_Ch1_y):
   plot([[GDD_Ch1_x[k],2*GDD_Ch1_y[k]] $k=1..n],color=red,axes=boxed,title=`measured GDD for Ch1`);
     P2 := array(1..n-4):
      Q2 := array(1..n-4):
     for i from 1 to n-4 do
    P2[i] := evalf((2*Pi*3*1e10/(GDD_Ch1_x[i]*1e-7)-X_max)/bandwidth):#transition from wavelength to frequency
   Q2[i] := 2*(bandwidth*10^(-15))**2*GDD_Ch1_y[i] od:
  f1 := plot([[P2[k],Q2[k]] $k=1..n-4],color=red):
 eq2 := fit[leastsquare[[x,y], y=a*x^6+b*x^5+c*x^4+d*x^3+e*x^2+f*x+g]]([[P2[k] $k=1..n-4], [Q2[k] $k=1..n-4]]);
Q2 := [subs(x=P2[k],rhs(eq2)) $k=1..n-4]:
 f2 := plot([[P2[k],Q2[k]] $k=1..n-4],color=blue):
  display(f1,f2,axes=boxed,title=`fit-approximation in frequency domain`);

[Maple Plot]

eq2 := y = -4487.256771*x^6+8899.324767*x^5-4466.632623*x^4-612.3714657*x^3+692.5781343*x^2-17.99769657*x-37.66103148

[Maple Plot]

>    #Ch2 (four passes)
GDD_Ch2_x := readdata(`gdd_ch2_x.dat`,1,float):
 GDD_Ch2_y := readdata(`gdd_ch2_y.dat`,1,float):
  n := vectdim(GDD_Ch2_y):
   plot([[GDD_Ch2_x[k],4*GDD_Ch2_y[k]] $k=1..n],color=red,axes=boxed,title=`measured GDD for Ch2`);
     P3 := array(1..n):
      Q3 := array(1..n):
       for i from 1 to n do
      P3[i] := evalf((2*Pi*3*1e10/(GDD_Ch2_x[i]*1e-7)-X_max)/bandwidth):#transition from wavelength to frequency
     od:
    f1 := plot([[P3[k],4*(bandwidth*10^(-15))**2*GDD_Ch2_y[k]] $k=1..n],color=red):
   eq3 := fit[leastsquare[[x,y],\ y=a*x^6+b*x^5+c*x^4+d*x^3+e*x^2+f*x+g]]([[P3[k] $k=1..n],\ evalf(4*(bandwidth*10^(-15))**2)*GDD_Ch2_y]);
  Q3 := [subs(x=P3[k],rhs(eq3)) $k=1..n]:
 f2 := plot([[P3[k],Q3[k]] $k=1..n],color=blue):
display(f1,f2,axes=boxed,title=`fit-approximation in frequency domain`);

[Maple Plot]

eq3 := y = -2051.277573*x^6+4260.310370*x^5-3057.192323*x^4+565.9468050*x^3+385.5186662*x^2-74.89842760*x-73.37050894

[Maple Plot]

And, at the last, the GDD in output coupler and high-reflective mirrors:

>    #Oc (single pass)
 GDD_Oc_x := readdata(`gdd_oc_x.dat`,1,float):
  GDD_Oc_y := readdata(`gdd_oc_y.dat`,1,float):
   n := vectdim(GDD_Oc_y):
    plot([[GDD_Oc_x[k],GDD_Oc_y[k]] $k=1..n],color=red,axes=boxed,title=`measured GDD for OC`);
      P4 := array(1..n):
       Q4 := array(1..n):
      for i from 1 to n do
     P4[i] := evalf((2*Pi*3*1e10/(GDD_Oc_x[i]*1e-7)-X_max)/bandwidth):#transition from wavelength to frequency
    od:
   f1 := plot([[P4[k],GDD_Oc_y[k]*(bandwidth*10^(-15))**2] $k=1..n],color=red):
  eq4 := fit[leastsquare[[x,y], y=a*x^6+b*x^5+c*x^4+d*x^3+e*x^2+f*x+g]]([[P4[k] $k=1..n], GDD_Oc_y*evalf((bandwidth*10^(-15))**2)]);
 Q4 := [subs(x=P4[k],rhs(eq4)) $k=1..n]:
f2 := plot([[P4[k],Q4[k]] $k=1..n],color=blue):
display(f1,f2,axes=boxed,title=`fit-approximation in frequency domain`);

[Maple Plot]

eq4 := y = 40.56991627*x^6+226.5828840*x^5-15.88361104*x^4-6.140885675*x^3+1.492992122*x^2+1.204668103*x-.1174906766

[Maple Plot]

>    #HR (four passes)
GDD_Hr_x := readdata(`gdd_hr_x.dat`,1,float):
 GDD_Hr_y := readdata(`gdd_hr_y.dat`,1,float):
  n := vectdim(GDD_Hr_y):
   plot([[GDD_Hr_x[k],GDD_Hr_y[k]] $k=1..n],color=red,axes=boxed,title=`measured GDD for HR`);
     P5 := array(1..n):
      Q5 := array(1..n):
       for i from 1 to n do
      P5[i] := evalf((2*Pi*3*1e10/(GDD_Hr_x[i]*1e-7)-X_max)/bandwidth):#transition from wavelength to frequency
     od:
    f1 := plot([[P5[k],GDD_Hr_y[k]*4*(bandwidth*10^(-15))**2] $k=1..n],color=red):
   eq5 := fit[leastsquare[[x,y], y=a*x^6+b*x^5+c*x^4+d*x^3+e*x^2+f*x+g]]([[P5[k] $k=1..n], GDD_Hr_y*evalf(4*(bandwidth*10^(-15))**2)]);
  Q5 := [subs(x=P5[k],rhs(eq5)) $k=1..n]:
 f2 := plot([[P5[k],Q5[k]] $k=1..n],color=blue):
display(f1,f2,axes=boxed,title=`fit-approximation in frequency domain`);

[Maple Plot]

eq5 := y = 371.6378105*x^6+1859.815396*x^5-146.0722578*x^4-186.9742695*x^3+12.76215250*x^2+13.36697439*x-.5561160074

[Maple Plot]

Now, as a result of the obtained fit-approximations, we have the normalized net-GDD with corresponding FORTRAN-code for simulation:

>    end_res := evalf(rhs(eq1)+rhs(eq2)+rhs(eq3)+rhs(eq4)+rhs(eq5));
 plot(%,x=-0.45..0.8,axes=boxed,title=`normalized to tf net-GDD`);
  codegen[fortran](end_res);

end_res := -7685.780815*x^4+1097.909503*x^2-239.5398159*x^3-6126.326617*x^6+15246.03342*x^5-57.98740873-56.89779174*x

[Maple Plot]

      t0 = -0.7685781E4*x**4+0.109791E4*x**2-0.2395398E3*x**3-0.6126327E

     #4*x**6+0.1524603E5*x**5-0.5798741E2-0.5689779E2*x

Or in the usual co-ordinates:

>    P6 := array(1..100):
 Q6 := array(1..100):
  for i from 1 to 100 do
   P6[i] := 2*Pi*3e10*1e7/(bandwidth*(-0.4+0.8*i/100)+X_max):# from frequency to wavelength [in nm]
    Q6[i] := evalf(subs(x=-0.4+0.8*i/100,end_res/(bandwidth*1e-15)^2)):
     od:
      plot([[P6[k],Q6[k]] $k=1..100],color=red,axes=BOXED,title=`net-GDD [fs^2] vs. wavelength [nm]`);

[Maple Plot]

The experimentally observed ultrashort-pulse spectrum is:

>    Spec_x := readdata(`LiSGaF_x.dat`,1,float):
 Spec_y := readdata(`LiSGaF_y.dat`,1,float):
  n := vectdim(Spec_y):
   plot([[Spec_x[k],Spec_y[k]] $k=1..n],color=red,axes=boxed,title=`experimental spectrum (a.u. vs. wavelength)`);
    P5 := array(1..n):
     Q5 := array(1..n):
    for i from 1 to n do
   P5[i] := evalf((2*Pi*3*1e10/(Spec_x[i]*1e-7)-X_max)/bandwidth):#transition from wavelength to frequency
  Q5[i] := Spec_y[i]:
 od:
plot([[P5[k],Q5[k]] $k=1..n],color=green,axes=boxed,title=`experimental spectrum (a.u. vs/ dimensionless frequency)`);

[Maple Plot]

[Maple Plot]

We can see a pronounced red shift relatively to the gain band center. The narrow line is the so-called side-band or dispersive wave.

The typical results of the numerical simulations based on the described above model are presented in the next figure (power is given in the arbitrary units).

>    Spec1_x := readdata(`num1_x.dat`,1,float):
 Spec1_y := readdata(`num1_y.dat`,1,float):
  Spec2_x := readdata(`num2_x.dat`,1,float):
   Spec2_y := readdata(`num2_y.dat`,1,float):
    Spec3_x := readdata(`num3_x.dat`,1,float):
     Spec3_y := readdata(`num3_y.dat`,1,float):
      Spec4_x := readdata(`num4_x.dat`,1,float):
       Spec4_y := readdata(`num4_y.dat`,1,float):
        Spec5_x := readdata(`num5_x.dat`,1,float):
         Spec5_y := readdata(`num5_y.dat`,1,float):
          Spec6_x := readdata(`num6_x.dat`,1,float):
           Spec6_y := readdata(`num6_y.dat`,1,float):
          n := vectdim(Spec1_y);
         p1 := plot([[Spec1_x[k],Spec1_y[k]] $k=1..n/4],color=black):
        n := vectdim(Spec2_y);
       p2 := plot([[Spec2_x[k],Spec2_y[k]] $k=3*(n-1)/4..n],color=black):
      n := vectdim(Spec3_y);
     p3 := plot([[Spec3_x[k],2.5*Spec3_y[k]] $k=3*(n-1)/4..n],color=red):
    n := vectdim(Spec4_y);
   p4 := plot([[Spec4_x[k],2.5*Spec4_y[k]] $k=1..n/4],color=red):
  n := vectdim(Spec5_y);
 p5 := plot([[Spec5_x[k],25*Spec5_y[k]] $k=3*(n-1)/4..n],color=blue):
n := vectdim(Spec6_y);
 p6 := plot([[Spec6_x[k],25*Spec6_y[k]] $k=1..n/4],color=blue):
  display(p1,p2,p3,p4,p5,p6,view=0..1,axes=BOXED,title=`numerical spectra (a.u.)`);

n := 4096

n := 4097

n := 4097

n := 4096

n := 4097

n := 4096

[Maple Plot]

In the "natural" co-ordinates we have:

>    n := vectdim(Spec1_y);
 p1 := plot([[2*Pi*3e10*1e7/(bandwidth*Spec1_x[k]+X_max),Spec1_y[k]] $k=1..n/4],color=black):
  n := vectdim(Spec2_y);
   p2 := plot([[2*Pi*3e10*1e7/(bandwidth*Spec2_x[k]+X_max),Spec2_y[k]] $k=3*(n-1)/4..n],color=black):
    n := vectdim(Spec3_y);
     p3 := plot([[2*Pi*3e10*1e7/(bandwidth*Spec3_x[k]+X_max),2.5*Spec3_y[k]] $k=3*(n-1)/4..n],color=red):
      n := vectdim(Spec4_y);
     p4 := plot([[2*Pi*3e10*1e7/(bandwidth*Spec4_x[k]+X_max),2.5*Spec4_y[k]] $k=1..n/4],color=red):
    n := vectdim(Spec5_y);
   p5 := plot([[2*Pi*3e10*1e7/(bandwidth*Spec5_x[k]+X_max),25*Spec5_y[k]] $k=3*(n-1)/4..n],color=blue):
  n := vectdim(Spec6_y);
 p6 := plot([[2*Pi*3e10*1e7/(bandwidth*Spec6_x[k]+X_max),25*Spec6_y[k]] $k=1..n/4],color=blue):
display(p1,p2,p3,p4,p5,p6,view=0..1,axes=BOXED,title=`pulse spectrum vs. wavelength [nm]`);

n := 4096

n := 4097

n := 4097

n := 4096

n := 4097

n := 4096

[Maple Plot]

The black curve corresponds to the soliton propagation without lasing factors, i.e. in the absence of gain, loss saturation and spectral filtering. The high-order dispersion slightly transforms the spectrum of the soliton, but there is not the visible frequency shift. Perhaps, the soliton duration (169 fs) is too large for the high-order dispersions' manifestation. But we can not change the pulse duration for fixed GDD. Such possibility is opened by lasing in the presence of the gain and saturable loss. The red and blue curves correspond to the above described laser model with 1.2 W absorbed pump power for 20x30 mu^2  pump mode and gaussian mode with 25 mu m diameter, correspondingly. The pulse durations in these cases are 31 and 27 fs, correspondingly. We can see the appearance of spectral spikes (dispersion waves), which locate near from zeros and 2 Pi m - values of GDD. The domain of the large gradient of GDD in the red spectral region is filled by such spikes. But the pulses' spectra have the very small frequency shifts from gain band maximum, although there is the spectral "shoulder" in the red region. The last corresponds to local GDD extremum near from 883 nm (see above). We had performed the various manipulations with the pump and the fast absorber saturation intensity, but as a result, the self-frequency shift can not be obtained only due to high-order dispersion.

So, there is some additional mechanism of the pulse spectrum shift. As the pulse duration is greater than 10 fs, the nonlinear dispersion can not cause such shift. Therefore we have to investigate the stimulated Raman scattering influence on the pulse spectrum.

Let assume, that the frequency shift results from the stimulated Raman scattering in the active crystal. The vibrational amplitude Q  in the dependence on the pump and signal spectral amplitudes A_m  and A_n , respectively,   obeys the following equation (see H.A.Haus, I.Sorokina, E.Sorokin, J. Opt. Soc. Am. B, 15 , 223 (1998) ):

>    restart:

 eq1 := diff(Q(t),t$2)+2*diff(Q(t),t)/T+Omega^2*Q(t)=mu*A_m*exp(I*m*omega*t)*conjugate(A_n)*exp(-I*n*omega*t);
  Q = subs({_C1=0,_C2=0},rhs(dsolve(eq1,Q(t))));
   amp_Q = Sum(Sum(expand(numer(rhs(%))/expand(denom(rhs(%)))/exp(-I*t*omega*(-m+n))),n=-N/2..N/2),m=-N/2..N/2);#here we supposed that the pulse width << T (T is the phonon relaxation time)

eq1 := diff(Q(t),`$`(t,2))+2*diff(Q(t),t)/T+Omega^2*Q(t) = mu*A_m*exp(m*omega*t*I)*conjugate(A_n)*exp(-I*n*omega*t)

Q = mu*A_m*exp(omega*t*(m-n)*I)*conjugate(A_n)*T/(T*Omega^2+2*I*m*omega-2*I*n*omega-T*omega^2*m^2+2*T*omega^2*m*n-T*omega^2*n^2)

amp_Q = Sum(Sum(mu*A_m*conjugate(A_n)*T/(T*Omega^2+2*I*m*omega-2*I*n*omega-T*omega^2*m^2+2*T*omega^2*m*n-T*omega^2*n^2),n = -1/2*N .. 1/2*N),m = -1/2*N .. 1/2*N)

Here m  and  n  are the mode numbers, omega  is the frequency interval between field spectral components, Omega  is the Raman frequency, T  is the relaxation time, N  is the number of the frequency components in the field spectrum (in the case of our numerical simulations N = 2^13 ), mu  is the positive real number expressing photon-phonon coupling. Note, that the last expression for the amplitude of the vibrational oscillations (the frequency of these oscillations is   (m-n)* omega ) can be re-written as

>    amp_Q = Sum(Sum(mu*A_m*conjugate(A_n)/(Omega^2-2*I*omega*(m-n)/Tr-omega^2*(n-m)^2),n = -N/2 .. N/2),m = -N/2 .. N/2);

amp_Q = Sum(Sum(mu*A_m*conjugate(A_n)*(Omega^2-omega^2*(n-m)^2+2*I*omega*(m-n)/Tr)/((Omega^2-omega^2*(n-m)^2)^2+4*omega^2*(m-n)^2/(Tr^2)),n = -N/2 .. N/2),m = -N/2 .. N/2);

amp_Q = Sum(Sum(mu*A_m*conjugate(A_n)/(Omega^2+-2*I*omega*(m-n)/Tr-omega^2*(-m+n)^2),n = -1/2*N .. 1/2*N),m = -1/2*N .. 1/2*N)

amp_Q = Sum(Sum(mu*A_m*conjugate(A_n)*(Omega^2-omega^2*(-m+n)^2+2*I*omega*(m-n)/Tr)/((Omega^2-omega^2*(-m+n)^2)^2+4*omega^2*(m-n)^2/(Tr^2)),n = -1/2*N .. 1/2*N),m = -1/2*N .. 1/2*N)

Now we have to define the values of the used parameters. There are three Raman lines in LiSGaF with following characteristics: Omega =551, 349, 230 cm^(-1) , 1/T  = 6.2, 7.6, 4.2 cm^(-1)

>    Omega1 := evalf(2*Pi*3*10^10*551):#[Hz]
 Omega2 := evalf(2*Pi*3*10^10*349):#[Hz]
  Omega3 := evalf(2*Pi*3*10^10*230):#[Hz]
   bandwidth := .481859640e15:#[Hz] the normalization for frequencies
    Omega1 := evalf(Omega1/bandwidth);#normalized Omega1
     Omega2 := evalf(Omega2/bandwidth);#normalized Omega2
      Omega3 := evalf(Omega3/bandwidth);#normalized Omega3
       omega=evalf(2*Pi*bandwidth/N):#[Hz]
        print(`normalized w:`);
         2*Pi/N;#normalyzed omega
         T1 := evalf(1/(2*Pi*3*10^10*6.2)):#[s]
          T2 := evalf(1/(2*Pi*3*10^10*7.6)):#[s]
         T3 := evalf(1/(2*Pi*3*10^10*4.2)):#[s]
        T1 := evalf(T1*bandwidth);#normalized relaxation time
       T2 := evalf(T2*bandwidth);#normalized relaxation time
      T3 := evalf(T3*bandwidth);#normalized relaxation time
     solve(gain_s=6*omega_s*chi/n_s/c,chi):#if permittivity chi in [cm^2/W], gain_s is the Raman signal gain
    mu := simplify(3*omega_s*%*2*Omega/n_s/c/T);
   mu1 := subs({Omega = Omega1,T = T1,gain_s=evalf(2.5*1.2e-10),beta= .3379192098e-11},mu*0.8/beta);#normalized
 mu2 := subs({Omega = Omega2,T = T2,gain_s=evalf(.185*1.2e-10),beta= .3379192098e-11},mu*0.8/beta);#normalized
mu3 := subs({Omega = Omega3,T = T3,gain_s=evalf(.15*1.2e-10),beta= .3379192098e-11},mu*0.8/beta);#normalized

Omega1 := .2155421299

Omega2 := .1365230551

Omega3 := .8997221396e-1

`normalized w:`

2*Pi/N

T1 := 412.3136751

T2 := 336.3611560

T3 := 608.6535205

mu := gain_s*Omega/T

mu1 := .3712810569e-1

mu2 := .2133193454e-2

mu3 := .6299236009e-3

So, we can investigate the field evolution on the basis of the following equation:

>    Diff(A_n(z),z) = Sum(mu*conjugate(A_m)*A_n*(I*(Omega^2-omega^2*(n-m)^2)+2*omega*(m-n)/Tr)/((Omega^2-omega^2*(n-m)^2)^2+4*omega^2*(m-n)^2/(Tr^2))*A_m,m = -N/2 .. N/2);

Diff(A_n(z),z) = A_n*Sum(mu*abs(A_m)^2*(I*(Omega^2-omega^2*(n-m)^2)+2*omega*(m-n)/Tr)/((Omega^2-omega^2*(n-m)^2)^2+4*omega^2*(m-n)^2/(Tr^2)),m = -N/2 .. N/2);

Diff(A_n(z),z) = Sum(gain_s*Omega*conjugate(A_m)*A_n*((Omega^2-omega^2*(-m+n)^2)*I+2*omega*(m-n)/Tr)*A_m/(T*((Omega^2-omega^2*(-m+n)^2)^2+4*omega^2*(m-n)^2/(Tr^2))),m = -1/2*N .. 1/2*N)

Diff(A_n(z),z) = A_n*Sum(gain_s*Omega*abs(A_m)^2*((Omega^2-omega^2*(-m+n)^2)*I+2*omega*(m-n)/Tr)/(T*((Omega^2-omega^2*(-m+n)^2)^2+4*omega^2*(m-n)^2/(Tr^2))),m = -1/2*N .. 1/2*N)

Here   n  is the "signal" mode, m  is the "pump" mode, degenerate case m = n  corresponds to the pure self-phase modulation, Stokes signal shift m>n  corresponds to an amplification, anti-Stokes shift m < n  corresponds to a loss of signal wave. Because of the Raman line is narrow in the comparison with pulse spectrum (see normalized T ), we can re-write the expressions:

>    Diff(A_n(z),z) = I*A_n*Sum(mu*abs(A_m)^2/(Omega^2+2*I*omega*(m-n)/Tr-omega^2*(n-m)^2),m = -N/2 .. N/2);
Diff(A_n(z),z) = I*A_n*Sum(mu*abs(A_m)^2/((Omega-omega*(n-m))*(Omega+omega*(n-m))+2*I*omega*(m-n)/Tr),m = -N/2 .. N/2);
Diff(A_n(z),z) = I*A_n*Sum(mu*abs(A_m)^2/(2*Omega*(Omega-omega*(n-m))+2*I*Omega/Tr),m = -N/2 .. N/2);

Diff(A_n(z),z) = A_n*Sum(gain_s*Omega*abs(A_m)^2/(T*(Omega^2-omega^2*(-m+n)^2+2*I*omega*(m-n)/Tr)),m = -1/2*N .. 1/2*N)*I

Diff(A_n(z),z) = A_n*Sum(gain_s*Omega*abs(A_m)^2/(T*((Omega-omega*(-m+n))*(Omega+omega*(-m+n))+2*I*omega*(m-n)/Tr)),m = -1/2*N .. 1/2*N)*I

Diff(A_n(z),z) = A_n*Sum(gain_s*Omega*abs(A_m)^2/(T*(2*Omega*(Omega-omega*(-m+n))+2*I*Omega/Tr)),m = -1/2*N .. 1/2*N)*I

The last expression results from the assumption T >>1. In this case

>    Diff(A_n(z),z) = I*A_n*mu*abs(A_m)^2*Int((2*Omega*(Omega-x)-2*I*Omega/Tr)/(4*Omega^2*(Omega-x)^2+4*Omega^2/(Tr^2)),x = -infinity .. infinity);

Diff(A_n(z),z) = A_n*gain_s*Omega*abs(A_m)^2*Int((2*Omega*(Omega-x)+-2*I*Omega/Tr)/(4*Omega^2*(Omega-x)^2+4*Omega^2/(Tr^2)),x = -infinity .. infinity)*I/T

In the last expression x  is the frequency difference, A_m  corresponds to the pump intensity for - omega (n-m)= Omega . The contribution of the real part in the integral (the self-phase modulation from the both sides of the Raman line) is equal to 0.

>    -(I*Tr/2/Omega)*Int(1/(x^2+1),x=0..infinity);
  value(%);

-1/2*I*Tr*Int(1/(x^2+1),x = 0 .. infinity)/Omega

-1/4*I*Tr*Pi/Omega

Thus we obtained the simplest expressions for the field evolution:

>    Diff(A_n(z),z) = A_n*gain*Pi*abs(A_m)^2/4;
Diff(A_m(z),z) = -A_m*gain*Pi*abs(A_n)^2/4;

Diff(A_n(z),z) = 1/4*A_n*gain*Pi*abs(A_m)^2

Diff(A_m(z),z) = -1/4*A_m*gain*Pi*abs(A_n)^2

The stimulated Raman gain parameters for numerical simulation are:

>    gain_s1 := evalf(0.8*2.5*1.2e-10/.3379192098e-11);
 gain_s2 := evalf(0.8*.185*1.2e-10/.3379192098e-11);
  gain_s3 := evalf(0.8*.15*1.2e-10/.3379192098e-11);

gain_s1 := 71.02289335

gain_s2 := 5.255694108

gain_s3 := 4.261373601

Additionally we are to take into consideration the spontaneous Raman scattering as a source for the stimulated scattering. The gain coefficients is this case are [ R.L. Sutherland, Handbook of nonlinear optics, New York (1996), p.305 ] :

>    d_sigma := (4*omega_l/3/omega_s)*3*n_s^2*h*omega_s^3*gain_s/(8*Pi^3*c^2*N)/(1-exp(-h*(omega_l-omega_s)/(2*Pi*kb*Tc)));#kb and Tc are the Boltzmann's constant and temperature, correspondingly
 d_sigma1 := evalf(sqrt(subs({kb=1.38*1e-23,Tc=300,omega_s=2*Pi*3e10/.9051e-4,omega_l=2*Pi*3e10/.85e-4,n_s=1.4,h=6.62e-34,gain_s=gain_s1,c=3e10,N=1e20},d_sigma*N)));
  d_sigma2 := evalf(sqrt(subs({kb=1.38*1e-23,Tc=300,omega_s=2*Pi*3e10/.88e-4,omega_l=2*Pi*3e10/.85e-4,n_s=1.4,h=6.62e-34,gain_s=gain_s2,c=3e10,N=1e20},d_sigma*N)));
   d_sigma3 := evalf(sqrt(subs({kb=1.38*1e-23,Tc=300,omega_s=2*Pi*3e10/.87e-4,omega_l=2*Pi*3e10/.85e-4,n_s=1.4,h=6.62e-34,gain_s=gain_s3,c=3e10,N=1e20},d_sigma*N)));

d_sigma := 1/2*omega_l*omega_s^2*n_s^2*h*gain_s/(Pi^3*c^2*N*(1-exp(-1/2*h*(omega_l-omega_s)/(Pi*kb*Tc))))

d_sigma1 := .1280998590e-3

d_sigma2 := .3815471494e-4

d_sigma3 := .3767032764e-4

d_sigma  are the increments of the spontaneous Stokes components (i.e. Raman spontaneous seeds) growth .

As a result of the simulations on the basis of this model, we obtained next spectra:

>    with('linalg'):
 with(plots):
  R_Spec1_x := readdata(`spec1_x.dat`,1,float):
   R_Spec1_y := readdata(`spec1_y.dat`,1,float):
    R_Spec2_x := readdata(`spec2_x.dat`,1,float):
     R_Spec2_y := readdata(`spec2_y.dat`,1,float):
      R_Spec3_x := readdata(`spec3_x.dat`,1,float):
       R_Spec3_y := readdata(`spec3_y.dat`,1,float):
        R_Spec4_x := readdata(`spec4_x.dat`,1,float):
         R_Spec4_y := readdata(`spec4_y.dat`,1,float):
          R_Spec5_x := readdata(`spec5_x.dat`,1,float):
           R_Spec5_y := readdata(`spec5_y.dat`,1,float):
            R_Spec6_x := readdata(`spec6_x.dat`,1,float):
             R_Spec6_y := readdata(`spec6_y.dat`,1,float):
            n := vectdim(R_Spec1_y);
           p1 := plot([[R_Spec1_x[k],R_Spec1_y[k]] $k=1..n/16],color=black):
          n := vectdim(R_Spec2_y);
         p2 := plot([[R_Spec2_x[k],R_Spec2_y[k]] $k=7*(n-1)/8..n],color=black):
        n := vectdim(R_Spec3_y);
       p3 := plot([[R_Spec3_x[k],R_Spec3_y[k]] $k=1..n/16],color=red):
      n := vectdim(R_Spec4_y);
     p4 := plot([[R_Spec4_x[k],R_Spec4_y[k]] $k=7*(n-1)/8..n],color=red):
    n := vectdim(R_Spec5_y);
   p5 := plot([[R_Spec5_x[2*k],R_Spec5_y[2*k]] $k=1..n/32],color=blue):
  n := vectdim(R_Spec6_y);
 p6 := plot([[R_Spec6_x[2*k],R_Spec6_y[2*k]] $k=7*(n-1)/16..n/2],color=blue):
display(p1,p2,p3,p4,p5,p6,axes=boxed,title=`pulse spectrum vs. dimensionless frequency`);

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the name changecoords has been redefined

n := 4096

n := 4097

n := 4096

n := 4097

n := 4095

n := 4097

[Maple Plot]

>    X_max := .2245909122e16:
 bandwidth := .481859640e15:
  n := vectdim(R_Spec1_y):
   p1 := plot([[2*Pi*3e10*1e7/(bandwidth*R_Spec1_x[k]+X_max),R_Spec1_y[k]] $k=1..n/16],color=black):
    n := vectdim(R_Spec2_y):
     p2 := plot([[2*Pi*3e10*1e7/(bandwidth*R_Spec2_x[k]+X_max),R_Spec2_y[k]] $k=7*(n-1)/8..n],color=black):
      n := vectdim(R_Spec3_y):
       p3 := plot([[2*Pi*3e10*1e7/(bandwidth*R_Spec3_x[k]+X_max),R_Spec3_y[k]] $k=1..n/16],color=red):
        n := vectdim(R_Spec4_y):
         p4 := plot([[2*Pi*3e10*1e7/(bandwidth*R_Spec4_x[k]+X_max),R_Spec4_y[k]] $k=7*(n-1)/8..n],color=red):
          n := vectdim(R_Spec5_y):
           p5 := plot([[2*Pi*3e10*1e7/(bandwidth*R_Spec5_x[2*k]+X_max),R_Spec5_y[2*k]] $k=1..n/32],color=blue):
            n := vectdim(R_Spec6_y):
           p6 := plot([[2*Pi*3e10*1e7/(bandwidth*R_Spec6_x[2*k]+X_max),R_Spec6_y[2*k]] $k=7*(n-1)/16..n/2],color=blue):
         display(p1,p2,p3,p4,p5,p6,axes=BOXED,title=`pulse spectrum vs. wavelength [nm]`);

[Maple Plot]

Three different spectra are presented in the figure. Black curve corresponds to the soliton propagation (200 fs pulse duration) in the presence of stimulated Raman scattering. As a result of the propagation, the Stokes component appears at the main Raman frequency. The strong scattering destroys the soliton after 10 000 cavity transitions. In the laser, a balance between all lasing factors stabilizes the ultrashort pulse. But there is a visible red shift of the field spectrum (red and blue curves) due to stimulated Raman scattering. The pulse spectrum can be pushed from the gain band center (red curve, 25 fs pulse duration) as a result of the Raman self-scattering. There is the possibility of the generation of the additional Stokes lines (blue curve, 56 fs). The frequency shift is comparable with the experimental one. Hence, the stimulated Raman scattering is the main source of the Stokes shift of the pulse spectrum in the Cr:LiSGaF Kerr-lens mode-locked laser (see V.L. Kalashnikov, E. Sorokin, I.T. Sorokina, "Mechanisms of spectral shift in ultrashort-pulse laser oscillators", J. Opt. Soc. Am.   18 , 1732 (2001)).

The collaboration between Maple and external numerical simulators (based on the FORTRAN-code in our case) proves to be extremely fruitful: 1) analytical model building (Maple) --> 2) external code generation (Maple) --> 3) calculation of the simulation parameters (Maple) --> 4) external calculations (FORTRAN-code, the external program can be started from the Maple directly through the system  call.) --> 5) data processing (Maple) --> 6) analytical interpretation of the results (Maple).

As an example of the last step, let's consider the problem of the pulse stability in the Kerr-lens mode-locked laser.

Multipulsing and ultrashort pulse stability

We try to shorten the pulse duration and increase its energy. For this aim we tend the net-GDD to zero (see Part VII). As a result, the ultrashort pulse stability can be lost. Let's consider this phenomenon in detail ( V.L. Kalashnikov, E. Sorokin, I.T. Sorokina, "Multipulse Operation and Limits of the Kerr-lens Mode Locking Stability", submitted to IEEE J. Quantum Electron. (2002)). In the framework of the abberationless approximation the stability loss is revealed as the absence of the soliton-like as well as breezer solution (the evolutional equations for the pulse parameters diverge). What is meaning of this divergence?

The answer comes from the numerical simulations based on the above described model. Let's neglect the stimulated Raman scattering and the higher-order dispersions. In this case, the typical results of the simulations in the vicinity of zero GDD are (contour plots of the field intensity logarithm, vertical axes is t , horizontal axes is z ):

[Maple OLE 2.0 Object]

[Maple OLE 2.0 Object]

Quasi-soliton consideration fails due to the appearance of the regular or irregular multiple pulse generation. The boundary of the soliton-like pulse nonstability obtained from the numerical simulation is shown here (the parameters in question can be found in the work of reference):

>    restart:
with(plots):
with(stats):

points_numer_x := [-160,-75,-40,-25,-18,-16,-20,-40,-45,-75,-150]:# GDD is normalized to tf
 points_numer_y := [0.2,0.5,1,2,5,10,20,30,80,200,500]:# sigma is normalized to the self-phase modulation coefficient beta
  statplots[scatterplot](points_numer_x, evalf( map(log10,points_numer_y) ),axes=boxed,color=red,symbol=box):
    display(%,color=red,TEXT([-120,1],'`stable single pulse`')):
  fig1 := display(%,color=blue,TEXT([-40,2.6],'`multipulsing`'),TEXT([-50,-0.6],'`multipulsing`'),title=`logarithm of boundary sigma vs. GDD`):

display(fig1);

Warning, the name changecoords has been redefined

[Maple Plot]

There are the upper and lower on sigma  boundaries defining the transition to multipulsing. There is no single pulse in the vicinity of zero GDD. To interpret this picture let's return to the generalized Landau-Ginzburg equation in the week-nonlinear limit, when sigma*Phi  <<1 (see Part VII). For the steady-state ultrashort pulse propagation we have (time and intensity Phi  are normalized):

>    master_1 := 0 = alpha - gamma + I*phi + diff(rho(t),`$`(t,2))/rho(t) + I*k_2*diff(rho(t),`$`(t,2))/rho(t) + gamma*sigma*Phi(t) - I*Phi(t);# rho is the filed, Phi is the intensity
 f1 := (t)->rho0*sech(t*tau)^(1+I*psi);# quasi-soliton profile
  f2 := (t)->rho0^2*sech(t*tau)^2;# pulse intensity
 

master_1 := 0 = alpha-gamma+phi*I+diff(rho(t),`$`(t,2))/rho(t)+k_2*diff(rho(t),`$`(t,2))*I/rho(t)+gamma*sigma*Phi(t)-I*Phi(t)

f1 := proc (t) options operator, arrow; rho0*sech(t*tau)^(1+psi*I) end proc

f2 := proc (t) options operator, arrow; rho0^2*sech(t*tau)^2 end proc

>    simplify( subs({rho(t)=f1(t),Phi(t)=f2(t)},rhs(master_1)) ):
 numer(%):
  eq1 := collect(%,cosh(t*tau)^2):
   eq2 := evalc( coeff(eq1,cosh(t*tau),2) );
    eq3 := evalc( coeff(eq1,cosh(t*tau),0) );

eq2 := tau^2-tau^2*psi^2-2*k_2*tau^2*psi+alpha-gamma+(k_2*tau^2-k_2*tau^2*psi^2+phi+2*tau^2*psi)*I

eq3 := gamma*sigma*rho0^2+tau^2*psi^2-2*tau^2+3*k_2*tau^2*psi+(-3*tau^2*psi+k_2*tau^2*psi^2-rho0^2-2*k_2*tau^2)*I

>    eq4 := coeff(eq2,I,0);

eq4 := tau^2-tau^2*psi^2-2*k_2*tau^2*psi+alpha-gamma

As it was shown in Parts VI, VII, the pulse exists if   alpha-gamma  < 0. Simultaneously, it is condition of the cw suppression (the threshold is not exceeded for the noise out of pulse). As a result, the stability against cw oscillation is provided with:

>    eq5 := factor( eq4 - (alpha-gamma) )/tau^2 > 0;

eq5 := 0 < 1-psi^2-2*k_2*psi

The pulse chirp can be found from the equation eq3 :

>    eq6 := subs({rho0^2=x,tau^2=y},coeff(eq3,I)=0):
 eq7 := subs({rho0^2=x,tau^2=y},coeff(eq3,I,0)=0):
  simplify (subs( x=solve(eq7,x),eq6 ) ):#we find the intensity
   numer(lhs(%))/y = 0:
    sol := solve(%,psi);

sol := 1/2*(3*gamma*sigma-3*k_2+sqrt(9*gamma^2*sigma^2-2*k_2*gamma*sigma+9*k_2^2+8+8*k_2^2*gamma^2*sigma^2))/(1+k_2*gamma*sigma), 1/2*(3*gamma*sigma-3*k_2-sqrt(9*gamma^2*sigma^2-2*k_2*gamma*sigma+9*k_2...
sol := 1/2*(3*gamma*sigma-3*k_2+sqrt(9*gamma^2*sigma^2-2*k_2*gamma*sigma+9*k_2^2+8+8*k_2^2*gamma^2*sigma^2))/(1+k_2*gamma*sigma), 1/2*(3*gamma*sigma-3*k_2-sqrt(9*gamma^2*sigma^2-2*k_2*gamma*sigma+9*k_2...

In the combination with the condition eq5  we have:

>    eq8 := solve( numer( simplify( subs(psi=sol[1],rhs(eq5)) ) ) = 0, sigma ):
 eq9 := solve( numer( simplify( subs(psi=sol[2],rhs(eq5)) ) ) = 0, sigma ):

>    plot([log10(subs(gamma=0.01,eq8[1])),log10(subs(gamma=0.01,eq8[2])),log10(subs(gamma=0.01,eq9[1])),log10(subs(gamma=0.01,eq9[2]))],k_2=-160..0,axes=boxed,color=[green,magenta]):
display(%,fig1,view=[-160..0,-1..3]);

[Maple Plot]

Hence the lower boundary of the pulse destabilization is good approximated by the condition of the cw excitation (magenta curve) for the large negative GDD. The green curve corresponds to the chirp-free generation in the soliton model. The intersection of this curve with the stability  boundary (red points) gives the system's parameters corresponding to the minimal pulse duration. However, there are the differences between the analytical model and the numerical results: 1) the ultrashort pulse is chirp-free in the wider region than that predicted from the soliton model; 2) the sigma  increase providing the pulse shortening causes the pulse destabilization (upper on the sigma  parameter boundary of the pulse stability, red points); 3) the pulse is unstable in the vicinity of zero GDD.

The numerical simulations demonstrate, that the pulse destabilization on the upper stability boundary occurs for the negative net-gain coefficient alpha-gamma <0. This prevents the cw excitation. Let's consider the toy model of the pulse destabilization in the absence of the cw excitation. For the sake of simplicity, we shall consider the totally real Landau-Ginzburg equation (Part VI).

>    master_2 := rho(t)*g + diff(rho(t),`$`(t,2)) + rho(t)^3*Sigma;#g=alpha-gamma, Sigma=gamma*sigma

master_2 := rho(t)*g+diff(rho(t),`$`(t,2))+rho(t)^3*Sigma

Let's expand this equation on the small perturbation zeta(t) :

>    expand( subs( rho(t)=rho(t)+mu*zeta(t),master_2 ) ):
 limit( diff(%,mu),mu=0 ):# functional Frechet derivative
  master_3 := master_2 + %;

master_3 := rho(t)*g+diff(rho(t),`$`(t,2))+rho(t)^3*Sigma+g*zeta(t)+diff(zeta(t),`$`(t,2))+3*Sigma*rho(t)^2*zeta(t)

and find its steady-state solutions. Thereto we make the following substitution:

>    f3 := (t)->rho0*sech(t*tau);
 f4 := (t)->epsilon*diff( sech(t*tau) ,t$2);#rho0

f3 := proc (t) options operator, arrow; rho0*sech(t*tau) end proc

f4 := proc (t) options operator, arrow; epsilon*diff(sech(t*tau),`$`(t,2)) end proc

>    simplify( subs({rho(t)=f3(t),zeta(t)=f4(t)},master_3) ):
 expand( numer(%)/rho0):
  eq10 := collect( numer(%),cosh(t*tau) );

eq10 := (rho0*g+rho0*tau^2+g*epsilon*tau^2+epsilon*tau^4)*cosh(t*tau)^4+(-2*g*epsilon*tau^2+rho0^3*Sigma+3*Sigma*rho0^2*epsilon*tau^2-2*rho0*tau^2-20*epsilon*tau^4)*cosh(t*tau)^2+24*epsilon*tau^4-6*Sig...
eq10 := (rho0*g+rho0*tau^2+g*epsilon*tau^2+epsilon*tau^4)*cosh(t*tau)^4+(-2*g*epsilon*tau^2+rho0^3*Sigma+3*Sigma*rho0^2*epsilon*tau^2-2*rho0*tau^2-20*epsilon*tau^4)*cosh(t*tau)^2+24*epsilon*tau^4-6*Sig...

We can see, that this substitution obeys the perturbed steady-state equation ( epsilon  is the perturbation amplitude).

>    eq11 := expand( coeff(eq10,cosh(t*tau),0)/epsilon/tau^2 );
 eq12 := expand( coeff(eq10,cosh(t*tau),2) );
  eq13 := simplify( coeff(eq10,cosh(t*tau),4));

eq11 := 24*tau^2-6*Sigma*rho0^2

eq12 := -2*g*epsilon*tau^2+rho0^3*Sigma+3*Sigma*rho0^2*epsilon*tau^2-2*rho0*tau^2-20*epsilon*tau^4

eq13 := rho0*g+rho0*tau^2+g*epsilon*tau^2+epsilon*tau^4

>    sol := solve({eq11=0,eq12=0,eq13=0},{rho0,tau,epsilon});

sol := {tau = RootOf(_Z^2+g), rho0 = 2*RootOf(Sigma*_Z^2+g,label = _L1), epsilon = -2/3*RootOf(Sigma*_Z^2+g,label = _L1)/g}, {epsilon = epsilon, tau = 0, rho0 = 0}, {tau = RootOf(g+5*_Z^2), rho0 = 2/5*...
sol := {tau = RootOf(_Z^2+g), rho0 = 2*RootOf(Sigma*_Z^2+g,label = _L1), epsilon = -2/3*RootOf(Sigma*_Z^2+g,label = _L1)/g}, {epsilon = epsilon, tau = 0, rho0 = 0}, {tau = RootOf(g+5*_Z^2), rho0 = 2/5*...

>    sol1_tau := allvalues(subs(sol[1],tau));
 sol1_rho := allvalues(subs(sol[1],rho0));
  sol1_e := allvalues(subs(sol[1],epsilon));
sol2_tau := allvalues(subs(sol[3],tau));
 sol2_rho := allvalues(subs(sol[3],rho0));
  sol2_e := allvalues(subs(sol[3],epsilon));

sol1_tau := sqrt(-g), -sqrt(-g)

sol1_rho := 2*sqrt(-g/Sigma), -2*sqrt(-g/Sigma)

sol1_e := -2/3*sqrt(-g/Sigma)/g, 2/3*sqrt(-g/Sigma)/g

sol2_tau := sqrt(-1/5*g), -sqrt(-1/5*g)

sol2_rho := 2/5*g*sqrt(-5*1/(g*Sigma)), -2/5*g*sqrt(-5*1/(g*Sigma))

sol2_e := 2*sqrt(-5*1/(g*Sigma)), -2*sqrt(-5*1/(g*Sigma))

There exist two types of the perturbed solutions. The first one corresponding to unperturbed solution for the arbitrary small epsilon  has a form

>    sol1 := subs( {rho0=sol1_rho[1],tau=sol1_tau[1],epsilon=sol1_e[1]},expand( (f3(t) + f4(t))^2 ) ):
plot3d(subs(Sigma=1,sol1),t=-10..10,g=-0.05..0,axes=boxed);

[Maple Plot]

The second solution is:

>    sol2 := subs( {rho0=sol2_rho[1],tau=sol2_tau[1],epsilon=sol2_e[1]},expand( (f3(t) + f4(t))^2 ) ):
plot3d(subs(Sigma=1,sol2),t=-10..10,g=-0.05..0,axes=boxed);

[Maple Plot]

And the unperturbed solution is:

>    sol3 := subs( {rho0^2=-4*g/Sigma,tau=sqrt(-g),epsilon=0},expand( (f3(t) + f4(t))^2 ) ):
plot3d(subs(Sigma=1,sol3),t=-20..20,g=-0.05..0,axes=boxed);

[Maple Plot]

We can see that the perturbations widen the pulse and reduce its intensity. Moreover, the perturbation of the first type splits  the pulse. We suppose, that the excitation of similar perturbations located within the ultrashort pulse dissociates it for the large sigma , when the contribution of the higher-order nonlinear terms is essential.

The important feature of the multiple pulse regimes is the possibility of a strong correlation of the pulse parameters in the multipulse complex. This is evidence of the pulse interaction. An example of such interaction can be illustrated by the following consideration. Let's take the first momentum of the Landau-Ginzburg equation by the multiplication to the conjugated field, adding the conjugated equation and the consequent integration. The evolution of the energy is described by

>    Diff(E(z),z) = 2*g*E(z) + int(conjugate(rho(z,t))*Diff(rho(z,t),`$`(t,2)) + rho(z,t)*Diff(conjugate(rho(z,t)),`$`(t,2)),t=-infinity..infinity) + 2*Sigma*conjugate(rho(z,t))^2*rho(z,t)^2;

Diff(E(z),z) = 2*g*E(z)+int(conjugate(rho(z,t))*Diff(rho(z,t),`$`(t,2))+rho(z,t)*Diff(conjugate(rho(z,t)),`$`(t,2)),t = -infinity .. infinity)+2*Sigma*conjugate(rho(z,t))^2*rho(z,t)^2

The second term by the virtue of

>    with(student):
intparts(int(rho(z,t)*diff(rho(z,t),`$`(t,2)),t), rho(z,t));# the first term vanishes

rho(z,t)*diff(rho(z,t),t)-Int(diff(rho(z,t),t)^2,t)

gives:

>    eq14 := Diff(E(z),z) = 2*g*E(z) - 2*int(Diff(conjugate(rho(z,t)),t)*Diff(rho(z,t),t),t=-infinity..infinity) + 2*Sigma*conjugate(rho(z,t))^2*rho(z,t)^2;

eq14 := Diff(E(z),z) = 2*g*E(z)-2*int(Diff(conjugate(rho(z,t)),t)*Diff(rho(z,t),t),t = -infinity .. infinity)+2*Sigma*conjugate(rho(z,t))^2*rho(z,t)^2

Now let's consider the simplest two-pulse complex:

>    fieldr := rho0*(sech((t-delta)*tau)+sech((t+delta)*tau)*cos(phi));# real part
fieldim := rho0*sech((t+delta)*tau)*sin(phi);# imaginary part, delta is the distance, phi is the phase difference
print(`the spectral term is defined by:`);
diff(fieldr,t)^2+diff(fieldim,t)^2;

fieldr := rho0*(sech((t-delta)*tau)+sech((t+delta)*tau)*cos(phi))

fieldim := rho0*sech((t+delta)*tau)*sin(phi)

`the spectral term is defined by:`

rho0^2*(-sech((t-delta)*tau)*tanh((t-delta)*tau)*tau-sech((t+delta)*tau)*tanh((t+delta)*tau)*tau*cos(phi))^2+rho0^2*sech((t+delta)*tau)^2*tanh((t+delta)*tau)^2*tau^2*sin(phi)^2

The spectral loss for this complex is (second term in eq14 ):

>    assume(tau>0):

s := 2*rho0^2*tau^2*( int(sech((t-delta)*tau)^2*tanh((t-delta)*tau)^2,t=-infinity..infinity) + int(sech((t+delta)*tau)^2*tanh((t+delta)*tau)^2,t=-infinity..infinity) + 2*int(sech((t-delta)*tau)*tanh((t-delta)*tau)*sech((t+delta)*tau)*tanh((t+delta)*tau)*cos(phi),t=-infinity..infinity));

en := int(fieldr^2 + fieldim^2,t=-infinity..infinity);

s := 2*rho0^2*tau^2*(4/3*1/tau-4*(4*exp(8*tau*delta)+ln(exp(-4*tau*delta))*exp(8*tau*delta)+6*ln(exp(-4*tau*delta))*exp(4*tau*delta)-4+ln(exp(-4*tau*delta)))*cos(phi)*exp(2*tau*delta)/((3*exp(8*tau*del...

en := -4*rho0^2*(1-exp(4*tau*delta)+ln(exp(-4*tau*delta))*cos(phi)*exp(2*tau*delta))/(tau*(-1+exp(4*tau*delta)))

>    plot3d(subs(tau=1/10,s/en),delta=0..40,phi=-Pi..Pi,axes=boxed,view=0..0.01,title=`spectral loss vs. phase and distance`);

[Maple Plot]

So, there exists the potential well, which can absorb the pulses. Also, the last term in eq14  contributes to the interpulse attraction due to the loss saturation enhancement produced by the pulse merging.

We can conclude, that the analytical treatment allowed the comprehension of the basic features of the ultrashort pulse dynamics, though they lie out of the quasi-soliton model validity. Such collaboration between numerical and analytical methods realized by means of the Maple faculties has not only technical but also heuristic character.

Part IX. Mode locking due to a "slow" saturable absorber

Analytical theory and linear stability analysis

In two previous parts we considered the ultrashort pulse formation as result of the loss saturation by pulse intensity. This supposes the instant response of the saturable absorber on the signal variation. The nonresonant (phase) nonlinearity obeys this demand even in femtosecond domain. But the resonant nonlinearities are more inertial and the time defining the relaxation of their excitation lies in the wide region from 100 femtosecond to milliseconds and more. Therefore the interaction of the ultrashort pulse with such structures differs essentially from the previously considered.

Let the pulse duration is shorter then the longitudinal relaxation time. Then the loss saturation is caused by pulse energy flux passed through absorber. The similar situation had considered for dynamical gain saturation in part 3 . Here we shall take into consideration simultaneously the dynamical gain and loss saturation. These effects can be taken into consideration by the expansion of the exponential transmission operator exp(-g/(1+epsilon/E[s]))    up to second order on pulse energy epsilon  (see H.A. Haus, "Theory of mode locking with a slow saturable absorber", IEEE J. Quant. Electr., 11 , 736 (1975 )). Here E[s]  is the gain or loss saturation energy. Then the basic differential equation is

>    restart:
 with(plots):
  master := diff(rho(z,t),z) = (alpha - g - l)*rho(z,t) - chi*alpha*rho(z,t)*int(rho(z,zeta)^2,zeta=0..t) + alpha*rho(z,t)*(chi*int(rho(z,zeta)^2,zeta=0..t))^2 +  g*rho(z,t)*int(rho(z,zeta)^2,zeta=0..t) - g*rho(z,t)*(int(rho(z,zeta)^2,zeta=0..t))^2 + diff(rho(z,t),t$2) + delta*diff(rho(z,t),t);

Warning, the name changecoords has been redefined

master := diff(rho(z,t),z) = (alpha-g-l)*rho(z,t)-chi*alpha*rho(z,t)*int(rho(z,zeta)^2,zeta = 0 .. t)+alpha*rho(z,t)*chi^2*int(rho(z,zeta)^2,zeta = 0 .. t)^2+g*rho(z,t)*int(rho(z,zeta)^2,zeta = 0 .. t)...
master := diff(rho(z,t),z) = (alpha-g-l)*rho(z,t)-chi*alpha*rho(z,t)*int(rho(z,zeta)^2,zeta = 0 .. t)+alpha*rho(z,t)*chi^2*int(rho(z,zeta)^2,zeta = 0 .. t)^2+g*rho(z,t)*int(rho(z,zeta)^2,zeta = 0 .. t)...

Here chi  is the ratio of the loss saturation energy to gain saturation energy (saturation parameter), l  is the unsaturable loss coefficient, g  and alpha  are the saturable loss and gain coefficients at pulse peak, respectively, delta  is the pulse delay on the cavity round-trip. The form of this equation supposes the normalization of time on t[f]  , pulse energy on loss saturation energy. We shall suppose the soliton-like form of steady-state solution of master :  

>    f1 := (t)->rho0*sech(t*tau);# soliton form
 f2 := (zeta)->rho0*sech(zeta*tau);
  ss := rhs(master):
   subs({rho(z,t)=f1(t),rho(z,zeta)=f2(zeta)},ss):
    simplify(%):
     expand( numer(%)*2/rho0 ):
      eq := collect( collect( combine(%,trig), sinh(2*t*tau)),cosh(2*t*tau) );

f1 := proc (t) options operator, arrow; rho0*sech(t*tau) end proc

f2 := proc (zeta) options operator, arrow; rho0*sech(zeta*tau) end proc

eq := (tau^2*alpha-tau^2*g-tau^2*l+alpha*rho0^4*chi^2-g*rho0^4+tau^4)*cosh(2*t*tau)+(-chi*alpha*rho0^2*tau+g*rho0^2*tau-delta*tau^3)*sinh(2*t*tau)-alpha*rho0^4*chi^2+tau^2*alpha+g*rho0^4-tau^2*g-tau^2*...
eq := (tau^2*alpha-tau^2*g-tau^2*l+alpha*rho0^4*chi^2-g*rho0^4+tau^4)*cosh(2*t*tau)+(-chi*alpha*rho0^2*tau+g*rho0^2*tau-delta*tau^3)*sinh(2*t*tau)-alpha*rho0^4*chi^2+tau^2*alpha+g*rho0^4-tau^2*g-tau^2*...

Since this equation is valid at any moment, we have the system of the algebraic equations for the coefficients of hyperbolical functions.

>    eq1 := coeff(eq,cosh(2*t*tau));
 eq2 := factor(coeff(eq,sinh(2*t*tau)));
  eq3 := expand(eq-eq1*cosh(2*t*tau)-eq2*sinh(2*t*tau));

eq1 := tau^2*alpha-tau^2*g-tau^2*l+alpha*rho0^4*chi^2-g*rho0^4+tau^4

eq2 := -tau*(chi*alpha*rho0^2-g*rho0^2+tau^2*delta)

eq3 := -alpha*rho0^4*chi^2+tau^2*alpha+g*rho0^4-tau^2*g-tau^2*l-3*tau^4

These equations define the inverse pulse duration tau , pulse intensity rho0^2 , and delay delta . Let make some manipulations:

>    eq4 := expand( factor(eq1+eq3)/(2*tau^2) );
 eq5 := expand((eq1-eq3)/2);

eq4 := alpha-g-l-tau^2

eq5 := alpha*rho0^4*chi^2-g*rho0^4+2*tau^4

Hence

>    sol1 := solve(eq4=0,tau^2);# solution for tau^2
solve(subs(tau^4=sol1^2,eq5)=0,rho0^4);
factor(%);# solution for rho0^4

sol1 := alpha-g-l

2*(alpha^2-2*alpha*g-2*alpha*l+g^2+2*g*l+l^2)/(-alpha*chi^2+g)

2*(-alpha+g+l)^2/(-alpha*chi^2+g)

Note that the last solution needs some consideration. The comparison with second expression gives for intensity:

  sqrt(2)*(alpha-g-l)/sqrt(g-chi^2*alpha)

>    sol2 :=  sqrt(2)*(alpha-g-l)/sqrt(g-chi^2*alpha):# solution for intensity

And at last, for delay we have

>    subs( {tau^2=sol1, rho0^2=sol2},expand(eq2/(2*tau)) ):
 simplify(%):
  numer(%):
   expand(%/(-alpha+g+l)):
    sol3 := solve(%=0,delta);# solution for delta

sol3 := sqrt(2)*(-chi*alpha+g)/(sqrt(-alpha*chi^2+g))

The gain coefficient at pulse peak is:

>    assume(tau,positive):
 int(f1(t)^2,t=-infinity..0):
  subs({tau=sqrt(sol1),rho0^2=sol2},%):# half-pulse energy
   numer( simplify( alpha0/(1+%) - alpha ) ) = 0;# equation for saturated gain, alpha0 is nonsaturated gain

alpha0*sqrt(-alpha*chi^2+g)-alpha*sqrt(-alpha*chi^2+g)-alpha*sqrt(2)*sqrt(alpha-g-l) = 0

>    sol := solve(%,alpha):
tau := 'tau':

Let plot the pulse intensity and duration versus nonsaturated gain for different chi . It should be noted, that chi  < 1 because for the pulse formation the loss saturation has to leave behind the gain saturation.

>    plot3d(subs({l=0.01,g=0.05},subs(alpha=sol[1],sol2)),alpha0=0.061..1,chi=0..1,axes=boxed,title=`pulse intensity vs nonsaturated gain`);

[Maple Plot]

>    plot3d(subs({l=0.01,g=0.05},subs(alpha=sol[1],log(1/sqrt(sol1)))),alpha0=0.061..1,chi=0..1,axes=boxed,title=`logarithm of pulse width vs nonsaturated gain`);

[Maple Plot]

>    plot3d(subs({l=0.01,g=0.05},subs(alpha=sol[1],sol3)),alpha0=0.061..1,chi=0..1,axes=boxed,title=`logarithm of pulse width vs nonsaturated gain`);

[Maple Plot]

We can see that the pulse width is decreased by gain growth and decrease of chi . Additionally there is maximum of the dependence of intensity on saturation parameter chi .

Now we shall analyze the ultrashort pulse stability in framework of linear theory (see part 3 ). In this case the equation for evolution of exponentially growing perturbation xi ( t ) is

>    (alpha-g-l-lambda)*xi(t) - chi*alpha*xi(t)*int(rho(zeta)^2,zeta = 0 .. t) - chi*alpha*rho(t)*int(rho(zeta)*xi(zeta),zeta = 0 .. t) + alpha*xi(t)*chi^2*int(rho(zeta)^2,zeta = 0 .. t)^2 + g*xi(t)*int(rho(zeta)^2,zeta = 0 .. t) + g*rho(t)*int(rho(zeta)*xi(t),zeta = 0 .. t) - g*xi(t)*int(rho(zeta)^2,zeta = 0 .. t)^2 + diff(xi(t),`$`(t,2)) + delta*diff(xi(t),t);

(alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*int(rho(zeta)^2,zeta = 0 .. t)-chi*alpha*rho(t)*int(rho(zeta)*xi(zeta),zeta = 0 .. t)+alpha*xi(t)*chi^2*int(rho(zeta)^2,zeta = 0 .. t)^2+g*xi(t)*int(rho(zeta)^2...
(alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*int(rho(zeta)^2,zeta = 0 .. t)-chi*alpha*rho(t)*int(rho(zeta)*xi(zeta),zeta = 0 .. t)+alpha*xi(t)*chi^2*int(rho(zeta)^2,zeta = 0 .. t)^2+g*xi(t)*int(rho(zeta)^2...

Here lambda  is the perturbation's growth increment, its positive value corresponds to ultrashort pulse destabilization. An integro-differential character of this equation raises the ODE's order therefore we shall use some assumptions relatively perturbation's envelope.

Let consider a long-wave limit for perturbations. In this case the perturbation's envelope is smooth in compare with pulse envelope. Then we can to exclude the integration over perturbation.

>    f1 := (t)->rho0*sech(t*tau):# soliton form
 f2 := (zeta)->rho0*sech(zeta*tau):
  eq1 := (alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*int(rho(zeta)^2,zeta = 0 .. t)-chi*alpha*xi0*rho(t)*int(rho(zeta),zeta = 0 .. t)+alpha*xi(t)*chi^2*int(rho(zeta)^2,zeta = 0 .. t)^2+g*xi(t)*int(rho(zeta)^2,zeta = 0 .. t)+g*xi0*rho(t)*int(rho(zeta),zeta = 0 .. t)-g*xi(t)*int(rho(zeta)^2,zeta = 0 .. t)^2+diff(xi(t),`$`(t,2))+delta*diff(xi(t),t);# xi0 is the amplitude of perturbation at t=0

eq1 := (alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*int(rho(zeta)^2,zeta = 0 .. t)-chi*alpha*xi0*rho(t)*int(rho(zeta),zeta = 0 .. t)+alpha*xi(t)*chi^2*int(rho(zeta)^2,zeta = 0 .. t)^2+g*xi(t)*int(rho(zeta)...
eq1 := (alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*int(rho(zeta)^2,zeta = 0 .. t)-chi*alpha*xi0*rho(t)*int(rho(zeta),zeta = 0 .. t)+alpha*xi(t)*chi^2*int(rho(zeta)^2,zeta = 0 .. t)^2+g*xi(t)*int(rho(zeta)...

The long-wave approximation allows to neglect the second-order derivation in compare with first-order one.

>    value( subs({rho(t)=f1(t), rho(zeta)=f2(zeta)},eq1-diff(xi(t),`$`(t,2))) );

(alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*rho0^2*sinh(t*tau)/(tau*cosh(t*tau))-chi*alpha*xi0*rho0^2*sech(t*tau)*arctan(sinh(t*tau))/tau+alpha*xi(t)*chi^2*rho0^4*sinh(t*tau)^2/(tau^2*cosh(t*tau)^2)+g*xi(...
(alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*rho0^2*sinh(t*tau)/(tau*cosh(t*tau))-chi*alpha*xi0*rho0^2*sech(t*tau)*arctan(sinh(t*tau))/tau+alpha*xi(t)*chi^2*rho0^4*sinh(t*tau)^2/(tau^2*cosh(t*tau)^2)+g*xi(...

>    subs({op(2,%)=-chi*alpha*xi(t)*rho0^2*tanh(t*tau), op(4,%)=chi^2*alpha*xi(t)*rho0^4*tanh(t*tau)^2, op(5,%)=g*xi(t)*rho0^2*tanh(t*tau), op(7,%)=-g*xi(t)*rho0^4*tanh(t*tau)^2},%);

(alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*rho0^2*tanh(t*tau)-chi*alpha*xi0*rho0^2*sech(t*tau)*arctan(sinh(t*tau))/tau+chi^2*alpha*xi(t)*rho0^4*tanh(t*tau)^2+g*xi(t)*rho0^2*tanh(t*tau)+g*xi0*rho0^2*sech(...
(alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*rho0^2*tanh(t*tau)-chi*alpha*xi0*rho0^2*sech(t*tau)*arctan(sinh(t*tau))/tau+chi^2*alpha*xi(t)*rho0^4*tanh(t*tau)^2+g*xi(t)*rho0^2*tanh(t*tau)+g*xi0*rho0^2*sech(...

>    dsolve({%=0, xi(0)=xi0} ,xi(t));

xi(t) = Int(-arctan(sinh(u*tau))*xi0*rho0^2*((cosh(u*tau)+sinh(u*tau))/cosh(u*tau))^(-1/2*rho0^2*(-alpha*rho0^2*chi^2+g-chi*alpha+g*rho0^2)/(delta*tau))*(-chi*alpha+g)*((sinh(u*tau)-cosh(u*tau))/cosh(u...
xi(t) = Int(-arctan(sinh(u*tau))*xi0*rho0^2*((cosh(u*tau)+sinh(u*tau))/cosh(u*tau))^(-1/2*rho0^2*(-alpha*rho0^2*chi^2+g-chi*alpha+g*rho0^2)/(delta*tau))*(-chi*alpha+g)*((sinh(u*tau)-cosh(u*tau))/cosh(u...
xi(t) = Int(-arctan(sinh(u*tau))*xi0*rho0^2*((cosh(u*tau)+sinh(u*tau))/cosh(u*tau))^(-1/2*rho0^2*(-alpha*rho0^2*chi^2+g-chi*alpha+g*rho0^2)/(delta*tau))*(-chi*alpha+g)*((sinh(u*tau)-cosh(u*tau))/cosh(u...
xi(t) = Int(-arctan(sinh(u*tau))*xi0*rho0^2*((cosh(u*tau)+sinh(u*tau))/cosh(u*tau))^(-1/2*rho0^2*(-alpha*rho0^2*chi^2+g-chi*alpha+g*rho0^2)/(delta*tau))*(-chi*alpha+g)*((sinh(u*tau)-cosh(u*tau))/cosh(u...
xi(t) = Int(-arctan(sinh(u*tau))*xi0*rho0^2*((cosh(u*tau)+sinh(u*tau))/cosh(u*tau))^(-1/2*rho0^2*(-alpha*rho0^2*chi^2+g-chi*alpha+g*rho0^2)/(delta*tau))*(-chi*alpha+g)*((sinh(u*tau)-cosh(u*tau))/cosh(u...
xi(t) = Int(-arctan(sinh(u*tau))*xi0*rho0^2*((cosh(u*tau)+sinh(u*tau))/cosh(u*tau))^(-1/2*rho0^2*(-alpha*rho0^2*chi^2+g-chi*alpha+g*rho0^2)/(delta*tau))*(-chi*alpha+g)*((sinh(u*tau)-cosh(u*tau))/cosh(u...
xi(t) = Int(-arctan(sinh(u*tau))*xi0*rho0^2*((cosh(u*tau)+sinh(u*tau))/cosh(u*tau))^(-1/2*rho0^2*(-alpha*rho0^2*chi^2+g-chi*alpha+g*rho0^2)/(delta*tau))*(-chi*alpha+g)*((sinh(u*tau)-cosh(u*tau))/cosh(u...

The last term in this expression has not appropriate asymptotic behavior at infinity. As consequence, there are not long-wave excitations in our case.

A short-wave approximation allows to simplify the problem on the basis of Riemann-Lebesgue theorem: int(f(t)*exp(I*omega*t),t = -infinity .. infinity)  =o(1) ( omega --> infinity ). That is the integral int(rho(zeta)*xi(zeta),zeta = 0 .. t)  is small value if xi(zeta)  is quickly oscillating function without steady-state points. In this case (when tau <<1 ) we have (see V.L.Kalashnikov, V.P.Kalosha, I.G.Poloyko, V.P.Mikhailov, "Mode locking of cw solid-state lasers with a slow saturable absorber", Opt. and Spectroscopy, 81  794 (1996) ):

>    f1 := (t)->rho0*sech(t*tau):# soliton form
 f2 := (zeta)->rho0*sech(zeta*tau):
  eq1 :=
(alpha-g-l-lambda)*xi(t) - chi*alpha*xi(t)*int(rho(zeta)^2,zeta = 0 .. t) + alpha*xi(t)*chi^2*int(rho(zeta)^2,zeta = 0 .. t)^2 + g*xi(t)*int(rho(zeta)^2,zeta = 0 .. t) - g*xi(t)*int(rho(zeta)^2,zeta = 0 .. t)^2 + diff(xi(t),`$`(t,2)) + delta*diff(xi(t),t);

eq1 := (alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*int(rho(zeta)^2,zeta = 0 .. t)+alpha*xi(t)*chi^2*int(rho(zeta)^2,zeta = 0 .. t)^2+g*xi(t)*int(rho(zeta)^2,zeta = 0 .. t)-g*xi(t)*int(rho(zeta)^2,zeta = 0...
eq1 := (alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*int(rho(zeta)^2,zeta = 0 .. t)+alpha*xi(t)*chi^2*int(rho(zeta)^2,zeta = 0 .. t)^2+g*xi(t)*int(rho(zeta)^2,zeta = 0 .. t)-g*xi(t)*int(rho(zeta)^2,zeta = 0...

>    value( subs({rho(t)=f1(t), rho(zeta)=f2(zeta)},eq1) );

(alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*rho0^2*sinh(t*tau)/(tau*cosh(t*tau))+alpha*xi(t)*chi^2*rho0^4*sinh(t*tau)^2/(tau^2*cosh(t*tau)^2)+g*xi(t)*rho0^2*sinh(t*tau)/(tau*cosh(t*tau))-g*xi(t)*rho0^4*si...
(alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*rho0^2*sinh(t*tau)/(tau*cosh(t*tau))+alpha*xi(t)*chi^2*rho0^4*sinh(t*tau)^2/(tau^2*cosh(t*tau)^2)+g*xi(t)*rho0^2*sinh(t*tau)/(tau*cosh(t*tau))-g*xi(t)*rho0^4*si...

We can rewrite this expression:

>    (alpha-g-l-lambda)*xi(t)-chi*alpha*xi(t)*rho0^2*tanh(t*tau)/tau+alpha*xi(t)*chi^2*rho0^4*tanh(t*tau)^2/tau^2+g*xi(t)*rho0^2*tanh(t*tau)/tau-g*xi(t)*rho0^4*tanh(t*tau)^2/tau^2+diff(xi(t),`$`(t,2))+delta*diff(xi(t),t):
 eq2 := collect(%, tanh);
  A1 = expand( coeff(eq2, tanh(t*tau)^2)/ xi(t)):
   A2 = expand( coeff(eq2, tanh(t*tau))/ xi(t)):
    eq3 := subs( alpha-g-l-lambda=A3,A1*xi(t)*tanh(t*tau)^2 + A2*xi(t)*tanh(tau*t) + coeff(eq2,tanh(t*tau),0) );

eq2 := (-g*xi(t)*rho0^4/(tau^2)+alpha*xi(t)*chi^2*rho0^4/(tau^2))*tanh(t*tau)^2+(g*xi(t)*rho0^2/tau-chi*alpha*xi(t)*rho0^2/tau)*tanh(t*tau)+(alpha-g-l-lambda)*xi(t)+diff(xi(t),`$`(t,2))+delta*diff(xi(t...
eq2 := (-g*xi(t)*rho0^4/(tau^2)+alpha*xi(t)*chi^2*rho0^4/(tau^2))*tanh(t*tau)^2+(g*xi(t)*rho0^2/tau-chi*alpha*xi(t)*rho0^2/tau)*tanh(t*tau)+(alpha-g-l-lambda)*xi(t)+diff(xi(t),`$`(t,2))+delta*diff(xi(t...

eq3 := A1*xi(t)*tanh(t*tau)^2+A2*xi(t)*tanh(t*tau)+A3*xi(t)+diff(xi(t),`$`(t,2))+delta*diff(xi(t),t)

>    dsolve(eq3=0, xi(t));

xi(t) = _C1*hypergeom([-RootOf(A1-_Z*tau^2+_Z^2*tau^2)+1+RootOf(4*_Z^2*tau^2-2*delta*_Z*tau+A2+A3+A1)+RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2), RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2)+RootOf(A...
xi(t) = _C1*hypergeom([-RootOf(A1-_Z*tau^2+_Z^2*tau^2)+1+RootOf(4*_Z^2*tau^2-2*delta*_Z*tau+A2+A3+A1)+RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2), RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2)+RootOf(A...
xi(t) = _C1*hypergeom([-RootOf(A1-_Z*tau^2+_Z^2*tau^2)+1+RootOf(4*_Z^2*tau^2-2*delta*_Z*tau+A2+A3+A1)+RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2), RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2)+RootOf(A...
xi(t) = _C1*hypergeom([-RootOf(A1-_Z*tau^2+_Z^2*tau^2)+1+RootOf(4*_Z^2*tau^2-2*delta*_Z*tau+A2+A3+A1)+RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2), RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2)+RootOf(A...
xi(t) = _C1*hypergeom([-RootOf(A1-_Z*tau^2+_Z^2*tau^2)+1+RootOf(4*_Z^2*tau^2-2*delta*_Z*tau+A2+A3+A1)+RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2), RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2)+RootOf(A...
xi(t) = _C1*hypergeom([-RootOf(A1-_Z*tau^2+_Z^2*tau^2)+1+RootOf(4*_Z^2*tau^2-2*delta*_Z*tau+A2+A3+A1)+RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2), RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2)+RootOf(A...
xi(t) = _C1*hypergeom([-RootOf(A1-_Z*tau^2+_Z^2*tau^2)+1+RootOf(4*_Z^2*tau^2-2*delta*_Z*tau+A2+A3+A1)+RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2), RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2)+RootOf(A...
xi(t) = _C1*hypergeom([-RootOf(A1-_Z*tau^2+_Z^2*tau^2)+1+RootOf(4*_Z^2*tau^2-2*delta*_Z*tau+A2+A3+A1)+RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2), RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2)+RootOf(A...
xi(t) = _C1*hypergeom([-RootOf(A1-_Z*tau^2+_Z^2*tau^2)+1+RootOf(4*_Z^2*tau^2-2*delta*_Z*tau+A2+A3+A1)+RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2), RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2)+RootOf(A...
xi(t) = _C1*hypergeom([-RootOf(A1-_Z*tau^2+_Z^2*tau^2)+1+RootOf(4*_Z^2*tau^2-2*delta*_Z*tau+A2+A3+A1)+RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2), RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2)+RootOf(A...
xi(t) = _C1*hypergeom([-RootOf(A1-_Z*tau^2+_Z^2*tau^2)+1+RootOf(4*_Z^2*tau^2-2*delta*_Z*tau+A2+A3+A1)+RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2), RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2)+RootOf(A...

>    coeff1 := allvalues( -RootOf(A1-_Z*tau^2+_Z^2*tau^2)+1+RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2)+RootOf(4*_Z^2*tau^2-2*delta*_Z*tau+A2+A3+A1) ):# 8 coefficients
coeff2 := allvalues( -1/2*(2*RootOf(A1-_Z*tau^2+_Z^2*tau^2)*tau-2*tau+delta-2*RootOf(4*_Z^2*tau^2-2*delta*_Z*tau+A2+A3+A1)*tau+2*RootOf(A3-A2+A1+2*delta*_Z*tau+4*_Z^2*tau^2)*tau)/tau ):# 8 coefficients

We have the set of 16 first coefficients of hypergeometric functions, which can cause the appropriate asymptotic behavior at infinity if they are equal to negative integers (see, in particular, part 3 ). Moreover, they are to be the large negative integers in order to satisfy to our short-wave approximation. So, we investigate the high-level excitations in the "potential well" formed by gain and loss saturation.

>    #first coefficients in hypergeometric functions
 c := array(1..16):
  for i from 1 to 8 do
   c[i] := subs({A1 = -g*rho0^4/(tau^2)+alpha*chi^2*rho0^4/(tau^2),A2 = g*rho0^2/tau-chi*alpha*rho0^2/tau,A3 = alpha-g-l-lambda},coeff1[i]):
    od:
     for i from 9 to 16 do
      c[i] := subs({A1 = -g*rho0^4/(tau^2)+alpha*chi^2*rho0^4/(tau^2),A2 = g*rho0^2/tau-chi*alpha*rho0^2/tau,A3 = alpha-g-l-lambda},coeff2[i-8]):
        od:

>    #16 coefficients produce 16 equations for lambda (N is positive integer)
 s := array(1..16):
  for j from 1 to 16 do
   s[j] := solve(c[j] + N = 0, lambda):
    od:

>    # the solutions will be evaluated numerically by variation of chi for different N
# Attention! This computational block can take a lot time!
P := array(1..50,1..16,1..3):
 l := 0.01:
  g := 0.05:
   alpha0 := 0.5:
    Lev := [5, 10, 50]:
for k from 1 to 3 do
for j from 1 to 16 do
for i from 1 to 50 do
 N := Lev[k]:
  chi := i/50:
   alpha := evalf( sol[1] ):
    tau := evalf( sqrt(sol1) ):
     rho0 := evalf( sqrt(sol2) ):       
      delta := evalf( sol3 ):
       P[i,j,k] := evalf( s[j] ):        
od:
od:
print(k);
od:

1

2

3

>    # list of plots
macro(usercol = COLOR(RGB, 0.8, 5/Lev[k], 0.5)):
 for k from 1 to 3 do
  for m from 1 to 16 do
   p[(k-1)*16+m] := listplot([[n/50,Re(P[n,m,k])] $n=1..50],color=usercol):
    od:
     od:

>    display({p[ii] $ii=1..40},axes=boxed,title=`stability increment`,view=-2..15);

[Maple Plot]

So, we have only two different solutions for real part of lambda , when "level's number" N  is fixed. The negative value of increment corresponds to decaying perturbations, i. e. stable ultrashort pulse generation. Because of the pulse stabilization results from increase of chi   there is problem of the shortest pulse generation (note, that increase of chi  increases pulse width, see corresponding figure above). It is of interest that the region of the pulse stability can have an inhomogeneous character (a "kink" on the curves for small N , that is "deeper level" in potential well). This fact was confirmed by numerical simulations (see V.L.Kalashnikov, D.O.Krimer, I.G.Poloyko, "Soliton generation and picosecond collapse in solid-state lasers with semiconductor saturable absorber", J. Opt. Soc. Am. B. 17 , 519 ( 2000 )) and corresponds to destabilization due to excitation of "deeper levels", that is the pulse envelope splitting. Perturbations with large N  can be interpreted as continuous-wave generation of noise spikes.

Aberrationless approximation

Now we shall consider one practical realization of the described here method of ultrashort pulse generation. The most attractive sort of "slow" absorber is the semiconductor absorber with comparatively short relaxation time and small energy of saturation (see next part). But the absorber, which is based on the impure dielectric crystal, is much more usable in the picosecond time domain due to its simplicity (as rule, the semiconductor shutter has a very complicate structure) and durability. However, the basic disadvantages of the crystalline absorbers are the large relaxation time (10 ns - 1 mu s) and large saturation energy (up to 1 J / cm^2 ). Here we shall analyze the possibility of the stable ultrashort pulse generation in the forsterite solid-state laser with YAG: V(3+) crystalline absorber. As the basic method the aberrationless approximation will be used. Now we shall express the loss coefficient in absorber as g*exp(-epsilon/E[s]) , that differs from phenomenological expression, which was considered in the beginning of this part, but is close to it when the expansion on energy is made up to small orders of epsilon . Such form of the dependence can be obtained from Bloch's equations for two-level absorber (see next part) in noncoherent approximation and in the condition of small pulse duration in compare with longitudinal relaxation time Ta   ( Ta = 22 ns for YAG: V(3+)). The steady-state (there is no dependence on z ) master equation is (see above):

>    restart:
master:=alpha*(rho(t)-rho(t)*chi*epsilon(t)+rho(t)*chi^2*epsilon(t)^2/2)-g*(rho(t)-epsilon(t)*rho(t)+rho(t)*epsilon(t)^2/2)+diff(diff(rho(t),t),t)+delta*diff(rho(t),t)-l*rho(t);

master := alpha*(rho(t)-rho(t)*chi*epsilon(t)+1/2*rho(t)*chi^2*epsilon(t)^2)-g*(rho(t)-epsilon(t)*rho(t)+1/2*rho(t)*epsilon(t)^2)+diff(rho(t),`$`(t,2))+delta*diff(rho(t),t)-l*rho(t)

Let suppose the soliton-like shape of the pulse. Then the evolution of the ultrashort pulse parameters can be found as result of the expansion at t -series:

>    f1:=(z,t)->rho0(z)*sech(t*tau(z));# pulse amplitude
 f2:=(z,t)->rho0(z)^2*(1+tanh(t*tau(z)))/tau(z);# pulse energy
  lhs_master:=subs({diff(rho0(z),z)=x,diff(tau(z),z)=y},diff(f1(z,t),z)):# left-hand side of dynamical equation
  eq:=collect(series(lhs_master-subs({rho(t)=f1(z,t),epsilon(t)=f2(z,t)},master),t=0,3),t):#dynamical equation
eq1 := coeff(eq,t^2):
eq2 := coeff(eq,t):
eq3 := coeff(eq,t,0):
sol := factor(solve({eq1, eq2, eq3},{x, y, delta}));

f1 := proc (z, t) options operator, arrow; rho0(z)*sech(t*tau(z)) end proc

f2 := proc (z, t) options operator, arrow; rho0(z)^2*(1+tanh(t*tau(z)))/tau(z) end proc

sol := {y = -1/2*(alpha*rho0(z)^4*chi^2-g*rho0(z)^4+4*tau(z)^4)/tau(z), x = 1/2*rho0(z)*(-2*l*tau(z)^2+2*alpha*tau(z)^2-2*alpha*rho0(z)^2*chi*tau(z)+alpha*rho0(z)^4*chi^2-2*tau(z)^4-2*g*tau(z)^2+2*g*rh...
sol := {y = -1/2*(alpha*rho0(z)^4*chi^2-g*rho0(z)^4+4*tau(z)^4)/tau(z), x = 1/2*rho0(z)*(-2*l*tau(z)^2+2*alpha*tau(z)^2-2*alpha*rho0(z)^2*chi*tau(z)+alpha*rho0(z)^4*chi^2-2*tau(z)^4-2*g*tau(z)^2+2*g*rh...
sol := {y = -1/2*(alpha*rho0(z)^4*chi^2-g*rho0(z)^4+4*tau(z)^4)/tau(z), x = 1/2*rho0(z)*(-2*l*tau(z)^2+2*alpha*tau(z)^2-2*alpha*rho0(z)^2*chi*tau(z)+alpha*rho0(z)^4*chi^2-2*tau(z)^4-2*g*tau(z)^2+2*g*rh...

The equations for the pulse parameters evolution have to be supplemented by the equations for the gain ( alpha --> alpha ( z ) ) and the saturable loss ( g --> g ( z ) ) evolution at the time intervals >>1/ tau  ( alpha 0 and gmx  are the maximal saturable gain and loss, respectively, Ta  and Tr  are the loss and gain relaxation times normalized to the cavity period Tcav , Pump  is the dimensionless pump, see part 8 ):

>    eq4:=-4*rho0(z)^2*g(z)/tau(z)+(gmx-g(z))/Ta;
eq5:=Pump*(alpha0-alpha(z))-2*chi*alpha(z)*rho0(z)^2/tau(z)-alpha(z)/Tr;

eq4 := -4*rho0(z)^2*g(z)/tau(z)+(gmx-g(z))/Ta

eq5 := Pump*(alpha0-alpha(z))-2*chi*alpha(z)*rho0(z)^2/tau(z)-alpha(z)/Tr

Then finally:

>    sys := D(g)(z)=eq4,D(a)(z)=eq5,D(rho0)(z)=subs({alpha=alpha(z),g=g(z)},subs(sol,x)),
D(tau)(z)=subs({alpha=alpha(z),g=g(z)},subs(sol,y));# basic systems for evolution of the pulse parameters, gain and loss coefficients

sys := D(g)(z) = -4*rho0(z)^2*g(z)/tau(z)+(gmx-g(z))/Ta, D(a)(z) = Pump*(alpha0-alpha(z))-2*chi*alpha(z)*rho0(z)^2/tau(z)-alpha(z)/Tr, D(rho0)(z) = 1/2*rho0(z)*(-2*l*tau(z)^2+2*alpha(z)*tau(z)^2-2*alph...
sys := D(g)(z) = -4*rho0(z)^2*g(z)/tau(z)+(gmx-g(z))/Ta, D(a)(z) = Pump*(alpha0-alpha(z))-2*chi*alpha(z)*rho0(z)^2/tau(z)-alpha(z)/Tr, D(rho0)(z) = 1/2*rho0(z)*(-2*l*tau(z)^2+2*alpha(z)*tau(z)^2-2*alph...
sys := D(g)(z) = -4*rho0(z)^2*g(z)/tau(z)+(gmx-g(z))/Ta, D(a)(z) = Pump*(alpha0-alpha(z))-2*chi*alpha(z)*rho0(z)^2/tau(z)-alpha(z)/Tr, D(rho0)(z) = 1/2*rho0(z)*(-2*l*tau(z)^2+2*alpha(z)*tau(z)^2-2*alph...

We shall change the saturation parameter chi   and to search the stationary points of the pulse parameter's mapping. These points correspond to the solutions of 'sys'  with zero left-hand sides

>    st_sol1:=solve({eq4,eq5},{g(z),alpha(z)}):
 st_g:=subs(st_sol1,g(z));
  st_a:=subs(st_sol1,alpha(z));
   st_sys1:=[expand(rhs(op(3,[sys]))*2*tau(z)^2/rho0(z)),\
    expand(rhs(op(4,[sys]))*2*tau(z))]:
     st_sys2:={simplify(op(1,st_sys1)+op(2,st_sys1))=0,op(2,st_sys1)=0};
      st_sys3:=subs({rho0(z)=x,tau(z)=y},subs({g(z)=st_g,alpha(z)=st_a},st_sys2));

st_g := tau(z)*gmx/(4*rho0(z)^2*Ta+tau(z))

st_a := Pump*tau(z)*Tr*alpha0/(Pump*tau(z)*Tr+2*chi*rho0(z)^2*Tr+tau(z))

st_sys2 := {-2*l*tau(z)^2+2*alpha(z)*tau(z)^2-2*alpha(z)*rho0(z)^2*chi*tau(z)-6*tau(z)^4-2*g(z)*tau(z)^2+2*g(z)*rho0(z)^2*tau(z) = 0, -alpha(z)*rho0(z)^4*chi^2+g(z)*rho0(z)^4-4*tau(z)^4 = 0}
st_sys2 := {-2*l*tau(z)^2+2*alpha(z)*tau(z)^2-2*alpha(z)*rho0(z)^2*chi*tau(z)-6*tau(z)^4-2*g(z)*tau(z)^2+2*g(z)*rho0(z)^2*tau(z) = 0, -alpha(z)*rho0(z)^4*chi^2+g(z)*rho0(z)^4-4*tau(z)^4 = 0}

st_sys3 := {-2*l*y^2+2*Pump*y^3*Tr*alpha0/(Pump*y*Tr+2*chi*x^2*Tr+y)-2*Pump*y^2*Tr*alpha0*x^2*chi/(Pump*y*Tr+2*chi*x^2*Tr+y)-6*y^4-2*y^3*gmx/(4*x^2*Ta+y)+2*y^2*gmx*x^2/(4*x^2*Ta+y) = 0, -Pump*y*Tr*alph...
st_sys3 := {-2*l*y^2+2*Pump*y^3*Tr*alpha0/(Pump*y*Tr+2*chi*x^2*Tr+y)-2*Pump*y^2*Tr*alpha0*x^2*chi/(Pump*y*Tr+2*chi*x^2*Tr+y)-6*y^4-2*y^3*gmx/(4*x^2*Ta+y)+2*y^2*gmx*x^2/(4*x^2*Ta+y) = 0, -Pump*y*Tr*alph...

The next procedure will be used for numerical solution of st_sys3 .

>    num_sol := proc(alpha0,gmx,chi,l,Tr,Ta,Pump)
    st_sys := {-Pump*y*Tr*alpha0*x^4*chi^2/(Pump*y*Tr+2*chi*x^2*Tr+y)+y*gmx*x^4/(4*x^2*Ta+y)-4*y^4 = 0, 2*Pump*y^3*Tr*alpha0/(Pump*y*Tr+2*chi*x^2*Tr+y)-2*Pump*y^2*Tr*alpha0*x^2*chi/(Pump*y*Tr+2*chi*x^2*Tr+y)-2*l*y^2-2*y^3*gmx/(4*x^2*Ta+y)+2*y^2*gmx*x^2/(4*x^2*Ta+y)-6*y^4 = 0}:
    fsolve(st_sys,{x,y},{x=0..1,y=0..1}):
end:

Warning, `st_sys` is implicitly declared local to procedure `num_sol`

>      v := array(1..100):
 for i from 1 to 100 do  
v[i] := num_sol(0.5,0.05,1/(1.36+9*i/100),0.01,300,2.2,0.001) od:# the normalization of relaxation times to cavity period is supposed (Tcav = 10 ns)

Now we can plot the logarithm of the pulse duration versus chi .

>    with(plots):
 ww:=array(1..100):
  for j from 5 to 100 do ww[j]:=evalf(log10(1/subs(v[j],y))) od:
   points := {seq([1/(1.36+9*j/100),ww[j]],j=1..100)}:
    f1 := plot(points,x=0.1..0.6,style=point,symbol=circle,color=red):
     display(f1,TEXT([10,3],'`Up=0.0008`'),view=2.4..3.6,title=`Logarithm of pulse duration versus sigma`,labels=[`saturation parameter`,``]);

Warning, the name changecoords has been redefined

[Maple Plot]

This figure demonstrates the pulse width decrease due to decrease of chi ,  that corresponds to the predominance of the loss saturation over gain saturation (see previous subsection). For the time normalization to the inverse bandwidth of YAG: V(3+) absorption line the pulse duration at chi  = 0.3  is about of 50 ps.

Now, we shall consider the ultrashort pulse parameters evolution on the basis of the obtained system of ODE. This procedure solves the systems by the standard operator DEplot

>    with(DEtools):
 ODE_plot := proc(alpha0,gmx,chi,l,Tr,Ta,Pump)
  sys := [D(g)(z) =
-4*rho0(z)^2*g(z)/tau(z)+(gmx-g(z))/Ta, \
   D(alpha)(z) =
Pump*(alpha0-alpha(z))-2*chi*alpha(z)*rho0(z)^2/tau(z)-alpha(z)/Tr, \
    D(rho0)(z) = 1/2*rho0(z)*(-2*l*tau(z)^2+2*alpha(z)*tau(z)^2-2*alpha(z)*rho0(z)^2*chi*tau(z)+alpha(z)*rho0(z)^4*chi^2-2*tau(z)^4-2*g(z)*tau(z)^2+2*g(z)*rho0(z)^2*tau(z)-g(z)*rho0(z)^4)/(tau(z)^2),\
      D(tau)(z) =
-1/2*(alpha(z)*rho0(z)^4*chi^2-g(z)*rho0(z)^4+4*tau(z)^4)/tau(z)]:
DEplot(sys,[rho0(z),tau(z),g(z),alpha(z)],z=0..10000,[[rho0(0)=1e-5,tau(0)=1e-3,g(0)=gmx,alpha(0)=0]],stepsize=1,scene=[z,rho0(z)],axes=FRAME,linecolor=BLACK):
end:

Warning, `sys` is implicitly declared local to procedure `ODE_plot`

Let vary the saturation parameter chi  for the fixed pump:

>    display(ODE_plot(0.5,0.05,0.3,0.01,300,2.2,0.001));

[Maple Plot]

So, we have the decaying oscillations of the ultrashort pulse amplitude (see part 6 ). The decrease of saturation parameter produces

>    display(ODE_plot(0.5,0.05,0.1,0.01,300,2.2,0.001));

[Maple Plot]

One can see the growth of the ultrashort pulse oscillations (autooscillations or so-called Q-switch mode locking). This is a main destabilizing factor for the considered type of the mode locking regime. This result is in agreement with above obtained (note, that now we are outside of framework of linear perturbation theory).

The important obstacle for the pulse generation by slow absorber is the noise growth. In order to investigate pulse stability against noise in framework of the considered model we have to add the equation for the evolution of noise energy n  to sys.

>    ODE_noise := proc(alpha0,gmx,chi,l,Tr,Ta,Pump)
sys_noise := [D(g)(z) =
-4*rho0(z)^2*g(z)/tau(z)+(gmx-g(z))/Ta, \
   D(alpha)(z) =
Pump*(alpha0-alpha(z))-2*chi*alpha(z)*rho0(z)^2/tau(z)-alpha(z)/Tr, \
    D(rho0)(z) = 1/2*rho0(z)*(-2*l*tau(z)^2+2*alpha(z)*tau(z)^2-2*alpha(z)*rho0(z)^2*chi*tau(z)+alpha(z)*rho0(z)^4*chi^2-2*tau(z)^4-2*g(z)*tau(z)^2+2*g(z)*rho0(z)^2*tau(z)-g(z)*rho0(z)^4)/(tau(z)^2),\
      D(tau)(z) =
-1/2*(alpha(z)*rho0(z)^4*chi^2-g(z)*rho0(z)^4+4*tau(z)^4)/tau(z),\
        D(n)(z) =
(alpha(z)-l-(gmx+Ta*(g(z)-gmx)*(1-exp(-1/Ta))))*n(z)]:#see V.L. Kalashnikov et al. Opt. Commun., v.159, 237 (1999)
  DEplot3d(sys_noise,[rho0(z),tau(z),g(z),alpha(z),n(z)],z=0..10000,[[rho0(0)=1e-5,tau(0)=1e-3,g(0)=gmx,alpha(0)=0,n(0)=1e-5]],stepsize=1,scene=[z,rho0(z),n(z)],axes=FRAME,linecolor=BLACK):
end:

Warning, `sys_noise` is implicitly declared local to procedure `ODE_noise`

>    display(ODE_noise(0.5,0.05,0.3,0.01,300,2.2,0.001),title=`Noise energy evolution`);

[Maple Plot]

As one can see from this picture, the noise energy decays, i. e. 50 ps "auto-stable" pulse is stable against noise, too.

Part X. Coherent pulses: self-induced transparency in the laser

Here we shall calculate the main characteristics of ultrashort pulses in the solid-state laser in the presence of self-focusing in the active crystal and coherent interaction with a semiconductor absorber. The good introduction in this problem and the numerical simulations of the nonlinear dynamics in the laser with coherent absorber can be found in the article V. P. Kalosha, M. Muller, and J. Herrmann, "Theory of solid-state laser mode locking by coherent semiconductor quantum-well absorbers", J. Optical Soc. Am. B., v. 16, No. 2, pp.  323 - 338 (1999) .

We shall suppose, that as saturable absorber the semiconductor structure is used (like GaAs/AlGaAs quantum-well structures). The key characteristics of this absorber, which correspond to the experimental dates, are the energy flux of the loss saturation E[a]  = 5* 10^(-5)  J/ cm^2 , and the time of coherency t[coh]  = 50 fs. These parameters define the parameter q = sqrt(epsilon0*n*c/(2*Ea*tcoh))    ( n  is the refractivity index, c  is the light velocity in the vacuum, epsilon 0 is the dielectric constant).

>    restart:
 with(plots):
  with(DEtools):
parameter_q := proc()
 local epsilon0,n,c,Ea,q,tcoh:
  epsilon0 := 8.85e-14:
   n := 3.32:
    c := 3e10:
     Ea := 5e-5:
      tcoh := 5e-14:
        sqrt(epsilon0*n*c/(2*Ea*tcoh)):
end:
q=evalf(parameter_q());         # The dimension of q is [cm/V/s]

Warning, the name changecoords has been redefined

q = 41987140.89

The corresponding dipole moment is d  = q*h/(2* Pi ):

>    d=evalf(subs({h=6.63e-34,q=parameter_q()},q*h/(2*Pi)));# The dimension of d is [coulomb*cm]
d/e=evalf(rhs(%)/1.6e-19*1e7);#here e is the elementary charge, the dimension of d/e is [nm]

d = .4430471653e-26

d/e = .2769044783

For a given E[a]  and the photon energy 2.5* 10^(-19)  J (the wavelength is equal to 800 nm) the absorption cross-section Sigma  = 5* 10^(-15)   cm^2 . The free carrier density N  = 10^19   cm^(-3)  in the semiconductor produces the loss coefficient gam_abs  = 0.05 for the length of the absorber's layer z_abs  = 10 nm. Other important characteristic is p  = 2 Pi  N d q omega /c = 4 Pi^2  N d^2 omega /(c h)  ( omega  is the field carrier frequency). These parameters are connected with a loss coefficient: gam_abs/z_abs  = N Sigma   = p*tcoh , so

>    p=evalf(subs({tcoh=5e-14,N=1e19,Sigma=5e-15},N*Sigma/tcoh));#The dimension of p is [1/cm/s]

p = .1000000000e19

As the laser we shall consider Ti: sapphire solid-state laser that is the typical laser for femtosecond generation. Its inverse gain bandwidth defining the minimal pulse duration t[f]  = 2.5 fs. We shall use the next normalizations: 1) the time is normalized to t[f] ; 2) the field is normalized to 1/q/ t[f]  = 0.95* 10^7  V/cm; 3) the field intensity is normalized to epsilon[0] n c/ ( 2q t[f] )^2, that is

>    intensity_normalization_parameter := proc()
 local epsilon0,n,c,q,tg,par:
  epsilon0 := 8.85e-14:
   n := 3.32:
    c := 3e10:
     tf := 2.5e-15:
q := parameter_q():
 epsilon0*n*c/(2*q*tf)^2:
end:
evalf(intensity_normalization_parameter());   # The dimension is [W/cm^2]

Warning, `tf` is implicitly declared local to procedure `intensity_normalization_parameter`

.2000000000e12

For such normalization the parameter of the gain saturation for Ti: sapphire (the energy of the gain saturation is 0.8 J/cm^2) is xi  = 6.25* 10^(-4) . As it will be seen, the principal factor in our model is the inverse intensity of the saturation of diffraction loss in the laser (so-called Kerr - lens mode locking parameter) sigma   = 0.14 (parameter of the diffraction loss saturation is 10^7  W and the mode cross section of the Gaussian beam is 30 mu m). The corresponding SPM coefficient in 1 mm active crystal is beta  = 0.26.

The response of the semiconductor absorber is described on the basis of Bloch equations [ L. Allen and J. H. Eberly, Optical Resonance and Two-Level Atoms (Wiley, New York, 1975) ]. In the absence of the field phase modulation and tuning from the medium resonance frequency and in the absence of the relaxation over time interval, which is comparable with the pulse duration, the evolution of the polarization (components a ( t )  and b ( t ) ) and the population difference between excited and ground states w ( t )  obey to the following equations:

>    bloch_1 := diff(b(t),t)=q*rho(t)*w(t);  
 bloch_2 := diff(a(t),t)=0;
  bloch_3 := diff(w(t),t)=-q*rho(t)*b(t);

bloch_1 := diff(b(t),t) = q*rho(t)*w(t)

bloch_2 := diff(a(t),t) = 0

bloch_3 := diff(w(t),t) = -q*rho(t)*b(t)

The solutions of this system are

>    sol_bloch := dsolve({bloch_1,bloch_2,bloch_3,w(0)=-1,b(0)=0,a(0)=0},{a(t),b(t),w(t)}):
 sol_a := subs(sol_bloch,a(t));
  sol_b := subs(sol_bloch,b(t));
   sol_w := subs(sol_bloch,w(t));

sol_a := 0

sol_b := -sin(q*Int(rho(u),u = 0 .. t))

sol_w := -cos(q*Int(rho(u),u = 0 .. t))

The argument of sin/cos is the pulse area psi :

>    b(t):= -sin(psi(t));
a(t):= 0;

b(t) := -sin(psi(t))

a(t) := 0

The linear distributed response of the laser with the gain coefficient alpha , loss coefficient gam , frequency filter with the inverse bandwidth t[f] , laser dispersion element with dispersion coefficient k[2]  is described by the terms in the right hand side of the wave equation (see Parts 5 , 6 ):

>    Laser_linear := alpha*rho(z,t)-gam*rho(z,t)+tf^2*diff(rho(z,t),t,t)+\
I*k_2*diff(rho(z,t),t,t);

Laser_linear := alpha*rho(z,t)-gam*rho(z,t)+tf^2*diff(rho(z,t),`$`(t,2))+k_2*diff(rho(z,t),`$`(t,2))*I

The response of nonlinear laser factors is

>    Laser_nonlinear := sigma*rho(z,t)*conjugate(rho(z,t))*rho(z,t)-I*beta*rho(z,t)*conjugate(rho(z,t))*rho(z,t);

Laser_nonlinear := sigma*rho(z,t)^2*conjugate(rho(z,t))-I*beta*rho(z,t)^2*conjugate(rho(z,t))

Here alpha  and gam  are the dimensionless values, that supposes the normalization of length z  to the length of the optical medium (active medium in our case), gam  includes not only scattering loss into optical elements, but also the output loss on the laser mirror. sigma  and beta  have dimension of the inverse intensity, i. e. abs(rho)^2  is the field intensity (we does not write the factor epsilon 0*n*c/2 , which corresponds to the transition field^2  -> intensity).

As the result, the master integro-differential equation for the field evolution is

>    master_1 := diff(rho(z,t),z)+diff(rho(z,t),t)/c = subs(N=N*z_abs,-2*Pi*N*d*diff(a(t),t)/c+2*Pi*N*d*b(t)*omega/c)+Laser_linear+Laser_nonlinear;#see Part 2

master_1 := diff(rho(z,t),z)+diff(rho(z,t),t)/c = -2*Pi*N*z_abs*d*sin(psi(t))*omega/c+alpha*rho(z,t)-gam*rho(z,t)+tf^2*diff(rho(z,t),`$`(t,2))+k_2*diff(rho(z,t),`$`(t,2))*I+sigma*rho(z,t)^2*conjugate(r...
master_1 := diff(rho(z,t),z)+diff(rho(z,t),t)/c = -2*Pi*N*z_abs*d*sin(psi(t))*omega/c+alpha*rho(z,t)-gam*rho(z,t)+tf^2*diff(rho(z,t),`$`(t,2))+k_2*diff(rho(z,t),`$`(t,2))*I+sigma*rho(z,t)^2*conjugate(r...

Let transit to the differential equation:

>    assume(q,real):
master_2 := expand(subs(rho(z,t)=diff(psi(t),t)/q,master_1));

master_2 := diff(psi(t),`$`(t,2))/(q*c) = -2*Pi*N*z_abs*d*sin(psi(t))*omega/c+alpha*diff(psi(t),t)/q-gam*diff(psi(t),t)/q+tf^2*diff(psi(t),`$`(t,3))/q+k_2*diff(psi(t),`$`(t,3))*I/q+sigma*diff(psi(t),t)...
master_2 := diff(psi(t),`$`(t,2))/(q*c) = -2*Pi*N*z_abs*d*sin(psi(t))*omega/c+alpha*diff(psi(t),t)/q-gam*diff(psi(t),t)/q+tf^2*diff(psi(t),`$`(t,3))/q+k_2*diff(psi(t),`$`(t,3))*I/q+sigma*diff(psi(t),t)...

We shall consider only steady-state field states, i. e. diff(rho,z) (z, t) = 0, and to introduce the time delay on the cavity round-trip delta

>    master_3 := rhs(master_2)+delta*diff(psi(t)/q,`$`(t,2));

master_3 := -2*Pi*N*z_abs*d*sin(psi(t))*omega/c+alpha*diff(psi(t),t)/q-gam*diff(psi(t),t)/q+tf^2*diff(psi(t),`$`(t,3))/q+k_2*diff(psi(t),`$`(t,3))*I/q+sigma*diff(psi(t),t)^2*conjugate(diff(psi(t),t))/(...
master_3 := -2*Pi*N*z_abs*d*sin(psi(t))*omega/c+alpha*diff(psi(t),t)/q-gam*diff(psi(t),t)/q+tf^2*diff(psi(t),`$`(t,3))/q+k_2*diff(psi(t),`$`(t,3))*I/q+sigma*diff(psi(t),t)^2*conjugate(diff(psi(t),t))/(...

Let introduce the parameter lambda , which can be 1) ratio of mode cross-section on active medium to one on semiconductor absorber, or 2) coefficient of refractivity (for field amplitude) of multilayer mirror on the semiconductor absorber (so-called semiconductor saturable absorber mirror - SESAM). Then

>    master_4 := subs({sigma=sigma/lambda^2,beta=beta/lambda^2},master_3);

master_4 := -2*Pi*N*z_abs*d*sin(psi(t))*omega/c+alpha*diff(psi(t),t)/q-gam*diff(psi(t),t)/q+tf^2*diff(psi(t),`$`(t,3))/q+k_2*diff(psi(t),`$`(t,3))*I/q+sigma*diff(psi(t),t)^2*conjugate(diff(psi(t),t))/(...
master_4 := -2*Pi*N*z_abs*d*sin(psi(t))*omega/c+alpha*diff(psi(t),t)/q-gam*diff(psi(t),t)/q+tf^2*diff(psi(t),`$`(t,3))/q+k_2*diff(psi(t),`$`(t,3))*I/q+sigma*diff(psi(t),t)^2*conjugate(diff(psi(t),t))/(...

Now let transit to coordinates 'pulse amplitude - pulse area' and eliminate fast saturable absorber, GDD and SPM. These suppositions lead to the second-order ODE. That is

>    master_5 := collect(expand(subs({k_2=0,beta=0,sigma=0},master_4)/(-2*Pi*N*d*omega*tf*z_abs/c)),diff(psi(t),t));# reduced master equation coefficients
 sub1 := a1=-1/2*c/(Pi*N*d*omega*tf*q*z_abs):
  sub2 := a2=-1/2*c*delta/(Pi*N*d*omega*tf*q*z_abs):
   sub3 := a3=-1/2*c*alpha/(Pi*N*d*omega*tf*q*z_abs)+1/2*c*gam/(Pi*N*d*omega*tf*q*z_abs):

master_6 := a1*diff(psi(t),`$`(t,3))+a2*diff(psi(t),`$`(t,2))+\
a3*diff(psi(t),t)+sin(psi(t));

dsolve(master_6=0,psi(t));  # try to solve master_6 and find a very useful                           change of the variables

master_7 := expand(numer(simplify(subs({a1=rhs(sub1),a2=rhs(sub2),a3=rhs(sub3)},a1*(diff(rho(psi),psi,psi)*rho(psi)^2+diff(rho(psi),psi)^2*rho(psi))+a2*diff(rho(psi),psi)*rho(psi)+a3*rho(psi)+sin(psi))))/(-c)); # use the founded change to reduce the order of ODE

master_5 := (-1/2*c*alpha/(Pi*N*d*omega*tf*z_abs*q)+1/2*c*gam/(Pi*N*d*omega*tf*z_abs*q))*diff(psi(t),t)+sin(psi(t))/tf-1/2*tf*c*diff(psi(t),`$`(t,3))/(Pi*N*d*omega*z_abs*q)-1/2*c*delta*diff(psi(t),`$`(...

master_6 := a1*diff(psi(t),`$`(t,3))+a2*diff(psi(t),`$`(t,2))+a3*diff(psi(t),t)+sin(psi(t))

psi(t) = `&where`(_a,[{diff(_b(_a),`$`(_a,2))*_b(_a)^2+(diff(_b(_a),_a)^2*_b(_a)*a1+a2*diff(_b(_a),_a)*_b(_a)+a3*_b(_a)+sin(_a))/a1 = 0}, {_b(_a) = diff(psi(t),t), _a = psi(t)}, {t = Int(1/_b(_a),_a)+_...
psi(t) = `&where`(_a,[{diff(_b(_a),`$`(_a,2))*_b(_a)^2+(diff(_b(_a),_a)^2*_b(_a)*a1+a2*diff(_b(_a),_a)*_b(_a)+a3*_b(_a)+sin(_a))/a1 = 0}, {_b(_a) = diff(psi(t),t), _a = psi(t)}, {t = Int(1/_b(_a),_a)+_...

master_7 := diff(rho(psi),`$`(psi,2))*rho(psi)^2+diff(rho(psi),psi)^2*rho(psi)+delta*diff(rho(psi),psi)*rho(psi)+rho(psi)*alpha-rho(psi)*gam-2*sin(psi)*Pi*N*d*omega*tf*q*z_abs/c

As it is known (see, for example, L. Allen and J. H. Eberly, Optical Resonance and Two-Level Atoms (Wiley, New York, 1975)),  the propagation of the extremely short laser pulse in the coherent absorber causes the effect of the self-induced transparency, when the pulse does not suffer the decay and there is not a transformation of the pulse shape in the absorber. This effect is the result of the coherent interaction of the pulse with the atoms and is described on the basis of Bloch equations. In the beginning we shall consider the steady-state ultra-short pulse in the presence of the coherent interaction with absorber, but without any lasing factors. In this case, the modified master equation master_7  contains only two terms: the term describing the pulse time delay and the term corresponding to the coherent polarization response. Note, that rho  is the field amplitude multiplied by parameter q ,   psi  is the pulse area.

>    ode1 := delta*rho(psi)*diff(rho(psi),psi) - p*sin(psi);

ode1 := delta*diff(rho(psi),psi)*rho(psi)-p*sin(psi)

The natural initial condition is rho (0) = 0, that is before pulse front its amplitude and area are 0. Then solutions of the master equation are

>    sol := dsolve({ode1,rho(0)=0},rho(psi));

sol := rho(psi) = sqrt(delta*(-2*p*cos(psi)+2*p))/delta, rho(psi) = -sqrt(delta*(-2*p*cos(psi)+2*p))/delta

As one can see, only one solution ( delta  > 0) is physical, because of the amplitude is to be real.

The distinct pulse velocity defines the pulse amplitude. This fact is illustrated by the next figure:

>    animate(evalf(abs(subs(p=5e-4,subs(sol[1],rho(psi)))/10)),\
psi=0..2*Pi,delta=0.3e-5..1e-4,\
frames=100,axes=boxed,color=red,\
labels=[`pulse area`,`y, MV/cm`],title=`Pulse amplitude versus its area`);

[Maple Plot]

The figure demonstrates, that the full pulse area is equal to 2 Pi . Such pulse is named as 2 Pi  - pulse or 2 Pi  - soliton and the process of its formation is the so-called phenomenon of the self-induced transparency.

More natural representation of the coherent solitons in our case is produced by the transition to the coordinates "pulse area - time". Then the master equation (see master_4 ) can be written as follows:

>    ode2 := diff(psi(t),t$2)=a*sin(psi(t));# analog of nonlinear Klein-Gordon equation

ode2 := diff(psi(t),`$`(t,2)) = a*sin(psi(t))

Here a=p/ delta . This is the equation, which is analog of the equation of the pendulum rotation (the angle variable x  in our case is the ultra-short pulse area) and the angle is measured beginning from the upper equilibrium point if delta   > 0 (see above).

>    ode2 := diff(x(t),t$2)=a*sin(x(t));

ode2 := diff(x(t),`$`(t,2)) = a*sin(x(t))

Here a  is negative value (see above). The solution of this equation is well known.

>    sol1 := dsolve(ode2,x(t));

sol1 := Int(1/(sqrt(-2*a*cos(_a)+_C1)),_a = `` .. x(t))-t-_C2 = 0, Int(-1/(sqrt(-2*a*cos(_a)+_C1)),_a = `` .. x(t))-t-_C2 = 0

Make an explicit integration:

>    sol2_a := value(lhs(sol1[1]));
sol2_b := value(lhs(sol1[2]));

sol2_a := -sqrt((-4*a*cos(1/2*x(t))^2+2*a+_C1)/(2*a+_C1))*sqrt(1-cos(1/2*x(t))^2)*EllipticF(2*cos(1/2*x(t))*sqrt(a/(2*a+_C1)),1/2*sqrt((2*a+_C1)/a))/(sqrt(a/(2*a+_C1))*sin(1/2*x(t))*sqrt(-4*a*cos(1/2*x...

sol2_b := sqrt((-4*a*cos(1/2*x(t))^2+2*a+_C1)/(2*a+_C1))*sqrt(1-cos(1/2*x(t))^2)*EllipticF(2*cos(1/2*x(t))*sqrt(a/(2*a+_C1)),1/2*sqrt((2*a+_C1)/a))/(sqrt(a/(2*a+_C1))*sin(1/2*x(t))*sqrt(-4*a*cos(1/2*x(...

The result is expressed through elliptic integrals. The simplification of the radicals produces:

>    sol3_a := simplify(sol2_a+t+_C2,radical,symbolic)=t+_C2;
sol3_b := simplify(sol2_b+t+_C2,radical,symbolic)=t+_C2;

sol3_a := -sqrt(1-cos(1/2*x(t))^2)*EllipticF(2*cos(1/2*x(t))*sqrt((2*a+_C1)*a)/(2*a+_C1),1/2*sqrt((2*a+_C1)*a)/a)/(sqrt(a)*sin(1/2*x(t))) = t+_C2

sol3_b := sqrt(1-cos(1/2*x(t))^2)*EllipticF(2*cos(1/2*x(t))*sqrt((2*a+_C1)*a)/(2*a+_C1),1/2*sqrt((2*a+_C1)*a)/a)/(sqrt(a)*sin(1/2*x(t))) = t+_C2

So, we have:

>    sol3_a := 2*EllipticF(cos(1/2*x(t)),2*sqrt(a*(2*a-_C1))/(2*a-_C1))/sqrt(-2*a+_C1) = t+_C2;
sol3_b := -2*EllipticF(cos(1/2*x(t)),2*sqrt(a*(2*a-_C1))/(2*a-_C1))/sqrt(-2*a+_C1) = t+_C2;

sol3_a := 2*EllipticF(cos(1/2*x(t)),2*sqrt(a*(2*a-_C1))/(2*a-_C1))/(sqrt(-2*a+_C1)) = t+_C2

sol3_b := -2*EllipticF(cos(1/2*x(t)),2*sqrt(a*(2*a-_C1))/(2*a-_C1))/(sqrt(-2*a+_C1)) = t+_C2

Now we define the initial conditions. Let suppose, that   x (0)   = Pi , dx (0) /dt = alpha , where alpha  is the some positive value (we measure the time from lower equilibrium point). Then

>    i_C1 := solve(simplify(subs({diff(x(t),t)=alpha,x(t)=Pi},expand(simplify(diff(lhs(sol3_a),t)))))=1,_C1);
i_C1 := solve(simplify(subs({diff(x(t),t)=alpha,x(t)=Pi},expand(simplify(diff(lhs(sol3_b),t)))))=1,_C1);

i_C1 := 2*a+alpha^2

i_C1 := 2*a+alpha^2

The second constant of integration can be found as follows:

>    i_C2 := simplify(subs({_C1=i_C1,x(t)=Pi},lhs(sol3_a)))=C2;
i_C2 := simplify(subs({_C1=i_C1,x(t)=Pi},lhs(sol3_b)))=C2;

i_C2 := 0 = C2

i_C2 := 0 = C2

The implicit solution is

>    sol4_a := simplify(subs(_C1=i_C1,lhs(sol3_a)),radical,symbolic)=t+lhs(i_C2);
sol4_b := simplify(subs(_C1=i_C1,lhs(sol3_b)),radical,symbolic)=t+lhs(i_C2);

sol4_a := 2*EllipticF(cos(1/2*x(t)),2*sqrt(-a)/alpha)/alpha = t

sol4_b := -2*EllipticF(cos(1/2*x(t)),2*sqrt(-a)/alpha)/alpha = t

Let consider a special situation, when 2 sqrt(p/delta)/alpha = 1:

>    sol5_a := solve(simplify(lhs(subs(2*sqrt(-a)/alpha=1,sol4_a)))=rhs(sol4_a),x(t));
sol5_b := solve(simplify(lhs(subs(2*sqrt(-a)/alpha=1,sol4_b)))=rhs(sol4_b),x(t));

sol5_a := 2*arccos(tanh(1/2*t*alpha))

sol5_b := 2*Pi-2*arccos(tanh(1/2*t*alpha))

>    if sign(sol5_a) < 0 then          # we choose only the root corresponding to growing area
   sol := sol5_a
                    else
   sol := sol5_b
fi:

The dependence of the pulse area on the time is:

>    pulse_area :=
subs(alpha=solve(2*sqrt(p/delta)/alpha=1,alpha),sol);

animate(evalf(subs(p=5e-4,pulse_area)),\
t=-10..10,delta=0.3e-5..1e-1,\
frames=100,axes=boxed,color=red,labels=[`time, t/tf`,`psi`],\
title=`Pulse area versus time`);
#time is normalized to tf

pulse_area := 2*Pi-2*arccos(tanh(t*sqrt(p/delta)))

[Maple Plot]

The pulse profile is:

>    field := value(simplify(convert(diff(pulse_area,t),sincos)));

field := 2*csgn(cosh(abs(t^2*p/delta)/(t*sqrt(p/delta))))*sqrt(p/delta)/cosh(t*sqrt(p/delta))

This is the coherent soliton with duration t[p]  = sqrt(delta/p)  and amplitude 2/(q*t[p])

>    animate(evalf(subs(p=5e-4,field)/10),t=-10..10,delta=0.3e-3..1e-1,frames=100,axes=boxed,color=red,labels=[`time, t/tf`,`rho, MV/cm`],title=`Pulse envelope`);

[Maple Plot]

We have shown that there is the coherent soliton with sech  - shape profile in the condition of the coherent propagation in the media described on the basis of Bloch equations. This pulse may be described in the coordinates 'field - area' or 'field - time'. The first is formally very simple, but the second representation is physically more obvious and corresponds to the model of nonlinear pendulum.

Now we return to the laser model ( master_7 ). This second-order nonlinear nonautonomous ODE can be solved numerically ( pz  = 2 Pi  N d^2 ( omega *tf ) *z_abs/ ( c h )  = gam_abs* tf/tcoh , we supposed gam_abs  = 0.01)

>    de := subs({\
alpha=0.1,\
gam=0.04,\
delta=0.0042,\
pz=5e-4},\
subs({op(6,master_7)=-pz*sin(psi),rho(psi)=rho(psi)/10},master_7)): #here 10 results from the time normalization to tf (i.e. the field is measured in 1/(q*tf) [MV/cm] - units)
fig := DEplot([de=0],rho(psi),psi=0.01..1.985*Pi,[[rho(Pi)=0.76*10,D(rho)(Pi)=1e-15]],rho=0..0.76*10,stepsize=0.001,linecolor=green):
display(fig,labels=[`pulse area`,`rho, MV/cm`],title=`Pulse amplitude versus its area`,view=0..7.6);

[Maple Plot]

Let compare this result with the sech -shape profile (blue color) corresponding to the coherent soliton:

>    plot(subs(am1=0.76,am1*sin(psi/2)*10),psi=0..2*Pi,color=blue):
display(fig,%,labels=[`pulse area`,`rho, MV/cm`],title=`Pulse amplitude versus its area`);

[Maple Plot]

We obtained 2 Pi  - pulse, but, as it can see from previous figure, such pulse is not quasi-soliton with sech -shape profile (which is shown by the blue color, see below about connection between coordinates 'field - area' and 'field - time' in this case). The field 10^6  V/cm corresponds to the intensity in vacuum 1.3 GW/ cm^2 , that is the typical intracavity intensity for the mode-locked solid-state laser.
Now make a try for obtaining of an approximate solution of the master equation. We shall use the solution form, which is typical for the analysis of the equations describing the autooscillations (harmonic approximation):

>    approx_sol := am1*sin(psi/2)+am2*sin(psi);# approximation
f7 := numer(combine(expand(subs(rho(psi)=approx_sol,master_7)),trig));# substitution into initial equation

approx_sol := am1*sin(1/2*psi)+am2*sin(psi)

f7 := -32*sin(psi)*Pi*N*d*omega*tf*q*z_abs+8*delta*am2^2*sin(2*psi)*c+12*delta*am1*am2*sin(3/2*psi)*c-4*delta*am1*am2*sin(1/2*psi)*c-16*gam*am2*sin(psi)*c-16*gam*am1*sin(1/2*psi)*c+16*alpha*am2*sin(psi...
f7 := -32*sin(psi)*Pi*N*d*omega*tf*q*z_abs+8*delta*am2^2*sin(2*psi)*c+12*delta*am1*am2*sin(3/2*psi)*c-4*delta*am1*am2*sin(1/2*psi)*c-16*gam*am2*sin(psi)*c-16*gam*am1*sin(1/2*psi)*c+16*alpha*am2*sin(psi...
f7 := -32*sin(psi)*Pi*N*d*omega*tf*q*z_abs+8*delta*am2^2*sin(2*psi)*c+12*delta*am1*am2*sin(3/2*psi)*c-4*delta*am1*am2*sin(1/2*psi)*c-16*gam*am2*sin(psi)*c-16*gam*am1*sin(1/2*psi)*c+16*alpha*am2*sin(psi...
f7 := -32*sin(psi)*Pi*N*d*omega*tf*q*z_abs+8*delta*am2^2*sin(2*psi)*c+12*delta*am1*am2*sin(3/2*psi)*c-4*delta*am1*am2*sin(1/2*psi)*c-16*gam*am2*sin(psi)*c-16*gam*am1*sin(1/2*psi)*c+16*alpha*am2*sin(psi...

We have to collect the coefficients of sin( psi /2) and sin( psi ):

>    f8 := coeff(f7,sin(psi/2));
f9 := coeff(f7,sin(psi));

f8 := -4*delta*am1*am2*c-16*gam*am1*c+16*alpha*am1*c-10*am1*am2^2*c-2*am1^3*c

f9 := -32*Pi*N*d*omega*tf*q*z_abs-16*gam*am2*c+16*alpha*am2*c+4*delta*am1^2*c-8*am2^3*c-10*am1^2*am2*c

Note, that in the absence of the lasing factors approx_sol  is the exact solution with the parameters am2  = 0, am1  = 2* sqrt(pz/delta) . Below we will suppose, that the approximate solution is close to the symmetrical shape, i. e. am2  = 0. Then

>    f10 := expand(factor(subs(am2=0,f8))/(-2*c*am1));
 f11 := subs(am2=0,f9);
  symmetrical_sol_1 := allvalues(solve({f10=0,f11=0},{am1,delta}));

f10 := am1^2+8*gam-8*alpha

f11 := -32*Pi*N*d*omega*tf*q*z_abs+4*delta*am1^2*c

symmetrical_sol_1 := {delta = Pi*N*d*omega*tf*q*z_abs/(c*(-gam+alpha)), am1 = sqrt(-8*gam+8*alpha)}, {delta = Pi*N*d*omega*tf*q*z_abs/(c*(-gam+alpha)), am1 = -sqrt(-8*gam+8*alpha)}

So, the pulse amplitude is defined by the laser parameters, although the relation between the pulse amplitude, duration and delay corresponds to coherent soliton (see above). Now return to the coordinates 'amplitude - time' for the harmonic approximation.

>    symmetrical_sol_2 := dsolve(diff(psi(t),t)-subs({psi=psi(t),am2=0},approx_sol),psi(t));

symmetrical_sol_2 := psi(t) = 2*arctan(2*exp(1/2*t*am1+1/2*_C1*am1)/(1+exp(t*am1+_C1*am1)),(-exp(t*am1+_C1*am1)+1)/(1+exp(t*am1+_C1*am1)))

The normalized field envelope is:

>    symmetrical_sol_3:=simplify(diff(subs(symmetrical_sol_2,psi(t)),t));

symmetrical_sol_3 := 2*am1*exp(1/2*am1*(t+_C1))/(exp(am1*(t+_C1))+1)

The initial condition is rho (0) = am1 . Then

>    in_C := solve(subs(t=0,symmetrical_sol_3)=am1,_C1);

in_C := 0, 0

And finally we have:

>    symmetrical_sol := subs(_C1=0,symmetrical_sol_3);

symmetrical_sol := 2*am1*exp(1/2*t*am1)/(exp(t*am1)+1)

Naturally, this is a sec h  - shape pulse with the amplitude am1  = 2* sqrt(2*(alpha-gam)) /q/tf  and the duration tp  = 2/( am1*q ) = tf / sqrt(2*(alpha-gam)) . The pulse profile is presented in the next figure:

>    plot3d(subs(gam=0.04,2*sqrt(2*(alpha-gam))*sech(t*sqrt(2*(alpha-gam))/2.5e-15)*10),t=-1e-13..1e-13,alpha=0.04..0.1,axes=boxed,orientation=[290,70],labels=[`t, s`,`alpha`,`rho`],title=`Pulse amplitude (MV/cm) versus time`);

[Maple Plot]

Now we can found the dependence of the pulse parameters on the critical laser parameter, that is the pump. For this aim, we have to express the gain coefficient from the pump intensity. We shall suppose, that active medium operates as a four level scheme. In this case the steady-state saturated gain is described as follows [ J. Herrmann, B. Wilhelmi, "Laser fur Ultrakurze Lichtimpulse", Akademie-Verlag, Berlin (1984) ]:

>    alpha=Pump*alphamx/(Pump+tau*Energy+1/Tr);

alpha = Pump*alphamx/(Pump+tau*Energy+1/Tr)

Here Pump = sigma _ ab*Tc*Ip/h * nu  is the normalized pump intensity, sigma  _ ab  is the absorption cross section at the pump wavelength, Tc  is the cavity period, Ip  is the pump intensity, h * nu  is the pump photon energy, alphamx  is the maximal gain, Energy  is the normalized pulse energy, Tr  is the gain recovery time normalized to Tc  (dimensionless  Tr  = 300 for Ti: sapphire laser with cavity period 10 ns).

For harmonical approximation:

>    Energy=2*am1^2*tp:#pulse energy
f12 := Pump*alphamx/(Pump+tau*Energy+1/Tr)-alpha:
f13 := numer(simplify(subs({am1=2*sqrt(2*(alpha-gam)),tp=1/sqrt(2*(alpha-gam))},subs(Energy=2*am1^2*tp,f12)))):
alpha_sol := solve(f13=0,alpha): #solution for the saturated gain

The dependence of the pulse duration (two physical solutions correspond to two different pulse energy) versus dimensionless pump coefficient is

>    fig := plot({\
Re(evalf(subs(lambda=1,subs({alphamx=0.1,Tr=300,tau=6.25e-4/lambda^2,gam=0.01},subs(alpha=alpha_sol[1],2.5/sqrt(2*(alpha-gam))))))),\
Re(evalf(subs(lambda=1,subs({alphamx=0.1,Tr=300,tau=6.25e-4/lambda^2,gam=0.01},subs(alpha=alpha_sol[3],2.5/sqrt(2*(alpha-gam)))))))},\
Pump=0.0005..0.005,axes=boxed,labels=[`Pump, a.u.`, `tp, fs`],title=`Pulse duration versus pump`,color=red):
display(fig,view=5..40);

[Maple Plot]

As we can see, the pump growth decreases the pulse duration up to sub-10 fs diapason.

The quasi-soliton in the absence of the coherent absorber in the laser with self-focusing is described in parts 5 , 6 . Now we shall demonstrate, that the essential features of the lasing in the presence of both factors is the possibility of the quasi-soliton generation (compare with above discussed situation). We shall search such solutions.

>    assume(t,real):
 assume(tp,real):
  a0 := 2/tp: # This is the pulse amplitude
   sol := int(a0/cosh(t/tp),t): # This is the pulse area psi
     subs({disp=0,beta=0,psi(t)=sol,k_2=0,beta=0},master_4):
       expand(%):
         numer(%):
           eq1 := expand(%/(4*exp(t/tp)));

eq1 := -2*Pi*N*z_abs*d*omega*tp^3*q^3*lambda^2+2*Pi*N*z_abs*d*omega*tp^3*q^3*lambda^2*exp(t/tp)^4+alpha*c*tp^2*q^2*lambda^2+2*alpha*c*tp^2*q^2*lambda^2*exp(t/tp)^2+alpha*c*tp^2*q^2*lambda^2*exp(t/tp)^4...
eq1 := -2*Pi*N*z_abs*d*omega*tp^3*q^3*lambda^2+2*Pi*N*z_abs*d*omega*tp^3*q^3*lambda^2*exp(t/tp)^4+alpha*c*tp^2*q^2*lambda^2+2*alpha*c*tp^2*q^2*lambda^2*exp(t/tp)^2+alpha*c*tp^2*q^2*lambda^2*exp(t/tp)^4...
eq1 := -2*Pi*N*z_abs*d*omega*tp^3*q^3*lambda^2+2*Pi*N*z_abs*d*omega*tp^3*q^3*lambda^2*exp(t/tp)^4+alpha*c*tp^2*q^2*lambda^2+2*alpha*c*tp^2*q^2*lambda^2*exp(t/tp)^2+alpha*c*tp^2*q^2*lambda^2*exp(t/tp)^4...

Collect the terms with equal degrees of exp(t/tp) . As result we obtain the equations for the pulse and system parameters.

>    e1 := coeff(eq1,exp(t/tp)^4);
e2 := coeff(eq1,exp(t/tp)^2);
e3 := expand(eq1-e1*exp(t/tp)^4-e2*exp(t/tp)^2);

e1 := 2*Pi*N*z_abs*d*omega*tp^3*q^3*lambda^2+alpha*c*tp^2*q^2*lambda^2-gam*c*tp^2*q^2*lambda^2+tf^2*c*q^2*lambda^2-delta*c*tp*q^2*lambda^2

e2 := 2*alpha*c*tp^2*q^2*lambda^2-2*gam*c*tp^2*q^2*lambda^2-6*tf^2*c*q^2*lambda^2+16*sigma*c

e3 := -2*Pi*N*z_abs*d*omega*tp^3*q^3*lambda^2+alpha*c*tp^2*q^2*lambda^2-gam*c*tp^2*q^2*lambda^2+tf^2*c*q^2*lambda^2+delta*c*tp*q^2*lambda^2

>    e4 := simplify(e1-e3);
e5 := simplify(e1+e3);
e6 := simplify(e2-e5);

e4 := 4*Pi*N*z_abs*d*omega*tp^3*q^3*lambda^2-2*delta*c*tp*q^2*lambda^2

e5 := 2*alpha*c*tp^2*q^2*lambda^2-2*gam*c*tp^2*q^2*lambda^2+2*tf^2*c*q^2*lambda^2

e6 := -8*tf^2*c*q^2*lambda^2+16*sigma*c

>    allvalues(solve({e4=0,e5=0,e6=0},{tp,delta,sigma}));

{delta = -2*tf^2*Pi*N*z_abs*d*omega*q/(c*(-gam+alpha)), tp = sqrt(-1/(-gam+alpha))*tf, sigma = 1/2*tf^2*q^2*lambda^2}, {delta = -2*tf^2*Pi*N*z_abs*d*omega*q/(c*(-gam+alpha)), tp = -sqrt(-1/(-gam+alpha)...
{delta = -2*tf^2*Pi*N*z_abs*d*omega*q/(c*(-gam+alpha)), tp = sqrt(-1/(-gam+alpha))*tf, sigma = 1/2*tf^2*q^2*lambda^2}, {delta = -2*tf^2*Pi*N*z_abs*d*omega*q/(c*(-gam+alpha)), tp = -sqrt(-1/(-gam+alpha)...

We see the essential differences from the previous situation: 1) there is the pulse with sech -shape (quasi-soliton); 2) the pulse exists, when alpha  < gamma , i. e. the linear loss exceeds the saturated gain. This is an essential demand to the pulse stabilization and breaks the limitations for the loss coefficient in the semiconductor absorber; 3) the quasi-soliton exists only for the defined value of sigma , which can be changed for the fixed absorber properties by the variation of lambda , i. e. by variation of mode cross section in active medium and in absorber or by variation of the absorber mirror reflectivity. Note, that the pulse duration is defined by the formula, which is similar to one for Kerr-lens mode locking (see part 5 ).
Let find the pulse duration as the function of pump.

>    Energy=2*a0^2*tp:#energy of quasi-soliton
f14 := numer(simplify(subs(tp=1/sqrt(gam-alpha),subs(Energy=2*a0^2*tp,f12)))):
alpha_sol2 := solve(f14=0,alpha):#saturated gain
  fig2 := plot(\
Re(evalf(subs(lambda=0.5,subs({alphamx=0.1,Tr=300,tau=6.25e-4/lambda^2,gam=0.01},subs(alpha=alpha_sol2[2],2.5/sqrt(gam-alpha)))))),\
Pump=0.0005..0.005,axes=boxed,labels=[`Pump, a.u.`, `tp, fs`],title=`Pulse duration versus pump`, color=blue):
     display(fig,fig2,view=5..20);

[Maple Plot]

Thus, the Kerr-lensing (blue curve) allows to reduce the pulse duration and to generate the sub-10 fs quasi-soliton.

In the conclusion , we had demonstrated, that an joint action of the lasing factors and coherent absorber objectives to the generation of the coherent soliton. The ultrashort pulse in this case has 2 Pi  area, but it is not sech -shape pulse (quasi-soliton). The obtained values of the pulse duration are placed within interval of 8 - 30 fs. The contribution of the self-focusing changes the pulse shape essentially. In this case, there exists the stable sech -shape quasi-soliton with duration, which depends on the absorber mirror reflectivity (or ratio of the laser mode cross-section in the active medium and absorber). The obtained result is very attractive for the elaboration of compact, all-solid-state, "hand-free" femtosecond lasers.

Conclusion

The powerful computation abilities of Maple 6 allowed to demonstrate the basic conceptions of the modern femtosecond technology. The application of these conceptions to the Kerr-lens mode locking and the mode locking due to coherent semiconductor absorber gave the new scientific results, which are very useful for elaboration of the high-stable generators of femtosecond pulses. We can see, that the combination of the symbolical, numerical approaches and programming opens a door for a new opinion on the ultrashort pulse physics. This opinion is based on the search of the soliton and quasi-soliton states of nonlinear dynamical equations and on the analysis of their evolution as the evolution of the breezer's type.

 Vienna, 2002