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:
parent
654b5ea987
commit
18e668340f
|
@ -21,6 +21,7 @@ MODULE mpie_interface
|
||||||
|
|
||||||
character(len=64), parameter :: FEsolver = 'Abaqus'
|
character(len=64), parameter :: FEsolver = 'Abaqus'
|
||||||
character(len=4), parameter :: InputFileExtension = '.inp'
|
character(len=4), parameter :: InputFileExtension = '.inp'
|
||||||
|
character(len=4), parameter :: LogFileExtension = '.log'
|
||||||
|
|
||||||
CONTAINS
|
CONTAINS
|
||||||
|
|
||||||
|
@ -81,6 +82,7 @@ END MODULE
|
||||||
include "material.f90" ! uses prec, math, IO, mesh
|
include "material.f90" ! uses prec, math, IO, mesh
|
||||||
include "lattice.f90" ! uses prec, math, IO, material
|
include "lattice.f90" ! uses prec, math, IO, material
|
||||||
include "constitutive_phenopowerlaw.f90" ! uses prec, math, IO, latt ice, material, debug
|
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_j2.f90" ! uses prec, math, IO, latt ice, material, debug
|
||||||
include "constitutive_dislotwin.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
|
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, &
|
debug_reset, &
|
||||||
verboseDebugger
|
verboseDebugger
|
||||||
use mesh, only: mesh_FEasCP
|
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
|
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.
|
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
|
do n = 1,nblock ! loop over vector of IPs
|
||||||
|
|
||||||
|
temp = tempOld(n)
|
||||||
if ( .not. CPFEM_init_done ) then
|
if ( .not. CPFEM_init_done ) then
|
||||||
|
call CPFEM_initAll(temp,nElement(n),nMatPoint(n))
|
||||||
outdatedByNewInc = .false.
|
outdatedByNewInc = .false.
|
||||||
|
|
||||||
if ( verboseDebugger ) then
|
if ( verboseDebugger ) then
|
||||||
|
@ -227,7 +231,6 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, &
|
||||||
|
|
||||||
defgrd0 = 0.0_pReal
|
defgrd0 = 0.0_pReal
|
||||||
defgrd1 = 0.0_pReal
|
defgrd1 = 0.0_pReal
|
||||||
temp = tempOld(n)
|
|
||||||
timeInc = dt
|
timeInc = dt
|
||||||
|
|
||||||
! ABAQUS explicit: deformation gradient as vector 11, 22, 33, 12, 23, 31, 21, 32, 13
|
! ABAQUS explicit: deformation gradient as vector 11, 22, 33, 12, 23, 31, 21, 32, 13
|
||||||
|
|
|
@ -21,6 +21,7 @@ MODULE mpie_interface
|
||||||
|
|
||||||
character(len=64), parameter :: FEsolver = 'Abaqus'
|
character(len=64), parameter :: FEsolver = 'Abaqus'
|
||||||
character(len=4), parameter :: InputFileExtension = '.inp'
|
character(len=4), parameter :: InputFileExtension = '.inp'
|
||||||
|
character(len=4), parameter :: LogFileExtension = '.log'
|
||||||
|
|
||||||
CONTAINS
|
CONTAINS
|
||||||
|
|
||||||
|
@ -83,6 +84,7 @@ END MODULE
|
||||||
include "material.f90" ! uses prec, math, IO, mesh
|
include "material.f90" ! uses prec, math, IO, mesh
|
||||||
include "lattice.f90" ! uses prec, math, IO, material
|
include "lattice.f90" ! uses prec, math, IO, material
|
||||||
include "constitutive_phenopowerlaw.f90" ! uses prec, math, IO, latt ice, material, debug
|
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_j2.f90" ! uses prec, math, IO, latt ice, material, debug
|
||||||
include "constitutive_dislotwin.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
|
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, &
|
debug_reset, &
|
||||||
verboseDebugger
|
verboseDebugger
|
||||||
use mesh, only: mesh_FEasCP
|
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
|
use homogenization, only: materialpoint_sizeResults, materialpoint_results
|
||||||
|
|
||||||
|
|
||||||
|
@ -151,76 +153,84 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
|
||||||
!$OMP END CRITICAL (write2out)
|
!$OMP END CRITICAL (write2out)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if ( .not. CPFEM_init_done ) then
|
if (.not. CPFEM_init_done) call CPFEM_initAll(temp,noel,npt)
|
||||||
|
|
||||||
computationMode = 2 ! calc + init
|
cp_en = mesh_FEasCP('elem',noel)
|
||||||
if ( verboseDebugger ) then
|
if (time(2) > theTime .or. kinc /= theInc) then ! reached convergence
|
||||||
!$OMP CRITICAL (write2out)
|
terminallyIll = .false.
|
||||||
write(6,'(i6,x,i2,x,a)') noel,npt,'first call special case..!'; call flush(6)
|
cycleCounter = -1 ! first calc step increments this to cycle = 0
|
||||||
!$OMP END CRITICAL (write2out)
|
if (kinc == 0) then ! >> start of analysis <<
|
||||||
endif
|
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
|
else if ( dtime < theDelta ) then ! >> cutBack <<
|
||||||
cp_en = mesh_FEasCP('elem',noel)
|
|
||||||
if (theTime < time(2) .or. theInc /= kinc) then ! reached convergence
|
|
||||||
lastIncConverged = .true.
|
|
||||||
outdatedByNewInc = .true.
|
|
||||||
terminallyIll = .false.
|
|
||||||
cycleCounter = 0
|
|
||||||
|
|
||||||
if ( verboseDebugger ) then
|
cutBack = .true.
|
||||||
!$OMP CRITICAL (write2out)
|
terminallyIll = .false.
|
||||||
write (6,'(i6,x,i2,x,a)') noel,npt,'lastIncConverged + outdated'; call flush(6)
|
cycleCounter = -1 ! first calc step increments this to cycle = 0
|
||||||
!$OMP END CRITICAL (write2out)
|
calcMode = .true. ! pretend last step was calculation
|
||||||
endif
|
!$OMP CRITICAL (write2out)
|
||||||
|
write(6,'(i6,x,i2,x,a)') noel,npt,'<< UMAT >> cutback detected..!'; call flush(6)
|
||||||
|
!$OMP END CRITICAL (write2out)
|
||||||
|
|
||||||
else if ( dtime < theDelta ) then ! or check for cutBack
|
endif ! convergence treatment end
|
||||||
calcMode = .true. ! pretend last step was calculation
|
|
||||||
cutBack = .true.
|
|
||||||
terminallyIll = .false.
|
|
||||||
cycleCounter = 0
|
|
||||||
|
|
||||||
if ( verboseDebugger ) then
|
calcMode(npt,cp_en) = .not. calcMode(npt,cp_en) ! ping pong (calc <--> collect)
|
||||||
!$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
|
|
||||||
|
|
||||||
|
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
|
endif
|
||||||
|
|
||||||
theTime = time(2) ! record current starting time
|
theTime = time(2) ! record current starting time
|
||||||
theDelta = dtime ! record current time increment
|
theDelta = dtime ! record current time increment
|
||||||
theInc = kinc ! record current increment number
|
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
|
if ( verboseDebugger ) then
|
||||||
!$OMP CRITICAL (write2out)
|
!$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))
|
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
|
return
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
$Id$
|
$Id$
|
||||||
Things to be implemented into the code
|
Things to be implemented into the code
|
||||||
|
|
||||||
# make OpenMP parallelization work again
|
# make Abaqus restart aware
|
||||||
|
|
||||||
# define set of test problems with known solution
|
# define set of test problems with known solution
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue