diff --git a/code/constitutive.f90 b/code/constitutive.f90 index 4ec21cb09..a1780921d 100644 --- a/code/constitutive.f90 +++ b/code/constitutive.f90 @@ -138,9 +138,9 @@ subroutine constitutive_init cMax, & !< maximum number of grains iMax, & !< maximum number of integration points eMax, & !< maximum number of elements - p, & + phase, & s, & - matID,& + instance,& myNgrains integer(pInt), dimension(:,:), pointer :: thisSize character(len=64), dimension(:,:), pointer :: thisOutput @@ -170,10 +170,10 @@ subroutine constitutive_init !-------------------------------------------------------------------------------------------------- ! write description file for constitutive phase output call IO_write_jobFile(FILEUNIT,'outputConstitutive') - do p = 1_pInt,material_Nphase - i = phase_plasticityInstance(p) ! which instance of a plasticity is present phase + do phase = 1_pInt,material_Nphase + instance = phase_plasticityInstance(phase) ! which instance of a plasticity is present phase knownPlasticity = .true. ! assume valid - select case(phase_plasticity(p)) ! split per constititution + select case(phase_plasticity(phase)) ! split per constititution case (PLASTICITY_NONE_ID) outputName = PLASTICITY_NONE_label thisOutput => NULL() ! constitutive_none_output @@ -201,11 +201,11 @@ subroutine constitutive_init case default knownPlasticity = .false. end select - write(FILEUNIT,'(/,a,/)') '['//trim(phase_name(p))//']' + write(FILEUNIT,'(/,a,/)') '['//trim(phase_name(phase))//']' if (knownPlasticity) then write(FILEUNIT,'(a)') '(plasticity)'//char(9)//trim(outputName) - do e = 1_pInt,phase_Noutput(p) - write(FILEUNIT,'(a,i4)') trim(thisOutput(e,i))//char(9),thisSize(e,i) + do e = 1_pInt,phase_Noutput(instance) + write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance) enddo endif enddo @@ -247,28 +247,28 @@ subroutine constitutive_init select case(phase_elasticity(material_phase(g,i,e))) case default ! so far no output for elasticity end select - matID = phase_plasticityInstance(material_phase(g,i,e)) + instance = phase_plasticityInstance(material_phase(g,i,e)) select case(phase_plasticity(material_phase(g,i,e))) case (PLASTICITY_NONE_ID) - allocate(constitutive_state0(g,i,e)%p(constitutive_none_sizeState(matID))) - allocate(constitutive_partionedState0(g,i,e)%p(constitutive_none_sizeState(matID))) - allocate(constitutive_subState0(g,i,e)%p(constitutive_none_sizeState(matID))) - allocate(constitutive_state(g,i,e)%p(constitutive_none_sizeState(matID))) - allocate(constitutive_state_backup(g,i,e)%p(constitutive_none_sizeState(matID))) - allocate(constitutive_aTolState(g,i,e)%p(constitutive_none_sizeState(matID))) - allocate(constitutive_dotState(g,i,e)%p(constitutive_none_sizeDotState(matID))) - allocate(constitutive_deltaState(g,i,e)%p(constitutive_none_sizeDotState(matID))) - allocate(constitutive_dotState_backup(g,i,e)%p(constitutive_none_sizeDotState(matID))) + allocate(constitutive_state0(g,i,e)%p(constitutive_none_sizeState(instance))) + allocate(constitutive_partionedState0(g,i,e)%p(constitutive_none_sizeState(instance))) + allocate(constitutive_subState0(g,i,e)%p(constitutive_none_sizeState(instance))) + allocate(constitutive_state(g,i,e)%p(constitutive_none_sizeState(instance))) + allocate(constitutive_state_backup(g,i,e)%p(constitutive_none_sizeState(instance))) + allocate(constitutive_aTolState(g,i,e)%p(constitutive_none_sizeState(instance))) + allocate(constitutive_dotState(g,i,e)%p(constitutive_none_sizeDotState(instance))) + allocate(constitutive_deltaState(g,i,e)%p(constitutive_none_sizeDotState(instance))) + allocate(constitutive_dotState_backup(g,i,e)%p(constitutive_none_sizeDotState(instance))) if (any(numerics_integrator == 1_pInt)) then - allocate(constitutive_previousDotState(g,i,e)%p(constitutive_none_sizeDotState(matID))) - allocate(constitutive_previousDotState2(g,i,e)%p(constitutive_none_sizeDotState(matID))) + allocate(constitutive_previousDotState(g,i,e)%p(constitutive_none_sizeDotState(instance))) + allocate(constitutive_previousDotState2(g,i,e)%p(constitutive_none_sizeDotState(instance))) endif if (any(numerics_integrator == 4_pInt)) then - allocate(constitutive_RK4dotState(g,i,e)%p(constitutive_none_sizeDotState(matID))) + allocate(constitutive_RK4dotState(g,i,e)%p(constitutive_none_sizeDotState(instance))) endif if (any(numerics_integrator == 5_pInt)) then do s = 1_pInt,6_pInt - allocate(constitutive_RKCK45dotState(s,g,i,e)%p(constitutive_none_sizeDotState(matID))) + allocate(constitutive_RKCK45dotState(s,g,i,e)%p(constitutive_none_sizeDotState(instance))) enddo endif constitutive_state0(g,i,e)%p = 0.0_pReal @@ -277,141 +277,141 @@ subroutine constitutive_init constitutive_sizeDotState(g,i,e) = 0_pInt constitutive_sizePostResults(g,i,e) = 0_pInt case (PLASTICITY_J2_ID) - allocate(constitutive_state0(g,i,e)%p(constitutive_j2_sizeState(matID))) - allocate(constitutive_partionedState0(g,i,e)%p(constitutive_j2_sizeState(matID))) - allocate(constitutive_subState0(g,i,e)%p(constitutive_j2_sizeState(matID))) - allocate(constitutive_state(g,i,e)%p(constitutive_j2_sizeState(matID))) - allocate(constitutive_state_backup(g,i,e)%p(constitutive_j2_sizeState(matID))) - allocate(constitutive_aTolState(g,i,e)%p(constitutive_j2_sizeState(matID))) - allocate(constitutive_dotState(g,i,e)%p(constitutive_j2_sizeDotState(matID))) - allocate(constitutive_deltaState(g,i,e)%p(constitutive_j2_sizeDotState(matID))) - allocate(constitutive_dotState_backup(g,i,e)%p(constitutive_j2_sizeDotState(matID))) + allocate(constitutive_state0(g,i,e)%p(constitutive_j2_sizeState(instance))) + allocate(constitutive_partionedState0(g,i,e)%p(constitutive_j2_sizeState(instance))) + allocate(constitutive_subState0(g,i,e)%p(constitutive_j2_sizeState(instance))) + allocate(constitutive_state(g,i,e)%p(constitutive_j2_sizeState(instance))) + allocate(constitutive_state_backup(g,i,e)%p(constitutive_j2_sizeState(instance))) + allocate(constitutive_aTolState(g,i,e)%p(constitutive_j2_sizeState(instance))) + allocate(constitutive_dotState(g,i,e)%p(constitutive_j2_sizeDotState(instance))) + allocate(constitutive_deltaState(g,i,e)%p(constitutive_j2_sizeDotState(instance))) + allocate(constitutive_dotState_backup(g,i,e)%p(constitutive_j2_sizeDotState(instance))) if (any(numerics_integrator == 1_pInt)) then - allocate(constitutive_previousDotState(g,i,e)%p(constitutive_j2_sizeDotState(matID))) - allocate(constitutive_previousDotState2(g,i,e)%p(constitutive_j2_sizeDotState(matID))) + allocate(constitutive_previousDotState(g,i,e)%p(constitutive_j2_sizeDotState(instance))) + allocate(constitutive_previousDotState2(g,i,e)%p(constitutive_j2_sizeDotState(instance))) endif if (any(numerics_integrator == 4_pInt)) then - allocate(constitutive_RK4dotState(g,i,e)%p(constitutive_j2_sizeDotState(matID))) + allocate(constitutive_RK4dotState(g,i,e)%p(constitutive_j2_sizeDotState(instance))) endif if (any(numerics_integrator == 5_pInt)) then do s = 1_pInt,6_pInt - allocate(constitutive_RKCK45dotState(s,g,i,e)%p(constitutive_j2_sizeDotState(matID))) + allocate(constitutive_RKCK45dotState(s,g,i,e)%p(constitutive_j2_sizeDotState(instance))) enddo endif - constitutive_state0(g,i,e)%p = constitutive_j2_stateInit(matID) - constitutive_aTolState(g,i,e)%p = constitutive_j2_aTolState(matID) - constitutive_sizeState(g,i,e) = constitutive_j2_sizeState(matID) - constitutive_sizeDotState(g,i,e) = constitutive_j2_sizeDotState(matID) - constitutive_sizePostResults(g,i,e) = constitutive_j2_sizePostResults(matID) + constitutive_state0(g,i,e)%p = constitutive_j2_stateInit(instance) + constitutive_aTolState(g,i,e)%p = constitutive_j2_aTolState(instance) + constitutive_sizeState(g,i,e) = constitutive_j2_sizeState(instance) + constitutive_sizeDotState(g,i,e) = constitutive_j2_sizeDotState(instance) + constitutive_sizePostResults(g,i,e) = constitutive_j2_sizePostResults(instance) case (PLASTICITY_PHENOPOWERLAW_ID) - allocate(constitutive_state0(g,i,e)%p(constitutive_phenopowerlaw_sizeState(matID))) - allocate(constitutive_partionedState0(g,i,e)%p(constitutive_phenopowerlaw_sizeState(matID))) - allocate(constitutive_subState0(g,i,e)%p(constitutive_phenopowerlaw_sizeState(matID))) - allocate(constitutive_state(g,i,e)%p(constitutive_phenopowerlaw_sizeState(matID))) - allocate(constitutive_state_backup(g,i,e)%p(constitutive_phenopowerlaw_sizeState(matID))) - allocate(constitutive_aTolState(g,i,e)%p(constitutive_phenopowerlaw_sizeState(matID))) - allocate(constitutive_dotState(g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(matID))) - allocate(constitutive_deltaState(g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(matID))) - allocate(constitutive_dotState_backup(g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(matID))) + allocate(constitutive_state0(g,i,e)%p(constitutive_phenopowerlaw_sizeState(instance))) + allocate(constitutive_partionedState0(g,i,e)%p(constitutive_phenopowerlaw_sizeState(instance))) + allocate(constitutive_subState0(g,i,e)%p(constitutive_phenopowerlaw_sizeState(instance))) + allocate(constitutive_state(g,i,e)%p(constitutive_phenopowerlaw_sizeState(instance))) + allocate(constitutive_state_backup(g,i,e)%p(constitutive_phenopowerlaw_sizeState(instance))) + allocate(constitutive_aTolState(g,i,e)%p(constitutive_phenopowerlaw_sizeState(instance))) + allocate(constitutive_dotState(g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(instance))) + allocate(constitutive_deltaState(g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(instance))) + allocate(constitutive_dotState_backup(g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(instance))) if (any(numerics_integrator == 1_pInt)) then - allocate(constitutive_previousDotState(g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(matID))) - allocate(constitutive_previousDotState2(g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(matID))) + allocate(constitutive_previousDotState(g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(instance))) + allocate(constitutive_previousDotState2(g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(instance))) endif if (any(numerics_integrator == 4_pInt)) then - allocate(constitutive_RK4dotState(g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(matID))) + allocate(constitutive_RK4dotState(g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(instance))) endif if (any(numerics_integrator == 5_pInt)) then do s = 1_pInt,6_pInt - allocate(constitutive_RKCK45dotState(s,g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(matID))) + allocate(constitutive_RKCK45dotState(s,g,i,e)%p(constitutive_phenopowerlaw_sizeDotState(instance))) enddo endif - constitutive_state0(g,i,e)%p = constitutive_phenopowerlaw_stateInit(matID) - constitutive_aTolState(g,i,e)%p = constitutive_phenopowerlaw_aTolState(matID) - constitutive_sizeState(g,i,e) = constitutive_phenopowerlaw_sizeState(matID) - constitutive_sizeDotState(g,i,e) = constitutive_phenopowerlaw_sizeDotState(matID) - constitutive_sizePostResults(g,i,e) = constitutive_phenopowerlaw_sizePostResults(matID) + constitutive_state0(g,i,e)%p = constitutive_phenopowerlaw_stateInit(instance) + constitutive_aTolState(g,i,e)%p = constitutive_phenopowerlaw_aTolState(instance) + constitutive_sizeState(g,i,e) = constitutive_phenopowerlaw_sizeState(instance) + constitutive_sizeDotState(g,i,e) = constitutive_phenopowerlaw_sizeDotState(instance) + constitutive_sizePostResults(g,i,e) = constitutive_phenopowerlaw_sizePostResults(instance) case (PLASTICITY_DISLOTWIN_ID) - allocate(constitutive_state0(g,i,e)%p(constitutive_dislotwin_sizeState(matID))) - allocate(constitutive_partionedState0(g,i,e)%p(constitutive_dislotwin_sizeState(matID))) - allocate(constitutive_subState0(g,i,e)%p(constitutive_dislotwin_sizeState(matID))) - allocate(constitutive_state(g,i,e)%p(constitutive_dislotwin_sizeState(matID))) - allocate(constitutive_state_backup(g,i,e)%p(constitutive_dislotwin_sizeState(matID))) - allocate(constitutive_aTolState(g,i,e)%p(constitutive_dislotwin_sizeState(matID))) - allocate(constitutive_dotState(g,i,e)%p(constitutive_dislotwin_sizeDotState(matID))) - allocate(constitutive_deltaState(g,i,e)%p(constitutive_dislotwin_sizeDotState(matID))) - allocate(constitutive_dotState_backup(g,i,e)%p(constitutive_dislotwin_sizeDotState(matID))) + allocate(constitutive_state0(g,i,e)%p(constitutive_dislotwin_sizeState(instance))) + allocate(constitutive_partionedState0(g,i,e)%p(constitutive_dislotwin_sizeState(instance))) + allocate(constitutive_subState0(g,i,e)%p(constitutive_dislotwin_sizeState(instance))) + allocate(constitutive_state(g,i,e)%p(constitutive_dislotwin_sizeState(instance))) + allocate(constitutive_state_backup(g,i,e)%p(constitutive_dislotwin_sizeState(instance))) + allocate(constitutive_aTolState(g,i,e)%p(constitutive_dislotwin_sizeState(instance))) + allocate(constitutive_dotState(g,i,e)%p(constitutive_dislotwin_sizeDotState(instance))) + allocate(constitutive_deltaState(g,i,e)%p(constitutive_dislotwin_sizeDotState(instance))) + allocate(constitutive_dotState_backup(g,i,e)%p(constitutive_dislotwin_sizeDotState(instance))) if (any(numerics_integrator == 1_pInt)) then - allocate(constitutive_previousDotState(g,i,e)%p(constitutive_dislotwin_sizeDotState(matID))) - allocate(constitutive_previousDotState2(g,i,e)%p(constitutive_dislotwin_sizeDotState(matID))) + allocate(constitutive_previousDotState(g,i,e)%p(constitutive_dislotwin_sizeDotState(instance))) + allocate(constitutive_previousDotState2(g,i,e)%p(constitutive_dislotwin_sizeDotState(instance))) endif if (any(numerics_integrator == 4_pInt)) then - allocate(constitutive_RK4dotState(g,i,e)%p(constitutive_dislotwin_sizeDotState(matID))) + allocate(constitutive_RK4dotState(g,i,e)%p(constitutive_dislotwin_sizeDotState(instance))) endif if (any(numerics_integrator == 5_pInt)) then do s = 1_pInt,6_pInt - allocate(constitutive_RKCK45dotState(s,g,i,e)%p(constitutive_dislotwin_sizeDotState(matID))) + allocate(constitutive_RKCK45dotState(s,g,i,e)%p(constitutive_dislotwin_sizeDotState(instance))) enddo endif - constitutive_state0(g,i,e)%p = constitutive_dislotwin_stateInit(matID) - constitutive_aTolState(g,i,e)%p = constitutive_dislotwin_aTolState(matID) - constitutive_sizeState(g,i,e) = constitutive_dislotwin_sizeState(matID) - constitutive_sizeDotState(g,i,e) = constitutive_dislotwin_sizeDotState(matID) - constitutive_sizePostResults(g,i,e) = constitutive_dislotwin_sizePostResults(matID) + constitutive_state0(g,i,e)%p = constitutive_dislotwin_stateInit(instance) + constitutive_aTolState(g,i,e)%p = constitutive_dislotwin_aTolState(instance) + constitutive_sizeState(g,i,e) = constitutive_dislotwin_sizeState(instance) + constitutive_sizeDotState(g,i,e) = constitutive_dislotwin_sizeDotState(instance) + constitutive_sizePostResults(g,i,e) = constitutive_dislotwin_sizePostResults(instance) case (PLASTICITY_TITANMOD_ID) - allocate(constitutive_state0(g,i,e)%p(constitutive_titanmod_sizeState(matID))) - allocate(constitutive_partionedState0(g,i,e)%p(constitutive_titanmod_sizeState(matID))) - allocate(constitutive_subState0(g,i,e)%p(constitutive_titanmod_sizeState(matID))) - allocate(constitutive_state(g,i,e)%p(constitutive_titanmod_sizeState(matID))) - allocate(constitutive_state_backup(g,i,e)%p(constitutive_titanmod_sizeState(matID))) - allocate(constitutive_aTolState(g,i,e)%p(constitutive_titanmod_sizeState(matID))) - allocate(constitutive_dotState(g,i,e)%p(constitutive_titanmod_sizeDotState(matID))) - allocate(constitutive_deltaState(g,i,e)%p(constitutive_titanmod_sizeDotState(matID))) - allocate(constitutive_dotState_backup(g,i,e)%p(constitutive_titanmod_sizeDotState(matID))) + allocate(constitutive_state0(g,i,e)%p(constitutive_titanmod_sizeState(instance))) + allocate(constitutive_partionedState0(g,i,e)%p(constitutive_titanmod_sizeState(instance))) + allocate(constitutive_subState0(g,i,e)%p(constitutive_titanmod_sizeState(instance))) + allocate(constitutive_state(g,i,e)%p(constitutive_titanmod_sizeState(instance))) + allocate(constitutive_state_backup(g,i,e)%p(constitutive_titanmod_sizeState(instance))) + allocate(constitutive_aTolState(g,i,e)%p(constitutive_titanmod_sizeState(instance))) + allocate(constitutive_dotState(g,i,e)%p(constitutive_titanmod_sizeDotState(instance))) + allocate(constitutive_deltaState(g,i,e)%p(constitutive_titanmod_sizeDotState(instance))) + allocate(constitutive_dotState_backup(g,i,e)%p(constitutive_titanmod_sizeDotState(instance))) if (any(numerics_integrator == 1_pInt)) then - allocate(constitutive_previousDotState(g,i,e)%p(constitutive_titanmod_sizeDotState(matID))) - allocate(constitutive_previousDotState2(g,i,e)%p(constitutive_titanmod_sizeDotState(matID))) + allocate(constitutive_previousDotState(g,i,e)%p(constitutive_titanmod_sizeDotState(instance))) + allocate(constitutive_previousDotState2(g,i,e)%p(constitutive_titanmod_sizeDotState(instance))) endif if (any(numerics_integrator == 4_pInt)) then - allocate(constitutive_RK4dotState(g,i,e)%p(constitutive_titanmod_sizeDotState(matID))) + allocate(constitutive_RK4dotState(g,i,e)%p(constitutive_titanmod_sizeDotState(instance))) endif if (any(numerics_integrator == 5_pInt)) then do s = 1_pInt,6_pInt - allocate(constitutive_RKCK45dotState(s,g,i,e)%p(constitutive_titanmod_sizeDotState(matID))) + allocate(constitutive_RKCK45dotState(s,g,i,e)%p(constitutive_titanmod_sizeDotState(instance))) enddo endif - constitutive_state0(g,i,e)%p = constitutive_titanmod_stateInit(matID) - constitutive_aTolState(g,i,e)%p = constitutive_titanmod_aTolState(matID) - constitutive_sizeState(g,i,e) = constitutive_titanmod_sizeState(matID) - constitutive_sizeDotState(g,i,e) = constitutive_titanmod_sizeDotState(matID) - constitutive_sizePostResults(g,i,e) = constitutive_titanmod_sizePostResults(matID) + constitutive_state0(g,i,e)%p = constitutive_titanmod_stateInit(instance) + constitutive_aTolState(g,i,e)%p = constitutive_titanmod_aTolState(instance) + constitutive_sizeState(g,i,e) = constitutive_titanmod_sizeState(instance) + constitutive_sizeDotState(g,i,e) = constitutive_titanmod_sizeDotState(instance) + constitutive_sizePostResults(g,i,e) = constitutive_titanmod_sizePostResults(instance) case (PLASTICITY_NONLOCAL_ID) nonlocalConstitutionPresent = .true. if(myNgrains/=1_pInt) call IO_error(252_pInt, e,i,g) - allocate(constitutive_state0(g,i,e)%p(constitutive_nonlocal_sizeState(matID))) - allocate(constitutive_partionedState0(g,i,e)%p(constitutive_nonlocal_sizeState(matID))) - allocate(constitutive_subState0(g,i,e)%p(constitutive_nonlocal_sizeState(matID))) - allocate(constitutive_state(g,i,e)%p(constitutive_nonlocal_sizeState(matID))) - allocate(constitutive_state_backup(g,i,e)%p(constitutive_nonlocal_sizeState(matID))) - allocate(constitutive_aTolState(g,i,e)%p(constitutive_nonlocal_sizeState(matID))) - allocate(constitutive_dotState(g,i,e)%p(constitutive_nonlocal_sizeDotState(matID))) - allocate(constitutive_deltaState(g,i,e)%p(constitutive_nonlocal_sizeDotState(matID))) - allocate(constitutive_dotState_backup(g,i,e)%p(constitutive_nonlocal_sizeDotState(matID))) + allocate(constitutive_state0(g,i,e)%p(constitutive_nonlocal_sizeState(instance))) + allocate(constitutive_partionedState0(g,i,e)%p(constitutive_nonlocal_sizeState(instance))) + allocate(constitutive_subState0(g,i,e)%p(constitutive_nonlocal_sizeState(instance))) + allocate(constitutive_state(g,i,e)%p(constitutive_nonlocal_sizeState(instance))) + allocate(constitutive_state_backup(g,i,e)%p(constitutive_nonlocal_sizeState(instance))) + allocate(constitutive_aTolState(g,i,e)%p(constitutive_nonlocal_sizeState(instance))) + allocate(constitutive_dotState(g,i,e)%p(constitutive_nonlocal_sizeDotState(instance))) + allocate(constitutive_deltaState(g,i,e)%p(constitutive_nonlocal_sizeDotState(instance))) + allocate(constitutive_dotState_backup(g,i,e)%p(constitutive_nonlocal_sizeDotState(instance))) if (any(numerics_integrator == 1_pInt)) then - allocate(constitutive_previousDotState(g,i,e)%p(constitutive_nonlocal_sizeDotState(matID))) - allocate(constitutive_previousDotState2(g,i,e)%p(constitutive_nonlocal_sizeDotState(matID))) + allocate(constitutive_previousDotState(g,i,e)%p(constitutive_nonlocal_sizeDotState(instance))) + allocate(constitutive_previousDotState2(g,i,e)%p(constitutive_nonlocal_sizeDotState(instance))) endif if (any(numerics_integrator == 4_pInt)) then - allocate(constitutive_RK4dotState(g,i,e)%p(constitutive_nonlocal_sizeDotState(matID))) + allocate(constitutive_RK4dotState(g,i,e)%p(constitutive_nonlocal_sizeDotState(instance))) endif if (any(numerics_integrator == 5_pInt)) then do s = 1_pInt,6_pInt - allocate(constitutive_RKCK45dotState(s,g,i,e)%p(constitutive_nonlocal_sizeDotState(matID))) + allocate(constitutive_RKCK45dotState(s,g,i,e)%p(constitutive_nonlocal_sizeDotState(instance))) enddo endif - constitutive_aTolState(g,i,e)%p = constitutive_nonlocal_aTolState(matID) - constitutive_sizeState(g,i,e) = constitutive_nonlocal_sizeState(matID) - constitutive_sizeDotState(g,i,e) = constitutive_nonlocal_sizeDotState(matID) - constitutive_sizePostResults(g,i,e) = constitutive_nonlocal_sizePostResults(matID) + constitutive_aTolState(g,i,e)%p = constitutive_nonlocal_aTolState(instance) + constitutive_sizeState(g,i,e) = constitutive_nonlocal_sizeState(instance) + constitutive_sizeDotState(g,i,e) = constitutive_nonlocal_sizeDotState(instance) + constitutive_sizePostResults(g,i,e) = constitutive_nonlocal_sizePostResults(instance) end select enddo enddo diff --git a/code/constitutive_dislotwin.f90 b/code/constitutive_dislotwin.f90 index e151580a3..f595f0ce2 100644 --- a/code/constitutive_dislotwin.f90 +++ b/code/constitutive_dislotwin.f90 @@ -234,7 +234,7 @@ subroutine constitutive_dislotwin_init(fileUnit) integer(pInt), dimension(1+2*MAXNCHUNKS) :: positions integer(pInt), dimension(7) :: configNchunks integer(pInt) :: section = 0_pInt, maxNinstance,mySize=0_pInt,structID,maxTotalNslip,maxTotalNtwin,& - f,i,j,k,l,m,n,o,p,q,r,s,ns,nt, & + f,instance,j,k,l,m,n,o,p,q,r,s,ns,nt, & Nchunks_SlipSlip, Nchunks_SlipTwin, Nchunks_TwinSlip, Nchunks_TwinTwin, & Nchunks_SlipFamilies, Nchunks_TwinFamilies, & index_myFamily, index_otherFamily @@ -350,53 +350,53 @@ subroutine constitutive_dislotwin_init(fileUnit) endif if (section > 0_pInt ) then ! do not short-circuit here (.and. with next if statemen). It's not safe in Fortran if (phase_plasticity(section) == PLASTICITY_DISLOTWIN_ID) then ! one of my sections - i = phase_plasticityInstance(section) ! which instance of my plasticity is present phase + instance = phase_plasticityInstance(section) ! which instance of my plasticity is present phase positions = IO_stringPos(line,MAXNCHUNKS) tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key select case(tag) case ('plasticity', 'elasticity') cycle case ('(output)') - constitutive_dislotwin_Noutput(i) = constitutive_dislotwin_Noutput(i) + 1_pInt - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(i),i) = & + constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt + constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) select case(IO_lc(IO_stringValue(line,positions,2_pInt))) case ('edge_density') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = edge_density_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = edge_density_ID case ('dipole_density') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = dipole_density_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = dipole_density_ID case ('shear_rate_slip') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = shear_rate_slip_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = shear_rate_slip_ID case ('accumulated_shear_slip') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = accumulated_shear_slip_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = accumulated_shear_slip_ID case ('mfp_slip') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = mfp_slip_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = mfp_slip_ID case ('resolved_stress_slip') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = resolved_stress_slip_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = resolved_stress_slip_ID case ('edge_dipole_distance') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = edge_dipole_distance_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = edge_dipole_distance_ID case ('stress_exponent') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = stress_exponent_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = stress_exponent_ID case ('twin_fraction') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = twin_fraction_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = twin_fraction_ID case ('shear_rate_twin') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = shear_rate_twin_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = shear_rate_twin_ID case ('accumulated_shear_twin') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = accumulated_shear_twin_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = accumulated_shear_twin_ID case ('mfp_twin') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = mfp_twin_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = mfp_twin_ID case ('resolved_stress_twin') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = resolved_stress_twin_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = resolved_stress_twin_ID case ('threshold_stress_twin') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = threshold_stress_twin_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = threshold_stress_twin_ID case ('resolved_stress_shearband') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = resolved_stress_shearband_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = resolved_stress_shearband_ID case ('shear_rate_shearband') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = shear_rate_shearband_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = shear_rate_shearband_ID case ('sb_eigenvalues') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = sb_eigenvalues_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = sb_eigenvalues_ID case ('sb_eigenvectors') - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(i),i) = sb_eigenvectors_ID + constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = sb_eigenvectors_ID case default call IO_error(105_pInt,ext_msg=IO_stringValue(line,positions,2_pInt)//' ('//PLASTICITY_DISLOTWIN_label//')') end select @@ -404,17 +404,17 @@ subroutine constitutive_dislotwin_init(fileUnit) structure = IO_lc(IO_stringValue(line,positions,2_pInt)) select case(structure(1:3)) case(LATTICE_iso_label) - constitutive_dislotwin_structureID(i) = LATTICE_iso_ID + constitutive_dislotwin_structureID(instance) = LATTICE_iso_ID case(LATTICE_fcc_label) - constitutive_dislotwin_structureID(i) = LATTICE_fcc_ID + constitutive_dislotwin_structureID(instance) = LATTICE_fcc_ID case(LATTICE_bcc_label) - constitutive_dislotwin_structureID(i) = LATTICE_bcc_ID + constitutive_dislotwin_structureID(instance) = LATTICE_bcc_ID case(LATTICE_hex_label) - constitutive_dislotwin_structureID(i) = LATTICE_hex_ID + constitutive_dislotwin_structureID(instance) = LATTICE_hex_ID case(LATTICE_ort_label) - constitutive_dislotwin_structureID(i) = LATTICE_ort_ID + constitutive_dislotwin_structureID(instance) = LATTICE_ort_ID end select - configNchunks = lattice_configNchunks(constitutive_dislotwin_structureID(i)) + configNchunks = lattice_configNchunks(constitutive_dislotwin_structureID(instance)) Nchunks_SlipFamilies = configNchunks(1) Nchunks_TwinFamilies = configNchunks(2) Nchunks_SlipSlip = configNchunks(3) @@ -422,143 +422,143 @@ subroutine constitutive_dislotwin_init(fileUnit) Nchunks_TwinSlip = configNchunks(5) Nchunks_TwinTwin = configNchunks(6) case ('covera_ratio') - constitutive_dislotwin_CoverA(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_CoverA(instance) = IO_floatValue(line,positions,2_pInt) case ('c11') - constitutive_dislotwin_Cslip_66(1,1,i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(1,1,instance) = IO_floatValue(line,positions,2_pInt) case ('c12') - constitutive_dislotwin_Cslip_66(1,2,i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(1,2,instance) = IO_floatValue(line,positions,2_pInt) case ('c13') - constitutive_dislotwin_Cslip_66(1,3,i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(1,3,instance) = IO_floatValue(line,positions,2_pInt) case ('c22') - constitutive_dislotwin_Cslip_66(2,2,i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(2,2,instance) = IO_floatValue(line,positions,2_pInt) case ('c23') - constitutive_dislotwin_Cslip_66(2,3,i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(2,3,instance) = IO_floatValue(line,positions,2_pInt) case ('c33') - constitutive_dislotwin_Cslip_66(3,3,i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(3,3,instance) = IO_floatValue(line,positions,2_pInt) case ('c44') - constitutive_dislotwin_Cslip_66(4,4,i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(4,4,instance) = IO_floatValue(line,positions,2_pInt) case ('c55') - constitutive_dislotwin_Cslip_66(5,5,i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(5,5,instance) = IO_floatValue(line,positions,2_pInt) case ('c66') - constitutive_dislotwin_Cslip_66(6,6,i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(6,6,instance) = IO_floatValue(line,positions,2_pInt) case ('nslip') if (positions(1) < 1_pInt + Nchunks_SlipFamilies) & call IO_warning(50_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') Nchunks_SlipFamilies = positions(1) - 1_pInt do j = 1_pInt, Nchunks_SlipFamilies - constitutive_dislotwin_Nslip(j,i) = IO_intValue(line,positions,1_pInt+j) + constitutive_dislotwin_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('ntwin') if (positions(1) < 1_pInt + Nchunks_TwinFamilies) & call IO_warning(51_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') Nchunks_TwinFamilies = positions(1) - 1_pInt do j = 1_pInt, Nchunks_TwinFamilies - constitutive_dislotwin_Ntwin(j,i) = IO_intValue(line,positions,1_pInt+j) + constitutive_dislotwin_Ntwin(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('rhoedge0') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_dislotwin_rhoEdge0(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_dislotwin_rhoEdge0(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('rhoedgedip0') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_dislotwin_rhoEdgeDip0(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_dislotwin_rhoEdgeDip0(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('slipburgers') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_dislotwin_burgersPerSlipFamily(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_dislotwin_burgersPerSlipFamily(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('twinburgers') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_dislotwin_burgersPerTwinFamily(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_dislotwin_burgersPerTwinFamily(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('qedge') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_dislotwin_QedgePerSlipFamily(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_dislotwin_QedgePerSlipFamily(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('v0') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_dislotwin_v0PerSlipFamily(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_dislotwin_v0PerSlipFamily(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('ndot0') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_dislotwin_Ndot0PerTwinFamily(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_dislotwin_Ndot0PerTwinFamily(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('twinsize') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_dislotwin_twinsizePerTwinFamily(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_dislotwin_twinsizePerTwinFamily(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('clambdaslip') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_dislotwin_CLambdaSlipPerSlipFamily(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_dislotwin_CLambdaSlipPerSlipFamily(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('grainsize') - constitutive_dislotwin_GrainSize(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_GrainSize(instance) = IO_floatValue(line,positions,2_pInt) case ('maxtwinfraction') - constitutive_dislotwin_MaxTwinFraction(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_MaxTwinFraction(instance) = IO_floatValue(line,positions,2_pInt) case ('pexponent') - constitutive_dislotwin_p(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_p(instance) = IO_floatValue(line,positions,2_pInt) case ('qexponent') - constitutive_dislotwin_q(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_q(instance) = IO_floatValue(line,positions,2_pInt) case ('rexponent') - constitutive_dislotwin_r(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_r(instance) = IO_floatValue(line,positions,2_pInt) case ('d0') - constitutive_dislotwin_D0(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_D0(instance) = IO_floatValue(line,positions,2_pInt) case ('qsd') - constitutive_dislotwin_Qsd(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Qsd(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_rho') - constitutive_dislotwin_aTolRho(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_aTolRho(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_twinfrac') - constitutive_dislotwin_aTolTwinFrac(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_aTolTwinFrac(instance) = IO_floatValue(line,positions,2_pInt) case ('cmfptwin') - constitutive_dislotwin_Cmfptwin(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cmfptwin(instance) = IO_floatValue(line,positions,2_pInt) case ('cthresholdtwin') - constitutive_dislotwin_Cthresholdtwin(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cthresholdtwin(instance) = IO_floatValue(line,positions,2_pInt) case ('solidsolutionstrength') - constitutive_dislotwin_SolidSolutionStrength(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_SolidSolutionStrength(instance) = IO_floatValue(line,positions,2_pInt) case ('l0') - constitutive_dislotwin_L0(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_L0(instance) = IO_floatValue(line,positions,2_pInt) case ('xc') - constitutive_dislotwin_xc(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_xc(instance) = IO_floatValue(line,positions,2_pInt) case ('vcrossslip') - constitutive_dislotwin_VcrossSlip(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_VcrossSlip(instance) = IO_floatValue(line,positions,2_pInt) case ('cedgedipmindistance') - constitutive_dislotwin_CEdgeDipMinDistance(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_CEdgeDipMinDistance(instance) = IO_floatValue(line,positions,2_pInt) case ('catomicvolume') - constitutive_dislotwin_CAtomicVolume(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_CAtomicVolume(instance) = IO_floatValue(line,positions,2_pInt) case ('interaction_slipslip','interactionslipslip') if (positions(1) < 1_pInt + Nchunks_SlipSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') do j = 1_pInt, Nchunks_SlipSlip - constitutive_dislotwin_interaction_SlipSlip(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_dislotwin_interaction_SlipSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_sliptwin','interactionsliptwin') if (positions(1) < 1_pInt + Nchunks_SlipTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') do j = 1_pInt, Nchunks_SlipTwin - constitutive_dislotwin_interaction_SlipTwin(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_dislotwin_interaction_SlipTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twinslip','interactiontwinslip') if (positions(1) < 1_pInt + Nchunks_TwinSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') do j = 1_pInt, Nchunks_TwinSlip - constitutive_dislotwin_interaction_TwinSlip(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_dislotwin_interaction_TwinSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twintwin','interactiontwintwin') if (positions(1) < 1_pInt + Nchunks_TwinTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') do j = 1_pInt, Nchunks_TwinTwin - constitutive_dislotwin_interaction_TwinTwin(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_dislotwin_interaction_TwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('sfe_0k') - constitutive_dislotwin_SFE_0K(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_SFE_0K(instance) = IO_floatValue(line,positions,2_pInt) case ('dsfe_dt') - constitutive_dislotwin_dSFE_dT(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_dSFE_dT(instance) = IO_floatValue(line,positions,2_pInt) case ('shearbandresistance') - constitutive_dislotwin_sbResistance(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_sbResistance(instance) = IO_floatValue(line,positions,2_pInt) case ('shearbandvelocity') - constitutive_dislotwin_sbVelocity(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_sbVelocity(instance) = IO_floatValue(line,positions,2_pInt) case ('qedgepersbsystem') - constitutive_dislotwin_sbQedge(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_sbQedge(instance) = IO_floatValue(line,positions,2_pInt) case default call IO_error(210_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') end select @@ -566,59 +566,59 @@ subroutine constitutive_dislotwin_init(fileUnit) endif enddo - sanityChecks: do i = 1_pInt,maxNinstance - constitutive_dislotwin_structure(i) = & - lattice_initializeStructure(constitutive_dislotwin_structureID(i),constitutive_dislotwin_CoverA(i)) - structID = constitutive_dislotwin_structure(i) + sanityChecks: do instance = 1_pInt,maxNinstance + constitutive_dislotwin_structure(instance) = & + lattice_initializeStructure(constitutive_dislotwin_structureID(instance),constitutive_dislotwin_CoverA(instance)) + structID = constitutive_dislotwin_structure(instance) - if (structID < 1_pInt) call IO_error(205_pInt,el=i) - if (sum(constitutive_dislotwin_Nslip(:,i)) < 0_pInt) call IO_error(211_pInt,el=i,ext_msg='Nslip (' & - //PLASTICITY_DISLOTWIN_label//')') - if (sum(constitutive_dislotwin_Ntwin(:,i)) < 0_pInt) call IO_error(211_pInt,el=i,ext_msg='Ntwin (' & - //PLASTICITY_DISLOTWIN_label//')') + if (structID < 1_pInt) & + call IO_error(205_pInt,el=instance) + if (sum(constitutive_dislotwin_Nslip(:,instance)) < 0_pInt) & + call IO_error(211_pInt,el=instance,ext_msg='Nslip ('//PLASTICITY_DISLOTWIN_label//')') + if (sum(constitutive_dislotwin_Ntwin(:,instance)) < 0_pInt) & + call IO_error(211_pInt,el=instance,ext_msg='Ntwin ('//PLASTICITY_DISLOTWIN_label//')') do f = 1_pInt,lattice_maxNslipFamily - if (constitutive_dislotwin_Nslip(f,i) > 0_pInt) then - if (constitutive_dislotwin_rhoEdge0(f,i) < 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='rhoEdge0 (' & - //PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_rhoEdgeDip0(f,i) < 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='rhoEdgeDip0 (' & - //PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_burgersPerSlipFamily(f,i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='slipBurgers (' & - //PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_v0PerSlipFamily(f,i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='v0 (' & - //PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_Nslip(f,instance) > 0_pInt) then + if (constitutive_dislotwin_rhoEdge0(f,instance) < 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='rhoEdge0 ('//PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_rhoEdgeDip0(f,instance) < 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='rhoEdgeDip0 ('//PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_burgersPerSlipFamily(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='slipBurgers ('//PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_v0PerSlipFamily(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='v0 ('//PLASTICITY_DISLOTWIN_label//')') endif enddo do f = 1_pInt,lattice_maxNtwinFamily - if (constitutive_dislotwin_Ntwin(f,i) > 0_pInt) then - if (constitutive_dislotwin_burgersPerTwinFamily(f,i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='twinburgers (' & - //PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_Ndot0PerTwinFamily(f,i) < 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='ndot0 (' & - //PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_Ntwin(f,instance) > 0_pInt) then + if (constitutive_dislotwin_burgersPerTwinFamily(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='twinburgers ('//PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_Ndot0PerTwinFamily(f,instance) < 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='ndot0 ('//PLASTICITY_DISLOTWIN_label//')') endif enddo - if (constitutive_dislotwin_CAtomicVolume(i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='cAtomicVolume (' & - //PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_D0(i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='D0 (' & - //PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_Qsd(i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='Qsd (' & - //PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_SFE_0K(i) == 0.0_pReal .and. & - constitutive_dislotwin_dSFE_dT(i) == 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='SFE (' & - //PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_aTolRho(i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='aTolRho (' & - //PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_aTolTwinFrac(i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='aTolTwinFrac (' & - //PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_sbResistance(i) < 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='sbResistance (' & - //PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_sbVelocity(i) < 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='sbVelocity (' & - //PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_CAtomicVolume(instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='cAtomicVolume ('//PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_D0(instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='D0 ('//PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_Qsd(instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='Qsd ('//PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_SFE_0K(instance) == 0.0_pReal .and. constitutive_dislotwin_dSFE_dT(instance) == 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='SFE ('//PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_aTolRho(instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='aTolRho ('//PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_aTolTwinFrac(instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='aTolTwinFrac ('//PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_sbResistance(instance) < 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='sbResistance ('//PLASTICITY_DISLOTWIN_label//')') + if (constitutive_dislotwin_sbVelocity(instance) < 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='sbVelocity ('//PLASTICITY_DISLOTWIN_label//')') !* Determine total number of active slip or twin systems - constitutive_dislotwin_Nslip(:,i) = min(lattice_NslipSystem(:,structID),constitutive_dislotwin_Nslip(:,i)) - constitutive_dislotwin_Ntwin(:,i) = min(lattice_NtwinSystem(:,structID),constitutive_dislotwin_Ntwin(:,i)) - constitutive_dislotwin_totalNslip(i) = sum(constitutive_dislotwin_Nslip(:,i)) - constitutive_dislotwin_totalNtwin(i) = sum(constitutive_dislotwin_Ntwin(:,i)) + constitutive_dislotwin_Nslip(:,instance) = min(lattice_NslipSystem(:,structID),constitutive_dislotwin_Nslip(:,instance)) + constitutive_dislotwin_Ntwin(:,instance) = min(lattice_NtwinSystem(:,structID),constitutive_dislotwin_Ntwin(:,instance)) + constitutive_dislotwin_totalNslip(instance) = sum(constitutive_dislotwin_Nslip(:,instance)) + constitutive_dislotwin_totalNtwin(instance) = sum(constitutive_dislotwin_Ntwin(:,instance)) enddo sanityChecks !-------------------------------------------------------------------------------------------------- @@ -649,22 +649,22 @@ subroutine constitutive_dislotwin_init(fileUnit) allocate(constitutive_dislotwin_Ctwin_66(6,6,maxTotalNtwin,maxNinstance), source=0.0_pReal) allocate(constitutive_dislotwin_Ctwin_3333(3,3,3,3,maxTotalNtwin,maxNinstance), source=0.0_pReal) - instancesLoop: do i = 1_pInt,maxNinstance - structID = constitutive_dislotwin_structure(i) + instancesLoop: do instance = 1_pInt,maxNinstance + structID = constitutive_dislotwin_structure(instance) - ns = constitutive_dislotwin_totalNslip(i) - nt = constitutive_dislotwin_totalNtwin(i) + ns = constitutive_dislotwin_totalNslip(instance) + nt = constitutive_dislotwin_totalNtwin(instance) !* Determine size of state array - constitutive_dislotwin_sizeDotState(i) = int(size(CONSTITUTIVE_DISLOTWIN_listBasicSlipStates),pInt) * ns & + constitutive_dislotwin_sizeDotState(instance) = int(size(CONSTITUTIVE_DISLOTWIN_listBasicSlipStates),pInt) * ns & + int(size(CONSTITUTIVE_DISLOTWIN_listBasicTwinStates),pInt) * nt - constitutive_dislotwin_sizeState(i) = constitutive_dislotwin_sizeDotState(i) & + constitutive_dislotwin_sizeState(instance) = constitutive_dislotwin_sizeDotState(instance) & + int(size(CONSTITUTIVE_DISLOTWIN_listDependentSlipStates),pInt) * ns & + int(size(CONSTITUTIVE_DISLOTWIN_listDependentTwinStates),pInt) * nt !* Determine size of postResults array - outputsLoop: do o = 1_pInt,constitutive_dislotwin_Noutput(i) - select case(constitutive_dislotwin_outputID(o,i)) + outputsLoop: do o = 1_pInt,constitutive_dislotwin_Noutput(instance) + select case(constitutive_dislotwin_outputID(o,instance)) case(edge_density_ID, & dipole_density_ID, & shear_rate_slip_ID, & @@ -695,68 +695,77 @@ subroutine constitutive_dislotwin_init(fileUnit) end select if (mySize > 0_pInt) then ! any meaningful output found - constitutive_dislotwin_sizePostResult(o,i) = mySize - constitutive_dislotwin_sizePostResults(i) = constitutive_dislotwin_sizePostResults(i) + mySize + constitutive_dislotwin_sizePostResult(o,instance) = mySize + constitutive_dislotwin_sizePostResults(instance) = constitutive_dislotwin_sizePostResults(instance) + mySize endif enddo outputsLoop !* Elasticity matrix and shear modulus according to material.config - constitutive_dislotwin_Cslip_66(1:6,1:6,i) = lattice_symmetrizeC66(constitutive_dislotwin_structureID(i),& - constitutive_dislotwin_Cslip_66(:,:,i)) - constitutive_dislotwin_Gmod(i) = & - 0.2_pReal*(constitutive_dislotwin_Cslip_66(1,1,i)-constitutive_dislotwin_Cslip_66(1,2,i)) & - +0.6_pReal*constitutive_dislotwin_Cslip_66(4,4,i) ! (C11iso-C12iso)/2 with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5 - constitutive_dislotwin_nu(i) = ( constitutive_dislotwin_Cslip_66(1,1,i) + 4.0_pReal*constitutive_dislotwin_Cslip_66(1,2,i) & - - 2.0_pReal*constitutive_dislotwin_Cslip_66(1,2,i) ) & - / ( 4.0_pReal*constitutive_dislotwin_Cslip_66(1,1,i) + 6.0_pReal*constitutive_dislotwin_Cslip_66(1,2,i) & - + 2.0_pReal*constitutive_dislotwin_Cslip_66(4,4,i) ) - constitutive_dislotwin_Cslip_66(1:6,1:6,i) = & - math_Mandel3333to66(math_Voigt66to3333(constitutive_dislotwin_Cslip_66(1:6,1:6,i))) - constitutive_dislotwin_Cslip_3333(1:3,1:3,1:3,1:3,i) = & - math_Voigt66to3333(constitutive_dislotwin_Cslip_66(1:6,1:6,i)) + constitutive_dislotwin_Cslip_66(1:6,1:6,instance) = lattice_symmetrizeC66(constitutive_dislotwin_structureID(instance),& + constitutive_dislotwin_Cslip_66(:,:,instance)) + constitutive_dislotwin_Gmod(instance) = & + 0.2_pReal*(constitutive_dislotwin_Cslip_66(1,1,instance)-constitutive_dislotwin_Cslip_66(1,2,instance)) & + +0.6_pReal*constitutive_dislotwin_Cslip_66(4,4,instance) ! (C11iso-C12iso)/2 with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5 + constitutive_dislotwin_nu(instance) = ( constitutive_dislotwin_Cslip_66(1,1,instance) & + + 4.0_pReal*constitutive_dislotwin_Cslip_66(1,2,instance) & + - 2.0_pReal*constitutive_dislotwin_Cslip_66(1,2,instance) ) & + / ( 4.0_pReal*constitutive_dislotwin_Cslip_66(1,1,instance) & + +6.0_pReal*constitutive_dislotwin_Cslip_66(1,2,instance) & + + 2.0_pReal*constitutive_dislotwin_Cslip_66(4,4,instance) ) + constitutive_dislotwin_Cslip_66(1:6,1:6,instance) = & + math_Mandel3333to66(math_Voigt66to3333(constitutive_dislotwin_Cslip_66(1:6,1:6,instance))) + constitutive_dislotwin_Cslip_3333(1:3,1:3,1:3,1:3,instance) = & + math_Voigt66to3333(constitutive_dislotwin_Cslip_66(1:6,1:6,instance)) !* Process slip related parameters ------------------------------------------------ slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily - index_myFamily = sum(constitutive_dislotwin_Nslip(1:f-1_pInt,i)) ! index in truncated slip system list - slipSystemsLoop: do j = 1_pInt,constitutive_dislotwin_Nslip(f,i) + index_myFamily = sum(constitutive_dislotwin_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list + slipSystemsLoop: do j = 1_pInt,constitutive_dislotwin_Nslip(f,instance) !* Burgers vector, ! dislocation velocity prefactor, ! mean free path prefactor, ! and minimum dipole distance - constitutive_dislotwin_burgersPerSlipSystem(index_myFamily+j,i) = constitutive_dislotwin_burgersPerSlipFamily(f,i) - constitutive_dislotwin_QedgePerSlipSystem(index_myFamily+j,i) = constitutive_dislotwin_QedgePerSlipFamily(f,i) - constitutive_dislotwin_v0PerSlipSystem(index_myFamily+j,i) = constitutive_dislotwin_v0PerSlipFamily(f,i) - constitutive_dislotwin_CLambdaSlipPerSlipSystem(index_myFamily+j,i) = constitutive_dislotwin_CLambdaSlipPerSlipFamily(f,i) + constitutive_dislotwin_burgersPerSlipSystem(index_myFamily+j,instance) = & + constitutive_dislotwin_burgersPerSlipFamily(f,instance) + + constitutive_dislotwin_QedgePerSlipSystem(index_myFamily+j,instance) = & + constitutive_dislotwin_QedgePerSlipFamily(f,instance) + + constitutive_dislotwin_v0PerSlipSystem(index_myFamily+j,instance) = & + constitutive_dislotwin_v0PerSlipFamily(f,instance) + + constitutive_dislotwin_CLambdaSlipPerSlipSystem(index_myFamily+j,instance) = & + constitutive_dislotwin_CLambdaSlipPerSlipFamily(f,instance) !* Calculation of forest projections for edge dislocations !* Interaction matrices do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(constitutive_dislotwin_Nslip(1:o-1_pInt,i)) - do k = 1_pInt,constitutive_dislotwin_Nslip(o,i) ! loop over (active) systems in other family (slip) - constitutive_dislotwin_forestProjectionEdge(index_myFamily+j,index_otherFamily+k,i) = & + index_otherFamily = sum(constitutive_dislotwin_Nslip(1:o-1_pInt,instance)) + do k = 1_pInt,constitutive_dislotwin_Nslip(o,instance) ! loop over (active) systems in other family (slip) + constitutive_dislotwin_forestProjectionEdge(index_myFamily+j,index_otherFamily+k,instance) = & abs(math_mul3x3(lattice_sn(:,sum(lattice_NslipSystem(1:f-1,structID))+j,structID), & lattice_st(:,sum(lattice_NslipSystem(1:o-1,structID))+k,structID))) - constitutive_dislotwin_interactionMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,i) = & + constitutive_dislotwin_interactionMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,instance) = & constitutive_dislotwin_interaction_SlipSlip(lattice_interactionSlipSlip( & sum(lattice_NslipSystem(1:f-1,structID))+j, & sum(lattice_NslipSystem(1:o-1,structID))+k, & - structID), i ) + structID), instance ) enddo; enddo do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(constitutive_dislotwin_Ntwin(1:o-1_pInt,i)) - do k = 1_pInt,constitutive_dislotwin_Ntwin(o,i) ! loop over (active) systems in other family (twin) - constitutive_dislotwin_interactionMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,i) = & + index_otherFamily = sum(constitutive_dislotwin_Ntwin(1:o-1_pInt,instance)) + do k = 1_pInt,constitutive_dislotwin_Ntwin(o,instance) ! loop over (active) systems in other family (twin) + constitutive_dislotwin_interactionMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,instance) = & constitutive_dislotwin_interaction_SlipTwin(lattice_interactionSlipTwin( & sum(lattice_NslipSystem(1:f-1_pInt,structID))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,structID))+k, & - structID), i ) + structID), instance ) enddo; enddo enddo slipSystemsLoop @@ -765,54 +774,59 @@ subroutine constitutive_dislotwin_init(fileUnit) !* Process twin related parameters ------------------------------------------------ twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily - index_myFamily = sum(constitutive_dislotwin_Ntwin(1:f-1_pInt,i)) ! index in truncated twin system list - twinSystemsLoop: do j = 1_pInt,constitutive_dislotwin_Ntwin(f,i) + index_myFamily = sum(constitutive_dislotwin_Ntwin(1:f-1_pInt,instance)) ! index in truncated twin system list + twinSystemsLoop: do j = 1_pInt,constitutive_dislotwin_Ntwin(f,instance) !* Burgers vector, ! nucleation rate prefactor, ! and twin size - constitutive_dislotwin_burgersPerTwinSystem(index_myFamily+j,i) = constitutive_dislotwin_burgersPerTwinFamily(f,i) - constitutive_dislotwin_Ndot0PerTwinSystem(index_myFamily+j,i) = constitutive_dislotwin_Ndot0PerTwinFamily(f,i) - constitutive_dislotwin_twinsizePerTwinSystem(index_myFamily+j,i) = constitutive_dislotwin_twinsizePerTwinFamily(f,i) + constitutive_dislotwin_burgersPerTwinSystem(index_myFamily+j,instance) = & + constitutive_dislotwin_burgersPerTwinFamily(f,instance) + + constitutive_dislotwin_Ndot0PerTwinSystem(index_myFamily+j,instance) = & + constitutive_dislotwin_Ndot0PerTwinFamily(f,instance) + + constitutive_dislotwin_twinsizePerTwinSystem(index_myFamily+j,instance) = & + constitutive_dislotwin_twinsizePerTwinFamily(f,instance) !* Rotate twin elasticity matrices index_otherFamily = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) ! index in full lattice twin list do l = 1_pInt,3_pInt ; do m = 1_pInt,3_pInt ; do n = 1_pInt,3_pInt ; do o = 1_pInt,3_pInt do p = 1_pInt,3_pInt ; do q = 1_pInt,3_pInt ; do r = 1_pInt,3_pInt ; do s = 1_pInt,3_pInt - constitutive_dislotwin_Ctwin_3333(l,m,n,o,index_myFamily+j,i) = & - constitutive_dislotwin_Ctwin_3333(l,m,n,o,index_myFamily+j,i) + & - constitutive_dislotwin_Cslip_3333(p,q,r,s,i) * & + constitutive_dislotwin_Ctwin_3333(l,m,n,o,index_myFamily+j,instance) = & + constitutive_dislotwin_Ctwin_3333(l,m,n,o,index_myFamily+j,instance) + & + constitutive_dislotwin_Cslip_3333(p,q,r,s,instance) * & lattice_Qtwin(l,p,index_otherFamily+j,structID) * & lattice_Qtwin(m,q,index_otherFamily+j,structID) * & lattice_Qtwin(n,r,index_otherFamily+j,structID) * & lattice_Qtwin(o,s,index_otherFamily+j,structID) enddo ; enddo ; enddo ; enddo enddo ; enddo ; enddo ; enddo - constitutive_dislotwin_Ctwin_66(1:6,1:6,index_myFamily+j,i) = & - math_Mandel3333to66(constitutive_dislotwin_Ctwin_3333(1:3,1:3,1:3,1:3,index_myFamily+j,i)) + constitutive_dislotwin_Ctwin_66(1:6,1:6,index_myFamily+j,instance) = & + math_Mandel3333to66(constitutive_dislotwin_Ctwin_3333(1:3,1:3,1:3,1:3,index_myFamily+j,instance)) !* Interaction matrices do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(constitutive_dislotwin_Nslip(1:o-1_pInt,i)) - do k = 1_pInt,constitutive_dislotwin_Nslip(o,i) ! loop over (active) systems in other family (slip) - constitutive_dislotwin_interactionMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,i) = & + index_otherFamily = sum(constitutive_dislotwin_Nslip(1:o-1_pInt,instance)) + do k = 1_pInt,constitutive_dislotwin_Nslip(o,instance) ! loop over (active) systems in other family (slip) + constitutive_dislotwin_interactionMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,instance) = & constitutive_dislotwin_interaction_TwinSlip(lattice_interactionTwinSlip( & sum(lattice_NtwinSystem(1:f-1_pInt,structID))+j, & sum(lattice_NslipSystem(1:o-1_pInt,structID))+k, & - structID), i ) + structID), instance ) enddo; enddo do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(constitutive_dislotwin_Ntwin(1:o-1_pInt,i)) - do k = 1_pInt,constitutive_dislotwin_Ntwin(o,i) ! loop over (active) systems in other family (twin) - constitutive_dislotwin_interactionMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,i) = & + index_otherFamily = sum(constitutive_dislotwin_Ntwin(1:o-1_pInt,instance)) + do k = 1_pInt,constitutive_dislotwin_Ntwin(o,instance) ! loop over (active) systems in other family (twin) + constitutive_dislotwin_interactionMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,instance) = & constitutive_dislotwin_interaction_TwinTwin(lattice_interactionTwinTwin( & sum(lattice_NtwinSystem(1:f-1_pInt,structID))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,structID))+k, & - structID), i ) + structID), instance ) enddo; enddo enddo twinSystemsLoop @@ -826,42 +840,42 @@ end subroutine constitutive_dislotwin_init !-------------------------------------------------------------------------------------------------- !> @brief sets the initial microstructural state for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -function constitutive_dislotwin_stateInit(matID) +function constitutive_dislotwin_stateInit(instance) use math, only: & pi use lattice, only: & lattice_maxNslipFamily implicit none - integer(pInt), intent(in) :: matID !< number specifying the instance of the plasticity + integer(pInt), intent(in) :: instance !< number specifying the instance of the plasticity - real(pReal), dimension(constitutive_dislotwin_sizeState(matID)) :: & + real(pReal), dimension(constitutive_dislotwin_sizeState(instance)) :: & constitutive_dislotwin_stateInit integer(pInt) :: i,j,f,ns,nt, index_myFamily - real(pReal), dimension(constitutive_dislotwin_totalNslip(matID)) :: & + real(pReal), dimension(constitutive_dislotwin_totalNslip(instance)) :: & rhoEdge0, & rhoEdgeDip0, & invLambdaSlip0, & MeanFreePathSlip0, & tauSlipThreshold0 - real(pReal), dimension(constitutive_dislotwin_totalNtwin(matID)) :: & + real(pReal), dimension(constitutive_dislotwin_totalNtwin(instance)) :: & MeanFreePathTwin0,TwinVolume0 - ns = constitutive_dislotwin_totalNslip(matID) - nt = constitutive_dislotwin_totalNtwin(matID) + ns = constitutive_dislotwin_totalNslip(instance) + nt = constitutive_dislotwin_totalNtwin(instance) constitutive_dislotwin_stateInit = 0.0_pReal !-------------------------------------------------------------------------------------------------- ! initialize basic slip state variables do f = 1_pInt,lattice_maxNslipFamily - index_myFamily = sum(constitutive_dislotwin_Nslip(1:f-1_pInt,matID)) ! index in truncated slip system list + index_myFamily = sum(constitutive_dislotwin_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list rhoEdge0(index_myFamily+1_pInt: & - index_myFamily+constitutive_dislotwin_Nslip(f,matID)) = & - constitutive_dislotwin_rhoEdge0(f,matID) + index_myFamily+constitutive_dislotwin_Nslip(f,instance)) = & + constitutive_dislotwin_rhoEdge0(f,instance) rhoEdgeDip0(index_myFamily+1_pInt: & - index_myFamily+constitutive_dislotwin_Nslip(f,matID)) = & - constitutive_dislotwin_rhoEdgeDip0(f,matID) + index_myFamily+constitutive_dislotwin_Nslip(f,instance)) = & + constitutive_dislotwin_rhoEdgeDip0(f,instance) enddo constitutive_dislotwin_stateInit(1_pInt:ns) = rhoEdge0 @@ -870,30 +884,30 @@ function constitutive_dislotwin_stateInit(matID) !-------------------------------------------------------------------------------------------------- ! initialize dependent slip microstructural variables forall (i = 1_pInt:ns) & - invLambdaSlip0(i) = sqrt(dot_product((rhoEdge0+rhoEdgeDip0),constitutive_dislotwin_forestProjectionEdge(1:ns,i,matID)))/ & - constitutive_dislotwin_CLambdaSlipPerSlipSystem(i,matID) + invLambdaSlip0(i) = sqrt(dot_product((rhoEdge0+rhoEdgeDip0),constitutive_dislotwin_forestProjectionEdge(1:ns,i,instance)))/ & + constitutive_dislotwin_CLambdaSlipPerSlipSystem(i,instance) constitutive_dislotwin_stateInit(3_pInt*ns+2_pInt*nt+1:4_pInt*ns+2_pInt*nt) = invLambdaSlip0 forall (i = 1_pInt:ns) & MeanFreePathSlip0(i) = & - constitutive_dislotwin_GrainSize(matID)/(1.0_pReal+invLambdaSlip0(i)*constitutive_dislotwin_GrainSize(matID)) + constitutive_dislotwin_GrainSize(instance)/(1.0_pReal+invLambdaSlip0(i)*constitutive_dislotwin_GrainSize(instance)) constitutive_dislotwin_stateInit(5_pInt*ns+3_pInt*nt+1:6_pInt*ns+3_pInt*nt) = MeanFreePathSlip0 forall (i = 1_pInt:ns) & - tauSlipThreshold0(i) = constitutive_dislotwin_SolidSolutionStrength(matID) + & - constitutive_dislotwin_Gmod(matID)*constitutive_dislotwin_burgersPerSlipSystem(i,matID) * & - sqrt(dot_product((rhoEdge0+rhoEdgeDip0),constitutive_dislotwin_interactionMatrix_SlipSlip(i,1:ns,matID))) + tauSlipThreshold0(i) = constitutive_dislotwin_SolidSolutionStrength(instance) + & + constitutive_dislotwin_Gmod(instance)*constitutive_dislotwin_burgersPerSlipSystem(i,instance) * & + sqrt(dot_product((rhoEdge0+rhoEdgeDip0),constitutive_dislotwin_interactionMatrix_SlipSlip(i,1:ns,instance))) constitutive_dislotwin_stateInit(6_pInt*ns+4_pInt*nt+1:7_pInt*ns+4_pInt*nt) = tauSlipThreshold0 !-------------------------------------------------------------------------------------------------- ! initialize dependent twin microstructural variables forall (j = 1_pInt:nt) & - MeanFreePathTwin0(j) = constitutive_dislotwin_GrainSize(matID) + MeanFreePathTwin0(j) = constitutive_dislotwin_GrainSize(instance) constitutive_dislotwin_stateInit(6_pInt*ns+3_pInt*nt+1_pInt:6_pInt*ns+4_pInt*nt) = MeanFreePathTwin0 forall (j = 1_pInt:nt) & TwinVolume0(j) = & - (pi/4.0_pReal)*constitutive_dislotwin_twinsizePerTwinSystem(j,matID)*MeanFreePathTwin0(j)**(2.0_pReal) + (pi/4.0_pReal)*constitutive_dislotwin_twinsizePerTwinSystem(j,instance)*MeanFreePathTwin0(j)**(2.0_pReal) constitutive_dislotwin_stateInit(7_pInt*ns+5_pInt*nt+1_pInt:7_pInt*ns+6_pInt*nt) = TwinVolume0 end function constitutive_dislotwin_stateInit @@ -902,34 +916,34 @@ end function constitutive_dislotwin_stateInit !-------------------------------------------------------------------------------------------------- !> @brief sets the relevant state values for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -pure function constitutive_dislotwin_aTolState(matID) +pure function constitutive_dislotwin_aTolState(instance) implicit none integer(pInt), intent(in) :: & - matID ! number specifying the current instance of the plasticity - real(pReal), dimension(constitutive_dislotwin_sizeState(matID)) :: & + instance ! number specifying the current instance of the plasticity + real(pReal), dimension(constitutive_dislotwin_sizeState(instance)) :: & constitutive_dislotwin_aTolState ! relevant state values for the current instance of this plasticity ! Tolerance state for dislocation densities - constitutive_dislotwin_aTolState(1_pInt:2_pInt*constitutive_dislotwin_totalNslip(matID)) = & - constitutive_dislotwin_aTolRho(matID) + constitutive_dislotwin_aTolState(1_pInt:2_pInt*constitutive_dislotwin_totalNslip(instance)) = & + constitutive_dislotwin_aTolRho(instance) ! Tolerance state for accumulated shear due to slip - constitutive_dislotwin_aTolState(2_pInt*constitutive_dislotwin_totalNslip(matID)+1_pInt: & - 3_pInt*constitutive_dislotwin_totalNslip(matID))=1e6_pReal + constitutive_dislotwin_aTolState(2_pInt*constitutive_dislotwin_totalNslip(instance)+1_pInt: & + 3_pInt*constitutive_dislotwin_totalNslip(instance))=1e6_pReal ! Tolerance state for twin volume fraction - constitutive_dislotwin_aTolState(3_pInt*constitutive_dislotwin_totalNslip(matID)+1_pInt: & - 3_pInt*constitutive_dislotwin_totalNslip(matID)+& - constitutive_dislotwin_totalNtwin(matID)) = & - constitutive_dislotwin_aTolTwinFrac(matID) + constitutive_dislotwin_aTolState(3_pInt*constitutive_dislotwin_totalNslip(instance)+1_pInt: & + 3_pInt*constitutive_dislotwin_totalNslip(instance)+& + constitutive_dislotwin_totalNtwin(instance)) = & + constitutive_dislotwin_aTolTwinFrac(instance) ! Tolerance state for accumulated shear due to twin - constitutive_dislotwin_aTolState(3_pInt*constitutive_dislotwin_totalNslip(matID)+ & - constitutive_dislotwin_totalNtwin(matID)+1_pInt: & - 3_pInt*constitutive_dislotwin_totalNslip(matID)+ & - 2_pInt*constitutive_dislotwin_totalNtwin(matID)) = 1e6_pReal + constitutive_dislotwin_aTolState(3_pInt*constitutive_dislotwin_totalNslip(instance)+ & + constitutive_dislotwin_totalNtwin(instance)+1_pInt: & + 3_pInt*constitutive_dislotwin_totalNslip(instance)+ & + 2_pInt*constitutive_dislotwin_totalNtwin(instance)) = 1e6_pReal end function constitutive_dislotwin_aTolState @@ -957,22 +971,22 @@ pure function constitutive_dislotwin_homogenizedC(state,ipc,ip,el) type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: & state !< microstructure state - integer(pInt) :: matID,ns,nt,i + integer(pInt) :: instance,ns,nt,i real(pReal) :: sumf !* Shortened notation - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) - ns = constitutive_dislotwin_totalNslip(matID) - nt = constitutive_dislotwin_totalNtwin(matID) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + ns = constitutive_dislotwin_totalNslip(instance) + nt = constitutive_dislotwin_totalNtwin(instance) !* Total twin volume fraction sumf = sum(state(ipc,ip,el)%p((3_pInt*ns+1_pInt):(3_pInt*ns+nt))) ! safe for nt == 0 !* Homogenized elasticity matrix - constitutive_dislotwin_homogenizedC = (1.0_pReal-sumf)*constitutive_dislotwin_Cslip_66(1:6,1:6,matID) + constitutive_dislotwin_homogenizedC = (1.0_pReal-sumf)*constitutive_dislotwin_Cslip_66(1:6,1:6,instance) do i=1_pInt,nt constitutive_dislotwin_homogenizedC = & - constitutive_dislotwin_homogenizedC + state(ipc,ip,el)%p(3_pInt*ns+i)*constitutive_dislotwin_Ctwin_66(1:6,1:6,i,matID) + constitutive_dislotwin_homogenizedC + state(ipc,ip,el)%p(3_pInt*ns+i)*constitutive_dislotwin_Ctwin_66(1:6,1:6,i,instance) enddo end function constitutive_dislotwin_homogenizedC @@ -1004,17 +1018,17 @@ subroutine constitutive_dislotwin_microstructure(temperature,state,ipc,ip,el) state !< microstructure state integer(pInt) :: & - matID,structID,& + instance,structID,& ns,nt,s,t real(pReal) :: & sumf,sfe,x0 real(pReal), dimension(constitutive_dislotwin_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: fOverStacksize !* Shortened notation - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) - structID = constitutive_dislotwin_structure(matID) - ns = constitutive_dislotwin_totalNslip(matID) - nt = constitutive_dislotwin_totalNtwin(matID) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + structID = constitutive_dislotwin_structure(instance) + ns = constitutive_dislotwin_totalNslip(instance) + nt = constitutive_dislotwin_totalNtwin(instance) !* State: 1 : ns rho_edge !* State: ns+1 : 2*ns rho_dipole !* State: 2*ns+1 : 3*ns accumulated shear due to slip @@ -1033,82 +1047,82 @@ subroutine constitutive_dislotwin_microstructure(temperature,state,ipc,ip,el) sumf = sum(state(ipc,ip,el)%p((3*ns+1):(3*ns+nt))) ! safe for nt == 0 !* Stacking fault energy - sfe = constitutive_dislotwin_SFE_0K(matID) + & - constitutive_dislotwin_dSFE_dT(matID) * Temperature + sfe = constitutive_dislotwin_SFE_0K(instance) + & + constitutive_dislotwin_dSFE_dT(instance) * Temperature !* rescaled twin volume fraction for topology forall (t = 1_pInt:nt) & fOverStacksize(t) = & - state(ipc,ip,el)%p(3_pInt*ns+t)/constitutive_dislotwin_twinsizePerTwinSystem(t,matID) + state(ipc,ip,el)%p(3_pInt*ns+t)/constitutive_dislotwin_twinsizePerTwinSystem(t,instance) !* 1/mean free distance between 2 forest dislocations seen by a moving dislocation forall (s = 1_pInt:ns) & state(ipc,ip,el)%p(3_pInt*ns+2_pInt*nt+s) = & sqrt(dot_product((state(ipc,ip,el)%p(1:ns)+state(ipc,ip,el)%p(ns+1_pInt:2_pInt*ns)),& - constitutive_dislotwin_forestProjectionEdge(1:ns,s,matID)))/ & - constitutive_dislotwin_CLambdaSlipPerSlipSystem(s,matID) + constitutive_dislotwin_forestProjectionEdge(1:ns,s,instance)))/ & + constitutive_dislotwin_CLambdaSlipPerSlipSystem(s,instance) !* 1/mean free distance between 2 twin stacks from different systems seen by a moving dislocation !$OMP CRITICAL (evilmatmul) state(ipc,ip,el)%p((4_pInt*ns+2_pInt*nt+1_pInt):(5_pInt*ns+2_pInt*nt)) = 0.0_pReal if (nt > 0_pInt .and. ns > 0_pInt) & state(ipc,ip,el)%p((4_pInt*ns+2_pInt*nt+1):(5_pInt*ns+2_pInt*nt)) = & - matmul(constitutive_dislotwin_interactionMatrix_SlipTwin(1:ns,1:nt,matID),fOverStacksize(1:nt))/(1.0_pReal-sumf) + matmul(constitutive_dislotwin_interactionMatrix_SlipTwin(1:ns,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) !$OMP END CRITICAL (evilmatmul) !* 1/mean free distance between 2 twin stacks from different systems seen by a growing twin !$OMP CRITICAL (evilmatmul) if (nt > 0_pInt) & state(ipc,ip,el)%p((5_pInt*ns+2_pInt*nt+1_pInt):(5_pInt*ns+3_pInt*nt)) = & - matmul(constitutive_dislotwin_interactionMatrix_TwinTwin(1:nt,1:nt,matID),fOverStacksize(1:nt))/(1.0_pReal-sumf) + matmul(constitutive_dislotwin_interactionMatrix_TwinTwin(1:nt,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) !$OMP END CRITICAL (evilmatmul) !* mean free path between 2 obstacles seen by a moving dislocation do s = 1_pInt,ns if (nt > 0_pInt) then state(ipc,ip,el)%p(5_pInt*ns+3_pInt*nt+s) = & - constitutive_dislotwin_GrainSize(matID)/(1.0_pReal+constitutive_dislotwin_GrainSize(matID)*& + constitutive_dislotwin_GrainSize(instance)/(1.0_pReal+constitutive_dislotwin_GrainSize(instance)*& (state(ipc,ip,el)%p(3_pInt*ns+2_pInt*nt+s)+state(ipc,ip,el)%p(4_pInt*ns+2_pInt*nt+s))) else state(ipc,ip,el)%p(5_pInt*ns+s) = & - constitutive_dislotwin_GrainSize(matID)/& - (1.0_pReal+constitutive_dislotwin_GrainSize(matID)*(state(ipc,ip,el)%p(3_pInt*ns+s))) + constitutive_dislotwin_GrainSize(instance)/& + (1.0_pReal+constitutive_dislotwin_GrainSize(instance)*(state(ipc,ip,el)%p(3_pInt*ns+s))) endif enddo !* mean free path between 2 obstacles seen by a growing twin forall (t = 1_pInt:nt) & state(ipc,ip,el)%p(6_pInt*ns+3_pInt*nt+t) = & - (constitutive_dislotwin_Cmfptwin(matID)*constitutive_dislotwin_GrainSize(matID))/& - (1.0_pReal+constitutive_dislotwin_GrainSize(matID)*state(ipc,ip,el)%p(5_pInt*ns+2_pInt*nt+t)) + (constitutive_dislotwin_Cmfptwin(instance)*constitutive_dislotwin_GrainSize(instance))/& + (1.0_pReal+constitutive_dislotwin_GrainSize(instance)*state(ipc,ip,el)%p(5_pInt*ns+2_pInt*nt+t)) !* threshold stress for dislocation motion forall (s = 1_pInt:ns) & - state(ipc,ip,el)%p(6_pInt*ns+4_pInt*nt+s) = constitutive_dislotwin_SolidSolutionStrength(matID)+ & - constitutive_dislotwin_Gmod(matID)*constitutive_dislotwin_burgersPerSlipSystem(s,matID)*& + state(ipc,ip,el)%p(6_pInt*ns+4_pInt*nt+s) = constitutive_dislotwin_SolidSolutionStrength(instance)+ & + constitutive_dislotwin_Gmod(instance)*constitutive_dislotwin_burgersPerSlipSystem(s,instance)*& sqrt(dot_product((state(ipc,ip,el)%p(1:ns)+state(ipc,ip,el)%p(ns+1_pInt:2_pInt*ns)),& - constitutive_dislotwin_interactionMatrix_SlipSlip(s,1:ns,matID))) + constitutive_dislotwin_interactionMatrix_SlipSlip(s,1:ns,instance))) !* threshold stress for growing twin forall (t = 1_pInt:nt) & state(ipc,ip,el)%p(7_pInt*ns+4_pInt*nt+t) = & - constitutive_dislotwin_Cthresholdtwin(matID)*& - (sfe/(3.0_pReal*constitutive_dislotwin_burgersPerTwinSystem(t,matID))+& - 3.0_pReal*constitutive_dislotwin_burgersPerTwinSystem(t,matID)*constitutive_dislotwin_Gmod(matID)/& - (constitutive_dislotwin_L0(matID)*constitutive_dislotwin_burgersPerSlipSystem(t,matID))) + constitutive_dislotwin_Cthresholdtwin(instance)*& + (sfe/(3.0_pReal*constitutive_dislotwin_burgersPerTwinSystem(t,instance))+& + 3.0_pReal*constitutive_dislotwin_burgersPerTwinSystem(t,instance)*constitutive_dislotwin_Gmod(instance)/& + (constitutive_dislotwin_L0(instance)*constitutive_dislotwin_burgersPerSlipSystem(t,instance))) !* final twin volume after growth forall (t = 1_pInt:nt) & state(ipc,ip,el)%p(7_pInt*ns+5_pInt*nt+t) = & - (pi/4.0_pReal)*constitutive_dislotwin_twinsizePerTwinSystem(t,matID)*state(ipc,ip,el)%p(6*ns+3*nt+t)**(2.0_pReal) + (pi/4.0_pReal)*constitutive_dislotwin_twinsizePerTwinSystem(t,instance)*state(ipc,ip,el)%p(6*ns+3*nt+t)**(2.0_pReal) !* equilibrium seperation of partial dislocations do t = 1_pInt,nt - x0 = constitutive_dislotwin_Gmod(matID)*constitutive_dislotwin_burgersPerTwinSystem(t,matID)**(2.0_pReal)/& - (sfe*8.0_pReal*pi)*(2.0_pReal+constitutive_dislotwin_nu(matID))/(1.0_pReal-constitutive_dislotwin_nu(matID)) - constitutive_dislotwin_tau_r(t,matID)= & - constitutive_dislotwin_Gmod(matID)*constitutive_dislotwin_burgersPerTwinSystem(t,matID)/(2.0_pReal*pi)*& - (1/(x0+constitutive_dislotwin_xc(matID))+cos(pi/3.0_pReal)/x0) + x0 = constitutive_dislotwin_Gmod(instance)*constitutive_dislotwin_burgersPerTwinSystem(t,instance)**(2.0_pReal)/& + (sfe*8.0_pReal*pi)*(2.0_pReal+constitutive_dislotwin_nu(instance))/(1.0_pReal-constitutive_dislotwin_nu(instance)) + constitutive_dislotwin_tau_r(t,instance)= & + constitutive_dislotwin_Gmod(instance)*constitutive_dislotwin_burgersPerTwinSystem(t,instance)/(2.0_pReal*pi)*& + (1/(x0+constitutive_dislotwin_xc(instance))+cos(pi/3.0_pReal)/x0) enddo end subroutine constitutive_dislotwin_microstructure @@ -1156,7 +1170,7 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperat real(pReal), dimension(3,3), intent(out) :: Lp real(pReal), dimension(9,9), intent(out) :: dLp_dTstar - integer(pInt) :: matID,structID,ns,nt,f,i,j,k,l,m,n,index_myFamily,s1,s2 + integer(pInt) :: instance,structID,ns,nt,f,i,j,k,l,m,n,index_myFamily,s1,s2 real(pReal) :: sumf,StressRatio_p,StressRatio_pminus1,StressRatio_r,BoltzmannRatio,DotGamma0,Ndot0 real(pReal), dimension(3,3,3,3) :: dLp_dTstar3333 real(pReal), dimension(constitutive_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & @@ -1188,10 +1202,10 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperat logical error !* Shortened notation - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) - structID = constitutive_dislotwin_structure(matID) - ns = constitutive_dislotwin_totalNslip(matID) - nt = constitutive_dislotwin_totalNtwin(matID) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + structID = constitutive_dislotwin_structure(instance) + ns = constitutive_dislotwin_totalNslip(instance) + nt = constitutive_dislotwin_totalNtwin(instance) !* Total twin volume fraction sumf = sum(state(ipc,ip,el)%p((3_pInt*ns+1_pInt):(3_pInt*ns+nt))) ! safe for nt == 0 @@ -1206,7 +1220,7 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperat j = 0_pInt slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family - slipSystemsLoop: do i = 1_pInt,constitutive_dislotwin_Nslip(f,matID) + slipSystemsLoop: do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) j = j+1_pInt !* Calculation of Lp @@ -1214,25 +1228,25 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperat tau_slip(j) = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,structID)) !* Stress ratios - StressRatio_p = (abs(tau_slip(j))/state(ipc,ip,el)%p(6*ns+4*nt+j))**constitutive_dislotwin_p(matID) - StressRatio_pminus1 = (abs(tau_slip(j))/state(ipc,ip,el)%p(6*ns+4*nt+j))**(constitutive_dislotwin_p(matID)-1.0_pReal) + StressRatio_p = (abs(tau_slip(j))/state(ipc,ip,el)%p(6*ns+4*nt+j))**constitutive_dislotwin_p(instance) + StressRatio_pminus1 = (abs(tau_slip(j))/state(ipc,ip,el)%p(6*ns+4*nt+j))**(constitutive_dislotwin_p(instance)-1.0_pReal) !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,matID)/(kB*Temperature) + BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - state(ipc,ip,el)%p(j)*constitutive_dislotwin_burgersPerSlipSystem(j,matID)*& - constitutive_dislotwin_v0PerSlipSystem(j,matID) + state(ipc,ip,el)%p(j)*constitutive_dislotwin_burgersPerSlipSystem(j,instance)*& + constitutive_dislotwin_v0PerSlipSystem(j,instance) !* Shear rates due to slip gdot_slip(j) = (1.0_pReal - sumf) * DotGamma0 & - * exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislotwin_q(matID)) & + * exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislotwin_q(instance)) & * sign(1.0_pReal,tau_slip(j)) !* Derivatives of shear rates dgdot_dtauslip(j) = & ((abs(gdot_slip(j))*BoltzmannRatio*& - constitutive_dislotwin_p(matID)*constitutive_dislotwin_q(matID))/state(ipc,ip,el)%p(6*ns+4*nt+j))*& - StressRatio_pminus1*(1-StressRatio_p)**(constitutive_dislotwin_q(matID)-1.0_pReal) + constitutive_dislotwin_p(instance)*constitutive_dislotwin_q(instance))/state(ipc,ip,el)%p(6*ns+4*nt+j))*& + StressRatio_pminus1*(1-StressRatio_p)**(constitutive_dislotwin_q(instance)-1.0_pReal) !* Plastic velocity gradient for dislocation glide Lp = Lp + gdot_slip(j)*lattice_Sslip(:,:,1,index_myFamily+i,structID) @@ -1247,8 +1261,8 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperat enddo slipFamiliesLoop !* Shear banding (shearband) part - if(constitutive_dislotwin_sbVelocity(matID) /= 0.0_pReal .and. & - constitutive_dislotwin_sbResistance(matID) /= 0.0_pReal) then + if(constitutive_dislotwin_sbVelocity(instance) /= 0.0_pReal .and. & + constitutive_dislotwin_sbResistance(instance) /= 0.0_pReal) then gdot_sb = 0.0_pReal dgdot_dtausb = 0.0_pReal call math_spectralDecompositionSym33(math_Mandel6to33(Tstar_v),eigValues,eigVectors, error) @@ -1263,23 +1277,23 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperat tau_sb(j) = dot_product(Tstar_v,constitutive_dislotwin_sbSv(1:6,j,ipc,ip,el)) !* Stress ratios - StressRatio_p = (abs(tau_sb(j))/constitutive_dislotwin_sbResistance(matID))**constitutive_dislotwin_p(matID) - StressRatio_pminus1 = (abs(tau_sb(j))/constitutive_dislotwin_sbResistance(matID))& - **(constitutive_dislotwin_p(matID)-1.0_pReal) + StressRatio_p = (abs(tau_sb(j))/constitutive_dislotwin_sbResistance(instance))**constitutive_dislotwin_p(instance) + StressRatio_pminus1 = (abs(tau_sb(j))/constitutive_dislotwin_sbResistance(instance))& + **(constitutive_dislotwin_p(instance)-1.0_pReal) !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_sbQedge(matID)/(kB*Temperature) + BoltzmannRatio = constitutive_dislotwin_sbQedge(instance)/(kB*Temperature) !* Initial shear rates - DotGamma0 = constitutive_dislotwin_sbVelocity(matID) + DotGamma0 = constitutive_dislotwin_sbVelocity(instance) !* Shear rates due to shearband - gdot_sb(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**constitutive_dislotwin_q(matID))*& + gdot_sb(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**constitutive_dislotwin_q(instance))*& sign(1.0_pReal,tau_sb(j)) !* Derivatives of shear rates dgdot_dtausb(j) = & ((abs(gdot_sb(j))*BoltzmannRatio*& - constitutive_dislotwin_p(matID)*constitutive_dislotwin_q(matID))/constitutive_dislotwin_sbResistance(matID))*& - StressRatio_pminus1*(1_pInt-StressRatio_p)**(constitutive_dislotwin_q(matID)-1.0_pReal) + constitutive_dislotwin_p(instance)*constitutive_dislotwin_q(instance))/constitutive_dislotwin_sbResistance(instance))*& + StressRatio_pminus1*(1_pInt-StressRatio_p)**(constitutive_dislotwin_q(instance)-1.0_pReal) !* Plastic velocity gradient for shear banding Lp = Lp + gdot_sb(j)*sb_Smatrix @@ -1299,7 +1313,7 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperat j = 0_pInt twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) ! at which index starts my family - twinSystemsLoop: do i = 1_pInt,constitutive_dislotwin_Ntwin(f,matID) + twinSystemsLoop: do i = 1_pInt,constitutive_dislotwin_Ntwin(f,instance) j = j+1_pInt !* Calculation of Lp @@ -1307,30 +1321,30 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperat tau_twin(j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,structID)) !* Stress ratios - StressRatio_r = (state(ipc,ip,el)%p(7*ns+4*nt+j)/tau_twin(j))**constitutive_dislotwin_r(matID) + StressRatio_r = (state(ipc,ip,el)%p(7*ns+4*nt+j)/tau_twin(j))**constitutive_dislotwin_r(instance) !* Shear rates and their derivatives due to twin if ( tau_twin(j) > 0.0_pReal ) then - select case(constitutive_dislotwin_structureID(matID)) + select case(constitutive_dislotwin_structureID(instance)) case (LATTICE_fcc_ID) s1=lattice_fcc_corellationTwinSlip(1,index_myFamily+i) s2=lattice_fcc_corellationTwinSlip(2,index_myFamily+i) - if (tau_twin(j) < constitutive_dislotwin_tau_r(j,matID)) then + if (tau_twin(j) < constitutive_dislotwin_tau_r(j,instance)) then Ndot0=(abs(gdot_slip(s1))*(state(ipc,ip,el)%p(s2)+state(ipc,ip,el)%p(ns+s2))+& abs(gdot_slip(s2))*(state(ipc,ip,el)%p(s1)+state(ipc,ip,el)%p(ns+s1)))/& - (constitutive_dislotwin_L0(matID)*constitutive_dislotwin_burgersPerSlipSystem(j,matID))*& - (1.0_pReal-exp(-constitutive_dislotwin_VcrossSlip(matID)/(kB*Temperature)*& - (constitutive_dislotwin_tau_r(j,matID)-tau_twin(j)))) + (constitutive_dislotwin_L0(instance)*constitutive_dislotwin_burgersPerSlipSystem(j,instance))*& + (1.0_pReal-exp(-constitutive_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& + (constitutive_dislotwin_tau_r(j,instance)-tau_twin(j)))) else Ndot0=0.0_pReal end if case default - Ndot0=constitutive_dislotwin_Ndot0PerTwinSystem(j,matID) + Ndot0=constitutive_dislotwin_Ndot0PerTwinSystem(j,instance) end select gdot_twin(j) = & - (constitutive_dislotwin_MaxTwinFraction(matID)-sumf)*lattice_shearTwin(index_myFamily+i,structID)*& + (constitutive_dislotwin_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,structID)*& state(ipc,ip,el)%p(7*ns+5*nt+j)*Ndot0*exp(-StressRatio_r) - dgdot_dtautwin(j) = ((gdot_twin(j)*constitutive_dislotwin_r(matID))/tau_twin(j))*StressRatio_r + dgdot_dtautwin(j) = ((gdot_twin(j)*constitutive_dislotwin_r(instance))/tau_twin(j))*StressRatio_r endif !* Plastic velocity gradient for mechanical twinning @@ -1390,7 +1404,7 @@ pure function constitutive_dislotwin_dotState(Tstar_v,Temperature,state,ipc,ip,e real(pReal), dimension(constitutive_dislotwin_sizeDotState(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & constitutive_dislotwin_dotState - integer(pInt) matID,structID,ns,nt,f,i,j,index_myFamily,s1,s2 + integer(pInt) instance,structID,ns,nt,f,i,j,index_myFamily,s1,s2 real(pReal) sumf,StressRatio_p,StressRatio_pminus1,BoltzmannRatio,DotGamma0,& EdgeDipMinDistance,AtomicVolume,VacancyDiffusion,StressRatio_r,Ndot0 real(pReal), dimension(constitutive_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & @@ -1400,10 +1414,10 @@ pure function constitutive_dislotwin_dotState(Tstar_v,Temperature,state,ipc,ip,e tau_twin !* Shortened notation - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) - structID = constitutive_dislotwin_structure(matID) - ns = constitutive_dislotwin_totalNslip(matID) - nt = constitutive_dislotwin_totalNtwin(matID) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + structID = constitutive_dislotwin_structure(instance) + ns = constitutive_dislotwin_totalNslip(instance) + nt = constitutive_dislotwin_totalNtwin(instance) !* Total twin volume fraction sumf = sum(state(ipc,ip,el)%p((3_pInt*ns+1_pInt):(3_pInt*ns+nt))) ! safe for nt == 0 @@ -1415,7 +1429,7 @@ pure function constitutive_dislotwin_dotState(Tstar_v,Temperature,state,ipc,ip,e j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Nslip(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j+1_pInt @@ -1423,60 +1437,60 @@ pure function constitutive_dislotwin_dotState(Tstar_v,Temperature,state,ipc,ip,e tau_slip(j) = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,structID)) !* Stress ratios StressRatio_p = (abs(tau_slip(j))/state(ipc,ip,el)%p(6_pInt*ns+4_pInt*nt+j))**& - constitutive_dislotwin_p(matID) + constitutive_dislotwin_p(instance) StressRatio_pminus1 = (abs(tau_slip(j))/state(ipc,ip,el)%p(6_pInt*ns+4_pInt*nt+j))**& - (constitutive_dislotwin_p(matID)-1.0_pReal) + (constitutive_dislotwin_p(instance)-1.0_pReal) !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,matID)/(kB*Temperature) + BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - state(ipc,ip,el)%p(j)*constitutive_dislotwin_burgersPerSlipSystem(j,matID)*& - constitutive_dislotwin_v0PerSlipSystem(j,matID) + state(ipc,ip,el)%p(j)*constitutive_dislotwin_burgersPerSlipSystem(j,instance)*& + constitutive_dislotwin_v0PerSlipSystem(j,instance) !* Shear rates due to slip - gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**constitutive_dislotwin_q(matID))*& + gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**constitutive_dislotwin_q(instance))*& sign(1.0_pReal,tau_slip(j)) !* Multiplication DotRhoMultiplication(j) = abs(gdot_slip(j))/& - (constitutive_dislotwin_burgersPerSlipSystem(j,matID)*state(ipc,ip,el)%p(5*ns+3*nt+j)) + (constitutive_dislotwin_burgersPerSlipSystem(j,instance)*state(ipc,ip,el)%p(5*ns+3*nt+j)) !* Dipole formation EdgeDipMinDistance = & - constitutive_dislotwin_CEdgeDipMinDistance(matID)*constitutive_dislotwin_burgersPerSlipSystem(j,matID) + constitutive_dislotwin_CEdgeDipMinDistance(instance)*constitutive_dislotwin_burgersPerSlipSystem(j,instance) if (tau_slip(j) == 0.0_pReal) then DotRhoDipFormation(j) = 0.0_pReal else EdgeDipDistance(j) = & - (3.0_pReal*constitutive_dislotwin_Gmod(matID)*constitutive_dislotwin_burgersPerSlipSystem(j,matID))/& + (3.0_pReal*constitutive_dislotwin_Gmod(instance)*constitutive_dislotwin_burgersPerSlipSystem(j,instance))/& (16.0_pReal*pi*abs(tau_slip(j))) if (EdgeDipDistance(j)>state(ipc,ip,el)%p(5*ns+3*nt+j)) EdgeDipDistance(j)=state(ipc,ip,el)%p(5*ns+3*nt+j) if (EdgeDipDistance(j) 0.0_pReal ) then - select case(constitutive_dislotwin_structureID(matID)) + select case(constitutive_dislotwin_structureID(instance)) case (LATTICE_fcc_ID) s1=lattice_fcc_corellationTwinSlip(1,index_myFamily+i) s2=lattice_fcc_corellationTwinSlip(2,index_myFamily+i) - if (tau_twin(j) < constitutive_dislotwin_tau_r(j,matID)) then + if (tau_twin(j) < constitutive_dislotwin_tau_r(j,instance)) then Ndot0=(abs(gdot_slip(s1))*(state(ipc,ip,el)%p(s2)+state(ipc,ip,el)%p(ns+s2))+& abs(gdot_slip(s2))*(state(ipc,ip,el)%p(s1)+state(ipc,ip,el)%p(ns+s1)))/& - (constitutive_dislotwin_L0(matID)*constitutive_dislotwin_burgersPerSlipSystem(j,matID))*& - (1.0_pReal-exp(-constitutive_dislotwin_VcrossSlip(matID)/(kB*Temperature)*& - (constitutive_dislotwin_tau_r(j,matID)-tau_twin(j)))) + (constitutive_dislotwin_L0(instance)*constitutive_dislotwin_burgersPerSlipSystem(j,instance))*& + (1.0_pReal-exp(-constitutive_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& + (constitutive_dislotwin_tau_r(j,instance)-tau_twin(j)))) else Ndot0=0.0_pReal end if case default - Ndot0=constitutive_dislotwin_Ndot0PerTwinSystem(j,matID) + Ndot0=constitutive_dislotwin_Ndot0PerTwinSystem(j,instance) end select constitutive_dislotwin_dotState(3_pInt*ns+j) = & - (constitutive_dislotwin_MaxTwinFraction(matID)-sumf)*& + (constitutive_dislotwin_MaxTwinFraction(instance)-sumf)*& state(ipc,ip,el)%p(7_pInt*ns+5_pInt*nt+j)*Ndot0*exp(-StressRatio_r) !* Dotstate for accumulated shear due to twin @@ -1587,7 +1601,7 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,state,ipc,ip,el) constitutive_dislotwin_postResults integer(pInt) :: & - matID,structID,& + instance,structID,& ns,nt,& f,o,i,c,j,index_myFamily,& s1,s2 @@ -1599,10 +1613,10 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,state,ipc,ip,el) logical :: error !* Shortened notation - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) - structID = constitutive_dislotwin_structure(matID) - ns = constitutive_dislotwin_totalNslip(matID) - nt = constitutive_dislotwin_totalNtwin(matID) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + structID = constitutive_dislotwin_structure(instance) + ns = constitutive_dislotwin_totalNslip(instance) + nt = constitutive_dislotwin_totalNtwin(instance) !* Total twin volume fraction sumf = sum(state(ipc,ip,el)%p((3_pInt*ns+1_pInt):(3_pInt*ns+nt))) ! safe for nt == 0 @@ -1615,7 +1629,7 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,state,ipc,ip,el) call math_spectralDecompositionSym33(math_Mandel6to33(Tstar_v),eigValues,eigVectors, error) do o = 1_pInt,phase_Noutput(material_phase(ipc,ip,el)) - select case(constitutive_dislotwin_outputID(o,matID)) + select case(constitutive_dislotwin_outputID(o,instance)) case (edge_density_ID) constitutive_dislotwin_postResults(c+1_pInt:c+ns) = state(ipc,ip,el)%p(1_pInt:ns) @@ -1627,27 +1641,27 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,state,ipc,ip,el) j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Nslip(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j + 1_pInt !* Resolved shear stress on slip system tau = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,structID)) !* Stress ratios StressRatio_p = (abs(tau)/state(ipc,ip,el)%p(6_pInt*ns+4_pInt*nt+j))**& - constitutive_dislotwin_p(matID) + constitutive_dislotwin_p(instance) StressRatio_pminus1 = (abs(tau)/state(ipc,ip,el)%p(6_pInt*ns+4_pInt*nt+j))**& - (constitutive_dislotwin_p(matID)-1.0_pReal) + (constitutive_dislotwin_p(instance)-1.0_pReal) !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,matID)/(kB*Temperature) + BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - state(ipc,ip,el)%p(j)*constitutive_dislotwin_burgersPerSlipSystem(j,matID)* & - constitutive_dislotwin_v0PerSlipSystem(j,matID) + state(ipc,ip,el)%p(j)*constitutive_dislotwin_burgersPerSlipSystem(j,instance)* & + constitutive_dislotwin_v0PerSlipSystem(j,instance) !* Shear rates due to slip constitutive_dislotwin_postResults(c+j) = & DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**& - constitutive_dislotwin_q(matID))*sign(1.0_pReal,tau) + constitutive_dislotwin_q(instance))*sign(1.0_pReal,tau) enddo ; enddo c = c + ns case (accumulated_shear_slip_ID) @@ -1662,7 +1676,7 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,state,ipc,ip,el) j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Nslip(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j + 1_pInt constitutive_dislotwin_postResults(c+j) =& dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,structID)) @@ -1676,10 +1690,10 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,state,ipc,ip,el) j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Nslip(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j + 1_pInt constitutive_dislotwin_postResults(c+j) = & - (3.0_pReal*constitutive_dislotwin_Gmod(matID)*constitutive_dislotwin_burgersPerSlipSystem(j,matID))/& + (3.0_pReal*constitutive_dislotwin_Gmod(instance)*constitutive_dislotwin_burgersPerSlipSystem(j,instance))/& (16.0_pReal*pi*abs(dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,structID)))) constitutive_dislotwin_postResults(c+j) = min(constitutive_dislotwin_postResults(c+j),state(ipc,ip,el)%p(5*ns+3*nt+j)) ! constitutive_dislotwin_postResults(c+j) = max(constitutive_dislotwin_postResults(c+j),state(ipc,ip,el)%p(4*ns+2*nt+j)) @@ -1695,17 +1709,17 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,state,ipc,ip,el) !* Resolved shear stress on shearband system tau = dot_product(Tstar_v,constitutive_dislotwin_sbSv(1:6,j,ipc,ip,el)) !* Stress ratios - StressRatio_p = (abs(tau)/constitutive_dislotwin_sbResistance(matID))**constitutive_dislotwin_p(matID) - StressRatio_pminus1 = (abs(tau)/constitutive_dislotwin_sbResistance(matID))& - **(constitutive_dislotwin_p(matID)-1.0_pReal) + StressRatio_p = (abs(tau)/constitutive_dislotwin_sbResistance(instance))**constitutive_dislotwin_p(instance) + StressRatio_pminus1 = (abs(tau)/constitutive_dislotwin_sbResistance(instance))& + **(constitutive_dislotwin_p(instance)-1.0_pReal) !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_sbQedge(matID)/(kB*Temperature) + BoltzmannRatio = constitutive_dislotwin_sbQedge(instance)/(kB*Temperature) !* Initial shear rates - DotGamma0 = constitutive_dislotwin_sbVelocity(matID) + DotGamma0 = constitutive_dislotwin_sbVelocity(instance) !* Shear rates due to slip constitutive_dislotwin_postResults(c+j) = & - DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**constitutive_dislotwin_q(matID))*sign(1.0_pReal,tau) + DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**constitutive_dislotwin_q(instance))*sign(1.0_pReal,tau) enddo c = c + 6_pInt case (twin_fraction_ID) @@ -1717,60 +1731,60 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,state,ipc,ip,el) j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Nslip(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j + 1_pInt !* Resolved shear stress on slip system tau = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,structID)) !* Stress ratios StressRatio_p = (abs(tau)/state(ipc,ip,el)%p(5_pInt*ns+3_pInt*nt+j))**& - constitutive_dislotwin_p(matID) + constitutive_dislotwin_p(instance) StressRatio_pminus1 = (abs(tau)/state(ipc,ip,el)%p(5_pInt*ns+3_pInt*nt+j))**& - (constitutive_dislotwin_p(matID)-1.0_pReal) + (constitutive_dislotwin_p(instance)-1.0_pReal) !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,matID)/(kB*Temperature) + BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - state(ipc,ip,el)%p(j)*constitutive_dislotwin_burgersPerSlipSystem(j,matID)* & - constitutive_dislotwin_v0PerSlipSystem(j,matID) + state(ipc,ip,el)%p(j)*constitutive_dislotwin_burgersPerSlipSystem(j,instance)* & + constitutive_dislotwin_v0PerSlipSystem(j,instance) !* Shear rates due to slip gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**& - constitutive_dislotwin_q(matID))*sign(1.0_pReal,tau) + constitutive_dislotwin_q(instance))*sign(1.0_pReal,tau) enddo;enddo j = 0_pInt do f = 1_pInt,lattice_maxNtwinFamily ! loop over all twin families index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1,constitutive_dislotwin_Ntwin(f,matID) ! process each (active) twin system in family + do i = 1,constitutive_dislotwin_Ntwin(f,instance) ! process each (active) twin system in family j = j + 1_pInt !* Resolved shear stress on twin system tau = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,structID)) !* Stress ratios - StressRatio_r = (state(ipc,ip,el)%p(7_pInt*ns+4_pInt*nt+j)/tau)**constitutive_dislotwin_r(matID) + StressRatio_r = (state(ipc,ip,el)%p(7_pInt*ns+4_pInt*nt+j)/tau)**constitutive_dislotwin_r(instance) !* Shear rates due to twin if ( tau > 0.0_pReal ) then - select case(constitutive_dislotwin_structureID(matID)) + select case(constitutive_dislotwin_structureID(instance)) case (LATTICE_fcc_ID) s1=lattice_fcc_corellationTwinSlip(1,index_myFamily+i) s2=lattice_fcc_corellationTwinSlip(2,index_myFamily+i) - if (tau < constitutive_dislotwin_tau_r(j,matID)) then + if (tau < constitutive_dislotwin_tau_r(j,instance)) then Ndot0=(abs(gdot_slip(s1))*(state(ipc,ip,el)%p(s2)+state(ipc,ip,el)%p(ns+s2))+& abs(gdot_slip(s2))*(state(ipc,ip,el)%p(s1)+state(ipc,ip,el)%p(ns+s1)))/& - (constitutive_dislotwin_L0(matID)*& - constitutive_dislotwin_burgersPerSlipSystem(j,matID))*& - (1.0_pReal-exp(-constitutive_dislotwin_VcrossSlip(matID)/(kB*Temperature)*& - (constitutive_dislotwin_tau_r(j,matID)-tau))) + (constitutive_dislotwin_L0(instance)*& + constitutive_dislotwin_burgersPerSlipSystem(j,instance))*& + (1.0_pReal-exp(-constitutive_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& + (constitutive_dislotwin_tau_r(j,instance)-tau))) else Ndot0=0.0_pReal end if case default - Ndot0=constitutive_dislotwin_Ndot0PerTwinSystem(j,matID) + Ndot0=constitutive_dislotwin_Ndot0PerTwinSystem(j,instance) end select constitutive_dislotwin_postResults(c+j) = & - (constitutive_dislotwin_MaxTwinFraction(matID)-sumf)*lattice_shearTwin(index_myFamily+i,structID)*& + (constitutive_dislotwin_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,structID)*& state(ipc,ip,el)%p(7_pInt*ns+5_pInt*nt+j)*Ndot0*exp(-StressRatio_r) endif @@ -1788,7 +1802,7 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,state,ipc,ip,el) j = 0_pInt do f = 1_pInt,lattice_maxNtwinFamily ! loop over all slip families index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Ntwin(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_dislotwin_Ntwin(f,instance) ! process each (active) slip system in family j = j + 1_pInt constitutive_dislotwin_postResults(c+j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,structID)) enddo; enddo @@ -1801,32 +1815,32 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,state,ipc,ip,el) j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Nslip(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j + 1_pInt !* Resolved shear stress on slip system tau = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,structID)) !* Stress ratios StressRatio_p = (abs(tau)/state(ipc,ip,el)%p(6_pInt*ns+4_pInt*nt+j))**& - constitutive_dislotwin_p(matID) + constitutive_dislotwin_p(instance) StressRatio_pminus1 = (abs(tau)/state(ipc,ip,el)%p(6_pInt*ns+4_pInt*nt+j))**& - (constitutive_dislotwin_p(matID)-1.0_pReal) + (constitutive_dislotwin_p(instance)-1.0_pReal) !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,matID)/(kB*Temperature) + BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - state(ipc,ip,el)%p(j)*constitutive_dislotwin_burgersPerSlipSystem(j,matID)* & - constitutive_dislotwin_v0PerSlipSystem(j,matID) + state(ipc,ip,el)%p(j)*constitutive_dislotwin_burgersPerSlipSystem(j,instance)* & + constitutive_dislotwin_v0PerSlipSystem(j,instance) !* Shear rates due to slip gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**& - constitutive_dislotwin_q(matID))*sign(1.0_pReal,tau) + constitutive_dislotwin_q(instance))*sign(1.0_pReal,tau) !* Derivatives of shear rates dgdot_dtauslip = & ((abs(gdot_slip(j))*BoltzmannRatio*& - constitutive_dislotwin_p(matID)*constitutive_dislotwin_q(matID))/state(ipc,ip,el)%p(6*ns+4*nt+j))*& - StressRatio_pminus1*(1_pInt-StressRatio_p)**(constitutive_dislotwin_q(matID)-1.0_pReal) + constitutive_dislotwin_p(instance)*constitutive_dislotwin_q(instance))/state(ipc,ip,el)%p(6*ns+4*nt+j))*& + StressRatio_pminus1*(1_pInt-StressRatio_p)**(constitutive_dislotwin_q(instance)-1.0_pReal) !* Stress exponent if (gdot_slip(j)==0.0_pReal) then diff --git a/code/constitutive_j2.f90 b/code/constitutive_j2.f90 index 0de0eecb7..dec517f9b 100644 --- a/code/constitutive_j2.f90 +++ b/code/constitutive_j2.f90 @@ -128,7 +128,7 @@ subroutine constitutive_j2_init(fileUnit) integer(pInt), parameter :: MAXNCHUNKS = 7_pInt integer(pInt), dimension(1_pInt+2_pInt*MAXNCHUNKS) :: positions - integer(pInt) :: section = 0_pInt, maxNinstance, i,o, mySize + integer(pInt) :: section = 0_pInt, maxNinstance, instance,o, mySize character(len=65536) :: & tag = '', & line = '' @@ -182,69 +182,69 @@ subroutine constitutive_j2_init(fileUnit) if (IO_getTag(line,'[',']') /= '') then ! next section section = section + 1_pInt ! advance section counter if (phase_plasticity(section) == PLASTICITY_J2_ID) then - i = phase_plasticityInstance(section) - constitutive_j2_Cslip_66(1:6,1:6,i) = lattice_Cslip_66(1:6,1:6,section) + instance = phase_plasticityInstance(section) + constitutive_j2_Cslip_66(1:6,1:6,instance) = lattice_Cslip_66(1:6,1:6,section) endif cycle ! skip to next line endif if (section > 0_pInt ) then; if (phase_plasticity(section) == PLASTICITY_J2_ID) then ! one of my sections. Do not short-circuit here (.and. between if-statements), it's not safe in Fortran - i = phase_plasticityInstance(section) ! which instance of my plasticity is present phase + instance = phase_plasticityInstance(section) ! which instance of my plasticity is present phase positions = IO_stringPos(line,MAXNCHUNKS) tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key select case(tag) case ('plasticity','elasticity','lattice_structure','covera_ratio',& 'c11','c12','c13','c22','c23','c33','c44','c55','c66') case ('(output)') - constitutive_j2_Noutput(i) = constitutive_j2_Noutput(i) + 1_pInt - constitutive_j2_output(constitutive_j2_Noutput(i),i) = & + constitutive_j2_Noutput(instance) = constitutive_j2_Noutput(instance) + 1_pInt + constitutive_j2_output(constitutive_j2_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) select case(IO_lc(IO_stringValue(line,positions,2_pInt))) case ('flowstress') - constitutive_j2_outputID(constitutive_j2_Noutput(i),i) = flowstress_ID + constitutive_j2_outputID(constitutive_j2_Noutput(instance),instance) = flowstress_ID case ('strainrate') - constitutive_j2_outputID(constitutive_j2_Noutput(i),i) = strainrate_ID + constitutive_j2_outputID(constitutive_j2_Noutput(instance),instance) = strainrate_ID case default call IO_error(105_pInt,ext_msg=IO_stringValue(line,positions,2_pInt)//' ('//PLASTICITY_J2_label//')') end select case ('tau0') - constitutive_j2_tau0(i) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_tau0(i) < 0.0_pReal) & + constitutive_j2_tau0(instance) = IO_floatValue(line,positions,2_pInt) + if (constitutive_j2_tau0(instance) < 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case ('gdot0') - constitutive_j2_gdot0(i) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_gdot0(i) <= 0.0_pReal) & + constitutive_j2_gdot0(instance) = IO_floatValue(line,positions,2_pInt) + if (constitutive_j2_gdot0(instance) <= 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case ('n') - constitutive_j2_n(i) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_n(i) <= 0.0_pReal) & + constitutive_j2_n(instance) = IO_floatValue(line,positions,2_pInt) + if (constitutive_j2_n(instance) <= 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case ('h0') - constitutive_j2_h0(i) = IO_floatValue(line,positions,2_pInt) + constitutive_j2_h0(instance) = IO_floatValue(line,positions,2_pInt) case ('h0_slope','slopelnrate') - constitutive_j2_h0_slopeLnRate(i) = IO_floatValue(line,positions,2_pInt) + constitutive_j2_h0_slopeLnRate(instance) = IO_floatValue(line,positions,2_pInt) case ('tausat') - constitutive_j2_tausat(i) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_tausat(i) <= 0.0_pReal) & + constitutive_j2_tausat(instance) = IO_floatValue(line,positions,2_pInt) + if (constitutive_j2_tausat(instance) <= 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case ('tausat_sinhfita') - constitutive_j2_tausat_SinhFitA(i) = IO_floatValue(line,positions,2_pInt) + constitutive_j2_tausat_SinhFitA(instance) = IO_floatValue(line,positions,2_pInt) case ('tausat_sinhfitb') - constitutive_j2_tausat_SinhFitB(i) = IO_floatValue(line,positions,2_pInt) + constitutive_j2_tausat_SinhFitB(instance) = IO_floatValue(line,positions,2_pInt) case ('tausat_sinhfitc') - constitutive_j2_tausat_SinhFitC(i) = IO_floatValue(line,positions,2_pInt) + constitutive_j2_tausat_SinhFitC(instance) = IO_floatValue(line,positions,2_pInt) case ('tausat_sinhfitd') - constitutive_j2_tausat_SinhFitD(i) = IO_floatValue(line,positions,2_pInt) + constitutive_j2_tausat_SinhFitD(instance) = IO_floatValue(line,positions,2_pInt) case ('a', 'w0') - constitutive_j2_a(i) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_a(i) <= 0.0_pReal) & + constitutive_j2_a(instance) = IO_floatValue(line,positions,2_pInt) + if (constitutive_j2_a(instance) <= 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case ('taylorfactor') - constitutive_j2_fTaylor(i) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_fTaylor(i) <= 0.0_pReal) & + constitutive_j2_fTaylor(instance) = IO_floatValue(line,positions,2_pInt) + if (constitutive_j2_fTaylor(instance) <= 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case ('atol_resistance') - constitutive_j2_aTolResistance(i) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_aTolResistance(i) <= 0.0_pReal) & + constitutive_j2_aTolResistance(instance) = IO_floatValue(line,positions,2_pInt) + if (constitutive_j2_aTolResistance(instance) <= 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case default call IO_error(210_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') @@ -252,18 +252,18 @@ subroutine constitutive_j2_init(fileUnit) endif; endif enddo - instancesLoop: do i = 1_pInt,maxNinstance - outputsLoop: do o = 1_pInt,constitutive_j2_Noutput(i) - select case(constitutive_j2_outputID(o,i)) + instancesLoop: do instance = 1_pInt,maxNinstance + outputsLoop: do o = 1_pInt,constitutive_j2_Noutput(instance) + select case(constitutive_j2_outputID(o,instance)) case(flowstress_ID,strainrate_ID) mySize = 1_pInt case default end select if (mySize > 0_pInt) then ! any meaningful output found - constitutive_j2_sizePostResult(o,i) = mySize - constitutive_j2_sizePostResults(i) = & - constitutive_j2_sizePostResults(i) + mySize + constitutive_j2_sizePostResult(o,instance) = mySize + constitutive_j2_sizePostResults(instance) = & + constitutive_j2_sizePostResults(instance) + mySize endif enddo outputsLoop enddo instancesLoop @@ -275,13 +275,13 @@ end subroutine constitutive_j2_init !> @brief sets the initial microstructural state for a given instance of this plasticity !> @details initial microstructural state is set to the value specified by tau0 !-------------------------------------------------------------------------------------------------- -pure function constitutive_j2_stateInit(matID) +pure function constitutive_j2_stateInit(instance) implicit none real(pReal), dimension(1) :: constitutive_j2_stateInit - integer(pInt), intent(in) :: matID !< number specifying the instance of the plasticity + integer(pInt), intent(in) :: instance !< number specifying the instance of the plasticity - constitutive_j2_stateInit = constitutive_j2_tau0(matID) + constitutive_j2_stateInit = constitutive_j2_tau0(instance) end function constitutive_j2_stateInit @@ -289,15 +289,15 @@ end function constitutive_j2_stateInit !-------------------------------------------------------------------------------------------------- !> @brief sets the relevant state values for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -pure function constitutive_j2_aTolState(matID) +pure function constitutive_j2_aTolState(instance) implicit none - integer(pInt), intent(in) :: matID !< number specifying the instance of the plasticity + integer(pInt), intent(in) :: instance !< number specifying the instance of the plasticity - real(pReal), dimension(constitutive_j2_sizeState(matID)) :: & + real(pReal), dimension(constitutive_j2_sizeState(instance)) :: & constitutive_j2_aTolState - constitutive_j2_aTolState = constitutive_j2_aTolResistance(matID) + constitutive_j2_aTolState = constitutive_j2_aTolResistance(instance) end function constitutive_j2_aTolState @@ -372,10 +372,10 @@ pure subroutine constitutive_j2_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,state,ip norm_Tstar_dev, & !< euclidean norm of Tstar_dev squarenorm_Tstar_dev !< square of the euclidean norm of Tstar_dev integer(pInt) :: & - matID, & + instance, & k, l, m, n - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) Tstar_dev_33 = math_deviatoric33(math_Mandel6to33(Tstar_v)) ! deviatoric part of 2nd Piola-Kirchhoff stress squarenorm_Tstar_dev = math_mul33xx33(Tstar_dev_33,Tstar_dev_33) norm_Tstar_dev = sqrt(squarenorm_Tstar_dev) @@ -384,22 +384,22 @@ pure subroutine constitutive_j2_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,state,ip Lp = 0.0_pReal dLp_dTstar99 = 0.0_pReal else - gamma_dot = constitutive_j2_gdot0(matID) & - * (sqrt(1.5_pReal) * norm_Tstar_dev & - / constitutive_j2_fTaylor(matID) / state(ipc,ip,el)%p(1)) **constitutive_j2_n(matID) + gamma_dot = constitutive_j2_gdot0(instance) & + * (sqrt(1.5_pReal) * norm_Tstar_dev / constitutive_j2_fTaylor(instance) / state(ipc,ip,el)%p(1)) & + **constitutive_j2_n(instance) - Lp = Tstar_dev_33/norm_Tstar_dev * gamma_dot/constitutive_j2_fTaylor(matID) + Lp = Tstar_dev_33/norm_Tstar_dev * gamma_dot/constitutive_j2_fTaylor(instance) !-------------------------------------------------------------------------------------------------- ! Calculation of the tangent of Lp forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & - dLp_dTstar_3333(k,l,m,n) = (constitutive_j2_n(matID)-1.0_pReal) * & + dLp_dTstar_3333(k,l,m,n) = (constitutive_j2_n(instance)-1.0_pReal) * & Tstar_dev_33(k,l)*Tstar_dev_33(m,n) / squarenorm_Tstar_dev forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt) & dLp_dTstar_3333(k,l,k,l) = dLp_dTstar_3333(k,l,k,l) + 1.0_pReal forall (k=1_pInt:3_pInt,m=1_pInt:3_pInt) & dLp_dTstar_3333(k,k,m,m) = dLp_dTstar_3333(k,k,m,m) - 1.0_pReal/3.0_pReal - dLp_dTstar99 = math_Plain3333to99(gamma_dot / constitutive_j2_fTaylor(matID) * & + dLp_dTstar99 = math_Plain3333to99(gamma_dot / constitutive_j2_fTaylor(instance) * & dLp_dTstar_3333 / norm_Tstar_dev) end if @@ -442,9 +442,9 @@ pure function constitutive_j2_dotState(Tstar_v,state,ipc,ip,el) saturation, & !< saturation resistance norm_Tstar_dev !< euclidean norm of Tstar_dev integer(pInt) :: & - matID + instance - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) !-------------------------------------------------------------------------------------------------- ! norm of deviatoric part of 2nd Piola-Kirchhoff stress Tstar_dev_v(1:3) = Tstar_v(1:3) - sum(Tstar_v(1:3))/3.0_pReal @@ -453,31 +453,31 @@ pure function constitutive_j2_dotState(Tstar_v,state,ipc,ip,el) !-------------------------------------------------------------------------------------------------- ! strain rate - gamma_dot = constitutive_j2_gdot0(matID) * ( sqrt(1.5_pReal) * norm_Tstar_dev & + gamma_dot = constitutive_j2_gdot0(instance) * ( sqrt(1.5_pReal) * norm_Tstar_dev & / &!----------------------------------------------------------------------------------- - (constitutive_j2_fTaylor(matID) * state(ipc,ip,el)%p(1)) ) ** constitutive_j2_n(matID) + (constitutive_j2_fTaylor(instance) * state(ipc,ip,el)%p(1)) ) ** constitutive_j2_n(instance) !-------------------------------------------------------------------------------------------------- ! hardening coefficient if (abs(gamma_dot) > 1e-12_pReal) then - if (constitutive_j2_tausat_SinhFitA(matID) == 0.0_pReal) then - saturation = constitutive_j2_tausat(matID) + if (constitutive_j2_tausat_SinhFitA(instance) == 0.0_pReal) then + saturation = constitutive_j2_tausat(instance) else - saturation = ( constitutive_j2_tausat(matID) & - + ( log( ( gamma_dot / constitutive_j2_tausat_SinhFitA(matID)& - )**(1.0_pReal / constitutive_j2_tausat_SinhFitD(matID))& - + sqrt( ( gamma_dot / constitutive_j2_tausat_SinhFitA(matID) & - )**(2.0_pReal / constitutive_j2_tausat_SinhFitD(matID)) & + saturation = ( constitutive_j2_tausat(instance) & + + ( log( ( gamma_dot / constitutive_j2_tausat_SinhFitA(instance)& + )**(1.0_pReal / constitutive_j2_tausat_SinhFitD(instance))& + + sqrt( ( gamma_dot / constitutive_j2_tausat_SinhFitA(instance) & + )**(2.0_pReal / constitutive_j2_tausat_SinhFitD(instance)) & + 1.0_pReal ) & ) & ! asinh(K) = ln(K + sqrt(K^2 +1)) - )**(1.0_pReal / constitutive_j2_tausat_SinhFitC(matID)) & - / ( constitutive_j2_tausat_SinhFitB(matID) & - * (gamma_dot / constitutive_j2_gdot0(matID))**(1.0_pReal / constitutive_j2_n(matID)) & + )**(1.0_pReal / constitutive_j2_tausat_SinhFitC(instance)) & + / ( constitutive_j2_tausat_SinhFitB(instance) & + * (gamma_dot / constitutive_j2_gdot0(instance))**(1.0_pReal / constitutive_j2_n(instance)) & ) & ) endif - hardening = ( constitutive_j2_h0(matID) + constitutive_j2_h0_slopeLnRate(matID) * log(gamma_dot) ) & - * abs( 1.0_pReal - state(ipc,ip,el)%p(1)/saturation )**constitutive_j2_a(matID) & + hardening = ( constitutive_j2_h0(instance) + constitutive_j2_h0_slopeLnRate(instance) * log(gamma_dot) ) & + * abs( 1.0_pReal - state(ipc,ip,el)%p(1)/saturation )**constitutive_j2_a(instance) & * sign(1.0_pReal, 1.0_pReal - state(ipc,ip,el)%p(1)/saturation) else hardening = 0.0_pReal @@ -523,11 +523,11 @@ pure function constitutive_j2_postResults(Tstar_v,state,ipc,ip,el) real(pReal) :: & norm_Tstar_dev ! euclidean norm of Tstar_dev integer(pInt) :: & - matID, & + instance, & o, & c - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) !-------------------------------------------------------------------------------------------------- ! calculate deviatoric part of 2nd Piola-Kirchhoff stress and its norm @@ -539,15 +539,15 @@ pure function constitutive_j2_postResults(Tstar_v,state,ipc,ip,el) constitutive_j2_postResults = 0.0_pReal outputsLoop: do o = 1_pInt,phase_Noutput(material_phase(ipc,ip,el)) - select case(constitutive_j2_outputID(o,matID)) + select case(constitutive_j2_outputID(o,instance)) case (flowstress_ID) constitutive_j2_postResults(c+1_pInt) = state(ipc,ip,el)%p(1) c = c + 1_pInt case (strainrate_ID) constitutive_j2_postResults(c+1_pInt) = & - constitutive_j2_gdot0(matID) * ( sqrt(1.5_pReal) * norm_Tstar_dev & + constitutive_j2_gdot0(instance) * ( sqrt(1.5_pReal) * norm_Tstar_dev & / &!---------------------------------------------------------------------------------- - (constitutive_j2_fTaylor(matID) * state(ipc,ip,el)%p(1)) ) ** constitutive_j2_n(matID) + (constitutive_j2_fTaylor(instance) * state(ipc,ip,el)%p(1)) ) ** constitutive_j2_n(instance) c = c + 1_pInt end select enddo outputsLoop diff --git a/code/constitutive_none.f90 b/code/constitutive_none.f90 index 553477490..04d31372f 100644 --- a/code/constitutive_none.f90 +++ b/code/constitutive_none.f90 @@ -94,7 +94,7 @@ subroutine constitutive_none_init(fileUnit) integer(pInt), parameter :: MAXNCHUNKS = 7_pInt integer(pInt), dimension(1_pInt+2_pInt*MAXNCHUNKS) :: positions - integer(pInt) :: section = 0_pInt, maxNinstance, i + integer(pInt) :: section = 0_pInt, maxNinstance, instance character(len=32) :: & structure = '' character(len=65536) :: & @@ -136,7 +136,7 @@ subroutine constitutive_none_init(fileUnit) endif if (section > 0_pInt ) then ! do not short-circuit here (.and. with next if-statement). It's not safe in Fortran if (phase_plasticity(section) == PLASTICITY_NONE_ID) then ! one of my sections - i = phase_plasticityInstance(section) ! which instance of my plasticity is present phase + instance = phase_plasticityInstance(section) ! which instance of my plasticity is present phase positions = IO_stringPos(line,MAXNCHUNKS) tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key select case(tag) @@ -145,34 +145,34 @@ subroutine constitutive_none_init(fileUnit) structure = IO_lc(IO_stringValue(line,positions,2_pInt)) select case(structure(1:3)) case(LATTICE_iso_label) - constitutive_none_structureID(i) = LATTICE_iso_ID + constitutive_none_structureID(instance) = LATTICE_iso_ID case(LATTICE_fcc_label) - constitutive_none_structureID(i) = LATTICE_fcc_ID + constitutive_none_structureID(instance) = LATTICE_fcc_ID case(LATTICE_bcc_label) - constitutive_none_structureID(i) = LATTICE_bcc_ID + constitutive_none_structureID(instance) = LATTICE_bcc_ID case(LATTICE_hex_label) - constitutive_none_structureID(i) = LATTICE_hex_ID + constitutive_none_structureID(instance) = LATTICE_hex_ID case(LATTICE_ort_label) - constitutive_none_structureID(i) = LATTICE_ort_ID + constitutive_none_structureID(instance) = LATTICE_ort_ID end select case ('c11') - constitutive_none_Cslip_66(1,1,i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(1,1,instance) = IO_floatValue(line,positions,2_pInt) case ('c12') - constitutive_none_Cslip_66(1,2,i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(1,2,instance) = IO_floatValue(line,positions,2_pInt) case ('c13') - constitutive_none_Cslip_66(1,3,i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(1,3,instance) = IO_floatValue(line,positions,2_pInt) case ('c22') - constitutive_none_Cslip_66(2,2,i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(2,2,instance) = IO_floatValue(line,positions,2_pInt) case ('c23') - constitutive_none_Cslip_66(2,3,i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(2,3,instance) = IO_floatValue(line,positions,2_pInt) case ('c33') - constitutive_none_Cslip_66(3,3,i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(3,3,instance) = IO_floatValue(line,positions,2_pInt) case ('c44') - constitutive_none_Cslip_66(4,4,i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(4,4,instance) = IO_floatValue(line,positions,2_pInt) case ('c55') - constitutive_none_Cslip_66(5,5,i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(5,5,instance) = IO_floatValue(line,positions,2_pInt) case ('c66') - constitutive_none_Cslip_66(6,6,i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(6,6,instance) = IO_floatValue(line,positions,2_pInt) case default call IO_error(210_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_NONE_label//')') end select @@ -180,11 +180,11 @@ subroutine constitutive_none_init(fileUnit) endif enddo - instancesLoop: do i = 1_pInt,maxNinstance - constitutive_none_Cslip_66(1:6,1:6,i) = & - lattice_symmetrizeC66(constitutive_none_structureID(i),constitutive_none_Cslip_66(1:6,1:6,i)) - constitutive_none_Cslip_66(1:6,1:6,i) = & ! Literature data is Voigt, DAMASK uses Mandel - math_Mandel3333to66(math_Voigt66to3333(constitutive_none_Cslip_66(1:6,1:6,i))) + instancesLoop: do instance = 1_pInt,maxNinstance + constitutive_none_Cslip_66(1:6,1:6,instance) = & + lattice_symmetrizeC66(constitutive_none_structureID(instance),constitutive_none_Cslip_66(1:6,1:6,instance)) + constitutive_none_Cslip_66(1:6,1:6,instance) = & ! Literature data is Voigt, DAMASK uses Mandel + math_Mandel3333to66(math_Voigt66to3333(constitutive_none_Cslip_66(1:6,1:6,instance))) enddo instancesLoop end subroutine constitutive_none_init diff --git a/code/constitutive_phenopowerlaw.f90 b/code/constitutive_phenopowerlaw.f90 index d49ab1cb9..2acd300c1 100644 --- a/code/constitutive_phenopowerlaw.f90 +++ b/code/constitutive_phenopowerlaw.f90 @@ -163,7 +163,7 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) integer(pInt), dimension(7) :: configNchunks integer(pInt) :: & maxNinstance, & - i,j,k, f,o, & + instance,j,k, f,o, & Nchunks_SlipSlip, Nchunks_SlipTwin, Nchunks_TwinSlip, Nchunks_TwinTwin, & Nchunks_SlipFamilies, Nchunks_TwinFamilies, Nchunks_nonSchmid, & structID, index_myFamily, index_otherFamily, & @@ -257,9 +257,9 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) if (IO_getTag(line,'[',']') /= '') then ! next section section = section + 1_pInt ! advance section counter if (phase_plasticity(section) == PLASTICITY_PHENOPOWERLAW_ID) then - i = phase_plasticityInstance(section) - constitutive_phenopowerlaw_Cslip_66(1:6,1:6,i) = lattice_Cslip_66(1:6,1:6,section) - constitutive_phenopowerlaw_structure(i) = lattice_structure(section) + instance = phase_plasticityInstance(section) + constitutive_phenopowerlaw_Cslip_66(1:6,1:6,instance) = lattice_Cslip_66(1:6,1:6,section) + constitutive_phenopowerlaw_structure(instance) = lattice_structure(section) configNchunks = lattice_configNchunks(lattice_structureID(section)) Nchunks_SlipFamilies = configNchunks(1) Nchunks_TwinFamilies = configNchunks(2) @@ -272,37 +272,37 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) cycle ! skip to next line endif if (section > 0_pInt ) then; if (phase_plasticity(section) == PLASTICITY_PHENOPOWERLAW_ID) then ! one of my sections. Do not short-circuit here (.and. between if-statements), it's not safe in Fortran - i = phase_plasticityInstance(section) ! which instance of my plasticity is present phase + instance = phase_plasticityInstance(section) ! which instance of my plasticity is present phase positions = IO_stringPos(line,MAXNCHUNKS) tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key select case(tag) case ('plasticity','elasticity','lattice_structure','covera_ratio',& 'c11','c12','c13','c22','c23','c33','c44','c55','c66') case ('(output)') - constitutive_phenopowerlaw_Noutput(i) = constitutive_phenopowerlaw_Noutput(i) + 1_pInt - constitutive_phenopowerlaw_output(constitutive_phenopowerlaw_Noutput(i),i) = & + constitutive_phenopowerlaw_Noutput(instance) = constitutive_phenopowerlaw_Noutput(instance) + 1_pInt + constitutive_phenopowerlaw_output(constitutive_phenopowerlaw_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) select case(IO_lc(IO_stringValue(line,positions,2_pInt))) case ('resistance_slip') - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(i),i) = resistance_slip_ID + constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = resistance_slip_ID case ('accumulatedshear_slip') - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(i),i) = accumulatedshear_slip_ID + constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = accumulatedshear_slip_ID case ('shearrate_slip') - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(i),i) = shearrate_slip_ID + constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = shearrate_slip_ID case ('resolvedstress_slip') - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(i),i) = resolvedstress_slip_ID + constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = resolvedstress_slip_ID case ('totalshear') - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(i),i) = totalshear_ID + constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = totalshear_ID case ('resistance_twin') - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(i),i) = resistance_twin_ID + constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = resistance_twin_ID case ('accumulatedshear_twin') - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(i),i) = accumulatedshear_twin_ID + constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = accumulatedshear_twin_ID case ('shearrate_twin') - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(i),i) = shearrate_twin_ID + constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = shearrate_twin_ID case ('resolvedstress_twin') - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(i),i) = resolvedstress_twin_ID + constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = resolvedstress_twin_ID case ('totalvolfrac') - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(i),i) = totalvolfrac_ID + constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = totalvolfrac_ID case default call IO_error(105_pInt,ext_msg=IO_stringValue(line,positions,2_pInt)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') end select @@ -311,91 +311,91 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) call IO_warning(50_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') Nchunks_SlipFamilies = positions(1) - 1_pInt do j = 1_pInt, Nchunks_SlipFamilies - constitutive_phenopowerlaw_Nslip(j,i) = IO_intValue(line,positions,1_pInt+j) + constitutive_phenopowerlaw_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('gdot0_slip') - constitutive_phenopowerlaw_gdot0_slip(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_gdot0_slip(instance) = IO_floatValue(line,positions,2_pInt) case ('n_slip') - constitutive_phenopowerlaw_n_slip(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_n_slip(instance) = IO_floatValue(line,positions,2_pInt) case ('tau0_slip') do j = 1_pInt,Nchunks_SlipFamilies - constitutive_phenopowerlaw_tau0_slip(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_phenopowerlaw_tau0_slip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('tausat_slip') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_phenopowerlaw_tausat_slip(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_phenopowerlaw_tausat_slip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('a_slip', 'w0_slip') - constitutive_phenopowerlaw_a_slip(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_a_slip(instance) = IO_floatValue(line,positions,2_pInt) case ('ntwin') if (positions(1) < 1_pInt + Nchunks_TwinFamilies) & call IO_warning(51_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') Nchunks_TwinFamilies = positions(1) - 1_pInt do j = 1_pInt, Nchunks_TwinFamilies - constitutive_phenopowerlaw_Ntwin(j,i) = IO_intValue(line,positions,1_pInt+j) + constitutive_phenopowerlaw_Ntwin(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('gdot0_twin') - constitutive_phenopowerlaw_gdot0_twin(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_gdot0_twin(instance) = IO_floatValue(line,positions,2_pInt) case ('n_twin') - constitutive_phenopowerlaw_n_twin(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_n_twin(instance) = IO_floatValue(line,positions,2_pInt) case ('tau0_twin') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_phenopowerlaw_tau0_twin(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_phenopowerlaw_tau0_twin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('s_pr') - constitutive_phenopowerlaw_spr(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_spr(instance) = IO_floatValue(line,positions,2_pInt) case ('twin_b') - constitutive_phenopowerlaw_twinB(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_twinB(instance) = IO_floatValue(line,positions,2_pInt) case ('twin_c') - constitutive_phenopowerlaw_twinC(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_twinC(instance) = IO_floatValue(line,positions,2_pInt) case ('twin_d') - constitutive_phenopowerlaw_twinD(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_twinD(instance) = IO_floatValue(line,positions,2_pInt) case ('twin_e') - constitutive_phenopowerlaw_twinE(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_twinE(instance) = IO_floatValue(line,positions,2_pInt) case ('h0_slipslip') - constitutive_phenopowerlaw_h0_SlipSlip(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_h0_SlipSlip(instance) = IO_floatValue(line,positions,2_pInt) case ('h0_sliptwin') - constitutive_phenopowerlaw_h0_SlipTwin(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_h0_SlipTwin(instance) = IO_floatValue(line,positions,2_pInt) call IO_warning(42_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') case ('h0_twinslip') - constitutive_phenopowerlaw_h0_TwinSlip(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_h0_TwinSlip(instance) = IO_floatValue(line,positions,2_pInt) case ('h0_twintwin') - constitutive_phenopowerlaw_h0_TwinTwin(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_h0_TwinTwin(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_resistance') - constitutive_phenopowerlaw_aTolResistance(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_aTolResistance(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_shear') - constitutive_phenopowerlaw_aTolShear(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_aTolShear(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_twinfrac') - constitutive_phenopowerlaw_aTolTwinfrac(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_aTolTwinfrac(instance) = IO_floatValue(line,positions,2_pInt) case ('interaction_slipslip') if (positions(1) < 1_pInt + Nchunks_SlipSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') do j = 1_pInt, Nchunks_SlipSlip - constitutive_phenopowerlaw_interaction_SlipSlip(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_phenopowerlaw_interaction_SlipSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_sliptwin') if (positions(1) < 1_pInt + Nchunks_SlipTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') do j = 1_pInt, Nchunks_SlipTwin - constitutive_phenopowerlaw_interaction_SlipTwin(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_phenopowerlaw_interaction_SlipTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twinslip') if (positions(1) < 1_pInt + Nchunks_TwinSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') do j = 1_pInt, Nchunks_TwinSlip - constitutive_phenopowerlaw_interaction_TwinSlip(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_phenopowerlaw_interaction_TwinSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twintwin') if (positions(1) < 1_pInt + Nchunks_TwinTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') do j = 1_pInt, Nchunks_TwinTwin - constitutive_phenopowerlaw_interaction_TwinTwin(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_phenopowerlaw_interaction_TwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('nonschmid_coefficients') if (positions(1) < 1_pInt + Nchunks_nonSchmid) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') do j = 1_pInt,Nchunks_nonSchmid - constitutive_phenopowerlaw_nonSchmidCoeff(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_phenopowerlaw_nonSchmidCoeff(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case default call IO_error(210_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') @@ -403,44 +403,44 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) endif; endif enddo - sanityChecks: do i = 1_pInt,maxNinstance - constitutive_phenopowerlaw_Nslip(1:lattice_maxNslipFamily,i) = & - min(lattice_NslipSystem(1:lattice_maxNslipFamily,constitutive_phenopowerlaw_structure(i)),& ! limit active slip systems per family to min of available and requested - constitutive_phenopowerlaw_Nslip(1:lattice_maxNslipFamily,i)) - constitutive_phenopowerlaw_Ntwin(1:lattice_maxNtwinFamily,i) = & - min(lattice_NtwinSystem(1:lattice_maxNtwinFamily,constitutive_phenopowerlaw_structure(i)),& ! limit active twin systems per family to min of available and requested - constitutive_phenopowerlaw_Ntwin(:,i)) - constitutive_phenopowerlaw_totalNslip(i) = sum(constitutive_phenopowerlaw_Nslip(:,i)) ! how many slip systems altogether - constitutive_phenopowerlaw_totalNtwin(i) = sum(constitutive_phenopowerlaw_Ntwin(:,i)) ! how many twin systems altogether + sanityChecks: do instance = 1_pInt,maxNinstance + constitutive_phenopowerlaw_Nslip(1:lattice_maxNslipFamily,instance) = & + min(lattice_NslipSystem(1:lattice_maxNslipFamily,constitutive_phenopowerlaw_structure(instance)),& ! limit active slip systems per family to min of available and requested + constitutive_phenopowerlaw_Nslip(1:lattice_maxNslipFamily,instance)) + constitutive_phenopowerlaw_Ntwin(1:lattice_maxNtwinFamily,instance) = & + min(lattice_NtwinSystem(1:lattice_maxNtwinFamily,constitutive_phenopowerlaw_structure(instance)),& ! limit active twin systems per family to min of available and requested + constitutive_phenopowerlaw_Ntwin(:,instance)) + constitutive_phenopowerlaw_totalNslip(instance) = sum(constitutive_phenopowerlaw_Nslip(:,instance)) ! how many slip systems altogether + constitutive_phenopowerlaw_totalNtwin(instance) = sum(constitutive_phenopowerlaw_Ntwin(:,instance)) ! how many twin systems altogether - if (any(constitutive_phenopowerlaw_tau0_slip(:,i) < 0.0_pReal .and. & - constitutive_phenopowerlaw_Nslip(:,i) > 0)) call IO_error(211_pInt,el=i,ext_msg='tau0_slip (' & + if (any(constitutive_phenopowerlaw_tau0_slip(:,instance) < 0.0_pReal .and. & + constitutive_phenopowerlaw_Nslip(:,instance) > 0)) call IO_error(211_pInt,el=instance,ext_msg='tau0_slip (' & //PLASTICITY_PHENOPOWERLAW_label//')') - if (constitutive_phenopowerlaw_gdot0_slip(i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='gdot0_slip (' & + if (constitutive_phenopowerlaw_gdot0_slip(instance) <= 0.0_pReal) call IO_error(211_pInt,el=instance,ext_msg='gdot0_slip (' & //PLASTICITY_PHENOPOWERLAW_label//')') - if (constitutive_phenopowerlaw_n_slip(i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='n_slip (' & + if (constitutive_phenopowerlaw_n_slip(instance) <= 0.0_pReal) call IO_error(211_pInt,el=instance,ext_msg='n_slip (' & //PLASTICITY_PHENOPOWERLAW_label//')') - if (any(constitutive_phenopowerlaw_tausat_slip(:,i) <= 0.0_pReal .and. & - constitutive_phenopowerlaw_Nslip(:,i) > 0)) call IO_error(211_pInt,el=i,ext_msg='tausat_slip (' & + if (any(constitutive_phenopowerlaw_tausat_slip(:,instance) <= 0.0_pReal .and. & + constitutive_phenopowerlaw_Nslip(:,instance) > 0)) call IO_error(211_pInt,el=instance,ext_msg='tausat_slip (' & //PLASTICITY_PHENOPOWERLAW_label//')') - if (any(constitutive_phenopowerlaw_a_slip(i) == 0.0_pReal .and. & - constitutive_phenopowerlaw_Nslip(:,i) > 0)) call IO_error(211_pInt,el=i,ext_msg='a_slip (' & + if (any(constitutive_phenopowerlaw_a_slip(instance) == 0.0_pReal .and. & + constitutive_phenopowerlaw_Nslip(:,instance) > 0)) call IO_error(211_pInt,el=instance,ext_msg='a_slip (' & //PLASTICITY_PHENOPOWERLAW_label//')') - if (any(constitutive_phenopowerlaw_tau0_twin(:,i) < 0.0_pReal .and. & - constitutive_phenopowerlaw_Ntwin(:,i) > 0)) call IO_error(211_pInt,el=i,ext_msg='tau0_twin (' & + if (any(constitutive_phenopowerlaw_tau0_twin(:,instance) < 0.0_pReal .and. & + constitutive_phenopowerlaw_Ntwin(:,instance) > 0)) call IO_error(211_pInt,el=instance,ext_msg='tau0_twin (' & //PLASTICITY_PHENOPOWERLAW_label//')') - if ( constitutive_phenopowerlaw_gdot0_twin(i) <= 0.0_pReal .and. & - any(constitutive_phenopowerlaw_Ntwin(:,i) > 0)) call IO_error(211_pInt,el=i,ext_msg='gdot0_twin (' & + if ( constitutive_phenopowerlaw_gdot0_twin(instance) <= 0.0_pReal .and. & + any(constitutive_phenopowerlaw_Ntwin(:,instance) > 0)) call IO_error(211_pInt,el=instance,ext_msg='gdot0_twin (' & //PLASTICITY_PHENOPOWERLAW_label//')') - if ( constitutive_phenopowerlaw_n_twin(i) <= 0.0_pReal .and. & - any(constitutive_phenopowerlaw_Ntwin(:,i) > 0)) call IO_error(211_pInt,el=i,ext_msg='n_twin (' & + if ( constitutive_phenopowerlaw_n_twin(instance) <= 0.0_pReal .and. & + any(constitutive_phenopowerlaw_Ntwin(:,instance) > 0)) call IO_error(211_pInt,el=instance,ext_msg='n_twin (' & //PLASTICITY_PHENOPOWERLAW_label//')') - if (constitutive_phenopowerlaw_aTolResistance(i) <= 0.0_pReal) & - constitutive_phenopowerlaw_aTolResistance(i) = 1.0_pReal ! default absolute tolerance 1 Pa - if (constitutive_phenopowerlaw_aTolShear(i) <= 0.0_pReal) & - constitutive_phenopowerlaw_aTolShear(i) = 1.0e-6_pReal ! default absolute tolerance 1e-6 - if (constitutive_phenopowerlaw_aTolTwinfrac(i) <= 0.0_pReal) & - constitutive_phenopowerlaw_aTolTwinfrac(i) = 1.0e-6_pReal ! default absolute tolerance 1e-6 + if (constitutive_phenopowerlaw_aTolResistance(instance) <= 0.0_pReal) & + constitutive_phenopowerlaw_aTolResistance(instance) = 1.0_pReal ! default absolute tolerance 1 Pa + if (constitutive_phenopowerlaw_aTolShear(instance) <= 0.0_pReal) & + constitutive_phenopowerlaw_aTolShear(instance) = 1.0e-6_pReal ! default absolute tolerance 1e-6 + if (constitutive_phenopowerlaw_aTolTwinfrac(instance) <= 0.0_pReal) & + constitutive_phenopowerlaw_aTolTwinfrac(instance) = 1.0e-6_pReal ! default absolute tolerance 1e-6 enddo sanityChecks @@ -459,21 +459,21 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) maxval(constitutive_phenopowerlaw_totalNtwin),& maxNinstance), source=0.0_pReal) - instancesLoop: do i = 1_pInt,maxNinstance - outputsLoop: do o = 1_pInt,constitutive_phenopowerlaw_Noutput(i) - select case(constitutive_phenopowerlaw_outputID(o,i)) + instancesLoop: do instance = 1_pInt,maxNinstance + outputsLoop: do o = 1_pInt,constitutive_phenopowerlaw_Noutput(instance) + select case(constitutive_phenopowerlaw_outputID(o,instance)) case(resistance_slip_ID, & shearrate_slip_ID, & accumulatedshear_slip_ID, & resolvedstress_slip_ID & ) - mySize = constitutive_phenopowerlaw_totalNslip(i) + mySize = constitutive_phenopowerlaw_totalNslip(instance) case(resistance_twin_ID, & shearrate_twin_ID, & accumulatedshear_twin_ID, & resolvedstress_twin_ID & ) - mySize = constitutive_phenopowerlaw_totalNtwin(i) + mySize = constitutive_phenopowerlaw_totalNtwin(instance) case(totalshear_ID, & totalvolfrac_ID & ) @@ -482,67 +482,67 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) end select outputFound: if (mySize > 0_pInt) then - constitutive_phenopowerlaw_sizePostResult(o,i) = mySize - constitutive_phenopowerlaw_sizePostResults(i) = constitutive_phenopowerlaw_sizePostResults(i) + mySize + constitutive_phenopowerlaw_sizePostResult(o,instance) = mySize + constitutive_phenopowerlaw_sizePostResults(instance) = constitutive_phenopowerlaw_sizePostResults(instance) + mySize endif outputFound enddo outputsLoop - constitutive_phenopowerlaw_sizeDotState(i) = constitutive_phenopowerlaw_totalNslip(i)+ & - constitutive_phenopowerlaw_totalNtwin(i)+ & + constitutive_phenopowerlaw_sizeDotState(instance) = constitutive_phenopowerlaw_totalNslip(instance)+ & + constitutive_phenopowerlaw_totalNtwin(instance)+ & 2_pInt + & - constitutive_phenopowerlaw_totalNslip(i)+ & - constitutive_phenopowerlaw_totalNtwin(i) ! s_slip, s_twin, sum(gamma), sum(f), accshear_slip, accshear_twin - constitutive_phenopowerlaw_sizeState(i) = constitutive_phenopowerlaw_sizeDotState(i) + constitutive_phenopowerlaw_totalNslip(instance)+ & + constitutive_phenopowerlaw_totalNtwin(instance) ! s_slip, s_twin, sum(gamma), sum(f), accshear_slip, accshear_twin + constitutive_phenopowerlaw_sizeState(instance) = constitutive_phenopowerlaw_sizeDotState(instance) - structID = constitutive_phenopowerlaw_structure(i) + structID = constitutive_phenopowerlaw_structure(instance) do f = 1_pInt,lattice_maxNslipFamily ! >>> interaction slip -- X - index_myFamily = sum(constitutive_phenopowerlaw_Nslip(1:f-1_pInt,i)) - do j = 1_pInt,constitutive_phenopowerlaw_Nslip(f,i) ! loop over (active) systems in my family (slip) + index_myFamily = sum(constitutive_phenopowerlaw_Nslip(1:f-1_pInt,instance)) + do j = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) ! loop over (active) systems in my family (slip) do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(constitutive_phenopowerlaw_Nslip(1:o-1_pInt,i)) - do k = 1_pInt,constitutive_phenopowerlaw_Nslip(o,i) ! loop over (active) systems in other family (slip) - constitutive_phenopowerlaw_hardeningMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,i) = & + index_otherFamily = sum(constitutive_phenopowerlaw_Nslip(1:o-1_pInt,instance)) + do k = 1_pInt,constitutive_phenopowerlaw_Nslip(o,instance) ! loop over (active) systems in other family (slip) + constitutive_phenopowerlaw_hardeningMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,instance) = & constitutive_phenopowerlaw_interaction_SlipSlip(lattice_interactionSlipSlip( & sum(lattice_NslipSystem(1:f-1,structID))+j, & sum(lattice_NslipSystem(1:o-1,structID))+k, & - structID), i ) + structID), instance ) enddo; enddo do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(constitutive_phenopowerlaw_Ntwin(1:o-1_pInt,i)) - do k = 1_pInt,constitutive_phenopowerlaw_Ntwin(o,i) ! loop over (active) systems in other family (twin) - constitutive_phenopowerlaw_hardeningMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,i) = & + index_otherFamily = sum(constitutive_phenopowerlaw_Ntwin(1:o-1_pInt,instance)) + do k = 1_pInt,constitutive_phenopowerlaw_Ntwin(o,instance) ! loop over (active) systems in other family (twin) + constitutive_phenopowerlaw_hardeningMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,instance) = & constitutive_phenopowerlaw_interaction_SlipTwin(lattice_interactionSlipTwin( & sum(lattice_NslipSystem(1:f-1_pInt,structID))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,structID))+k, & - structID), i ) + structID), instance ) enddo; enddo enddo; enddo do f = 1_pInt,lattice_maxNtwinFamily ! >>> interaction twin -- X - index_myFamily = sum(constitutive_phenopowerlaw_Ntwin(1:f-1_pInt,i)) - do j = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,i) ! loop over (active) systems in my family (twin) + index_myFamily = sum(constitutive_phenopowerlaw_Ntwin(1:f-1_pInt,instance)) + do j = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,instance) ! loop over (active) systems in my family (twin) do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(constitutive_phenopowerlaw_Nslip(1:o-1_pInt,i)) - do k = 1_pInt,constitutive_phenopowerlaw_Nslip(o,i) ! loop over (active) systems in other family (slip) - constitutive_phenopowerlaw_hardeningMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,i) = & + index_otherFamily = sum(constitutive_phenopowerlaw_Nslip(1:o-1_pInt,instance)) + do k = 1_pInt,constitutive_phenopowerlaw_Nslip(o,instance) ! loop over (active) systems in other family (slip) + constitutive_phenopowerlaw_hardeningMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,instance) = & constitutive_phenopowerlaw_interaction_TwinSlip(lattice_interactionTwinSlip( & sum(lattice_NtwinSystem(1:f-1_pInt,structID))+j, & sum(lattice_NslipSystem(1:o-1_pInt,structID))+k, & - structID), i ) + structID), instance ) enddo; enddo do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(constitutive_phenopowerlaw_Ntwin(1:o-1_pInt,i)) - do k = 1_pInt,constitutive_phenopowerlaw_Ntwin(o,i) ! loop over (active) systems in other family (twin) - constitutive_phenopowerlaw_hardeningMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,i) = & + index_otherFamily = sum(constitutive_phenopowerlaw_Ntwin(1:o-1_pInt,instance)) + do k = 1_pInt,constitutive_phenopowerlaw_Ntwin(o,instance) ! loop over (active) systems in other family (twin) + constitutive_phenopowerlaw_hardeningMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,instance) = & constitutive_phenopowerlaw_interaction_TwinTwin(lattice_interactionTwinTwin( & sum(lattice_NtwinSystem(1:f-1_pInt,structID))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,structID))+k, & - structID), i ) + structID), instance ) enddo; enddo enddo; enddo @@ -555,15 +555,15 @@ end subroutine constitutive_phenopowerlaw_init !-------------------------------------------------------------------------------------------------- !> @brief sets the initial microstructural state for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -pure function constitutive_phenopowerlaw_stateInit(matID) +pure function constitutive_phenopowerlaw_stateInit(instance) use lattice, only: & lattice_maxNslipFamily, & lattice_maxNtwinFamily implicit none integer(pInt), intent(in) :: & - matID !< number specifying the instance of the plasticity - real(pReal), dimension(constitutive_phenopowerlaw_sizeDotState(matID)) :: & + instance !< number specifying the instance of the plasticity + real(pReal), dimension(constitutive_phenopowerlaw_sizeDotState(instance)) :: & constitutive_phenopowerlaw_stateInit integer(pInt) :: & i @@ -572,17 +572,17 @@ pure function constitutive_phenopowerlaw_stateInit(matID) do i = 1_pInt,lattice_maxNslipFamily constitutive_phenopowerlaw_stateInit(1+& - sum(constitutive_phenopowerlaw_Nslip(1:i-1,matID)) : & - sum(constitutive_phenopowerlaw_Nslip(1:i ,matID))) = & - constitutive_phenopowerlaw_tau0_slip(i,matID) + sum(constitutive_phenopowerlaw_Nslip(1:i-1,instance)) : & + sum(constitutive_phenopowerlaw_Nslip(1:i ,instance))) = & + constitutive_phenopowerlaw_tau0_slip(i,instance) enddo do i = 1_pInt,lattice_maxNtwinFamily - constitutive_phenopowerlaw_stateInit(1+sum(constitutive_phenopowerlaw_Nslip(:,matID))+& - sum(constitutive_phenopowerlaw_Ntwin(1:i-1,matID)) : & - sum(constitutive_phenopowerlaw_Nslip(:,matID))+& - sum(constitutive_phenopowerlaw_Ntwin(1:i ,matID))) = & - constitutive_phenopowerlaw_tau0_twin(i,matID) + constitutive_phenopowerlaw_stateInit(1+sum(constitutive_phenopowerlaw_Nslip(:,instance))+& + sum(constitutive_phenopowerlaw_Ntwin(1:i-1,instance)) : & + sum(constitutive_phenopowerlaw_Nslip(:,instance))+& + sum(constitutive_phenopowerlaw_Ntwin(1:i ,instance))) = & + constitutive_phenopowerlaw_tau0_twin(i,instance) enddo end function constitutive_phenopowerlaw_stateInit @@ -591,28 +591,28 @@ end function constitutive_phenopowerlaw_stateInit !-------------------------------------------------------------------------------------------------- !> @brief sets the relevant state values for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -pure function constitutive_phenopowerlaw_aTolState(matID) +pure function constitutive_phenopowerlaw_aTolState(instance) implicit none - integer(pInt), intent(in) :: matID !< number specifying the instance of the plasticity + integer(pInt), intent(in) :: instance !< number specifying the instance of the plasticity -real(pReal), dimension(constitutive_phenopowerlaw_sizeState(matID)) :: & +real(pReal), dimension(constitutive_phenopowerlaw_sizeState(instance)) :: & constitutive_phenopowerlaw_aTolState - constitutive_phenopowerlaw_aTolState(1:constitutive_phenopowerlaw_totalNslip(matID)+ & - constitutive_phenopowerlaw_totalNtwin(matID)) = & - constitutive_phenopowerlaw_aTolResistance(matID) - constitutive_phenopowerlaw_aTolState(1+constitutive_phenopowerlaw_totalNslip(matID)+ & - constitutive_phenopowerlaw_totalNtwin(matID)) = & - constitutive_phenopowerlaw_aTolShear(matID) - constitutive_phenopowerlaw_aTolState(2+constitutive_phenopowerlaw_totalNslip(matID)+ & - constitutive_phenopowerlaw_totalNtwin(matID)) = & - constitutive_phenopowerlaw_aTolTwinFrac(matID) - constitutive_phenopowerlaw_aTolState(3+constitutive_phenopowerlaw_totalNslip(matID)+ & - constitutive_phenopowerlaw_totalNtwin(matID): & - 2+2*(constitutive_phenopowerlaw_totalNslip(matID)+ & - constitutive_phenopowerlaw_totalNtwin(matID))) = & - constitutive_phenopowerlaw_aTolShear(matID) + constitutive_phenopowerlaw_aTolState(1:constitutive_phenopowerlaw_totalNslip(instance)+ & + constitutive_phenopowerlaw_totalNtwin(instance)) = & + constitutive_phenopowerlaw_aTolResistance(instance) + constitutive_phenopowerlaw_aTolState(1+constitutive_phenopowerlaw_totalNslip(instance)+ & + constitutive_phenopowerlaw_totalNtwin(instance)) = & + constitutive_phenopowerlaw_aTolShear(instance) + constitutive_phenopowerlaw_aTolState(2+constitutive_phenopowerlaw_totalNslip(instance)+ & + constitutive_phenopowerlaw_totalNtwin(instance)) = & + constitutive_phenopowerlaw_aTolTwinFrac(instance) + constitutive_phenopowerlaw_aTolState(3+constitutive_phenopowerlaw_totalNslip(instance)+ & + constitutive_phenopowerlaw_totalNtwin(instance): & + 2+2*(constitutive_phenopowerlaw_totalNslip(instance)+ & + constitutive_phenopowerlaw_totalNtwin(instance))) = & + constitutive_phenopowerlaw_aTolShear(instance) end function constitutive_phenopowerlaw_aTolState @@ -688,7 +688,7 @@ pure subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar state !< microstructure state integer(pInt) :: & - matID, & + instance, & nSlip, & nTwin,structID,index_Gamma,index_F,index_myFamily, & f,i,j,k,l,m,n @@ -701,11 +701,11 @@ pure subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar real(pReal), dimension(constitutive_phenopowerlaw_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_twin,dgdot_dtautwin,tau_twin - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) - structID = constitutive_phenopowerlaw_structure(matID) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + structID = constitutive_phenopowerlaw_structure(instance) - nSlip = constitutive_phenopowerlaw_totalNslip(matID) - nTwin = constitutive_phenopowerlaw_totalNtwin(matID) + nSlip = constitutive_phenopowerlaw_totalNslip(instance) + nTwin = constitutive_phenopowerlaw_totalNtwin(instance) index_Gamma = nSlip + nTwin + 1_pInt index_F = nSlip + nTwin + 2_pInt @@ -717,7 +717,7 @@ pure subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar j = 0_pInt slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) ! process each (active) slip system in family j = j+1_pInt !-------------------------------------------------------------------------------------------------- @@ -727,20 +727,20 @@ pure subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar nonSchmid_tensor(1:3,1:3,1) = lattice_Sslip(1:3,1:3,1,index_myFamily+i,structID) nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,1) do k = 1,lattice_NnonSchmid(structID) - tau_slip_pos(j) = tau_slip_pos(j) + constitutive_phenopowerlaw_nonSchmidCoeff(k,matID)* & + tau_slip_pos(j) = tau_slip_pos(j) + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k,index_myFamily+i,structID)) - tau_slip_neg(j) = tau_slip_neg(j) + constitutive_phenopowerlaw_nonSchmidCoeff(k,matID)* & + tau_slip_neg(j) = tau_slip_neg(j) + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k+1,index_myFamily+i,structID)) - nonSchmid_tensor(1:3,1:3,1) = nonSchmid_tensor(1:3,1:3,1) + constitutive_phenopowerlaw_nonSchmidCoeff(k,matID)*& + nonSchmid_tensor(1:3,1:3,1) = nonSchmid_tensor(1:3,1:3,1) + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)*& lattice_Sslip(1:3,1:3,2*k,index_myFamily+i,structID) - nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,2) + constitutive_phenopowerlaw_nonSchmidCoeff(k,matID)*& + nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,2) + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)*& lattice_Sslip(1:3,1:3,2*k+1,index_myFamily+i,structID) enddo - gdot_slip_pos(j) = 0.5_pReal*constitutive_phenopowerlaw_gdot0_slip(matID)* & - ((abs(tau_slip_pos(j))/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(matID))*& + gdot_slip_pos(j) = 0.5_pReal*constitutive_phenopowerlaw_gdot0_slip(instance)* & + ((abs(tau_slip_pos(j))/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(instance))*& sign(1.0_pReal,tau_slip_pos(j)) - gdot_slip_neg(j) = 0.5_pReal*constitutive_phenopowerlaw_gdot0_slip(matID)* & - ((abs(tau_slip_neg(j))/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(matID))*& + gdot_slip_neg(j) = 0.5_pReal*constitutive_phenopowerlaw_gdot0_slip(instance)* & + ((abs(tau_slip_neg(j))/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(instance))*& sign(1.0_pReal,tau_slip_neg(j)) Lp = Lp + (1.0_pReal-state(ipc,ip,el)%p(index_F))*& ! 1-F (gdot_slip_pos(j)+gdot_slip_neg(j))*lattice_Sslip(1:3,1:3,1,index_myFamily+i,structID) @@ -748,7 +748,7 @@ pure subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar !-------------------------------------------------------------------------------------------------- ! Calculation of the tangent of Lp if (gdot_slip_pos(j) /= 0.0_pReal) then - dgdot_dtauslip_pos(j) = gdot_slip_pos(j)*constitutive_phenopowerlaw_n_slip(matID)/tau_slip_pos(j) + dgdot_dtauslip_pos(j) = gdot_slip_pos(j)*constitutive_phenopowerlaw_n_slip(instance)/tau_slip_pos(j) forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & dLp_dTstar3333(k,l,m,n) = dLp_dTstar3333(k,l,m,n) + & dgdot_dtauslip_pos(j)*lattice_Sslip(k,l,1,index_myFamily+i,structID)* & @@ -756,7 +756,7 @@ pure subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar endif if (gdot_slip_neg(j) /= 0.0_pReal) then - dgdot_dtauslip_neg(j) = gdot_slip_neg(j)*constitutive_phenopowerlaw_n_slip(matID)/tau_slip_neg(j) + dgdot_dtauslip_neg(j) = gdot_slip_neg(j)*constitutive_phenopowerlaw_n_slip(instance)/tau_slip_neg(j) forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & dLp_dTstar3333(k,l,m,n) = dLp_dTstar3333(k,l,m,n) + & dgdot_dtauslip_neg(j)*lattice_Sslip(k,l,1,index_myFamily+i,structID)* & @@ -768,22 +768,22 @@ pure subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar j = 0_pInt twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,matID) ! process each (active) twin system in family + do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,instance) ! process each (active) twin system in family j = j+1_pInt !-------------------------------------------------------------------------------------------------- ! Calculation of Lp tau_twin(j) = dot_product(Tstar_v,lattice_Stwin_v(1:6,index_myFamily+i,structID)) gdot_twin(j) = (1.0_pReal-state(ipc,ip,el)%p(index_F))*& ! 1-F - constitutive_phenopowerlaw_gdot0_twin(matID)*& + constitutive_phenopowerlaw_gdot0_twin(instance)*& (abs(tau_twin(j))/state(ipc,ip,el)%p(nSlip+j))**& - constitutive_phenopowerlaw_n_twin(matID)*max(0.0_pReal,sign(1.0_pReal,tau_twin(j))) + constitutive_phenopowerlaw_n_twin(instance)*max(0.0_pReal,sign(1.0_pReal,tau_twin(j))) Lp = Lp + gdot_twin(j)*lattice_Stwin(1:3,1:3,index_myFamily+i,structID) !-------------------------------------------------------------------------------------------------- ! Calculation of the tangent of Lp if (gdot_twin(j) /= 0.0_pReal) then - dgdot_dtautwin(j) = gdot_twin(j)*constitutive_phenopowerlaw_n_twin(matID)/tau_twin(j) + dgdot_dtautwin(j) = gdot_twin(j)*constitutive_phenopowerlaw_n_twin(instance)/tau_twin(j) forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & dLp_dTstar3333(k,l,m,n) = dLp_dTstar3333(k,l,m,n) + & dgdot_dtautwin(j)*lattice_Stwin(k,l,index_myFamily+i,structID)* & @@ -834,7 +834,7 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,state,ipc,ip,el) constitutive_phenopowerlaw_dotState integer(pInt) :: & - matID,structID, & + instance,structID, & nSlip,nTwin, & f,i,j,k, & index_Gamma,index_F,index_myFamily, & @@ -849,11 +849,11 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,state,ipc,ip,el) gdot_twin,tau_twin,left_TwinSlip,left_TwinTwin,right_SlipTwin,right_TwinTwin - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) - structID = constitutive_phenopowerlaw_structure(matID) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + structID = constitutive_phenopowerlaw_structure(instance) - nSlip = constitutive_phenopowerlaw_totalNslip(matID) - nTwin = constitutive_phenopowerlaw_totalNtwin(matID) + nSlip = constitutive_phenopowerlaw_totalNslip(instance) + nTwin = constitutive_phenopowerlaw_totalNtwin(instance) index_Gamma = nSlip + nTwin + 1_pInt index_F = nSlip + nTwin + 2_pInt @@ -864,30 +864,30 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,state,ipc,ip,el) !-------------------------------------------------------------------------------------------------- ! system-independent (nonlinear) prefactors to M_Xx (X influenced by x) matrices - c_SlipSlip = constitutive_phenopowerlaw_h0_SlipSlip(matID)*& - (1.0_pReal + constitutive_phenopowerlaw_twinC(matID)*state(ipc,ip,el)%p(index_F)**& - constitutive_phenopowerlaw_twinB(matID)) + c_SlipSlip = constitutive_phenopowerlaw_h0_SlipSlip(instance)*& + (1.0_pReal + constitutive_phenopowerlaw_twinC(instance)*state(ipc,ip,el)%p(index_F)**& + constitutive_phenopowerlaw_twinB(instance)) c_SlipTwin = 0.0_pReal - c_TwinSlip = constitutive_phenopowerlaw_h0_TwinSlip(matID)*& - state(ipc,ip,el)%p(index_Gamma)**constitutive_phenopowerlaw_twinE(matID) - c_TwinTwin = constitutive_phenopowerlaw_h0_TwinTwin(matID)*& - state(ipc,ip,el)%p(index_F)**constitutive_phenopowerlaw_twinD(matID) + c_TwinSlip = constitutive_phenopowerlaw_h0_TwinSlip(instance)*& + state(ipc,ip,el)%p(index_Gamma)**constitutive_phenopowerlaw_twinE(instance) + c_TwinTwin = constitutive_phenopowerlaw_h0_TwinTwin(instance)*& + state(ipc,ip,el)%p(index_F)**constitutive_phenopowerlaw_twinD(instance) !-------------------------------------------------------------------------------------------------- ! calculate left and right vectors and calculate dot gammas - ssat_offset = constitutive_phenopowerlaw_spr(matID)*sqrt(state(ipc,ip,el)%p(index_F)) + ssat_offset = constitutive_phenopowerlaw_spr(instance)*sqrt(state(ipc,ip,el)%p(index_F)) j = 0_pInt slipFamiliesLoop1: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) ! process each (active) slip system in family j = j+1_pInt left_SlipSlip(j) = 1.0_pReal ! no system-dependent left part left_SlipTwin(j) = 1.0_pReal ! no system-dependent left part right_SlipSlip(j) = abs(1.0_pReal-state(ipc,ip,el)%p(j) / & - (constitutive_phenopowerlaw_tausat_slip(f,matID)+ssat_offset)) & - **constitutive_phenopowerlaw_a_slip(matID)& + (constitutive_phenopowerlaw_tausat_slip(f,instance)+ssat_offset)) & + **constitutive_phenopowerlaw_a_slip(instance)& *sign(1.0_pReal,1.0_pReal-state(ipc,ip,el)%p(j) / & - (constitutive_phenopowerlaw_tausat_slip(f,matID)+ssat_offset)) + (constitutive_phenopowerlaw_tausat_slip(f,instance)+ssat_offset)) right_TwinSlip(j) = 1.0_pReal ! no system-dependent part !-------------------------------------------------------------------------------------------------- @@ -895,14 +895,14 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,state,ipc,ip,el) tau_slip_pos(j) = dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,structID)) tau_slip_neg(j) = tau_slip_pos(j) do k = 1,lattice_NnonSchmid(structID) - tau_slip_pos(j) = tau_slip_pos(j) + constitutive_phenopowerlaw_nonSchmidCoeff(k,matID)* & + tau_slip_pos(j) = tau_slip_pos(j) + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k,index_myFamily+i,structID)) - tau_slip_neg(j) = tau_slip_neg(j) + constitutive_phenopowerlaw_nonSchmidCoeff(k,matID)* & + tau_slip_neg(j) = tau_slip_neg(j) + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k+1,index_myFamily+i,structID)) enddo - gdot_slip(j) = constitutive_phenopowerlaw_gdot0_slip(matID)*0.5_pReal* & - ((abs(tau_slip_pos(j))/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(matID) & - +(abs(tau_slip_neg(j))/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(matID))& + gdot_slip(j) = constitutive_phenopowerlaw_gdot0_slip(instance)*0.5_pReal* & + ((abs(tau_slip_pos(j))/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(instance) & + +(abs(tau_slip_neg(j))/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(instance))& *sign(1.0_pReal,tau_slip_pos(j)) enddo enddo slipFamiliesLoop1 @@ -910,7 +910,7 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,state,ipc,ip,el) j = 0_pInt twinFamiliesLoop1: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,matID) ! process each (active) twin system in family + do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,instance) ! process each (active) twin system in family j = j+1_pInt left_TwinSlip(j) = 1.0_pReal ! no system-dependent right part left_TwinTwin(j) = 1.0_pReal ! no system-dependent right part @@ -921,9 +921,9 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,state,ipc,ip,el) ! Calculation of dot vol frac tau_twin(j) = dot_product(Tstar_v,lattice_Stwin_v(1:6,index_myFamily+i,structID)) gdot_twin(j) = (1.0_pReal-state(ipc,ip,el)%p(index_F))*& ! 1-F - constitutive_phenopowerlaw_gdot0_twin(matID)*& + constitutive_phenopowerlaw_gdot0_twin(instance)*& (abs(tau_twin(j))/state(ipc,ip,el)%p(nSlip+j))**& - constitutive_phenopowerlaw_n_twin(matID)*max(0.0_pReal,sign(1.0_pReal,tau_twin(j))) + constitutive_phenopowerlaw_n_twin(instance)*max(0.0_pReal,sign(1.0_pReal,tau_twin(j))) enddo enddo twinFamiliesLoop1 @@ -931,14 +931,14 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,state,ipc,ip,el) ! calculate the overall hardening based on above j = 0_pInt slipFamiliesLoop2: do f = 1_pInt,lattice_maxNslipFamily - do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) ! process each (active) slip system in family j = j+1_pInt constitutive_phenopowerlaw_dotState(j) = & ! evolution of slip resistance j c_SlipSlip * left_SlipSlip(j) * & - dot_product(constitutive_phenopowerlaw_hardeningMatrix_SlipSlip(j,1:nSlip,matID), & + dot_product(constitutive_phenopowerlaw_hardeningMatrix_SlipSlip(j,1:nSlip,instance), & right_SlipSlip*abs(gdot_slip)) + & ! dot gamma_slip modulated by right-side slip factor c_SlipTwin * left_SlipTwin(j) * & - dot_product(constitutive_phenopowerlaw_hardeningMatrix_SlipTwin(j,1:nTwin,matID), & + dot_product(constitutive_phenopowerlaw_hardeningMatrix_SlipTwin(j,1:nTwin,instance), & right_SlipTwin*gdot_twin) ! dot gamma_twin modulated by right-side twin factor constitutive_phenopowerlaw_dotState(index_Gamma) = constitutive_phenopowerlaw_dotState(index_Gamma) + & abs(gdot_slip(j)) @@ -949,14 +949,14 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,state,ipc,ip,el) j = 0_pInt twinFamiliesLoop2: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,matID) ! process each (active) twin system in family + do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,instance) ! process each (active) twin system in family j = j+1_pInt constitutive_phenopowerlaw_dotState(j+nSlip) = & ! evolution of twin resistance j c_TwinSlip * left_TwinSlip(j) * & - dot_product(constitutive_phenopowerlaw_hardeningMatrix_TwinSlip(j,1:nSlip,matID), & + dot_product(constitutive_phenopowerlaw_hardeningMatrix_TwinSlip(j,1:nSlip,instance), & right_TwinSlip*abs(gdot_slip)) + & ! dot gamma_slip modulated by right-side slip factor c_TwinTwin * left_TwinTwin(j) * & - dot_product(constitutive_phenopowerlaw_hardeningMatrix_TwinTwin(j,1:nTwin,matID), & + dot_product(constitutive_phenopowerlaw_hardeningMatrix_TwinTwin(j,1:nTwin,instance), & right_TwinTwin*gdot_twin) ! dot gamma_twin modulated by right-side twin factor if (state(ipc,ip,el)%p(index_F) < 0.98_pReal) & ! ensure twin volume fractions stays below 1.0 constitutive_phenopowerlaw_dotState(index_F) = constitutive_phenopowerlaw_dotState(index_F) + & @@ -1008,7 +1008,7 @@ pure function constitutive_phenopowerlaw_postResults(Tstar_v,state,ipc,ip,el) constitutive_phenopowerlaw_postResults integer(pInt) :: & - matID,structID, & + instance,structID, & nSlip,nTwin, & o,f,i,c,j,k, & index_Gamma,index_F,index_accshear_slip,index_accshear_twin,index_myFamily @@ -1016,11 +1016,11 @@ pure function constitutive_phenopowerlaw_postResults(Tstar_v,state,ipc,ip,el) tau_slip_pos,tau_slip_neg,tau - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) - structID = constitutive_phenopowerlaw_structure(matID) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + structID = constitutive_phenopowerlaw_structure(instance) - nSlip = constitutive_phenopowerlaw_totalNslip(matID) - nTwin = constitutive_phenopowerlaw_totalNtwin(matID) + nSlip = constitutive_phenopowerlaw_totalNslip(instance) + nTwin = constitutive_phenopowerlaw_totalNtwin(instance) index_Gamma = nSlip + nTwin + 1_pInt index_F = nSlip + nTwin + 2_pInt @@ -1031,7 +1031,7 @@ pure function constitutive_phenopowerlaw_postResults(Tstar_v,state,ipc,ip,el) c = 0_pInt outputsLoop: do o = 1_pInt,phase_Noutput(material_phase(ipc,ip,el)) - select case(constitutive_phenopowerlaw_outputID(o,matID)) + select case(constitutive_phenopowerlaw_outputID(o,instance)) case (resistance_slip_ID) constitutive_phenopowerlaw_postResults(c+1_pInt:c+nSlip) = state(ipc,ip,el)%p(1:nSlip) c = c + nSlip @@ -1045,19 +1045,19 @@ pure function constitutive_phenopowerlaw_postResults(Tstar_v,state,ipc,ip,el) j = 0_pInt slipFamiliesLoop1: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) ! process each (active) slip system in family j = j + 1_pInt tau_slip_pos = dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,structID)) tau_slip_neg = tau_slip_pos do k = 1,lattice_NnonSchmid(structID) - tau_slip_pos = tau_slip_pos + constitutive_phenopowerlaw_nonSchmidCoeff(k,matID)* & + tau_slip_pos = tau_slip_pos + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k,index_myFamily+i,structID)) - tau_slip_neg = tau_slip_neg + constitutive_phenopowerlaw_nonSchmidCoeff(k,matID)* & + tau_slip_neg = tau_slip_neg + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k+1,index_myFamily+i,structID)) enddo - constitutive_phenopowerlaw_postResults(c+j) = constitutive_phenopowerlaw_gdot0_slip(matID)*0.5_pReal* & - ((abs(tau_slip_pos)/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(matID) & - +(abs(tau_slip_neg)/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(matID))& + constitutive_phenopowerlaw_postResults(c+j) = constitutive_phenopowerlaw_gdot0_slip(instance)*0.5_pReal* & + ((abs(tau_slip_pos)/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(instance) & + +(abs(tau_slip_neg)/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(instance))& *sign(1.0_pReal,tau_slip_pos) enddo enddo slipFamiliesLoop1 @@ -1067,7 +1067,7 @@ pure function constitutive_phenopowerlaw_postResults(Tstar_v,state,ipc,ip,el) j = 0_pInt slipFamiliesLoop2: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) ! process each (active) slip system in family j = j + 1_pInt constitutive_phenopowerlaw_postResults(c+j) = & dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,structID)) @@ -1094,13 +1094,13 @@ pure function constitutive_phenopowerlaw_postResults(Tstar_v,state,ipc,ip,el) j = 0_pInt twinFamiliesLoop1: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,matID) ! process each (active) twin system in family + do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,instance) ! process each (active) twin system in family j = j + 1_pInt tau = dot_product(Tstar_v,lattice_Stwin_v(1:6,index_myFamily+i,structID)) constitutive_phenopowerlaw_postResults(c+j) = (1.0_pReal-state(ipc,ip,el)%p(index_F))*& ! 1-F - constitutive_phenopowerlaw_gdot0_twin(matID)*& + constitutive_phenopowerlaw_gdot0_twin(instance)*& (abs(tau)/state(ipc,ip,el)%p(j+nSlip))**& - constitutive_phenopowerlaw_n_twin(matID)*max(0.0_pReal,sign(1.0_pReal,tau)) + constitutive_phenopowerlaw_n_twin(instance)*max(0.0_pReal,sign(1.0_pReal,tau)) enddo enddo twinFamiliesLoop1 c = c + nTwin @@ -1109,7 +1109,7 @@ pure function constitutive_phenopowerlaw_postResults(Tstar_v,state,ipc,ip,el) j = 0_pInt twinFamiliesLoop2: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,matID) ! process each (active) twin system in family + do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,instance) ! process each (active) twin system in family j = j + 1_pInt constitutive_phenopowerlaw_postResults(c+j) = & dot_product(Tstar_v,lattice_Stwin_v(1:6,index_myFamily+i,structID)) diff --git a/code/constitutive_titanmod.f90 b/code/constitutive_titanmod.f90 index 4d92d7098..d81ca20fd 100644 --- a/code/constitutive_titanmod.f90 +++ b/code/constitutive_titanmod.f90 @@ -259,7 +259,7 @@ subroutine constitutive_titanmod_init(fileUnit) integer(pInt), dimension(7) :: configNchunks integer(pInt) :: & section = 0_pInt, & - i, j, k, l, m, n, p, q, r, & + instance, j, k, l, m, n, p, q, r, & f, o, & s, s1, s2, & t, t1, t2, & @@ -383,75 +383,75 @@ subroutine constitutive_titanmod_init(fileUnit) endif if (section > 0_pInt ) then ! do not short-circuit here (.and. with next if-statement). It's not safe in Fortran if (phase_plasticity(section) == PLASTICITY_TITANMOD_ID) then ! one of my sections - i = phase_plasticityInstance(section) ! which instance of my plasticity is present phase + instance = phase_plasticityInstance(section) ! which instance of my plasticity is present phase positions = IO_stringPos(line,MAXNCHUNKS) tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key select case(tag) case ('plasticity','elasticity') cycle case ('(output)') - constitutive_titanmod_Noutput(i) = constitutive_titanmod_Noutput(i) + 1_pInt - constitutive_titanmod_output(constitutive_titanmod_Noutput(i),i) = & + constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt + constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) select case(IO_lc(IO_stringValue(line,positions,2_pInt))) case ('rhoedge') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = rhoedge_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoedge_ID case ('rhoscrew') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = rhoscrew_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoscrew_ID case ('segment_edge') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = segment_edge_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = segment_edge_ID case ('segment_screw') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = segment_screw_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = segment_screw_ID case ('resistance_edge') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = resistance_edge_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = resistance_edge_ID case ('resistance_screw') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = resistance_screw_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = resistance_screw_ID case ('velocity_edge') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = velocity_edge_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = velocity_edge_ID case ('velocity_screw') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = velocity_screw_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = velocity_screw_ID case ('tau_slip') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = tau_slip_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = tau_slip_ID case ('gdot_slip_edge') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = gdot_slip_edge_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = gdot_slip_edge_ID case ('gdot_slip_screw') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = gdot_slip_screw_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = gdot_slip_screw_ID case ('gdot_slip') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = gdot_slip_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = gdot_slip_ID case ('stressratio_edge_p') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = stressratio_edge_p_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = stressratio_edge_p_ID case ('stressratio_screw_p') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = stressratio_screw_p_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = stressratio_screw_p_ID case ('shear_system') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = shear_system_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = shear_system_ID case ('twin_fraction') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = twin_fraction_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = twin_fraction_ID case ('shear_basal') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = shear_basal_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = shear_basal_ID case ('shear_prism') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = shear_prism_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = shear_prism_ID case ('shear_pyra') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = shear_pyra_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = shear_pyra_ID case ('shear_pyrca') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = shear_pyrca_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = shear_pyrca_ID case ('rhoedge_basal') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = rhoedge_basal_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoedge_basal_ID case ('rhoedge_prism') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = rhoedge_prism_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoedge_prism_ID case ('rhoedge_pyra') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = rhoedge_pyra_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoedge_pyra_ID case ('rhoedge_pyrca') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = rhoedge_pyrca_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoedge_pyrca_ID case ('rhoscrew_basal') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = rhoscrew_basal_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoscrew_basal_ID case ('rhoscrew_prism') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = rhoscrew_prism_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoscrew_prism_ID case ('rhoscrew_pyra') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = rhoscrew_pyra_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoscrew_pyra_ID case ('rhoscrew_pyrca') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = rhoscrew_pyrca_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoscrew_pyrca_ID case ('shear_total') - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(i),i) = shear_total_ID + constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = shear_total_ID case default call IO_error(105_pInt,ext_msg=IO_stringValue(line,positions,2_pInt)//' ('//PLASTICITY_TITANMOD_label//')') end select @@ -459,17 +459,17 @@ subroutine constitutive_titanmod_init(fileUnit) structure = IO_lc(IO_stringValue(line,positions,2_pInt)) select case(structure(1:3)) case(LATTICE_iso_label) - constitutive_titanmod_structureID(i) = LATTICE_iso_ID + constitutive_titanmod_structureID(instance) = LATTICE_iso_ID case(LATTICE_fcc_label) - constitutive_titanmod_structureID(i) = LATTICE_fcc_ID + constitutive_titanmod_structureID(instance) = LATTICE_fcc_ID case(LATTICE_bcc_label) - constitutive_titanmod_structureID(i) = LATTICE_bcc_ID + constitutive_titanmod_structureID(instance) = LATTICE_bcc_ID case(LATTICE_hex_label) - constitutive_titanmod_structureID(i) = LATTICE_hex_ID + constitutive_titanmod_structureID(instance) = LATTICE_hex_ID case(LATTICE_ort_label) - constitutive_titanmod_structureID(i) = LATTICE_ort_ID + constitutive_titanmod_structureID(instance) = LATTICE_ort_ID end select - configNchunks = lattice_configNchunks(constitutive_titanmod_structureID(i)) + configNchunks = lattice_configNchunks(constitutive_titanmod_structureID(instance)) Nchunks_SlipFamilies = configNchunks(1) Nchunks_TwinFamilies = configNchunks(2) Nchunks_SlipSlip = configNchunks(3) @@ -477,190 +477,190 @@ subroutine constitutive_titanmod_init(fileUnit) Nchunks_TwinSlip = configNchunks(5) Nchunks_TwinTwin = configNchunks(6) case ('covera_ratio') - constitutive_titanmod_CoverA(i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_CoverA(instance) = IO_floatValue(line,positions,2_pInt) case ('c11') - constitutive_titanmod_Cslip_66(1,1,i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_Cslip_66(1,1,instance) = IO_floatValue(line,positions,2_pInt) case ('c12') - constitutive_titanmod_Cslip_66(1,2,i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_Cslip_66(1,2,instance) = IO_floatValue(line,positions,2_pInt) case ('c13') - constitutive_titanmod_Cslip_66(1,3,i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_Cslip_66(1,3,instance) = IO_floatValue(line,positions,2_pInt) case ('c22') - constitutive_titanmod_Cslip_66(2,2,i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_Cslip_66(2,2,instance) = IO_floatValue(line,positions,2_pInt) case ('c23') - constitutive_titanmod_Cslip_66(2,3,i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_Cslip_66(2,3,instance) = IO_floatValue(line,positions,2_pInt) case ('c33') - constitutive_titanmod_Cslip_66(3,3,i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_Cslip_66(3,3,instance) = IO_floatValue(line,positions,2_pInt) case ('c44') - constitutive_titanmod_Cslip_66(4,4,i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_Cslip_66(4,4,instance) = IO_floatValue(line,positions,2_pInt) case ('c55') - constitutive_titanmod_Cslip_66(5,5,i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_Cslip_66(5,5,instance) = IO_floatValue(line,positions,2_pInt) case ('c66') - constitutive_titanmod_Cslip_66(1,3,i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_Cslip_66(1,3,instance) = IO_floatValue(line,positions,2_pInt) case ('debyefrequency') - constitutive_titanmod_debyefrequency(i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_debyefrequency(instance) = IO_floatValue(line,positions,2_pInt) case ('kinkf0') - constitutive_titanmod_kinkf0(i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_kinkf0(instance) = IO_floatValue(line,positions,2_pInt) case ('nslip') if (positions(1) < 1_pInt + Nchunks_SlipFamilies) & call IO_warning(50_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_Nslip(j,i) = IO_intValue(line,positions,1_pInt+j) + constitutive_titanmod_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('ntwin') if (positions(1) < 1_pInt + Nchunks_TwinFamilies) & call IO_warning(51_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_Ntwin(j,i) = IO_intValue(line,positions,1_pInt+j) + constitutive_titanmod_Ntwin(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('rho_edge0') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_rho_edge0(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_rho_edge0(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('rho_screw0') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_rho_screw0(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_rho_screw0(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('slipburgers') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_burgersPerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_burgersPerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('twinburgers') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_burgersPerTwinFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_burgersPerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('f0') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_f0_PerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_f0_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('twinf0') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twinf0_PerTwinFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_twinf0_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('tau0e') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_tau0e_PerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_tau0e_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('twintau0') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twintau0_PerTwinFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_twintau0_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('tau0s') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_tau0s_PerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_tau0s_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('capre') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_capre_PerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_capre_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('caprs') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_caprs_PerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_caprs_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('v0e') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_v0e_PerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_v0e_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('twingamma0') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twingamma0_PerTwinFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_twingamma0_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('v0s') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_v0s_PerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_v0s_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('kinkcriticallength') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_kinkcriticallength_PerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_kinkcriticallength_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('twinsize') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twinsizePerTwinFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_twinsizePerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('celambdaslip') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_CeLambdaSlipPerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_CeLambdaSlipPerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('twinlambdaslip') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twinlambdaslipPerTwinFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_twinlambdaslipPerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('cslambdaslip') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_CsLambdaSlipPerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_CsLambdaSlipPerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('grainsize') - constitutive_titanmod_GrainSize(i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_GrainSize(instance) = IO_floatValue(line,positions,2_pInt) case ('maxtwinfraction') - constitutive_titanmod_MaxTwinFraction(i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_MaxTwinFraction(instance) = IO_floatValue(line,positions,2_pInt) case ('pe') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_pe_PerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_pe_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('twinp') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twinp_PerTwinFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_twinp_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('ps') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_ps_PerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_ps_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('qe') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_qe_PerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_qe_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('twinq') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twinq_PerTwinFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_twinq_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('qs') do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_qs_PerSlipFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_qs_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('twinshearconstant') do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twinshearconstant_PerTwinFam(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_twinshearconstant_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('dc') - constitutive_titanmod_dc(i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_dc(instance) = IO_floatValue(line,positions,2_pInt) case ('twinhpconstant') - constitutive_titanmod_twinhpconstant(i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_twinhpconstant(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_rho') - constitutive_titanmod_aTolRho(i) = IO_floatValue(line,positions,2_pInt) + constitutive_titanmod_aTolRho(instance) = IO_floatValue(line,positions,2_pInt) case ('interactionee') do j = 1_pInt, lattice_maxNinteraction - constitutive_titanmod_interaction_ee(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_interaction_ee(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interactionss') do j = 1_pInt, lattice_maxNinteraction - constitutive_titanmod_interaction_ss(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_interaction_ss(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interactiones') do j = 1_pInt, lattice_maxNinteraction - constitutive_titanmod_interaction_es(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_interaction_es(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_slipslip','interactionslipslip') if (positions(1) < 1_pInt + Nchunks_SlipSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') do j = 1_pInt, Nchunks_SlipSlip - constitutive_titanmod_interactionSlipSlip(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_interactionSlipSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_sliptwin','interactionsliptwin') if (positions(1) < 1_pInt + Nchunks_SlipTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') do j = 1_pInt, Nchunks_SlipTwin - constitutive_titanmod_interactionSlipTwin(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_interactionSlipTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twinslip','interactiontwinslip') if (positions(1) < 1_pInt + Nchunks_TwinSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') do j = 1_pInt, Nchunks_TwinSlip - constitutive_titanmod_interactionTwinSlip(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_interactionTwinSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twintwin','interactiontwintwin') if (positions(1) < 1_pInt + Nchunks_TwinTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') do j = 1_pInt, Nchunks_TwinTwin - constitutive_titanmod_interactionTwinTwin(j,i) = IO_floatValue(line,positions,1_pInt+j) + constitutive_titanmod_interactionTwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case default call IO_error(210_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') @@ -669,72 +669,70 @@ subroutine constitutive_titanmod_init(fileUnit) endif enddo - sanityChecks: do i = 1_pInt,maxNinstance - constitutive_titanmod_structure(i) = & - lattice_initializeStructure(constitutive_titanmod_structureID(i),constitutive_titanmod_CoverA(i)) - structID = constitutive_titanmod_structure(i) + sanityChecks: do instance = 1_pInt,maxNinstance + constitutive_titanmod_structure(instance) = & + lattice_initializeStructure(constitutive_titanmod_structureID(instance),constitutive_titanmod_CoverA(instance)) + structID = constitutive_titanmod_structure(instance) - if (structID < 1_pInt) call IO_error(205_pInt,el=i) - if (sum(constitutive_titanmod_Nslip(:,i)) <= 0_pInt) call IO_error(211_pInt,el=i,ext_msg='nslip (' & - //PLASTICITY_TITANMOD_label//')') - if (sum(constitutive_titanmod_Ntwin(:,i)) < 0_pInt) call IO_error(211_pInt,el=i,ext_msg='ntwin (' & - //PLASTICITY_TITANMOD_label//')') + if (structID < 1_pInt) & + call IO_error(205_pInt,el=instance) + if (sum(constitutive_titanmod_Nslip(:,instance)) <= 0_pInt) & + call IO_error(211_pInt,el=instance,ext_msg='nslip ('//PLASTICITY_TITANMOD_label//')') + if (sum(constitutive_titanmod_Ntwin(:,instance)) < 0_pInt) & + call IO_error(211_pInt,el=instance,ext_msg='ntwin ('//PLASTICITY_TITANMOD_label//')') do f = 1_pInt,lattice_maxNslipFamily - if (constitutive_titanmod_Nslip(f,i) > 0_pInt) then - if (constitutive_titanmod_rho_edge0(f,i) < 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='rho_edge0 (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_rho_screw0(f,i) < 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='rho_screw0 (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_burgersPerSlipFam(f,i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='slipburgers (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_f0_PerSlipFam(f,i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='f0 (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_tau0e_PerSlipFam(f,i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='tau0e (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_tau0s_PerSlipFam(f,i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='tau0s (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_capre_PerSlipFam(f,i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='capre (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_caprs_PerSlipFam(f,i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='caprs (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_v0e_PerSlipFam(f,i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='v0e (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_v0s_PerSlipFam(f,i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='v0s (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_kinkcriticallength_PerSlipFam(f,i) <= 0.0_pReal) & - call IO_error(211_pInt,el=i,ext_msg='kinkCriticalLength (' & - //PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_Nslip(f,instance) > 0_pInt) then + if (constitutive_titanmod_rho_edge0(f,instance) < 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='rho_edge0 ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_rho_screw0(f,instance) < 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='rho_screw0 ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_burgersPerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='slipburgers ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_f0_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='f0 ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_tau0e_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='tau0e ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_tau0s_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='tau0s ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_capre_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='capre ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_caprs_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='caprs ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_v0e_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='v0e ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_v0s_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='v0s ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_kinkcriticallength_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='kinkCriticalLength ('//PLASTICITY_TITANMOD_label//')') endif enddo do f = 1_pInt,lattice_maxNtwinFamily - if (constitutive_titanmod_Ntwin(f,i) > 0_pInt) then - if (constitutive_titanmod_burgersPerTwinFam(f,i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='twinburgers (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_twinf0_PerTwinFam(f,i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='twinf0 (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_twinshearconstant_PerTwinFam(f,i) <= 0.0_pReal) & - call IO_error(211_pInt,el=i,ext_msg='twinshearconstant (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_twintau0_PerTwinFam(f,i) <= 0.0_pReal)call IO_error(211_pInt,el=i,ext_msg='twintau0 (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_twingamma0_PerTwinFam(f,i) <= 0.0_pReal) & - call IO_error(211_pInt,el=i,ext_msg='twingamma0 (' & - //PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_Ntwin(f,instance) > 0_pInt) then + if (constitutive_titanmod_burgersPerTwinFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='twinburgers ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_twinf0_PerTwinFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='twinf0 ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_twinshearconstant_PerTwinFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='twinshearconstant ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_twintau0_PerTwinFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='twintau0 ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_twingamma0_PerTwinFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='twingamma0 ('//PLASTICITY_TITANMOD_label//')') endif enddo - if (constitutive_titanmod_dc(i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='dc (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_twinhpconstant(i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='twinhpconstant (' & - //PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_aTolRho(i) <= 0.0_pReal) call IO_error(211_pInt,el=i,ext_msg='aTolRho (' & - //PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_dc(instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='dc ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_twinhpconstant(instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='twinhpconstant ('//PLASTICITY_TITANMOD_label//')') + if (constitutive_titanmod_aTolRho(instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='aTolRho ('//PLASTICITY_TITANMOD_label//')') !-------------------------------------------------------------------------------------------------- ! determine total number of active slip or twin systems - constitutive_titanmod_Nslip(:,i) = min(lattice_NslipSystem(:,structID),constitutive_titanmod_Nslip(:,i)) - constitutive_titanmod_Ntwin(:,i) = min(lattice_NtwinSystem(:,structID),constitutive_titanmod_Ntwin(:,i)) - constitutive_titanmod_totalNslip(i) = sum(constitutive_titanmod_Nslip(:,i)) - constitutive_titanmod_totalNtwin(i) = sum(constitutive_titanmod_Ntwin(:,i)) + constitutive_titanmod_Nslip(:,instance) = min(lattice_NslipSystem(:,structID),constitutive_titanmod_Nslip(:,instance)) + constitutive_titanmod_Ntwin(:,instance) = min(lattice_NtwinSystem(:,structID),constitutive_titanmod_Ntwin(:,instance)) + constitutive_titanmod_totalNslip(instance) = sum(constitutive_titanmod_Nslip(:,instance)) + constitutive_titanmod_totalNtwin(instance) = sum(constitutive_titanmod_Ntwin(:,instance)) enddo sanityChecks !-------------------------------------------------------------------------------------------------- @@ -783,46 +781,46 @@ subroutine constitutive_titanmod_init(fileUnit) allocate(constitutive_titanmod_TwinforestProjectionEdge(maxTotalNtwin,maxTotalNtwin,maxNinstance), source=0.0_pReal) allocate(constitutive_titanmod_TwinforestProjectionScrew(maxTotalNtwin,maxTotalNtwin,maxNinstance), source=0.0_pReal) - instancesLoop: do i = 1_pInt,maxNinstance - structID = constitutive_titanmod_structure(i) + instancesLoop: do instance = 1_pInt,maxNinstance + structID = constitutive_titanmod_structure(instance) !-------------------------------------------------------------------------------------------------- ! inverse lookup of slip system family l = 0_pInt do f = 1_pInt,lattice_maxNslipFamily - do s = 1_pInt,constitutive_titanmod_Nslip(f,i) + do s = 1_pInt,constitutive_titanmod_Nslip(f,instance) l = l + 1_pInt - constitutive_titanmod_slipFamily(l,i) = f - constitutive_titanmod_slipSystemLattice(l,i) = sum(lattice_NslipSystem(1:f-1_pInt,structID)) + s + constitutive_titanmod_slipFamily(l,instance) = f + constitutive_titanmod_slipSystemLattice(l,instance) = sum(lattice_NslipSystem(1:f-1_pInt,structID)) + s enddo; enddo !-------------------------------------------------------------------------------------------------- ! inverse lookup of twin system family l = 0_pInt do f = 1_pInt,lattice_maxNtwinFamily - do t = 1_pInt,constitutive_titanmod_Ntwin(f,i) + do t = 1_pInt,constitutive_titanmod_Ntwin(f,instance) l = l + 1_pInt - constitutive_titanmod_twinFamily(l,i) = f - constitutive_titanmod_twinSystemLattice(l,i) = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) + t + constitutive_titanmod_twinFamily(l,instance) = f + constitutive_titanmod_twinSystemLattice(l,instance) = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) + t enddo; enddo !-------------------------------------------------------------------------------------------------- ! determine size of state array - ns = constitutive_titanmod_totalNslip(i) - nt = constitutive_titanmod_totalNtwin(i) - constitutive_titanmod_sizeDotState(i) = & + ns = constitutive_titanmod_totalNslip(instance) + nt = constitutive_titanmod_totalNtwin(instance) + constitutive_titanmod_sizeDotState(instance) = & size(constitutive_titanmod_listBasicSlipStates)*ns + & size(constitutive_titanmod_listBasicTwinStates)*nt - constitutive_titanmod_sizeState(i) = & - constitutive_titanmod_sizeDotState(i)+ & + constitutive_titanmod_sizeState(instance) = & + constitutive_titanmod_sizeDotState(instance)+ & size(constitutive_titanmod_listDependentSlipStates)*ns + & size(constitutive_titanmod_listDependentTwinStates)*nt !-------------------------------------------------------------------------------------------------- ! determine size of postResults array - outputsLoop: do o = 1_pInt,constitutive_titanmod_Noutput(i) + outputsLoop: do o = 1_pInt,constitutive_titanmod_Noutput(instance) mySize = 0_pInt - select case(constitutive_titanmod_outputID(o,i)) + select case(constitutive_titanmod_outputID(o,instance)) case(rhoedge_ID, rhoscrew_ID, & segment_edge_ID, segment_screw_ID, & resistance_edge_ID, resistance_screw_ID, & @@ -832,165 +830,216 @@ subroutine constitutive_titanmod_init(fileUnit) gdot_slip_ID, & stressratio_edge_p_ID, stressratio_screw_p_ID, & shear_system_ID) - mySize = constitutive_titanmod_totalNslip(i) + mySize = constitutive_titanmod_totalNslip(instance) case(twin_fraction_ID) - mySize = constitutive_titanmod_totalNtwin(i) + mySize = constitutive_titanmod_totalNtwin(instance) case(shear_basal_ID, shear_prism_ID, shear_pyra_ID, shear_pyrca_ID, & ! use only if all 4 slip families in hex are considered rhoedge_basal_ID, rhoedge_prism_ID, rhoedge_pyra_ID, rhoedge_pyrca_ID, & rhoscrew_basal_ID, rhoscrew_prism_ID, rhoscrew_pyra_ID, rhoscrew_pyrca_ID, & shear_total_ID) mySize = 1_pInt case default - call IO_error(105_pInt,ext_msg=constitutive_titanmod_output(o,i)// & + call IO_error(105_pInt,ext_msg=constitutive_titanmod_output(o,instance)// & ' ('//PLASTICITY_TITANMOD_label//')') end select outputFound: if (mySize > 0_pInt) then - constitutive_titanmod_sizePostResult(o,i) = mySize - constitutive_titanmod_sizePostResults(i) = constitutive_titanmod_sizePostResults(i) + mySize + constitutive_titanmod_sizePostResult(o,instance) = mySize + constitutive_titanmod_sizePostResults(instance) = constitutive_titanmod_sizePostResults(instance) + mySize endif outputFound enddo outputsLoop - constitutive_titanmod_Cslip_66(1:6,1:6,i) = & - lattice_symmetrizeC66(constitutive_titanmod_structureID(i),& - constitutive_titanmod_Cslip_66(1:6,1:6,i)) ! assign elasticity tensor - constitutive_titanmod_Gmod(i) = & - 0.2_pReal*(constitutive_titanmod_Cslip_66(1,1,i)-constitutive_titanmod_Cslip_66(1,2,i))& - + 0.3_pReal*constitutive_titanmod_Cslip_66(4,4,i) - constitutive_titanmod_Cslip_66(1:6,1:6,i) = & - math_Mandel3333to66(math_Voigt66to3333(constitutive_titanmod_Cslip_66(1:6,1:6,i))) - constitutive_titanmod_Cslip_3333(1:3,1:3,1:3,1:3,i) = & - math_Voigt66to3333(constitutive_titanmod_Cslip_66(1:6,1:6,i)) + constitutive_titanmod_Cslip_66(1:6,1:6,instance) = & + lattice_symmetrizeC66(constitutive_titanmod_structureID(instance),& + constitutive_titanmod_Cslip_66(1:6,1:6,instance)) ! assign elasticity tensor + constitutive_titanmod_Gmod(instance) = & + 0.2_pReal*(constitutive_titanmod_Cslip_66(1,1,instance)-constitutive_titanmod_Cslip_66(1,2,instance))& + + 0.3_pReal*constitutive_titanmod_Cslip_66(4,4,instance) + constitutive_titanmod_Cslip_66(1:6,1:6,instance) = & + math_Mandel3333to66(math_Voigt66to3333(constitutive_titanmod_Cslip_66(1:6,1:6,instance))) + constitutive_titanmod_Cslip_3333(1:3,1:3,1:3,1:3,instance) = & + math_Voigt66to3333(constitutive_titanmod_Cslip_66(1:6,1:6,instance)) !-------------------------------------------------------------------------------------------------- ! construction of the twin elasticity matrices do j=1_pInt,lattice_maxNtwinFamily - do k=1_pInt,constitutive_titanmod_Ntwin(j,i) + do k=1_pInt,constitutive_titanmod_Ntwin(j,instance) do l=1_pInt,3_pInt ; do m=1_pInt,3_pInt ; do n=1_pInt,3_pInt ; do o=1_pInt,3_pInt do p=1_pInt,3_pInt ; do q=1_pInt,3_pInt ; do r=1_pInt,3_pInt ; do s=1_pInt,3_pInt - constitutive_titanmod_Ctwin_3333(l,m,n,o,sum(constitutive_titanmod_Nslip(1:j-1_pInt,i))+k,i) = & - constitutive_titanmod_Ctwin_3333(l,m,n,o,sum(constitutive_titanmod_Nslip(1:j-1_pInt,i))+k,i) + & - constitutive_titanmod_Cslip_3333(p,q,r,s,i)*& + constitutive_titanmod_Ctwin_3333(l,m,n,o,sum(constitutive_titanmod_Nslip(1:j-1_pInt,instance))+k,instance) = & + constitutive_titanmod_Ctwin_3333(l,m,n,o,sum(constitutive_titanmod_Nslip(1:j-1_pInt,instance))+k,instance) + & + constitutive_titanmod_Cslip_3333(p,q,r,s,instance)*& lattice_Qtwin(l,p,sum(lattice_NslipSystem(1:j-1_pInt,structID))+k,structID)* & lattice_Qtwin(m,q,sum(lattice_NslipSystem(1:j-1_pInt,structID))+k,structID)* & lattice_Qtwin(n,r,sum(lattice_NslipSystem(1:j-1_pInt,structID))+k,structID)* & lattice_Qtwin(o,s,sum(lattice_NslipSystem(1:j-1_pInt,structID))+k,structID) enddo; enddo; enddo; enddo enddo; enddo; enddo ; enddo - constitutive_titanmod_Ctwin_66(1:6,1:6,k,i) = & - math_Mandel3333to66(constitutive_titanmod_Ctwin_3333(1:3,1:3,1:3,1:3,k,i)) + constitutive_titanmod_Ctwin_66(1:6,1:6,k,instance) = & + math_Mandel3333to66(constitutive_titanmod_Ctwin_3333(1:3,1:3,1:3,1:3,k,instance)) enddo; enddo !-------------------------------------------------------------------------------------------------- ! Burgers vector, dislocation velocity prefactor for each slip system - do s = 1_pInt,constitutive_titanmod_totalNslip(i) - f = constitutive_titanmod_slipFamily(s,i) - constitutive_titanmod_burgersPerSlipSys(s,i) = constitutive_titanmod_burgersPerSlipFam(f,i) - constitutive_titanmod_f0_PerSlipSys(s,i) = constitutive_titanmod_f0_PerSlipFam(f,i) - constitutive_titanmod_tau0e_PerSlipSys(s,i) = constitutive_titanmod_tau0e_PerSlipFam(f,i) - constitutive_titanmod_tau0s_PerSlipSys(s,i) = constitutive_titanmod_tau0s_PerSlipFam(f,i) - constitutive_titanmod_capre_PerSlipSys(s,i) = constitutive_titanmod_capre_PerSlipFam(f,i) - constitutive_titanmod_caprs_PerSlipSys(s,i) = constitutive_titanmod_caprs_PerSlipFam(f,i) - constitutive_titanmod_v0e_PerSlipSys(s,i) = constitutive_titanmod_v0e_PerSlipFam(f,i) - constitutive_titanmod_v0s_PerSlipSys(s,i) = constitutive_titanmod_v0s_PerSlipFam(f,i) - constitutive_titanmod_kinkcriticallength_PerSlipSys(s,i) = constitutive_titanmod_kinkcriticallength_PerSlipFam(f,i) - constitutive_titanmod_pe_PerSlipSys(s,i) = constitutive_titanmod_pe_PerSlipFam(f,i) - constitutive_titanmod_ps_PerSlipSys(s,i) = constitutive_titanmod_ps_PerSlipFam(f,i) - constitutive_titanmod_qe_PerSlipSys(s,i) = constitutive_titanmod_qe_PerSlipFam(f,i) - constitutive_titanmod_qs_PerSlipSys(s,i) = constitutive_titanmod_qs_PerSlipFam(f,i) - constitutive_titanmod_CeLambdaSlipPerSlipSys(s,i) = constitutive_titanmod_CeLambdaSlipPerSlipFam(f,i) - constitutive_titanmod_CsLambdaSlipPerSlipSys(s,i) = constitutive_titanmod_CsLambdaSlipPerSlipFam(f,i) + do s = 1_pInt,constitutive_titanmod_totalNslip(instance) + f = constitutive_titanmod_slipFamily(s,instance) + + constitutive_titanmod_burgersPerSlipSys(s,instance) = & + constitutive_titanmod_burgersPerSlipFam(f,instance) + + constitutive_titanmod_f0_PerSlipSys(s,instance) = & + constitutive_titanmod_f0_PerSlipFam(f,instance) + + constitutive_titanmod_tau0e_PerSlipSys(s,instance) = & + constitutive_titanmod_tau0e_PerSlipFam(f,instance) + + constitutive_titanmod_tau0s_PerSlipSys(s,instance) = & + constitutive_titanmod_tau0s_PerSlipFam(f,instance) + + constitutive_titanmod_capre_PerSlipSys(s,instance) = & + constitutive_titanmod_capre_PerSlipFam(f,instance) + + constitutive_titanmod_caprs_PerSlipSys(s,instance) = & + constitutive_titanmod_caprs_PerSlipFam(f,instance) + + constitutive_titanmod_v0e_PerSlipSys(s,instance) = & + constitutive_titanmod_v0e_PerSlipFam(f,instance) + + constitutive_titanmod_v0s_PerSlipSys(s,instance) = & + constitutive_titanmod_v0s_PerSlipFam(f,instance) + + constitutive_titanmod_kinkcriticallength_PerSlipSys(s,instance) = & + constitutive_titanmod_kinkcriticallength_PerSlipFam(f,instance) + + constitutive_titanmod_pe_PerSlipSys(s,instance) = & + constitutive_titanmod_pe_PerSlipFam(f,instance) + + constitutive_titanmod_ps_PerSlipSys(s,instance) = & + constitutive_titanmod_ps_PerSlipFam(f,instance) + + constitutive_titanmod_qe_PerSlipSys(s,instance) = & + constitutive_titanmod_qe_PerSlipFam(f,instance) + + constitutive_titanmod_qs_PerSlipSys(s,instance) = & + constitutive_titanmod_qs_PerSlipFam(f,instance) + + constitutive_titanmod_CeLambdaSlipPerSlipSys(s,instance) = & + constitutive_titanmod_CeLambdaSlipPerSlipFam(f,instance) + + constitutive_titanmod_CsLambdaSlipPerSlipSys(s,instance) = & + constitutive_titanmod_CsLambdaSlipPerSlipFam(f,instance) enddo !-------------------------------------------------------------------------------------------------- ! Burgers vector, nucleation rate prefactor and twin size for each twin system - do t = 1_pInt,constitutive_titanmod_totalNtwin(i) - f = constitutive_titanmod_twinFamily(t,i) - constitutive_titanmod_burgersPerTwinSys(t,i) = constitutive_titanmod_burgersPerTwinFam(f,i) - constitutive_titanmod_twinsizePerTwinSys(t,i) = constitutive_titanmod_twinsizePerTwinFam(f,i) - constitutive_titanmod_twinf0_PerTwinSys(t,i) = constitutive_titanmod_twinf0_PerTwinFam(f,i) - constitutive_titanmod_twinshearconstant_PerTwinSys(t,i) = constitutive_titanmod_twinshearconstant_PerTwinFam(f,i) - constitutive_titanmod_twintau0_PerTwinSys(t,i) = constitutive_titanmod_twintau0_PerTwinFam(f,i) - constitutive_titanmod_twingamma0_PerTwinSys(t,i) = constitutive_titanmod_twingamma0_PerTwinFam(f,i) - constitutive_titanmod_twinp_PerTwinSys(t,i) = constitutive_titanmod_twinp_PerTwinFam(f,i) - constitutive_titanmod_twinq_PerTwinSys(t,i) = constitutive_titanmod_twinq_PerTwinFam(f,i) - constitutive_titanmod_twinLambdaSlipPerTwinSys(t,i) = constitutive_titanmod_twinLambdaSlipPerTwinFam(f,i) + do t = 1_pInt,constitutive_titanmod_totalNtwin(instance) + f = constitutive_titanmod_twinFamily(t,instance) + + constitutive_titanmod_burgersPerTwinSys(t,instance) = & + constitutive_titanmod_burgersPerTwinFam(f,instance) + + constitutive_titanmod_twinsizePerTwinSys(t,instance) = & + constitutive_titanmod_twinsizePerTwinFam(f,instance) + + constitutive_titanmod_twinf0_PerTwinSys(t,instance) = & + constitutive_titanmod_twinf0_PerTwinFam(f,instance) + + constitutive_titanmod_twinshearconstant_PerTwinSys(t,instance) = & + constitutive_titanmod_twinshearconstant_PerTwinFam(f,instance) + + constitutive_titanmod_twintau0_PerTwinSys(t,instance) = & + constitutive_titanmod_twintau0_PerTwinFam(f,instance) + + constitutive_titanmod_twingamma0_PerTwinSys(t,instance) = & + constitutive_titanmod_twingamma0_PerTwinFam(f,instance) + + constitutive_titanmod_twinp_PerTwinSys(t,instance) = & + constitutive_titanmod_twinp_PerTwinFam(f,instance) + + constitutive_titanmod_twinq_PerTwinSys(t,instance) = & + constitutive_titanmod_twinq_PerTwinFam(f,instance) + + constitutive_titanmod_twinLambdaSlipPerTwinSys(t,instance) = & + constitutive_titanmod_twinLambdaSlipPerTwinFam(f,instance) enddo !-------------------------------------------------------------------------------------------------- ! Construction of interaction matrices - do s1 = 1_pInt,constitutive_titanmod_totalNslip(i) - do s2 = 1_pInt,constitutive_titanmod_totalNslip(i) - constitutive_titanmod_interactionMatrixSlipSlip(s1,s2,i) = & - constitutive_titanmod_interactionSlipSlip(lattice_interactionSlipSlip(constitutive_titanmod_slipSystemLattice(s1,i), & - constitutive_titanmod_slipSystemLattice(s2,i), & - structID),i) - constitutive_titanmod_interactionMatrix_ee(s1,s2,i) = & - constitutive_titanmod_interaction_ee(lattice_interactionSlipSlip(constitutive_titanmod_slipSystemLattice(s1,i), & - constitutive_titanmod_slipSystemLattice(s2,i), & - structID),i) - constitutive_titanmod_interactionMatrix_ss(s1,s2,i) = & - constitutive_titanmod_interaction_ss(lattice_interactionSlipSlip(constitutive_titanmod_slipSystemLattice(s1,i), & - constitutive_titanmod_slipSystemLattice(s2,i), & - structID),i) - constitutive_titanmod_interactionMatrix_es(s1,s2,i) = & - constitutive_titanmod_interaction_es(lattice_interactionSlipSlip(constitutive_titanmod_slipSystemLattice(s1,i), & - constitutive_titanmod_slipSystemLattice(s2,i), & - structID),i) + do s1 = 1_pInt,constitutive_titanmod_totalNslip(instance) + do s2 = 1_pInt,constitutive_titanmod_totalNslip(instance) + constitutive_titanmod_interactionMatrixSlipSlip(s1,s2,instance) = & + constitutive_titanmod_interactionSlipSlip(lattice_interactionSlipSlip( & + constitutive_titanmod_slipSystemLattice(s1,instance),& + constitutive_titanmod_slipSystemLattice(s2,instance),structID),instance) + + constitutive_titanmod_interactionMatrix_ee(s1,s2,instance) = & + constitutive_titanmod_interaction_ee(lattice_interactionSlipSlip ( & + constitutive_titanmod_slipSystemLattice(s1,instance), & + constitutive_titanmod_slipSystemLattice(s2,instance), structID),instance) + + constitutive_titanmod_interactionMatrix_ss(s1,s2,instance) = & + constitutive_titanmod_interaction_ss(lattice_interactionSlipSlip( & + constitutive_titanmod_slipSystemLattice(s1,instance), & + constitutive_titanmod_slipSystemLattice(s2,instance), structID),instance) + + constitutive_titanmod_interactionMatrix_es(s1,s2,instance) = & + constitutive_titanmod_interaction_es(lattice_interactionSlipSlip( & + constitutive_titanmod_slipSystemLattice(s1,instance), & + constitutive_titanmod_slipSystemLattice(s2,instance), structID),instance) enddo; enddo - do s1 = 1_pInt,constitutive_titanmod_totalNslip(i) - do t2 = 1_pInt,constitutive_titanmod_totalNtwin(i) - constitutive_titanmod_interactionMatrixSlipTwin(s1,t2,i) = & - constitutive_titanmod_interactionSlipTwin(lattice_interactionSlipTwin(constitutive_titanmod_slipSystemLattice(s1,i), & - constitutive_titanmod_twinSystemLattice(t2,i), & - structID),i) + do s1 = 1_pInt,constitutive_titanmod_totalNslip(instance) + do t2 = 1_pInt,constitutive_titanmod_totalNtwin(instance) + constitutive_titanmod_interactionMatrixSlipTwin(s1,t2,instance) = & + constitutive_titanmod_interactionSlipTwin(lattice_interactionSlipTwin( & + constitutive_titanmod_slipSystemLattice(s1,instance), & + constitutive_titanmod_twinSystemLattice(t2,instance), structID),instance) enddo; enddo - do t1 = 1_pInt,constitutive_titanmod_totalNtwin(i) - do s2 = 1_pInt,constitutive_titanmod_totalNslip(i) - constitutive_titanmod_interactionMatrixTwinSlip(t1,s2,i) = & - constitutive_titanmod_interactionTwinSlip(lattice_interactionTwinSlip(constitutive_titanmod_twinSystemLattice(t1,i), & - constitutive_titanmod_slipSystemLattice(s2,i), & - structID),i) + do t1 = 1_pInt,constitutive_titanmod_totalNtwin(instance) + do s2 = 1_pInt,constitutive_titanmod_totalNslip(instance) + constitutive_titanmod_interactionMatrixTwinSlip(t1,s2,instance) = & + constitutive_titanmod_interactionTwinSlip(lattice_interactionTwinSlip( & + constitutive_titanmod_twinSystemLattice(t1,instance), & + constitutive_titanmod_slipSystemLattice(s2,instance), structID),instance) enddo; enddo - do t1 = 1_pInt,constitutive_titanmod_totalNtwin(i) - do t2 = 1_pInt,constitutive_titanmod_totalNtwin(i) - constitutive_titanmod_interactionMatrixTwinTwin(t1,t2,i) = & - constitutive_titanmod_interactionTwinTwin(lattice_interactionTwinTwin(constitutive_titanmod_twinSystemLattice(t1,i), & - constitutive_titanmod_twinSystemLattice(t2,i), & - structID),i) + do t1 = 1_pInt,constitutive_titanmod_totalNtwin(instance) + do t2 = 1_pInt,constitutive_titanmod_totalNtwin(instance) + constitutive_titanmod_interactionMatrixTwinTwin(t1,t2,instance) = & + constitutive_titanmod_interactionTwinTwin(lattice_interactionTwinTwin( & + constitutive_titanmod_twinSystemLattice(t1,instance), & + constitutive_titanmod_twinSystemLattice(t2,instance), structID),instance) enddo; enddo - do s1 = 1_pInt,constitutive_titanmod_totalNslip(i) - do s2 = 1_pInt,constitutive_titanmod_totalNslip(i) + do s1 = 1_pInt,constitutive_titanmod_totalNslip(instance) + do s2 = 1_pInt,constitutive_titanmod_totalNslip(instance) !-------------------------------------------------------------------------------------------------- ! calculation of forest projections for edge dislocations - constitutive_titanmod_forestProjectionEdge(s1,s2,i) = & - abs(math_mul3x3(lattice_sn(:,constitutive_titanmod_slipSystemLattice(s1,i),structID), & - lattice_st(:,constitutive_titanmod_slipSystemLattice(s2,i),structID))) + constitutive_titanmod_forestProjectionEdge(s1,s2,instance) = & + abs(math_mul3x3(lattice_sn(:,constitutive_titanmod_slipSystemLattice(s1,instance),structID), & + lattice_st(:,constitutive_titanmod_slipSystemLattice(s2,instance),structID))) !-------------------------------------------------------------------------------------------------- ! calculation of forest projections for screw dislocations - constitutive_titanmod_forestProjectionScrew(s1,s2,i) = & - abs(math_mul3x3(lattice_sn(:,constitutive_titanmod_slipSystemLattice(s1,i),structID), & - lattice_sd(:,constitutive_titanmod_slipSystemLattice(s2,i),structID))) + constitutive_titanmod_forestProjectionScrew(s1,s2,instance) = & + abs(math_mul3x3(lattice_sn(:,constitutive_titanmod_slipSystemLattice(s1,instance),structID), & + lattice_sd(:,constitutive_titanmod_slipSystemLattice(s2,instance),structID))) enddo; enddo !-------------------------------------------------------------------------------------------------- ! calculation of forest projections for edge dislocations in twin system - do t1 = 1_pInt,constitutive_titanmod_totalNtwin(i) - do t2 = 1_pInt,constitutive_titanmod_totalNtwin(i) - constitutive_titanmod_TwinforestProjectionEdge(t1,t2,i) = & - abs(math_mul3x3(lattice_tn(:,constitutive_titanmod_twinSystemLattice(t1,i),structID), & - lattice_tt(:,constitutive_titanmod_twinSystemLattice(t2,i),structID))) + do t1 = 1_pInt,constitutive_titanmod_totalNtwin(instance) + do t2 = 1_pInt,constitutive_titanmod_totalNtwin(instance) + constitutive_titanmod_TwinforestProjectionEdge(t1,t2,instance) = & + abs(math_mul3x3(lattice_tn(:,constitutive_titanmod_twinSystemLattice(t1,instance),structID), & + lattice_tt(:,constitutive_titanmod_twinSystemLattice(t2,instance),structID))) !-------------------------------------------------------------------------------------------------- ! calculation of forest projections for screw dislocations in twin system - constitutive_titanmod_TwinforestProjectionScrew(t1,t2,i) = & - abs(math_mul3x3(lattice_tn(:,constitutive_titanmod_twinSystemLattice(t1,i),structID), & - lattice_td(:,constitutive_titanmod_twinSystemLattice(t2,i),structID))) + constitutive_titanmod_TwinforestProjectionScrew(t1,t2,instance) = & + abs(math_mul3x3(lattice_tn(:,constitutive_titanmod_twinSystemLattice(t1,instance),structID), & + lattice_td(:,constitutive_titanmod_twinSystemLattice(t2,instance),structID))) enddo; enddo enddo instancesLoop @@ -1001,21 +1050,21 @@ end subroutine constitutive_titanmod_init !-------------------------------------------------------------------------------------------------- !> @brief sets the initial microstructural state for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -pure function constitutive_titanmod_stateInit(matID) +pure function constitutive_titanmod_stateInit(instance) use lattice, only: & lattice_maxNslipFamily, & lattice_maxNtwinFamily implicit none - integer(pInt), intent(in) :: matID !< number specifying the instance of the plasticity - real(pReal), dimension(constitutive_titanmod_sizeState(matID)) :: & + integer(pInt), intent(in) :: instance !< number specifying the instance of the plasticity + real(pReal), dimension(constitutive_titanmod_sizeState(instance)) :: & constitutive_titanmod_stateInit integer(pInt) :: & s,s0,s1, & t,t0,t1, & ns,nt,f - real(pReal), dimension(constitutive_titanmod_totalNslip(matID)) :: & + real(pReal), dimension(constitutive_titanmod_totalNslip(instance)) :: & rho_edge0, & rho_screw0, & shear_system0, & @@ -1023,12 +1072,12 @@ pure function constitutive_titanmod_stateInit(matID) segment_screw0, & resistance_edge0, & resistance_screw0 - real(pReal), dimension(constitutive_titanmod_totalNtwin(matID)) :: & + real(pReal), dimension(constitutive_titanmod_totalNtwin(instance)) :: & twingamma_dot0, & resistance_twin0 - ns = constitutive_titanmod_totalNslip(matID) - nt = constitutive_titanmod_totalNtwin(matID) + ns = constitutive_titanmod_totalNslip(instance) + nt = constitutive_titanmod_totalNtwin(instance) !-------------------------------------------------------------------------------------------------- @@ -1036,10 +1085,10 @@ pure function constitutive_titanmod_stateInit(matID) s1 = 0_pInt do f = 1_pInt,lattice_maxNslipFamily s0 = s1 + 1_pInt - s1 = s0 + constitutive_titanmod_Nslip(f,matID) - 1_pInt + s1 = s0 + constitutive_titanmod_Nslip(f,instance) - 1_pInt do s = s0,s1 - rho_edge0(s) = constitutive_titanmod_rho_edge0(f,matID) - rho_screw0(s) = constitutive_titanmod_rho_screw0(f,matID) + rho_edge0(s) = constitutive_titanmod_rho_edge0(f,instance) + rho_screw0(s) = constitutive_titanmod_rho_screw0(f,instance) shear_system0(s) = 0.0_pReal enddo enddo @@ -1049,7 +1098,7 @@ pure function constitutive_titanmod_stateInit(matID) t1 = 0_pInt do f = 1_pInt,lattice_maxNtwinFamily t0 = t1 + 1_pInt - t1 = t0 + constitutive_titanmod_Ntwin(f,matID) - 1_pInt + t1 = t0 + constitutive_titanmod_Ntwin(f,instance) - 1_pInt do t = t0,t1 twingamma_dot0(t)=0.0_pReal enddo @@ -1058,20 +1107,20 @@ pure function constitutive_titanmod_stateInit(matID) !-------------------------------------------------------------------------------------------------- ! initialize dependent slip microstructural variables forall (s = 1_pInt:ns) - segment_edge0(s) = constitutive_titanmod_CeLambdaSlipPerSlipSys(s,matID)/ & - sqrt(dot_product((rho_edge0),constitutive_titanmod_forestProjectionEdge(1:ns,s,matID))+ & - dot_product((rho_screw0),constitutive_titanmod_forestProjectionScrew(1:ns,s,matID))) - segment_screw0(s) = constitutive_titanmod_CsLambdaSlipPerSlipSys(s,matID)/ & - sqrt(dot_product((rho_edge0),constitutive_titanmod_forestProjectionEdge(1:ns,s,matID))+ & - dot_product((rho_screw0),constitutive_titanmod_forestProjectionScrew(1:ns,s,matID))) + segment_edge0(s) = constitutive_titanmod_CeLambdaSlipPerSlipSys(s,instance)/ & + sqrt(dot_product((rho_edge0),constitutive_titanmod_forestProjectionEdge(1:ns,s,instance))+ & + dot_product((rho_screw0),constitutive_titanmod_forestProjectionScrew(1:ns,s,instance))) + segment_screw0(s) = constitutive_titanmod_CsLambdaSlipPerSlipSys(s,instance)/ & + sqrt(dot_product((rho_edge0),constitutive_titanmod_forestProjectionEdge(1:ns,s,instance))+ & + dot_product((rho_screw0),constitutive_titanmod_forestProjectionScrew(1:ns,s,instance))) resistance_edge0(s) = & - constitutive_titanmod_Gmod(matID)*constitutive_titanmod_burgersPerSlipSys(s,matID)* & - sqrt(dot_product((rho_edge0),constitutive_titanmod_interactionMatrix_ee(1:ns,s,matID))+ & - dot_product((rho_screw0),constitutive_titanmod_interactionMatrix_es(1:ns,s,matID))) + constitutive_titanmod_Gmod(instance)*constitutive_titanmod_burgersPerSlipSys(s,instance)* & + sqrt(dot_product((rho_edge0),constitutive_titanmod_interactionMatrix_ee(1:ns,s,instance))+ & + dot_product((rho_screw0),constitutive_titanmod_interactionMatrix_es(1:ns,s,instance))) resistance_screw0(s) = & - constitutive_titanmod_Gmod(matID)*constitutive_titanmod_burgersPerSlipSys(s,matID)* & - sqrt(dot_product((rho_edge0),constitutive_titanmod_interactionMatrix_es(1:ns,s,matID))+ & - dot_product((rho_screw0), constitutive_titanmod_interactionMatrix_ss(1:ns,s,matID))) + constitutive_titanmod_Gmod(instance)*constitutive_titanmod_burgersPerSlipSys(s,instance)* & + sqrt(dot_product((rho_edge0),constitutive_titanmod_interactionMatrix_es(1:ns,s,instance))+ & + dot_product((rho_screw0), constitutive_titanmod_interactionMatrix_ss(1:ns,s,instance))) end forall forall (t = 1_pInt:nt) & @@ -1094,15 +1143,15 @@ end function constitutive_titanmod_stateInit !-------------------------------------------------------------------------------------------------- !> @brief sets the relevant state values for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -pure function constitutive_titanmod_aTolState(matID) +pure function constitutive_titanmod_aTolState(instance) implicit none - integer(pInt), intent(in) :: matID !< number specifying the instance of the plasticity + integer(pInt), intent(in) :: instance !< number specifying the instance of the plasticity - real(pReal), dimension(constitutive_titanmod_sizeState(matID)) :: & + real(pReal), dimension(constitutive_titanmod_sizeState(instance)) :: & constitutive_titanmod_aTolState - constitutive_titanmod_aTolState = constitutive_titanmod_aTolRho(matID) + constitutive_titanmod_aTolState = constitutive_titanmod_aTolRho(instance) end function constitutive_titanmod_aTolState @@ -1133,7 +1182,7 @@ implicit none real(pReal), dimension(constitutive_titanmod_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & volumefraction_PerTwinSys integer(pInt) :: & - matID, & + instance, & ns, nt, & i real(pReal) :: & @@ -1141,25 +1190,25 @@ real(pReal), dimension(constitutive_titanmod_totalNtwin(phase_plasticityInstance !-------------------------------------------------------------------------------------------------- ! shortened notation - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) - ns = constitutive_titanmod_totalNslip(matID) - nt = constitutive_titanmod_totalNtwin(matID) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + ns = constitutive_titanmod_totalNslip(instance) + nt = constitutive_titanmod_totalNtwin(instance) !-------------------------------------------------------------------------------------------------- ! total twin volume fraction do i=1_pInt,nt volumefraction_PerTwinSys(i)=state(ipc,ip,el)%p(3_pInt*ns+i)/ & - constitutive_titanmod_twinshearconstant_PerTwinSys(i,matID) + constitutive_titanmod_twinshearconstant_PerTwinSys(i,instance) enddo sumf = sum(abs(volumefraction_PerTwinSys(1:nt))) ! safe for nt == 0 !-------------------------------------------------------------------------------------------------- ! homogenized elasticity matrix - constitutive_titanmod_homogenizedC = (1.0_pReal-sumf)*constitutive_titanmod_Cslip_66(1:6,1:6,matID) + constitutive_titanmod_homogenizedC = (1.0_pReal-sumf)*constitutive_titanmod_Cslip_66(1:6,1:6,instance) do i=1_pInt,nt constitutive_titanmod_homogenizedC = constitutive_titanmod_homogenizedC & + volumefraction_PerTwinSys(i)*& - constitutive_titanmod_Ctwin_66(1:6,1:6,i,matID) + constitutive_titanmod_Ctwin_66(1:6,1:6,i,instance) enddo end function constitutive_titanmod_homogenizedC @@ -1190,7 +1239,7 @@ subroutine constitutive_titanmod_microstructure(temperature,state,ipc,ip,el) state !< microstructure state integer(pInt) :: & - matID, structID, & + instance, structID, & ns, nt, s, t, & i real(pReal) :: & @@ -1201,16 +1250,16 @@ subroutine constitutive_titanmod_microstructure(temperature,state,ipc,ip,el) !-------------------------------------------------------------------------------------------------- !Shortened notation - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) - structID = constitutive_titanmod_structure(matID) - ns = constitutive_titanmod_totalNslip(matID) - nt = constitutive_titanmod_totalNtwin(matID) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + structID = constitutive_titanmod_structure(instance) + ns = constitutive_titanmod_totalNslip(instance) + nt = constitutive_titanmod_totalNtwin(instance) !-------------------------------------------------------------------------------------------------- ! total twin volume fraction do i=1_pInt,nt - volumefraction_PerTwinSys(i)=state(ipc,ip,el)%p(3_pInt*ns+i)/ & - constitutive_titanmod_twinshearconstant_PerTwinSys(i,matID) + volumefraction_PerTwinSys(i)=state(ipc,ip,el)%p(3_pInt*ns+i)/ & + constitutive_titanmod_twinshearconstant_PerTwinSys(i,instance) enddo @@ -1222,44 +1271,44 @@ subroutine constitutive_titanmod_microstructure(temperature,state,ipc,ip,el) !-------------------------------------------------------------------------------------------------- ! average segment length for edge dislocations in matrix forall (s = 1_pInt:ns) & - state(ipc,ip,el)%p(3_pInt*ns+nt+s) = constitutive_titanmod_CeLambdaSlipPerSlipSys(s,matID)/ & + state(ipc,ip,el)%p(3_pInt*ns+nt+s) = constitutive_titanmod_CeLambdaSlipPerSlipSys(s,instance)/ & sqrt(dot_product(state(ipc,ip,el)%p(1:ns), & - constitutive_titanmod_forestProjectionEdge(1:ns,s,matID))+ & + constitutive_titanmod_forestProjectionEdge(1:ns,s,instance))+ & dot_product(state(ipc,ip,el)%p(ns+1_pInt:2_pInt*ns), & - constitutive_titanmod_forestProjectionScrew(1:ns,s,matID))) + constitutive_titanmod_forestProjectionScrew(1:ns,s,instance))) !-------------------------------------------------------------------------------------------------- ! average segment length for screw dislocations in matrix forall (s = 1_pInt:ns) & - state(ipc,ip,el)%p(4_pInt*ns+nt+s) = constitutive_titanmod_CsLambdaSlipPerSlipSys(s,matID)/ & + state(ipc,ip,el)%p(4_pInt*ns+nt+s) = constitutive_titanmod_CsLambdaSlipPerSlipSys(s,instance)/ & sqrt(dot_product(state(ipc,ip,el)%p(1:ns), & - constitutive_titanmod_forestProjectionEdge(1:ns,s,matID))+ & + constitutive_titanmod_forestProjectionEdge(1:ns,s,instance))+ & dot_product(state(ipc,ip,el)%p(ns+1_pInt:2_pInt*ns), & - constitutive_titanmod_forestProjectionScrew(1:ns,s,matID))) + constitutive_titanmod_forestProjectionScrew(1:ns,s,instance))) !-------------------------------------------------------------------------------------------------- ! threshold stress or slip resistance for edge dislocation motion forall (s = 1_pInt:ns) & state(ipc,ip,el)%p(5_pInt*ns+nt+s) = & - constitutive_titanmod_Gmod(matID)*constitutive_titanmod_burgersPerSlipSys(s,matID)*& + constitutive_titanmod_Gmod(instance)*constitutive_titanmod_burgersPerSlipSys(s,instance)*& sqrt(dot_product((state(ipc,ip,el)%p(1:ns)),& - constitutive_titanmod_interactionMatrix_ee(1:ns,s,matID))+ & + constitutive_titanmod_interactionMatrix_ee(1:ns,s,instance))+ & dot_product((state(ipc,ip,el)%p(ns+1_pInt:2_pInt*ns)),& - constitutive_titanmod_interactionMatrix_es(1:ns,s,matID))) + constitutive_titanmod_interactionMatrix_es(1:ns,s,instance))) !-------------------------------------------------------------------------------------------------- ! threshold stress or slip resistance for screw dislocation motion forall (s = 1_pInt:ns) & state(ipc,ip,el)%p(6_pInt*ns+nt+s) = & - constitutive_titanmod_Gmod(matID)*constitutive_titanmod_burgersPerSlipSys(s,matID)*& + constitutive_titanmod_Gmod(instance)*constitutive_titanmod_burgersPerSlipSys(s,instance)*& sqrt(dot_product((state(ipc,ip,el)%p(1:ns)),& - constitutive_titanmod_interactionMatrix_es(1:ns,s,matID))+ & + constitutive_titanmod_interactionMatrix_es(1:ns,s,instance))+ & dot_product((state(ipc,ip,el)%p(ns+1_pInt:2_pInt*ns)),& - constitutive_titanmod_interactionMatrix_ss(1:ns,s,matID))) + constitutive_titanmod_interactionMatrix_ss(1:ns,s,instance))) !-------------------------------------------------------------------------------------------------- ! threshold stress or slip resistance for dislocation motion in twin forall (t = 1_pInt:nt) & state(ipc,ip,el)%p(7_pInt*ns+nt+t) = & - constitutive_titanmod_Gmod(matID)*constitutive_titanmod_burgersPerTwinSys(t,matID)*& + constitutive_titanmod_Gmod(instance)*constitutive_titanmod_burgersPerTwinSys(t,instance)*& (dot_product((abs(state(ipc,ip,el)%p(2_pInt*ns+1_pInt:2_pInt*ns+nt))),& - constitutive_titanmod_interactionMatrixTwinTwin(1:nt,t,matID))) + constitutive_titanmod_interactionMatrixTwinTwin(1:nt,t,instance))) end subroutine constitutive_titanmod_microstructure @@ -1308,7 +1357,7 @@ subroutine constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,& type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(inout) :: & state !< microstructure state integer(pInt) :: & - index_myFamily, matID,structID, & + index_myFamily, instance,structID, & ns,nt, & f,i,j,k,l,m,n real(pReal) :: sumf, & @@ -1326,14 +1375,14 @@ subroutine constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,& !-------------------------------------------------------------------------------------------------- ! shortened notation - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) - structID = constitutive_titanmod_structure(matID) - ns = constitutive_titanmod_totalNslip(matID) - nt = constitutive_titanmod_totalNtwin(matID) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + structID = constitutive_titanmod_structure(instance) + ns = constitutive_titanmod_totalNslip(instance) + nt = constitutive_titanmod_totalNtwin(instance) do i=1_pInt,nt volumefraction_PerTwinSys(i)=state(ipc,ip,el)%p(3_pInt*ns+i)/ & - constitutive_titanmod_twinshearconstant_PerTwinSys(i,matID) + constitutive_titanmod_twinshearconstant_PerTwinSys(i,instance) enddo @@ -1352,22 +1401,22 @@ subroutine constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,& j = 0_pInt slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_titanmod_Nslip(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_titanmod_Nslip(f,instance) ! process each (active) slip system in family j = j+1_pInt !* Calculation of Lp !* Resolved shear stress on slip system tau_slip(j) = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,structID)) if(structID==3_pInt) then ! only for prismatic and pyr systems in hex - screwvelocity_prefactor=constitutive_titanmod_debyefrequency(matID)* & - state(ipc,ip,el)%p(4_pInt*ns+nt+j)*(constitutive_titanmod_burgersPerSlipSys(j,matID)/ & - constitutive_titanmod_kinkcriticallength_PerSlipSys(j,matID))**2 + screwvelocity_prefactor=constitutive_titanmod_debyefrequency(instance)* & + state(ipc,ip,el)%p(4_pInt*ns+nt+j)*(constitutive_titanmod_burgersPerSlipSys(j,instance)/ & + constitutive_titanmod_kinkcriticallength_PerSlipSys(j,instance))**2 !* Stress ratio for screw ! No slip resistance for screw dislocations, only Peierls stress - bottomstress_screw=constitutive_titanmod_tau0s_PerSlipSys(j,matID) + bottomstress_screw=constitutive_titanmod_tau0s_PerSlipSys(j,instance) StressRatio_screw_p = ((abs(tau_slip(j)))/ & ( bottomstress_screw) & - )**constitutive_titanmod_ps_PerSlipSys(j,matID) + )**constitutive_titanmod_ps_PerSlipSys(j,instance) if((1.0_pReal-StressRatio_screw_p)>0.001_pReal) then minusStressRatio_screw_p=1.0_pReal-StressRatio_screw_p @@ -1375,18 +1424,18 @@ subroutine constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,& minusStressRatio_screw_p=0.001_pReal endif - bottomstress_screw=constitutive_titanmod_tau0s_PerSlipSys(j,matID) + bottomstress_screw=constitutive_titanmod_tau0s_PerSlipSys(j,instance) StressRatio_screw_pminus1 = ((abs(tau_slip(j)))/ & ( bottomstress_screw) & - )**(constitutive_titanmod_ps_PerSlipSys(j,matID)-1.0_pReal) + )**(constitutive_titanmod_ps_PerSlipSys(j,instance)-1.0_pReal) !* Boltzmann ratio for screw - BoltzmannRatioscrew = constitutive_titanmod_kinkf0(matID)/(kB*Temperature) + BoltzmannRatioscrew = constitutive_titanmod_kinkf0(instance)/(kB*Temperature) else ! if the structure is not hex or the slip family is basal - screwvelocity_prefactor=constitutive_titanmod_v0s_PerSlipSys(j,matID) - bottomstress_screw=constitutive_titanmod_tau0s_PerSlipSys(j,matID)+state(ipc,ip,el)%p(6*ns+nt+j) - StressRatio_screw_p = ((abs(tau_slip(j)))/( bottomstress_screw ))**constitutive_titanmod_ps_PerSlipSys(j,matID) + screwvelocity_prefactor=constitutive_titanmod_v0s_PerSlipSys(j,instance) + bottomstress_screw=constitutive_titanmod_tau0s_PerSlipSys(j,instance)+state(ipc,ip,el)%p(6*ns+nt+j) + StressRatio_screw_p = ((abs(tau_slip(j)))/( bottomstress_screw ))**constitutive_titanmod_ps_PerSlipSys(j,instance) if((1.0_pReal-StressRatio_screw_p)>0.001_pReal) then minusStressRatio_screw_p=1.0_pReal-StressRatio_screw_p @@ -1395,18 +1444,18 @@ subroutine constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,& endif StressRatio_screw_pminus1 = ((abs(tau_slip(j)))/( bottomstress_screw))** & - (constitutive_titanmod_ps_PerSlipSys(j,matID)-1.0_pReal) + (constitutive_titanmod_ps_PerSlipSys(j,instance)-1.0_pReal) !* Boltzmann ratio for screw - BoltzmannRatioscrew = constitutive_titanmod_f0_PerSlipSys(j,matID)/(kB*Temperature) + BoltzmannRatioscrew = constitutive_titanmod_f0_PerSlipSys(j,instance)/(kB*Temperature) endif !* Stress ratio for edge - bottomstress_edge=constitutive_titanmod_tau0e_PerSlipSys(j,matID)+state(ipc,ip,el)%p(5*ns+nt+j) + bottomstress_edge=constitutive_titanmod_tau0e_PerSlipSys(j,instance)+state(ipc,ip,el)%p(5*ns+nt+j) StressRatio_edge_p = ((abs(tau_slip(j)))/ & ( bottomstress_edge) & - )**constitutive_titanmod_pe_PerSlipSys(j,matID) + )**constitutive_titanmod_pe_PerSlipSys(j,instance) if((1.0_pReal-StressRatio_edge_p)>0.001_pReal) then minusStressRatio_edge_p=1.0_pReal-StressRatio_edge_p @@ -1415,24 +1464,24 @@ subroutine constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,& endif StressRatio_edge_pminus1 = ((abs(tau_slip(j)))/( bottomstress_edge))** & - (constitutive_titanmod_pe_PerSlipSys(j,matID)-1.0_pReal) + (constitutive_titanmod_pe_PerSlipSys(j,instance)-1.0_pReal) !* Boltzmann ratio for edge. For screws it is defined above - BoltzmannRatioedge = constitutive_titanmod_f0_PerSlipSys(j,matID)/(kB*Temperature) + BoltzmannRatioedge = constitutive_titanmod_f0_PerSlipSys(j,instance)/(kB*Temperature) screw_velocity(j) =screwvelocity_prefactor * & ! there is no v0 for screw now because it is included in the prefactor exp(-BoltzmannRatioscrew*(minusStressRatio_screw_p)** & - constitutive_titanmod_qs_PerSlipSys(j,matID)) + constitutive_titanmod_qs_PerSlipSys(j,instance)) - edge_velocity(j) =constitutive_titanmod_v0e_PerSlipSys(j,matID)*exp(-BoltzmannRatioedge* & + edge_velocity(j) =constitutive_titanmod_v0e_PerSlipSys(j,instance)*exp(-BoltzmannRatioedge* & (minusStressRatio_edge_p)** & - constitutive_titanmod_qe_PerSlipSys(j,matID)) + constitutive_titanmod_qe_PerSlipSys(j,instance)) !* Shear rates due to edge slip - gdot_slip_edge(j) = constitutive_titanmod_burgersPerSlipSys(j,matID)*(state(ipc,ip,el)%p(j)* & + gdot_slip_edge(j) = constitutive_titanmod_burgersPerSlipSys(j,instance)*(state(ipc,ip,el)%p(j)* & edge_velocity(j))* sign(1.0_pReal,tau_slip(j)) !* Shear rates due to screw slip - gdot_slip_screw(j) = constitutive_titanmod_burgersPerSlipSys(j,matID)*(state(ipc,ip,el)%p(ns+j) * & + gdot_slip_screw(j) = constitutive_titanmod_burgersPerSlipSys(j,instance)*(state(ipc,ip,el)%p(ns+j) * & screw_velocity(j))* sign(1.0_pReal,tau_slip(j)) !Total shear rate @@ -1447,31 +1496,31 @@ subroutine constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,& state(ipc,ip,el)%p(13*ns+2*nt+j)=StressRatio_screw_p !* Derivatives of shear rates - dgdot_dtauslip(j) = constitutive_titanmod_burgersPerSlipSys(j,matID)*(( & + dgdot_dtauslip(j) = constitutive_titanmod_burgersPerSlipSys(j,instance)*(( & ( & ( & ( & (edge_velocity(j)*state(ipc,ip,el)%p(j))) * & BoltzmannRatioedge*& - constitutive_titanmod_pe_PerSlipSys(j,matID)* & - constitutive_titanmod_qe_PerSlipSys(j,matID) & + constitutive_titanmod_pe_PerSlipSys(j,instance)* & + constitutive_titanmod_qe_PerSlipSys(j,instance) & )/ & bottomstress_edge & )*& StressRatio_edge_pminus1*(minusStressRatio_edge_p)** & - (constitutive_titanmod_qe_PerSlipSys(j,matID)-1.0_pReal) & + (constitutive_titanmod_qe_PerSlipSys(j,instance)-1.0_pReal) & ) + & ( & ( & ( & (state(ipc,ip,el)%p(ns+j) * screw_velocity(j)) * & BoltzmannRatioscrew* & - constitutive_titanmod_ps_PerSlipSys(j,matID)* & - constitutive_titanmod_qs_PerSlipSys(j,matID) & + constitutive_titanmod_ps_PerSlipSys(j,instance)* & + constitutive_titanmod_qs_PerSlipSys(j,instance) & )/ & bottomstress_screw & )*& - StressRatio_screw_pminus1*(minusStressRatio_screw_p)**(constitutive_titanmod_qs_PerSlipSys(j,matID)-1.0_pReal) & + StressRatio_screw_pminus1*(minusStressRatio_screw_p)**(constitutive_titanmod_qs_PerSlipSys(j,instance)-1.0_pReal) & ) & ) !* sign(1.0_pReal,tau_slip(j)) @@ -1497,7 +1546,7 @@ subroutine constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,& j = 0_pInt twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_titanmod_Ntwin(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_titanmod_Ntwin(f,instance) ! process each (active) slip system in family j = j+1_pInt !* Calculation of Lp @@ -1506,21 +1555,21 @@ subroutine constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,& !************************************************************************************** !* Stress ratios -! StressRatio_r = (state(ipc,ip,el)%p(6*ns+3*nt+j)/tau_twin(j))**constitutive_titanmod_r(matID) +! StressRatio_r = (state(ipc,ip,el)%p(6*ns+3*nt+j)/tau_twin(j))**constitutive_titanmod_r(instance) !* Shear rates and their derivatives due to twin ! if ( tau_twin(j) > 0.0_pReal ) !then ! gdot_twin(j) = 0.0_pReal!& -! (constitutive_titanmod_MaxTwinFraction(matID)-sumf)*lattice_shearTwin(index_myFamily+i,structID)*& -! state(ipc,ip,el)%p(6*ns+4*nt+j)*constitutive_titanmod_Ndot0PerTwinSys(f,matID)*exp(-StressRatio_r) -! dgdot_dtautwin(j) = ((gdot_twin(j)*constitutive_titanmod_r(matID))/tau_twin(j))*StressRatio_r +! (constitutive_titanmod_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,structID)*& +! state(ipc,ip,el)%p(6*ns+4*nt+j)*constitutive_titanmod_Ndot0PerTwinSys(f,instance)*exp(-StressRatio_r) +! dgdot_dtautwin(j) = ((gdot_twin(j)*constitutive_titanmod_r(instance))/tau_twin(j))*StressRatio_r ! endif !************************************************************************************** !* Stress ratio for edge twinStressRatio_p = ((abs(tau_twin(j)))/ & - ( constitutive_titanmod_twintau0_PerTwinSys(j,matID)+state(ipc,ip,el)%p(7*ns+nt+j)) & - )**constitutive_titanmod_twinp_PerTwinSys(j,matID) + ( constitutive_titanmod_twintau0_PerTwinSys(j,instance)+state(ipc,ip,el)%p(7*ns+nt+j)) & + )**constitutive_titanmod_twinp_PerTwinSys(j,instance) if((1.0_pReal-twinStressRatio_p)>0.001_pReal) then twinminusStressRatio_p=1.0_pReal-twinStressRatio_p @@ -1529,19 +1578,19 @@ subroutine constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,& endif twinStressRatio_pminus1 = ((abs(tau_twin(j)))/ & - ( constitutive_titanmod_twintau0_PerTwinSys(j,matID)+state(ipc,ip,el)%p(7*ns+nt+j)) & - )**(constitutive_titanmod_twinp_PerTwinSys(j,matID)-1.0_pReal) + ( constitutive_titanmod_twintau0_PerTwinSys(j,instance)+state(ipc,ip,el)%p(7*ns+nt+j)) & + )**(constitutive_titanmod_twinp_PerTwinSys(j,instance)-1.0_pReal) !* Boltzmann ratio - BoltzmannRatiotwin = constitutive_titanmod_twinf0_PerTwinSys(j,matID)/(kB*Temperature) + BoltzmannRatiotwin = constitutive_titanmod_twinf0_PerTwinSys(j,instance)/(kB*Temperature) !* Initial twin shear rates TwinDotGamma0 = & - constitutive_titanmod_twingamma0_PerTwinSys(j,matID) + constitutive_titanmod_twingamma0_PerTwinSys(j,instance) !* Shear rates due to twin - gdot_twin(j) =sign(1.0_pReal,tau_twin(j))*constitutive_titanmod_twingamma0_PerTwinSys(j,matID)* & - exp(-BoltzmannRatiotwin*(twinminusStressRatio_p)**constitutive_titanmod_twinq_PerTwinSys(j,matID)) + gdot_twin(j) =sign(1.0_pReal,tau_twin(j))*constitutive_titanmod_twingamma0_PerTwinSys(j,instance)* & + exp(-BoltzmannRatiotwin*(twinminusStressRatio_p)**constitutive_titanmod_twinq_PerTwinSys(j,instance)) !* Derivatives of shear rates in twin @@ -1550,13 +1599,13 @@ subroutine constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,& ( & (abs(gdot_twin(j))) * & BoltzmannRatiotwin*& - constitutive_titanmod_twinp_PerTwinSys(j,matID)* & - constitutive_titanmod_twinq_PerTwinSys(j,matID) & + constitutive_titanmod_twinp_PerTwinSys(j,instance)* & + constitutive_titanmod_twinq_PerTwinSys(j,instance) & )/ & - constitutive_titanmod_twintau0_PerTwinSys(j,matID) & + constitutive_titanmod_twintau0_PerTwinSys(j,instance) & )*& twinStressRatio_pminus1*(twinminusStressRatio_p)** & - (constitutive_titanmod_twinq_PerTwinSys(j,matID)-1.0_pReal) & + (constitutive_titanmod_twinq_PerTwinSys(j,instance)-1.0_pReal) & ) !* sign(1.0_pReal,tau_slip(j)) !* Plastic velocity gradient for mechanical twinning @@ -1612,7 +1661,7 @@ implicit none constitutive_titanmod_dotState integer(pInt) :: & - index_myFamily, matID,structID, & + index_myFamily, instance,structID, & ns,nt,& f,i,j real(pReal) :: & @@ -1630,14 +1679,14 @@ implicit none !-------------------------------------------------------------------------------------------------- ! shortened notation - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) - structID = constitutive_titanmod_structure(matID) - ns = constitutive_titanmod_totalNslip(matID) - nt = constitutive_titanmod_totalNtwin(matID) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + structID = constitutive_titanmod_structure(instance) + ns = constitutive_titanmod_totalNslip(instance) + nt = constitutive_titanmod_totalNtwin(instance) do i=1_pInt,nt volumefraction_PerTwinSys(i)=state(ipc,ip,el)%p(3_pInt*ns+i)/ & - constitutive_titanmod_twinshearconstant_PerTwinSys(i,matID) + constitutive_titanmod_twinshearconstant_PerTwinSys(i,instance) enddo @@ -1648,7 +1697,7 @@ implicit none j = 0_pInt slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_titanmod_Nslip(f,matID) ! process each (active) slip system in family + do i = 1_pInt,constitutive_titanmod_Nslip(f,instance) ! process each (active) slip system in family j = j+1_pInt DotRhoEdgeGeneration(j) = & ! multiplication of edge dislocations @@ -1656,9 +1705,9 @@ implicit none DotRhoScrewGeneration(j) = & ! multiplication of screw dislocations state(ipc,ip,el)%p(j)*state(ipc,ip,el)%p(7*ns+2*nt+j)/state(ipc,ip,el)%p(3*ns+nt+j) DotRhoEdgeAnnihilation(j) = -((state(ipc,ip,el)%p(j))**2)* & ! annihilation of edge dislocations - constitutive_titanmod_capre_PerSlipSys(j,matID)*state(ipc,ip,el)%p(7*ns+2*nt+j)*0.5_pReal + constitutive_titanmod_capre_PerSlipSys(j,instance)*state(ipc,ip,el)%p(7*ns+2*nt+j)*0.5_pReal DotRhoScrewAnnihilation(j) = -((state(ipc,ip,el)%p(ns+j))**2)* & ! annihilation of screw dislocations - constitutive_titanmod_caprs_PerSlipSys(j,matID)*state(ipc,ip,el)%p(8*ns+2*nt+j)*0.5_pReal + constitutive_titanmod_caprs_PerSlipSys(j,instance)*state(ipc,ip,el)%p(8*ns+2*nt+j)*0.5_pReal constitutive_titanmod_dotState(j) = & ! edge dislocation density rate of change DotRhoEdgeGeneration(j)+DotRhoEdgeAnnihilation(j) @@ -1674,7 +1723,7 @@ implicit none j = 0_pInt twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,structID)) ! at which index starts my family - do i = 1_pInt,constitutive_titanmod_Ntwin(f,matID) ! process each (active) twin system in family + do i = 1_pInt,constitutive_titanmod_Ntwin(f,instance) ! process each (active) twin system in family j = j+1_pInt !* Resolved shear stress on twin system @@ -1682,8 +1731,8 @@ implicit none !* Stress ratio for edge twinStressRatio_p = ((abs(tau_twin(j)))/ & - ( constitutive_titanmod_twintau0_PerTwinSys(j,matID)+state(ipc,ip,el)%p(7*ns+nt+j)) & - )**(constitutive_titanmod_twinp_PerTwinSys(j,matID)) + ( constitutive_titanmod_twintau0_PerTwinSys(j,instance)+state(ipc,ip,el)%p(7*ns+nt+j)) & + )**(constitutive_titanmod_twinp_PerTwinSys(j,instance)) if((1.0_pReal-twinStressRatio_p)>0.001_pReal) then @@ -1692,11 +1741,11 @@ implicit none twinminusStressRatio_p=0.001_pReal endif - BoltzmannRatio = constitutive_titanmod_twinf0_PerTwinSys(j,matID)/(kB*Temperature) + BoltzmannRatio = constitutive_titanmod_twinf0_PerTwinSys(j,instance)/(kB*Temperature) - gdot_twin(j) =constitutive_titanmod_twingamma0_PerTwinSys(j,matID)*exp(-BoltzmannRatio* & + gdot_twin(j) =constitutive_titanmod_twingamma0_PerTwinSys(j,instance)*exp(-BoltzmannRatio* & (twinminusStressRatio_p)** & - constitutive_titanmod_twinq_PerTwinSys(j,matID))*sign(1.0_pReal,tau_twin(j)) + constitutive_titanmod_twinq_PerTwinSys(j,instance))*sign(1.0_pReal,tau_twin(j)) constitutive_titanmod_dotState(3*ns+j)=gdot_twin(j) @@ -1732,7 +1781,7 @@ pure function constitutive_titanmod_postResults(state,ipc,ip,el) constitutive_titanmod_postResults integer(pInt) :: & - matID, structID,& + instance, structID,& ns,nt,& o,i,c real(pReal) :: sumf @@ -1742,14 +1791,14 @@ pure function constitutive_titanmod_postResults(state,ipc,ip,el) !-------------------------------------------------------------------------------------------------- ! shortened notation - matID = phase_plasticityInstance(material_phase(ipc,ip,el)) - structID = constitutive_titanmod_structure(matID) - ns = constitutive_titanmod_totalNslip(matID) - nt = constitutive_titanmod_totalNtwin(matID) + instance = phase_plasticityInstance(material_phase(ipc,ip,el)) + structID = constitutive_titanmod_structure(instance) + ns = constitutive_titanmod_totalNslip(instance) + nt = constitutive_titanmod_totalNtwin(instance) do i=1_pInt,nt volumefraction_PerTwinSys(i)=state(ipc,ip,el)%p(3_pInt*ns+i)/ & - constitutive_titanmod_twinshearconstant_PerTwinSys(i,matID) + constitutive_titanmod_twinshearconstant_PerTwinSys(i,instance) enddo sumf = sum(abs(volumefraction_PerTwinSys(1:nt))) ! safe for nt == 0 @@ -1761,7 +1810,7 @@ pure function constitutive_titanmod_postResults(state,ipc,ip,el) constitutive_titanmod_postResults = 0.0_pReal do o = 1_pInt,phase_Noutput(material_phase(ipc,ip,el)) - select case(constitutive_titanmod_outputID(o,matID)) + select case(constitutive_titanmod_outputID(o,instance)) case (rhoedge_ID) constitutive_titanmod_postResults(c+1_pInt:c+ns) = state(ipc,ip,el)%p(1_pInt:ns) c = c + ns