不知火舞的被虐|伊人天伊人天天综合网|博洛尼亚天气|任你懆这里只有精品4|久久美日韩精品久久|掌中之物漫画免费阅读观看|0丨d老妇

UMAT實現混凝土粘彈性徐變變形提問? 100

瀏覽:2548
小白計劃采用UMAT實現混凝土徐變粘彈性變形計算,其中一部分代碼已編好(詳見附件),現遇到以下問題:

1.直接運算可以計算,但無法查看結果,提示如下:

The selected Primary Variable is not availablein the current frame for any elements inthe current display group.

2.初步判斷問題出現在Taomiu上,這個值在K=1,10循環中從10的-5次方變化到10的5次方,每次循環×10。更改程序直接給定這個值可以計算并顯示結果,但是當給定的值小于0.1時,計算非常慢且卡死;給定值大于等于0.1時正常計算并顯示結果;直接給定10的-5或-6次方如圖1且計算很快(懷疑沒算)。
我想知道為什么會出現這種問題?請大家不吝賜教


      SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
     1 RPL,DDSDDT,DRPLDE,DRPLDT,
     2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,
     3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,
     4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)
C
      INCLUDE 'ABA_PARAM.INC'
C
      CHARACTER*80 CMNAME
C
      DIMENSION STRESS(NTENS),STATEV(NSTATV),
     1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),
     2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),
     3 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3),
     4 DSTRS(NDI),DSTSA(NTENS),SHRSTRN(NTENS),t(1000),INNCREMENT(1),
     5 nc1(NTENS),DSTSA1(NTENS)

      integer i, j, k
      real(8) :: ZERO, ONE, TWO, THREE, Amiu, Cnv, A0, n, q1, q2, v, 
     1 t0, tk, pivot, Cnf, k0, q4, Smid, S0, DTIME1, k1, DSTRE
      real(8) :: Taomiu
      parameter(ZERO=0.0d0, TWO=2.0d0, ONE=1.0d0, 
     1 THREE=3.0d0, n=1.0d-1, A0=0.0d0)
      real, dimension(ntens) :: dstrainv
      real, dimension(ntens) :: dstrainf
      real, dimension(ntens) :: gamamiu
      real, dimension(ntens,ntens) :: Iddsdde
      real, dimension(ntens,2*ntens) :: aug
      real, dimension(ntens) :: DSTRESS1
      real, dimension(ntens) :: STRESS1

C 調試專用
C      logical :: firstrun = .true.
C      integer tempvar
C      if(firstrun)then
C          write(*,*)"please input an integer;"
C          read(*,*)tempvar
C          firstrun = .false.
C      endif
C      tempvar =1234 !斷點

C material properties
      q1 = props(1)     
      v = props(2)      
      q2 = props(3)      
      t0 = props(4)  
      tk = props(5)
      k0 = props(6)
      q4 = props(7)
      S0 = props(8)   
      
C
      if (KINC.EQ.ONE) then
          DTIME1 = ZERO
          do i = 1, ntens
              DSTRESS1(i) = ZERO
              STRESS1(i) = ZERO
          end do
      else
          k1 = ZERO
          DTIME1 = STATEV(k1+1)
          do i = 1, ntens
              k1 = 1
              k1 = k1 + 1
              STRESS1(i) = STATEV(k1)
          end do
          do i = 1, ntens
              k1 = k1 + 1
              DSTRESS1(i) = STATEV(k1)
          end do
      end if
      
C G matrix
      do i = 1, ntens
        do j = 1, ntens
          Iddsdde(i,j) = 0.0d0
        end do
      end do
      do i = 1, ndi
        do j = 1, ndi
          Iddsdde(i,j) = -v
        end do 
        Iddsdde(i,i) = 1.0d0
      end do 
      do i = ndi+1, ntens
        Iddsdde(i,i) = TWO * (ONE + v)
      end do


C viscoelastic, no aging!!!!
      do i = 1, ntens
          dstrainv(i) = 0.0d0
      end do
      Cnv = ZERO
      Cnv1 = ZERO
      Taomiu = 1.0d-6
          do k = 1.0d0, 1.0d1
              Taomiu = Taomiu * 1.0d1
              Amiu = q2 * n * (ONE - n) * ((THREE * Taomiu) ** n) / (ONE
     1 + ((THREE * Taomiu) ** n))
              if (KINC.EQ.ONE) then
                 do i = 1, ntens
                     gamamiu(i) = ZERO    
                 end do
                 do i = 1, ntens
                     dstrainv(i) = dstrainv(i) + (ONE - exp(-dtime / 
     1 Taomiu)) * (Amiu * stress(i) - gamamiu(i))
                 end do
              else
                 do i = 1, ntens
                     gamamiu(i) = Amiu * (ONE - exp(-DTIME1 / Taomiu)) 
     1 * STRESS1(i) + Amiu * (ONE - (ONE - exp(-DTIME1 / 
     2 Taomiu)) / (DTIME1 / Taomiu)) * DSTRESS1(i) + gamamiu(i) * exp
     3 (-DTIME1 / Taomiu)  
                 end do
                 do i = 1, ntens
                     dstrainv(i) = dstrainv(i) + (ONE - exp(-dtime / 
     1 Taomiu)) * (Amiu * stress(i) - gamamiu(i))
                 end do
              end if
              if (KINC.EQ.ONE) then
                  Cnv1 = ZERO
              else
                  Cnv1 = Cnv1 + Amiu * (ONE - (ONE - exp(dtime / 
     1 Taomiu)) / (dtime / Taomiu))
              end if
          end do
          Cnv = Cnv1 + A0

C Dve
      do i = 1, ntens
        do j = 1, ntens
          Iddsdde(i,j) = Iddsdde(i,j) * (Cnv + q1)
        end do
      end do
      
C Inversion of the matrix
      aug(:,1:TWO*ntens) = 0.0d0
      aug(:,1:ntens) = Iddsdde(:,1:ntens)
      aug(:,ntens+1:TWO*ntens) = 0.0d0
      do i = 1, ntens
          aug(i,i+ntens) = 1.0d0
      end do
      do i = 1, ntens
          pivot = aug(i,i)
          do j = 1, 2*ntens
              aug(i,j) = aug(i,j) / pivot
          end do
          do j = 1, ntens
              if (j /= i) then
                  pivot = aug(j,i)
                  do k = 1, 2*ntens
                      aug(j,k) = aug(j,k) - pivot * aug(i,k)
                  end do
              end if
          end do
      end do
      ddsdde(:,1:ntens) = aug(:,ntens+1:TWO*ntens)
      
C STATEV
      k1 = 0
      STATEV(k1+1) = dtime
      do i = 1, ntens
          k1 = 1
          k1 = k1 + 1
          STATEV(k1) = stress(i)
      end do
      DSTRE = 0
      do i = 1, ntens
          k1 = k1 + 1
          do j = 1, ntens
              DSTRE = DSTRE + ddsdde(i,j) * (dstran(j) - 
     1 dstrainv(j))
              STATEV(k1) = DSTRE
          end do
      end do

C Stress increment evaluation
      do i = 1, ntens
          do j = 1, ntens
              stress(i) = stress(i) + ddsdde(i,j) * (dstran(j) - 
     1 dstrainv(j))
          end do 
      end do
C
      return
      end


邀請回答 我來回答

當前暫無回答

回答可獲贈 200金幣

沒解決?試試專家一對一服務

換一批
    App下載
    技術鄰APP
    工程師必備
    • 項目客服
    • 培訓客服
    • 平臺客服

    TOP