Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
tutorials/annealing/generateInputFiles.py
Go to the documentation of this file.
1import sys
2sys.path.append("../../python/")
3from modlibUtils import *
4
5# Annealing of vacancy and interstitial Frank loops by climb, coupled to the diffusion of single vacancies.
6# The material file used here (Zr_BMD19.txt) has ONE mobile species and no immobile species, while the
7# numbers of cluster-dynamics species are fixed when MoDELib is compiled (defaults: 4 mobile, 8 immobile).
8# Build MoDELib for this tutorial with:
9# cmake -S . -B build -DMODELIB_CD_MSIZE=1 -DMODELIB_CD_ISIZE=0
10
11# Create folder structure
12folders=['config','F','inputFiles']
13for x in folders:
14 if not os.path.exists(x):
15 os.makedirs(x)
16
17# Make a local copy of DefectiveCrystal parameters file and modify that copy if necessary
18DCfile='DefectiveCrystal.txt'
19DCfileTemplate='../../Library/DefectiveCrystal/'+DCfile
20print("\033[1;32mCreating DDfile\033[0m")
21shutil.copy2(DCfileTemplate,'inputFiles/'+DCfile)
22setInputVariable('inputFiles/'+DCfile,'physics','DislocationDynamics ClusterDynamics ElasticDeformation')
23setInputVariable('inputFiles/'+DCfile,'useFEM','1')
24setInputVariable('inputFiles/'+DCfile,'Nsteps','2000') # number of simulation steps
25setInputVariable('inputFiles/'+DCfile,'maxResolveSteps','2') # number of simulation steps
26setInputVariable('inputFiles/'+DCfile,'dtMax','1e35')
27setInputVariable('inputFiles/'+DCfile,'outputFrequency','1') # output frequency
28
29# Make a local copy of material file, and modify that copy if necessary
30materialFile='Zr_BMD19.txt';
31materialFileTemplate='../../Library/Materials/'+materialFile;
32print("\033[1;32mCreating materialFile\033[0m")
33shutil.copy2(materialFileTemplate,'inputFiles/'+materialFile)
34#setInputVariable('inputFiles/'+materialFile,'enabledSlipSystems','full<111>{110}')
35b_SI=getValueInFile('inputFiles/'+materialFile,'b_SI')
36
37# Make a local copy of DD parameters file and modify that copy if necessary
38DDfile='DD.txt'
39DDfileTemplate='../../Library/DislocationDynamics/'+DDfile
40print("\033[1;32mCreating DDfile\033[0m")
41shutil.copy2(DDfileTemplate,'inputFiles/'+DDfile)
42setInputVariable('inputFiles/'+DDfile,'timeSteppingMethod','adaptive') # adaptive or fixed
43setInputVariable('inputFiles/'+DDfile,'dxMax','2') # max nodal displacement for when timeSteppingMethod=adaptive
44setInputVariable('inputFiles/'+DDfile,'alphaLineTension','1.0') # dimensionless scale factor in for line tension forces
45setInputVariable('inputFiles/'+DDfile,'Lmin','25') # min segment length (in Burgers vector units)
46setInputVariable('inputFiles/'+DDfile,'Lmax','150') # max segment length (in Burgers vector units)
47setInputVariable('inputFiles/'+DDfile,'absoluteAreaThreshold','100') # loop collapse area (in Burgers vector units ^2). Should be about dx^2
48setInputVariable('inputFiles/'+DDfile,'outputQuadraturePoints','0') # output quadrature data
49setInputVariable('inputFiles/'+DDfile,'glideSolverType','none') # type of glide solver, or none
50setInputVariable('inputFiles/'+DDfile,'climbSolverType','Galerkin') # type of clim solver, or none
51setInputVariable('inputFiles/'+DDfile,'crossSlipModel','0') # crossSlipModel
52setInputVariable('inputFiles/'+DDfile,'outputLoopLength','1') # crossSlipModel
53
54# Make a local copy of ElasticDeformation file, and modify that copy if necessary
55elasticDeformatinoFile='ElasticDeformation.txt';
56elasticDeformatinoFileTemplate='../../Library/ElasticDeformation/'+elasticDeformatinoFile;
57print("\033[1;32mCreating elasticDeformatinoFile\033[0m")
58shutil.copy2(elasticDeformatinoFileTemplate,'inputFiles/'+elasticDeformatinoFile)
59setInputVariable('inputFiles/'+elasticDeformatinoFile,'useElasticDeformationFEM','1')
60setInputVector('inputFiles/'+elasticDeformatinoFile,'ExternalStress0',np.array([0.0,0.0,0.0,0.0,0.0,0.0]),'applied stress')
61
62# Make a local copy of ClusterDynamics file, and modify that copy if necessary
63clusterDynamicsFile='ClusterDynamics.txt';
64clusterDynamicsFileTemplate='../../Library/ClusterDynamics/'+clusterDynamicsFile;
65print("\033[1;32mCreating clusterDynamicsFile\033[0m")
66shutil.copy2(clusterDynamicsFileTemplate,'inputFiles/'+clusterDynamicsFile)
67setInputVariable('inputFiles/'+clusterDynamicsFile,'useClusterDynamicsFEM','1')
68
69# Create polycrystal.txt using local material file
70meshFile='unitCube8188.msh';
71meshFileTemplate='../../Library/Meshes/'+meshFile;
72print("\033[1;32mCreating polycrystalFile\033[0m")
73shutil.copy2(meshFileTemplate,'inputFiles/'+meshFile)
74pf=PolyCrystalFile(materialFile);
75pf.absoluteTemperature=700;
76pf.meshFile=meshFile
77pf.boxScaling=np.array([1e-6,1e-6,1e-6])/b_SI # length of box edges in Burgers vector units
78pf.X0=np.array([0,0,0]) # Centering unitCube mesh. Mesh nodes X are mapped to x=F*(X-X0)
79pf.periodicFaceIDs=np.array([])
80pf.write('inputFiles')
81microstructureFiles = []
82
83microstructureFileID=1;
84microstructureName='frankLoopsDensity.txt';
85microstructureFileTemplate='../../Library/Microstructures/'+microstructureName;
86microstructureFileLocal='inputFiles/microstructureFile'+str(microstructureFileID)+'.txt'
87microstructureFiles.append('microstructureFile'+str(microstructureFileID)+'.txt')
88print("\033[1;32mCreating microstructureFile"+str(microstructureFileID)+"\033[0m")
89shutil.copy2(microstructureFileTemplate,microstructureFileLocal) # target filename is /dst/dir/file.ext
90setInputVariable(microstructureFileLocal,'targetDensity_SI','1e13')
91setInputVariable(microstructureFileLocal,'radiusDistributionMean_SI','5e-08')
92setInputVariable(microstructureFileLocal,'radiusDistributionStd_SI','1e-09')
93setInputVariable(microstructureFileLocal,'areVacancyLoops','1')
94setInputVector(microstructureFileLocal,'allowedGrainIDs',np.array([-1]),'set of grain IDs where loops are allowed. Use -1 for all grains')
95setInputVector(microstructureFileLocal,'allowedPlaneIDs',np.array([0]),'# set of plane IDs containing the loops. Use -1 for random plane')
96
97microstructureFileID=2;
98microstructureName='frankLoopsDensity.txt';
99microstructureFileTemplate='../../Library/Microstructures/'+microstructureName;
100microstructureFileLocal='inputFiles/microstructureFile'+str(microstructureFileID)+'.txt'
101microstructureFiles.append('microstructureFile'+str(microstructureFileID)+'.txt')
102print("\033[1;32mCreating microstructureFile"+str(microstructureFileID)+"\033[0m")
103shutil.copy2(microstructureFileTemplate,microstructureFileLocal) # target filename is /dst/dir/file.ext
104setInputVariable(microstructureFileLocal,'targetDensity_SI','1e13')
105setInputVariable(microstructureFileLocal,'radiusDistributionMean_SI','5e-08')
106setInputVariable(microstructureFileLocal,'radiusDistributionStd_SI','1e-09')
107setInputVariable(microstructureFileLocal,'areVacancyLoops','0')
108setInputVector(microstructureFileLocal,'allowedGrainIDs',np.array([-1]),'set of grain IDs where loops are allowed. Use -1 for all grains')
109setInputVector(microstructureFileLocal,'allowedPlaneIDs',np.array([1,2,3]),'# set of plane IDs containing the loops. Use -1 for random plane')
110
111#microstructureFileID=3;
112#microstructureName='frankLoopsIndividual.txt';
113#microstructureFileTemplate='../../Library/Microstructures/'+microstructureName;
114#microstructureFileLocal='inputFiles/microstructureFile'+str(microstructureFileID)+'.txt'
115#microstructureFiles.append('microstructureFile'+str(microstructureFileID)+'.txt')
116#print("\033[1;32mCreating microstructureFile"+str(microstructureFileID)+"\033[0m")
117#shutil.copy2(microstructureFileTemplate,microstructureFileLocal) # target filename is /dst/dir/file.ext
118#setInputVector(microstructureFileLocal,'planeIDs',np.array([0,0,-1]),'set of grain IDs where loops are allowed. Use -1 for all grains')
119#setInputVector(microstructureFileLocal,'loopRadii_SI',np.array([5e-08,5e-08,10e-08]),'set of grain IDs where loops are allowed. Use -1 for all grains')
120#setInputVector(microstructureFileLocal,'loopSides',np.array([12,12,12]),'set of grain IDs where loops are allowed. Use -1 for all grains')
121#setInputMatrix(microstructureFileLocal,'loopCenters',np.array([[0,0,-100],[0,0,100],[100,100,100]]))
122#setInputVector(microstructureFileLocal,'isVacancyLoop',np.array([1,0,1]),'set of grain IDs where loops are allowed. Use -1 for all grains')
123
124
125print("\033[1;32mCreating initialMicrostructureFile\033[0m")
126with open('inputFiles/initialMicrostructure.txt', "w") as initialMicrostructureFile:
127 for micrFile in microstructureFiles:
128 initialMicrostructureFile.write('microstructureFile='+micrFile+';\n')
setInputVector(fileName, variable, newVal, newCom)
setInputVariable(fileName, variable, newVal)
getValueInFile(fileName, variable)