%function [rOpt,state] = nl_step(state,aOpt,aDz) function [rOpt_x,rOpt_y] = nl_step(opt_x,opt_y, dz, gamma, chi, use_manakov, beatlength, alpha_lin_x, alpha_lin_y) if ~use_manakov % CNLSE rOpt_x = opt_x .* exp( (-1j*(1/3)*gamma*dz).* ... ( (2 + cos(2*chi)^2)*(abs(opt_x).^2) + ... (2+2*sin(2*chi)^2)*(abs(opt_y).^2) ) ); rOpt_y = opt_y .* exp( (-1j*(1/3)*gamma*dz).* ... ( (2 + cos(2*chi)^2)*(abs(opt_y).^2) + ... (2+2*sin(2*chi)^2)*(abs(opt_x).^2) ) ); % A_x = opt_x; % A_y = opt_y; % % rOpt_x = 1i* gamma * (abs(A_x).^2 + (2/3 .* abs(A_y).^2) ) .* A_x + ((1i * gamma / 3) * conj(A_x).*(A_y.^2) * exp(-2i * dz * 2*pi / beatlength )); % rOpt_y = 1i* gamma * (abs(A_y).^2 + (2/3 .* abs(A_x).^2) ) .* A_y + ((1i * gamma / 3) * conj(A_y).*(A_x.^2) * exp(-2i * dz * 2*pi / beatlength )); else % estimate effective length of dz (ref?) if (alpha_lin_x == 0) && (alpha_lin_y == 0) Leff = dz; else Leff = (1-exp(-alpha_lin_x*dz))/alpha_lin_x; end %compute power power = real(opt_x).^2+imag(opt_x).^2+real(opt_y).^2+imag(opt_y).^2; % power= abs(opt_x).^2+abs(opt_y).^2; % powers = [powers;power]; Hnl = exp( -1j*8/9*gamma*power*Leff); rOpt_x = opt_x .* Hnl; rOpt_y = opt_y .* Hnl; end end