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,47 +153,54 @@ 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
|
|
||||||
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)
|
cp_en = mesh_FEasCP('elem',noel)
|
||||||
if (theTime < time(2) .or. theInc /= kinc) then ! reached convergence
|
if (time(2) > theTime .or. kinc /= theInc) then ! reached convergence
|
||||||
lastIncConverged = .true.
|
|
||||||
outdatedByNewInc = .true.
|
|
||||||
terminallyIll = .false.
|
terminallyIll = .false.
|
||||||
cycleCounter = 0
|
cycleCounter = -1 ! first calc step increments this to cycle = 0
|
||||||
|
if (kinc == 0) then ! >> start of analysis <<
|
||||||
if ( verboseDebugger ) then
|
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)
|
!$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)
|
!$OMP END CRITICAL (write2out)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
else if ( dtime < theDelta ) then ! or check for cutBack
|
else if ( dtime < theDelta ) then ! >> cutBack <<
|
||||||
calcMode = .true. ! pretend last step was calculation
|
|
||||||
cutBack = .true.
|
cutBack = .true.
|
||||||
terminallyIll = .false.
|
terminallyIll = .false.
|
||||||
cycleCounter = 0
|
cycleCounter = -1 ! first calc step increments this to cycle = 0
|
||||||
|
calcMode = .true. ! pretend last step was calculation
|
||||||
if ( verboseDebugger ) then
|
|
||||||
!$OMP CRITICAL (write2out)
|
!$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)
|
!$OMP END CRITICAL (write2out)
|
||||||
endif
|
|
||||||
|
|
||||||
endif
|
endif ! convergence treatment end
|
||||||
|
|
||||||
calcMode(npt,cp_en) = .not. calcMode(npt,cp_en) ! ping pong (calc <--> collect)
|
calcMode(npt,cp_en) = .not. calcMode(npt,cp_en) ! ping pong (calc <--> collect)
|
||||||
|
|
||||||
if ( calcMode(npt,cp_en) ) then ! now calc
|
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
|
call debug_reset() ! resets debugging
|
||||||
outdatedFFN1 = .false.
|
outdatedFFN1 = .false.
|
||||||
cycleCounter = cycleCounter + 1
|
cycleCounter = cycleCounter + 1
|
||||||
|
@ -203,7 +212,10 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
|
||||||
computationMode = 2 ! plain calc
|
computationMode = 2 ! plain calc
|
||||||
endif
|
endif
|
||||||
else ! now collect
|
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
|
if ( lastIncConverged ) then
|
||||||
lastIncConverged = .false.
|
lastIncConverged = .false.
|
||||||
computationMode = 4 ! collect and backup Jacobian after convergence
|
computationMode = 4 ! collect and backup Jacobian after convergence
|
||||||
|
@ -215,12 +227,10 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,&
|
||||||
endif
|
endif
|
||||||
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)
|
||||||
|
|
|
@ -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