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

📄 tlm.for

📁 tlm code
💻 FOR
📖 第 1 页 / 共 2 页
字号:
      PROGRAM TLM3D
*************************************************************
*                                                           *
* Transmission-line modelling of electromagnetic fields in  *
* 3-dimensions using the symmetrical condensed node.        *
*                                                           *
* Written by:                                               *
*   J L Herring                                             *
*                                                           *
* Address:                                                  *
*   Department of Electrical & Computer Engineering         *
*   University of Victoria                                  *
*   Victoria, B.C., Canada.                                 *
*                                                           *
* E-mail: jherring@ece.uvic.ca                              *
* WWW:    http://www.wjrh.ece.uvic.ca/tlm/                  *
*                                                           *
* History:                                                  *
*   Date started    : 10 Dec 1995                           *
*   Updated         : 10 Dec 1995 (HP-UX) 1.00              *
*   Current version : 30 Jun 1996 (HP-UX) 1.10              *
*                     - more efficient scattering           *
*                     - two-sided internal boundaries       *
*                                                           *
*************************************************************

      IMPLICIT NONE

*---- constant declarations

      CHARACTER*(*) VERSN
      INTEGER INUNT,OUTUNT
      INTEGER XMAX0,YMAX0,ZMAX0,SLAB
      INTEGER NMBCS0,NMNEX0,NMNOU0
      REAL    Z0,Pi

      PARAMETER ( VERSN = '1.10' )
      PARAMETER ( INUNT=7,OUTUNT=8 )
      PARAMETER ( XMAX0=50,YMAX0=50,ZMAX0=50 )
      PARAMETER ( NMBCS0=50,NMNEX0=50,NMNOU0=50 )
      PARAMETER ( Z0=376.7 )
	PARAMETER ( Pi=3.141592653589793238)

*---- variable declarations

      CHARACTER*80 LINE,COMM
      CHARACTER*40 INNAME,OUTNAM
      CHARACTER*2  LORIEN
      CHARACTER    TYP,DIRN,LSIGN
      LOGICAL EX
      INTEGER ERR,N,X,Y,Z,I
      INTEGER X1,Y1,Z1,D,T
      INTEGER XMAX,YMAX,ZMAX,NUMDT
      INTEGER NUMBCS,NUMNEX,NUMNOU
      REAL    DL,VE,VH,OUT
      REAL    VYNX,VZNX,VXNY,VZNY,VYNZ,VXNZ
      REAL    VYPZ,VZPY,VZPX,VXPZ,VXPY,VYPX
      REAL    RHO,V0,VTEMP,VDIFF

*---- array declarations

      CHARACTER BDIRN(NMBCS0),BSIGN(NMBCS0)
      INTEGER   BOX1(NMBCS0),BOY1(NMBCS0),BOZ1(NMBCS0)
      INTEGER   BOX2(NMBCS0),BOY2(NMBCS0),BOZ2(NMBCS0)
      REAL      BRHO(NMBCS0)

      CHARACTER*3 NEID(NMNEX0)
      INTEGER NEX1(NMNEX0),NEY1(NMNEX0),NEZ1(NMNEX0)
      INTEGER NEX2(NMNEX0),NEY2(NMNEX0),NEZ2(NMNEX0)
      REAL    NEAMP(NMNEX0)

      CHARACTER*2 NOID(NMNOU0)
      INTEGER NOX1(NMNOU0),NOY1(NMNOU0),NOZ1(NMNOU0)

      COMMON/COMV/V
      REAL V(12,XMAX0,YMAX0,ZMAX0)
	REAL   W(1:12 ,1:XMAX0,1:YMAX0,1:ZMAX0)
      
	REAL            LINE1,LINE2,LINE3,LINE4,LINE5,LINE6,
     *                LINI1,LINI2,LINI3,LINI4,LINI5,LINI6,TEMPI1,TEMPI2,
     *                LINE7,LINE8,LINE9,LINE10,LINE11,LINE12,
     *                LINI7,LINI8,LINI9,LINI10,LINI11,LINI12,
     *                LINE13,LINE14,LINE15,LINE16,LINE17,LINE18
*---- display program details

      WRITE(*,*)
      WRITE(*,*) 'TLM3D (v'//VERSN//') - '//
     ;           'Transmission-Line Modelling in 3-Dimensions'
      WRITE(*,*)
      WRITE(*,*) 'Limits :'
      WRITE(*,99010) 'mesh      ',XMAX0,YMAX0,ZMAX0
      WRITE(*,99020) 'boundaries',NMBCS0
      WRITE(*,99020) 'excite    ',NMNEX0
      WRITE(*,99020) 'output    ',NMNOU0
      WRITE(*,*)
99010 FORMAT(1X,'  ',A,' = ',I2,' x ',I2,' x ',I2)
99020 FORMAT(1X,'  ',A,' = ',I2)

*---- open input file

      WRITE(*,*) 'Name of input file : '
      READ(*,'(A)') INNAME
      INQUIRE(FILE=INNAME,EXIST=EX)
      IF (.NOT.EX) STOP 'File does not exist'
      OPEN(INUNT,FILE=INNAME,STATUS='OLD',ACCESS='SEQUENTIAL',
     ;  FORM='FORMATTED',IOSTAT=ERR)
      IF (ERR.NE.0) STOP 'File cannot be opened'
      REWIND(INUNT)

*---- set default data

      OUTNAM = '?'
      XMAX   = XMAX0
      YMAX   = YMAX0
      ZMAX   = ZMAX0
      DL     = 1.0
      NUMDT  = 0
      NUMBCS = 0
      NUMNEX = 0
      NUMNOU = 0

*---- read input file

11010 READ(INUNT,'(A)',IOSTAT=ERR) LINE
      IF (ERR.NE.0) STOP 'Error reading file'
      IF (LINE(1:1).EQ.'!') GOTO 11010
      IF (LINE(1:1).NE.':') STOP 'Start of data expected'
      COMM = LINE(2:80)

*------ mesh size
      IF (COMM.EQ.'MESH') THEN
        READ(INUNT,*) XMAX,YMAX,ZMAX
        IF (XMAX.GT.XMAX0.OR.YMAX.GT.YMAX0.OR.ZMAX.GT.ZMAX0)
     ;    STOP 'Too big'

*------ slab
      ELSE IF (COMM.EQ.'SLAB') THEN
        READ(INUNT,*) SLAB
        
*------ node spacing
      ELSE IF (COMM.EQ.'DL') THEN
        READ(INUNT,*) DL

*------ number of timesteps
      ELSE IF (COMM.EQ.'TIMESTEPS') THEN
        READ(INUNT,*) NUMDT

*------ output file
      ELSE IF (COMM.EQ.'OUTPUT_FILE') THEN
        READ(INUNT,*) OUTNAM

*------ boundaries
      ELSE IF (COMM.EQ.'BOUNDARIES') THEN
        READ(INUNT,*) NUMBCS
        IF (NUMBCS.GT.NMBCS0) STOP 'Too many boundaries'
        DO 12010, I = 1, NUMBCS
          READ(INUNT,*) BRHO(I),LORIEN,BOX1(I),BOY1(I),BOZ1(I),
     ;                  BOX2(I),BOY2(I),BOZ2(I)
          BDIRN(I) = LORIEN(1:1)
          BSIGN(I) = LORIEN(2:2)
        IF ((BSIGN(I).NE.'N'.AND.BSIGN(I).NE.'P'.AND.
     ;        BSIGN(I).NE.'0').OR.
     ;      BOX1(I).LT.1.OR.BOX2(I).GT.XMAX.OR.BOX2(I).LT.BOX1(I).OR.
     ;      BOY1(I).LT.1.OR.BOY2(I).GT.YMAX.OR.BOY2(I).LT.BOY1(I).OR.
     ;      BOZ1(I).LT.1.OR.BOZ2(I).GT.ZMAX.OR.BOZ2(I).LT.BOZ1(I).OR.
     ;      BDIRN(I).EQ.'X'.AND.(BOX1(I).NE.BOX2(I).OR.
     ;        (BSIGN(I).EQ.'0'.AND.BOX2(I).EQ.XMAX)).OR.
     ;      BDIRN(I).EQ.'Y'.AND.(BOY1(I).NE.BOY2(I).OR.
     ;        (BSIGN(I).EQ.'0'.AND.BOY2(I).EQ.YMAX)).OR.
     ;      BDIRN(I).EQ.'Z'.AND.(BOZ1(I).NE.BOZ2(I).OR.
     ;        (BSIGN(I).EQ.'0'.AND.BOZ2(I).EQ.ZMAX)))
     ;        STOP 'Bad boundary coordinates'
12010   CONTINUE

*------ excitation
      ELSE IF (COMM.EQ.'EXCITE') THEN
        READ(INUNT,*) NUMNEX
        IF (NUMNEX.GT.NMNEX0) STOP 'Too many excite'
        DO 13010, I = 1, NUMNEX
          READ(INUNT,*) NEID(I),NEAMP(I),NEX1(I),NEY1(I),NEZ1(I),
     ;                  NEX2(I),NEY2(I),NEZ2(I)
        IF (NEX1(I).LT.1.OR.NEX2(I).GT.XMAX.OR.NEX2(I).LT.NEX1(I).OR.
     ;      NEY1(I).LT.1.OR.NEY2(I).GT.YMAX.OR.NEY2(I).LT.NEY1(I).OR.
     ;      NEZ1(I).LT.1.OR.NEZ2(I).GT.ZMAX.OR.NEZ2(I).LT.NEZ1(I))
     ;      STOP 'Bad excitation coordinates'
13010   CONTINUE

*------ output
      ELSE IF (COMM.EQ.'OUTPUT') THEN
        READ(INUNT,*) NUMNOU
        IF (NUMNOU.GT.NMNOU0) STOP 'Too many output'
        DO 14010, I = 1, NUMNOU
          READ(INUNT,*) NOID(I),NOX1(I),NOY1(I),NOZ1(I)
        IF (NOX1(I).LT.1.OR.NOX1(I).GT.XMAX.OR.
     ;      NOY1(I).LT.1.OR.NOY1(I).GT.YMAX.OR.
     ;      NOZ1(I).LT.1.OR.NOZ1(I).GT.ZMAX)
     ;      STOP 'Bad output coordinates'
14010   CONTINUE

*---- end of read

      ELSE IF (COMM.NE.'END') THEN
        STOP 'Data not recognised'
      END IF
      IF (COMM.NE.'END') GOTO 11010
      CLOSE(INUNT)
      WRITE(*,*) 'Input file closed'

*---- open output file

      IF (OUTNAM.EQ.'?') THEN
        WRITE(*,*) 'Name of output file : '
        READ(*,'(A)') OUTNAM
      END IF
      OPEN(OUTUNT,FILE=OUTNAM,STATUS='NEW',ACCESS='SEQUENTIAL',
     ;  FORM='FORMATTED',IOSTAT=ERR)
      IF (ERR.NE.0) STOP 'Output file cannot be opened'

*---- clear array

      DO 21010, Z = 1, ZMAX
        DO 21020, Y = 1, YMAX
          DO 21030, X = 1, XMAX
            DO 21040, D = 1, 12
              V(D,X,Y,Z) = 0.0
21040        CONTINUE
21030      CONTINUE
21020    CONTINUE
21010  CONTINUE

*---- excite

       DO 22010, N = 1, NUMNEX

        TYP  = NEID(N)(1:1)
        DIRN = NEID(N)(2:2)
        IF (TYP.EQ.'E') THEN
          VE = - DL * 100*(sin(N*pi/XMAX)**6)
        ELSE IF (TYP.EQ.'H') THEN
          VH = - DL * Z0 * (sin(N*pi/XMAX)**6)
        ELSE
          STOP 'Excitation field error'
        END IF

        DO 22020, Z = NEZ1(N), NEZ2(N)
          DO 22030, Y = NEY1(N), NEY2(N)
            DO 22040, X = NEX1(N), NEX2(N)

              IF (TYP.EQ.'E') THEN
                IF (DIRN.EQ.'X') THEN
                  V(1 ,X,Y,Z) = V(1 ,X,Y,Z) + VE
                  V(2 ,X,Y,Z) = V(2 ,X,Y,Z) + VE
                  V(12,X,Y,Z) = V(12,X,Y,Z) + VE
                  V(9 ,X,Y,Z) = V(9 ,X,Y,Z) + VE

              	W(1 ,X,Y,Z) = W(1 ,X,Y,Z) + VE
                  W(2 ,X,Y,Z) = W(2 ,X,Y,Z) + VE
                  W(12,X,Y,Z) = W(12,X,Y,Z) + VE
                  W(9 ,X,Y,Z) = W(9 ,X,Y,Z) + VE

                ELSE IF (DIRN.EQ.'Y') THEN
                   V(4 ,X,Y,Z) = V(4,X,Y,Z) + VE
C                  V(3 ,X,Y,Z) = V(3,X,Y,Z) + VE
C                  V(8 ,X,Y,Z) = V(8,X,Y,Z) + VE
C                  V(11,X,Y,Z) = V(11,X,Y,Z) + VE

              	W(4 ,X,Y,Z) = W(4,X,Y,Z) + VE
C                  W(3 ,X,Y,Z) = W(3,X,Y,Z) + VE
C                  W(8 ,X,Y,Z) = W(8,X,Y,Z) + VE
C                  W(11,X,Y,Z) =W(11,X,Y,Z) + VE

                ELSE IF (DIRN.EQ.'Z') THEN
                  V(6,X,Y,Z) = V(6,2,2,2) + VE
                  V(5,X,Y,Z) = V(5,X,Y,Z) + VE
                  V(10,X,Y,Z) = V(10,X,Y,Z) + VE
                  V(7,X,Y,Z) = V(7,X,Y,Z) + VE

              	W(6,X,Y,Z) = W(6,2,2,2) + VE
                  W(5,X,Y,Z) = W(5,X,Y,Z) + VE
                  W(10,X,Y,Z) = W(10,X,Y,Z) + VE
                  W(7,X,Y,Z) = W(7,X,Y,Z) + VE
                ELSE
                  STOP 'E-field excitation error'
                END IF

              ELSE IF (TYP.EQ.'H') THEN
                IF (DIRN.EQ.'X') THEN
                  V(4 ,X,Y,Z) = V(4 ,X,Y,Z) + VH
                  V(5 ,X,Y,Z) = V(5 ,X,Y,Z) - VH
                  V(8 ,X,Y,Z) = V(8 ,X,Y,Z) - VH
                  V(7 ,X,Y,Z) = V(7 ,X,Y,Z) + VH

	            W(4 ,X,Y,Z) = W(4 ,X,Y,Z) + VH
                  W(5 ,X,Y,Z) = W(5 ,X,Y,Z) - VH
                  W(8 ,X,Y,Z) = W(8 ,X,Y,Z) - VH
                  W(7 ,X,Y,Z) = W(7 ,X,Y,Z) + VH

                ELSE IF (DIRN.EQ.'Y') THEN
                  V(6 ,X,Y,Z) = V(6 ,X,Y,Z) + VH
                  V(2 ,X,Y,Z) = V(2 ,X,Y,Z) - VH
                  V(10,X,Y,Z) = V(10,X,Y,Z) - VH
                  V(9 ,X,Y,Z) = V(9 ,X,Y,Z) + VH

	            W(6 ,X,Y,Z) = W(6 ,X,Y,Z) + VH
                  W(2 ,X,Y,Z) = W(2 ,X,Y,Z) - VH
                  W(10,X,Y,Z) = W(10,X,Y,Z) - VH
                  W(9 ,X,Y,Z) = W(9 ,X,Y,Z) + VH

                ELSE IF (DIRN.EQ.'Z') THEN
                  V(1 ,X,Y,Z) = V(1 ,X,Y,Z) + VH
                  V(3 ,X,Y,Z) = V(3 ,X,Y,Z) - VH
                  V(12,X,Y,Z) = V(12,X,Y,Z) - VH
                  V(11,X,Y,Z) = V(11,X,Y,Z) + VH

	            W(1 ,X,Y,Z) = W(1 ,X,Y,Z) + VH
                  W(3 ,X,Y,Z) = W(3 ,X,Y,Z) - VH
                  W(12,X,Y,Z) = W(12,X,Y,Z) - VH
                  W(11,X,Y,Z) = W(11,X,Y,Z) + VH
                ELSE
                  STOP 'H-field excitation error'
                END IF

              END IF

22040       CONTINUE
22030     CONTINUE
22020   CONTINUE

22010 CONTINUE




*---- start calculation

⌨️ 快捷键说明

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