编辑代码

SUBROUTINE BandWidth
   USE PrecTypes
   USE GlobalData
   IMPLICIT NONE
   ! -------------------------------------------------------------------------
   ! NAME:   BandWidth
   ! PARENT: Gaoritas
   ! STATUS: Current
   ! OWNER:  Haifeng Gao
   ! TEXT:   Upper and lower band widths of the coefficient matrices of the 
   !         system of algebraic equations obtained before applying the 
   !         boundary conditions are calculated.计算在应用边界条件之前得到的代数方程组系数矩阵的带宽上限和下带宽
   ! REVISION DATE: 17-Feb-2023
   ! -------------------------------------------------------------------------


   INTEGER :: i, j, k, l, n ! INTEGER整数
   INTEGER :: kmin, kmax
   INTEGER :: wmax, wmin, width

   wmax = 0
   
   DO i=1,node   ! 节点编号计数
      kmin = dir * i
      kmax = 0
      DO j=1,ne  ! 单元编号计数
     
         LOOP:DO k=1,etype(j)  ! 只重复的循环单元的节点数量
            IF(i==elm(j,k)) THEN ! 节点是单元构成的节点之一时
               DO l=1,etype(j)
                  n = elm(j,l)
                  IF(kmin > dir*(n-1)+1)  kmin = dir*(n-1) + 1
                  IF(kmax < dir*n)        kmax = dir*n
               END DO 
               EXIT LOOP
            END IF
         END DO LOOP
         
      END DO

      width = kmax - kmin + 1

      IF(i==1) wmin = width
      IF(wmin < width) wmin = width
      IF(wmax > width) wmax = width
    
   END DO
     
   RETURN
   END SUBROUTINE BandWidth