Metadata-Version: 2.4
Name: 3pc-lamfreq
Version: 1.0.0
Summary: Python library for free vibration analysis of shear deformable anisotropic laminates.
Author: Omprakash Seresta
Author-email: oseresta@gmail.com
License: MIT
Project-URL: Blog, https://3pcomposites.com/blogs-1/f/3pcsolver004-free-vibration-of-simply-supported-composite-plates
Project-URL: Analysis Tools, https://3pcomposites.com/analysis-tools
Project-URL: Documentation, https://drive.google.com/drive/folders/1jDb-P5BOgJ-moVU20B7D8oVeHjHLAHTm
Keywords: laminate-vibration composites free-vibration shear-deformation anisotropic aerospace-engineering mechanics fsdt clt
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: 3pc-material
Requires-Dist: 3pc-ply
Requires-Dist: 3pc-laminate
Requires-Dist: 3pc-panel
Requires-Dist: 3pc-loads
Requires-Dist: 3pc-utils
Requires-Dist: numpy
Requires-Dist: scipy
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: project-url
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# 3pc-lamfreq

`3pc-lamfreq` is a Python library used for free vibration analysis of shear deformable anisotropic laminates. It provides a `Lamfreq` class to calculate natural frequencies and mode shapes based on first-order shear deformation theory (FSDT) and classical laminate theory (CLT).

## Installation

Use the package manager [pip](https://pip.pypa.io/en/stable/) to install `3pc-lamfreq`. Since the package and its dependencies are available on PyPI, you can install them directly:

```bash
pip install 3pc-lamfreq
```

## API Reference

### `Lamfreq` Class

The primary component of this package is the `Lamfreq` class, which takes a panel, a load case, and configuration parameters to perform natural frequency and vibration analysis.

```python
from lamfreq.lamfreq import Lamfreq
```

#### Required Parameters

When initializing `Lamfreq`, the following parameters are required:

*   **`panel`** *(Panel)*: An instance of the `Panel` class (from `3pc-panel`) containing the laminate definition and geometry.
*   **`loads`** *(Loads)*: An instance of the `Loads` class (from `3pc-loads`) containing the load case and environmental conditions.
*   **`number_of_terms`** *(int)*: The number of terms to be used in the Ritz/analytical analysis.
*   **`number_of_points_x`** *(int)*: The number of grid points in the x-direction where the mode shapes are reported.
*   **`number_of_points_y`** *(int)*: The number of grid points in the y-direction where the mode shapes are reported.

#### Calculated Properties

The class calculates the following properties:

*   **`NT`**: Thermal in-plane loads.
*   **`NC`**: Hygral in-plane loads.
*   **`pairs`**: List of term index pairs `(i, j)` for analysis.
*   **`K33`**: The loads-dependent part of the stiffness matrix.
*   **`lambdaEV`**: Eigenvalues of the vibration system (natural frequencies in rad/s).
*   **`vr`**: Right eigenvectors (mode shapes).
*   **`lambda_cr`**: Critical eigenvalue.
*   **`vr_cr`**: Critical right eigenvector.
*   **`mn_cr`**: Critical `(m, n)` pair.
*   **`lambdaP`**: Sorted list of positive eigenvalues.
*   **`lambda1` to `lambda5`**: First five natural frequencies in Hz.
*   **`mn1` to `mn5`**: Dominant `(m, n)` mode shapes corresponding to the first five frequencies.
*   **`loc`**: Grid coordinates where mode shapes are computed.
*   **`w1` to `w5`**: First five right eigenvectors.

### Methods

#### `Lamfreq.fromDict(**kwargs)`

Initializes a `Lamfreq` instance using a dictionary of keyword arguments.

---

## Usage Examples

### Basic Initialization

Below is an example of performing a vibration analysis on a panel.

```python
from panel.panel import Panel
from loads.loads import Loads
from lamfreq.lamfreq import Lamfreq

# Assuming pnl (Panel) and ld (Loads) are already defined
lmf = Lamfreq(panel=pnl, loads=ld, number_of_terms=8, number_of_points_x=5, number_of_points_y=5)

# Access natural frequencies (in Hz)
print("First Natural Frequency (Hz):", lmf.lambda1)
print("Second Natural Frequency (Hz):", lmf.lambda2)

# Access dominant modes
print("First Dominant Mode (m, n):", lmf.mn1)
```

## Commands

The package provides a command-line interface entry point. After installing, you can run the application using:

```bash
lamfreq input.cfg
```

*(This entry point is defined in `lamfreq.main:main`)*

### Options

*   **`config`** *(positional)*: Specify the configuration file (`.cfg`) to run the analysis.
*   **`-h, --help`**: Show the help message and exit.
*   **`-v, --version`**: Show the version number.
*   **`-s, --sample`**: Copy example files (materials, plies, laminates, panels, loads, etc.) to the current directory.

### Configuration File (`input.cfg`)

The `lamfreq` command requires a configuration file (typically named `input.cfg` or `lamfreq.cfg`). Below is an example based on `lamfreq/examples/composite001/lamfreq.cfg`:

```ini
[files]
materials = materials.json
plies = plies.json
laminates = laminates.json
panels = panels.json
loads = loads.json
output = output.txt

[analysis]
number_of_terms = 8
number_of_points_x = 5
number_of_points_y = 5
output_K = no
output_M = no
```

#### `[files]` Section

This section defines the paths to the required input JSON files and the desired output file:

*   **`materials`**: Path to the materials JSON file. Follows the format expected by [`3pc-material`](https://pypi.org/project/3pc-material/).
*   **`plies`**: Path to the plies JSON file. Follows the format expected by [`3pc-ply`](https://pypi.org/project/3pc-ply/).
*   **`laminates`**: Path to the laminates JSON file. Follows the format expected by [`3pc-laminate`](https://pypi.org/project/3pc-laminate/).
*   **`panels`**: Path to the panels JSON file. Follows the format expected by [`3pc-panel`](https://pypi.org/project/3pc-panel/).
*   **`loads`**: Path to the loads JSON file. Follows the format expected by [`3pc-loads`](https://pypi.org/project/3pc-loads/).
*   **`output`**: Path to the text file where the vibration analysis results will be written.

#### `[analysis]` Section

This section specifies the analysis settings:

*   **`number_of_terms`**: The number of terms to use in the Ritz/analytical solver.
*   **`number_of_points_x`**: Number of reporting points along the length (x-axis).
*   **`number_of_points_y`**: Number of reporting points along the width (y-axis).
*   **`output_K`**: Option to output the stiffness matrix (`yes` or `no`).
*   **`output_M`**: Option to output the mass matrix (`yes` or `no`).

## Citation

If you use this library in your research or work, please cite it as follows:

**APA Format:**
> Rastogi, N., & Seresta, O. (2026). *3pc-lamfreq: Python library for free vibration analysis of shear deformable anisotropic laminates*. PyPI. https://pypi.org/project/3pc-lamfreq/

**BibTeX:**
```bibtex
@software{3pc_lamfreq,
  author = {Rastogi, Naveen and Seresta, Omprakash},
  title = {3pc-lamfreq: Python library for free vibration analysis of shear deformable anisotropic laminates},
  year = {2026},
  url = {https://pypi.org/project/3pc-lamfreq/}
}
```
