ma 发表于 2007-12-13 21:06:53

贡献一个BLOCK划分网格的程序

C         PROGRAM GENDYNE   VERSION 3.0    (2\1992)
C    ***********************************************************
C    *   PROGRAM TO GENERATE TWO DIMENSIONAL FINITE ELEMENT    *
C    *         MESHES USING A MACRO BLOCK TECHNIQUE.         *
C    ***********************************************************
C    FEATURES :
C               * GENERATES 3,4,6,8 AND 9 NODED ISOPARAMETRIC
C               ELEMENTS.
C               * CONTAINS EXTENSIVE INTERACTIVE PLOTTING
C               FACILITIES.
C               * FRONTAL WIDTH MINIMISATION OPTION
C               * GENERATION OF 4 AND 6 NODED JOINT ELEMENTS
C               * GENERATION OF 4,5 AND 6 NODED INFINITE ELEMENTS
C               * SPECIAL SPLITTING MACRO BLOCKS
C    **********************************************************
      DIMENSION COORD(4000,2),LNODS(2500,9),MATNO(2500),
   .          JOINT(2500),ITITL(80),NONOD(2500),TITLT(80)
      LOGICAL ALL
C
      CALL IOFILE
      WRITE (6,800)
800FORMAT(/,' WELCOME TO THE MESH GENERATOR',/,/,
   .         '   *************************',/,
   .         '   *   G E N G O L D   *',/,
   .         '   *************************')
C
      READ(15,1000)ITITL !-
      READ(15,1000)TITLT !-
      WRITE(12,900)
      READ(15,*)ISWIT,IPLOT,ISUP1,IDRAW,ISUP2,NSECT
      WRITE(12,920)ISWIT,IPLOT,ISUP1,IDRAW,ISUP2,NSECT
      CALL DIME(MELEM,MDIME,MNODE,MPOIN,ALL)
      DO 20 IELEM=1,MELEM
      DO 20 INODE=1,MNODE
20   LNODS(IELEM,INODE)=0
c      IF(ISWIT.EQ.1)GOTO 40
      WRITE (6,810)
810FORMAT(/,1X,40('*'),//,' I AM BEGINNING MESH GENERATION')
      CALL PLTMAN(NPOIN,MPOIN,NNODE,MNODE,NELEM,MELEM,
   .            NDIME,MDIME,LNODS,COORD,MATNO,IPLOT,ALL,
   .            ISUP2,JOINT,NONOD,ITITL,NSECT)
      WRITE (6,820)
820FORMAT(/,' MESH GENERATION HAS BEEN COMPLETED')
c 10IF(IPLOT.EQ.1.OR.IPLOT.EQ.4)GO TO 25
c   WRITE (6,830)
c830FORMAT(/,1X,40('*'),/,/,' I AM BEGINNING FRONTWIDTH',
c    .                        ' MINIMISATION')
C      CALL RENUMB(NPOIN,NELEM,NNODE,NDIME,LNODS,COORD,
c    .            ALL,MELEM,MPOIN,MNODE,IPLOT,MATNO,
c    .            JOINT,NONOD,ISUP2)
c   WRITE (6,840)
c840FORMAT(/,' FRONTWIDTH MINIMISATION HAS BEEN COMPLETED')
C 25   CONTINUE
c25   WRITE (6,850)
c850FORMAT(/,1X,40('*'),//,' I AM CREATING THE OUTPUT FILE')
c30   CALL REGENE(NPOIN,MPOIN,NNODE,MNODE,NELEM,MELEM,
c    .            NDIME,MDIME,LNODS,COORD,MATNO,ALL,
c    .            0,JOINT,NONOD,ITITL)
c   IF(IDRAW.EQ.1)STOP
c   WRITE (6,860)
c860FORMAT(/,1X,40('*'),//,' INTERACTIVE GRAPHIC ROUTINES')
c      CALL ALLOCA(NELEM,MELEM,NPOIN,MPOIN,NNODE,MNODE,
C   .            MDIME,LNODS,COORD,ALL,JOINT,NONOD,ITITL)
c   STOP
c40   READ (15,*)IRENUM
c   WRITE (12,950)IRENUM
c   CALL REGENE(NPOIN,MPOIN,NNODE,MNODE,NELEM,MELEM,
c    .            NDIME,MDIME,LNODS,COORD,MATNO,ALL,
c    .            1,JOINT,NONOD,ITITL)
c   IF(IRENUM.EQ.1)GO TO 10
c   IF(IRENUM.EQ.2)GO TO 30
c   CALL NEWCOO(COORD,NDIME,MDIME,MPOIN)
c   GO TO 30
900   FORMAT(/,20X,'MASTER SEGMENT CONTROL PARAMETERS',/,
   .       20X,33(1H=),/)
920   FORMAT(/,9X,'MASTER CONTROL SWITCH ISWIT:      ISWIT =',I4,
   .       /,9X,'MASTER CONTROL SWITCH IPLOT:      IPLOT =',I4,
   .       /,9X,'SUPPRESSION ON GENERATED TOPOLOGY:ISUP1 =',I4,
   .       /,9X,'SUPPRESSION ON PLOTTING:            IDRAW =',I4,
   .       /,9X,'SUPRRESSION ON RENUMBERED TOPOLOGY: ISUP2 =',I4,
   .       /,9X,'NUMBER      OF SECTION   IN 3DMESH: NSECT =',I4)   
950   FORMAT(/,9X,'SWITCH FOR RENUMBERING:   IRENUM =',I4)
1000FORMAT(80A1)
      END
C

       SUBROUTINE DIME(MELEM,MDIME,MNODE,MPOIN,ALL)
C**************************************************************
C         SUBROUTINE DIM-CONSTANT LOCATIONS ASSIGNED          *
C**************************************************************
       LOGICAL ALL
       MELEM=2500
       MDIME=2
       MNODE=9
       MPOIN=4000
       ALL=.FALSE.
       RETURN
       END
C

      SUBROUTINE PLTMAN(NPOIN,MPOIN,NNODE,MNODE,NELEM,MELEM,
   .                  NDIME,MDIME,LNODS,COORD,MATNO,IPLOT,
   .                  ALL,ISUP2,JOINT,NONOD,ITITL,NSECT)
C***********************************************************
C                MESH GENERATION SEGMENT                   *
C***********************************************************
      LOGICAL ALL
      DIMENSION COORD(MPOIN,MDIME),LNODS(MELEM,MNODE),MATNO(MELEM),
   .          JOINT(MELEM),ITITL(80),NONOD(MELEM),TITLT(80)
      DO 162 ISECT=1,NSECT      
      DO 2 IELEM=1,MELEM
2   JOINT(IELEM)=0
      CALL INBLOC(NPOIN,MPOIN,NNODE,MNODE,NELEM,MELEM,
   .            NDIME,MDIME,LNODS,COORD,MATNO,ALL,
   .            JOINT,NONOD,ITITL,XCOOR)
      IF(IPLOT.EQ.4)RETURN
      CALL GENER(NPOIN,MPOIN,NNODE,MNODE,NELEM,MELEM,
   .         NDIME,MDIME,LNODS,COORD,MATNO)
C   IF(NNODE.EQ.3.OR.NNODE.EQ.6)CALL SPLIT(NELEM,NNODE,LNODS,NDIME,
C    .         COORD,MATNO,MPOIN,MELEM,MDIME,MNODE)
      DO 5 IELEM=1,NELEM
      JOINT(IELEM)=0
5    NONOD(IELEM)=NNODE
C   READ(15,1000) TITLT !-
C   READ (15,*)NJOIN
C   IF(NJOIN.EQ.0)GO TO 300
C   WRITE (12,950)
C   WRITE (12,810)NJOIN
C810FORMAT(/,' NUMBER OF JOINT OR INFINITE LINES',I4)
C   DO 290 IJOIN=1,NJOIN
C   WRITE (12,940)IJOIN
C   CALL JOININ(COORD,JOINT,LNODS,MATNO,MDIME,MELEM,
C    .            MNODE,MPOIN,NELEM,NNODE,NONOD,NPOIN,
C    .            NDIME)
C290CONTINUE
300IF(ISECT.EQ.1) THEN
      WRITE (12,900)
      WRITE(21,960) NELEM,NPOIN,NNODE,NSECT,ISUP2
      DO 10 IELEM=1,NELEM
      LNODE=NONOD(IELEM)
      WRITE (21,910)IELEM,MATNO(IELEM),
   .            (LNODS(IELEM,INODE),INODE=1,LNODE)   
10   WRITE (12,910)IELEM,MATNO(IELEM),
   .            (LNODS(IELEM,INODE),INODE=1,LNODE)   
      ENDIF
      WRITE (21,*)XCOOR
      WRITE (12,902)XCOOR,NPOIN
      WRITE (12,920)
      DO 20 IPOIN=1,NPOIN
      WRITE (21,930)IPOIN,(COORD(IPOIN,IDIME),IDIME=1,NDIME)
20   WRITE (12,930)IPOIN,(COORD(IPOIN,IDIME),IDIME=1,NDIME)   
162CONTINUE
902FORMAT(/,' X-COORDAT',/,F10.5,I5)
900FORMAT(/,/,' GENERATED MESH DATA',/,1X,19(1H-),/,
   .         /,'   ELEMENT    NODAL POINTS')
910FORMAT(1X,I7,3X,12I5)
920FORMAT(/,'      NODE   X-COORDINATE   Y-COORDINATE')
930FORMAT(1X,6X,I4,3F15.5)
940FORMAT(/' LINE NUMBER',I5,/,1X,16('-'))
950FORMAT(/,' JOINT AND INFINITE ELEMENT DATA',/,1X,31('='))
960FORMAT(5X,I5,5X,I5,5X,I5,5X ,I5,5X,I5)
1000FORMAT(80A1)
      RETURN
      END
C

      SUBROUTINE INBLOC(NPOIN,MPOIN,NNODE,MNODE,NELEM,MELEM,
   .                  NDIME,MDIME,LNODS,COORD,MATNO,ALL,
   .                  JOINT,NONOD,TITLE,XCOOR)
C********************************************************************
CSUBROUTINE INBLOC-ACCEPTS DATA DEFINING THE STRUCTURAL COUTLINE*
C********************************************************************
      LOGICAL ALL
      DIMENSION COORD(MPOIN,MDIME),LNODS(MELEM,MNODE),MATNO(MELEM),
   .          TITLE(80),NONOD(MELEM),JOINT(MELEM),TITLT(80)
      DATA LNODE/8/
C
C *** THIS SUBROUTINE ACCEPTS THE INPUT DATA DEFINING
C *** THE STRUCTURAL OUTLINE
C
      WRITE (12,950)
950 FORMAT(/,' PARENTAL BLOCK DATA',/,1X,20(1H=),/,/,
   .         ' TITLE',/,1X,5(1H=))
      WRITE(12,1000) TITLE
      READ (15,1000) TITLT !-
      READ (15,*)NPOIN,NELEM,NNODE
      NDIME=2
      WRITE (12,915)NNODE
915 FORMAT(/,29HNUMBER OF NODES PER ELEMENT =,I3)
      WRITE (12,920)
      IF(NNODE.LT.6)ALL=.TRUE.
920 FORMAT(/,' BLOCK TOPOLOGY',/,1X,14(1H=))
      WRITE (12,925)
925FORMAT(/,' BLOCK NO.MAT. NO.   DEFINITION POINTS')
      READ (15,1000) TITLT !-
      DO 10 IELEM=1,NELEM
      READ (15,*) NUMEL,MATNO(NUMEL),(LNODS(NUMEL,INODE),INODE=1,LNODE)
      NONOD(NUMEL)=LNODE
   10 WRITE (12,906) NUMEL,MATNO(NUMEL),
   .               (LNODS(NUMEL,INODE),INODE=1,LNODE)
906 FORMAT(I5,I10,I10,10I5)
      WRITE (12,930)
      WRITE (12,935)
930 FORMAT(/,15HLOCATION POINTS,/,15(1H=))
935 FORMAT(/,7X,'NODE',7X,'X-COORD',8X,'Y-COORD')
      READ (15,1000) TITLT !-
      READ (15,*)XCOOR
      READ (15,1000) TITLT !-
      DO 35 IPOIN=1,NPOIN
      DO 35 IDIME=1,NDIME
35COORD(IPOIN,IDIME)=0.0
20READ (15,*)   JPOIN,(COORD(JPOIN,IDIME),IDIME=1,NDIME)
      IF(JPOIN.NE.NPOIN) GOTO 20
      CALL NODEXY(MPOIN,LNODE,MNODE,NELEM,MELEM,
   .            MDIME,LNODS,COORD,JOINT,NONOD)
      do 94 j=1,npoin
94WRITE (12,940)J,(COORD(J,IDIME),IDIME=1,NDIME)
940 FORMAT(I10,2F15.5)
1000 FORMAT(80A1)
      RETURN
      END
C

      SUBROUTINE NODEXY(MPOIN,LNODE,MNODE,NELEM,MELEM,
   .                  MDIME,LNODS,COORD,JOINT,NONOD)
C****************************************************************
CSUBROUTINE NODEXY-INTERPOLATES MIDSIDE NODES WHICH ARE NOT   *
C                      ALREADY INPUTTED                         *
C****************************************************************
      DIMENSION LNODS(MELEM,MNODE),JOINT(MELEM),COORD(MPOIN,MDIME),
   .          NONOD(MELEM),TITLT(80)
      DO 30 IELEM=1,NELEM
      IF(JOINT(IELEM).NE.0.OR.NONOD(IELEM).NE.LNODE)GOTO 30
      DO 20 INODE=1,LNODE,2
      NODST=LNODS(IELEM,INODE)
      IGASH=INODE+2
      IF(IGASH.GT.LNODE) IGASH=1
      NODFN=LNODS(IELEM,IGASH)
      MIDPT=INODE+1
      NODMD=LNODS(IELEM,MIDPT)
      TOTAL=ABS(COORD(NODMD,1))+
   .ABS(COORD(NODMD,2))
      IF(TOTAL.GT.0.0) GO TO 20
      KOUNT=1
10COORD(NODMD,KOUNT)=(COORD(NODST,KOUNT)+
   .COORD(NODFN,KOUNT))/2.0
      KOUNT=KOUNT+1
      IF(KOUNT.EQ.2) GO TO 10
20CONTINUE
30CONTINUE
      RETURN
      END
C

      SUBROUTINE GENER(NPOIN,MPOIN,NNODE,MNODE,NELEM,MELEM,
   .               NDIME,MDIME,LNODS,COORD,MATNO)
C***************************************************************
C      SUBROUTINE GENER-UNDERTAKES THE MESH SUBDIVISION      *
C***************************************************************
      DIMENSION WEITX(50),WEITY(50),TCORD(300,2),TNODS(50,8),
   .          TMATO(50),LREPN(700),LASOC(700),LFINN(700),LFASC(700),
   .          COORD(MPOIN,MDIME),LNODS(MELEM,MNODE),MATNO(MELEM),
   .          SHAPE(8)
      DATA MREPN/700/,LNODE/8/
C
C *** THIS SUBROUTINE PERFORMS THE MESH SUBDIVISION
C
C *** INITIALISATION SECTION
C
      DO 10 IREPN=1,MREPN
   10 LREPN(IREPN)=0
      DO 15 IWETX = 1,50
      WEITX( IWETX ) = 0.0
   15 WEITY( IWETX ) = 0.0
      NPONT=NPOIN
      NBLOC=NELEM
      NPOIN=0
      NELEM=0
      KNODE=1
      IF(NNODE.EQ.8)KNODE=2
      IF(NNODE.EQ.9.OR.NNODE.EQ.6)KNODE=3
      FNODE=1
      IF(KNODE.GT.1)FNODE=2
      DO 20 IPONT=1,NPONT
      DO 20 IDIME=1,NDIME
   20 TCORD(IPONT,IDIME)=COORD(IPONT,IDIME)
      DO 30 IPOIN=1,MPOIN
      DO 30 IDIME=1,NDIME
   30 COORD(IPOIN,IDIME)=0.0
      DO 40 IBLOC=1,NBLOC
      TMATO(IBLOC)=MATNO(IBLOC)
      DO 40 INODE=1,LNODE
   40 TNODS(IBLOC,INODE)=LNODS(IBLOC,INODE)
C
C *** READ AND WRITE BLOCK SUBDIVISION DATA
C
      WRITE (12,871)
871FORMAT(//,' PARENTAL BLOCK DIVISION DATA',
   .       /,1X,28(1H=),/)
      READ (15,1000) TITLT !-
      DO 170 IBLOC=1,NBLOC
      READ (15,*) KBLOC,NDIVX,NDIVY,MTYPE
      READ (15,*) (WEITX(IDIVX),IDIVX=1,NDIVX)
      READ (15,*) (WEITY(IDIVY),IDIVY=1,NDIVY)
      DO 44 IDIVX=1,NDIVX
      IF(WEITX(IDIVX).EQ.0.0)WEITX(IDIVX)=1.0
44   CONTINUE
      DO 46 IDIVY=1,NDIVY
      IF(WEITY(IDIVY).EQ.0.0)WEITY(IDIVY)=1.0
46   CONTINUE
      WRITE (12,910) KBLOC
      WRITE (12,915)
      WRITE (12,920) NDIVX,NDIVY,MTYPE
      WRITE (12,925)
      WRITE (12,905) (WEITX(IDIVX),IDIVX=1,NDIVX)
      WRITE (12,930)
      WRITE (12,905) (WEITY(IDIVY),IDIVY=1,NDIVY)
905 FORMAT(8F10.3)
910 FORMAT(/,5X,15H DATA BLOCK NO.,I3)
915 FORMAT(6X,17H-----------------)
920 FORMAT(/,' NUMBER OF DIVISIONS IN FIRST DIRECTION=',I4,
   .       /,' NUMBER OF DIVISIONS IN SECOND DIRECTION =',I4,
   .       /,' MTYPE =',I4)
925 FORMAT(/,5X,44HLIST OF WEIGHTING FACTORS IN FIRST DIRECTION)
930 FORMAT(/,5X,45HLIST OF WEIGHTING FACTORS IN SECOND DIRECTION)
C
C *** DIVIDE EACH BLOCK INTO ELEMENTS
C
      TOTAL=0.0
      DO 50 IDIVX=1,NDIVX
   50 TOTAL=TOTAL+WEITX(IDIVX)
      XNORM=2.0/TOTAL
      TOTAL=0.0
      DO 60 IDIVY=1,NDIVY
   60 TOTAL=TOTAL+WEITY(IDIVY)
      YNORM=2.0/TOTAL
      NXTWO=NDIVX*FNODE+1
      NYTWO=NDIVY*FNODE+1
      IF (MTYPE.NE.0) GO TO 5000
      IASEY=0
      ETASP=-1.0
      KWETY=0
      KONTY=-1
      DO 160 IYTWO=1,NYTWO
      IASEY=IASEY+1
      IF(NNODE.LT.6.AND.IASEY.EQ.3) IASEY=2
      IF(NNODE.GE.6.AND.IASEY.EQ.4) IASEY=2
      IASEX=0
      EXISP=-1.0
      KWETX=0
      KONTX=-1
      DO 130 IXTWO=1,NXTWO
      IASEX=IASEX+1
      IF(NNODE.LT.6.AND.IASEX.EQ.3) IASEX=2
      IF(NNODE.GE.6.AND.IASEX.EQ.4) IASEX=2
      IF(IASEX.EQ.2.AND.IASEY.EQ.2.AND.NNODE.EQ.8) GO TO 100
      NPOIN=NPOIN+1
      CALL SFRQ(EXISP,ETASP,SHAPE)
      DO 70 INODE=1,LNODE
      JTEMP=TNODS(IBLOC,INODE)
      DO 70 IDIME=1,NDIME
   70 COORD(NPOIN,IDIME)=COORD(NPOIN,IDIME)+SHAPE(INODE)*TCORD(JTEMP,
   . IDIME)
      GO TO(80,90,95),KNODE
   80 IF(IASEX.NE.2.OR.IASEY.NE.2) GO TO 100
      NELEM=NELEM+1
      JPOIN=NPOIN-NXTWO
      LNODS(NELEM,1)=JPOIN-1
      LNODS(NELEM,2)=JPOIN
      LNODS(NELEM,3)=NPOIN
      LNODS(NELEM,4)=NPOIN-1
      MATNO(NELEM)=TMATO(IBLOC)
      GO TO 100
   90 IF(IASEX.NE.3.OR.IASEY.NE.3) GO TO 100
      NELEM=NELEM+1
      IPOIN=NPOIN-IXTWO-NDIVX+(IXTWO-1)/2
      JPOIN=NPOIN-NXTWO-NDIVX-1
      LNODS(NELEM,1)=JPOIN-2
      LNODS(NELEM,2)=JPOIN-1
      LNODS(NELEM,3)=JPOIN
      LNODS(NELEM,4)=IPOIN
      LNODS(NELEM,5)=NPOIN
      LNODS(NELEM,6)=NPOIN-1
      LNODS(NELEM,7)=NPOIN-2
      LNODS(NELEM,8)=IPOIN-1
      MATNO(NELEM)=TMATO(IBLOC)
      GO TO 100
   95 IF(IASEX.NE.3.OR.IASEY.NE.3)GO TO 100
      NELEM=NELEM+1
      JPOIN=NPOIN-NXTWO
      IPOIN=NPOIN-NXTWO-NXTWO
      LNODS(NELEM,1)=IPOIN-2
      LNODS(NELEM,2)=IPOIN-1
      LNODS(NELEM,3)=IPOIN
      LNODS(NELEM,4)=JPOIN
      LNODS(NELEM,5)=NPOIN
      LNODS(NELEM,6)=NPOIN-1
      LNODS(NELEM,7)=NPOIN-2
      LNODS(NELEM,8)=JPOIN-2
      LNODS(NELEM,9)=JPOIN-1
      MATNO(NELEM)=TMATO(IBLOC)
      GO TO 100
100 CONTINUE
      GO TO(110,120,120),KNODE
110 KWETX=KWETX+1
      GO TO 130
120 IF(KONTX.LT.0) KWETX=KWETX+1
      KONTX=KONTX*(-1)
130 EXISP=EXISP+XNORM*WEITX(KWETX)/FNODE
      GO TO(140,150,150),KNODE
140 KWETY=KWETY+1
      GO TO 160
150 IF(KONTY.LT.0) KWETY=KWETY+1
      KONTY=KONTY*(-1)
160 ETASP=ETASP+YNORM*WEITY(KWETY)/FNODE
      GO TO 170
5000 continue
c5000 CALL SPECL(COORD,FNODE,KNODE,LNODE,LNODS,MATNO,MDIME,MELEM,
c    .         MNODE,MPOIN,MTYPE,NDIME,NELEM,NPOIN,
c    .         NXTWO,NYTWO,TCORD,TMATO,TNODS,WEITX,WEITY,XNORM,
c    .         YNORM,IBLOC,NNODE)
170CONTINUE
C
C *** ELIMINATE REPEATED NODES AT BLOCK INTERFACES
C
      READ (15,1000) TITLT !-
      READ (15,*)TOLER
      WRITE (12,440)TOLER
      IF(KNODE.EQ.1)NENOD=4
      IF(KNODE.EQ.2)NENOD=8
      IF(KNODE.EQ.3)NENOD=9
440FORMAT(/,//,1X,'THE TOLERANCE FOR REPEATED NODE',
   . ' IDENTIFICATION=    ',F6.4)
      NREPN=0
      NLESS=NPOIN-1
      DO 210 IPOIN=1,NLESS
      IF(NREPN.EQ.0) GO TO 190
      DO 180 IREPN=1,NREPN
      IF(IPOIN.EQ.LREPN(IREPN)) GO TO 210
180 CONTINUE
190 CONTINUE
      LPOIN=IPOIN+1
      DO 200 JPONT=LPOIN,NPOIN
      TOTAL=ABS(COORD(IPOIN,1)-COORD(JPONT,1))+ABS(COORD(IPOIN,2)-COORD(
   . JPONT,2))
      IF(TOTAL.GT.TOLER) GO TO 200
      NREPN=NREPN+1
      LREPN(NREPN)=JPONT
      LASOC(NREPN)=IPOIN
200 CONTINUE
210 CONTINUE
      IF(NREPN.EQ.0) GO TO 360
      INDEX=0
      DO 240 IPOIN=1,NPOIN
      DO 220 IREPN=1,NREPN
      IF(LREPN(IREPN).EQ.IPOIN) GO TO 230
220 CONTINUE
      GO TO 240
230 INDEX=INDEX+1
      LFINN(INDEX)=LREPN(IREPN)
      LFASC(INDEX)=LASOC(IREPN)
240 CONTINUE
      DO 250 IREPN=1,NREPN
      LREPN(IREPN)=LFINN(IREPN)
250 LASOC(IREPN)=LFASC(IREPN)
      DO 260 IREPN=1,NREPN
      DO 260 IELEM=1,NELEM
      DO 260 INODE=1,NENOD
260 IF(LNODS(IELEM,INODE).EQ.LREPN(IREPN)) LNODS(IELEM,INODE)=
   . LASOC(IREPN)
      DO 310 IPOIN=1,NPOIN
      DO 270 IREPN=1,NREPN
      IF(IPOIN.EQ.LREPN(IREPN)) GO TO 310
270 CONTINUE
      IF(IPOIN.LT.LREPN(1)) GO TO 310
      IDIFF=IPOIN-NREPN
      IF(IPOIN.GT.LREPN(NREPN)) GO TO 290
      DO 280 IREPN=1,NREPN
      KREPN=NREPN-IREPN+1
280 IF(IPOIN.LT.LREPN(KREPN)) IDIFF=IPOIN-KREPN+1
290 DO 300 IDIME=1,NDIME
300 COORD(IDIFF,IDIME)=COORD(IPOIN,IDIME)
310 CONTINUE
      DO 350 IELEM=1,NELEM
      DO 350 INODE=1,NENOD
      NPOSI=LNODS(IELEM,INODE)
      DO 320 IREPN=1,NREPN
      IF(NPOSI.EQ.LREPN(IREPN)) GO TO 350
320 CONTINUE
      IF(NPOSI.LT.LREPN(1)) GO TO 350
      IDIFF=NPOSI-NREPN
      IF(NPOSI.GT.LREPN(NREPN)) GO TO 340
      DO 330 IREPN=1,NREPN
      KREPN=NREPN-IREPN+1
330 IF(NPOSI.LT.LREPN(KREPN)) IDIFF=NPOSI-KREPN+1
340 LNODS(IELEM,INODE)=IDIFF
350 CONTINUE
360 CONTINUE
      NPOIN=NPOIN-NREPN
1000 FORMAT(80A1)
      RETURN
      END
C

      SUBROUTINE SFRQ(S,T,SHAPE)
C***********************************************************
C         SUBROUTINE SFRQ-SHAPE FUNCTIONS FOR THE      *
C               EIGHT NODED ISOPARAME ELEMENT            *
C***********************************************************
      DIMENSION SHAPE(8)
C
C *** SHAPE FUNCTIONS FOR 8-NODE ISOPARAMETRIC ELEMENT
C
      SS=S*S
      TT=T*T
      ST=S*T
      SST=S*S*T
      STT=S*T*T
      SHAPE(1)=(-1.0+ST+SS+TT-SST-STT)/4.0
      SHAPE(2)=(1.0-T-SS+SST)/2.0
      SHAPE(3)=(-1.0-ST+SS+TT-SST+STT)/4.0
      SHAPE(4)=(1.0+S-TT-STT)/2.0
      SHAPE(5)=(-1.0+ST+SS+TT+SST+STT)/4.0
      SHAPE(6)=(1.0+T-SS-SST)/2.0
      SHAPE(7)=(-1.0-ST+SS+TT+SST-STT)/4.0
      SHAPE(8)=(1.0-S-TT+STT)/2.0
      RETURN
      END
C
        subroutine IOFILE
c         chanel 15input file
c         chanel 15 output file
c         chanel 15plot file
c
        CHARACTER*15 FNAME
        WRITE(*,*)'       PLEASE TYPEINPUT FILE NAME:   '
        READ (*,*) FNAME
        OPEN(15,FILE=FNAME)
        WRITE(*,*)'       PLEASE TYPE OUTPUT FILE NAME:   '
        READ (*,*) FNAME
        OPEN(12,FILE=FNAME)
        WRITE(*,*)'       PLEASE TYPE PLOT   FILE NAME:   '
        READ (*,*) FNAME
        OPEN(21,FILE=FNAME)
        RETURN
        END

ma 发表于 2007-12-13 21:10:20

有大虾给简单解释一下吗看不太懂

蓝血儿 发表于 2011-11-13 16:53:45

关键是怎么运行啊?

autocae 发表于 2011-11-16 18:13:27

两个黄鹂鸣翠柳,不知所云。

五星连珠 发表于 2011-11-18 10:21:44

fortran编的吗?

wangangnwpu 发表于 2013-10-17 20:23:52

还是fortran77的!!

cumtywj 发表于 2013-11-11 09:56:54

不错呀,谢谢分享,能加一下备注就更好啦
页: [1]
查看完整版本: 贡献一个BLOCK划分网格的程序