Merge branch 'development' into 3-adding-plastic-constitutive-law-with-kinematic-hardening
This commit is contained in:
commit
566cf3d855
|
@ -0,0 +1,25 @@
|
||||||
|
[Air]
|
||||||
|
|
||||||
|
## Isotropic Material model to simulate free surfaces ##
|
||||||
|
## For more information see paper Maiti+Eisenlohr2018, Scripta Materialia,
|
||||||
|
## "Fourier-based spectral method solution to finite strain crystal plasticity with free surfaces"
|
||||||
|
|
||||||
|
elasticity hooke
|
||||||
|
plasticity isotropic
|
||||||
|
|
||||||
|
/dilatation/
|
||||||
|
|
||||||
|
(output) flowstress
|
||||||
|
(output) strainrate
|
||||||
|
|
||||||
|
lattice_structure isotropic
|
||||||
|
c11 110.9e9
|
||||||
|
c12 0.0
|
||||||
|
taylorfactor 3
|
||||||
|
tau0 31e6
|
||||||
|
gdot0 0.001
|
||||||
|
n 20
|
||||||
|
h0 75e6
|
||||||
|
tausat 63e6
|
||||||
|
w0 2.25
|
||||||
|
atol_resistance 1
|
|
@ -22,7 +22,13 @@ parser.add_option('-t','--tensor',
|
||||||
dest = 'tensor',
|
dest = 'tensor',
|
||||||
action = 'extend', metavar = '<string LIST>',
|
action = 'extend', metavar = '<string LIST>',
|
||||||
help = 'heading of columns containing tensor field values')
|
help = 'heading of columns containing tensor field values')
|
||||||
|
parser.add_option('--no-check',
|
||||||
|
dest = 'rh',
|
||||||
|
action = 'store_false',
|
||||||
|
help = 'skip check for right-handed eigenvector basis')
|
||||||
|
|
||||||
|
parser.set_defaults(rh = True,
|
||||||
|
)
|
||||||
(options,filenames) = parser.parse_args()
|
(options,filenames) = parser.parse_args()
|
||||||
|
|
||||||
if options.tensor is None:
|
if options.tensor is None:
|
||||||
|
@ -57,8 +63,10 @@ for name in filenames:
|
||||||
if dim != data['dim']: remarks.append('column {} is not a {}...'.format(what,type))
|
if dim != data['dim']: remarks.append('column {} is not a {}...'.format(what,type))
|
||||||
else:
|
else:
|
||||||
items[type]['column'].append(table.label_index(what))
|
items[type]['column'].append(table.label_index(what))
|
||||||
table.labels_append(['{}_eigval({})'.format(i+1,what) for i in range(3)]) # extend ASCII header with new labels
|
for order in ['Min','Mid','Max']:
|
||||||
table.labels_append(['{}_eigvec({})'.format(i+1,what) for i in range(9)]) # extend ASCII header with new labels
|
table.labels_append(['eigval{}({})'.format(order,what)]) # extend ASCII header with new labels
|
||||||
|
for order in ['Min','Mid','Max']:
|
||||||
|
table.labels_append(['{}_eigvec{}({})'.format(i+1,order,what) for i in range(3)]) # extend ASCII header with new labels
|
||||||
|
|
||||||
if remarks != []: damask.util.croak(remarks)
|
if remarks != []: damask.util.croak(remarks)
|
||||||
if errors != []:
|
if errors != []:
|
||||||
|
@ -78,10 +86,10 @@ for name in filenames:
|
||||||
for type, data in items.iteritems():
|
for type, data in items.iteritems():
|
||||||
for column in data['column']:
|
for column in data['column']:
|
||||||
(u,v) = np.linalg.eigh(np.array(map(float,table.data[column:column+data['dim']])).reshape(data['shape']))
|
(u,v) = np.linalg.eigh(np.array(map(float,table.data[column:column+data['dim']])).reshape(data['shape']))
|
||||||
if np.dot(np.cross(v[:,0], v[:,1]), v[:,2]) < 0.0 : v[:, 2] *= -1.0 # ensure right-handed coordinate system
|
if options.rh and np.dot(np.cross(v[:,0], v[:,1]), v[:,2]) < 0.0 : v[:, 2] *= -1.0 # ensure right-handed eigenvector basis
|
||||||
table.data_append(list(u))
|
table.data_append(list(u)) # vector of max,mid,min eigval
|
||||||
table.data_append(list(v.transpose().reshape(data['dim'])))
|
table.data_append(list(v.transpose().reshape(data['dim']))) # 3x3=9 combo vector of max,mid,min eigvec coordinates
|
||||||
outputAlive = table.data_write() # output processed line
|
outputAlive = table.data_write() # output processed line in accordance with column labeling
|
||||||
|
|
||||||
# ------------------------------------------ output finalization -----------------------------------
|
# ------------------------------------------ output finalization -----------------------------------
|
||||||
|
|
||||||
|
|
|
@ -60,15 +60,18 @@ module plastic_isotropic
|
||||||
flowstress, &
|
flowstress, &
|
||||||
accumulatedShear
|
accumulatedShear
|
||||||
end type
|
end type
|
||||||
|
|
||||||
type, private :: tIsotropicAbsTol !< internal alias for abs tolerance in state
|
type, private :: tIsotropicAbsTol !< internal alias for abs tolerance in state
|
||||||
real(pReal), pointer :: & ! scalars
|
real(pReal), pointer :: & ! scalars
|
||||||
flowstress, &
|
flowstress, &
|
||||||
accumulatedShear
|
accumulatedShear
|
||||||
end type
|
end type
|
||||||
|
|
||||||
type(tIsotropicState), allocatable, dimension(:), private :: & !< state aliases per instance
|
type(tIsotropicState), allocatable, dimension(:), private :: & !< state aliases per instance
|
||||||
state, &
|
state, &
|
||||||
state0, &
|
state0, &
|
||||||
dotState
|
dotState
|
||||||
|
|
||||||
type(tIsotropicAbsTol), allocatable, dimension(:), private :: & !< state aliases per instance
|
type(tIsotropicAbsTol), allocatable, dimension(:), private :: & !< state aliases per instance
|
||||||
stateAbsTol
|
stateAbsTol
|
||||||
|
|
||||||
|
@ -140,7 +143,7 @@ subroutine plastic_isotropic_init(fileUnit)
|
||||||
extmsg = ''
|
extmsg = ''
|
||||||
character(len=64) :: &
|
character(len=64) :: &
|
||||||
outputtag = ''
|
outputtag = ''
|
||||||
integer(pInt) :: NipcMyPhase
|
integer(pInt) :: NipcMyPhase
|
||||||
|
|
||||||
write(6,'(/,a)') ' <<<+- constitutive_'//PLASTICITY_ISOTROPIC_label//' init -+>>>'
|
write(6,'(/,a)') ' <<<+- constitutive_'//PLASTICITY_ISOTROPIC_label//' init -+>>>'
|
||||||
write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
|
write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
|
||||||
|
@ -293,9 +296,9 @@ subroutine plastic_isotropic_init(fileUnit)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate state arrays
|
! allocate state arrays
|
||||||
sizeState = 2_pInt ! flowstress, accumulated_shear
|
sizeDotState = 2_pInt ! flowstress, accumulated_shear
|
||||||
sizeDotState = sizeState ! both evolve
|
|
||||||
sizeDeltaState = 0_pInt ! no sudden jumps in state
|
sizeDeltaState = 0_pInt ! no sudden jumps in state
|
||||||
|
sizeState = sizeDotState + sizeDeltaState
|
||||||
plasticState(phase)%sizeState = sizeState
|
plasticState(phase)%sizeState = sizeState
|
||||||
plasticState(phase)%sizeDotState = sizeDotState
|
plasticState(phase)%sizeDotState = sizeDotState
|
||||||
plasticState(phase)%sizeDeltaState = sizeDeltaState
|
plasticState(phase)%sizeDeltaState = sizeDeltaState
|
||||||
|
@ -418,7 +421,7 @@ subroutine plastic_isotropic_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,ipc,ip,el)
|
||||||
* ( sqrt(1.5_pReal) * norm_Tstar_dev / param(instance)%fTaylor / state(instance)%flowstress(of) ) &
|
* ( sqrt(1.5_pReal) * norm_Tstar_dev / param(instance)%fTaylor / state(instance)%flowstress(of) ) &
|
||||||
**param(instance)%n
|
**param(instance)%n
|
||||||
|
|
||||||
Lp = Tstar_dev_33/norm_Tstar_dev * gamma_dot/param(instance)%fTaylor
|
Lp = Tstar_dev_33/norm_Tstar_dev * gamma_dot/param(instance)%fTaylor
|
||||||
|
|
||||||
if (iand(debug_level(debug_constitutive), debug_levelExtensive) /= 0_pInt &
|
if (iand(debug_level(debug_constitutive), debug_levelExtensive) /= 0_pInt &
|
||||||
.and. ((el == debug_e .and. ip == debug_i .and. ipc == debug_g) &
|
.and. ((el == debug_e .and. ip == debug_i .and. ipc == debug_g) &
|
||||||
|
|
Loading…
Reference in New Issue