ELATE
====================

With the output of a given DFT code or direct input of an elastic tensor MechElastic can perform ELATE's anisotropic analysis and produce the same 2d and 3d plots of elastic properties. The original website for ELATE can be found here, <http://progs.coudert.name/elate>.

Examples of the implementation can be found in \MechElastic\examples\ELATE.py or \MechElastic\examples\mechelastic_w_mpDatabase.py



Direct output from a DFT code usage::

    import mechelastic
    # Produce the 2D plots for the Shear modulus 
    # elastic_calc - ['SHEAR','POISSON','YOUNG','LC'] 
    # npoints - number of points to use to make the plot
    mechelastic.calculate_elastic_anisotropy(outfile = 'si.elastic.out',infile = 'si.elastic.in',                                                                            code="qe_thermo_pw",                                                                                                             plot="2D", 
                                             elastic_calc= 'SHEAR'
                                             npoints = 100)
    # Produce the 3D plots for the Shear modulus
    # elastic_calc - ['SHEAR','POISSON','YOUNG','LC'] 
    # npoints - number of points to use to make the plot
    mechelastic.calculate_elastic_anisotropy(outfile = 'si.elastic.out', infile = 'si.elastic.in', 
                                             code="qe_thermo_pw",                                                    
                                             plot="3D", 
                                             elastic_calc= 'SHEAR'
                                             npoints = 100)
    # Just output the ELATE analysis
    mechelastic.calculate_elastic_anisotropy(outfile = 'si.elastic.out',infile = 'si.elastic.in', code="qe_thermo_pw")



Direct input of a elastic tensor usage::

    from mechelastic.core import ELATE
    from mechelastic.parsers import QE_thermo_pw_Parser
    
    output = QE_thermo_pw_Parser(outfile = 'si.elastic.out', 
                                 infile =   'si.elastic.in' )
    # This is a 6X6 matrix. Input your tensor here.
    elastic_tensor = output.elastic_tensor
    
    row = elastic_tensor.shape[0]
    col = elastic_tensor.shape[1]
    rowsList = []
    for i in range(row):
        columnsList = []
        for j in range(col):
            columnsList.append(round(elastic_tensor[i, j],3))
        rowsList.append(columnsList)
    elastic_tensor = ELATE.ELATE(rowsList)
    
    voigt_shear  = elastic_tensor.voigtShear
    
    elastic_tensor.plot3D(elastic_calc="LC", npoints = 100)
    elastic_tensor.plot2D(elastic_calc="LC", npoints = 100)


.. toctree::
   :maxdepth: 4 

   elate_example