Abaqus interfaces dapted to newest version of the rest of the code

does not yet check for restart, have to check out first how restarts work in Abaqus
explicit code not checked as we do not have a license
This commit is contained in:
Franz Roters 2011-03-07 12:49:27 +00:00
parent 654b5ea987
commit 18e668340f
3 changed files with 82 additions and 69 deletions

View File

@ -21,6 +21,7 @@ MODULE mpie_interface
character(len=64), parameter :: FEsolver = 'Abaqus'
character(len=4), parameter :: InputFileExtension = '.inp'
character(len=4), parameter :: LogFileExtension = '.log'
CONTAINS
@ -81,6 +82,7 @@ END MODULE
include "material.f90" ! uses prec, math, IO, mesh
include "lattice.f90" ! uses prec, math, IO, material
include "constitutive_phenopowerlaw.f90" ! uses prec, math, IO, latt ice, material, debug
include "constitutive_titanmod.f90" ! uses prec, math, IO, lattice, material, debug
include "constitutive_j2.f90" ! uses prec, math, IO, latt ice, material, debug
include "constitutive_dislotwin.f90" ! uses prec, math, IO, latt ice, material, debug
include "constitutive_nonlocal.f90" ! uses prec, math, IO, latt ice, material, debug
@ -154,7 +156,7 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, &
debug_reset, &
verboseDebugger
use mesh, only: mesh_FEasCP
use CPFEM, only: CPFEM_general,CPFEM_init_done
use CPFEM, only: CPFEM_general,CPFEM_init_done, CPFEM_initAll
use homogenization, only: materialpoint_sizeResults, materialpoint_results
include 'vaba_param.inc' ! Abaqus exp initializes a first step in single prec. for this a two-step compilation is used.
@ -185,7 +187,9 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, &
do n = 1,nblock ! loop over vector of IPs
temp = tempOld(n)
if ( .not. CPFEM_init_done ) then
call CPFEM_initAll(temp,nElement(n),nMatPoint(n))
outdatedByNewInc = .false.
if ( verboseDebugger ) then
@ -227,7 +231,6 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, &
defgrd0 = 0.0_pReal
defgrd1 = 0.0_pReal
temp = tempOld(n)
timeInc = dt
! ABAQUS explicit: deformation gradient as vector 11, 22, 33, 12, 23, 31, 21, 32, 13

View File

@ -21,6 +21,7 @@ MODULE mpie_interface
character(len=64), parameter :: FEsolver = 'Abaqus'
character(len=4), parameter :: InputFileExtension = '.inp'
character(len=4), parameter :: LogFileExtension = '.log'
CONTAINS
@ -83,6 +84,7 @@ END MODULE
include "material.f90" ! uses prec, math, IO, mesh
include "lattice.f90" ! uses prec, math, IO, material
include "constitutive_phenopowerlaw.f90" ! uses prec, math, IO, latt ice, material, debug
include "constitutive_titanmod.f90" ! uses prec, math, IO, lattice, material, debug
include "constitutive_j2.f90" ! uses prec, math, IO, latt ice, material, debug
include "constitutive_dislotwin.f90" ! uses prec, math, IO, latt ice, material, debug
include "constitutive_nonlocal.f90" ! uses prec, math, IO, latt ice, material, debug
@ -118,7 +120,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
debug_reset, &
verboseDebugger
use mesh, only: mesh_FEasCP
use CPFEM, only: CPFEM_general,CPFEM_init_done
use CPFEM, only: CPFEM_general,CPFEM_init_done, CPFEM_initAll
use homogenization, only: materialpoint_sizeResults, materialpoint_results
@ -151,76 +153,84 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
!$OMP END CRITICAL (write2out)
endif
if ( .not. CPFEM_init_done ) then
if (.not. CPFEM_init_done) call CPFEM_initAll(temp,noel,npt)
computationMode = 2 ! calc + init
if ( verboseDebugger ) then
!$OMP CRITICAL (write2out)
write(6,'(i6,x,i2,x,a)') noel,npt,'first call special case..!'; call flush(6)
!$OMP END CRITICAL (write2out)
endif
cp_en = mesh_FEasCP('elem',noel)
if (time(2) > theTime .or. kinc /= theInc) then ! reached convergence
terminallyIll = .false.
cycleCounter = -1 ! first calc step increments this to cycle = 0
if (kinc == 0) then ! >> start of analysis <<
lastIncConverged = .false. ! no Jacobian backup
outdatedByNewInc = .false. ! no aging of state
lastMode = .false. ! pretend last step was collection
calcMode = .false. ! pretend last step was collection
!$OMP CRITICAL (write2out)
write (6,'(i6,x,i2,x,a)') noel,npt,'<< UMAT >> start of analysis..!'; call flush(6)
!$OMP END CRITICAL (write2out)
else if (kinc - theInc > 1) then ! >> restart of broken analysis <<
lastIncConverged = .false. ! no Jacobian backup
outdatedByNewInc = .false. ! no aging of state
lastMode = .true. ! pretend last step was calculation
calcMode = .true. ! pretend last step was calculation
!$OMP CRITICAL (write2out)
write (6,'(i6,x,i2,x,a)') noel,npt,'<< UMAT >> restart of analysis..!'; call flush(6)
!$OMP END CRITICAL (write2out)
else ! >> just the next inc <<
lastIncConverged = .true. ! request Jacobian backup
outdatedByNewInc = .true. ! request aging of state
lastMode = .true. ! assure last step was calculation
calcMode = .true. ! assure last step was calculation
!$OMP CRITICAL (write2out)
write (6,'(i6,x,i2,x,a)') noel,npt,'<< UMAT >> new increment..!'; call flush(6)
!$OMP END CRITICAL (write2out)
endif
else if ( dtime < theDelta ) then ! >> cutBack <<
else
cp_en = mesh_FEasCP('elem',noel)
if (theTime < time(2) .or. theInc /= kinc) then ! reached convergence
lastIncConverged = .true.
outdatedByNewInc = .true.
terminallyIll = .false.
cycleCounter = 0
cutBack = .true.
terminallyIll = .false.
cycleCounter = -1 ! first calc step increments this to cycle = 0
calcMode = .true. ! pretend last step was calculation
!$OMP CRITICAL (write2out)
write(6,'(i6,x,i2,x,a)') noel,npt,'<< UMAT >> cutback detected..!'; call flush(6)
!$OMP END CRITICAL (write2out)
if ( verboseDebugger ) then
!$OMP CRITICAL (write2out)
write (6,'(i6,x,i2,x,a)') noel,npt,'lastIncConverged + outdated'; call flush(6)
!$OMP END CRITICAL (write2out)
endif
endif ! convergence treatment end
else if ( dtime < theDelta ) then ! or check for cutBack
calcMode = .true. ! pretend last step was calculation
cutBack = .true.
terminallyIll = .false.
cycleCounter = 0
if ( verboseDebugger ) then
!$OMP CRITICAL (write2out)
write(6,'(i6,x,i2,x,a)') noel,npt,'cutback detected..!'; call flush(6)
!$OMP END CRITICAL (write2out)
endif
endif
calcMode(npt,cp_en) = .not. calcMode(npt,cp_en) ! ping pong (calc <--> collect)
if ( calcMode(npt,cp_en) ) then ! now calc
if ( lastMode .neqv. calcMode(npt,cp_en) ) then ! first after ping pong
call debug_reset() ! resets debugging
outdatedFFN1 = .false.
cycleCounter = cycleCounter + 1
endif
if ( outdatedByNewInc ) then
outdatedByNewInc = .false.
computationMode = 1 ! calc and age results
else
computationMode = 2 ! plain calc
endif
else ! now collect
if ( lastMode .neqv. calcMode(npt,cp_en) ) call debug_info() ! first after ping pong reports debugging
if ( lastIncConverged ) then
lastIncConverged = .false.
computationMode = 4 ! collect and backup Jacobian after convergence
elseif ( cutBack ) then
cutBack = .false.
computationMode = 5 ! collect and restore Jacobian after cutback
else
computationMode = 3 ! plain collect
endif
endif
calcMode(npt,cp_en) = .not. calcMode(npt,cp_en) ! ping pong (calc <--> collect)
if ( calcMode(npt,cp_en) ) then ! now calc
if ( lastMode /= calcMode(npt,cp_en) ) then ! first after ping pong
call debug_reset() ! resets debugging
outdatedFFN1 = .false.
cycleCounter = cycleCounter + 1
endif
if ( outdatedByNewInc ) then
outdatedByNewInc = .false.
computationMode = 1 ! calc and age results
else
computationMode = 2 ! plain calc
endif
else ! now collect
if ( lastMode /= calcMode(npt,cp_en) .and. &
.not. terminallyIll) then
call debug_info() ! first after ping pong reports debugging
endif
if ( lastIncConverged ) then
lastIncConverged = .false.
computationMode = 4 ! collect and backup Jacobian after convergence
elseif ( cutBack ) then
cutBack = .false.
computationMode = 5 ! collect and restore Jacobian after cutback
else
computationMode = 3 ! plain collect
endif
endif
theTime = time(2) ! record current starting time
theDelta = dtime ! record current time increment
theInc = kinc ! record current increment number
if (CPFEM_init_done) lastMode = calcMode(npt,cp_en) ! record calculationMode
theTime = time(2) ! record current starting time
theDelta = dtime ! record current time increment
theInc = kinc ! record current increment number
lastMode = calcMode(npt,cp_en) ! record calculationMode
if ( verboseDebugger ) then
!$OMP CRITICAL (write2out)
@ -253,7 +263,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
statev = materialpoint_results(1:min(nstatv,materialpoint_sizeResults),npt,mesh_FEasCP('elem', noel))
if ( terminallyIll ) pnewdt = 0.5_pReal ! force cutback directly ?
if ( terminallyIll ) pnewdt = 0.5_pReal ! force cutback directly ?
return
end subroutine

View File

@ -1,7 +1,7 @@
$Id$
Things to be implemented into the code
# make OpenMP parallelization work again
# make Abaqus restart aware
# define set of test problems with known solution