1"""Generate the uniform-load example with one rotated ellipsoidal inclusion."""
4from pathlib
import Path
7repository = Path(__file__).resolve().parents[2]
8parser = argparse.ArgumentParser(description=__doc__)
9parser.add_argument(
"--output-dir", type=Path, default=Path(__file__).resolve().parent,
10 help=
"Simulation folder (defaults to this tutorial folder).")
11args = parser.parse_args()
12args.output_dir.mkdir(parents=
True, exist_ok=
True)
13os.chdir(args.output_dir.resolve())
14sys.path.insert(0, str(repository /
"python"))
15from modlibUtils
import *
19folders=[
'config',
'F',
'inputFiles']
21 if not os.path.exists(x):
25DCfile=
'DefectiveCrystal.txt'
26DCfileTemplate=str(repository)+
'/Library/DefectiveCrystal/'+DCfile
27print(
"\033[1;32mCreating DDfile\033[0m")
28shutil.copy2(DCfileTemplate,
'inputFiles/'+DCfile)
29setInputVariable(
'inputFiles/'+DCfile,
'physics',
'DislocationDynamics ElasticDeformation InclusionMicrostructure')
30setInputVariable(
'inputFiles/'+DCfile,
'useFEM',
'0')
31setInputVariable(
'inputFiles/'+DCfile,
'Nsteps',
'10000')
32setInputVariable(
'inputFiles/'+DCfile,
'maxResolveSteps',
'0')
33setInputVariable(
'inputFiles/'+DCfile,
'dtMax',
'1e25')
34setInputVariable(
'inputFiles/'+DCfile,
'outputFrequency',
'10')
38DDfileTemplate=str(repository)+
'/Library/DislocationDynamics/'+DDfile
39print(
"\033[1;32mCreating DDfile\033[0m")
40shutil.copy2(DDfileTemplate,
'inputFiles/'+DDfile)
41setInputVariable(
'inputFiles/'+DDfile,
'timeSteppingMethod',
'adaptive')
42setInputVariable(
'inputFiles/'+DDfile,
'dxMax',
'10')
43setInputVariable(
'inputFiles/'+DDfile,
'use_velocityFilter',
'1')
44setInputVariable(
'inputFiles/'+DDfile,
'alphaLineTension',
'1.0')
45setInputVariable(
'inputFiles/'+DDfile,
'Lmin',
'25')
46setInputVariable(
'inputFiles/'+DDfile,
'Lmax',
'150')
47setInputVariable(
'inputFiles/'+DDfile,
'outputQuadraturePoints',
'1')
48setInputVariable(
'inputFiles/'+DDfile,
'glideSolverType',
'Galerkin')
49setInputVariable(
'inputFiles/'+DDfile,
'climbSolverType',
'none')
50setInputVariable(
'inputFiles/'+DDfile,
'crossSlipModel',
'0')
54materialFileTemplate=str(repository)+
'/Library/Materials/'+materialFile;
55print(
"\033[1;32mCreating materialFile\033[0m")
56shutil.copy2(materialFileTemplate,
'inputFiles/'+materialFile)
58b_SI=getValueInFile(
'inputFiles/'+materialFile,
'b_SI')
61elasticDeformatinoFile=
'ElasticDeformation.txt';
62elasticDeformatinoFileTemplate=str(repository)+
'/Library/ElasticDeformation/'+elasticDeformatinoFile;
63print(
"\033[1;32mCreating elasticDeformatinoFile\033[0m")
64shutil.copy2(elasticDeformatinoFileTemplate,
'inputFiles/'+elasticDeformatinoFile)
65setInputVector(
'inputFiles/'+elasticDeformatinoFile,
'ExternalStress0',np.array([0.0,0.0,0.01,0.0,0.0,0.0]),
'applied stress')
68meshFile=
'unitCube24.msh';
69meshFileTemplate=str(repository)+
'/Library/Meshes/'+meshFile;
70print(
"\033[1;32mCreating polycrystalFile\033[0m")
71shutil.copy2(meshFileTemplate,
'inputFiles/'+meshFile)
72pf=PolyCrystalFile(materialFile);
73pf.absoluteTemperature=300;
76pf.grain1globalX1 = np.array([1.0, 0.0, 0.0])
77pf.grain1globalX3 = np.array([0.0, 0.0, 1.0])
78pf.boxScaling=np.array([1e-6,1e-6,1e-6])/b_SI
79pf.X0=np.array([0,0,0])
80pf.periodicFaceIDs=np.array([-1])
82microstructureFiles = []
84microstructureFileID=1;
85microstructureName=
'prismaticLoopsDensity.txt';
86microstructureFileTemplate=str(repository)+
'/Library/Microstructures/'+microstructureName;
87microstructureFileLocal=
'inputFiles/microstructureFile'+str(microstructureFileID)+
'.txt'
88microstructureFiles.append(
'microstructureFile'+str(microstructureFileID)+
'.txt')
89print(
"\033[1;32mCreating microstructureFile"+str(microstructureFileID)+
"\033[0m")
90shutil.copy2(microstructureFileTemplate,microstructureFileLocal)
91setInputVariable(microstructureFileLocal,
'targetDensity_SI',
'1e12')
92setInputVariable(microstructureFileLocal,
'radiusDistributionMean_SI',
'1e-07')
93setInputVariable(microstructureFileLocal,
'radiusDistributionStd_SI',
'0e-07')
94setInputVector(microstructureFileLocal,
'allowedGrainIDs',np.array([-1]),
'set of grain IDs where loops are allowed. Use -1 for all grains')
95setInputVector(microstructureFileLocal,
'allowedSlipSystemIDs',np.array([-1]),
'set of slip system IDs whose Burgers vector are allowed to be the prism axis. Use -1 for all slip systems')
98axesLognormalDistributionMean_SI = np.array([20e-9, 20e-9, 1.5e-9])
99axesLognormalDistributionStd_SI = np.zeros(3)
100principalEigenDistortion = np.array([1e-2, -5e-3, 2e-2])
120totalTargetDensity = 20e19
121patternVector_SI = np.zeros(3)
124 (
'100', np.array([[0., 0., 1.], [1., 0., 0.], [0., 1., 0.]])),
125 (
'010', np.array([[0., 1., 0.], [0., 0., 1.], [1., 0., 0.]])),
128for family, crystalAxes
in plateletFamilies:
129 crystalEigenDistortion = crystalAxes @ np.diag(principalEigenDistortion) @ crystalAxes.T
130 inclusionName =
'ellipsoidalInclusionsDensity_' + family +
'.txt'
131 inclusionFile =
'inputFiles/' + inclusionName
132 shutil.copy2(repository /
'Library/Microstructures/ellipsoidalInclusionsDensity.txt',
134 setInputVariable(inclusionFile,
'targetDensity', str(totalTargetDensity / len(plateletFamilies)))
136 setInputVector(inclusionFile,
'axesLognormalDistributionMean_SI', axesLognormalDistributionMean_SI,
137 '[m] arithmetic mean semiaxis lengths')
138 setInputVector(inclusionFile,
'axesLognormalDistributionStd_SI', axesLognormalDistributionStd_SI,
139 'zero spread: circular 40 nm diameter, 3 nm thickness')
140 setInputVector(inclusionFile,
'patternVector_SI', patternVector_SI,
'zero: no positional pattern')
141 setInputVector(inclusionFile,
'crystalEigenDistortion', crystalEigenDistortion.flatten(),
142 'dimensionless crystal-frame tensor: 11 12 13 21 22 23 31 32 33')
148 microstructureFiles.append(inclusionName)
150print(
"\033[1;32mCreating initialMicrostructureFile\033[0m")
151with open(
'inputFiles/initialMicrostructure.txt',
"w")
as initialMicrostructureFile:
152 for micrFile
in microstructureFiles:
153 initialMicrostructureFile.write(
'microstructureFile='+micrFile+
';\n')
setInputVector(fileName, variable, newVal, newCom)
setInputVariable(fileName, variable, newVal)
setInputMatrix(fileName, variable, newVal)