Skip to main content
zenodoopen

Zero Modes and Classification of Combinatorial Metamaterials

<p>This dataset contains the simulation&nbsp;data of the combinatorial metamaterial as used for the paper &#39;Machine Learning of Implicit Combinatorial Rules in Mechanical Metamaterials&#39;, as published in Physical Review Letters.</p> <p>In this paper, the data is used to classify each&nbsp;<span class="math-tex">\(k \times k\)</span> unit cell design into one of two classes (C or I) based on the scaling (linear or constant) of the number of zero modes&nbsp;<span class="math-tex">\(M_k(n)\)</span>&nbsp;for metamaterials consisting of an&nbsp;<span class="math-tex">\(n\times n\)</span>&nbsp;tiling&nbsp;of the corresponding unit cell. Additionally, a random walk&nbsp;through the design space starting from&nbsp;class C unit cells was performed to characterize the boundary between class C and I in design space. A more detailed description of the contents of the dataset follows below.</p> <p><strong>Modescaling_raw_data.zip</strong></p> <p>This file contains uniformly sampled unit cell designs for metamaterial M2&nbsp;and&nbsp;<span class="math-tex">\(M_k(n)\)</span>&nbsp;for&nbsp;<span class="math-tex">\(1\leq n\leq 4\)</span>, which was used to classify the unit cell designs for the data set. There is a small subset of designs for&nbsp;<span class="math-tex">\(k=\{3, 4, 5\}\)</span>&nbsp;that do not neatly fall into the class C and I classification, and instead require additional simulation for&nbsp;<span class="math-tex">\(4 \leq n \leq 6\)</span>&nbsp;before either saturating to a constant number of zero modes (class I) or linearly increasing (class C). This file contains the simulation data of size&nbsp;<span class="math-tex">\(3 \leq k \leq 8\)</span>&nbsp;unit cells. The data is organized as follows.</p> <p>Simulation data for&nbsp;<span class="math-tex">\(3 \leq k \leq 5\)</span>&nbsp;and&nbsp;<span class="math-tex">\(1 \leq n \leq 4\)</span>&nbsp;is stored in numpy array format (.npy) and can be readily loaded in Python with the Numpy package&nbsp;using the numpy.load command. These files are named &quot;data_new_rrQR_i_n_M_kxk_fixn4.npy&quot;, and contain a [Nsim, 1+k*k+4] sized array, where Nsim is the number of simulated unit cells. Each row corresponds to a unit cell. The columns are&nbsp;organized as follows:</p> <ul> <li>col 0: label number to keep track</li> <li>col 1 - k*k+1: flattened unit cell design, numpy.reshape should bring it back to its original&nbsp;<span class="math-tex">\(k \times k\)</span>&nbsp;form.&nbsp;</li> <li>col k*k+1 -&nbsp;k*k+5: number of zero modes&nbsp;<span class="math-tex">\(M_k(n)\)</span>&nbsp;in ascending order of&nbsp;<span class="math-tex">\(n\)</span>, so:&nbsp;<span class="math-tex">\(\{M_k(1), M_k(2), M_k(3), M_k(4)\}\)</span>.</li> </ul> <p><strong>Note:</strong> the unit cell design uses the numbers&nbsp;<span class="math-tex">\(\{0, 1, 2, 3\}\)</span>&nbsp;to refer to each building block orientation. The building block orientations can be characterized through the orientation of the missing diagonal bar (see Fig. 2 in the paper), which can be Left Up (LU), Left Down (LD), Right Up (RU), or Right Down (RD). The numbers correspond to the building block orientation&nbsp;<span class="math-tex">\(\{0, 1, 2, 3\} = \{\mathrm{LU, RU, RD, LD}\}\)</span>.</p> <p>Simulation data for&nbsp;<span class="math-tex">\(3 \leq k \leq 5\)</span>&nbsp;and&nbsp;<span class="math-tex">\(1 \leq n \leq 6\)</span>&nbsp;for unit cells that cannot be classified as class C or I for <span class="math-tex">\(1 \leq n \leq 4\)</span>&nbsp;is stored in numpy array format (.npy) and can be readily loaded in Python with the Numpy package&nbsp;using the numpy.load command. These files are named &quot;data_new_rrQR_i_n_M_kxk_fixn4_classX_extend.npy&quot;, and contain a [Nsim, 1+k*k+6] sized array, where Nsim is the number of simulated unit cells. Each row corresponds to a unit cell. The columns are&nbsp;organized as follows:</p> <ul> <li>col 0: label number to keep track</li> <li>col 1 - k*k+1: flattened unit cell design, numpy.reshape should bring it back to its original&nbsp;<span class="math-tex">\(k \times k\)</span>&nbsp;form.&nbsp;</li> <li>col k*k+1 -&nbsp;k*k+5: number of zero modes&nbsp;<span class="math-tex">\(M_k(n)\)</span>&nbsp;in ascending order of&nbsp;<span class="math-tex">\(n\)</span>, so:&nbsp;<span class="math-tex">\(\{M_k(1), M_k(2), M_k(3), M_k(4), M_k(5), M_k(6)\}\)</span>.</li> </ul> <p>Simulation data for&nbsp;<span class="math-tex">\(6 \leq k \leq 8\)</span>&nbsp;&nbsp;unit cells are&nbsp;stored in numpy array format (.npy) and can be readily loaded in Python with the Numpy package&nbsp;using the numpy.load command. Note that the number of modes is now calculated for&nbsp;<span class="math-tex">\(n_x \times n_y\)</span>&nbsp;metamaterials, where we calculate&nbsp;<span class="math-tex">\((n_x, n_y) = \{(1,1), (2, 2), (3, 2), (4,2), (2, 3), (2, 4)\}\)</span>&nbsp;rather than&nbsp;<span class="math-tex">\(n_x=n_y=n\)</span>&nbsp;to save computation time.&nbsp;These files are named &quot;data_new_rrQR_i_n_Mx_My_n4_kxk(_extended).npy&quot;, and contain a [Nsim, 1+k*k+8] sized array, where Nsim is the number of simulated unit cells. Each row corresponds to a unit cell. The columns are&nbsp;organized as follows:</p> <ul> <li>col 0: label number to keep track</li> <li>col 1 - k*k+1: flattened unit cell design, numpy.reshape should bring it back to its original&nbsp;<span class="math-tex">\(k \times k\)</span>&nbsp;form.&nbsp;</li> <li>col k*k+1 -&nbsp;k*k+9: number of zero modes&nbsp;<span class="math-tex">\(M_k(n_x, n_y)\)</span>&nbsp;in order:&nbsp;<span class="math-tex">\(\{M_k(1, 1), M_k(2, 2), M_k(3, 2), M_k(4, 2), M_k(1, 1), M_k(2, 2), M_k(2, 3), M_k(2, 4)\}\)</span>.</li> </ul> <p>Simulation data of metamaterial M1 for <span class="math-tex">\(k_x \times k_y\)</span> metamaterials are stored in compressed numpy array format (.npz) and can be loaded in Python with the Numpy package using the numpy.load command. These files are named &quot;smiley_cube_x_y_<span class="math-tex">\(k_x\)</span>x<span class="math-tex">\(k_y\)</span>.npz&quot;, which contain all possible metamaterial designs, and &quot;smiley_cube_uniform_sample_x_y_<span class="math-tex">\(k_x\)</span>x<span class="math-tex">\(k_y\)</span>.npz&quot;, which contain uniformly sampled metamaterial designs. The configurations are accessed with the keyword argument &#39;configs&#39;. The classification is accessed with the keyword argument &#39;compatible&#39;. The configurations array is of shape [Nsim, <span class="math-tex">\(k_x\)</span>, <span class="math-tex">\(k_y\)</span>], the classification array is of shape [Nsim]. The building blocks in the configuration are denoted by 0 or 1, which correspond to the red/green and white/dashed building blocks respectively. Classification is 0 or 1, which corresponds to I and C respectively.</p> <p><strong>Modescaling_classification_results.zip</strong></p> <p>This file contains the classification, slope, and offset of the scaling of the number of zero modes&nbsp;<span class="math-tex">\(M_k(n)\)</span>&nbsp;for the unit cells of metamaterial M2 in&nbsp;Modescaling_raw_data.zip. The data is organized as follows.</p> <p>The results for&nbsp;<span class="math-tex">\(3 \leq k \leq 5\)</span>&nbsp;based on the&nbsp;<span class="math-tex">\(1 \leq n \leq 4\)</span>&nbsp;mode scaling data is stored in &quot;results_analysis_new_rrQR_i_Scen_slope_offset_M1k_kxk_fixn4.txt&quot;. The data can be loaded using &#39;,&#39; as delimiter. Every row corresponds to a unit cell design (see the label number to compare to the earlier data). The columns are organized as follows:</p> <p>col 0: label number to keep track</p> <p>col 1: the class, where 0 corresponds to class I, 1 to class C and 2 to class X (neither class I or C for&nbsp;<span class="math-tex">\(1 \leq n \leq 4\)</span>)</p> <p>col 2: slope from&nbsp;<span class="math-tex">\(n \geq 2\)</span>&nbsp;onward (undefined for class X)</p> <p>col 3: the offset is defined as&nbsp;<span class="math-tex">\(M_k(2) - 2 \cdot \mathrm{slope}\)</span></p> <p>col 4:&nbsp;<span class="math-tex">\(M_k(1)\)</span></p> <p>The results for&nbsp;<span class="math-tex">\(3 \leq k \leq 5\)</span>&nbsp;based on the extended&nbsp;<span class="math-tex">\(1 \leq n \leq 6\)</span>&nbsp;mode scaling data is stored in &quot;results_analysis_new_rrQR_i_Scen_slope_offset_M1k_kxk_fixn4_classC_extend.txt&quot;. The data can be loaded using &#39;,&#39; as delimiter. Every row corresponds to a unit cell design (see the label number to compare to the earlier data). The columns are organized as follows:</p> <p>col 0: label number to keep track</p> <p>col 1: the class, where 0 corresponds to class I, 1 to class C and 2 to class X (neither class I or C for <span class="math-tex">\(1 \leq n \leq 6\)</span>)</p> <p>col 2: slope from&nbsp;<span class="math-tex">\(n \geq 2\)</span>&nbsp;onward (undefined for class X)</p> <p>col 3: the offset is defined as&nbsp;<span class="math-tex">\(M_k(2) - 2 \cdot \mathrm{slope}\)</span></p> <p>col 4:&nbsp;<span class="math-tex">\(M_k(1)\)</span></p> <p>The results for&nbsp;<span class="math-tex">\(6 \leq k \leq 8\)</span>&nbsp;based on the&nbsp;<span class="math-tex">\(1 \leq n \leq 4\)</span>&nbsp;mode scaling data is stored in &quot;results_analysis_new_rrQR_i_Scenx_Sceny_slopex_slopey_offsetx_offsety_M1k_kxk(_extended).txt&quot;. The data can be loaded using &#39;,&#39; as delimiter. Every row corresponds to a unit cell design (see the label number to compare to the earlier data). The columns are organized as follows:</p> <p>col 0: label number to keep track</p> <p>col 1: the class_x based on <span class="math-tex">\(M_k(n_x, 2)\)</span>, where 0 corresponds to class I, 1 to class C and 2 to class X (neither class I or C for <span class="math-tex">\(1 \leq n_x \leq 4\)</span>)</p> <p>col 2: the class_y based on <span class="math-tex">\(M_k(2, n_y)\)</span>, where 0 corresponds to class I, 1 to class C and 2 to class X (neither class I or C for <span class="math-tex">\(1 \leq n_y \leq 4\)</span>)</p> <p>col 3: slope_x from&nbsp;<span class="math-tex">\(n_x \geq 2\)</span>&nbsp;onward (undefined for class X)</p> <p>col 4: slope_y from&nbsp;<span class="math-tex">\(n_y \geq 2\)</span>&nbsp;onward (undefined for class X)</p> <p>col 5: the offset_x is defined as&nbsp;<span class="math-tex">\(M_k(2, 2) - 2 \cdot \mathrm{slope_x}\)</span></p> <p>col 6: the offset_x is defined as&nbsp;<span class="math-tex">\(M_k(2, 2) - 2 \cdot \mathrm{slope_y}\)</span></p> <p>col 7:&nbsp;<span class="math-tex">\(M_k(1, 1)\)</span></p> <p>Additionally, results including classification for M2.ii can be found in the &quot;results_analysis_unimodal_vs_oligomodal_vs_plurimodal_i_Scen_slope_M_M1k_kxk.txt and &quot;results_analysis_unimodal_vs_oligomodal_vs_plurimodal_i_Scenx_Sceny_slopex_slopey_Mx_My_M1k_kxk.txt&quot; files.</p> <p><strong>Random Walks Data</strong></p> <p>This file contains the random walks for&nbsp;<span class="math-tex">\(3 \leq k \leq 8\)</span>&nbsp;unit cells of metamaterial M2. The random walk starts from a class C unit cell design (classification M2.ii), for each step&nbsp;<span class="math-tex">\(s\)</span>&nbsp;a randomly picked unit cell is changed to a random new orientation for a total of&nbsp;<span class="math-tex">\(s=k^2\)</span>&nbsp;steps. The data is organized as follows.</p> <p>The configurations for each step are stored in the files named &quot;configlist_test_i.npy&quot;, where i is a number and corresponds to a different starting unit cell. The stored array has the shape [k*k+1, 2*k+2, 2*k+2]. The first dimension denotes the step&nbsp;<span class="math-tex">\(s\)</span>, where&nbsp;<span class="math-tex">\(s=0\)</span>&nbsp;is the initial configuration. The second and third dimension denote the unit cell configuration in the pixel representation (see paper) padded with a single pixel wide layer using periodic boundary conditions.&nbsp;</p> <p>The class for each configuration are stored in &quot;lmlist_test_i.npy&quot;, where i corresponds to the same number as for the configurations in the &quot;configlist_test_i.npy&quot; file. The stored&nbsp;array has the shape [k*k+1], where the index corresponds to the step&nbsp;<span class="math-tex">\(s\)</span>&nbsp;and displays the class for the accompanying unit cell. The stored number corresponds to the class as&nbsp;<span class="math-tex">\(\{0, 1\} = \{\mathrm{I}, \mathrm{C}\}\)</span>.&nbsp;</p>

ShareScore

52/100

Overall dataset sharing score

Score breakdown

These five areas show where the dataset supports — or may limit — practical reuse.

Stewardship
8
Harmonization
8
Access
16
Reuse readiness
8
Engagement
12

Topics