±±¾©Ê¯ÓÍ»¯¹¤Ñ§Ôº2026ÄêÑо¿ÉúÕÐÉú½ÓÊÕµ÷¼Á¹«¸æ
²é¿´: 968  |  »Ø¸´: 2

sunflowerhl

гæ (³õÈëÎÄ̳)

[ÇóÖú] FortranÓëMATLABÓïÑÔ

ÔÚ×ö²¨ÀËÓë½á¹¹Îï×÷ÓÃʱ£¬ÏëÒªÇó½â²¨ÀË·´ÉäϵÊý£¬ÏÖÓÐFortran³ÌÐòÈçÏ£¬ÓÉÓڸóÌÐò¼ÆËã½á¹û²¢²»×¼È·£¬ÏÖÔÚÏëÕÒ³öÔ­Òò£¡µ«ÓÉÓÚ±¾ÈËÖ»¶®µÃMATLABÓïÑÔ£¬ËùÒÔÄÜ·ñÇë´óÉñÖ¸µ¼ÏÂÕâ¸öFORTRANÈë·´Éä·ÖÀëÇó½â³ÌÐò£¬ÄÜ·ñÖØÐ±àÒë³ÉMATLAB£¬»òÕ߸ø¸ÃFORTRAN³ÌÐòÓï¾ä×öЩעÊÍÒ²ÊǼ«ºÃµÄ£¡
CC SEPARATION OF INCIDENT AND REFLECTED SPECTRA IN WAVE FLUMES
C----------------------------------------------------------------
C IRREGULAR WAVE REFLECTION  ANALYSIS PROGRAMED BY lIU SHUXUE
C NS=2    No. OF WAVE GAUGES
C NTOTAL  No. OF WAVE DATA
C DT      TIME INTERVAL
C DEPTH   WATER DEPTH AT THE WAVE GAUGES
C DL      SPACING BETWEEN THE TWO GAUGES
C THE DATA OF THE 1ST GAUGE
C----------------------------------------------------------------
         DIMENSION TSER(2,65536),E1(65536),E2(65536),EI1(65536),EI2(65536)
       DIMENSION WHI(32768),WHR(32768),AKRZ(32768),FE(32768)
        DIMENSION SPEI(65536),SPER(65536)
        CHARACTER*25 NAME

          WRITE(*,*)' '
          WRITE(*,*)'     SEPARATION OF INCIDENT AND REFLECTED SPECTRA'
          WRITE(*,*)'           USING TWO POINT METHOD PROGRAMDE BY '
          WRITE(*,*)'            LIU SHUXUE, DUT  '

          WRITE(*,*)' '
          WRITE(*,1000)
          READ(*,*) NTOTAL

          WRITE(*,*)' '
          WRITE(*,1100)           ! ÊäÈëʱ¼ä¼ä¸ô
          READ(*,*) DT

          WRITE(*,*)' '
          WRITE(*,1200)                ! ÊäÈëË®Éî
          READ(*,*) DEPTH

          WRITE(*,*)' '
          WRITE(*,1300)           ! ÊäÈëÊý¾ÝÎļþÃû
          READ(*,'(A)') NAME
          WRITE(*,*)' '       

          WRITE(*,*)' '
          write(*,1400)    ! ÊäÈë²âµã¼ä¾à£¬Ïà¶ÔÓÚ½¨ÖþÎÍâ²à²âµã¶ÔÓ¦1£¬ÄÚ²à¶ÔÓ¦2
          READ(*,*)DL
        
          OPEN(1,FILE=NAME,STATUS='OLD')

          DO J=1,NTOTAL
           READ(1,*)TSER(1,J),TSER(2,J)
          END DO
          CLOSE(1)

1000    FORMAT(1X, "LENGTH OF TIME SERIES IS:N="
     &          / 1X,"-->>"
1100    FORMAT(1X, " TIME  INTERVAL IST="
     &          /1X, "-->>"
1200    FORMAT(1X, "THE DEPTH OF WATRE ISEPTH"
     &          / "-->>"
1300    FORMAT(1X, "TIME SERIES DATA FILE NAME IS"
     &          / 1X,"-->>"
1400    FORMAT(1X, "THE SPACE OF TWO POINTS: DL"
     &          / "-->>"


        DO I=1,NTOTAL
          E1(I)=0.0
          E2(I)=0.0
          EI1(I)=0.0
          EI2(I)=0.0
        END DO
        DO I=1,NTOTAL
         E1(I)=TSER(1,I)
         E2(I)=TSER(2,I)
        END DO
        NTS=NTOTAL

        INV=1
        CALL FFT(INV,NTS,E1,EI1)
        CALL FFT(INV,NTS,E2,EI2)

        DEL_F=1/DT/FLOAT(NTS)
        ALM1=DL/0.05
        AK1=2.*3.14159/ALM1
        ALM2=DL/0.45
        AK2=2.*3.14159/ALM2
        FLMAX=SQRT(AK2*9.8*TANH(AK2*DEPTH))/2./3.14159
        FLMIN=SQRT(AK1*9.8*TANH(AK1*DEPTH))/2./3.14159

         DO I=1,NTS/2

          FE(I)=FLOAT(I-1)*DEL_F
          IF(FE(I).GT.FLMIN.AND.FE(I).LT.FLMAX)THEN
           A1=2.0*E1(I)
           B1=2.0*EI1(I)
           A2=2.0*E2(I)
           B2=2.0*EI2(I)
           CALL REFLECTION(FE(I),DEPTH,DL,A1,A2,B1,B2,AI,AR,AKR)
           WHI(I)=AI
           WHR(I)=AR
           AKRZ(I)=AKR
          ELSE
           WHI(I)=0.0
           WHR(I)=0.0
           AKRZ(I)=0.0
          END IF

         END DO

         AIS=0.0
         ARS=0.0
         DO I=1,NTS/2
           AIS=AIS+WHI(I)**2
           ARS=ARS+WHR(I)**2
         END DO
           ARS=SQRT(ARS)
           AIS=SQRT(AIS)
         AKS=ARS/AIS
C
         WRITE(*,*)' THE ALALYZED REFLECTION COEFFICIENT: KR= ',AKS

            WRITE(*,*)' '
            WRITE(*,'(A\)')' ENTER INCIDENT AND REFLECTED SPECTRA  NAME:'
                READ(*,'(A)')NAME
          OPEN(1,FILE=NAME,STATUS='UNKNOWN')

             WRITE(*,'(A\)')' SMOOTHING THE SPECTRA ?: (1=Y, 0=N): '
                 READ(*,*)ISMO

           IFZ=0
           DO I=1,NTS/2
            IF(FE(I).GT.FLMAX*2)GOTO 321
            IFZ=IFZ+1
            SPEI(I)=WHI(I)**2/DEL_F/2.
            SPER(I)=WHR(I)**2/DEL_F/2.
321       END DO
             IF(ISMO.EQ.1)THEN

               WRITE(*,*)' '
               WRITE(*,'(A\)')' ENTER THE SMOOTHING POINT NPT= '
               READ(*,*)NPT
               WRITE(*,*)' '
               WRITE(*,'(A\)')' THE NO. OF SMOOTHING NPASS= '
               READ(*,*)NPASS

             CALL SMOOTH(NPT,NPASS,IFZ,SPEI)
             CALL SMOOTH(NPT,NPASS,IFZ,SPER)
             END IF
           DO I=1,IFZ
            WRITE(1,101)FE(I),SPEI(I),SPER(I)
           END DO
           CLOSE(1)
101        FORMAT(1X,3F12.8)
           PAUSE

        STOP
        END
C
        SUBROUTINE REFLECTION(F,D,DL,A1,A2,B1,B2,AI,AR,AKR)

        W=2.*3.14159*F
        AK=WN(W,D)
        AI=SQRT((A2-A1*COS(AK*DL)-B1*SIN(AK*DL))**2
     &+(B2+A1*SIN(AK*DL)-B1*COS(AK*DL))**2)/(2.*ABS(SIN(AK*DL)))
        AR=SQRT((A2-A1*COS(AK*DL)+B1*SIN(AK*DL))**2
     &+(B2-A1*SIN(AK*DL)-B1*COS(AK*DL))**2)/(2.*ABS(SIN(AK*DL)))
        AKR=AR/AI

        RETURN
        END
C---------------------------------------------------
C THIS FUNCTION IS USED TO CALCULATE THE WAVE_NUMBER
C---------------------------------------------------
        FUNCTION WN(W,D)
        A=0.0
        B=25.0
        EP=1.0E-5
11     Y=FF(W,B,D)
        IF(Y.LT.0.0)GOTO 22
        B=2.0*B
        GOTO 11
22     C=A
        H=W*W/9.8/10.0
5      Y0=FF(W,C,D)
10     C=C+H
        IF(C.GT.B)THEN
        WRITE(*,*)'    B IS TOO SMALL  '
        STOP
        END IF
        Y1=FF(W,C,D)
        IF(Y1*Y0.LT.0.0.OR.Y1.EQ.0.0)GOTO 15
        Y0=Y1
        GOTO 10
15     A1=C-H
        B1=C
        Y0=FF(W,A1,D)
30     X=0.5*(A1+B1)
        Y=FF(W,X,D)
        IF(Y*Y0.GT.0.0)A1=X
        IF(Y*Y0.LE.0.0)B1=X
        DY=B1-A1
        if(dy.gt.ep)goto 30
        WN=X
        RETURN
        END
        FUNCTION FF(W,AK,D)
        FF=W*W-AK*9.8*TANH(AK*D)
        END
C
C****************************************************************
C--------------------------------------------------------------------
C INV=0: FOURIER TRANSFORM: OUTPUT=(XC,XS)*EXP(-iwt)
C                                        =[XC*COS(wt)+XS*SIN(wt)]+i[-XC*SIN(wt)+XS*COS(wt)]
C
C    =1: INVRESE FOURIER TRANSFORM; OUTPUT MULTIFIED BY N
C                                   =(XC,XS)*EXP(iwt)
C                                        =[XC*COS(wt)-XS*SIN(wt)]+i[XC*SIN(wt)+XS*COS(wt)]
C--------------------------------------------------------------------
          SUBROUTINE FFT(INV,N,XC,XS)
        DIMENSION XC(65536),XS(65536)
        REAL UC,US,WC,WS,TC,TS
        M=ALOG(FLOAT(N))/ALOG(2.0)+0.1
        NV2=N/2
        NM1=N-1
        J=1
        DO 40 I=1,NM1
        IF(I.GE.J) GOTO 10
        TC=XC(J)
        TS=XS(J)
        XC(J)=XC(I)
        XS(J)=XS(I)
        XC(I)=TC
        XS(I)=TS
10      K=NV2
20      IF(K.GE.J) GOTO 30
        J=J-K
        K=K/2
        GOTO 20
30      J=J+K
40      CONTINUE
        PI=4.0*ATAN(1.0)
        DO 70 L=1,M
        LE=2**L
        LE1=LE/2
        UC=1.0
        US=0.0
        WC=COS(PI/FLOAT(LE1))
        WS=-SIN(PI/FLOAT(LE1))
        IF(INV.NE.0)WS=-WS
        DO 60 J=1,LE1
        DO 50 I=J,N,LE
        IP=I+LE1
        TC=XC(IP)*UC-XS(IP)*US
        TS=XS(IP)*UC+XC(IP)*US
        XC(IP)=XC(I)-TC
        XS(IP)=XS(I)-TS
        XC(I)=XC(I)+TC
        XS(I)=XS(I)+TS
50      CONTINUE
        UC1=UC*WC-US*WS
        US=US*WC+UC*WS
        UC=UC1
60      CONTINUE
70      CONTINUE
C        TYPE*,' N=',N
        IF(INV.EQ.0) RETURN
        DO 80 I=1,N
        XC(I)=XC(I)/FLOAT(N)
        XS(I)=XS(I)/FLOAT(N)
80      CONTINUE
        RETURN
        END
C****************************************************************

        SUBROUTINE SMOOTH(NPT,NPASS,ITOTAL,RESULT)
C
C       This subroutine takes 2 arrays describing 2 address windows
C               describing a 65536 word array in common block /REGR/
C               and smooths ITOTAL points with a NPT point and NPASS
C               pass moving average smoothing, keeping the average in
C               array SMOTH.
C
        DIMENSION SMOTH(101),REF(49)
        DOUBLE PRECISION SUMTMP,SUMR
        DIMENSION RESULT(1)
C
C       Loop over the number of passes
C
        DO 1000 IPASS=1,NPASS
C
C       Fill SMOTH array for 1st time get initial sum
C
        SUMTMP=0.
        DO 11 J=1,NPT
        SMOTH(J)=RESULT(J)
        SUMTMP=SUMTMP+DBLE(RESULT(J))
11      CONTINUE
C
C       Smooth 1st NPT/2 points
C
C               Treat spectrum as a reflection about 0
C
C               Calculate initial sum
C
        SUMR=0.                         !initialize sum
        DO 5 I=1,NPT/2-1
        REF(I)=RESULT(I)                !fill in array of reflected values
        SUMR=SUMR+2*DBLE(REF(I))        !add reflected values to sum
5       CONTINUE                        !end of loop
        SUMR=SUMR+DBLE(RESULT(NPT/2))+DBLE(RESULT(NPT/2+1))   !add last 2 pts.
C
C               Fill in 1st NPT/2 values
C
        DO 10 I=1,NPT/2
        RESULT(I)=SNGL(SUMR/FLOAT(NPT))         !fill in averaged value
        IF (I .NE. NPT/2) THEN
                SUMR=SUMR-DBLE(REF(NPT/2-I))    !decrement sum
                SUMR=SUMR+DBLE(RESULT(NPT/2+1+I))   !add to sum
        END IF
10      CONTINUE                                !end of loop
C
C       Fill in smoothed value for NPT/2+1
C
        RESULT(NPT/2+1)=SNGL(SUMTMP)/NPT
C
C       Initialize pointers:
C                               PTR1-pointer for SMOTH array
C                               PTR2-pointer used to read from RESULT array
C                               PTR3-pointer used to read/write to RESULT array
C
        JCOUNT=0
C        ICOUNT=0
        PTR1=1
        PTR2=NPT+1
        PTR3=NPT/2+1
C
C       Top of main smoothing loop
C
12      CONTINUE
C
C       Put new avg in PTR3+1 from PTR3*NPT - PTR1 + PTR2
C               change value in PTR1
C
        SUMTMP=SUMTMP+DBLE(RESULT(PTR2)-SMOTH(PTR1))
        RESULT(PTR3+1)=SNGL(SUMTMP)/NPT
        SMOTH(PTR1)=RESULT(PTR2)
C
C       Increment pointers
C
        PTR1=PTR1+1
        PTR2=PTR2+1
        PTR3=PTR3+1
        JCOUNT=JCOUNT+1
C
C       Test pointers for reaching boundaries
C
        IF (JCOUNT .GT. ITOTAL) GOTO 1000
        IF (PTR1 .GT. NPT) PTR1=1
        IF (PTR2 .GT. ITOTAL) PTR2=1
        IF (PTR3 .GT. ITOTAL)GOTO 1000
C        IF (PTR3 .GT. ITOTAL) THEN
C                IF (ITOTAL-JCOUNT .LE. 65536) GOTO 16
C16              PTR3=1
C        ELSE
C                IF (PTR3 .EQ. 8193) THEN
C                        ICOUNT=ICOUNT+2
C                        IF (ITOTAL-JCOUNT .LT. 65536) GOTO 17
C17                      CONTINUE
C                END IF
C        END IF
        GOTO 12
C
C       Exit main smoothing loop
C
1000    CONTINUE
        RETURN
        END
»Ø¸´´ËÂ¥

» ÊÕ¼±¾ÌûµÄÌÔÌûר¼­ÍƼö

matlab±à³Ì»æÍ¼

» ²ÂÄãϲ»¶

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

yuson

Í­³æ (СÓÐÃûÆø)

½¨Òé×Ô¼º´ÓÍ·µ½Î²¸ã¶®£¬ÕâÑùÊÕ»ñ»áºÜ´ó
2Â¥2015-08-27 13:09:27
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

matlab±à³Ì

½û³æ (СÓÐÃûÆø)

±¾ÌûÄÚÈݱ»ÆÁ±Î

3Â¥2015-08-28 00:01:50
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ sunflowerhl µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 286Çóµ÷¼Á +20 Faune 2026-04-06 20/1000 2026-04-07 11:33 by Ê«Óë×ÔÓÉ
[¿¼ÑÐ] Èí¹¤Ñ§Ë¶299Çóµ÷¼Á +6 useryy 2026-04-07 6/300 2026-04-07 09:50 by vgtyfty
[¿¼ÑÐ] 334·Ö¿ØÖƹ¤³ÌÇóµ÷¼Á +4 ½ªÉÐÕæsadasd 2026-04-03 4/200 2026-04-07 09:26 by À¶ÔÆË¼Óê
[˶²©¼ÒÔ°] 0856²ÄÁÏ»¯¹¤Çóµ÷¼Á£¬Ò»Ö¾Ô¸211£¬³õÊԳɼ¨349 +4 ½­»´±±Ô 2026-04-05 4/200 2026-04-06 22:44 by chenzhimin
[¿¼ÑÐ] ²ÄÁϵ÷¼Á +10 Ò»ÑùYWY 2026-04-06 10/500 2026-04-06 21:05 by lbsjt
[¿¼ÑÐ] 277Çóµ÷¼Á +5 ¿¼Ñе÷¼Álxh 2026-04-05 5/250 2026-04-05 19:03 by chy09050039
[¿¼ÑÐ] µç×ÓÐÅÏ¢µ÷¼Á½»²æÑ§¿ÆÓÐÍÆ¼öÂð +6 jhtfeybgj 2026-04-01 9/450 2026-04-05 11:13 by Öí»á·É
[¿¼ÑÐ] µ÷¼ÁÇóÖú +10 Ïë»»ÊÖ»ú²»Ïë½âÊ 2026-04-02 13/650 2026-04-05 09:41 by sam3303
[¿¼ÑÐ] ÇóÉúÎïѧѧ˶µ÷¼Á¡ª¡ª364·Ö +7 ÔÆ¶äåÞÍäÖ¸ÄÏ 2026-04-04 7/350 2026-04-04 22:49 by zhyzzh
[¿¼ÑÐ] 306Çóµ÷¼Á +3 hybÉÏÃû¹¤ 2026-04-02 3/150 2026-04-04 18:12 by ÈÈÇéɳĮ
[¿¼ÑÐ] 387Çóµ÷¼Á +4 °®³ÔƬ¶¹ÍÁ 2026-04-03 5/250 2026-04-04 08:10 by °¶ÉϵÄÒ»ÌõÓã
[¿¼ÑÐ] ²ÄÁÏ¿ÆÑ§Ó빤³Ì¿¼ÑÐ +10 Õü¾ÈÆ¤ÌØÍÐÏÈÉú 2026-04-02 10/500 2026-04-03 23:57 by userper
[¿¼ÑÐ] 350Ò»Ö¾Ô¸±±¾©º½¿Õº½Ìì´óѧ08500²ÄÁÏ¿ÆÑ§Ó빤³ÌÇóµ÷¼Á +5 kjnasfss 2026-04-03 5/250 2026-04-03 22:29 by Î޼ʵIJÝÔ­
[¿¼ÑÐ] Ò»Ö¾Ô¸Äϲý´óѧ324Çóµ÷¼Á +13 hanamiko 2026-04-01 13/650 2026-04-03 18:30 by lsÁõ˧
[¿¼ÑÐ] 283Çóµ÷¼Á +3 jiouuu 2026-04-03 4/200 2026-04-03 13:28 by jiouuu
[¿¼ÑÐ] 303Çóµ÷¼Á +3 һɫÇåÓð 2026-04-02 4/200 2026-04-03 10:22 by À¶ÔÆË¼Óê
[¿¼ÑÐ] 326Çóµ÷¼Á +3 9ahye 2026-04-02 4/200 2026-04-03 08:43 by Jaylen.
[¿¼ÑÐ] Ò»Ö¾Ô¸¸´µ©²ÄÁÏ£¬Ó¢Ò»×¨Ë¶£¬×Ü·Ö357µ÷¼Á +4 1050389037 2026-04-02 5/250 2026-04-02 21:40 by dongzh2009
[¿¼ÑÐ] ũѧ¿¼ÑÐÇóµ÷¼Á +3 dkdkxm 2026-04-01 3/150 2026-04-02 16:04 by wangjagri
[¿¼ÑÐ] Ò»Ö¾Ô¸°²»Õ´óѧ¼ÆËã»ú¿ÆÑ§Óë¼¼Êõѧ˶£¬331·ÖÇóµ÷¼Á +5 ½¯²ýÅôqtj 2026-04-01 5/250 2026-04-02 08:10 by fxue1114
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û