# Estimating Core Loss for a Non-Oriented Electrical Steel Stack in Python (50W470 Example)

A non-oriented electrical steel grade like 50W470 already contains two numbers you can use: the strip thickness and the guaranteed core loss. This post turns them into a quick estimate of stack mass, lamination count and core loss, so you can sanity-check a motor core before asking for a quote.

## What the grade code tells you

In the Chinese standard (GB/T 2521), 50W470 reads like this:

- **50** → 0.50 mm thickness
- **W** → non-oriented
- **470** → maximum core loss of 4.70 W/kg at 1.5 T and 50 Hz (P1.5/50)

The same steel appears as M470-50A in EN 10106 and 50A470 in JIS. If you need to compare codes across standards, our guide to [electrical steel grades and standards](https://cn-electricalsteel.com/electrical-steel-grades-standards-selection-guide/) lists the equivalents.

## The calculation

Three steps:

1. Net iron volume = lamination area × stack height × stacking factor
2. Mass = volume × density
3. Core loss = mass × P1.5/50 × building factor

```python
import re

DENSITY_G_CM3 = 7.65  # typical for non-oriented grades; check your mill data sheet

def parse_gb_grade(code: str) -> dict:
    m = re.fullmatch(r"(\d{2,3})W(\d{3,4})", code.strip().upper())
    if not m:
        raise ValueError(f"Not a GB non-oriented grade: {code}")
    return {
        "thickness_mm": int(m.group(1)) / 100,
        "p15_50_w_per_kg": int(m.group(2)) / 100,
    }

def estimate_core_loss(grade, lamination_area_cm2, stack_height_mm,
                       stacking_factor=0.96, density=DENSITY_G_CM3,
                       building_factor=1.0):
    g = parse_gb_grade(grade)
    volume_cm3 = lamination_area_cm2 * (stack_height_mm / 10) * stacking_factor
    mass_kg = volume_cm3 * density / 1000
    return {
        "iron_mass_kg": round(mass_kg, 2),
        "laminations": round(stack_height_mm * stacking_factor / g["thickness_mm"]),
        "core_loss_w": round(mass_kg * g["p15_50_w_per_kg"] * building_factor, 1),
    }

print(estimate_core_loss("50W470", lamination_area_cm2=150, stack_height_mm=100))
# {'iron_mass_kg': 11.02, 'laminations': 192, 'core_loss_w': 51.8}

print(estimate_core_loss("50W470", 150, 100, building_factor=1.3))
# {'iron_mass_kg': 11.02, 'laminations': 192, 'core_loss_w': 67.3}
```

For a 150 cm² lamination stacked 100 mm high, you get about 11 kg of iron, roughly 192 sheets, and about 52 W at the catalog value.

## Where the estimate stops being accurate

- **P1.5/50 is a guaranteed maximum** measured on test strips at 1.5 T and 50 Hz. Your motor may run at a different flux density and frequency, so treat this as a comparison number between grades, not a prediction.
- **Building factor is not 1.0.** Punching, burrs, clamping stress and harmonics usually push real core loss above the catalog figure. Use a factor from your own test data.
- **Stacking factor depends on your process.** Coating type, burr height and stacking pressure all change it. 0.96 is a placeholder, not a rule.
- **Density varies slightly by grade.** Take the value from the mill certificate when you have it.

## Using it to compare grades

Run the same stack through a few grades and look at the loss difference against the price difference per kg. A thinner, lower-loss grade does not always pay back, especially on low-duty-cycle motors. Specs for our non-oriented range are on the [CRNGO steel coil](https://cn-electricalsteel.com/crngo-steel-coil/) page.

If you are comparing grades for a specific motor, send us the lamination drawing and the loss target and we will tell you which stock grades fit.What the grade number guarantees, and how to turn it into a first-pass loss figure for a lamination stack
