
Complex Wave used in real expression

igornoob12
When running the following function I always get a "Complex Wave used in real expression". The debugger shows that this happens in one of the if statements.
What is the problem?
Function getOmegaRsqr(rootWave,outputwave) Wave/C rootWave Wave outputwave NVAR alpha,betaa,bigOmega, omega0sqr Variable c1,c2,force variable j = 0 for(j=0;j<dimSize(rootWave,0);j+=1) force = pnt2x(rootWave,j) c1 = (alpha*force^2)/(2*bigOmega^2) c2 = omega0sqr + (3*betaa*force^2)/(2*bigOmega^2) make/o/d/n=2 rootsTEMP variable count =0 variable i=0 for(i=0;i<3;i+=1) if((abs(imag(rootWave[j][i])/sqrt(magsqr(rootWave[j][i]))))<0.00000001) //"Complex Wave used in real expression" if(c2+2*alpha*rootWave[j][i] + 3*betaa*(rootWave[j][i])^2 > 0) //or possibly here rootsTEMP[count]=real(rootWave[j][i]) count+=1 endif elseif((abs(sqrt(magsqr(rootWave[j][i]))))<0.0000000000000001) //"Complex Wave used in real expression" if(c2+2*alpha*rootWave[j][i] + 3*betaa*(rootWave[j][i])^2 > 0) //or possibly here rootsTEMP[count]=real(rootWave[j][i]) count+=1 endif endif Endfor Variable root if(count == 0) print force endif if(count ==1) root = rootsTEMP[0] elseif(count == 2) //print rootsTEMP if(alpha>0) root = wavemax(rootsTEMP) else root = wavemin(rootsTEMP) endif endif //print root outputwave[j] = c2 + 2*alpha*root+ 3*betaa*root^2 Endfor killwaves rootsTEMP End
since the "if" commands expects a real value and the compiler is told ("/C") that rootwave is complex.
There is some "magsqr", "real", "imag", etc missing (like you used them in the line just above :-) )
HJ
August 5, 2015 at 09:51 am - Permalink
You are right, thanks. The first "if" checks if the number is real so I assumed that the value is "real".
August 5, 2015 at 10:38 am - Permalink