santex.anisotropy package#
Submodules#
santex.anisotropy.anisotropy module#
- class santex.anisotropy.anisotropy.Anisotropy(stiffness_matrix, density)#
Bases:
objectA class to represent anisotropic material properties.
Attributes:
- cijkl (Optional[numpy.ndarray]): Stiffness tensor in Voigt notation.
It is converted from the input stiffness matrix using the voigt_to_tensor method. If stiffness_matrix is None, cijkl remains None. Units should be consistent between the stiffness matrix and density, either in SI or CGS.
- rho (Optional[float]): Density of the material.
If density is None, rho remains None.
Parameters:
stiffness_matrix (Optional[numpy.ndarray]): A 6x6 matrix representing the stiffness tensor in Voigt notation. density (Optional[float]): The density of the material.
Methods:
- __init__(stiffness_matrix, density):
Initializes the Anisotropy object with the given stiffness_matrix and density. If either stiffness_matrix or density is None, cijkl and rho remain None.
Example:
>>> import numpy as np >>> stiffness_matrix = np.array([[198.96, 73.595, 68.185, 0., 9.735, 0.], >>> [73.595, 155.94, 62.23, 0., 6.295, 0.], >>> [68.185, 62.23, 225.99, 0., 33.85, 0.], >>> [0., 0., 0., 65.66, 0., 6.415], >>> [9.735, 6.295, 33.85, 0., 60.23, 0.], >>> [0., 0., 0., 6.415, 0., 65.18]]) * 10**9 >>> density = 3.5 # density in g/cm³ or consistent units >>> anisotropy = Anisotropy(stiffness_matrix, density) >>> print(anisotropy.cijkl) >>> print(anisotropy.rho)
- anisotropy_values(stiffness_matrix=None, density=None, method=None, return_values=None)#
Calculates various anisotropy values based on the velocities calculated from the given stiffness matrix and density.
- Parameters:
- stiffness_matrix (list or None): The stiffness matrix representing the material’s anisotropic properties.
If None, the current object’s stiffness matrix is used.
density (float or None): The density of the material. If None, the current object’s density is used.
- method (str or None): The method to use for calculating anisotropy values. Options include ‘array’ for batch
processing of multiple anisotropy objects.
- return_values (str or None): The specific anisotropy value to return. Options: ‘maxvp’, ‘minvp’, ‘maxvs1’,
‘minvs1’, ‘maxvs2’, ‘minvs2’, ‘max_vs_anisotropy_percent’, ‘min_vs_anisotropy_percent’, ‘p_wave_anisotropy_percent’, ‘s1_wave_anisotropy_percent’, ‘s2_wave_anisotropy_percent’, ‘maxdvs’, ‘AVpVs1’, or None (default) to print all values.
- Returns:
float or dict: If return_values is specified, returns the corresponding anisotropy value. If None, returns a dictionary containing all calculated anisotropy values.
- Raises:
ValueError: If an error occurs during the calculation, such as invalid input values.
- Notes:
If method=’array’, an array of Anisotropy objects can be provided for batch calculation.
The calculated anisotropy values include both P-wave and S-wave anisotropy percentages.
- christoffel_tensor(n)#
Calculates the Christoffel tensor given a direction vector n.
- Parameters:
n (numpy.ndarray): The direction vector for which the Christoffel tensor is calculated.
- Returns:
numpy.ndarray: The Christoffel tensor Tik for the given direction vector n.
- Raises:
ValueError: If an error occurs during the calculation.
- Example direction:
n = np.array([1, 0, 0])
- get_compliance()#
- hill_velocity()#
- phase_velocity()#
Calculates the phase velocities (P-wave velocity, S1-wave velocity, and S2-wave velocity) for different directions using the Christoffel tensor and wave properties.
- Returns:
tuple: A tuple containing the phase velocities (vp for P-wave, vs1 for S1-wave, and vs2 for S2-wave).
- Raises:
ValueError: If an error occurs during the calculation.
- plot(colormap='RdBu', step=180, savefig=False, figname=None, dpi=300, save_format='svg')#
Plots various anisotropic maps based on the Christoffel tensor.
- Parameters:
colormap (str): The colormap to use for plotting. Default is “RdBu_r”. step (int): The step size for theta and phi values. Default is 180. savefig (bool): Whether to save the plot as an image. Default is False. figname (str or None): The filename to save the plot. Required if savefig is True. dpi (int): The resolution of the saved image. Default is 300.
- Raises:
ValueError: If an error occurs during the plotting process.
- Notes:
This method generates a 2x3 grid of subplots, each representing different anisotropic maps based on the Christoffel tensor.
The colormap, step size, and other parameters can be customized.
- Example Usage:
anisotropy.plot(colormap=”viridis”, step=120, savefig=True, figname=”anisotropy_plot.png”, dpi=600)
- plot_velocities(pressure_range, temperature_range, return_type, is_ebsd=False, phase=None, grid=[5, 5], filename=None, *args)#
Plots velocities based on specified ranges and return types.
- Parameters:
pressure_range (tuple): The range of pressures for which velocities will be plotted. Example: [2, 4]. temperature_range (tuple): The range of temperatures for which velocities will be plotted. Example: [1000, 2000]. return_type (str): The type of velocity to plot. Options: ‘maxvp’, ‘minvp’, ‘maxvs1’, ‘minvs1’, ‘maxvs2’, ‘minvs2’. is_ebsd (bool): Whether the data comes from electron backscatter diffraction (EBSD). Default is False. phase (str or None): The phase of the material. Example: phase=’Forsterite’. grid (list): The grid dimensions for the plot. Default is [5, 5]. filename (str or None): The filename of the EBSD data. Required if is_ebsd is True. *args: Additional arguments for plot customization.
- Raises:
ValueError: If required parameters are not provided or if an error occurs during plotting.
- Notes:
If is_ebsd is True, phase and filename must be provided.
The plot type and appearance can be customized using *args.
- Example:
>>> anisotropy.plot_velocities((0, 100), (500, 1000), 'maxvp', is_ebsd=True, phase='phase1', filename='velocity_plot.png', 'ro-')
- plotly()#
Generates a Plotly figure to visualize material properties based on calculations using Christoffel and wave tensors.
This method creates a Plotly figure with subplots for various properties such as VP/VS1, VP, VS1, VS2, AVpVs1, and AVpVs2. The figure is generated by iterating over specified ranges of angles and calculating properties like wave moduli, VP, VS1, VS2, VP/VS1 ratios, and AVpVs1/AVpVs2 ratios. The resulting data points are plotted on scatter plots with a color scale representing different property values.
- Raises:
ValueError: If an error occurs during the plotting process.
- Notes:
Requires the existence of the christoffel_tensor and wave_property methods in the class instance to calculate material properties.
- Example Usage:
plotter = anisotropy_instance.plotly()
- plotter_vp(density, voigt_stiffness)#
Plots the Vp based on density and Voigt stiffness.
- Parameters:
density (float): The density of the material. voigt_stiffness (float): The Voigt stiffness of the material.
- plotter_vs1(density, voigt_stiffness)#
Plots the Vs1 based on density and Voigt stiffness.
- Parameters:
density (float): The density of the material. voigt_stiffness (float): The Voigt stiffness of the material.
- plotter_vs2(density, voigt_stiffness)#
Plots the Vs2 based on density and Voigt stiffness.
- Parameters:
density (float): The density of the material. voigt_stiffness (float): The Voigt stiffness of the material.
- plotter_vs_splitting(density, voigt_stiffness)#
Plots the Vs splitting based on density and Voigt stiffness.
- Parameters:
density (float): The density of the material. voigt_stiffness (float): The Voigt stiffness of the material.
- reuss_velocity()#
- velocities()#
- voigt_velocity()#
- wave_property(tik)#
Calculates the wave properties (wave moduli and polarization directions) given the Christoffel tensor Tik.
- Parameters:
tik (numpy.ndarray): The Christoffel tensor Tik for which wave properties are calculated.
- Returns:
tuple: A tuple containing the wave moduli and polarization directions.
- Raises:
ValueError: If an error occurs during the calculation.
santex.anisotropy.map module#
santex.anisotropy.melt module#
- santex.anisotropy.melt.calc_melt_density(weight_per, pressure, temperature)#
Calculates the density and component density of a melt based on its composition.
- Parameters:
- weight_per (list or dict): List or dictionary representing the weight percentage of various oxides in the melt.
If a dictionary is provided, it should have oxide names as keys and corresponding weight percentages as values.
pressure (float): Pressure of the melt in bars. temperature (float): Temperature of the melt in Kelvin.
- Returns:
density (float): Density of the melt. component_density (array): Component-wise density of the melt.
Example Usage: oxide = [‘sio2’, ‘tio2’, ‘al2o3’, ‘fe2o3’, ‘feo’, ‘mgo’, ‘cao’, ‘na2o’, ‘k2o’, ‘h2o’] weight_per = [40, 1.84, 13.7, 2.7, 9.57, 6.67, 11.5, 2.68, 0.25, 10] or weight_per can be a dictionary like {‘sio2’: 40, ‘tio2’: 1.84, ‘feo’: 9.57, ‘mgo’: 6.67, ‘cao’: 11.5, ‘na2o’: 2.68, ‘k2o’: 0.25, ‘h2o’: 10}
- santex.anisotropy.melt.calc_melt_density_from_excel(input_file, output_file)#
Calculates melt densities for samples listed in an input Excel file and saves the results to an output Excel file.
- Parameters:
input_file (str): Path to the input Excel file containing sample data. output_file (str): Path to save the output Excel file with calculated melt densities.
- Sample excel file:
Sample Name Pressure (bars) Temperature (K) SiO2 TiO2 Al2O3 Fe2O3 FeO MgO CaO Na2O K2O H2O sample_wir_01 500 1273 45.5 2.1 15.8 3.4 8.2 4.9 10.2 3.3 0.6 5.5 sample_wir_02 500 1273 49.7 1.9 14.3 2.8 7 .1 5.6 9.8 4.1 0.7 4.0
- santex.anisotropy.melt.modal_rock(rock, fraction, pressure, temperature, melt=0, weight_per=[])#
Calculates the average elastic constants and density of a rock mixture.
- Parameters:
rock (list): An array of mineral names constituting the rock mixture. fraction (list): An array corresponding to the fractional composition of each mineral in the rock. pressure (float): Pressure of the rock mixture in GPa. temperature (float): Temperature of the rock mixture in Kelvin. melt (float, optional): Fraction of melt in the rock mixture. Set to a non-zero value if there is a melt component. Default is 0. weight_per (list, optional): Weight percentage of oxides in the melt component, required if melt is non-zero. Default is [].
- Returns:
cij_average (array): Average elastic constants of the rock mixture. rho_average (float): Average density of the rock mixture.
- Example Usage:
Rock is an array of minerals and fraction is another array corresponding to the particular phase. eg. rock = [“Forsterite”, “Diopside”, “Enstatite”], fraction = [0.2, 0.5, 0.3]
santex.anisotropy.modalAnisotropy module#
- santex.anisotropy.modalAnisotropy.modal_anisotropy(material, fraction, pressure, temperature)#
santex.anisotropy.plot_seismic_velocity module#
- santex.anisotropy.plot_seismic_velocity.phase_velocity(cijkl, rho)#
Calculate phase velocities for various propagation directions.
Parameters: - cijkl (array): The fourth-rank stiffness tensor for the material. - rho (float): Density of the material.
Returns: - tuple: Tuples containing phase velocities for P-wave (vp), S-wave with higher velocity (vs1), and S-wave with lower velocity (vs2).
- santex.anisotropy.plot_seismic_velocity.plot_vp_2d(cijkl, rho, save_plot=False, filename=None, dpi=300, cmap='RdBu')#
Plot phase velocities in a 2D stereographic projection.
Parameters: - cijkl (array): The fourth-rank stiffness tensor for the material. - rho (float): Density of the material. - save_plot (bool): Whether to save the plot or not. Default is False. - filename (str): Name of the file to save the plot. Required if save_plot is True. - dpi (int): Dots per inch for saving the plot. Default is 300. - cmap (str or Colormap): The colormap to be used for the scatter plot. Default is ‘RdBu’.
Returns: - None
santex.anisotropy.plot_vel_grid module#
- santex.anisotropy.plot_vel_grid.plot_velocity_grid(pressure_range, temperature_range, return_type, is_ebsd=False, phase=None, grid=[5, 5], filename=None, fig_name=None, save_plot=False, dpi=300, *args)#
santex.anisotropy.utils module#
- santex.anisotropy.utils.christoffel_tensor(cijkl, n)#
- santex.anisotropy.utils.wave_property(tik)#
santex.anisotropy.vtkplotter module#
- class santex.anisotropy.vtkplotter.Plotter#
Bases:
objectA class for plotting seismic wave velocities in 3D using VTK.
Attributes: - None
- classmethod plot_vp(c, rho)#
Plot the P-wave velocities (vp) in 3D using VTK.
This method calculates and visualizes the P-wave velocities (vp) for a given fourth-rank stiffness tensor (c) and material density (rho) using the Visualization Toolkit (VTK).
Parameters: - c (array): The fourth-rank stiffness tensor in Voigt notation. - rho (float): Density of the material.
Returns: - None
Usage Example: >>> c = np.array([[323.70, 66.40, 71.60, 0.000, 0.000, 0.000], … [66.40, 197.60, 75.60, 0.000, 0.000, 0.000], … [71.60, 75.60, 235.10, 0.000, 0.000, 0.000], … [0.000, 0.000, 0.000, 64.62, 0.000, 0.000], … [0.000, 0.000, 0.000, 0.000, 78.05, 0.000], … [0.000, 0.000, 0.000, 0.000, 0.000, 79.04]]) * 1e9 >>> Plotter.plot_vp(c, 3310)
- classmethod plot_vs1(c, rho)#
Plot the S-wave velocities with higher velocity (vs1) in 3D using VTK.
Parameters: - c (array): The fourth-rank stiffness tensor in Voigt notation. - rho (float): Density of the material.
Returns: - None
- classmethod plot_vs_splitting(c, rho)#
Plot the difference between S-wave velocities (vs1 - vs2) in 3D using VTK.
Parameters: - c (array): The fourth-rank stiffness tensor in Voigt notation. - rho (float): Density of the material.
Returns: - None