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

📄 input.f90

📁 边界元程序,供力学工作者参考,希望对大家有所帮助
💻 F90
📖 第 1 页 / 共 3 页
字号:
            DO inodf = 1, nnodf
              knodf = knodf + 1
              READ( 11, 2600, ERR = 200 ) ipoin, itype,                        &
                    ( fwork( idofn ), idofn = 1, mdofn )
              IF( nprnc .NE. 0 )                                               &
              WRITE( 12, 2800 ) ipoin, itype, ( fwork( idofn ),                &
                               idofn = 1, mdofn )
              IF( ipoin .LE. 0 .OR. ipoin .GT. npoin ) THEN
                WRITE( 12, 3000 ) ipoin
                nerrc = 843676
                RETURN
              END IF
              lnodf( 1, knodf ) = ipoin
              lnodf( 2, knodf ) = itype
              DO idofn = 1, mdofn
                vnodf( idofn, knodf ) = fwork( idofn )
              END DO
            END DO
          END IF
!.........读线分布载荷.
          IF( nedgf .GT. 0 ) THEN
            IF( nprnc .NE. 0 ) WRITE( 12, 3200 )
            DO iedgf = 1, nedgf
              ktype = 0
              kedgf = kedgf + 1
              WRITE( 12, 3400 ) iedgf
              DO inodg = 1, nnodg
                READ( 11, 2600, ERR = 400 ) ipoin, itype,                      &
                      ( fwork( idofn ), idofn = 1, mdofn )
                IF( nprnc .NE. 0 )                                             &
                WRITE( 12, 2800 ) ipoin, itype, ( fwork( idofn ),              &
                                  idofn = 1, mdofn )
                IF( ipoin .GT. npoin ) THEN
                  WRITE( 12, 3600 ) ipoin
                  nerrc = 843676
                  RETURN
                END IF
                IF( ktype .EQ. 0 ) THEN
                  ktype = itype
                ELSE
                  IF( itype .NE. 0 .AND. itype .NE. ktype ) THEN
                    WRITE( 12, 3800 )
                    nerrc = 54868
                    RETURN
                  END IF
                END IF
                ledgf( inodg, kedgf ) = ipoin
                DO idofn = 1, mdofn
                  locat = ( inodg - 1 ) * mdofn + idofn
                  vedgf( locat, kedgf ) = fwork( idofn )
                END DO
              END DO
              ledgf( mnodg, kedgf ) = ktype
            END DO
          END IF
!.........读面分布载荷.
          IF( nplnf .GT. 0 ) THEN
            IF( nprnc .NE. 0 ) WRITE( 12, 4000 )
            DO iplnf = 1, nplnf
              ktype = 0
              kplnf = kplnf + 1
              WRITE( 12, 3400 ) iplnf
              DO inodp = 1, nnodp
                READ( 11, 2600, ERR = 400 ) ipoin, itype,                      &
                      ( fwork( idofn ), idofn = 1, mdofn )
                IF( nprnc .NE. 0 )                                             &
                WRITE( 12, 2800 ) ipoin, itype, ( fwork( idofn ),              &
                                  idofn = 1, mdofn )
                IF( ipoin .GT. npoin ) THEN
                  WRITE( 12, 4200 ) ipoin
                  nerrc = 843676
                  RETURN
                END IF
                IF( ktype .EQ. 0 ) THEN
                  ktype = itype
                ELSE
                  IF( itype .NE. 0 .AND. itype .NE. ktype ) THEN
                    WRITE( 12, 4400 )
                    nerrc = 54868
                    RETURN
                  END IF
                END IF
                lplnf( inodp, kplnf ) = ipoin
                DO idofn = 1, mdofn
                  locat = ( inodp - 1 ) * mdofn + idofn
                  vplnf( locat, kplnf ) = fwork( idofn )
                END DO
              END DO
              lplnf( mnodp, kplnf ) = ktype
            END DO
          END IF
        END DO
        RETURN
200     WRITE( 12, 4600 )
        nerrc = 1013
        RETURN
400     WRITE( 12, 4800 )
        nerrc = 1014
        RETURN
600     WRITE( 12, 5000 )
        nerrc = 1015
        RETURN
2000    FORMAT( //20x, ' 载荷工况 ', I5 )
2200    FORMAT( 3I5 )
2400    FORMAT( //10x, ' = = = = 节 点 载 荷 = = = =  ' //                     &
                   2x, ' 节点 类型         节 点 载 荷 值' )
2600    FORMAT( 2I5, 4F15.5 / ( 10X, 4F15.5 ) )
2800    FORMAT(  2x, 2I5, 3x, 4F15.5 / ( 15X, 4F15.5 ) )
3000    FORMAT( //2x, '致命错误: 节点力作用在无效的节点上 ', I5 )
3200    FORMAT( //10x, ' = = = = 线 分 布 载 荷 = = = =' /                     &
                   2x, ' 节点 类型          分 布 载 荷 值' )
3400    FORMAT(  /20x, ' 序号', I5 )
3600    FORMAT( //2x, '致命错误: 线分布力作用在无效的节点上 ', I5 )
3800    FORMAT( //2x, '致命错误: 线分布力不可重复定义动载类型' )
4000    FORMAT( //10x, ' = = = = 面 分 布 载 荷 = = = =' /                     &
                   2x, ' 节点 类型          分 布 载 荷 值' )
4200    FORMAT( //2x, '致命错误: 面分布力作用在无效的节点上 ', I5 )
4400    FORMAT( //2x, '致命错误: 面分布力不可重复定义动载类型' )
4600    FORMAT( // 2x, '错误: 读节点载荷出错' )
4800    FORMAT( // 2x, '错误: 读线分布载荷出错' )
5000    FORMAT( // 2x, '错误: 读面分布载荷出错' )
        END

        SUBROUTINE RDCnt
!........
!       模块功能
!           读入集中质量, 集中刚度, 集中阻尼.
!........
        USE CtrlData
        USE CentData
        IMPLICIT DOUBLE PRECISION( a-h, o-z )

        IF( nerrc .GT. 0 ) RETURN
        CALL ShowMessage(  '读质点信息...' )

!.......读入集中质量.
        IF( nmssp .GT. 0 ) THEN
          IF( nprnc .NE. 0 ) WRITE( 12, 2000 )
          DO imssp = 1, nmssp
            READ(  11, 2200 ) lmssp( 1, imssp ), lmssp( 2, imssp ),            &
                              vmssp(    imssp )
            IF( nprnc .NE. 0 )                                                 &
            WRITE( 12, 2400 ) lmssp( 1, imssp ), lmssp( 2, imssp ),            &
                              vmssp(    imssp )
            IF( lmssp( 1, imssp ) .LE.     0 .OR.                              &
                lmssp( 1, imssp ) .GT. npoin .OR.                              &
                lmssp( 2, imssp ) .LE.     0 .OR.                              &
                lmssp( 2, imssp ) .GT. mdofn ) THEN
              nerrc = 2134
              RETURN
            END IF
          END DO
        END IF
!.......读入集中刚度.
        IF( nstfp .GT. 0 ) THEN
          IF( nprnc .NE. 0 ) WRITE( 12, 2600 )
          DO istfp = 1, nstfp
            READ(  11, 2200 ) lstfp( 1, istfp ), lstfp( 2, istfp ),            &
                              vstfp(    istfp )
            IF( nprnc .NE. 0 )                                                 &
            WRITE( 12, 2400 ) lstfp( 1, istfp ), lstfp( 2, istfp ),            &
                              vstfp(    istfp )
            IF( lstfp( 1, istfp ) .LE.     0 .OR.                              &
                lstfp( 1, istfp ) .GT. npoin .OR.                              &
                lstfp( 2, istfp ) .LE.     0 .OR.                              &
                lstfp( 2, istfp ) .GT. mdofn ) THEN
              nerrc = 2134
              RETURN
            END IF
          END DO
        END IF
!.......读入集中阻尼.
        IF( ndmpp .GT. 0 ) THEN
          IF( nprnc .NE. 0 ) WRITE( 12, 2800 )
          DO idmpp = 1, ndmpp
            READ(  11, 2200 ) ldmpp( 1, idmpp ), ldmpp( 2, idmpp ),            &
                              vdmpp(    idmpp )
            IF( nprnc .NE. 0 )                                                 &
            WRITE( 12, 2400 ) ldmpp( 1, idmpp ), ldmpp( 2, idmpp ),            &
                              vdmpp(    idmpp )
            IF( ldmpp( 1, idmpp ) .LE.     0 .OR.                              &
                ldmpp( 1, idmpp ) .GT. npoin .OR.                              &
                ldmpp( 2, idmpp ) .LE.     0 .OR.                              &
                ldmpp( 2, idmpp ) .GT. mdofn ) THEN
              nerrc = 2134
              RETURN
            END IF
          END DO
        END IF
2000    FORMAT(/10x, '= = = = = 集 中 质 量 = = = = =' //                      &
                10x, ' 节点  自由度       集中质量' )
2200    FORMAT( 2I5, F15.5 )
2400    FORMAT( 10x, I5, 3x, I5, E15.5 )
2600    FORMAT(/10x, '= = = = = 集 中 刚 度 = = = = =' //                      &
                10x, ' 节点  自由度       集中刚度' )
2800    FORMAT(/10x, '= = = = = 集 中 阻 尼 = = = = =' //                      &
                10x, ' 节点  自由度       集中阻尼' )
        RETURN
        END

        SUBROUTINE RDSlnt
        USE CtrlData
        USE MeshData
        IMPLICIT DOUBLE PRECISION( a-h, o-z )

        IF( nerrc .GT. 0 ) RETURN
        CALL ShowMessage( '读斜约束信息...' )

        IF( nslnt .LE. 0 ) RETURN
        IF( nprnc .NE. 0 ) WRITE( 12, 1800 )
        DO islnt = 1, nslnt
          READ( 11, 2000 ) ipoin, idofn, ( vslnt( jdofn, islnt ),              &
                           jdofn = 1, mdofn )
          lslnt( 1, islnt ) = ipoin
          lslnt( 2, islnt ) = idofn
          IF( ipoin .LT.-ndime .OR. ipoin .EQ. 0 .OR.                          &
              ipoin .GT. npoin ) THEN
            WRITE( 12, 2200 ) ipoin
            nerrc = 10213
            RETURN
          END IF
          IF( idofn .LE. 0 .OR. idofn .GT. mdofn ) THEN
            WRITE( 12, 2400 ) idofn
            nerrc = 12543
            RETURN
          END IF
          IF( nprnc .NE. 0 )                                                   &
          WRITE( 12, 2600 ) ipoin, idofn, ( vslnt( jdofn, islnt ),             &
                                            jdofn = 1, mdofn )
        END DO
1800    FORMAT( // 10X, '= = = = = 广 义 自 由 度 = = = = = ' //               &
                   1X, '节点  自由度        自由度转化系数')
2000    FORMAT( 2I5, 4F15.5 / ( 10X, 4F15.5 ) )
2200    FORMAT( 1X, '错误: 广义自由度对应无效的节点', I5 )
2400    FORMAT( 1X, '错误: 广义自由度对应无效的主自由度', I5 )
2600    FORMAT( I5, 3X, I4, 3X, 3F15.5 / ( 15X, 3F15.5 ) )
        RETURN
        END

        SUBROUTINE RdOptAxis
        USE CtrlData
        USE MeshData
        IMPLICIT DOUBLE PRECISION( a-h, o-z )
        DIMENSION axist( 3 )

        const = 0.0D0
        IF( nerrc .GT. 0 ) RETURN
        READ( 11, '( 3F15.5 )' ) basew
        DO idime = 1, ndime
          READ( 11, '( 3F15.5 )' ) axist
          DO jdime = 1, ndime
        axisw( idime, jdime ) = axist( jdime )
            const = const + DABS( axist( jdime ) )
          END DO
        END DO
        IF( const .LT. 1.0D-8 ) THEN
          DO idime = 1, ndime
            axisw( idime, idime ) = 1.0D0
          END DO
        END IF
        axist( 1 ) = 0.0D0
        axist( 2 ) = 0.0D0
        axist( 3 ) = 0.0D0
        IF( nprnc .NE. 0 ) THEN
          DO idime = 1, ndime
            axist( idime ) = basew( idime )
          END DO
          WRITE( 12, 2000 ) axist
          DO idime = 1, ndime
            DO jdime = 1, ndime
              axist( jdime ) = axisw( idime, jdime )
            END DO
            WRITE( 12, 2200 ) idime, axist
          END DO
        END IF
2000    FORMAT( // 15X, '优化中心和优化轴线信息',                              &
                //  2X, '优化中心:', 3F15.5 )
2200    FORMAT(     2X, '第', I2, '轴线:', 3F15.5 )
        END

        SUBROUTINE AutoLink( strng )
!.......
!       模块功能:
!           坐标相同的节点自动连接.
!.......
        USE CtrlData
        USE MeshData
        CHARACTER * 80 strng
        READ( strng( 11:20 ), 2000, ERR = 200 ) vskip
        IF( vskip .LT. 1.0D-5 ) vskip = 1.0D-5

        DO ipoin = 1, npoin
          IF( ipoin .EQ. llnks( ipoin ) ) THEN
            DO jpoin = ipoin + 1, npoin
              IF( jpoin .EQ. llnks( jpoin ) ) THEN
                displ = DABS( coord(1, ipoin) - coord(1, jpoin) )
                IF( displ .LT. vskip ) THEN
                  nflag = 0
                  DO idime = 2, ndime
                    displ = DABS( coord( idime, ipoin ) -                      &
                                  coord( idime, jpoin ) )
                    IF( displ .GT. vskip ) nflag = 1
                  END DO
                  IF( nflag .EQ. 0 ) llnks( jpoin ) = ipoin
                END IF
              END IF
            END DO
          END IF
        END DO
        RETURN
200     nerrc = 32435
        WRITE( 12, 2200 )
        RETURN
2000    FORMAT( F10.5 )
2200    FORMAT( 2x, // ' 错误的自动连接宏命令!' // )
        END

        SUBROUTINE MidNode
        END

⌨️ 快捷键说明

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