Excerpted from an email correspondence from Serena Thevenin-Illig (LEGOS/IRD):
I just would like to draw your attention on some lines in the code of
mtm-svd-recon.f where you average some angles in order to estimate the
averaged phase relatively the reference position (line 845), when doing an
evolving frequency analysis. One can not average angle because it is not a
continuous function. (-180+180=0 and should be 180 or -180), we better
compute the average of the position.
Here are the lines I modified:
I define the averages positions and initialize them to zero.
real *8 xave(mmax,mmax),yave(mmax,mmax)
do i=1,iabv
do j=1,nmode
xave(i,j) = 0.d0
yave(i,j) = 0.d0
enddo
enddo
Around line 845, The I compute cathesian values of complex U with unit amplitude
x_pos=cos(atan2(dimag(U(i,j)),dreal(U(i,j))))
y_pos=sin(atan2(dimag(U(i,j)),dreal(U(i,j))))
I rotate the vector by -1*angle_ref
x_prim=x_pos*cos(-1*angle_ref)-y_pos*sin(-1*angle_ref)
y_prim=x_pos*sin(-1*angle_ref)+y_pos*cos(-1*angle_ref)
I average the positions, (amplitude remains unity)
xave(i,j)=xave(i,j)+x_prim
yave(i,j)=yave(i,j)+y_prim
Around line 1158:
xave(i,j)=xave(i,j)/float(niter)
yave(i,j)=yave(i,j)/float(niter)
avephase(i,j)=180.*atan2(yave(i,j),xave(i,j))/pi
Cordially,
.
Serena THEVENIN-ILLIG