renamed "maxNmatIDs" accordingly to "maxNinstances"
This commit is contained in:
parent
943349fdbb
commit
0265978941
|
@ -340,7 +340,7 @@ integer(pInt), &
|
||||||
dimension(1_pInt+2_pInt*MAXNCHUNKS) :: positions
|
dimension(1_pInt+2_pInt*MAXNCHUNKS) :: positions
|
||||||
integer(pInt), dimension(7) :: configNchunks
|
integer(pInt), dimension(7) :: configNchunks
|
||||||
integer(pInt) :: section = 0_pInt, &
|
integer(pInt) :: section = 0_pInt, &
|
||||||
maxNmatIDs, &
|
maxNinstances, &
|
||||||
maxTotalNslip, &
|
maxTotalNslip, &
|
||||||
structID, &
|
structID, &
|
||||||
f, & ! index of my slip family
|
f, & ! index of my slip family
|
||||||
|
@ -369,74 +369,74 @@ integer(pInt) :: section = 0_pInt, &
|
||||||
write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
|
write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
|
||||||
#include "compilation_info.f90"
|
#include "compilation_info.f90"
|
||||||
|
|
||||||
maxNmatIDs = int(count(phase_plasticity == PLASTICITY_NONLOCAL_ID),pInt)
|
maxNinstances = int(count(phase_plasticity == PLASTICITY_NONLOCAL_ID),pInt)
|
||||||
if (maxNmatIDs == 0) return ! we don't have to do anything if there's no instance for this constitutive law
|
if (maxNinstances == 0) return ! we don't have to do anything if there's no instance for this constitutive law
|
||||||
|
|
||||||
if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) &
|
if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) &
|
||||||
write(6,'(a16,1x,i5,/)') '# instances:',maxNmatIDs
|
write(6,'(a16,1x,i5,/)') '# instances:',maxNinstances
|
||||||
|
|
||||||
!*** memory allocation for global variables
|
!*** memory allocation for global variables
|
||||||
|
|
||||||
allocate(constitutive_nonlocal_sizeDotState(maxNmatIDs), source=0_pInt)
|
allocate(constitutive_nonlocal_sizeDotState(maxNinstances), source=0_pInt)
|
||||||
allocate(constitutive_nonlocal_sizeDependentState(maxNmatIDs), source=0_pInt)
|
allocate(constitutive_nonlocal_sizeDependentState(maxNinstances), source=0_pInt)
|
||||||
allocate(constitutive_nonlocal_sizeState(maxNmatIDs), source=0_pInt)
|
allocate(constitutive_nonlocal_sizeState(maxNinstances), source=0_pInt)
|
||||||
allocate(constitutive_nonlocal_sizePostResults(maxNmatIDs), source=0_pInt)
|
allocate(constitutive_nonlocal_sizePostResults(maxNinstances), source=0_pInt)
|
||||||
allocate(constitutive_nonlocal_sizePostResult(maxval(phase_Noutput), maxNmatIDs), source=0_pInt)
|
allocate(constitutive_nonlocal_sizePostResult(maxval(phase_Noutput), maxNinstances), source=0_pInt)
|
||||||
allocate(Noutput(maxNmatIDs), source=0_pInt)
|
allocate(Noutput(maxNinstances), source=0_pInt)
|
||||||
allocate(constitutive_nonlocal_output(maxval(phase_Noutput), maxNmatIDs))
|
allocate(constitutive_nonlocal_output(maxval(phase_Noutput), maxNinstances))
|
||||||
constitutive_nonlocal_output = ''
|
constitutive_nonlocal_output = ''
|
||||||
allocate(constitutive_nonlocal_outputID(maxval(phase_Noutput), maxNmatIDs), source=undefined_ID)
|
allocate(constitutive_nonlocal_outputID(maxval(phase_Noutput), maxNinstances), source=undefined_ID)
|
||||||
allocate(constitutive_nonlocal_structureID(maxNmatIDs), source=LATTICE_undefined_ID)
|
allocate(constitutive_nonlocal_structureID(maxNinstances), source=LATTICE_undefined_ID)
|
||||||
allocate(constitutive_nonlocal_structure(maxNmatIDs), source=0_pInt)
|
allocate(constitutive_nonlocal_structure(maxNinstances), source=0_pInt)
|
||||||
allocate(Nslip(lattice_maxNslipFamily,maxNmatIDs), source=0_pInt)
|
allocate(Nslip(lattice_maxNslipFamily,maxNinstances), source=0_pInt)
|
||||||
allocate(slipFamily(lattice_maxNslip,maxNmatIDs), source=0_pInt)
|
allocate(slipFamily(lattice_maxNslip,maxNinstances), source=0_pInt)
|
||||||
allocate(slipSystemLattice(lattice_maxNslip,maxNmatIDs), source=0_pInt)
|
allocate(slipSystemLattice(lattice_maxNslip,maxNinstances), source=0_pInt)
|
||||||
allocate(totalNslip(maxNmatIDs), source=0_pInt)
|
allocate(totalNslip(maxNinstances), source=0_pInt)
|
||||||
allocate(CoverA(maxNmatIDs), source=0.0_pReal)
|
allocate(CoverA(maxNinstances), source=0.0_pReal)
|
||||||
allocate(mu(maxNmatIDs), source=0.0_pReal)
|
allocate(mu(maxNinstances), source=0.0_pReal)
|
||||||
allocate(nu(maxNmatIDs), source=0.0_pReal)
|
allocate(nu(maxNinstances), source=0.0_pReal)
|
||||||
allocate(atomicVolume(maxNmatIDs), source=0.0_pReal)
|
allocate(atomicVolume(maxNinstances), source=0.0_pReal)
|
||||||
allocate(Dsd0(maxNmatIDs), source=-1.0_pReal)
|
allocate(Dsd0(maxNinstances), source=-1.0_pReal)
|
||||||
allocate(selfDiffusionEnergy(maxNmatIDs), source=0.0_pReal)
|
allocate(selfDiffusionEnergy(maxNinstances), source=0.0_pReal)
|
||||||
allocate(aTolRho(maxNmatIDs), source=0.0_pReal)
|
allocate(aTolRho(maxNinstances), source=0.0_pReal)
|
||||||
allocate(aTolShear(maxNmatIDs), source=0.0_pReal)
|
allocate(aTolShear(maxNinstances), source=0.0_pReal)
|
||||||
allocate(significantRho(maxNmatIDs), source=0.0_pReal)
|
allocate(significantRho(maxNinstances), source=0.0_pReal)
|
||||||
allocate(significantN(maxNmatIDs), source=0.0_pReal)
|
allocate(significantN(maxNinstances), source=0.0_pReal)
|
||||||
allocate(Cslip66(6,6,maxNmatIDs), source=0.0_pReal)
|
allocate(Cslip66(6,6,maxNinstances), source=0.0_pReal)
|
||||||
allocate(Cslip3333(3,3,3,3,maxNmatIDs), source=0.0_pReal)
|
allocate(Cslip3333(3,3,3,3,maxNinstances), source=0.0_pReal)
|
||||||
allocate(cutoffRadius(maxNmatIDs), source=-1.0_pReal)
|
allocate(cutoffRadius(maxNinstances), source=-1.0_pReal)
|
||||||
allocate(doublekinkwidth(maxNmatIDs), source=0.0_pReal)
|
allocate(doublekinkwidth(maxNinstances), source=0.0_pReal)
|
||||||
allocate(solidSolutionEnergy(maxNmatIDs), source=0.0_pReal)
|
allocate(solidSolutionEnergy(maxNinstances), source=0.0_pReal)
|
||||||
allocate(solidSolutionSize(maxNmatIDs), source=0.0_pReal)
|
allocate(solidSolutionSize(maxNinstances), source=0.0_pReal)
|
||||||
allocate(solidSolutionConcentration(maxNmatIDs), source=0.0_pReal)
|
allocate(solidSolutionConcentration(maxNinstances), source=0.0_pReal)
|
||||||
allocate(pParam(maxNmatIDs), source=1.0_pReal)
|
allocate(pParam(maxNinstances), source=1.0_pReal)
|
||||||
allocate(qParam(maxNmatIDs), source=1.0_pReal)
|
allocate(qParam(maxNinstances), source=1.0_pReal)
|
||||||
allocate(viscosity(maxNmatIDs), source=0.0_pReal)
|
allocate(viscosity(maxNinstances), source=0.0_pReal)
|
||||||
allocate(fattack(maxNmatIDs), source=0.0_pReal)
|
allocate(fattack(maxNinstances), source=0.0_pReal)
|
||||||
allocate(rhoSglScatter(maxNmatIDs), source=0.0_pReal)
|
allocate(rhoSglScatter(maxNinstances), source=0.0_pReal)
|
||||||
allocate(rhoSglRandom(maxNmatIDs), source=0.0_pReal)
|
allocate(rhoSglRandom(maxNinstances), source=0.0_pReal)
|
||||||
allocate(rhoSglRandomBinning(maxNmatIDs), source=1.0_pReal)
|
allocate(rhoSglRandomBinning(maxNinstances), source=1.0_pReal)
|
||||||
allocate(surfaceTransmissivity(maxNmatIDs), source=1.0_pReal)
|
allocate(surfaceTransmissivity(maxNinstances), source=1.0_pReal)
|
||||||
allocate(grainboundaryTransmissivity(maxNmatIDs), source=-1.0_pReal)
|
allocate(grainboundaryTransmissivity(maxNinstances), source=-1.0_pReal)
|
||||||
allocate(CFLfactor(maxNmatIDs), source=2.0_pReal)
|
allocate(CFLfactor(maxNinstances), source=2.0_pReal)
|
||||||
allocate(fEdgeMultiplication(maxNmatIDs), source=0.0_pReal)
|
allocate(fEdgeMultiplication(maxNinstances), source=0.0_pReal)
|
||||||
allocate(linetensionEffect(maxNmatIDs), source=0.0_pReal)
|
allocate(linetensionEffect(maxNinstances), source=0.0_pReal)
|
||||||
allocate(edgeJogFactor(maxNmatIDs), source=1.0_pReal)
|
allocate(edgeJogFactor(maxNinstances), source=1.0_pReal)
|
||||||
allocate(shortRangeStressCorrection(maxNmatIDs), source=.false.)
|
allocate(shortRangeStressCorrection(maxNinstances), source=.false.)
|
||||||
allocate(probabilisticMultiplication(maxNmatIDs), source=.false.)
|
allocate(probabilisticMultiplication(maxNinstances), source=.false.)
|
||||||
|
|
||||||
allocate(rhoSglEdgePos0(lattice_maxNslipFamily,maxNmatIDs), source=-1.0_pReal)
|
allocate(rhoSglEdgePos0(lattice_maxNslipFamily,maxNinstances), source=-1.0_pReal)
|
||||||
allocate(rhoSglEdgeNeg0(lattice_maxNslipFamily,maxNmatIDs), source=-1.0_pReal)
|
allocate(rhoSglEdgeNeg0(lattice_maxNslipFamily,maxNinstances), source=-1.0_pReal)
|
||||||
allocate(rhoSglScrewPos0(lattice_maxNslipFamily,maxNmatIDs), source=-1.0_pReal)
|
allocate(rhoSglScrewPos0(lattice_maxNslipFamily,maxNinstances), source=-1.0_pReal)
|
||||||
allocate(rhoSglScrewNeg0(lattice_maxNslipFamily,maxNmatIDs), source=-1.0_pReal)
|
allocate(rhoSglScrewNeg0(lattice_maxNslipFamily,maxNinstances), source=-1.0_pReal)
|
||||||
allocate(rhoDipEdge0(lattice_maxNslipFamily,maxNmatIDs), source=-1.0_pReal)
|
allocate(rhoDipEdge0(lattice_maxNslipFamily,maxNinstances), source=-1.0_pReal)
|
||||||
allocate(rhoDipScrew0(lattice_maxNslipFamily,maxNmatIDs), source=-1.0_pReal)
|
allocate(rhoDipScrew0(lattice_maxNslipFamily,maxNinstances), source=-1.0_pReal)
|
||||||
allocate(burgersPerSlipFamily(lattice_maxNslipFamily,maxNmatIDs), source=0.0_pReal)
|
allocate(burgersPerSlipFamily(lattice_maxNslipFamily,maxNinstances), source=0.0_pReal)
|
||||||
allocate(lambda0PerSlipFamily(lattice_maxNslipFamily,maxNmatIDs), source=0.0_pReal)
|
allocate(lambda0PerSlipFamily(lattice_maxNslipFamily,maxNinstances), source=0.0_pReal)
|
||||||
allocate(interactionSlipSlip(lattice_maxNinteraction,maxNmatIDs), source=0.0_pReal)
|
allocate(interactionSlipSlip(lattice_maxNinteraction,maxNinstances), source=0.0_pReal)
|
||||||
allocate(minDipoleHeightPerSlipFamily(lattice_maxNslipFamily,2,maxNmatIDs), source=-1.0_pReal)
|
allocate(minDipoleHeightPerSlipFamily(lattice_maxNslipFamily,2,maxNinstances), source=-1.0_pReal)
|
||||||
allocate(peierlsStressPerSlipFamily(lattice_maxNslipFamily,2,maxNmatIDs), source=0.0_pReal)
|
allocate(peierlsStressPerSlipFamily(lattice_maxNslipFamily,2,maxNinstances), source=0.0_pReal)
|
||||||
allocate(nonSchmidCoeff(lattice_maxNnonSchmid,maxNmatIDs), source=0.0_pReal)
|
allocate(nonSchmidCoeff(lattice_maxNnonSchmid,maxNinstances), source=0.0_pReal)
|
||||||
|
|
||||||
|
|
||||||
!*** readout data from material.config file
|
!*** readout data from material.config file
|
||||||
|
@ -807,7 +807,7 @@ do while (trim(line) /= IO_EOF)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
|
||||||
do instance = 1_pInt,maxNmatIDs
|
do instance = 1_pInt,maxNinstances
|
||||||
|
|
||||||
constitutive_nonlocal_structure(instance) = &
|
constitutive_nonlocal_structure(instance) = &
|
||||||
lattice_initializeStructure(constitutive_nonlocal_structureID(instance), CoverA(instance)) ! our lattice structure is defined in the material.config file by the structureName (and the c/a ratio)
|
lattice_initializeStructure(constitutive_nonlocal_structureID(instance), CoverA(instance)) ! our lattice structure is defined in the material.config file by the structureName (and the c/a ratio)
|
||||||
|
@ -919,23 +919,23 @@ enddo
|
||||||
|
|
||||||
maxTotalNslip = maxval(totalNslip)
|
maxTotalNslip = maxval(totalNslip)
|
||||||
|
|
||||||
allocate(iRhoU(maxTotalNslip,4,maxNmatIDs), source=0_pInt)
|
allocate(iRhoU(maxTotalNslip,4,maxNinstances), source=0_pInt)
|
||||||
allocate(iRhoB(maxTotalNslip,4,maxNmatIDs), source=0_pInt)
|
allocate(iRhoB(maxTotalNslip,4,maxNinstances), source=0_pInt)
|
||||||
allocate(iRhoD(maxTotalNslip,2,maxNmatIDs), source=0_pInt)
|
allocate(iRhoD(maxTotalNslip,2,maxNinstances), source=0_pInt)
|
||||||
allocate(iV(maxTotalNslip,4,maxNmatIDs), source=0_pInt)
|
allocate(iV(maxTotalNslip,4,maxNinstances), source=0_pInt)
|
||||||
allocate(iD(maxTotalNslip,2,maxNmatIDs), source=0_pInt)
|
allocate(iD(maxTotalNslip,2,maxNinstances), source=0_pInt)
|
||||||
allocate(iGamma(maxTotalNslip,maxNmatIDs), source=0_pInt)
|
allocate(iGamma(maxTotalNslip,maxNinstances), source=0_pInt)
|
||||||
allocate(iRhoF(maxTotalNslip,maxNmatIDs), source=0_pInt)
|
allocate(iRhoF(maxTotalNslip,maxNinstances), source=0_pInt)
|
||||||
allocate(iTauF(maxTotalNslip,maxNmatIDs), source=0_pInt)
|
allocate(iTauF(maxTotalNslip,maxNinstances), source=0_pInt)
|
||||||
allocate(iTauB(maxTotalNslip,maxNmatIDs), source=0_pInt)
|
allocate(iTauB(maxTotalNslip,maxNinstances), source=0_pInt)
|
||||||
|
|
||||||
allocate(burgers(maxTotalNslip,maxNmatIDs), source=0.0_pReal)
|
allocate(burgers(maxTotalNslip,maxNinstances), source=0.0_pReal)
|
||||||
allocate(lambda0(maxTotalNslip,maxNmatIDs), source=0.0_pReal)
|
allocate(lambda0(maxTotalNslip,maxNinstances), source=0.0_pReal)
|
||||||
allocate(minDipoleHeight(maxTotalNslip,2,maxNmatIDs), source=-1.0_pReal)
|
allocate(minDipoleHeight(maxTotalNslip,2,maxNinstances), source=-1.0_pReal)
|
||||||
allocate(forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNmatIDs), source=0.0_pReal)
|
allocate(forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstances), source=0.0_pReal)
|
||||||
allocate(forestProjectionScrew(maxTotalNslip,maxTotalNslip,maxNmatIDs), source=0.0_pReal)
|
allocate(forestProjectionScrew(maxTotalNslip,maxTotalNslip,maxNinstances), source=0.0_pReal)
|
||||||
allocate(interactionMatrixSlipSlip(maxTotalNslip,maxTotalNslip,maxNmatIDs), source=0.0_pReal)
|
allocate(interactionMatrixSlipSlip(maxTotalNslip,maxTotalNslip,maxNinstances), source=0.0_pReal)
|
||||||
allocate(lattice2slip(1:3, 1:3, maxTotalNslip,maxNmatIDs), source=0.0_pReal)
|
allocate(lattice2slip(1:3, 1:3, maxTotalNslip,maxNinstances), source=0.0_pReal)
|
||||||
allocate(sourceProbability(maxTotalNslip,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), &
|
allocate(sourceProbability(maxTotalNslip,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), &
|
||||||
source=2.0_pReal)
|
source=2.0_pReal)
|
||||||
|
|
||||||
|
@ -954,12 +954,12 @@ allocate(rhoDotEdgeJogsOutput(maxTotalNslip,homogenization_maxNgrains,mesh_maxNi
|
||||||
|
|
||||||
allocate(compatibility(2,maxTotalNslip,maxTotalNslip,mesh_maxNipNeighbors,mesh_maxNips,mesh_NcpElems), &
|
allocate(compatibility(2,maxTotalNslip,maxTotalNslip,mesh_maxNipNeighbors,mesh_maxNips,mesh_NcpElems), &
|
||||||
source=0.0_pReal)
|
source=0.0_pReal)
|
||||||
allocate(peierlsStress(maxTotalNslip,2,maxNmatIDs), source=0.0_pReal)
|
allocate(peierlsStress(maxTotalNslip,2,maxNinstances), source=0.0_pReal)
|
||||||
allocate(colinearSystem(maxTotalNslip,maxNmatIDs), source=0_pInt)
|
allocate(colinearSystem(maxTotalNslip,maxNinstances), source=0_pInt)
|
||||||
allocate(nonSchmidProjection(3,3,4,maxTotalNslip,maxNmatIDs), source=0.0_pReal)
|
allocate(nonSchmidProjection(3,3,4,maxTotalNslip,maxNinstances), source=0.0_pReal)
|
||||||
|
|
||||||
|
|
||||||
instancesLoop: do instance = 1,maxNmatIDs
|
instancesLoop: do instance = 1,maxNinstances
|
||||||
|
|
||||||
structID = constitutive_nonlocal_structure(instance) ! lattice structure of this instance
|
structID = constitutive_nonlocal_structure(instance) ! lattice structure of this instance
|
||||||
|
|
||||||
|
@ -1140,7 +1140,7 @@ instancesLoop: do instance = 1,maxNmatIDs
|
||||||
!*** elasticity matrix and shear modulus according to material.config
|
!*** elasticity matrix and shear modulus according to material.config
|
||||||
|
|
||||||
Cslip66(:,:,instance) = lattice_symmetrizeC66(constitutive_nonlocal_structureID(instance), Cslip66(:,:,instance))
|
Cslip66(:,:,instance) = lattice_symmetrizeC66(constitutive_nonlocal_structureID(instance), Cslip66(:,:,instance))
|
||||||
mu(instance) = 0.2_pReal * ( Cslip66(1,1,instance) - Cslip66(1,2,instance) + 3.0_pReal*Cslip66(4,4,instance)) ! (C11iso-C12iso)/2 with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5
|
mu(instance) = 0.2_pReal * (Cslip66(1,1,instance) - Cslip66(1,2,instance) + 3.0_pReal*Cslip66(4,4,instance)) ! (C11iso-C12iso)/2 with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5
|
||||||
nu(instance) = (Cslip66(1,1,instance) + 4.0_pReal*Cslip66(1,2,instance) - 2.0_pReal*Cslip66(4,4,instance)) &
|
nu(instance) = (Cslip66(1,1,instance) + 4.0_pReal*Cslip66(1,2,instance) - 2.0_pReal*Cslip66(4,4,instance)) &
|
||||||
/ (4.0_pReal*Cslip66(1,1,instance) + 6.0_pReal*Cslip66(1,2,instance) + 2.0_pReal*Cslip66(4,4,instance)) ! C12iso/(C11iso+C12iso) with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5
|
/ (4.0_pReal*Cslip66(1,1,instance) + 6.0_pReal*Cslip66(1,2,instance) + 2.0_pReal*Cslip66(4,4,instance)) ! C12iso/(C11iso+C12iso) with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5
|
||||||
Cslip66(1:6,1:6,instance) = math_Mandel3333to66(math_Voigt66to3333(Cslip66(1:6,1:6,instance)))
|
Cslip66(1:6,1:6,instance) = math_Mandel3333to66(math_Voigt66to3333(Cslip66(1:6,1:6,instance)))
|
||||||
|
@ -1258,7 +1258,7 @@ integer(pInt) el, &
|
||||||
t, &
|
t, &
|
||||||
j, &
|
j, &
|
||||||
instance, &
|
instance, &
|
||||||
maxNmatIDs
|
maxNinstances
|
||||||
real(pReal), dimension(2) :: noise
|
real(pReal), dimension(2) :: noise
|
||||||
real(pReal), dimension(4) :: rnd
|
real(pReal), dimension(4) :: rnd
|
||||||
real(pReal) meanDensity, &
|
real(pReal) meanDensity, &
|
||||||
|
@ -1267,7 +1267,7 @@ real(pReal) meanDensity, &
|
||||||
minimumIpVolume
|
minimumIpVolume
|
||||||
|
|
||||||
|
|
||||||
maxNmatIDs = int(count(phase_plasticity == PLASTICITY_NONLOCAL_ID),pInt)
|
maxNinstances = int(count(phase_plasticity == PLASTICITY_NONLOCAL_ID),pInt)
|
||||||
|
|
||||||
|
|
||||||
! ititalize all states to zero
|
! ititalize all states to zero
|
||||||
|
@ -1280,7 +1280,7 @@ do e = 1_pInt,mesh_NcpElems
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
|
||||||
do instance = 1_pInt,maxNmatIDs
|
do instance = 1_pInt,maxNinstances
|
||||||
ns = totalNslip(instance)
|
ns = totalNslip(instance)
|
||||||
|
|
||||||
! randomly distribute dislocation segments on random slip system and of random type in the volume
|
! randomly distribute dislocation segments on random slip system and of random type in the volume
|
||||||
|
@ -1608,10 +1608,10 @@ if (.not. phase_localPlasticity(phase) .and. shortRangeStressCorrection(instance
|
||||||
nRealNeighbors = nRealNeighbors + 1_pInt
|
nRealNeighbors = nRealNeighbors + 1_pInt
|
||||||
forall (s = 1_pInt:ns, c = 1_pInt:2_pInt)
|
forall (s = 1_pInt:ns, c = 1_pInt:2_pInt)
|
||||||
neighbor_rhoExcess(c,s,n) = &
|
neighbor_rhoExcess(c,s,n) = &
|
||||||
max(state(gr,neighbor_ip,neighbor_el)%p(iRhoU(s,2*c-1,neighbor_instance)), 0.0_pReal) &! positive mobiles
|
max(state(gr,neighbor_ip,neighbor_el)%p(iRhoU(s,2*c-1,neighbor_instance)), 0.0_pReal) & ! positive mobiles
|
||||||
- max(state(gr,neighbor_ip,neighbor_el)%p(iRhoU(s,2*c,neighbor_instance)), 0.0_pReal) ! negative mobiles
|
- max(state(gr,neighbor_ip,neighbor_el)%p(iRhoU(s,2*c,neighbor_instance)), 0.0_pReal) ! negative mobiles
|
||||||
neighbor_rhoTotal(c,s,n) = &
|
neighbor_rhoTotal(c,s,n) = &
|
||||||
max(state(gr,neighbor_ip,neighbor_el)%p(iRhoU(s,2*c-1,neighbor_instance)), 0.0_pReal) &! positive mobiles
|
max(state(gr,neighbor_ip,neighbor_el)%p(iRhoU(s,2*c-1,neighbor_instance)), 0.0_pReal) & ! positive mobiles
|
||||||
+ max(state(gr,neighbor_ip,neighbor_el)%p(iRhoU(s,2*c,neighbor_instance)), 0.0_pReal) & ! negative mobiles
|
+ max(state(gr,neighbor_ip,neighbor_el)%p(iRhoU(s,2*c,neighbor_instance)), 0.0_pReal) & ! negative mobiles
|
||||||
+ abs(state(gr,neighbor_ip,neighbor_el)%p(iRhoB(s,2*c-1,neighbor_instance))) & ! positive deads
|
+ abs(state(gr,neighbor_ip,neighbor_el)%p(iRhoB(s,2*c-1,neighbor_instance))) & ! positive deads
|
||||||
+ abs(state(gr,neighbor_ip,neighbor_el)%p(iRhoB(s,2*c,neighbor_instance))) & ! negative deads
|
+ abs(state(gr,neighbor_ip,neighbor_el)%p(iRhoB(s,2*c,neighbor_instance))) & ! negative deads
|
||||||
|
@ -1681,7 +1681,8 @@ if (.not. phase_localPlasticity(phase) .and. shortRangeStressCorrection(instance
|
||||||
|
|
||||||
rhoExcessGradient_over_rho = 0.0_pReal
|
rhoExcessGradient_over_rho = 0.0_pReal
|
||||||
forall (c = 1_pInt:2_pInt) &
|
forall (c = 1_pInt:2_pInt) &
|
||||||
rhoTotal(c) = (sum(abs(rhoSgl(s,[2*c-1,2*c,2*c+3,2*c+4]))) + rhoDip(s,c) + sum(neighbor_rhoTotal(c,s,:))) &
|
rhoTotal(c) = (sum(abs(rhoSgl(s,[2*c-1,2*c,2*c+3,2*c+4]))) + rhoDip(s,c) &
|
||||||
|
+ sum(neighbor_rhoTotal(c,s,:))) &
|
||||||
/ real(1_pInt + nRealNeighbors,pReal)
|
/ real(1_pInt + nRealNeighbors,pReal)
|
||||||
forall (c = 1_pInt:2_pInt, rhoTotal(c) > 0.0_pReal) &
|
forall (c = 1_pInt:2_pInt, rhoTotal(c) > 0.0_pReal) &
|
||||||
rhoExcessGradient_over_rho(c) = rhoExcessGradient(c) / rhoTotal(c)
|
rhoExcessGradient_over_rho(c) = rhoExcessGradient(c) / rhoTotal(c)
|
||||||
|
@ -1689,7 +1690,8 @@ if (.not. phase_localPlasticity(phase) .and. shortRangeStressCorrection(instance
|
||||||
!* gives the local stress correction when multiplied with a factor
|
!* gives the local stress correction when multiplied with a factor
|
||||||
|
|
||||||
tauBack(s) = - mu(instance) * burgers(s,instance) / (2.0_pReal * pi) &
|
tauBack(s) = - mu(instance) * burgers(s,instance) / (2.0_pReal * pi) &
|
||||||
* (rhoExcessGradient_over_rho(1) / (1.0_pReal - nu(instance)) + rhoExcessGradient_over_rho(2))
|
* (rhoExcessGradient_over_rho(1) / (1.0_pReal - nu(instance)) &
|
||||||
|
+ rhoExcessGradient_over_rho(2))
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
|
@ -2228,7 +2230,8 @@ deltaDUpper = dUpper - dUpperOld
|
||||||
|
|
||||||
deltaRhoDipole2SingleStress = 0.0_pReal
|
deltaRhoDipole2SingleStress = 0.0_pReal
|
||||||
forall (c=1_pInt:2_pInt, s=1_pInt:ns, deltaDUpper(s,c) < 0.0_pReal) &
|
forall (c=1_pInt:2_pInt, s=1_pInt:ns, deltaDUpper(s,c) < 0.0_pReal) &
|
||||||
deltaRhoDipole2SingleStress(s,8_pInt+c) = rhoDip(s,c) * deltaDUpper(s,c) / (dUpperOld(s,c) - dLower(s,c))
|
deltaRhoDipole2SingleStress(s,8_pInt+c) = rhoDip(s,c) * deltaDUpper(s,c) &
|
||||||
|
/ (dUpperOld(s,c) - dLower(s,c))
|
||||||
|
|
||||||
forall (t=1_pInt:4_pInt) &
|
forall (t=1_pInt:4_pInt) &
|
||||||
deltaRhoDipole2SingleStress(1_pInt:ns,t) = -0.5_pReal * deltaRhoDipole2SingleStress(1_pInt:ns,(t-1_pInt)/2_pInt+9_pInt)
|
deltaRhoDipole2SingleStress(1_pInt:ns,t) = -0.5_pReal * deltaRhoDipole2SingleStress(1_pInt:ns,(t-1_pInt)/2_pInt+9_pInt)
|
||||||
|
@ -2261,8 +2264,10 @@ forall (s = 1:ns, c = 1_pInt:2_pInt) &
|
||||||
if (iand(debug_level(debug_constitutive),debug_levelExtensive) /= 0_pInt &
|
if (iand(debug_level(debug_constitutive),debug_levelExtensive) /= 0_pInt &
|
||||||
.and. ((debug_e == el .and. debug_i == ip .and. debug_g == ipc)&
|
.and. ((debug_e == el .and. debug_i == ip .and. debug_g == ipc)&
|
||||||
.or. .not. iand(debug_level(debug_constitutive),debug_levelSelective) /= 0_pInt )) then
|
.or. .not. iand(debug_level(debug_constitutive),debug_levelSelective) /= 0_pInt )) then
|
||||||
write(6,'(a,/,8(12x,12(e12.5,1x),/))') '<< CONST >> dislocation remobilization', deltaRhoRemobilization(1:ns,1:8)
|
write(6,'(a,/,8(12x,12(e12.5,1x),/))') '<< CONST >> dislocation remobilization', &
|
||||||
write(6,'(a,/,10(12x,12(e12.5,1x),/))') '<< CONST >> dipole dissociation by stress increase', deltaRhoDipole2SingleStress
|
deltaRhoRemobilization(1:ns,1:8)
|
||||||
|
write(6,'(a,/,10(12x,12(e12.5,1x),/))') '<< CONST >> dipole dissociation by stress increase', &
|
||||||
|
deltaRhoDipole2SingleStress
|
||||||
write(6,*)
|
write(6,*)
|
||||||
endif
|
endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -2775,8 +2780,10 @@ do c = 1_pInt,2_pInt
|
||||||
rhoDotSingle2DipoleGlide(1:ns,2*c+4) = -2.0_pReal * dUpper(1:ns,c) / burgers(1:ns,instance) &
|
rhoDotSingle2DipoleGlide(1:ns,2*c+4) = -2.0_pReal * dUpper(1:ns,c) / burgers(1:ns,instance) &
|
||||||
* rhoSgl(1:ns,2*c+4) * abs(gdot(1:ns,2*c-1)) ! positive mobile --> negative immobile
|
* rhoSgl(1:ns,2*c+4) * abs(gdot(1:ns,2*c-1)) ! positive mobile --> negative immobile
|
||||||
|
|
||||||
rhoDotSingle2DipoleGlide(1:ns,c+8) = - rhoDotSingle2DipoleGlide(1:ns,2*c-1) - rhoDotSingle2DipoleGlide(1:ns,2*c) &
|
rhoDotSingle2DipoleGlide(1:ns,c+8) = - rhoDotSingle2DipoleGlide(1:ns,2*c-1) &
|
||||||
+ abs(rhoDotSingle2DipoleGlide(1:ns,2*c+3)) + abs(rhoDotSingle2DipoleGlide(1:ns,2*c+4))
|
- rhoDotSingle2DipoleGlide(1:ns,2*c) &
|
||||||
|
+ abs(rhoDotSingle2DipoleGlide(1:ns,2*c+3)) &
|
||||||
|
+ abs(rhoDotSingle2DipoleGlide(1:ns,2*c+4))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
|
||||||
|
@ -2806,7 +2813,8 @@ vClimb = atomicVolume(instance) * selfDiffusion / ( KB * Temperature ) &
|
||||||
* 2.0_pReal / ( dUpper(1:ns,1) + dLower(1:ns,1) )
|
* 2.0_pReal / ( dUpper(1:ns,1) + dLower(1:ns,1) )
|
||||||
forall (s = 1_pInt:ns, dUpper(s,1) > dLower(s,1)) &
|
forall (s = 1_pInt:ns, dUpper(s,1) > dLower(s,1)) &
|
||||||
rhoDotThermalAnnihilation(s,9) = max(- 4.0_pReal * rhoDip(s,1) * vClimb(s) / (dUpper(s,1) - dLower(s,1)), &
|
rhoDotThermalAnnihilation(s,9) = max(- 4.0_pReal * rhoDip(s,1) * vClimb(s) / (dUpper(s,1) - dLower(s,1)), &
|
||||||
- rhoDip(s,1) / timestep - rhoDotAthermalAnnihilation(s,9) - rhoDotSingle2DipoleGlide(s,9)) ! make sure that we do not annihilate more dipoles than we have
|
- rhoDip(s,1) / timestep - rhoDotAthermalAnnihilation(s,9) &
|
||||||
|
- rhoDotSingle2DipoleGlide(s,9)) ! make sure that we do not annihilate more dipoles than we have
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -2835,9 +2843,12 @@ endif
|
||||||
if (iand(debug_level(debug_constitutive),debug_levelExtensive) /= 0_pInt &
|
if (iand(debug_level(debug_constitutive),debug_levelExtensive) /= 0_pInt &
|
||||||
.and. ((debug_e == el .and. debug_i == ip .and. debug_g == ipc)&
|
.and. ((debug_e == el .and. debug_i == ip .and. debug_g == ipc)&
|
||||||
.or. .not. iand(debug_level(debug_constitutive),debug_levelSelective) /= 0_pInt )) then
|
.or. .not. iand(debug_level(debug_constitutive),debug_levelSelective) /= 0_pInt )) then
|
||||||
write(6,'(a,/,4(12x,12(e12.5,1x),/))') '<< CONST >> dislocation multiplication', rhoDotMultiplication(1:ns,1:4) * timestep
|
write(6,'(a,/,4(12x,12(e12.5,1x),/))') '<< CONST >> dislocation multiplication', &
|
||||||
write(6,'(a,/,8(12x,12(e12.5,1x),/))') '<< CONST >> dislocation flux', rhoDotFlux(1:ns,1:8) * timestep
|
rhoDotMultiplication(1:ns,1:4) * timestep
|
||||||
write(6,'(a,/,10(12x,12(e12.5,1x),/))') '<< CONST >> dipole formation by glide', rhoDotSingle2DipoleGlide * timestep
|
write(6,'(a,/,8(12x,12(e12.5,1x),/))') '<< CONST >> dislocation flux', &
|
||||||
|
rhoDotFlux(1:ns,1:8) * timestep
|
||||||
|
write(6,'(a,/,10(12x,12(e12.5,1x),/))') '<< CONST >> dipole formation by glide', &
|
||||||
|
rhoDotSingle2DipoleGlide * timestep
|
||||||
write(6,'(a,/,10(12x,12(e12.5,1x),/))') '<< CONST >> athermal dipole annihilation', &
|
write(6,'(a,/,10(12x,12(e12.5,1x),/))') '<< CONST >> athermal dipole annihilation', &
|
||||||
rhoDotAthermalAnnihilation * timestep
|
rhoDotAthermalAnnihilation * timestep
|
||||||
write(6,'(a,/,2(12x,12(e12.5,1x),/))') '<< CONST >> thermally activated dipole annihilation', &
|
write(6,'(a,/,2(12x,12(e12.5,1x),/))') '<< CONST >> thermally activated dipole annihilation', &
|
||||||
|
@ -3081,13 +3092,13 @@ implicit none
|
||||||
|
|
||||||
|
|
||||||
!*** input variables
|
!*** input variables
|
||||||
integer(pInt), intent(in) :: ipc, & ! current grain ID
|
integer(pInt), intent(in) :: ipc, & !< current grain ID
|
||||||
ip, & ! current integration point
|
ip, & !< current integration point
|
||||||
el ! current element
|
el !< current element
|
||||||
real(pReal), dimension(3,3,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
|
real(pReal), dimension(3,3,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
|
||||||
Fe ! elastic deformation gradient
|
Fe !< elastic deformation gradient
|
||||||
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
|
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
|
||||||
state ! microstructural state
|
state !< microstructural state
|
||||||
|
|
||||||
!*** input/output variables
|
!*** input/output variables
|
||||||
|
|
||||||
|
@ -3095,52 +3106,52 @@ type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), in
|
||||||
real(pReal), dimension(3,3) :: constitutive_nonlocal_dislocationstress
|
real(pReal), dimension(3,3) :: constitutive_nonlocal_dislocationstress
|
||||||
|
|
||||||
!*** local variables
|
!*** local variables
|
||||||
integer(pInt) neighbor_el, & ! element number of neighbor material point
|
integer(pInt) neighbor_el, & !< element number of neighbor material point
|
||||||
neighbor_ip, & ! integration point of neighbor material point
|
neighbor_ip, & !< integration point of neighbor material point
|
||||||
instance, & ! my instance of this plasticity
|
instance, & !< my instance of this plasticity
|
||||||
neighbor_instance, & ! instance of this plasticity of neighbor material point
|
neighbor_instance, & !< instance of this plasticity of neighbor material point
|
||||||
structID, & ! my lattice structure
|
structID, & !< my lattice structure
|
||||||
neighbor_structID, & ! lattice structure of neighbor material point
|
neighbor_structID, & !< lattice structure of neighbor material point
|
||||||
phase, &
|
phase, &
|
||||||
neighbor_phase, &
|
neighbor_phase, &
|
||||||
ns, & ! total number of active slip systems at my material point
|
ns, & !< total number of active slip systems at my material point
|
||||||
neighbor_ns, & ! total number of active slip systems at neighbor material point
|
neighbor_ns, & !< total number of active slip systems at neighbor material point
|
||||||
c, & ! index of dilsocation character (edge, screw)
|
c, & !< index of dilsocation character (edge, screw)
|
||||||
s, & ! slip system index
|
s, & !< slip system index
|
||||||
t, & ! index of dilsocation type (e+, e-, s+, s-, used e+, used e-, used s+, used s-)
|
t, & !< index of dilsocation type (e+, e-, s+, s-, used e+, used e-, used s+, used s-)
|
||||||
dir, &
|
dir, &
|
||||||
deltaX, deltaY, deltaZ, &
|
deltaX, deltaY, deltaZ, &
|
||||||
side, &
|
side, &
|
||||||
j
|
j
|
||||||
integer(pInt), dimension(2,3) :: periodicImages
|
integer(pInt), dimension(2,3) :: periodicImages
|
||||||
real(pReal) x, y, z, & ! coordinates of connection vector in neighbor lattice frame
|
real(pReal) x, y, z, & !< coordinates of connection vector in neighbor lattice frame
|
||||||
xsquare, ysquare, zsquare, & ! squares of respective coordinates
|
xsquare, ysquare, zsquare, & !< squares of respective coordinates
|
||||||
distance, & ! length of connection vector
|
distance, & !< length of connection vector
|
||||||
segmentLength, & ! segment length of dislocations
|
segmentLength, & !< segment length of dislocations
|
||||||
lambda, &
|
lambda, &
|
||||||
R, Rsquare, Rcube, &
|
R, Rsquare, Rcube, &
|
||||||
denominator, &
|
denominator, &
|
||||||
flipSign, &
|
flipSign, &
|
||||||
neighbor_ipVolumeSideLength, &
|
neighbor_ipVolumeSideLength, &
|
||||||
detFe
|
detFe
|
||||||
real(pReal), dimension(3) :: connection, & ! connection vector between me and my neighbor in the deformed configuration
|
real(pReal), dimension(3) :: connection, & !< connection vector between me and my neighbor in the deformed configuration
|
||||||
connection_neighborLattice, & ! connection vector between me and my neighbor in the lattice configuration of my neighbor
|
connection_neighborLattice, & !< connection vector between me and my neighbor in the lattice configuration of my neighbor
|
||||||
connection_neighborSlip, & ! connection vector between me and my neighbor in the slip system frame of my neighbor
|
connection_neighborSlip, & !< connection vector between me and my neighbor in the slip system frame of my neighbor
|
||||||
maxCoord, minCoord, &
|
maxCoord, minCoord, &
|
||||||
meshSize, &
|
meshSize, &
|
||||||
coords, & ! x,y,z coordinates of cell center of ip volume
|
coords, & !< x,y,z coordinates of cell center of ip volume
|
||||||
neighbor_coords ! x,y,z coordinates of cell center of neighbor ip volume
|
neighbor_coords !< x,y,z coordinates of cell center of neighbor ip volume
|
||||||
real(pReal), dimension(3,3) :: sigma, & ! dislocation stress for one slip system in neighbor material point's slip system frame
|
real(pReal), dimension(3,3) :: sigma, & !< dislocation stress for one slip system in neighbor material point's slip system frame
|
||||||
Tdislo_neighborLattice, & ! dislocation stress as 2nd Piola-Kirchhoff stress at neighbor material point
|
Tdislo_neighborLattice, & !< dislocation stress as 2nd Piola-Kirchhoff stress at neighbor material point
|
||||||
invFe, & ! inverse of my elastic deformation gradient
|
invFe, & !< inverse of my elastic deformation gradient
|
||||||
neighbor_invFe, &
|
neighbor_invFe, &
|
||||||
neighborLattice2myLattice ! mapping from neighbor MPs lattice configuration to my lattice configuration
|
neighborLattice2myLattice !< mapping from neighbor MPs lattice configuration to my lattice configuration
|
||||||
real(pReal), dimension(2,2,maxval(totalNslip)) :: &
|
real(pReal), dimension(2,2,maxval(totalNslip)) :: &
|
||||||
neighbor_rhoExcess ! excess density at neighbor material point (edge/screw,mobile/dead,slipsystem)
|
neighbor_rhoExcess !< excess density at neighbor material point (edge/screw,mobile/dead,slipsystem)
|
||||||
real(pReal), dimension(2,maxval(totalNslip)) :: &
|
real(pReal), dimension(2,maxval(totalNslip)) :: &
|
||||||
rhoExcessDead
|
rhoExcessDead
|
||||||
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el))),8) :: &
|
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el))),8) :: &
|
||||||
rhoSgl ! single dislocation density (edge+, edge-, screw+, screw-, used edge+, used edge-, used screw+, used screw-)
|
rhoSgl !< single dislocation density (edge+, edge-, screw+, screw-, used edge+, used edge-, used screw+, used screw-)
|
||||||
logical inversionError
|
logical inversionError
|
||||||
|
|
||||||
phase = material_phase(ipc,ip,el)
|
phase = material_phase(ipc,ip,el)
|
||||||
|
@ -3260,7 +3271,8 @@ ipLoop: do neighbor_ip = 1_pInt,FE_Nips(FE_geomtype(mesh_element(2,neighbor_el))
|
||||||
if (abs(neighbor_rhoExcess(1,j,s)) < significantRho(instance)) then
|
if (abs(neighbor_rhoExcess(1,j,s)) < significantRho(instance)) then
|
||||||
cycle
|
cycle
|
||||||
elseif (j > 1_pInt) then
|
elseif (j > 1_pInt) then
|
||||||
x = connection_neighborSlip(1) + sign(0.5_pReal * segmentLength, &
|
x = connection_neighborSlip(1) &
|
||||||
|
+ sign(0.5_pReal * segmentLength, &
|
||||||
state(ipc,neighbor_ip,neighbor_el)%p(iRhoB(s,1,neighbor_instance)) &
|
state(ipc,neighbor_ip,neighbor_el)%p(iRhoB(s,1,neighbor_instance)) &
|
||||||
- state(ipc,neighbor_ip,neighbor_el)%p(iRhoB(s,2,neighbor_instance)))
|
- state(ipc,neighbor_ip,neighbor_el)%p(iRhoB(s,2,neighbor_instance)))
|
||||||
xsquare = x * x
|
xsquare = x * x
|
||||||
|
@ -3306,7 +3318,8 @@ ipLoop: do neighbor_ip = 1_pInt,FE_Nips(FE_geomtype(mesh_element(2,neighbor_el))
|
||||||
if (abs(neighbor_rhoExcess(2,j,s)) < significantRho(instance)) then
|
if (abs(neighbor_rhoExcess(2,j,s)) < significantRho(instance)) then
|
||||||
cycle
|
cycle
|
||||||
elseif (j > 1_pInt) then
|
elseif (j > 1_pInt) then
|
||||||
y = connection_neighborSlip(2) + sign(0.5_pReal * segmentLength, &
|
y = connection_neighborSlip(2) &
|
||||||
|
+ sign(0.5_pReal * segmentLength, &
|
||||||
state(ipc,neighbor_ip,neighbor_el)%p(iRhoB(s,3,neighbor_instance)) &
|
state(ipc,neighbor_ip,neighbor_el)%p(iRhoB(s,3,neighbor_instance)) &
|
||||||
- state(ipc,neighbor_ip,neighbor_el)%p(iRhoB(s,4,neighbor_instance)))
|
- state(ipc,neighbor_ip,neighbor_el)%p(iRhoB(s,4,neighbor_instance)))
|
||||||
ysquare = y * y
|
ysquare = y * y
|
||||||
|
@ -3323,9 +3336,11 @@ ipLoop: do neighbor_ip = 1_pInt,FE_Nips(FE_geomtype(mesh_element(2,neighbor_el))
|
||||||
exit ipLoop
|
exit ipLoop
|
||||||
endif
|
endif
|
||||||
|
|
||||||
sigma(1,2) = sigma(1,2) - real(side,pReal) * flipSign * z * (1.0_pReal - nu(instance)) / denominator &
|
sigma(1,2) = sigma(1,2) - real(side,pReal) * flipSign * z &
|
||||||
|
* (1.0_pReal - nu(instance)) / denominator &
|
||||||
* neighbor_rhoExcess(2,j,s)
|
* neighbor_rhoExcess(2,j,s)
|
||||||
sigma(1,3) = sigma(1,3) + real(side,pReal) * flipSign * y * (1.0_pReal - nu(instance)) / denominator &
|
sigma(1,3) = sigma(1,3) + real(side,pReal) * flipSign * y &
|
||||||
|
* (1.0_pReal - nu(instance)) / denominator &
|
||||||
* neighbor_rhoExcess(2,j,s)
|
* neighbor_rhoExcess(2,j,s)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
Loading…
Reference in New Issue