DOI: 10.5061/dryad.wh70rxwwf
title: Data from: Geometrical frustration in nonlinear mechanics of screw dislocation

description: The stress singularities and reliance on linear elasticity pose
 significant challenges in comprehending the mechanism of the formation of
 stress fields around dislocations. In this study, we use differential
 geometry and calculus of variations for the mathematical modelling and
 numerical analyses for the mechanics of screw dislocations. We express the
 kinematics of dislocations by using a diffeomorphism of the Riemann-Cartan
 manifold, which equips the Riemannian metric and affine connection. We
 formulate the function of the Cartan first structure equation for solving
 plastic deformation of dislocations, while we employ the stress
 equilibrium equations for nonlinear elasticity. To solve this nonlinear
 problem, we conduct isogeometric analysis with NURBS basis functions. We
 implement this using C++. The analysis results obtained by this
 implementation show that the stress fields effectively eliminate the
 singularity along the dislocation line and exhibit excellent agreement
 with Volterra's theory outside the dislocation core. Furthermore, by
 utilising the mathematical properties of the Riemann-Cartan manifold and
 smoothness of the NURBS functions used in the isogeometric analysis, we
 show that geometrical frustration is the direct source of dislocation
 stress fields, and the Ricci curvature determines the symmetry of stress
 fields. These results demonstrate the duality between stress and
 curvature, a mathematical hypothesis posed in previous studies.
description: # Data from: Geometrical frustration in nonlinear mechanics of screw
 dislocation
 [https://doi.org/10.5061/dryad.wh70rxwwf](https://doi.org/10.5061/dryad.wh70rxwwf) This repository contains the source codes of isogeometric analysis for dislocations, configuration files for specific conditions, figures to plot the results, and datasets generated by the code. ## Description of the data and file structure * `isogeometric_analysis.tar.gz` contains the whole source codes for isogeometric analysis written in C++ and configurations for isogeometric analysis as `.json` files * `plotting.tar.gz` contains the source codes for plotting data exported from the isogeometric analysis code, which is written by Julia language. * `sourcedata.tar.gz` contains the numerical data resulting from the isogeometric analysis. The `.vts` files three-dimensional field variables of screw dislocation, while `.csv` files are the evaluation of field variables on an axis. Specifically, * `conf1_screw.vts`, `conf1_plotover_xline.csv` for x-axis and `conf1_plotover_yline.csv` for y-axis are obtained from `conf1.json`. * `conf2_screw.vts` and `conf2_plotover_xline.csv` are obtained from `conf2.json`. ## Code/Software ### `isogeometric_analysis.tar.gz` The source codes for the isogeometric analysis of dislocation mechanics are included in this folder. Whole codes are written in C++. Additionally, the specific analysis configuration files in `.json` format are also provided beneath `isogeometric_analysis/GeometricElasticity/output`. For more details, please refer to the following instructions. #### Requirement The compilation of the source codes requires the following external libraries (the publication data was run by the versions enclosed by the parenthesis). * IntelMPI (17.0.4) or OpenMPI (not used in the publication data) that can compile C++ codes * static libraries of PETSc (3.13.2) * Intel MKL (2019.4.243) * boost (1.53) * VTK (8.1.2) Additionally, for the ease of the compilation, the following applications are required: * CMAKE (3.18.2) * GNU Make (3.82) * ninja (1.10.2) #### Compilation The compilation of the codes can be done by the following steps: 1. Extract `isogeometric_analysis.tar.gz` and enter the generated directory. 2. `make ge` generates the executables `build/analysis_json.exe`, `build/postprocess.exe`, and `build/plotoverline.exe`. #### Running the program Whole executables require the configuration file in the specific JSON file that includes physical and mathematical conditions of isogeometric analysis for dislocation mechanics. The example `.json` files are provided beneath `isogeometric_analysis/GeometricElasticity/output/` directory. #### Isogeometric analysis for screw dislocation Isogeometric analysis for dislocation mechanics can be run by the following steps: 1. Prepare the configuration file in JSON format (examples are the `.json` files). 2. Open `GeometricElasticity/output` directory 3. Run the following command: `mpirun -np [n] ../../../build/analysis_json.exe conf1.json`. Note that `[n]` should be replaced by the number of processes. 4. The analysis results are exported relative to the directory `GeometricElasticity`. The structure beneath `GeometricElasticity/...` is specified in the `output directory` within the JSON file. Note that the analysis conditions `conf1.json` and `conf2.json` use a large amount of memory, about hundreds of gigabytes, and cannot be run on an ordinary laptop. The analysis results include * `elast_coefs0.dat` file that contains the coordinates of control points of NURBS, which represents the current configuration * `fp_coefs0.dat` file that contains the coefficients of the plastic deformation gradient matrix. * `elast_results.vts` file that contains the detailed analysis results containing displacement, stress, Riemannian metric, Ricci curvature, etc. This file can be read by `ParaView`. * `fp_results.vts` file that contains the detailed analysis results that can be obtained by solving Cartan first structure equations. Note that this file was not used in the publication. #### Generating data for plotting For simplicity, the configuration file `conf1.json` and `conf2.json` export `*.vts` with a small number of points specified by the "export vts" section. To generate more refined data from the analysis results, one can use `build/postprocess.exe` and `build/plotoverline.exe`. `build/postprocess.exe` is intended to use exporting analysis results with large amounts of data points, while `build/plotoverline.exe` can be used to export a CSV file containing the values of field variables such as stress, plastic deformation gradient, or Ricci curvature, etc. evaluated on a line specified in JSON file. These executables also require the configuration file in JSON format. Examples of them are also included in `GeometricElasticity/output/conf1` and `GeometricElasticity/output/conf2`. The usage of these executables is as follows: 1. Prepare the configuration file in JSON format. 2. Open `GeometricElasticity/output` directory. 3. Run the following command: `../../../build/postprocess.exe conf1_post.json`, or either `../../../build/plotoverline.exe conf1_pol_x.json` or `../../../build/plotoverline.exe conf1_pol_y.json`. 4. The analysis results are exported relative to the directory `GeometricElasticity`. The structure beneath `GeometricElasticity/...` is specified in the `output directory` within the JSON file. ### `plotting.tar.gz` #### Requirement We used codes written in Julia language to generate these figures. We also used some packages of Julia which are specified in `Project.toml`. When plotting graphs, we employed `PGFPlosX.jl` package which calls [LuaLaTeX](https://www.luatex.org/) and [Poppler (pdftoppm)](https://poppler.freedesktop.org/) for rendering mathematical texts in the figures. In summary, the requirement to reproduce figures are as follows: * Julia language (v1.10.2) * Julia packages: * CSV.jl (v0.10.14) * ColorSchemes (v3.24.0) * Colors (v0.12.10) * DataFrames (v1.6.1) * GLMakie (v0.9.10) * IntervalSets (v0.7.10) * JSON (v0.21.4) * LaTeXStrings (v1.3.1) * PGFPlotsX (v1.6.1) * Plots (v1.40.4) * SpecialFunctions (v2.3.1) * LuaLaTeX (LuaHBTeX Version 1.18.0) contained in TeX Live * pdftoppm (version 24.03.0) Additionally, these scripts require the configuration file in `.json` and the `.csv` file such as `conf1_plotover_xline.csv`, `conf2_plotover_xline.csv` and `conf1_plotover_yline.csv`. Before running codes, please place * `conf1_*.csv` in `isogeometric_analysis/GeometricElasticity/output/conf1/` * `conf2_*.csv` in `isogeometric_analysis/GeometricElasticity/output/conf2/` #### Plot graphs To generate figures, one is required to modify the paths to LuaLaTeX and pdftoppm in `plotting/src/conf_pgfplotsx.jl`. Please specify the paths to these binaries by modifying `ENV["PATH"] *= ` so that Julia language can access to them. After that, please open `plotting` directory in a terminal. Then, one can generate the figures by `julia --project=. fig1a.jl` for instance. All figures will be saved in `plotting/figs` which will be automatically made by the scripts. ### `sourcedata.tar.gz` The `vts` file contained in this file can be read by [ParaView](https://www.paraview.org/). The data file `conf1_screw.vts` is the result of 2nd order B-spline basis, while `conf2_screw.vts` uses 4th order B-spline to precisely evaluate Ricci curvature.