home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftptest.leeds.ac.uk
/
2015.02.ftptest.leeds.ac.uk.tar
/
ftptest.leeds.ac.uk
/
pub
/
leeds
/
obsqc1.f
< prev
Wrap
Text File
|
1997-05-30
|
26KB
|
395 lines
C OBSQC2.FORT ***** VERSION: 12/87 **************************
c modified 8/17/89 by C. Ebinger for use on Vax
c modified 11-7-90 by C. Ebinger to work on Sun
C CALCULATES OBSERVED ADMITTANCE "Q" AND COHERENCE "C"
C USING THE EQUATIONS OF BOWIN AND MCKENZIE (1976).
C THE ERRORS FOR THE ADMITTANCE "DQ" AND COHERENCE "DC"
C ARE CALCULATED FROM BENDAT AND PIERSOL (1980).
C NOTE- "C" CORRESPONDS TO GAMMA SQUARED IN THE NOTATION
C USED IN THE ABOVE PUBLICATIONS.
C
C CROSS AND POWER SPECTRA "CS","TPS" AND "GPS" ARE
C AVERAGED OVER ANNULI WITH LOG SPACING IN THE WAVENUMBER
C PLANE. THE ANNULI ARE BOUNDED BY THE VALUES OF "K2D"
C IN THE "ANNBD" ARRAY. "NA" IS THE NUMBER OF AMPLITUDES IN
C EACH ANNULUS.
C
C NOTE- "N1" IN THIS PROGRAM CORRESPONDS TO "NN2" IN THE
C PROGRAM FFT.FORT.
C
C THIS PROGRAM ALSO HAS THE OPTION OF COMPUTING 1/Q**-1 TO CHECK
C THE CONSISTENCY OF TOP LOADING IN THE MANNER OF FORSYTH (1985).
C
C INPUT FILES: KTOPO*.DAT (DEVICE 1)
C KGRAV*.DAT (DEVICE 2) FROM FFT3a.FOR
C
C OUTPUT FILE: OBSCOH.DAT (DEVICE 3)
C
C IF ORIGINAL DATA WAS MIRRORED IN FFT.FOR IT MIGHT
C BE A GOOD IDEA TO MAKE THE FIRST ANNULUS BOUNDARY
C CORRESPOND TO THE LENGTH OF THE ORIGINAL (UNMIRRORED)
C DATA.
C
C modified 16-5-91 by C. Ebinger to output correlation coefficient
c for surface and subsurface loads. Input ibload and itload as
C ktopo and kgrav files. Standard errors dc computed using erfc.
C
C THE WAVENUMBER RANGE FOR PLOTTING IS 0.001 1/KM - 0.2 1/KM.
C******************** MAIN PROGRAM ***********************
IMPLICIT REAL (K)
COMMON/DATA/N1,N2,DL(2),GAMP(800,800),TAMP(800,800),IPLOT,IWHT
COMMON/WAVE/K2D(800,800),ANNBD(31),PI
COMMON/SPEC/TPS(30),GPS(30),CS(30),NC ,SPG(30)
COMMON/AVRG/C(30),DC(30),KC(30),CWGHT(30),NA(30),Q(30),DQ(30)
common/corr/top(30),bot1(30),bot2(30),top1(30),top2(30),
# dcor(30),cor(30),ncor(30)
C
PI=3.14159265358
WRITE(6,*) ' '
WRITE(6,*) 'CALCULATION OF OBSERVED ADMITTANCE AND COHERENCE'
WRITE(6,*) 'FROM TOPOGRAPHY AND GRAVITY SPECTRAL AMPLITUDES -'
WRITE(6,*) 'TWO LAYER MODEL'
WRITE(6,*) ' '
c WRITE(6,*) 'DO YOU WISH TO CALCULATE THE ADMITTANCE AND'
c WRITE(6,*) 'COHERENCE (0) OR TEST FOR THE CONSISTENCY OF'
c WRITE(6,*) 'TOP LOADING BY CALCULATING THE ADMITTANCE TWO'
c WRITE(6,*) 'INDEPENDENT WAYS (1)?'
c READ(5,*) IWHT
IWHT = 0
CALL INPUT
CALL TWODK
20 WRITE(6,*) 'ENTER NUMBER OF WAVEBANDS OVER WHICH TO'
WRITE(6,*) 'AVERAGE THE COHERENCE (30 MAX): '
READ(5,*) NC
IF(NC.GT.30) NC=30
CALL ANNBDS
30 CALL INIT (III)
CALL AVSPEC
CALL correl
CALL DELANN (III)
GOTO (30,40),III
40 CALL COHERE
CALL OUTPUT
CALL REPT (III)
GOTO (20,999),III
999 END
C
C ----------------------------------------------------------------------------------
SUBROUTINE INPUT
COMMON/DATA/N1,N2,DL(2),GAMP(800,800),TAMP(800,800),IPLOT,IWHT
c
character*12 filetin, filegin,fileout,fspect
print *, 'enter input ktopo filename(output from fft)'
read *, filetin
print *, 'enter input kgrav filename(output from fft)'
read *, filegin
open (unit=2, file=filegin, status='old')
open(unit=1, file=filetin, status='old')
READ(1,100) IDENTT,ILON0T,ILAT0T,SDELTT,THETAT
READ(1,110) N2,N1,DL(2),DL(1)
DO 10 I=1,N1
10 READ (1,120) (TAMP(I,J),J=1,N2)
c 10 write (*,120) (TAMP(I,J),J=1,N2)
READ(2,100) IDENTG,ILON0G,ILAT0G,SDELTG,THETAG
READ(2,110) NN2,NN1,D2,D1
IF((NN2.NE.N2).OR.(NN1.NE.N1).OR.(D2.NE.DL(2)).OR.(D1.NE.DL(1))
+.OR.(ILAT0T.NE.ILAT0G).OR.(ILON0T.NE.ILON0G)
+.OR.(SDELTT.NE.SDELTG)) THEN
WRITE(6,*) 'TOPO AND GRAVITY FILES DO NOT CORRESPOND. '
STOP
END IF
DO 20 I=1,N1
20 READ (2,120) (GAMP(I,J),J=1,N2)
WRITE(6,50)
WRITE(6,51)
50 FORMAT(' IDENT, IDENTG, ILON0, ILAT0, SPACING (KM), AZIMUTH,',
#' (+CCW N)')
51 FORMAT(' NPTS EW, NPTS NS, LENGTH EW (KM), LENGTH NS (KM)')
WRITE(6,*) ' '
WRITE(6,*) IDENTT,IDENTG,ILON0G,ILAT0G,SDELTG,THETAG
WRITE(6,*) NN2,NN1,D2,D1
WRITE(6,*) ' '
WRITE(6,*) 'INPUT COMPLETE. '
WRITE(6,*) 'TOPOGRAPHY AND GRAVITY FILES CORRESPOND.'
WRITE(6,*) ' '
WRITE(6,*) 'ENTER 1 TO SAVE OBSERVED COHERENCE FOR PLOTTING'
WRITE(6,*) ' 2 TO SAVE OBSERVED ADMITTANCE FOR PLOTTING'
WRITE(6,*) ' 3 IF NO DATA IS TO BE SAVED'
READ(5,*) IPLOT
IF (IPLOT.EQ.1.OR.IPLOT.EQ.2) THEN
PRINT *, ' ENTER OUTPUT FILENAME'
READ(5,*) FILEOUT
OPEN ( UNIT=3, FILE=FILEOUT, STATUS= 'NEW')
ENDIF
print *,'fichier spectre?'
read(5,*) fspect
open(unit =10,file =fspect,status ='new')
C-----------------------
100 FORMAT(3I5,2G12.6)
105 FORMAT(4I5,2G12.6)
110 FORMAT(2I5,2G12.6)
115 FORMAT(4G12.6)
120 FORMAT(6G12.6)
RETURN
END
C
C -----------------------------------------------------------------------------------
SUBROUTINE INIT (III)
IMPLICIT REAL (K)
real spg
COMMON/SPEC/TPS(30),GPS(30),CS(30),NC,SPG(30)
COMMON/AVRG/C(30),DC(30),KC(30),CWGHT(30),NA(30),Q(30),DQ(30)
common/corr/top(30),bot1(30),bot2(30),top1(30),top2(30),dcor(30),
# cor(30),ncor(30)
DO 10 I=1,NC
CS(I)=0.0
Q(I)=0.0
TPS(I)=0.0
GPS(I)=0.0
NA(I)=0.0
KC(I)=0.0
ncor(i)=0.0
top(i)=0.0
top1(i)=0.0
top2(i)=0.0
bot1(i)=0.0
bot2(i)=0.0
cor(i)=0.0
dcor(i)=0.0
10 CWGHT(I)=0.0
III=2
RETURN
END
C
C ----------------------------------------------------------------------------
SUBROUTINE TWODK
IMPLICIT REAL (K)
COMMON/DATA/N1,N2,DL(2),GAMP(800,800),TAMP(800,800),IPLOT,IWHT
COMMON/WAVE/K2D(800,800),ANNBD(31),PI
K2D(1,1)=0.0
DO 10 I=2,N1/2+1
10 K2D(I,1)=2*PI*(I-1)/DL(1)
DO 20 J=2,N2/2+1
20 K2D(1,J)=2*PI*(J-1)/DL(2)
DO 30 I=2,N1/2+1
DO 30 J=2,N2/2+1
30 K2D(I,J)=SQRT(K2D(1,J)**2+K2D(I,1)**2)
RETURN
END
C
C ------------------------------------------------------------------------------
SUBROUTINE ANNBDS
IMPLICIT REAL (K)
real spg
COMMON/DATA/N1,N2,DL(2),GAMP(800,800),TAMP(800,800),IPLOT,IWHT
COMMON/WAVE/K2D(800,800),ANNBD(31),PI
COMMON/SPEC/TPS(30),GPS(30),CS(30),NC,SPG(30)
X1=LOG10(AMIN1(K2D(1,2),K2D(2,1)))
X2=LOG10(K2D(N1/2+1,N2/2+1))
Y=(X2-X1)/NC
DO 10 I=1,NC+1
10 ANNBD(I)=10.0**(X1+Y*(I-1))
RETURN
END
C
C --------------------------------------------------------------------------------
SUBROUTINE AVSPEC
IMPLICIT REAL (K)
real spg
COMMON/DATA/N1,N2,DL(2),GAMP(800,800),TAMP(800,800),IPLOT,IWHT
COMMON/WAVE/K2D(800,800),ANNBD(31),PI
COMMON/SPEC/TPS(30),GPS(30),CS(30),NC,SPG(30)
COMMON/AVRG/C(30),DC(30),KC(30),CWGHT(30),NA(30),Q(30),DQ(30)
DO 10 I=1,N1/2+1
DO 10 J=1,N2/2+1
DO 10 L=1,NC
IF((K2D(I,J).GE.ANNBD(L)).AND.(K2D(I,J).LE.ANNBD(L+1))) THEN
CS(L)=CS(L)+(GAMP(I,J)*TAMP(I,J))
TPS(L)=TPS(L)+(TAMP(I,J)*TAMP(I,J))
GPS(L)=GPS(L)+(GAMP(I,J)*GAMP(I,J))
NA(L)=NA(L)+1
KC(L)=KC(L)+(K2D(I,J)*TAMP(I,J)*TAMP(I,J)*GAMP(I,J)*GAMP(I,J))
CWGHT(L)=CWGHT(L)+(TAMP(I,J)*TAMP(I,J)*GAMP(I,J)*GAMP(I,J))
END IF
10 CONTINUE
RETURN
END
C
C ---------------------------------------------------------------------------
subroutine correl
C... correlation coefficient plus standard errors (erfc)
C
IMPLICIT REAL (K)
COMMON/DATA/N1,N2,DL(2),GAMP(800,800),TAMP(800,800),IPLOT,IWHT
COMMON/WAVE/K2D(800,800),ANNBD(31),PI
COMMON/SPEC/TPS(30),GPS(30),CS(30),NC,SPG(30)
COMMON/AVRG/C(30),DC(30),KC(30),CWGHT(30),NA(30),Q(30),DQ(30)
common/corr/top(30),bot1(30),bot2(30),top1(30),top2(30),
# dcor(30),cor(30),ncor(30)
C
DO 10 I=1,N1/2+1
DO 10 J=1,N2/2+1
DO 10 L=1,NC
IF((K2D(I,J).GE.ANNBD(L)).AND.(K2D(I,J).LE.ANNBD(L+1))) THEN
top1(L)=top1(L)+(TAMP(I,J))
top2(L)=top2(L)+(GAMP(I,J))
NCOR(L)=NCOR(L)+1
endif
10 continue
do 20 l=1, NC
top1(l)= top1(l)/NCOR(l)
top2(l)= top2(l)/NCOR(l)
20 continue
DO 30 I=1,N1/2+1
DO 30 J=1,N2/2+1
do 30 L=1,NC
IF((K2D(I,J).GE.ANNBD(L)).AND.(K2D(I,J).LE.ANNBD(L+1))) THEN
top(l)=top(l)+((TAMP(i,j)-top1(l))*(GAMP(i,j)-top2(l)))
bot1(l)=bot1(l)+(TAMP(i,j)-top1(l))**2
bot2(l)=bot2(l)+(GAMP(i,j)-top2(l))**2
endif
30 continue
return
end
C
C ------------------------------------------------------------------------------
SUBROUTINE DELANN (III)
IMPLICIT REAL (K)
real spg
COMMON/DATA/N1,N2,DL(2),GAMP(800,800),TAMP(800,800),IPLOT,IWHT
COMMON/WAVE/K2D(800,800),ANNBD(31),PI
COMMON/SPEC/TPS(30),GPS(30),CS(30),NC,SPG(30)
COMMON/AVRG/C(30),DC(30),KC(30),CWGHT(30),NA(30),Q(30),DQ(30)
NNC=NC
I=0
10 I=I+1
20 IF(I.GT.NNC) GOTO 40
IF(NA(I).LT.2) THEN
III=1
NNC=NNC-1
DO 30 II=I,NNC
NA(II)=NA(II+1)
30 ANNBD(II)=ANNBD(II+1)
ANNBD(NNC+1)=ANNBD(NNC+2)
ELSE
GOTO 10
END IF
GOTO 20
40 NC=NNC
RETURN
END
C
C ------------------------------------------------------------------------------
SUBROUTINE COHERE
IMPLICIT REAL (K)
real spg
COMMON/DATA/N1,N2,DL(2),GAMP(800,800),TAMP(800,800),IPLOT,IWHT
COMMON/WAVE/K2D(800,800),ANNBD(31),PI
COMMON/SPEC/TPS(30),GPS(30),CS(30),NC ,SPG(30)
COMMON/AVRG/C(30),DC(30),KC(30),CWGHT(30),NA(30),Q(30),DQ(30)
common/corr/top(30),bot1(30),bot2(30),top1(30),top2(30),
# dcor(30),cor(30),ncor(30)
DO 10 I=1,NC
KC(I)=KC(I)/CWGHT(I)
CS(I)=CS(I)/(2*NA(I))
TPS(I)=TPS(I)/(2*NA(I))
GPS(I)=GPS(I)/(2*NA(I))
SPG(I) = log(GPS(I))
CB=(CS(I)*CS(I))/(TPS(I)*GPS(I))
IF (IWHT.EQ.0) THEN
C... OBSERVED COHERENCE
C(I)=(NA(I)*CB-1.0)/(NA(I)-1)
DC(I)=ABS(CB*(SQRT(2.0/NA(I))*(1.0-CB)/SQRT(CB)))
cor(i) = top(i)/(SQRT(bot1(i)*bot2(i)))
dcor(i) = abs(cor(i)*sqrt(2.*NA(i))/SQRT(2.0))
c print *, cor(i)
T = 1./(1. + 0.5*(dcor(i)))
dcor(i) = T*exp(-dcor(i)*dcor(i)-1.26551223+T*(1.00002368+
# T*(0.37409196+T*(0.09678418+T*(0.27886807+T*(-1.13520398+T*
# (1.48851587+T*(-0.82215223+T*0.17087277))))))))
IF(C(I).LT.0.0) DC(I)=ABS(C(I))+0.02
DC(I)=AMAX1(DC(I),0.03)
ELSEIF (IWHT.EQ.1) THEN
C... OBSERVED ADMITTANCE FROM 1/Q**-1
C(I)=1.0/(CS(I)/GPS(I))
DC(I)=ABS(C(I)*(SQRT((1.0/CB-1.0)/(2.0*NA(I)))))
ENDIF
C... STANDARD OBSERVED ADMITTANCE
Q(I)=CS(I)/TPS(I)
DQ(I)=ABS(Q(I)*(SQRT((1.0/CB-1.0)/(2.0*NA(I)))))
10 CONTINUE
RETURN
END
C
C ------------------------------------------------------------------------------
SUBROUTINE OUTPUT
IMPLICIT REAL (K)
real SPG
COMMON/DATA/N1,N2,DL(2),GAMP(800,800),TAMP(800,800),IPLOT,IWHT
COMMON/WAVE/K2D(800,800),ANNBD(31),PI
COMMON/SPEC/TPS(30),GPS(30),CS(30),NC,SPG(30)
COMMON/AVRG/C(30),DC(30),KC(30),CWGHT(30),NA(30),Q(30),DQ(30)
common/corr/top(30),bot1(30),bot2(30),top1(30),top2(30),
# dcor(30),cor(30),ncor(30)
WRITE(6,20)
IF (IWHT.EQ.0) THEN
WRITE(6,*) 'OBSERVED COHERENCE AND ADMITTANCE '
WRITE(6,15)
WRITE(6,*) 'K(1/KM) WVL(KM) OBS.COH ',
+' STD.ERR.C OBS.ADM STD.ERR.A NPTS'
write(3,*) ' WVL(km) COPLUS COMOIN '
ELSEIF (IWHT.EQ.1) THEN
WRITE(6,*) 'TEST CONSISTENCY OF TOP LOADING MODEL FROM ADMITTANCE'
WRITE(6,15)
WRITE(6,*) 'K(1/KM) WVL(KM) 1/Q**-1',
+' STD ERR A STD ADM STD ERR A NPTS'
ENDIF
DO 10 I=1,NC
WVL=2*PI/KC(I)
C... Pour calculer comoins(cmo) et coplus(cpl)
cmo = c(i) - dc(i)
cpl = c(i) + dc(i)
WRITE(6,23) KC(I),WVL,C(I),DC(I),Q(I),DQ(I),NA(I)
C... TO SAVE OBSERVED COHERENCES
IF (IPLOT.EQ.1) THEN
C WRITE(3,24) KC(I),WVL, C(I),CPL,CMO
WRITE(3,26) WVL,CPL,CMO
c write(10,27) kc(i),wvl,spg(i)
C WRITE(3,25) KC(I),C(I),DC(I),Q(I),cor(i),dcor(i)
C... TO SAVE OBSERVED ADMITTANCES
ELSEIF (IPLOT.EQ.2) THEN
WRITE(3,25) KC(I),Q(I),DQ(I),C(I)
ENDIF
write(10,27) kc(i),wvl,spg(i)
10 CONTINUE
WRITE(6,20)
WRITE(6,15)
IF (IPLOT.EQ.1.OR.IPLOT.EQ.2) THEN
STOP
ENDIF
15 FORMAT(' ')
20 FORMAT('--------------------------------------------------',
+'------------------------')
23 FORMAT(1X,G9.3,2X,G9.3,1X,G9.3,2X,G9.3,3X,G9.3,3X,G9.3,1X,I5)
24 FORMAT(1X,G9.3,2X,G9.3,1X,G9.3,2X,G9.3,3X,G9.3)
25 FORMAT(G12.6,1X,G12.6,1X,G12.6,1X,G12.6,G12.6,G12.6)
26 FORMAT(1X,G11.5,2X,G11.5,3X,G11.5)
27 FORMAT(2(G11.5,2X),G11.5)
RETURN
END
C
C ------------------------------------------------------------------------------
SUBROUTINE REPT (III)
WRITE(6,*) 'ENTER 1 TO CHANGE NUMBER OF ANNULI FOR AVERAGING'
WRITE(6,*) ' 2 TO QUIT'
READ(5,*) III
RETURN
END