[Fortran] 纯文本查看 复制代码
C----------------------------------------------------------------------
C 形成单元节点的岩土强度指标FA(I),C(I),单元联系数据,输入节点应力(平面问题)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON FA(10000),C(10000),NUMNP,NENM,NUM
DIMENSION NODMJ(8,10000),NENMJ(16,10000),FAM(100),CM(100)
DIMENSION STRESS(4),NSTR(10000),NPAR(20,50)
CHARACTER*30 INFNAME
C******************************************************************
INFNAME='STRESS-CHANGE-4.OUT'
C******************************************************************
DO I=1,30
IF(INFNAME(I:I).EQ.'.') GOTO 10
END DO
10 INFNAME(I+1:I+4)='CON '
OPEN(UNIT=11,FILE=INFNAME)
INFNAME(I+1:I+4)='NSTR'
OPEN(UNIT=13,FILE=INFNAME)
C *********************************************************************
C 单元平均节点应力由有限元输出获得.
C 文件格式:NODE(I),SGXX,SGYY,SGZZ,SGYZ,节点编号应依此增大.
INFNAME(I+1:I+4)='STR '
OPEN(23,FILE=INFNAME)
C *********************************************************************
INFNAME(I+1:I+4)='ENM '
OPEN(22,FILE=INFNAME,FORM='UNFORMATTED',ACCESS='DIRECT',RECL=120)
C 输入单元数据,节点数NUMNP,单元组数NUM,单元数NUMN
READ(11,*) NUMNP,NUM,NENM
DO I=1,NUM
READ(11,*) (NPAR(J,I),J=1,10)
READ(11,*) (NPAR(J,I),J=11,20)
END DO
C******************************************************************
C 直接输入单元组的岩土强度指标,FAM(I),CM(I).
FAM(1)=34.0
CM(1)=35000.0
FAM(2)=34.0
CM(2)=35000.0
FAM(3)=34.0
CM(3)=35000.0
FAM(4)=25.0
CM(4)=25000.0
C******************************************************************
C 形成单元联系单元 NENMJ(8,NUMN),输出到*.NSTR文件中
IELN=8
DO I=1,NENM
READ(22,REC=I) IDEGEN,IELD,ISOCOR,(NODMJ(K,I),K=1,IELN)
END DO
CLOSE(22)
DO I=1,NENM
DO J=1,16
NENMJ(J,I)=0
END DO
MM=0
DO J=1,NENM
IF(J.NE.I) THEN
CALL NENMJD2(NODMJ,I,J,MM,NENMJ)
END IF
END DO
WRITE(13,'(16I6)') (NENMJ(K,I),K=1,16)
END DO
C 形成单元节点应力 STRESSJ(4,NUNMP), 岩土强度指标FA(NUNMP),C(NUNMP),输出到*.NSTR文件中.
DO I=1,NUMNP
NSTR(I)=0
FA(I)=0.0
C(I)=0
END DO
DO I=1,NENM
NM=0
C 第MM组单元的单元数NPAR(2,MM)
DO MM=1,NUM
IF(I.GT.NM.AND.I.LE.NM+NPAR(2,MM)) GOTO 200
NM=NM+NPAR(2,MM)
END DO
C 求单元各节点的岩土强度指标和.
200 DO J=1,8
IF(NODMJ(J,I).NE.0) THEN
FA(NODMJ(J,I))=FA(NODMJ(J,I))+FAM(MM)
C(NODMJ(J,I))=C(NODMJ(J,I))+CM(MM)
NSTR(NODMJ(J,I))=NSTR(NODMJ(J,I))+1
END IF
END DO
END DO
ZZ=ATAN(1.0)/45.0
DO I=1,NUMNP
C 求单元各节点的岩土强度指标平均值. NSTR(I)为节点I的联系单元数
FA(I)=FA(I)/NSTR(I)
C(I)=C(I)/NSTR(I)
READ(23,*) NODE,(STRESS(J),J=1,4)
C 形成单元节点应力 STRESSJ(4), 岩土强度指标FA(I),C(I),输出到*.NSTR文件中.
WRITE(13,2000) (-STRESS(J),J=1,4),FA(I)*ZZ,C(I)
END DO
CLOSE(23)
CLOSE(13)
1000 FORMAT(1X,'INPUT FILE NAME :',$)
1001 FORMAT(A12)
2000 FORMAT(6E14.6)
2100 FORMAT(16I5)
END
C----------------------------------------------------------------------
C 形成单元联系标记NENMJ(20,I), 单元M1和节点号NODMJ(4,M1),联系单元M2和节点号NODMJ(4,M2)
SUBROUTINE NENMJD2(NODMJ,M1,M2,MM,NENMJ)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION NENMJ(16,10000),NODMJ(8,10000)
N=1
DO I=1,4
DO J=1,4
IF(NODMJ(I,M1).EQ.NODMJ(J,M2)) GOTO 100
END DO
END DO
N=0
100 IF(N.GE.1) THEN
MM=MM+1
NENMJ(MM,M1)=M2
END IF
RETURN
END