# 3pc-loads

`3pc-loads` is a Python library used to define and manage load cases for structural analysis, particularly for composite panels. It provides a `Loads` class to define in-plane loads (Nxx, Nyy, Nxy), bending moments (Mxx, Myy, Mxy), transverse pressures, point loads, and environmental differentials (temperature and moisture).

## Installation

Use the package manager [pip](https://pip.pypa.io/en/stable/) to install `3pc-loads`. Since `3pc-loads` is publicly available on PyPI, you can install it directly:

```bash
pip install 3pc-loads
```

## API Reference

### `Loads` Class

The primary component of this package is the `Loads` class, which holds load case definitions and environmental conditions.

```python
from loads.loads import Loads
```

#### Parameters

When initializing `Loads`, the following parameters are available:

*   **`loadsID`** *(str)*: Loadcase identifier (required).
*   **`panelID`** *(str)*: Panel identifier (required).
*   **`Nxx`, `Nyy`, `Nxy`** *(float)*: In-plane axial and shear loads (optional, default=0.0).
*   **`Mxx`, `Myy`, `Mxy`** *(float)*: Bending and twisting moments (optional, default=0.0).
*   **`p0`** *(float)*: Amplitude of pressure (optional, default=0.0).
*   **`P`** *(float)*: Amplitude of point load (optional, default=0.0).
*   **`xCG`, `yCG`** *(float)*: Center of gravity coordinates for distributed loads (optional, default=0.0).
*   **`xLength`, `yLength`** *(float)*: Lengths for distributed transverse loads (optional, default=0.0).
*   **`loadsType`** *(str)*: Type of load. Options include `"inplane"`, `"sinusoidal pressure"`, `"uniform pressure"`, `"point load"`, `"partial pressure"` (default=`"inplane"`).
*   **`Qyz`, `Qxz`** *(float)*: Out-of-plane shear loads (optional, default=0.0).
*   **`deltaT`** *(float)*: Temperature differential (optional, default=0.0).
*   **`deltaC`** *(float)*: Moisture differential (optional, default=0.0).
*   **`Ntt`, `Ntx`, `Nxt`, `Mtt`, `Mxt`, `Mtx`** *(float)*: Loads in cylindrical coordinates (optional, default=0.0).

### Methods

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

Initializes a `Loads` instance using a dictionary of keyword arguments. This is ideal for loading configurations from JSON files or dictionaries.

---

## Usage Examples

### Basic Initialization

Below is an example of defining a basic in-plane load case.

```python
from loads.loads import Loads

# Define an in-plane compression load
ld = Loads(
    loadsID="LC1", 
    panelID="P123", 
    Nxx=-100.0, 
    Nyy=0.0, 
    Nxy=0.0
)

print(f"Load Case: {ld.loadsID} for Panel: {ld.panelID}")
print(f"Nxx: {ld.Nxx}")
```

### Initializing from a Dictionary

You can load your loads directly from a dictionary.

```python
load_dict = {
    "loadsID": "LC2",
    "panelID": "P456",
    "p0": 0.5,
    "loadsType": "uniform pressure"
}

ld_2 = Loads.fromDict(**load_dict)
print("Load Type:", ld_2.type)
```

## Commands

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

```bash
loads
```
*(Currently, this serves as an entry point defined in `loads.main:main`)*
