plain mode (no ping pong) now seems to work for marc, further testing needed
regular sequence of computation modes is inc 0: 1,1,1,… inc 1: 0,0,0,… 7,1,1,… 0,0,0,… 1,1,1,… and so on after a cutback the computation modes follow as inc 5: 8,0,0,… 1,1,1,… 0,0,0,… 1,1,1,…
This commit is contained in:
parent
fa3be9a967
commit
9f0fe873ba
|
@ -299,8 +299,8 @@ subroutine hypela2(d,g,e,de,s,t,dt,ngens,m,nn,kcus,matus,ndi,nshear,disp, &
|
||||||
|
|
||||||
computationMode = 0_pInt ! save initialization value, since it does not result in any calculation
|
computationMode = 0_pInt ! save initialization value, since it does not result in any calculation
|
||||||
if (lovl == 4 ) then ! jacobian requested by marc
|
if (lovl == 4 ) then ! jacobian requested by marc
|
||||||
if (timinc < theDelta .and. theInc == inc .and. lastLovl /= lovl) &
|
if (timinc < theDelta .and. theInc == inc .and. lastLovl /= lovl) & ! first after cutback
|
||||||
computationMode = CPFEM_RESTOREJACOBIAN ! first after cutback
|
computationMode = CPFEM_RESTOREJACOBIAN
|
||||||
elseif (lovl == 6) then ! stress requested by marc
|
elseif (lovl == 6) then ! stress requested by marc
|
||||||
cp_en = mesh_FEasCP('elem',m(1))
|
cp_en = mesh_FEasCP('elem',m(1))
|
||||||
if (cptim > theTime .or. inc /= theInc) then ! reached "convergence"
|
if (cptim > theTime .or. inc /= theInc) then ! reached "convergence"
|
||||||
|
@ -333,6 +333,8 @@ subroutine hypela2(d,g,e,de,s,t,dt,ngens,m,nn,kcus,matus,ndi,nshear,disp, &
|
||||||
!$OMP END CRITICAL (write2out)
|
!$OMP END CRITICAL (write2out)
|
||||||
endif
|
endif
|
||||||
else if ( timinc < theDelta ) then ! >> cutBack <<
|
else if ( timinc < theDelta ) then ! >> cutBack <<
|
||||||
|
lastIncConverged = .false. ! no Jacobian backup
|
||||||
|
outdatedByNewInc = .false. ! no aging of state
|
||||||
terminallyIll = .false.
|
terminallyIll = .false.
|
||||||
cycleCounter = -1 ! first calc step increments this to cycle = 0
|
cycleCounter = -1 ! first calc step increments this to cycle = 0
|
||||||
calcMode = .true. ! pretend last step was calculation
|
calcMode = .true. ! pretend last step was calculation
|
||||||
|
@ -346,6 +348,7 @@ subroutine hypela2(d,g,e,de,s,t,dt,ngens,m,nn,kcus,matus,ndi,nshear,disp, &
|
||||||
if (usePingPong) then
|
if (usePingPong) then
|
||||||
calcMode(nn,cp_en) = .not. calcMode(nn,cp_en) ! ping pong (calc <--> collect)
|
calcMode(nn,cp_en) = .not. calcMode(nn,cp_en) ! ping pong (calc <--> collect)
|
||||||
if (calcMode(nn,cp_en)) then ! now --- CALC ---
|
if (calcMode(nn,cp_en)) then ! now --- CALC ---
|
||||||
|
computationMode = CPFEM_CALCRESULTS
|
||||||
if (lastLovl /= lovl) then ! first after ping pong
|
if (lastLovl /= lovl) then ! first after ping pong
|
||||||
call debug_reset() ! resets debugging
|
call debug_reset() ! resets debugging
|
||||||
outdatedFFN1 = .false.
|
outdatedFFN1 = .false.
|
||||||
|
@ -354,25 +357,42 @@ subroutine hypela2(d,g,e,de,s,t,dt,ngens,m,nn,kcus,matus,ndi,nshear,disp, &
|
||||||
call mesh_build_ipCoordinates() ! update ip coordinates
|
call mesh_build_ipCoordinates() ! update ip coordinates
|
||||||
endif
|
endif
|
||||||
if (outdatedByNewInc) then
|
if (outdatedByNewInc) then
|
||||||
computationMode = ior(CPFEM_CALCRESULTS,CPFEM_AGERESULTS)
|
computationMode = ior(computationMode,CPFEM_AGERESULTS)
|
||||||
outdatedByNewInc = .false. ! reset flag
|
outdatedByNewInc = .false. ! reset flag
|
||||||
else
|
|
||||||
computationMode = CPFEM_CALCRESULTS
|
|
||||||
endif
|
endif
|
||||||
else ! now --- COLLECT ---
|
else ! now --- COLLECT ---
|
||||||
|
computationMode = CPFEM_COLLECT ! plain collect
|
||||||
if (lastLovl /= lovl .and. & .not. terminallyIll) &
|
if (lastLovl /= lovl .and. & .not. terminallyIll) &
|
||||||
call debug_info() ! first after ping pong reports (meaningful) debugging
|
call debug_info() ! first after ping pong reports (meaningful) debugging
|
||||||
if (lastIncConverged) then
|
if (lastIncConverged) then
|
||||||
computationMode = ior(CPFEM_COLLECT,CPFEM_BACKUPJACOBIAN) ! collect and backup Jacobian after convergence
|
computationMode = ior(computationMode,CPFEM_BACKUPJACOBIAN) ! collect and backup Jacobian after convergence
|
||||||
lastIncConverged = .false. ! reset flag
|
lastIncConverged = .false. ! reset flag
|
||||||
else
|
|
||||||
computationMode = CPFEM_COLLECT ! plain collect
|
|
||||||
endif
|
endif
|
||||||
do node = 1,FE_Nnodes(mesh_element(2,cp_en))
|
do node = 1,FE_Nnodes(mesh_element(2,cp_en))
|
||||||
CPnodeID = mesh_element(4_pInt+node,cp_en)
|
CPnodeID = mesh_element(4_pInt+node,cp_en)
|
||||||
mesh_node(1:3,CPnodeID) = mesh_node0(1:3,CPnodeID) + numerics_unitlength * dispt(1:3,node)
|
mesh_node(1:3,CPnodeID) = mesh_node0(1:3,CPnodeID) + numerics_unitlength * dispt(1:3,node)
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
else ! --- PLAIN MODE ---
|
||||||
|
computationMode = CPFEM_CALCRESULTS ! always calc
|
||||||
|
if (lastLovl /= lovl) then
|
||||||
|
if (.not. terminallyIll) &
|
||||||
|
call debug_info() ! first reports (meaningful) debugging
|
||||||
|
call debug_reset() ! and resets debugging
|
||||||
|
outdatedFFN1 = .false.
|
||||||
|
cycleCounter = cycleCounter + 1_pInt
|
||||||
|
mesh_cellnode = mesh_build_cellnodes(mesh_node,mesh_Ncellnodes) ! update cell node coordinates
|
||||||
|
call mesh_build_ipCoordinates() ! update ip coordinates
|
||||||
|
endif
|
||||||
|
if (outdatedByNewInc) then
|
||||||
|
computationMode = ior(computationMode,CPFEM_AGERESULTS)
|
||||||
|
outdatedByNewInc = .false. ! reset flag
|
||||||
|
endif
|
||||||
|
if (lastIncConverged) then
|
||||||
|
computationMode = ior(computationMode,CPFEM_BACKUPJACOBIAN) ! backup Jacobian after convergence
|
||||||
|
lastIncConverged = .false. ! reset flag
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
theTime = cptim ! record current starting time
|
theTime = cptim ! record current starting time
|
||||||
|
|
Loading…
Reference in New Issue