⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pois.f90

📁 FDS为火灾动力学模拟软件源代码,该软件为开源项目,代码语言主要为FORTRAN,可在WINDOWS和LINUX下编译运行,详细说明可参考http://fire.nist.gov/fds/官方网址
💻 F90
📖 第 1 页 / 共 5 页
字号:
   END IF      DO  J=2,M-1,2         JBY2=J/2         DO  I=1,LDIMF*N            FT(I,J)   =  F(I,J+1)*C1(JBY2)+F(I,J)*C2(JBY2)            FT(I,J+1) = -F(I,J+1)*C2(JBY2)+F(I,J)*C1(JBY2)         END DO      END DOEND IF!     REAL(EB),PERIODIC SYNTHESISCALL VRFFTB(LDIMF*N,M,FT,LDIMF*N,F,WORK)!     POSTPROCESSINGIF (OUTARY) THEN  DO  J=1,M    DO  I=1,LDIMF*N      F(I,J)=C4(J)*FT(I,J)+C3(J)*FT(I,M+1-J)    END DO  END DOELSE   DO  J=1,M      DO  I=1,LDIMF*N         FT(I,J)=C4(J)*F(I,J)+C3(J)*F(I,M+1-J)      END DO   END DOEND IFRETURNEND SUBROUTINE VSCOSQSUBROUTINE VSCSB1(L,M,N,LDIMF,F,FT,C1,C2)! +--------------------------------------------------------------------+! |                                                                    |! |                       COPYRIGHT (C) 1989 BY                        |! |                          ROLAND A. SWEET                           |! |                        ALL RIGHTS RESERVED                         |! |                                                                    |! +--------------------------------------------------------------------+!     PACKAGE VFFTPAK, VERSION 1, JUNE 1989INTEGER                       :: LINTEGER                       :: MINTEGER                       :: NINTEGER                   :: LDIMFREAL(EB)  FT(LDIMF,N,M)REAL(EB)  C1(M)REAL(EB)  C2(M)REAL(EB)   F(LDIMF,M,N)DO  K=1,N  DO  I=1,L    FT(I,K,1)=.5_EB*F(I,1,K)  END DOEND DODO  K=1,N  DO  J=2,M    DO  I=1,L      FT(I,K,J) =(C1(J)*F(I,J,K)+C2(J)*F(I,M-J+2,K))    END DO  END DOEND DORETURNEND SUBROUTINE VSCSB1SUBROUTINE VSCSBA(M,LDIMF,FT,F)! +--------------------------------------------------------------------+! |                                                                    |! |                       COPYRIGHT (C) 1989 BY                        |! |                          ROLAND A. SWEET                           |! |                        ALL RIGHTS RESERVED                         |! |                                                                    |! +--------------------------------------------------------------------+!     PACKAGE VFFTPAK, VERSION 1, JUNE 1989INTEGER                       :: MINTEGER                       :: LDIMFREAL(EB)   F(LDIMF,M), FT(LDIMF,M)DO  I=1,LDIMF  F(I,1) = FT(I,1)END DOIF (MOD(M,2)==0) THEN  DO  I=1,LDIMF    F(I,M) = FT(I,M)  END DOEND IFDO  J=2,M-1,2  DO  I=1,LDIMF    F(I,J)=FT(I,J)-FT(I,J+1)    F(I,J+1)=FT(I,J)+FT(I,J+1)  END DOEND DORETURNEND SUBROUTINE VSCSBASUBROUTINE VSCSF1(L,M,N,LDIMF,F,FT)! +--------------------------------------------------------------------+! |                                                                    |! |                       COPYRIGHT (C) 1989 BY                        |! |                          ROLAND A. SWEET                           |! |                        ALL RIGHTS RESERVED                         |! |                                                                    |! +--------------------------------------------------------------------+!     PACKAGE VFFTPAK, VERSION 1, JUNE 1989INTEGER                       :: LINTEGER                       :: MINTEGER                       :: NINTEGER                   :: LDIMFREAL(EB)   FT(LDIMF,N,M)REAL(EB)   F(LDIMF,M,N)DO  K=1,N  DO  I=1,L    FT(I,K,1)=F(I,1,K)  END DOEND DOIF (MOD(M,2)==0) THEN  DO  K=1,N    DO  I=1,L      FT(I,K,M)=F(I,M,K)    END DO  END DOEND IFDO  K=1,N  DO  J=2,M-1,2    DO  I=1,L      FT(I,K,J)   =  0.5_EB*(F(I,J,K)+F(I,J+1,K))      FT(I,K,J+1) = -0.5_EB*(F(I,J,K)-F(I,J+1,K))    END DO  END DOEND DORETURNEND SUBROUTINE VSCSF1SUBROUTINE VSCSFA(M,LDIMF,F,FT,C1,C2)! +--------------------------------------------------------------------+! |                                                                    |! |                       COPYRIGHT (C) 1989 BY                        |! |                          ROLAND A. SWEET                           |! |                        ALL RIGHTS RESERVED                         |! |                                                                    |! +--------------------------------------------------------------------+!     PACKAGE VFFTPAK, VERSION 1, JUNE 1989INTEGER                       :: MINTEGER                       :: LDIMFREAL(EB)    FT(LDIMF,M)REAL(EB)    C1(M)REAL(EB)   F(LDIMF,M),  C2(M)DO  J=2,M  DO  I=1,LDIMF    F(I,J)=C1(J)*FT(I,J)-C2(J)*FT(I,M+2-J)  END DOEND DODO  I=1,LDIMF  F(I,1)=FT(I,1)END DORETURNEND SUBROUTINE VSCSFASUBROUTINE VSCSQ1(L,M,N,LDIMF,F,FT,C1,C2)! +--------------------------------------------------------------------+! |                                                                    |! |                       COPYRIGHT (C) 1989 BY                        |! |                          ROLAND A. SWEET                           |! |                        ALL RIGHTS RESERVED                         |! |                                                                    |! +--------------------------------------------------------------------+!     PACKAGE VFFTPAK, VERSION 1, JUNE 1989INTEGER                       :: LINTEGER                       :: MINTEGER                       :: NINTEGER                   :: LDIMFREAL(EB)  FT(LDIMF,N,M)REAL(EB)  C1(M)REAL(EB)    C2(M)REAL(EB)   F(LDIMF,M,N)DO  K=1,N  DO  I=1,L    FT(I,K,1)=F(I,1,K)  END DOEND DOIF (MOD(M,2)==0) THEN  DO  K=1,N    DO  I=1,L      FT(I,K,M)=-F(I,M,K)    END DO  END DOEND IFDO  J=2,M-1,2  JBY2=J/2  DO  K=1,N    DO  I=1,L      FT(I,K,J)   =  F(I,J+1,K)*C1(JBY2)+F(I,J,K)*C2(JBY2)      FT(I,K,J+1) = -F(I,J+1,K)*C2(JBY2)+F(I,J,K)*C1(JBY2)    END DO  END DOEND DORETURNEND SUBROUTINE VSCSQ1SUBROUTINE VSCSQI(N,C1,C2,C3,C4,WSAVE)! +--------------------------------------------------------------------+! |                                                                    |! |                       COPYRIGHT (C) 1989 BY                        |! |                          ROLAND A. SWEET                           |! |                        ALL RIGHTS RESERVED                         |! |                                                                    |! +--------------------------------------------------------------------+!     PACKAGE VFFTPAK, VERSION 1, JUNE 1989!      ENTRY VSSNQI(N,C1,C2,C3,C4,WSAVE)INTEGER                       :: NREAL(EB)  C3(N)REAL(EB)   C4(N)REAL(EB)   WSAVE(N+15)REAL(EB)   C1(N),C2(N)PI=FSH19S()DX=PI/NSCALE=SQRT(.5_EB)!     GENERATE A(I)+-B(I)DO  I=1,(N-1)/2  C=COS(I*DX)  S=SIN(I*DX)  C1(I)=.5_EB*(S+C)  C2(I)=.5_EB*(C-S)END DODX=PI/(2*N)DO  I=1,N  C=COS((I-.5_EB)*DX)  S=SIN((I-.5_EB)*DX)  C3(I)=SCALE*(C+S)  C4(I)=SCALE*(C-S)END DO!     INITIALIZE VRFFTPK ROUTINECALL VRFFTI(N,WSAVE)RETURNEND SUBROUTINE VSCSQISUBROUTINE VSINT(X,L,M,N,LDIMX,XT,C,WSAVE)! +--------------------------------------------------------------------+! |                                                                    |! |                       COPYRIGHT (C) 1989 BY                        |! |                          ROLAND A. SWEET                           |! |                        ALL RIGHTS RESERVED                         |! |                                                                    |! +--------------------------------------------------------------------+!     PACKAGE VFFTPAK, VERSION 1, JUNE 1989INTEGER                   :: LINTEGER                   :: MINTEGER                       :: NINTEGER                       :: LDIMXREAL(EB)  XT(LDIMX*N,M+1)REAL(EB)  C(M/2)REAL(EB)  WSAVE(M+16)REAL(EB)  X(LDIMX*N,M)!     TPOSE = .TRUE. IF TRANSFORMING SECOND INDEX (SO TRANSPOSE)!           = .FALSE. IF TRANSFORMING THIRD INDEXSQRT2I=SQRT(.5_EB)MODM = MOD(M,2)103 MP1 = M+1MS2 = M/2DO  I=1,LDIMX*N  XT(I,1) = 0._EB   XT(I,M+1)=0._EB END DO!                         ZERO OUT LAST PLANE BECAUSE FOR SINE!                         IT DOESN'T GET DONE IN FSH02IF (TPOSE) THEN  CALL VSINT1(L,M,N,LDIMX,MODM,MS2,C,XT,X)ELSE  DO  J=1,MS2    JC=M+1-J    DO  I=1,LDIMX*N      XT(I,J+1) = (X(I,J)-X(I,JC))+C(J)*(X(I,J)+X(I,JC))      XT(I,JC+1) = C(J)*(X(I,J)+X(I,JC))-(X(I,J)-X(I,JC))    END DO  END DO  IF (MODM == 0) GO TO 405  DO  I=1,LDIMX*N    XT(I,MS2+2) = 4._EB*X(I,MS2+1)  END DO405    CONTINUEEND IFCALL VRFFTF (LDIMX*N,MP1,XT,LDIMX*N,X,WSAVE)SCALE=SCALE*SQRT2IIF (OUTARY) THEN  CALL VSINTA(M,LDIMX*N,MODM,X,XT)ELSE  CALL VSINTA(M,LDIMX*N,MODM,XT,X)END IFRETURNEND SUBROUTINE VSINTSUBROUTINE VSINT1(L,M,N,LDIMX,MODM,MS2,C,XT,X)! +--------------------------------------------------------------------+! |                                                                    |! |                       COPYRIGHT (C) 1989 BY                        |! |                          ROLAND A. SWEET                           |! |                        ALL RIGHTS RESERVED                         |! |                                                                    |! +--------------------------------------------------------------------+!     PACKAGE VFFTPAK, VERSION 1, JUNE 1989INTEGER                       :: LINTEGER                       :: MINTEGER                       :: NINTEGER                   :: LDIMXINTEGER                   :: MODMINTEGER                   :: MS2REAL(EB)   C(*)REAL(EB)   X(LDIMX,M,N)REAL(EB)   XT(LDIMX,N,M+1)DO  J=1,MS2  JC = M+1-J  DO  K=1,N    DO  I=1,L      XT(I,K,J+1) = (X(I,J,K)-X(I,JC,K))+C(J)*(X(I,J,K)+X(I,JC,K))      XT(I,K,JC+1) = C(J)*(X(I,J,K)+X(I,JC,K))-(X(I,J,K)-X(I,JC,K))    END DO  END DOEND DOIF (MODM == 0) GO TO 405DO  K=1,N  DO  I=1,L    XT(I,K,MS2+2) = 4._EB*X(I,MS2+1,K)  END DOEND DO405 CONTINUERETURNEND SUBROUTINE VSINT1SUBROUTINE VSINTA(M,LDIMX,MODM,X,XT)! +--------------------------------------------------------------------+! |                                                                    |! |                       COPYRIGHT (C) 1989 BY                        |! |                          ROLAND A. SWEET                           |! |                        ALL RIGHTS RESERVED                         |! |                                                                    |! +--------------------------------------------------------------------+!     PACKAGE VFFTPAK, VERSION 1, JUNE 1989INTEGER                       :: MINTEGER                       :: LDIMXINTEGER                   :: MODMREAL(EB)   X(LDIMX,M),  XT(LDIMX,M+1)DO  I=1,LDIMX  X(I,1) = 0.5_EB*XT(I,1)END DODO  J=2,M-1,2  DO  I=1,LDIMX    X(I,J) = -XT(I,J+1)    X(I,J+1) = X(I,J-1)+XT(I,J)  END DOEND DOIF (MODM /= 0) GO TO 900DO  I=1,LDIMX  X(I,M) = -XT(I,M+1)END DO900 CONTINUERETURNEND SUBROUTINE VSINTASUBROUTINE VSINTI(N,C,WSAVE)! +--------------------------------------------------------------------+! |                                                                    |! |                       COPYRIGHT (C) 1989 BY                        |! |                          ROLAND A. SWEET                           |! |                        ALL RIGHTS RESERVED                         |! |                                                                    |! +--------------------------------------------------------------------+!     PACKAGE VFFTPAK, VERSION 1, JUNE 1989!     *******   NOTE   ******!     SPECIAL DOCUMENTATION FOR USE OF INTERNAL PARAMETER TPOSE.  IF!     TPOSE = .TRUE., THEN ALL PREPROCESSING ROUTINES TRANSPOSE SECOND!                     AND THIRD INDICES IN PREPARATION FOR TRANSFORM OF!                     ORIGINAL SECOND INDEX.  IF!     TPOSE = .FALSE., THEN ALL PREPROCESSING ROUTINES PREPARE ONLY FOR!                      TRANSFORM OF THIRD INDEX.  TO USE IN THIS CASE,!                      CALL ROUTINE WITH M AND N INTERCHANGED.INTEGER                       :: NREAL(EB)   C(N/2),WSAVE (N+16)!                               INITIALIZE NOCOPY AND TPOSE TO DEFAULT!                               VALUESNOCOPY = .FALSE.TPOSE = .TRUE.IF (N <= 1) RETURNPI=FSH19S()NP1 = N+1NS2 = N/2DT = PI/REAL(NP1,EB)DO  K=1,NS2  C(K) = 2._EB*SIN(K*DT)END DOCALL VRFFTI (NP1,WSAVE)RETURNEND SUBROUTINE VSINTISUBROUTINE VSRFTB(F,L,M,N,LDIMF,FT,WSAVE)! +--------------------------------------------------------------------+! |                                                                    |! |                       COPYRIGHT (C) 1989 BY                        |! |                          ROLAND A. SWEET                           |! |                        ALL RIGHTS RESERVED                         |! |                                                                    |! +--------------------------------------------------------------------+!     PACKAGE VFFTPAK, VERSION 1, JUNE 1989!     *******   NOTE   ******!     SPECIAL DOCUMENTATION FOR USE OF INTERNAL PARAMETER TPOSE.  IF!     TPOSE = .TRUE., THEN ALL PREPROCESSING ROUTINES TRANSPOSE SECOND!                     AND THIRD INDICES IN PREPARATION FOR TRANSFORM OF!                     ORIGINAL SECOND INDEX.  IF!     TPOSE = .FALSE., THEN ALL PREPROCESSING ROUTINES PREPARE ONLY FOR!                      TRANSFORM OF THIRD INDEX.  TO USE IN THIS CASE,!                      CALL ROUTINE WITH M AND N INTERCHANGED.!     VSFFTPK, VERSION 2, JUNE 1988INTEGER                       :: LINTEGER                       :: MINTEGER                       :: NINTEGER                   :: LDIMFREAL(EB)   FT(LDIMF,N,M)REAL(EB)   WSAVE(M+15)REAL(EB)   F(LDIMF,M,N)!     TPOSE = .TRUE. IF TRANSFORMING SECOND INDEX (SO TRANSPOSE)!           = .FALSE. IF TRANSFORMING THIRD INDEXIF (TPOSE) THEN  !        RE-ORDER INPUT    DO  K=1,N    DO  J=1,M      DO  I=1,L        FT(I,K,J)=F(I,J,K)      END DO    END DO  END DO  !        REAL(EB), PERIODIC TRANSFORM    CALL VRFFTB(LDIMF*N,M,FT,LDIMF*N,F,WSAVE)  OUTARY=.NOT.OUTARY  IF (.NOT.NOCOPY) THEN    CALL VSRTB1(M,N*LDIMF,F,FT)  END IFELSE  CALL VRFFTB(LDIMF*N,M,F,LD

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -