Author Topic: Repeated Decrement with BACK Command  (Read 4384 times)

wklausler

  • Jr. Member
  • **
  • Posts: 27
Repeated Decrement with BACK Command
« on: July 13, 2020, 07:51:52 AM »
Dear FEAP programmers,

I am interested in including the BACK command in my user package for FEAP 8.4. Within the BACK subroutine autbac.f, there is a loop over the problem partitions. For each partition, the values of the displacement solution terms of the partition DOFs are 'backed up' using the velocities, in the subroutine update.f.

Code: [Select]
              ub = u(i,n,2)*cc
              j  = eq(i,n)

c             Compute values from current solution

              if (j.gt.0) then
                u(i,n,1) = u(i,n,1) - ub
                u(i,n,2) = 0.0d0
                u(i,n,3) = 0.0d0

c             Compute values from forced inputs

              else
                du(neq-j) = 0.0d0
                u(i,n,3)  = 0.0d0
                u(i,n,2)  = 0.0d0
                f(i,n,1)  = f(i,n,2)
                u(i,n,1)  = f(i,n,2)
              endif

This approach seems to be problematic for problem setups in which DOFs are part of multiple partitions, in which the displacement terms are backed up multiple times. For example, the solution process I am working with involves decoupled and monolithic solutions steps:

Code: [Select]
PARTition
  1 1 1 0
  0 0 0 1
  1 1 1 1

One solution to this could be to simply loop over all nodes and their DOFs directly, without going through the partitions.

Is my understanding of this correct? What might be some non-obvious implications of changing the update procedure?

Best regards,
wklausler

Prof. R.L. Taylor

  • Administrator
  • FEAP Guru
  • *****
  • Posts: 2649
Re: Repeated Decrement with BACK Command
« Reply #1 on: July 13, 2020, 08:14:42 AM »
I believe you are correct.  Currently, I am trying to just use:


!       Back up solution vectors: u(*)
        do i = 1,ndf
          if(ndfp(i).eq.npart) then
            do n = 1,numnp
!             Compute values from current solution
              u(i,n,1) = u(i,n,1) - u(i,n,2)
              u(i,n,2) = 0.0d0
              u(i,n,3) = 0.0d0
            end do ! n
          endif
        end do ! i

I think even if it is called more than once it will not matter.  Can you test and let us know if this is adequate.

wklausler

  • Jr. Member
  • **
  • Posts: 27
Re: Repeated Decrement with BACK Command
« Reply #2 on: July 13, 2020, 08:52:46 AM »
Ah, I realize what I've overlooked. Since the nodal velocities are set to 0 at the first pass, any subsequent passes will not result in further changes to the displacements. I will implement and test doing just one pass over all nodes and DOFs.

wklausler

  • Jr. Member
  • **
  • Posts: 27
Re: Repeated Decrement with BACK Command
« Reply #3 on: July 17, 2020, 08:06:01 AM »
I've removed the call to update.f with isw=3 from autbac.f and replaced the main solution back stepping with the following

Code: [Select]
        do i = 1,numnp
          do j = 1,ndf
            U(j,i,1) = U(j,i,1) - U(j,i,2)
            U(j,i,2) = 0.0d0
            U(j,i,3) = 0.0d0
          end do ! j
        end do ! i

The remaining functionality of update.f, isw=3, has been transferred to the first partition loop in autbac.f. I tested these changes on a typical mechanical example and on a decoupled thermomechanical example, and the displacement results match, which (for now) is sufficient for my uses. The modified autbac.f is attached, albeit with an extra change for my package.

Prof. R.L. Taylor

  • Administrator
  • FEAP Guru
  • *****
  • Posts: 2649
Re: Repeated Decrement with BACK Command
« Reply #4 on: July 17, 2020, 01:09:52 PM »
Seems just changing the parts changing u(:,:,:) in pupdate would do the same?  If the same dof's are affected nothing happens the second time.  Is there something that IS different?