1"""Generate bicrystal_48 with a prismatic-loop density in both grains."""
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')
37dcPath=
Path(
'inputFiles')/DCfile
38dcLines=dcPath.read_text().splitlines(keepends=
True)
39for index, line
in enumerate(dcLines):
40 if line.split(
'=',1)[0].strip()==
'startAtTimeStep':
41 dcLines[index]=
'startAtTimeStep=-1; # Restart step: -1 selects the last recorded step in F/F_0.txt; 0 starts at frame 0; a positive value selects that frame.\n'
42dcPath.write_text(
''.join(dcLines))
46DDfileTemplate=str(repository)+
'/Library/DislocationDynamics/'+DDfile
47print(
"\033[1;32mCreating DDfile\033[0m")
48shutil.copy2(DDfileTemplate,
'inputFiles/'+DDfile)
62materialFileTemplate=str(repository)+
'/Library/Materials/'+materialFile;
63print(
"\033[1;32mCreating materialFile\033[0m")
64shutil.copy2(materialFileTemplate,
'inputFiles/'+materialFile)
69elasticDeformatinoFile=
'ElasticDeformation.txt';
70elasticDeformatinoFileTemplate=str(repository)+
'/Library/ElasticDeformation/'+elasticDeformatinoFile;
71print(
"\033[1;32mCreating elasticDeformatinoFile\033[0m")
72shutil.copy2(elasticDeformatinoFileTemplate,
'inputFiles/'+elasticDeformatinoFile)
73setInputVector(
'inputFiles/'+elasticDeformatinoFile,
'ExternalStress0',np.zeros(6),
'applied stress')
76setInputVector(
'inputFiles/'+elasticDeformatinoFile,
'ExternalStrainRate',
77 np.array([0.0, 0.0, strainRate33, 0.0, 0.0, 0.0]),
'applied strain rate in the global 33 direction')
78setInputVector(
'inputFiles/'+elasticDeformatinoFile,
'stiffnessRatio',
79 np.array([0.0, 0.0, 1e20, 0.0, 0.0, 0.0]),
'strain control in 33; zero-stress control in the other components')
82meshFile=
'bicrystal_48.msh';
83meshFileTemplate=str(repository)+
'/Library/Meshes/'+meshFile;
84print(
"\033[1;32mCreating polycrystalFile\033[0m")
85shutil.copy2(meshFileTemplate,
'inputFiles/'+meshFile)
87pf.absoluteTemperature=300;
90pf.grain1globalX1 = np.array([1.0, 0.0, 0.0])
91pf.grain1globalX3 = np.array([0.0, 0.0, 1.0])
92pf.boxScaling=np.array([1e-6,1e-6,1e-6])/b_SI
93pf.X0=np.array([0,0,0])
94pf.periodicFaceIDs=np.array([-1])
99repeatCounts = 5 * np.maximum(1, np.round(pf.boxScaling / (5 * pf.boxEdgesLatticeLengths)))
100pf.boxScaling = repeatCounts * pf.boxEdgesLatticeLengths
101pf.write(
'inputFiles')
103with open(
'inputFiles/polycrystal.txt',
'a')
as polycrystalFile:
104 polycrystalFile.write(
'C2G2=0.8 0 0.6\n 0 1 0\n -0.6 0 0.8; # grain 2 crystal-to-global rotation\n')
108microstructureName =
'prismaticLoopsDensity.txt'
109microstructureFile =
'inputFiles/' + microstructureName
110shutil.copy2(repository /
'Library/Microstructures/prismaticLoopsDensity.txt',
115setInputVector(microstructureFile,
'allowedGrainIDs', np.array([1, 2]),
'allow placement in both grains')
117with open(
'inputFiles/initialMicrostructure.txt',
'w')
as initialMicrostructureFile:
118 initialMicrostructureFile.write(
'microstructureFile=' + microstructureName +
';\n')
121print(
'Inputs ready: ' + str(Path.cwd()))
122print(
'Run microstructureGenerator, then DDomp, using this simulation folder.')
setInputVector(fileName, variable, newVal, newCom)
setInputVariable(fileName, variable, newVal)
getValueInFile(fileName, variable)