USE stokes1
ASK alfa
IF PlotOn THEN GRAPHICSMODE
TYPEOF(zstar) zstarprev; COMPLEX scp1
DO zeta(i)=EXP(-10*y(i)) FOR i=zeta.LO TO zeta.HI
zetaold=zeta
MarchForward2
REAL g=0
DO
prevg=g
psi=psi/SQRT[Energy(psi)]
IF PlotOn THEN
REAL psimax=ABS(psi(1))
DO psimax=MAX(psimax,ABS(psi(i))) FOR i=2 TO ny-1
CLEARSCREEN
Plot(psi,8,psimax)
END IF
WRITE "final psi (gain", g ")"
DO zstar(i)=CONJG[psi(i)]*[y(i+1)-y(i-1)]/2 FOR i= psi.LO TO psi.HI
zstar1=0
zstarprev=zstar
MarchBackward2
DO psi(i)=CONJG[zstar(i)]*2/[y(i+1)-y(i-1)] FOR i=psi.LO TO psi.HI
g=1/Energy(psi); psi=psi*SQRT(g)
zeta=B*psi
zetaold=zeta
IF PlotOn THEN
CLEARSCREEN
REAL psimax=ABS(psi(1))
DO psimax=MAX(psimax,ABS(psi(i))) FOR i=2 TO ny-1
Plot(psi,8,psimax)
END IF
WRITE "initial psi (gain",g")"
IF provacostante THEN scp1=sclrprod()
MarchForward2
g=Energy(psi)
IF provacostante THEN zstar=zstarprev; zstar1=0; WRITE "scp1=" scp1, "scp2="sclrprod()
UNTIL ABS(1-prevg/g)<1.E-3
WRITE "maximum gain: " g
FILE WriteProfile=CREATE("profile")
WriteProfile 0,0,0
DO WriteProfile y(i),ABS(I*alfa*psi(i)),ARG(I*alfa*psi(i)) FOR i=1 TO ny-1
WriteProfile
WriteProfile 0,0,0
DO WriteProfile (y(i)+y(i-1))/2, ABS([psi(i)-psi(i-1)]/[y(i)-y(i-1)]), ARG([psi(i)-psi(i-1)]/[y(i)-y(i-1)]) FOR i=2 TO ny-1
WriteProfile
WriteProfile 0,0,0
DO WriteProfile y(i),ABS(zstar(i)/(y(i+1)-y(i))*2),ARG(zstar(i)/(y(i+1)-y(i))*2) FOR i=1 TO ny-1
IF PlotOn THEN TEXTMODE