Differential Equations of Complex Variables

Several years ago there was a question on the Igor Mail List about solving in Igor ODEs having complex variables. John Weeks replied that you have to decompose the system into 2N real variables. I have just had the need to do this, and found that a systematic approach does not require full decomposition by the user, and Igor complex number functions can reduce the burden of doing so. Here is a brief code example showing how to maintain much of the complex nature of the internal variables in the ODE derivative routine, with only minimal additional burden. The example happens to be for phase-matched optical parametric amplification including pump depletion (not generally treated in texts). All units and variables are normalized.
Function OPA(pw, zz, yw, dydz)
    Wave    pw      // pw[0] = imK1, pw[1] =imK2, pw[2] = imK3
    Variable  zz      // z value at which to calculate derivatives
    Wave    yw      // yw[0]-yw[5] containing real and imag parts of 3 complex variables
    Wave    dydz   // wave to receive d reE1/dz, d ImE1/dz etc. (output)

    //             idler                      signal                              pump 
    variable/C E1 = cmplx(yw[0],yw[1]) , E2 = cmplx(yw[2],yw[3]), E3 = cmplx(yw[4],yw[5])
    variable/C K1 = cmplx(0,pw[0]),      K2 = cmplx(0,pw[1]),     K3 = cmplx(0,pw[2])
   
    dydz[0] =  real( K1 * conj(E2) * E3 )     //   idler       
    dydz[1] =  imag( K1 * conj(E2) * E3 )  

    dydz[2] =  real( K2 * conj(E1) * E3 )     //   signal
    dydz[3] =  imag( K2 * conj(E1) * E3 )

    dydz[4] =  real( K3 * E1 * E2 )           //   pump
    dydz[5] =  imag( K3 * E1 * E2 )
    return 0
End
//---------------------------------------------------------------------------------------------------------------------------------------
Function testOPA()

    Make/D/O/N=(400,6) wopa
    setscale/P x, 0, 0.005, wopa
    wopa[0][0]  =  0.0     //   real idler     //  initial conditions at z=0
    wopa[0][1]  =     0.0   //  imag idler
    wopa[0][2]  =     0.2   //  real signal
    wopa[0][3]  =     0.0   //  imag signal
    wopa[0][4]  =     5     //  real pump
    wopa[0][5]  =     0.0   //  imag pump
    make/D/O wparm = {(1/3), 1.000, (4/3)}             // ratios of inverse wavelengths
    IntegrateODE/M=1/E=1e-6 OPA, wparm, wopa  // derivative function, parameters, results
end

Forum

Support

Gallery

Igor Pro 9

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More