SUBROUTINE BINDERIV(ID,IG,V2DERIV) C Calculate derivatives of squared visibilities of binaries for BINFIT. C The quantities calculated, V2DERIV, are the derivatives of the squared C visibility of the ID,IG-th data point, where ID labels the scan and IG C labels the filter, with respect to all parameter types (J=1 to 8) of C all filters IFF and all components ICC. C J.T. Armstrong 1 Feb 1991 INCLUDE 'BINFIT.INC' COMPLEX*16 DERIV(MXMOD,MXFILT,8), SUMDERIV(MXMOD,MXFILT,8),CONJ REAL*8 V2DERIV(MXMOD,MXFILT,8) INTEGER*4 ICC, IGG EXTERNAL CONJ C WRITE(OUTC,'(A,I2,1X,I2)') ' Entering BINDERIV w/ ID,IG = ',ID,IG C Zero the SUMDERIV array D WRITE(OUTC,*) ' NCOMP, NFILT = ',NCOMP,NFILT DO ICC = 1, NCOMP DO IGG = 1, NFILT DO J = 1, 8 D WRITE(OUTC,'(A,I3,A,I3,A,I3,A)') D 1 ' Zeroing SUMDERIV(',ICC,',',IGG,',',J,').' SUMDERIV(ICC,IGG,J) = CMPLX(0., 0.) V2DERIV(ICC,IGG,J) = 0. END DO END DO END DO C Sum over contributions to derivatives the components. BWDERIV returns C complex derivatives of the complex visibility (NOT of the visibility C squared) with respect to parameters of all components, filters, and C parameter types. DO IC = 1, NCOMP C WRITE(OUTC,'(A,3(I2,1X))') C 1 ' Going to BWDERIV w/ IC,ID,IG = ',IC,ID,IG CALL BWDERIV(IC,ID,IG,DERIV) D WRITE(OUTC,*) ' Returned from BWDERIV' DO ICC = 1, NCOMP DO IGG = 1, NFILT DO J = 1, 8 IF(VARY(ICC,IGG,J)) THEN SUMDERIV(ICC,IGG,J) 1 = SUMDERIV(ICC,IGG,J) + DERIV(ICC,IGG,J) C WRITE(OUTC,'(A,I2,A,I2,A,I2,A,G11.4,1X,G11.4)') C 1 ' SUMDERIV(',ICC,',',IGG,',',J,') = ', C 2 SUMDERIV(ICC,IGG,J) END IF END DO END DO END DO END DO C Now calculate the derivative of visibility squared. DO ICC = 1, NCOMP DO IGG = 1, NFILT DO J = 1, 8 IF(VARY(ICC,IGG,J)) THEN V2DERIV(ICC,IGG,J) 1 = 2.0 * DBLE( VISTOT(ID,IG)*CONJ(SUMDERIV(ICC,IGG,J)) ) C WRITE(OUTC,'(A,I2,A,I2,A,I2,A,G11.4)') C 1 ' V2DERIV(',ICC,',',IGG,',',J,') = ',V2DERIV(ICC,IGG,J) END IF END DO END DO END DO RETURN END C====================================================================== COMPLEX*16 FUNCTION CONJ(X) C Complex conjugate (double precision) COMPLEX*16 X CONJ = CMPLX(DBLE(X),-DIMAG(X)) RETURN END