### Strain Hardening Simulation on CPU We can run a tensile test simulation of a single-crystal Cu using the following commands (running ExaDiS on CPU). This type of simulation is also called the strain-hardening simulation because it predicts stress-strain curves in the plastic regime where the flow stress increases with strain. ```bash cd ${OPENDIS_DIR} cd examples/10_strain_hardening/ export OMP_NUM_THREADS=8 python3 test_strain_hardening_exadis.py ``` #### Initial Condition The initial dislocation configuration for this simulation is read from a data file ```180chains_16.10e.data``` (in ParaDiS data format) by the following Python commands ```bash G = ExaDisNet() G.read_paradis('180chains_16.10e.data') ``` The simulation cell size is 15 𝜇m × 15 𝜇m × 15 𝜇m, subjected to periodic boundary conditions in all three directions. The initial dislocation density is 𝜌0 ≈ 1.2 × 1012 m-2. The initial dislocation structure can be visualized by [Ovito](https://www.ovito.org/) as shown below. The dislocation lines are colored according to the dislocation character angle. ```{figure} initial_configuration_Ovito.png :alt: Screenshot of the final configuration :width: 552px ``` Click [here](./Ovito_settings.png) to see the Ovito settings used to generate the plot above. #### Simulation Setup Many simulation parameters are specified in the dictionary variable ```state```. The ```sim``` objects contains all the information, including the sub-modules of the simulation. In particular, ```max_strain``` specifies the maximum strain to be reached in the simulation (here running up to 0.01 = 1% strain). The following line in the Python program executes the simulation ```bash sim.run(net, state) ``` #### Simulation Behavior The simulation creates a folder called ```output_fcc_Cu_15um_1e3``` to store the results files. On MC3.stanford.edu (with 8 OMP threads), it takes about 12 minutes to run the first 100 steps of the simulation. To specify a different stopping criterion, we can modify the constructor for ```sim```, e.g. by switching from ```max_strain=0.01``` to ```max_step=1600``` to run the simulation for 1600 time steps. The simulation takes about 21 hours on MC3.stanford.edu (with 8 OMP threads) to complete. The simulation will write a data file to the output folder for every 100 steps. The [stress_strain_dens_1600_CPU.dat](./stress_strain_dens_1600_CPU.dat) file stores certain essential information of the tensile test --- here it contains 5 columns corresponding to step, strain, stress (Pa), dislocation density (m-2) and wall-clock time (sec), respectively. The final dislocation configuration (config.1600.data) after 1600 steps is shown below. ```{figure} CPU_final_configuration_Ovito.png :alt: Screenshot of the final configuration :width: 552px ``` The predicted stress-strain curve is shown below. ```{figure} Stress_strain_CPU.png :alt: stress-strain curve :width: 352px ``` Here is how the total dislocation density changes with strain. The increase of dislocation density (i.e. dislocation multiplication) with strain is a key mechanism for strain-hardening. ```{figure} Density_strain_CPU.png :alt: dislocation density-strain curve :width: 352px ``` #### Restart Simulation The simulation produces a set of restart files in the output directory. We can restart the simulation from any of these restart files. For example, ```bash cd ${OPENDIS_DIR} cd examples/10_strain_hardening/ export OMP_NUM_THREADS=8 python3 test_strain_hardening_exadis.py 100 ``` would restart the simulation from the file ```output_fcc_Cu_15um_1e3/restart.100.exadis```.