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,47 +153,54 @@ 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
else
cp_en = mesh_FEasCP('elem',noel)
if (theTime < time(2) .or. theInc /= kinc) then ! reached convergence
lastIncConverged = .true.
outdatedByNewInc = .true.
if (time(2) > theTime .or. kinc /= theInc) then ! reached convergence
terminallyIll = .false.
cycleCounter = 0
if ( verboseDebugger ) then
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,'lastIncConverged + outdated'; call flush(6)
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 ! or check for cutBack
calcMode = .true. ! pretend last step was calculation
else if ( dtime < theDelta ) then ! >> cutBack <<
cutBack = .true.
terminallyIll = .false.
cycleCounter = 0
if ( verboseDebugger ) then
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,'cutback detected..!'; call flush(6)
write(6,'(i6,x,i2,x,a)') noel,npt,'<< UMAT >> cutback detected..!'; call flush(6)
!$OMP END CRITICAL (write2out)
endif
endif
endif ! convergence treatment end
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
if ( lastMode /= calcMode(npt,cp_en) ) then ! first after ping pong
call debug_reset() ! resets debugging
outdatedFFN1 = .false.
cycleCounter = cycleCounter + 1
@ -203,7 +212,10 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
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 ( 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
@ -215,12 +227,10 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
endif
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
lastMode = calcMode(npt,cp_en) ! record calculationMode
if ( verboseDebugger ) then
!$OMP CRITICAL (write2out)

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