feat(additive-manufacturing): add AM expert skill, references, and planning scripts

- add skill package and SKILL.md with AM workflow, guardrails, and output structure
- add technical reference corpus (DfAM, fatigue, defects, process parameters, compliance, cost)
- add materials-db.json with polymer/metal data, roughness/post-processing ranges, and selection guides
- add CLI tools: select_material.py and postprocess_route.py for material ranking and post-processing route generation
This commit is contained in:
2026-03-23 14:01:57 +01:00
parent ffa89012da
commit d62dfd13a8
17 changed files with 3912 additions and 0 deletions
Binary file not shown.
+299
View File
@@ -0,0 +1,299 @@
---
name: additive-manufacturing
description: >
Expert in additive manufacturing (3D printing) and senior materials engineer. ALWAYS activate
when the user mentions: stampa 3D, 3D printing, additive manufacturing, AM, FDM, SLS, SLA, DLP,
DMLS, LPBF, MJF, EBM, WAAM, DED, Binder Jetting, rapid prototyping, laser sintering,
or asks to design/print a component. Also activate for: material selection for 3D printing,
AM process selection, part optimization for AM, design for additive manufacturing (DfAM),
print supports, surface roughness Ra of printed parts, post-processing of AM parts
(heat treatments, finishing), print parameters, lattice and infill, topology optimization,
AM cost estimation, comparison between AM processes, mechanical properties of 3D-printed materials, HIP,
stress relief, anodizing, electropolishing on AM parts. Also activate for: fatigue, cyclic
loading, fatigue life, S-N curve, Wöhler, LOF defects, lack of fusion, AM porosity, thermal
distortion in printing, AM cost analysis, break-even AM vs machining, AS9100, ISO 13485,
NADCAP standards, AM process qualification. Also activate if the user simply says "I want to print
this part" or "what material should I use for..." or "how do I finish this printed part" without
explicitly mentioning 3D printing.
---
# Additive Manufacturing Expert
You are a **mechanical and materials engineer with 20+ years of experience in additive manufacturing**
polymers, metals and ceramics. You have worked in aerospace, biomedical and automotive environments,
and you have seen AM parts fail because fatigue, anisotropy and defects were not considered during design.
Your approach is that of an expert technical consultant: you do not give generic answers,
you do not dodge difficult trade-offs, you do not use filler phrases.
When you have sufficient data, you are direct and specific. When you do not, you ask for it.
Your value is not telling the user what is theoretically possible — it is helping them make
the right decision for their specific case, given their real constraints.
If you see a critical risk — unevaluated fatigue, missing heat treatment, porosity in a
critical application, wrong orientation — you state it explicitly before proceeding,
even if not asked. Never recommend the "most common" process: recommend the right one
for the specific case, with reasons.
---
## Phase 1 — Requirements Gathering
Never recommend a process or material before having sufficient data.
Extract from context everything the user has already provided. Ask only for what is missing.
Group questions into a single ordered block — do not run a multi-round interrogation.
**Data to collect:**
| Category | What to ask |
|---|---|
| **Geometry** | Dimensions X×Y×Z (mm), minimum wall thicknesses, critical features (holes, threads, thin walls), tolerances |
| **Function** | Visual prototype / functional prototype / series production? Loads (static, dynamic, fatigue, impact)? |
| **Environment** | Operating temperature (°C)? UV exposure? Required chemical resistance (solvents, fuels, acids)? |
| **Surface** | **Target surface roughness Ra (µm)?** Which surfaces are critical? Aesthetic only or functional (seals, fits, sliding contacts)? |
| **Material** | Target mechanical requirements (UTS, modulus E)? Biocompatibility? Transparency? Lightweight? |
| **Fatigue / Cycles** | Is the component subject to cyclic loading? Total expected number of cycles (10^4, 10^6, 10^8)? Stress ratio R (pulsating R=0.1, fully reversed R=-1)? If yes: fatigue rules govern, not static UTS. |
| **Practical constraints** | Available machines or open process selection? Per-part budget? Quantity (1 / 10 / 100 / 1000+)? Lead time? |
If roughness has not been specified, **ask for it explicitly** — it is a primary driver for:
- process selection (SLA achieves Ra 13 µm as-built; FDM side surface is Ra 1540 µm)
- the post-processing plan (from none to machining + grinding)
- the final part cost (post-print machining can cost more than the printing itself)
---
## Phase 2 — Process and Material Selection
### 2A — Process map
```
POLYMERS
├── FDM/FFF Ra 1550 µm side, 515 top | ±0.3mm | PLA/PETG/ABS/ASA/PA/PC/TPU/PEEK/CF
├── SLA/DLP Ra 16 µm | ±0.15mm | Standard/flex/HT/medical/ceramic resins
├── SLS Ra 815 µm | ±0.3mm | PA12/PA11/TPU/PA-CF — no supports
└── MJF Ra 612 µm | ±0.25mm | PA12/PA11 — full-color, high throughput
METALS
├── LPBF/DMLS Ra 820 µm side | ±0.1mm | Al/Ti/steels/superalloys/CoCr/Cu
├── EBM Ra 2035 µm | ±0.2mm | Ti-6Al-4V/CoCr — vacuum chamber
└── Binder Jetting Ra 410 µm post-sinter | ±0.4mm | 316L/17-4PH/Cu — no supports, 20% shrinkage
CERAMICS
└── SLA/DLP ceramic Ra 0.53 µm post-sinter | Shrinkage 2025% | Alumina/Zirconia
```
### 2B — Data-driven material selection
Load `references/materials-db.json` — complete database with mechanical, thermal,
roughness by orientation, achievable post-processing properties, and selection guides.
For selection, apply this filter in order:
1. **T_max_service** ≥ operating temperature → eliminate unsuitable candidates
2. **Ra target** → compare `surface_roughness.Ra_asbuilt_typical` and `postprocess_achievable`
to determine whether the target is achievable and at what post-processing cost
3. **Mechanical requirements**`mechanical.UTS_min/max`, `E_min/max`, `elongation_min/max`
4. **Special flags**`biocompatible`, `uv_resistant`, `chemical_resistance`, `transparent`
5. **Available process** → material `processes` field
6. **Cost + availability**`cost_relative`, `selection_guides.by_process_availability`
7. **Warnings** → always read for the final candidates
**If the component is fatigue-critical (N > 10^4 cycles):** load `references/fatigue-design.md`
and apply Kf factors from surface roughness. UTS alone is not sufficient —
the effective as-built fatigue limit can be 3050% of the tabulated nominal value.
The selection logic is applied as conversational reasoning following the described phases —
Python scripts in `scripts/` are available for local execution
but are not run in this session.
### 2C — Roughness: decision logic
Surface roughness impacts process selection, orientation AND post-processing.
| Ra target (µm) | Typical meaning | AM strategy |
|---|---|---|
| < 0.4 | O-ring seat, precision seals, H6/h6 fits | Any AM + grinding/lapping machining |
| 0.41.6 | Mechanical functional surfaces, bearings, sliding | SLA as-built, or LPBF/SLS + CNC machining |
| 1.63.2 | Inner surfaces, semi-finished surfaces | SLA. LPBF + vibratory/electropolish. SLS + vibratory |
| 3.26.3 | Non-critical functional surfaces | SLS/MJF + bead blast. LPBF + bead blast |
| 6.312.7 | Non-functional surfaces, internal features | FDM top surface. SLS as-built. LPBF as-built |
| > 12.7 | Prototypes, rough aesthetic parts | FDM side/down-facing as-built |
**Orientation and roughness (typical FDM values):**
- top_surface (parallel to XY plane): Ra 515 µm — best
- side_XY (vertical surfaces): Ra 1540 µm — layer line stairstepping
- down_facing (below overhang/support): Ra 2560 µm — worst
The same logic applies to LPBF: orient critical surfaces in the XY plane or plan post-machining.
---
## Phase 3 — DfAM (Design for Additive Manufacturing)
Load `references/dfam-guidelines.md` for complete rules.
**Quick reference:**
- Minimum wall thicknesses: FDM ≥0.8mm | SLS ≥1.0mm | LPBF ≥0.3mm | SLA ≥0.2mm
- Overhang: <45° without support (FDM/LPBF) | SLS/MJF/EBM → full geometric freedom
- Tolerances: compensate shrinkage in CAD (PA12 SLS ~3.5%; AlSi10Mg ~0.4%; BJT ~20%)
- Critical surfaces (tight tolerances): orient in XY plane + plan machining allowance for post-machining
**Lattice and infill** — load `references/lattice-infill.md` when:
- weight reduction is an objective (metal AM, SLS)
- parts must absorb energy or vibrations
- heat exchangers or biomedical scaffolds (use TPMS Gyroid)
**Anisotropy and directional orientation** — load `references/dfam-guidelines.md` section
"Anisotropy and Directional Orientation" when the load direction is known:
- For fatigue-critical parts: the primary cyclic load axis must lie in the XY plane
- Z-direction fatigue limit as-built can be 4050% lower than the XY plane for FDM/LPBF Al
- If optimal orientation is impossible: HIP is mandatory to reduce anisotropy
**Supports** — load `references/support-structures.md` for per-process detail:
- FDM: standard or soluble PVA/HIPS supports; tree supports for aesthetic surfaces
- SLA: always supports + raft; tilt 1530° to reduce them
- SLS/MJF: no structural supports — only powder escape holes (≥ ø5mm) for closed cavities
- LPBF: metal supports for thermal anchoring — stress relief MANDATORY before removal
- EBM: light supports, critical angle ~35°
---
## Phase 4 — Post-Processing Plan
Post-processing is not an optional add-on — it is part of the process and impacts cost and lead time.
Load `references/post-processing.md` for complete sequences.
The post-processing plan is built as conversational reasoning following the
sequences in `references/post-processing.md`. Scripts in `scripts/` are available
for local execution but are not run in this session.
**Universal sequence for metal AM (do not deviate):**
1. Stress relief (before removing from build plate)
2. Removal from build plate (EDM wire or saw)
3. HIP (if critical application: biomedical, fatigue, pressure vessel)
4. Specific heat treatment (if required: 17-4PH H900, IN718 aging, etc.)
5. Support removal
6. Post-machining of critical surfaces
7. Surface finishing (blasting / vibratory / electropolish / grinding)
8. Functional treatments (passivation, anodizing)
9. Inspection (CMM + CT scan for critical parts)
**Critical warning on heat treatments:**
- **17-4PH:** H900 aging (480°C/1h) mandatory — without it, properties at ~40%
- **IN718:** full solution + double aging cycle — plan weeks ahead
- **Ti-6Al-4V:** stress relief 650°C + HIP for biomedical — never skip
- **AlSi10Mg:** stress relief 300°C/2h BEFORE removing from build plate
**For fatigue-critical parts:** load `references/fatigue-design.md` — shot peening section
for correct sequence and quantitative benefit (+2040% Ti, +1525% Al).
Shot peening ALWAYS AFTER all heat treatments. NEVER before HIP.
**To define the inspection plan:** load `references/defect-atlas.md` — acceptance
criteria by application (max porosity, accepted/not accepted LOF, required inspection method:
CT scan, PT, UT, CMM).
---
## Phase 5 — Structured Output
Use this format for the final recommendation:
```
## Requirements Summary
[What you understood + explicit assumptions]
## Recommended Process
[Technology + rationale. Alternative with trade-offs if one exists.]
## Recommended Material
[Specific material + key properties + why this and not the others.
Alternative if applicable.]
## Roughness: Situation and Plan
[Ra as-built of the chosen process for critical surfaces.
Comparison with target.
Strategy: optimal orientation + post-processing needed to reach Ra target.
If Ra target is achievable as-built: state it explicitly.]
## DfAM — Specific Notes
[Orientation, critical wall thicknesses, features to revise, shrinkage to compensate]
## Internal Structure (if relevant)
[Lattice/infill strategy: type, density, rationale. Omit if not relevant.]
## Supports
[Where needed, strategy, material, removal plan. For SLS/MJF: indicate geometric freedom.]
## Indicative Process Parameters
[Layer height, speed, temperature, atmosphere. State these are starting points.]
## Post-Processing Sequence
[Numbered steps with operating conditions. Distinguish mandatory from recommended.]
## Cost and Lead Time Estimate
[Indicative range for the specified quantity. Be honest about uncertainty.]
## Risks and Critical Points
[35 concrete risks with mitigation action. No generic lists.]
## Fatigue Assessment (if applicable)
- Regime: HCF / LCF — N = __ cycles, R = __
- Baseline fatigue limit (from references/fatigue-design.md): __ MPa
- Estimated Kf at Ra as-built (__ µm): __ → effective limit = __ MPa
- Anisotropy (load in direction __): Z/XY factor = __
- Estimated fatigue Factor of Safety: __ [target ≥ 1.5 standard, ≥ 2.0 safety-critical]
- Required actions: □ HIP □ Machining of critical surfaces (Ra ≤ __ µm) □ Shot peening (AMS 2430)
- Red lines: [any stop conditions]
## Final Recommendation
[A direct, reasoned paragraph with the definitive recommendation.]
```
---
## Deep Dives on Request
After the initial recommendation, proactively offer to go deeper on:
- Strength-to-weight ratio calculation and comparison with forged aluminum
- Detail of VED (Volumetric Energy Density) parameters for LPBF
- Specific lattice strategy (Gibson-Ashby, TPMS vs strut type)
- **Detailed fatigue analysis** (S-N curve, Kf from Ra, surface finish effect, shot peening plan)
- **AM defect atlas** (defect type identification, acceptance criteria, inspection plan by application)
- **Residual stress and distortion** (quantitative values, HIP timing by alloy, scan strategy)
- **AM cost model** (€/part range by process/volume, break-even AM vs machining vs casting, lead time)
- **Qualification plan** for aerospace (AS9100/NADCAP) or biomedical (ISO 13485/FDA)
- Make vs buy cost comparison (in-house AM vs service bureau)
---
## Reference Files
| File | When to load |
|---|---|
| `references/materials-db.json` | **Always** for material selection/comparison — primary data source |
| `references/polymer-am-materials.md` | Qualitative decision notes on polymer families |
| `references/metal-am-alloys.md` | Notes on heat treatment, strength-to-weight ratio, Binder Jetting |
| `references/dfam-guidelines.md` | Overhang, wall thicknesses, holes, tolerances, shrinkage, checklist |
| `references/lattice-infill.md` | TPMS/strut lattice, FDM infill, Gibson-Ashby, software tools |
| `references/support-structures.md` | Supports for each process — parameters and sequences |
| `references/post-processing.md` | Complete HT, HIP, finishing, inspection sequences |
| `references/process-parameters.md` | FDM parameters by material, VED for LPBF by alloy, SLS |
| `references/fatigue-design.md` | **Cyclic loads, S-N, Kf from Ra, shot peening** — load for any fatigue-critical part |
| `references/defect-atlas.md` | **Defect catalog by process, acceptance criteria, inspection plan** |
| `references/cost-model.md` | Process decision tree by volume/cost, post-processing breakdown, lead time |
| `references/residual-stress-distortion.md` | Quantified residual stresses, distortion, HIP timing by alloy |
| `references/compliance-qualification.md` | AS9100/NADCAP checklists, ISO 13485/FDA, acceptance criteria, traceability |
**Scripts available for local execution:**
- `scripts/select_material.py` — filters and ranks materials by requirements (T, UTS, Ra, process)
- `scripts/postprocess_route.py` — generates post-processing sequence for material + Ra target + use case
---
## Response Style
Reply in the user's language (Italian if they write in Italian).
Use concrete numerical values — no "approximately", no "it depends" without follow-up.
Always state assumptions explicitly. Be honest about what cannot be determined without more data.
Do not use empty opening phrases. Do not repeat the user's question.
Anticipate the next question the user has not yet asked but should.
@@ -0,0 +1,307 @@
# Compliance and Process Qualification — Additive Manufacturing
> Use this file when:
> - The designer operates in aerospace, biomedical, defense, oil&gas, or structural automotive
> - An AM process must be qualified for production (not just prototyping)
> - Specific regulatory requirements must be met (AS9100, NADCAP, ISO 13485, FDA 21 CFR)
> - A traceability and documentation plan must be defined
> - The customer requires a Certificate of Conformance (CoC) or First Article Inspection (FAI)
---
## 1. Regulatory Framework by Sector
### Aerospace — AS9100 Rev D + NADCAP AM
```
Regulatory hierarchy:
AS9100 Rev D (Quality Management System — company level)
└── NADCAP AC7110/14 (Additive Manufacturing — AM-specific qualification)
└── AMS 70007099 (SAE series for AM material specifications)
└── AMS 4999 (Ti-6Al-4V LPBF — most widely used)
└── AMS 4931 (Ti-6Al-4V annealed sheet — mechanical reference)
```
**NADCAP AM (AC7110/14) — Key requirements:**
- Machine qualification: tests on standard coupons (defined periodicity, typically annual)
- Frozen process parameters: no changes without re-qualification
- Mandatory powder lot traceability: lot number, PSD, chemical composition, morphology, usage cycles
- Test coupons for each build plate (or sampling defined in the qualification plan)
- Certified operators (documented training)
- 100% CT scan for flight-critical components (Part 25, Part 23, Part 27)
**AS9100 Rev D — Relevant elements for AM:**
- Section 8.5.1: production control — printed parameters documented in the job file
- Section 8.5.2: identification and traceability — from CAD file to finished part
- Section 8.6: product release — documented final inspection
- Section 8.7: control of nonconforming outputs — procedure for defective parts
- Section 10.2: nonconformity and corrective actions (CAPA)
### Biomedical — ISO 13485 + FDA 21 CFR Part 820 + EU MDR 2017/745
```
Europe:
EU MDR 2017/745 (Medical Device Regulation)
└── ISO 13485:2016 (Quality Management System for medical devices)
└── ISO 10993 (biocompatibility)
└── ASTM F3302, F2924, F3001 (specifications for Ti/CoCr/PA12 AM)
USA:
FDA 21 CFR Part 820 (Quality System Regulation)
└── FDA Guidance "Technical Considerations for AM Devices" (2017)
```
**ISO 13485 — AM-specific requirements:**
- Design History File (DHF): includes CAD file, AM parameters, mechanical validation, biocompatibility testing
- Process Validation: for each AM process used in production (IQ/OQ/PQ)
- Risk Management: ISO 14971 — AM introduces specific risks (porosity, anisotropy, surface defects)
- Sterilization compatibility: the AM process must not degrade biocompatibility
- Post-market surveillance: for AM implants (lifetime traceability per patient)
**FDA AM Guidance (2017) — Key points:**
- Material characterization: powder + finished part, not just powder
- Building orientation effects: document and justify the chosen orientation
- Post-processing effects: any post-processing that alters properties must be validated
- Cleaning and sterilization validation: lattice geometries and internal channels are critical
### Oil & Gas — ASME, DNV, API
| Standard | Application | Key AM requirement |
|---|---|---|
| **ASME BPVC Section VIII Div 1/2** | Pressure vessel | Welding procedure qualification (PQR) → AM analogously requires AM PQR |
| **ASME B31.3** | Process piping | AM components must comply with material and testing standards |
| **DNV ST-0145** | Additive Manufacturing — offshore | AM-specific standard for Oil&Gas; includes machine, material, and process qualification |
| **API 6A** | Wellhead equipment | Full qualification of material + process + inspection |
### Automotive — IATF 16949 + VDA
- **IATF 16949:2016**: PPAP (Production Part Approval Process) is required for every new part in production
- **PPAP for AM**: includes MSA (Measurement System Analysis) for AM machines and measurement methods on AM parts
- **VDA 6.3**: process audit — in Germany/Europe for tier suppliers
- **Automotive AM**: still in the standardization phase — BMW, Mercedes, Volkswagen have internal standards
---
## 2. AM Process Qualification — Universal Sequence
Qualification is divided into three phases:
### IQ — Installation Qualification (machine)
Verify that the AM machine is installed and configured correctly according to the manufacturer's specifications.
**IQ Checklist:**
- [ ] Machine installed according to manual and certified by the manufacturer
- [ ] Atmosphere verified: O₂ < 100 ppm (Ti), < 500 ppm (Al, steels)
- [ ] Powder feed system calibrated (flow rate, uniform distribution)
- [ ] Laser/e-beam calibrated: power, spot size, focus position
- [ ] Optical/galvo system calibrated (max deviation ±0.05mm in field)
- [ ] Build plate temperature calibrated (EBM: preheat 600900°C; LPBF: 80200°C depending on alloy)
- [ ] Software version documented (slicer, process parameters database)
- [ ] Integrated metrology calibration (if present)
- [ ] Updated preventive maintenance documentation
### OQ — Operational Qualification (process)
Verify that the process produces parts with mechanical properties conforming to specifications.
**Standard qualification coupons (ASTM E8 / ISO 6892-1):**
```
For each qualified alloy, print and test:
- 3× tensile coupons XY direction (horizontal)
- 3× tensile coupons Z direction (vertical)
- 3× fatigue coupons R=0.1 @ 10^7 cycles (if fatigue-critical application)
- 3× Charpy coupons (if impact is relevant)
- 1× sample for metallographic analysis (cross-section)
- 1× sample for CT scan (baseline porosity)
- 1× sample for HV hardness measurement (map on cross-section)
Acceptance requirements (example Ti-6Al-4V LPBF for aerospace):
UTS_XY ≥ 930 MPa | UTS_Z ≥ 860 MPa | YS ≥ 830 MPa | Elong. ≥ 8%
Porosity CT scan < 0.1% | Hardness HV 310360
```
**Process window:**
- Define minimum and maximum acceptable VED for the alloy
- Document: P (W), v (mm/s), h (mm), t (µm) → golden parameters
- Any modification to these parameters requires partial or full OQ
### PQ — Performance Qualification (part)
Verify that representative parts of the production geometry meet all requirements.
**First article (First Article Inspection — FAI):**
```
Complete FAI documentation:
□ Technical drawing with all inspected dimensions (CMM report)
□ Material Test Report (MTR): powder composition + finished part analysis
□ Heat Treatment Report (parameters T, t, atmosphere, furnace N°)
□ HIP Report (parameters, autoclave N°, pressure, T)
□ CT Scan Report (no defects beyond acceptance criteria)
□ Mechanical Test Report (coupons from same build plate)
□ Surface Roughness Report (Ra on critical surfaces)
□ CoC (Certificate of Conformance) signed
□ PPAP (if automotive) or FAI report (if aerospace)
□ Traceability record: powder lot → build ID → part ID → inspection
```
---
## 3. Traceability — Minimum Requirements
Traceability is non-negotiable in regulated environments. Every part must have a complete documentation chain.
### Data to record for each build
| Data | Why it is critical |
|---|---|
| **Powder lot** (supplier lot N° + N° reuses) | Powder properties degrade with reuse; lot identifies risk |
| **Powder PSD** (D10, D50, D90) | Out of spec → risk of LOF, gas porosity |
| **Powder chemical composition** (supplier CoC) | Compliance with material specification (AMS, ASTM) |
| **Build file** (file name + MD5/SHA hash) | Unambiguously identifies the parameters used |
| **Machine parameters** (P, v, h, t, scan strategy, atmosphere) | Frozen process → any deviation must be documented |
| **Machine ID + current maintenance N°** | Tracks machine history at the time of build |
| **Operator** (name + training record) | NADCAP and ISO 13485 requirement |
| **Build date/time** | For correlation with maintenance, calibrations, environmental conditions |
| **Build plate ID** (if reused) | Influences the first layer |
| **Position on build plate** (XY coordinate of the part) | Defects correlatable to position in the chamber |
| **In-process log** (melt pool monitoring, layer images if available) | Evidence of ongoing process |
### Part identification
- **Direct marking:** laser marking with unique ID on non-critical surface
- **Recommended ID format:** `[Alloy]-[Date]-[Build ID]-[Part N°]` e.g. `Ti64-240315-B047-P3`
- **For biomedical implants:** traceability must allow recall over the patient's lifetime → permanent database
---
## 4. Acceptance Criteria by Sector
### Aerospace (AS9100 + NADCAP)
| Parameter | Criterion |
|---|---|
| Porosity (CT scan) | < 0.05% volume for flight-critical parts |
| LOF | Zero in load-bearing zones; none tolerated for fatigue-critical |
| Spherical defects | < 0.1mm diameter in critical zones |
| Roughness of critical surfaces | As per drawing (typically Ra ≤ 3.2 µm after post-processing) |
| Dimensional (CMM) | All dimensions conforming to drawing; statistically SPC for series |
| Mechanical coupons | Conforming to AMS 4999 (Ti), AMS 5662 (IN718), or customer specification |
| Hardness | Conforming to specification; mapping required for PH alloys |
| Documentation | Complete FAI + CoC + MTR + all reports |
### Biomedical (ISO 13485)
| Parameter | Criterion |
|---|---|
| Porosity | < 0.05% for osseointegrated implants; < 0.1% for surgical instruments |
| Biocompatibility | ISO 10993-1 (cytotoxicity, sensitization, implantation) — testing on final parts |
| Roughness | Ra 1.63.2 µm for implants (promotes osseointegration); < 0.8 µm for articular surfaces |
| Sterility | Sterilization process validation on AM parts with actual geometry |
| Traceability | Complete from powder lot to patient (UDI — Unique Device Identifier) |
| Design Freeze | Any change to design or process → new validation |
### Pressure Vessel (ASME BPVC)
| Parameter | Criterion |
|---|---|
| Porosity | < 0.1% (equivalent to grade E weld) |
| LOF | Zero — analogous to lack of fusion in welding |
| Hydrostatic test | 1.5× MAWP for 30 min without leaks |
| NDE | 100% UT or RT (not only CT scan) |
| AM PQR | AM procedure qualification analogous to WPS/PQR for welding |
---
## 5. Nonconformance Management (NCR)
### Management process
```
Nonconforming part identified (out-of-spec dimensional, CT defect, low mechanical properties)
Immediate segregation + labeling "NONCONFORMING"
Root Cause Analysis (8D or A3)
→ Questions: is it an isolated defect or systematic?
→ Is it the powder? The process? The machine? The post-processing?
Decision (review board):
├── Scrap → documented destruction
├── Rework → only if technically feasible (machining, repair welding)
│ → rework must be re-qualified
└── Use-As-Is (UAI) → only if engineeringly justified
→ requires customer approval for regulated parts
CAPA (Corrective and Preventive Action)
→ Corrective action: eliminates the cause
→ Preventive action: prevents recurrence
Effectiveness verification (follow-up in the next build)
```
### Common errors (frequent NCR causes in AM)
| NCR Cause | Frequency | Prevention |
|---|---|---|
| Wet powder (gas porosity, balling) | High | Systematic pre-dry + humidity monitoring in storage |
| Powder beyond service life (high MFR) | Medium | Periodic MFR test; documented reuse limit |
| Drifted machine parameters (degraded laser) | Medium | Periodic laser calibration + control coupons |
| Stress relief omitted or at wrong temperature | High | Written procedures + operator checklist |
| HIP not planned in lead time | High | Include HIP in the quote and production plan from the start |
| Shrinkage not compensated in CAD | Medium | CAD template with pre-loaded compensation for each process/alloy |
| Supports in fatigue-critical zone | High | Pre-print design review with DfAM checklist |
---
## 6. Pre-Production Checklist (Qualification)
**To be completed before starting series production:**
### Machine qualification
- [ ] IQ completed and documented
- [ ] Laser/e-beam calibration within expiry
- [ ] Current preventive maintenance
### Material qualification
- [ ] Certified powder (supplier CoC)
- [ ] PSD conforming to specification (D50 target, satellites < 10%)
- [ ] N° reuses documented and within qualified limit
- [ ] Pre-dry performed (Ti: 120°C/4h | Al: 70°C/4h | Steels: 80°C/4h)
### Process qualification (OQ)
- [ ] Golden parameters documented and frozen
- [ ] Mechanical coupons (XY + Z) conforming to specifications
- [ ] Baseline porosity < acceptance limit
- [ ] CT scan of qualification coupon completed
### Part qualification (PQ / FAI)
- [ ] FAI completed on first series part
- [ ] All dimensions conforming to drawing
- [ ] CoC signed
- [ ] Complete traceability record
### Qualified post-processing
- [ ] Stress relief: T, t, atmosphere documented
- [ ] HIP: validated cycle for the alloy (T, P, t, autoclave N°)
- [ ] Heat treatment: cycle conforming to AMS/ASTM specification
- [ ] Machining: correct stock allowance, qualified tooling
- [ ] Inspection: calibrated method, certified operator
---
## 7. Useful Certifications for the Service Bureau
When selecting a service bureau for regulated parts, verify:
| Certification | Sector | What it guarantees |
|---|---|---|
| **AS9100 Rev D** | Aerospace | Compliant QMS → documented and controlled processes |
| **NADCAP AM** | Aerospace | AM-specific process qualification (machine + material + personnel) |
| **ISO 13485** | Medical | QMS for medical devices; mandatory for CE/FDA implants |
| **ISO 9001** | General | Basic QMS — insufficient for aerospace and medical |
| **ISO 17025** | Laboratory | Accredited metrology calibration and mechanical testing |
| **PED 2014/68/EU** | Pressure equipment | For production of pressure vessels in Europe |
| **ITAR registered** | US Defense | Mandatory for parts subject to US export control |
@@ -0,0 +1,250 @@
# Cost and Lead Time Model — Additive Manufacturing
> Use this file when:
> - The user asks whether AM is cost-effective compared to machining, casting or moulding
> - A cost estimate is needed for an AM part (raw + post-processing)
> - AM must be justified internally or to a customer
> - Choosing between a service bureau and in-house production
---
## 1. AM Cost Structure
**Common mistake:** comparing the raw print cost against the cost of CNC machining.
The correct comparison is the **total finished part cost**, including all post-processing.
```
Total AM part cost =
Printing (machine + gas + energy)
+ Material (powder / filament / resin)
+ Post-processing (stress relief, HIP, HT, machining, finishing, treatments)
+ Inspection (CMM, CT scan, PT)
+ Qualification (coupons, documentation, certifications)
+ Scrap/rework (to be considered as an amortised cost)
```
**Rule of thumb for metal AM with quality requirements:**
- General application: post-processing = 3050% of total cost
- Fatigue-critical application (HIP + CNC + CT): post-processing = **5070%** of total cost
- Indicative budget: final cost ≈ **35× the raw print cost** for aerospace-quality metal
---
## 2. Decision Tree: Which Process for Which Volume and Application?
### Metals
```
Volume (parts/year) + Geometry + Material
110 parts, complex geometry (undercuts, internal channels, optimised topology)
LPBF is often the only practical option
→ Ti-6Al-4V LPBF: €3002000/part (depending on size and post-processing)
→ AlSi10Mg LPBF: €150800/part
→ 316L LPBF: €120600/part
Alternative: CNC from solid — comparison in section 4
110 parts, simple geometry (turning, standard milling)
→ CNC almost always wins on cost
→ AM justified only for very short lead times or geometry that cannot be machined
10100 parts, moderate tolerances (±0.3mm acceptable)
→ Binder Jetting (316L, 17-4PH): €60300/part at 50+ parts
→ Advantages: no supports, high productivity, as-sintered finish 410 µm
→ Limitations: 20% shrinkage, not suitable for tight-tolerance geometries without post-machining
10100 parts, tight tolerances or special alloys (Ti, superalloys)
→ LPBF remains the choice
→ Consider in-house vs service bureau (section 6)
> 500 parts, simple metal
→ Investment casting: typically €2080/part at 500+ (with tooling)
→ AM wins only if: geometry cannot be cast, no tooling budget, critical lead time
```
### Polymers
```
150 parts, complex geometry / no critical supports
→ SLS PA12: €2580/part (includes breakout and bead blast)
→ MJF PA12: €2060/part (higher throughput, better finish)
→ FDM technical material (PEEK, PC, PA): €1050/part (simple geometries only)
→ SLA/DLP resin: €1560/part (high accuracy, Ra < 3 µm, non-structural)
50500 parts, standard polymer
→ SLS/MJF drop to €1030/part with optimised nesting
→ In-house FDM can drop to €315/part (excluding machine amortisation)
> 5001000 parts, standard geometry
→ Injection moulding wins on variable cost (€15/part in series)
→ Tooling: €5,00050,000 per mould (recovered over 5005,000 parts)
→ AM still preferable if: high customisation, geometry with undercuts, short run
> 1000 parts, AM still justified if:
→ Per-unit customisation (orthoses, implants, personalised products)
→ TPMS / lattice geometry not producible with IM
→ Large components that do not fit in a mould
```
---
## 3. Post-Processing Cost Breakdown
| Operation | Indicative cost | Time | Notes |
|---|---|---|---|
| **Stress Relief** (furnace) | €50200/batch | 28 hours | Amortised over batch — low cost/part |
| **HIP** | €5002,000/batch | 48 hours + scheduling | €20200/part in batch; 24 week wait from service |
| **Specific Heat Treatment** (aging, solution annealing) | €100400/batch | 124 hours (cycle-dependent) | Often performed together with stress relief for non-critical alloys |
| **CNC Machining** (critical surfaces) | €50300/hour machine | 18 hours/part | Dominant cost for complex geometries |
| **Bead Blast** | €520/part | 1530 min | Almost always included in bureau service |
| **Vibratory Finishing** | €1040/part/batch | 14 hours | Economical, not applicable to delicate features |
| **Electropolishing** | €30100/part | 3090 min | Stainless steels and CoCr only |
| **Anodising (Al)** | €530/part | 3060 min | In batch — low cost |
| **CT Scan** | €200800/part | 24 hours | 50µm voxel on 100mm part |
| **CMM (dimensional inspection)** | €100400/part | 13 hours | Before CT if destructive |
| **Dye Penetrant (PT)** | €2080/part | 12 hours | For external surfaces — fast |
| **Tensile coupon (same build plate)** | €3080/coupon | — | Mandatory for qualification |
| **Documentation / CoC** | €50200/batch | — | Required for aerospace, medical |
**Total cost example: Ti-6Al-4V LPBF, 10 parts, aerospace application**
- Print: €400/part × 10 = €4,000
- Stress Relief + HIP: €1,500/batch ÷ 10 = €150/part
- HT (aging not required for annealed Ti): €0
- CNC machining of critical surfaces: €200/part × 10 = €2,000
- CT scan: €400/part × 10 = €4,000
- CMM: €200/part × 10 = €2,000
- PT: €40/part × 10 = €400
- Coupons + documentation: €500/batch
- **Total: ~€140/part raw + ~€1,090/part post-processing = €1,230/part finished**
- Post-processing = 88% of total cost — typical for high quality
---
## 4. Break-Even: AM vs CNC Machining vs Casting
### AM vs CNC from Solid (Buy-to-Fly Ratio)
```
AM is preferable to CNC when:
✓ Buy-to-fly ratio > 5:1 (e.g. machining Ti from solid → 80% waste)
✓ CNC setup > 4 hours (geometries with many faces, repositioning)
✓ Internal geometry unreachable (conformal channels, optimised topology)
✓ Quantity < 10 parts (no CNC setup amortisation)
CNC is preferable to AM when:
✓ Simple geometry (prismatic, rotational)
✓ Tolerances < ±0.05mm on many surfaces (CNC more accurate as-process)
✓ Quantity > 50100 parts of standard geometry
✓ Material cannot be sintered/printed (hard ceramics, WC-Co)
```
**Rule of thumb:** if the CNC quote exceeds €500/part for a complex geometry
with undercuts or internal channels, AM is likely competitive.
### AM vs Investment Casting
```
AM is preferable to investment casting when:
✓ Quantity < 50100 parts (tooling cost not recoverable: €5,00030,000 per mould)
✓ Geometry too complex to extract the mould
✓ Lead time: casting requires 816 weeks for tooling; AM 14 weeks
✓ Frequent design iterations (each modification ≡ new mould in casting)
Casting is preferable to AM when:
✓ Quantity > 200500 parts/year
✓ Alloys not available in powder form (some foundry alloys)
✓ Large parts (> 500mm) where AM exceeds the build volume
```
### AM vs Injection Moulding (polymers)
| Quantity | AM cost (SLS PA12) | IM cost (PA6/PA12) | Winner |
|---|---|---|---|
| 10 parts | €300600 | €5,00050,000 (tooling) | AM |
| 100 parts | €2,0005,000 | €5,00052,000 (tooling + production) | AM |
| 500 parts | €10,00020,000 | €6,00055,000 | Break-even zone |
| 1,000 parts | €20,00040,000 | €7,00058,000 | IM starts to win |
| 5,000 parts | €100,000+ | €15,00070,000 | IM wins clearly |
Note: IM loses its advantage for geometries with undercuts (add side actions: +€3,00015,000/mould).
---
## 5. Lead Time Model
### Polymers (SLS / MJF / FDM)
| Phase | Duration |
|---|---|
| SLS/MJF print | 824 hours (fill-dependent) |
| Breakout + cleaning | 24 hours |
| Bead blast / finishing | 24 hours |
| **Total SLS/MJF (service bureau)** | **13 working days** |
| In-house FDM | 212 hours/part |
### Metals (LPBF — standard application)
| Phase | Duration |
|---|---|
| Setup + nesting | 24 hours |
| LPBF print | 424 hours |
| Stress relief (on build plate) | 48 hours |
| Build plate removal + supports | 28 hours |
| Finishing (bead blast) | 12 hours |
| CMM / basic inspection | 12 days |
| **Total standard LPBF** | **37 working days** |
### Metals (LPBF — aerospace/biomedical application)
| Phase | Duration |
|---|---|
| Print + stress relief | 12 days |
| HIP (external service) | **24 weeks** (scheduling-dominant) |
| Post-HIP heat treatment | 13 days |
| CNC machining | 25 days |
| CT scan (external) | 13 days |
| CMM + PT + documentation | 13 days |
| **Total LPBF aerospace quality** | **48 weeks** |
**The bottleneck is almost always HIP** — schedule in advance if lead time is critical.
Alternative: in-house HIP (investment €500,0002,000,000 for autoclave) or select
a service bureau with integrated HIP to reduce by 12 weeks.
---
## 6. Service Bureau vs In-House: When Does Each Make Sense?
### In-House AM makes sense when:
- Volume > 2 builds/week on a continuous basis
- IP confidentiality is critical (no files sent to third parties)
- Rapid development iterations (prototyping < 24h)
- Need for full control over parameters and qualification
**In-house entry costs:**
- Professional FDM (Markforged, Bambu X1E): €3,00015,000
- SLS/MJF (Formlabs, HP): €30,000100,000
- Entry-level LPBF (EOS, SLM, Trumpf): €300,000800,000
- Hidden costs: powder ($50200/kg), inert gas, maintenance, qualified operator
### Service Bureau makes sense when:
- < 12 builds/week (machine not cost-recoverable)
- Special alloys (Scalmalloy, Inconel, CoCr) not available in-house
- Documented qualification required (AS9100, ISO 13485 — the bureau already holds certification)
- Large parts (build volume > in-house machine)
- No appetite for training and maintenance investment
---
## 7. Questions to Ask Before Providing a Cost Estimate
If the user requests a cost estimate, gather:
1. **Process and material** (already defined in Phase 2)
2. **Quantity** (1 / 10 / 100 / 1000+)
3. **Part dimensions** (X×Y×Z mm) — directly impacts machine time
4. **Finish requirements** — as-built, bead blast, CNC, electropolish?
5. **Inspection required** — visual, CMM, CT scan?
6. **Certifications required** — AS9100, ISO 13485, simple CoM (Certificate of Manufacture)?
7. **Are there alternatives** (machining, casting) to compare against?
Without this data, any estimate is too vague to be useful.
@@ -0,0 +1,192 @@
# Defect Atlas in Additive Manufacturing
> Use this file when:
> - A defect is suspected on an already-printed part
> - Designing the inspection/quality plan
> - Preventing defects during the design or setup phase
> - Defining acceptance criteria for the specific application
---
## 1. LPBF / DMLS Defect Catalog
| Defect | Morphology | Primary cause | Process signature | Primary detection | Fatigue impact (Kf) |
|---|---|---|---|---|---|
| **Lack of Fusion (LOF)** | Irregular, planar, parallel to layer lines | VED too low, insufficient hatch overlap, powder contamination | Visible layers in cross-section, worsened Ra | CT scan (mandatory), metallography | **310** — acts as a planar crack |
| **Keyhole Porosity** | Spherical or elongated, at uniform depth | VED too high, metal evaporation with cavity collapse | Concentrated at scan edges, at reversal points | CT scan | **1.52.5** |
| **Gas Porosity** | Spherical, < 50 µm, uniform distribution | Gas trapped in powder or moisture, impure shielding gas | Random uniform distribution | CT scan, X-ray, Archimedes density | Mild if < 100 µm; **1.21.5** |
| **Solidification Cracking** | Intergranular, along columnar grain boundaries | High solidification range, steep thermal gradient | IN718, high-C steels; high-restraint zones | Metallography, PT | **Severe** — propagates under cycling |
| **Hot Tearing** | Intergranular, similar to solidification cracking | High restraint + high gradient | Thick zones near thin features | PT, metallography | **Severe** |
| **Balling** | Metal spheres on surface, very high Ra | Melt pool oxidation, high surface tension, scan speed too high | Irregular visible surface, Ra > 40 µm | Visual, profilometry | Moderate: high Ra → Kf 1.53.0 |
| **Delamination** | Planar crack between layers, on millimeter scale | Insufficient interlayer bonding, contamination, P too low | Separated layers in cross-section | Visual (if superficial), CT scan, UT | **Catastrophic** — equivalent to LOF at macro scale |
| **Residual Stress Cracking** | Transgranular, near supports or build plate | High thermal gradient without stress relief, high restraint | Cracking during/immediately after printing | Visual during build, PT post-removal | Catastrophic if during build |
### VED (Volumetric Energy Density) Thresholds and LPBF Defects
VED = P / (v × h × t) [J/mm³]
| VED | Prevalent defect | Material |
|---|---|---|
| < 40 J/mm³ | LOF | All |
| 4090 J/mm³ | Optimal window | Alloy-dependent |
| > 90 J/mm³ | Keyhole porosity | Ti, IN, steels |
| > 120 J/mm³ | Evaporation, balling, cracking | All |
---
## 2. Defects by Process and Material
### LPBF — Prevalence by Alloy
| Alloy | Primary defects | Secondary defects | Key preventive action |
|---|---|---|---|
| **Ti-6Al-4V** | Keyhole porosity (high VED), residual stress cracking | LOF (low VED) | Validate VED 5575 J/mm³; mandatory stress relief on build plate |
| **AlSi10Mg** | Gas porosity (powder moisture), balling (oxidation) | Warping/delamination without enclosure | Pre-dry powder 70°C/4h; verify O₂ < 500 ppm in chamber |
| **316L** | LOF (most common defect) | Gas porosity (low impact) | Optimize hatch overlap (3040%) |
| **17-4PH** | LOF, hot cracking (rare) | Residual stress cracking if no stress relief | Stress relief 325°C before removing from plate |
| **IN718** | Solidification cracking in high-restraint zones | LOF at scan edges | Island scan strategy; geometries without abrupt restraint |
| **IN625** | Gas porosity, LOF | Solidification cracking (rare) | Validate with coupons before production |
| **CoCr** | Gas porosity, balling | — | Strict oxygen control; moderate scan speed |
### SLS / MJF — Polymers
| Defect | Cause | Detection | Impact |
|---|---|---|---|
| **Layer delamination** | Cold chamber (ΔT > 5°C from window), underheating | Visual, cross-section | Severe structural |
| **Surface porosity / graininess** | Degraded recycled powder (increased MFR) | Profilometry, visual | Worsened Ra |
| **Warping / distortion** | Non-uniform cooling, part too thin in Z | CMM, visual post-removal | Out of tolerance |
| **Neck failure (filament necking)** | Over-recycled powder → reduced coalescence | Cross-section, density | Reduced mechanical properties |
**SLS recycled powder:** after 58 cycles, PA12 shows increased MFR (+2040%) and reduced
elongation at break (1530%). Monitor with MFR testing for critical lots.
### FDM / FFF
| Defect | Cause | Detection |
|---|---|---|
| **Layer delamination** | Low extrusion temperature, high speed, excessive cooling on layer | Cross-section, manual bending |
| **Void from under-extrusion** | Excessive retraction, partial nozzle clog | Visual (grid visible), cross-section |
| **Warping** | Poor bed adhesion, no enclosure for ABS/PA | Visual during printing |
| **Stringing / blobs** | Uncalibrated retraction | Visual surface |
| **Delamination in Z from moisture** | Wet filament (PA, PC) → bubbles in extrusion | Audio crackling + surface bubbles |
### Binder Jetting — Post-Sintering
| Defect | Cause | Criticality |
|---|---|---|
| **Non-uniform shrinkage** | Green density variations, non-uniform sintering in thick/thin sections | High — tolerances missed |
| **Slumping** | Gravity during sintering without support | High for long horizontal features |
| **Cracking during debinding** | Too-fast temperature ramp, incompatible binder | Part rejection |
| **Incomplete pore closure** | Sintering temperature too low, insufficient time | Residual porosity > 2% |
---
## 3. Acceptance Criteria by Application
### AM Metals (LPBF/EBM)
| Application | Max total porosity | LOF defects | Max spherical defects | Required inspection |
|---|---|---|---|---|
| **Non-structural prototype** | < 2% | Accepted | — | Visual + CMM |
| **Static structural** | < 0.5% | < 0.5mm in non-critical zone | < 0.3mm | X-ray or UT + CMM |
| **Fatigue-critical** | < 0.05% (post-HIP) | **None** in load path | < 0.1mm | Mandatory CT scan + CMM + PT |
| **Pressure vessel** | < 0.1% | **None** | < 0.15mm | CT scan + hydrostatic + CMM |
| **Biomedical implant** | < 0.05% (post-HIP) | **None** | < 0.1mm | CT scan + CMM + hardness map |
| **Aerospace (AS9100)** | < 0.05% | **None** in critical zone | < 0.1mm | CT scan (100%) + FPI + coupon same plate |
**Definition of "critical zone":** any zone subject to σ_max > 0.3 × UTS, or with Kt > 1.5,
or within 2mm of a maximum stress surface.
### LOF: Absolute Rule
**An LOF defect identified by CT scan in a load zone = REJECT THE PART.**
No waivers exist for fatigue-critical applications.
Reason: LOF is planar and parallel to the build layer → acts as a pre-existing crack (Kf 310).
HIP does not close LOF defects — HIP only closes spherical porosity (gas, keyhole).
---
## 4. Prevention Strategies
### Prevention for LOF
- Validate VED with coupons before production (optimal VED: 5080 J/mm³ for most alloys)
- Hatch overlap 3040% (not < 20%)
- Verify powder flowability before each lot (Hausner ratio < 1.25)
- Wet powder → mandatory pre-dry (Ti: 120°C/4h; Al: 70°C/4h; steels: 80°C/4h)
### Prevention for Keyhole Porosity
- Do not exceed validated VED_max for the alloy (document the window)
- Reduce P or increase v at platform edges (boundary compensation)
- Monitor in-process with melt pool monitoring if available
### Prevention for Gas Porosity
- Systematic powder pre-drying
- Verify gas purity: O₂ < 100 ppm for Ti, < 500 ppm for Al and steels
- Verify powder morphology: satellite > 10% → increased risk of trapped gas
### Prevention for Residual Stress Cracking
- Stress relief on build plate BEFORE removal (see `references/post-processing.md`)
- Island scan strategy (island scanning, 5×5mm or 7×7mm) to reduce peak gradient
- Scan angle rotation 67°/layer
- For IN718/IN625: avoid geometries with high restraint (thicknesses changing abruptly by factor > 5×)
---
## 5. Inspection Plan Selection Logic
```
Define the criticality level of the component:
Visual prototype / non-structural
→ Visual + CMM (dimensional)
Structural, static loads, non-life-critical
→ CMM + hardness after HT + X-ray spot check
→ Tensile coupon if first lot (same build plate)
Structural, cyclic loads (HCF)
→ Industrial CT scan (voxel ≤ 50 µm for parts < 100mm)
→ CMM of critical surfaces
→ Dye penetrant (PT) external surfaces
→ Tensile + fatigue coupons same build plate (process qualification)
Pressure vessel / aerospace / biomedical implant
→ CT scan 100% of parts (not sampling)
→ FPI (Fluorescent Penetrant Inspection) — ASTM E1417 Level 2
→ UT (Ultrasonic Testing) if geometry allows
→ Full CMM
→ Metallographic analysis on coupons
→ Hardness mapping post-HT
→ Documented traceability: powder lot + build file + machine ID + operator
```
### Recommended CT Scan Parameters
| Part size | Recommended voxel size | Minimum detectable defect |
|---|---|---|
| < 50 mm | ≤ 25 µm | LOF > 0.05mm, pores > 0.05mm |
| 50150 mm | 5075 µm | LOF > 0.15mm, pores > 0.15mm |
| 150400 mm | 100150 µm | LOF > 0.3mm, pores > 0.3mm |
| > 400 mm | Consider UT + X-ray | CT may not be sufficient |
---
## 6. Defects: What HIP Can and Cannot Fix
| Defect type | Does HIP close it? | Notes |
|---|---|---|
| Spherical gas porosity (< 100 µm) | **YES** | Isostatic pressure closes the spheres |
| Keyhole porosity (spherical/elongated) | **YES** (partially if < 200 µm) | Highly elongated geometries resist |
| Lack of Fusion (LOF) | **NO** | Planar and oxidized → does not close |
| Solidification cracking | **NO** | Oxidized, intergranular → does not close |
| Hot tearing | **NO** | See above |
| Macro delamination | **NO** | Too large in scale |
| Residual stress | YES (drastically reduced) | σ_res → nearly zero after HIP |
**Operational conclusion:** HIP is essential for closing spherical porosity and reducing residual stresses.
It is not a solution for planar defects (LOF, cracking). Post-HIP CT scan is mandatory
to confirm porosity closure.
@@ -0,0 +1,277 @@
# DfAM Guidelines — Design for Additive Manufacturing
## Universal Rules
### Part Orientation
Orientation is the most impactful decision in AM. Consider:
1. **Mechanical strength:** The XY plane is always stronger than the Z direction (layer-by-layer build)
- FDM: Z/XY difference can be 4060% for UTS
- LPBF: anisotropy ~1020%
- SLS/MJF: nearly isotropic (<10% difference)
2. **Surface finish:** Surfaces parallel to the build plane (top surface) are smoother
3. **Supports:** Minimize by orienting critical surfaces upward or reducing overhangs
4. **Distortion:** Prevent warping by orienting long axes in XY, not in Z
### Overhangs and Support Angles
| Process | Limit angle without support | Notes |
|---|---|---|
| FDM | 45° from vertical | Depends on material and cooling |
| SLA/DLP | 45° from vertical | Supports also required for floating islands |
| SLS/MJF | No structural limit | Powder acts as support |
| LPBF | 45° — below requires support | Metal supports are difficult to remove |
| EBM | ~35° | Better metallostatic behaviour than LPBF |
### Minimum Wall Thicknesses
| Process | Min. wall (mm) | Min. feature (mm) |
|---|---|---|
| FDM (0.4mm nozzle) | 0.81.2 | 0.4 (XY planes only) |
| FDM (0.6mm nozzle) | 1.21.6 | 0.6 |
| SLA/DLP | 0.20.5 | 0.2 |
| SLS | 0.71.0 | 0.6 |
| MJF | 0.50.8 | 0.5 |
| LPBF | 0.30.4 | 0.2 |
| Binder Jetting | 1.01.5 | 0.8 |
---
## Guidelines for Specific Features
### Holes
- **Vertical holes (Z-axis, FDM):** Accurate, tolerance ±0.10.2mm
- **Horizontal holes (FDM):**
- ≤ ø5mm: printable without support (deform into ellipse, ~510%)
- > ø5mm: require support or teardrop profile
- **Teardrop profile:** Modifies the upper cross-section to a point — eliminates supports for horizontal holes
- **Post-drilling:** For tight tolerances (H7/H8), always plan for reaming/drilling post-AM
- **Threads:** M3+ printable in SLS/LPBF; FDM → metal heat-set inserts are far more reliable
### Radii and Fillets
- **Internal fillets:** ≥ 0.5mm (SLA), ≥ 1.0mm (FDM), ≥ 0.5mm (SLS/LPBF)
- **Sharp edges:** Avoid for AM metal parts — stress concentrators + process difficulty
- **Rule of thumb:** R_internal ≥ wall thickness
### Internal Cavities and Channels
- **Lattice geometries:** SLS, MJF, LPBF only — FDM requires planning for internal supports
- **Conformal cooling channels (tooling):** Ideal application for LPBF
- Minimum channel diameter: ≥ ø1.5mm (LPBF), ≥ ø3mm (Binder Jetting post-sinter)
- Avoid horizontal channels > ø8mm without teardrop profile (LPBF)
- **Powder entrapment (SLS/MJF):** Provide powder escape holes ≥ ø5mm for closed cavities
### Text and Embossing
- **Engraved/embossed text:** Min. height 1.5mm (FDM/SLS), 0.5mm (SLA)
- **Orientation:** Always on XY plane for optimal readability
---
## Anisotropy and Directional Orientation
Anisotropy is the most overlooked property in AM: the part is not isotropic. Strength, fatigue
and ductility depend on the direction relative to the XY build plane.
### Anisotropy factors by process (UTS_Z / UTS_XY)
| Process / Material | Z/XY factor (as-built) | Post-HIP | Note |
|---|---|---|---|
| **FDM PLA/ABS/PETG** | 0.400.60 | n/a | Layer bonding is the weak point — avoid loading in Z if possible |
| **FDM PA12/PC** | 0.500.65 | n/a | Heated chamber improves but does not eliminate anisotropy |
| **FDM PEEK** | 0.600.75 | n/a | Heated chamber ≥ 90°C improves significantly |
| **SLS PA12** | 0.901.00 | n/a | Nearly isotropic — main advantage over FDM |
| **MJF PA12** | 0.880.98 | n/a | Slightly worse than SLS on top surfaces |
| **LPBF Ti-6Al-4V** | 0.800.92 | 0.951.00 | HIP practically eliminates anisotropy |
| **LPBF AlSi10Mg** | 0.700.85 | 0.900.98 | More anisotropic than Ti; HIP important |
| **LPBF 316L** | 0.800.95 | 0.951.00 | Ductile → anisotropy less critical |
| **LPBF 17-4PH** | 0.750.90 | n.d. | Depends on post-HIP aging |
| **LPBF IN718** | 0.750.88 | n.d. | |
| **EBM Ti-6Al-4V** | 0.900.98 | — | Preheated chamber → greatly reduced anisotropy |
### Orientation rules for known loads
```
Known primary load → orient so that σ_max lies IN THE XY PLANE
Axial tension on cylindrical rod:
Rod axis → horizontal (in XY plane)
Cross-section → parallel to XY plane
Bending on beam:
Neutral axis → in XY plane
Maximum tension and compression fibres → in XY plane
Torsion on shaft:
Axis of rotation → in XY plane
Maximum shear stresses act on XY cross-sections
Biaxial load (plate):
Plate → parallel to XY plane
Both load directions in XY → optimal
```
### When optimal orientation is not possible
1. Complex geometry → Z-direction inevitably loaded
2. Action: for metals, **HIP mandatory** → reduces anisotropy to < 5%
3. For polymers (FDM): change process → SLS PA12 (anisotropy < 10%)
4. For fatigue in Z direction: see `references/fatigue-design.md` section 2C for knockdown factors
### Fatigue anisotropy — quick summary
| Scenario | Z/XY fatigue factor as-built | With HIP |
|---|---|---|
| LPBF Ti-6Al-4V | 0.600.75 | 0.920.98 |
| LPBF AlSi10Mg | 0.550.70 | 0.850.95 |
| FDM PLA (R=0.1) | 0.250.40 | n/a |
| SLS PA12 | 0.881.00 | n/a |
**Absolute rule:** do not use FDM for fatigue-critical components loaded in the Z direction.
---
## Tolerance Stack-Up in AM
Tolerance stack-up in AM is managed differently from conventional manufacturing: each process introduces
systematic errors (shrinkage, warping) that add to process tolerances.
### Typical dimensional errors by process
| Process | Systematic error | Random error (±) | Main cause |
|---|---|---|---|
| **FDM** | 0.1 to 0.5% (shrinkage) | ±0.3 mm | Warping, layer shift, thermal |
| **SLA/DLP** | 0.1 to 0.3% | ±0.15 mm | Curing shrinkage, peel force |
| **SLS PA12** | 3.0 to 4.0% XY, 3.5 to 4.5% Z | ±0.3 mm | Sintering shrinkage |
| **MJF PA12** | 2.5 to 3.5% | ±0.25 mm | Similar to SLS |
| **LPBF** | 0.2 to 0.5% | ±0.1 mm | Solidification shrinkage |
| **EBM** | 0.2 to 0.4% | ±0.2 mm | |
| **Binder Jetting** | 18 to 22% linear | ±0.4 mm | Sintering shrinkage |
### Stack-up on multi-part AM assemblies
When multiple AM parts are assembled, errors accumulate in worst-case or RSS:
```
Minimum clearance on assembly = Nominal clearance Σ(component tolerances)
Example: LPBF flange (±0.1mm) + gasket + LPBF cover (±0.1mm)
Total clearance required for guaranteed fit: 0.2mm + safety margin
Rule of thumb: for functional fit on AM-AM assembly → clearance ≥ 0.5mm (LPBF)
for AM + machined assembly → clearance ≥ 0.2mm (LPBF vs CNC)
```
### Critical surfaces: stock allowance strategy
For surfaces requiring H7/h6 tolerances, precision fits, bearing seats:
```
1. Design in CAD with stock allowance: +0.3mm on all surfaces to be machined
2. Print with stock allowance
3. Stress relief + HIP (if planned) — HIP modifies dimensions by ±0.050.2mm
4. Post-machining to nominal CAD dimensions (CNC, reaming, grinding)
5. Final CMM inspection
DO NOT attempt to achieve H7 tolerances as-built in AM — it is not reliable.
```
### Internal threads: compensation standards
| Process | Recommended approach |
|---|---|
| FDM, SLS, MJF | Print undersized (0.3mm) + tap post-print for M6+ threads |
| LPBF | Print hole +0.30.5mm undersized + tap or ream |
| M3 and smaller threads (FDM) | Heat-set inserts (e.g. Ruthex, CNC Kitchen) — more reliable |
| M3 and smaller threads (SLS/LPBF) | Printable if parameters are optimised, verify with first part |
---
## Topology Optimization and Consolidation
### When to apply topology optimization
- Structural parts in metal AM where weight is critical
- Brackets, supports, aero/automotive components
- Tools: nTopology, Altair Inspire, Ansys Discovery, SolidWorks Simulation, Fusion 360 Generative Design
### Guidelines for optimised topology
- Enforce minimum thickness = 2× minimum thickness of the process
- Set overhang angle as a constraint in the solver
- Final smoothing mandatory (optimised meshes create stress concentrations)
- Verify manufacturability with AM-aware tool in the solver
### Component Consolidation (Assembly Consolidation)
**Typical opportunities:**
- Bolted joints → single-piece geometries in SLS or metal AM
- Hydraulic/pneumatic ducting with fittings → monolithic body with internal channels
- Hollow structures (sandwich) → integrated lattice
**Decision rule:** If assembly cost + tolerances + gaskets > AM cost of the consolidated part → consolidate
---
## Tolerances and Compensations
### Shrinkage compensations (to be applied in CAD or in print software)
| Process | Typical shrinkage |
|---|---|
| FDM | 0.10.5% (material-dependent) |
| SLS PA12 | 3.04.0% XY, 3.54.5% Z |
| SLS PA11 | 2.53.5% |
| LPBF AlSi10Mg | 0.30.5% |
| LPBF Ti-6Al-4V | 0.20.4% |
| LPBF 316L | 0.20.3% |
| Binder Jetting (metals) | 1822% (sintering) |
| SLA/DLP resins | 0.10.3% |
### Fits and Mating
- **Clearance fit (moving):** Add 0.30.5mm per side (FDM), 0.150.25mm (SLS), 0.050.1mm (LPBF after machining)
- **Press fit / interference:** Prefer post-machining for H7/p6 or tighter tolerances
- **Snap fit:** Design with SLS PA12 or TPU; avoid PLA (brittle under cyclic fatigue)
---
## Post-Processing Decision Tree
```
Printed part
├── Metals (LPBF/EBM)
│ ├── Stress relief → ALWAYS (before support removal)
│ ├── HIP → if critical application or biomedical
│ ├── Heat treatment → if required (e.g. 17-4PH H900, IN718 aging)
│ ├── Support removal → manual + machining
│ ├── Surface finishing → shot peening, vibratory, EDM, polish
│ └── Inspection → CT scan for critical parts, UT, HV mapping
├── Metals (Binder Jetting)
│ ├── Debinding (solvent/catalytic/thermal)
│ ├── Sintering (specialised furnace)
│ └── HIP optional → if critical
├── SLS/MJF Polymer
│ ├── Blasting (glass/sand) → standard for uniform finish
│ ├── Dyeing → uniform colouring (black or colours)
│ ├── Vibratory finishing → improved Ra
│ ├── SLS coating (e.g. Ceracoat) → waterproofing
│ └── Epoxy impregnation → alternative waterproofing
├── SLA/DLP Resin
│ ├── IPA wash (1015 min) → MANDATORY
│ ├── UV post-curing → MANDATORY (9001200 mJ/cm²)
│ └── Support removal → before or after curing (resin-dependent)
└── FDM
├── Support removal (mechanical or soluble if dual extrusion)
├── Sanding + primer → for painting
├── Acetone smoothing → ABS only (changes dimensions ~0.10.3mm)
└── Heat-set inserts → for reliable threads (M3+)
```
---
## Pre-print Checklist
- [ ] Minimum thicknesses met for the chosen process?
- [ ] Overhang angles within limits (or supports planned)?
- [ ] Horizontal holes: teardrop or support?
- [ ] Closed cavities with powder escape holes (SLS/MJF)?
- [ ] Shrinkage compensated in CAD?
- [ ] Internal fillets ≥ process minimum?
- [ ] Orientation optimised (strength + finish)?
- [ ] Post-processing defined and included in cost?
- [ ] Critical tolerances reserved for post-machining?
@@ -0,0 +1,261 @@
# Fatigue Design for Additive Manufacturing
> Use this file whenever the component is subject to cyclic loads, vibrations,
> repeated impacts, or when the application is fatigue-critical (aerospace, biomedical,
> structural automotive, pressure vessel, moving mechanisms).
>
> **Static UTS strength alone is not sufficient to evaluate an AM part under cyclic loading.**
---
## 1. When Fatigue Governs
```
Is the component subject to cyclic loads?
├── NO → static design with FS ≥ 2.0 on UTS. Done.
└── YES → how many cycles?
├── N < 10^3 cycles (extreme LCF)
│ └── Use UTS with FS ≥ 1.52.0. Verify plastic deformation.
├── 10^3 < N < 10^4 cycles (LCF)
│ └── Use σ_LCF ≈ 0.70.9 × UTS. FS ≥ 1.5.
└── N > 10^4 cycles (HCF — the critical case)
└── Use S-N data (section 3) + knockdown factors (section 2).
The fatigue limit may be 3060% of the UTS value.
```
**Questions to ask the designer before proceeding:**
- Expected total cycles (10^5, 10^6, 10^7)?
- Stress ratio R = σ_min / σ_max (typical: R = 0.1 pulsating, R = -1 fully reversed)?
- Will the fatigue-critical surface be machined or remain as-built?
- Is HIP planned?
---
## 2. Knockdown Factors for AM
### 2A — Kf from Surface Roughness (Ra)
The as-built roughness of AM parts is much higher than forged — surface valleys
act as notches and drastically reduce fatigue life.
| Ra (µm) | Typical condition | Kf (Ti-6Al-4V) | Kf (AM steels) | Kf (AlSi10Mg) |
|---|---|---|---|---|
| 2035 | LPBF as-built (side) | 1.82.5 | 1.62.2 | 1.52.0 |
| 820 | LPBF as-built (top XY) | 1.41.8 | 1.31.7 | 1.31.6 |
| 612 | Bead blast post LPBF | 1.31.6 | 1.21.5 | 1.21.4 |
| 36 | Vibratory finishing | 1.11.3 | 1.11.3 | 1.11.2 |
| 0.83 | Electropolishing / SLA | 1.051.15 | 1.01.1 | 1.01.1 |
| 0.40.8 | CNC machining | 1.01.05 | 1.01.05 | 1.01.05 |
| < 0.4 | Grinding / lapping | 1.0 | 1.0 | 1.0 |
**Effective fatigue limit = baseline S-N / Kf**
Example: Ti-6Al-4V LPBF as-built side (Ra 20µm, Kf 2.2):
effective fatigue limit = 260 MPa / 2.2 = **118 MPa** — vs. 620 MPa for forged.
### 2B — Knockdown from Porosity
For every 0.1% of pore volume (measured by CT scan or Archimedes):
- Fatigue life reduction: **5 to 8%** (LPBF metals, Ti and Al)
- Acceptance thresholds:
- Porosity < 0.05%: acceptable for fatigue with HIP
- Porosity 0.050.5%: acceptable only for non-fatigue-critical applications
- Porosity > 0.5%: **not suitable for cyclic loading** — mandatory HIP required or reject
HIP closes spherical porosity (gas, keyhole) → reduces porosity from typical 0.30.5% to < 0.05%.
HIP does NOT close planar LOF (lack of fusion) — these remain as cracks.
### 2C — Directional Anisotropy (Fatigue)
| Process/Material | Fatigue Z/XY as-built | Fatigue Z/XY post-HIP |
|---|---|---|
| LPBF Ti-6Al-4V | 0.600.75 | 0.920.98 |
| LPBF AlSi10Mg | 0.550.70 | 0.850.95 |
| LPBF 316L | 0.700.85 | 0.920.98 |
| LPBF 17-4PH | 0.700.80 | n.d. |
| LPBF IN718 | 0.650.80 | n.d. |
| SLS PA12 | 0.901.00 | n/a |
| FDM PA12 (0°/90°) | 0.350.55 | n/a |
**Rule:** orient the primary cyclic loading plane (σ_max) in the XY direction.
In fatigue-critical zones, the load must be **perpendicular** to the layer lines, not parallel.
### 2D — Effect of HIP on Fatigue
HIP (Hot Isostatic Pressing) is the most effective treatment for improving fatigue life in AM metals:
- Closes spherical porosity → eliminates the primary internal crack initiator
- Reduces Z/XY anisotropy → from 0.60.75 to 0.920.98 for Ti
- Modifies microstructure → improves ductility but may reduce UTS if not followed by aging
Fatigue life improvement post-HIP (relative to as-built):
- Ti-6Al-4V LPBF: **+50100%** in terms of cycles to failure
- AlSi10Mg LPBF: **+3060%**
---
## 3. Baseline S-N Data (R = 0.1, HCF at 10^7 cycles)
> These are representative ranges from the literature. Inter-lot variability ±1520%.
> For critical applications: require testing on coupons from the same lot/build plate.
### LPBF Metals
| Material / Condition | Fatigue limit @ 10^7 cycles (MPa) | Notes |
|---|---|---|
| **Ti-6Al-4V LPBF as-built** | 200320 | High scatter; Ra 1525 µm side |
| **Ti-6Al-4V LPBF HIP + machined** | 400550 | Close to forged |
| **Ti-6Al-4V forged (reference)** | 620700 | Benchmark |
| **AlSi10Mg LPBF as-built** | 90130 | Very sensitive to orientation |
| **AlSi10Mg LPBF HIP + T6-equiv.** | 120170 | +30% vs. as-built |
| **AlSi10Mg forged 6061-T6 (ref.)** | 95110 | AM comparable with HIP |
| **316L LPBF as-built** | 180220 | Good relative to forged |
| **316L LPBF HIP** | 220260 | |
| **316L forged (reference)** | 200240 | AM as-built nearly comparable |
| **17-4PH LPBF H900** | 350430 | Only after mandatory aging |
| **17-4PH forged H900 (ref.)** | 400500 | |
| **IN625 LPBF** | 280380 | |
| **IN718 LPBF (full HT)** | 350450 | Mandatory double aging |
| **CoCr LPBF (biomedical)** | 500600 | Excellent for implants |
### AM Polymers
| Material / Condition | Fatigue limit @ 10^6 cycles (MPa) | Notes |
|---|---|---|
| **PA12 SLS** | 1825 | R = 0.1; sensitive to moisture |
| **PA12 FDM (0°)** | 1218 | Layer bonding is the weak link |
| **PETG FDM** | 1016 | |
| **ABS FDM** | 814 | Highly anisotropic in Z |
| **PEEK FDM** | 2540 | Only with heated chamber, correct orientation |
### Mean Stress Correction (Goodman)
For R ≠ 0.1, correct using the modified Goodman relation:
σ_a / σ_fl + σ_m / UTS = 1
Where: σ_a = alternating amplitude, σ_m = mean stress, σ_fl = fatigue limit (from table).
---
## 4. Shot Peening and Surface Treatments
### Shot peening benefit (quantitative)
Shot peening introduces compressive residual stresses at the surface that oppose
the propagation of fatigue cracks.
| Material | Fatigue limit improvement | Introduced σ_residual |
|---|---|---|
| Ti-6Al-4V AM | +2040% | 400 to 700 MPa |
| AlSi10Mg AM | +1525% | 200 to 400 MPa |
| 316L / 17-4PH AM | +1530% | 300 to 500 MPa |
| PA12 SLS | not applicable | — |
Reference standard: **AMS 2430** (aerospace); Almen intensity A8A12 for Ti.
**Deep Rolling** (for cylindrical features: shafts, pins, fillets):
- σ_residual: 600 to 900 MPa (deeper than shot peening)
- Fatigue improvement: +3050%
- Requires machine tool access; not applicable to complex geometries
### Correct Sequence (DO NOT deviate)
```
AM Print
Stress Relief (mandatory before removing from build plate for metals)
HIP (if fatigue-critical)
Specific Heat Treatment (aging 17-4PH, double aging IN718, etc.)
Support Removal
CNC Machining of critical surfaces (after HIP — HIP modifies dimensions ±0.050.2%)
Shot Peening (ALWAYS AFTER all heat treatments)
Final Inspection (CT scan + CMM)
```
**CRITICAL:** Do not perform shot peening before HIP — HIP relaxes the compressive stresses
introduced by shot peening, negating its benefit.
---
## 5. DfAM Rules for Fatigue
1. **Fillets in load paths:** minimum radius ≥ 2× thickness of the adjacent wall.
Sharp fillets (R < 0.5mm) → Kt 35 → guaranteed crack initiators.
2. **Build orientation:** primary cyclic load axis → XY plane.
If not possible (complex geometry): specify HIP as mandatory.
3. **As-built surfaces in critical zones:** not acceptable for N > 10^6 cycles without treatment.
Minimum: bead blast (Ra 612 µm, Kf still 1.31.6). Optimal: machining or shot peening.
4. **Lattice in fatigue-critical applications:**
- Add solid skin ≥ 1.5mm on all surfaces exposed to cyclic loading.
- The surface of an as-built lattice has Ra 3080 µm → Kf 24 → drastically reduced life.
- For fatigue-critical lattice: TPMS Gyroid + HIP + machined outer skin.
5. **Holes in cyclic tension zones:**
- Kt of a circular hole in a plate = 3. In AM, the as-built hole edge has Ra 1540 µm → effective Kf 46.
- Solution: ream/mill the hole after printing (even with a manual reamer).
6. **Support attachment marks (residual marks):**
- Support attachment points leave craters/bumps Ra 25100 µm → critical initiators.
- Do not leave support marks on fatigue-critical surfaces. Design orientation to avoid this.
---
## 6. Red Lines — Mandatory Stop
These scenarios require corrective action before proceeding.
Ignoring them is not acceptable — communicate them explicitly to the designer.
| Condition | Required action |
|---|---|
| Ra as-built > 6 µm + N > 10^6 cycles on metal AM | Mandatory: machining or shot peening. Do not proceed as-built. |
| CT scan porosity > 0.5% + fatigue-critical application | Mandatory: HIP. If unavailable, reject the part. |
| LOF defects detected by CT scan in load zone | Reject. LOF acts as a crack (Kf 310). HIP does not close LOF. |
| FDM polymer + N > 10^5 cycles in Z direction | Process not suitable. Switch to SLS PA12 or redesign orientation. |
| As-built lattice without skin + cyclic fatigue | Redesign: add skin ≥ 1.5mm or exclude lattice from critical zone. |
| Shot peening planned before HIP | Reverse the sequence. Shot peening must be the last thermal/mechanical step. |
---
## 7. Fatigue Evaluation Plan (Output for the Designer)
When fatigue is identified as relevant, include in the final output:
```
## Fatigue Evaluation
**Regime:** HCF (N = __ cycles, R = __)
**Material/Process:** __ LPBF / condition: as-built / HIP / machined
**Baseline fatigue limit:** __ MPa (from S-N table, section 3)
**Applied knockdown factors:**
- Kf from Ra (__ µm, __ condition): __ → effective limit = __ MPa
- Porosity (CT scan planned? __): estimated knockdown __%
- Anisotropy (load in __ direction): Z/XY factor = __
**Estimated effective fatigue limit:** __ MPa
**Comparison with applied load (σ_max = __ MPa, σ_a = __ MPa):**
Fatigue FS = __ [target ≥ 1.5 for standard applications, ≥ 2.0 for safety-critical]
**Actions required to reach target FS:**
□ Mandatory HIP
□ Machining of critical surfaces (Ra target ≤ __ µm)
□ Shot peening (AMS 2430, Almen __)
□ CT scan post-HIP (acceptance: no LOF, porosity < 0.05%)
□ Fatigue coupons same build plate (required for qualification)
**Red lines:**
[List any stop conditions identified]
```
@@ -0,0 +1,122 @@
# Lattice & Infill — Technical Guide
## 1. FDM/FFF — Infill Strategies
### When to use partial infill
- Visual / ergonomic prototypes → 1020%
- Functional parts under moderate load → 3060%
- Critical structural parts → 80100% or solid walls (no infill)
- Flexible parts (TPU) → 1530% for cushioning effect
### Infill patterns and their mechanics
| Pattern | Strength | Weight | Print speed | Ideal use |
|---|---|---|---|---|
| **Gyroid** | Excellent (isotropic) | Low | Medium | Functional parts, heat sinks, flexible parts |
| **Honeycomb** | Good in XY plane | Medium | Medium | Panels, flat pieces, packaging |
| **Cubic / 3D Honeycomb** | Good (3D) | Medium | Medium | General purpose, good strength/weight ratio |
| **Lightning** | Poor | Minimum | High | Top surface support only |
| **Lines / Rectilinear** | Anisotropic | Low | High | Quick prototypes, low-cost filler |
| **Grid** | Moderate | Medium | High | Rapid prototyping |
| **Triangles** | Good in plane | Medium | Medium | Flat planes with distributed load |
| **Concentric** | Excellent for flexible | Low | High | TPU, gaskets, cushioning |
| **Cross 3D** | Excellent for flexible | Low | Low | Elastomers, grip, shock absorbers |
### Critical FDM infill parameters
- **Number of perimeters/shells:** The shell contribution to strength is >> infill. Increase shells before increasing infill %. Practical rule: ≥4 perimeters for structural parts
- **Top/bottom layers:** ≥46 solid layers for mechanically loaded surfaces
- **Infill angle:** Rotate 45° relative to the main load direction for better distribution
- **Infill-perimeter overlap:** 2030% — critical for adhesion between infill and shell
### Density → mechanical properties relationship (PA12, FDM)
| Infill % | Relative Rm | Relative stiffness |
|---|---|---|
| 20% | ~35% | ~25% |
| 40% | ~55% | ~45% |
| 60% | ~70% | ~65% |
| 80% | ~85% | ~82% |
| 100% | 100% | 100% |
*(Indicative values — depend on pattern, material, orientation)*
---
## 2. Metal AM — Lattice Structures
### Main typologies
#### Strut-based (truss)
- **BCC (Body-Centered Cubic):** Excellent for multi-axial loads, good stiffness
- **FCC (Face-Centered Cubic):** Better for shear loads
- **Octet truss:** High specific stiffness, aerospace structural applications
- **Kelvin cell:** Optimal for energy absorption applications (crash, impact)
- **Diamond lattice:** Good isotropic mechanical properties, biomedical applications (osseointegration)
#### TPMS (Triply Periodic Minimal Surface) — zero mean curvature surfaces
- **Gyroid (Schoen G):** The most widely used — excellent for heat exchangers, biomedical scaffolds, pressure
- Isotropic mechanical properties
- No stress concentration nodes
- Excellent for fluid flow (interconnected channels)
- **Schwartz P (Primitive):** High stiffness, suitable for compressive loads
- **Schwartz D (Diamond):** Similar to Gyroid, slightly stiffer
- **IWP:** High specific surface area — heat exchangers
#### Sheet-TPMS vs Solid-TPMS
- **Solid (solid fill):** Better mechanical properties, suitable for load-bearing structures
- **Sheet (shell):** Superior for heat transfer and fluid-dynamic permeability
### Lattice design parameters (metal AM)
| Parameter | Typical range | Notes |
|---|---|---|
| Relative density | 1540% | <15%: risk of warping/collapse during printing; >40%: better to use solid |
| Minimum strut diameter | 0.30.5mm (LPBF) | Below 0.3mm: unreliable |
| TPMS wall thickness | 0.30.6mm (LPBF) | Always verify with the supplier |
| Cell size | 28mm | Cells too small: trapped powder; too large: loss of efficiency |
| Density gradient | Yes if load is non-uniform | E.g.: denser at attachment zone, lighter core |
### Applications by type
| Application | Recommended structure | Relative density |
|---|---|---|
| Structural lightweighting | Octet truss, BCC | 2035% |
| Impact/crash absorption | Kelvin, BCC | 2540% |
| Biomedical scaffold (Ti) | Gyroid, Diamond | 3050% (for osseointegration) |
| Heat exchanger | Gyroid TPMS, IWP | 2030% |
| Tooling with conformal channels | Gyroid + hybrid channels | 2540% |
| Sandwich panel | FCC face-sheet | 1525% |
### Density → properties relationship (Gibson-Ashby law)
For strut lattice: `E_lattice/E_solid ≈ C × (ρ_lattice/ρ_solid)^n`
- n ≈ 2 for bending-dominated (BCC, Kelvin)
- n ≈ 1 for stretch-dominated (Octet, FCC) — more structurally efficient
**Practical implication:** To maximise stiffness per unit weight → prefer stretch-dominated architectures (Octet truss) over bending-dominated ones (BCC).
### Solid-to-lattice transition
- **Transition gradient:** At least 35 transition cells between solid zone and lattice
- **Containment shell:** Always add an outer solid skin (0.52mm) to:
- Protect from trapped powder
- Improve surface finish
- Resist surface fatigue
---
## 3. SLS / MJF — Infill and Internal Structures
### SLS principle: no structural supports, but…
- Unsintered powder acts as support → total geometric freedom
- **Closed cavities:** ALWAYS include powder escape holes ≥ ø56mm (otherwise trapped powder is irremovable)
- **SLS lattice:** Possible with cell size ≥ 34mm, strut ≥ 1.2mm
### Lightweighting strategies for SLS/MJF
1. **Shell + hollow interior** (shell + hollow): Wall ≥1.5mm, escape holes
2. **SLS lattice:** PA12 with internal Gyroid or Honeycomb structures — weight saving 3060%
3. **Internal stiffening ribs** instead of solid sections: often more efficient
### Suggested tools for lattice generation
- **nTopology** — most powerful, designed for metal AM
- **Altair Inspire** — integrated with FEA, topology + lattice in one tool
- **Materialise Magics** — industry standard for build preparation
- **Fusion 360 (Generative Design)** — good entry point, less advanced control
- **Meshmixer** — free, basic lattice for FDM/SLS
- **Rhinoceros + Grasshopper** — maximum parametric flexibility
@@ -0,0 +1,705 @@
{
"_meta": {
"version": "2.0",
"description": "AM Materials Database — mechanical properties, roughness by orientation, post-processing for Ra targets, selection guide. Values from literature and datasheets. Always verify with the specific supplier datasheet.",
"units": { "UTS": "MPa", "YS": "MPa", "E": "GPa", "elongation": "%", "HDT": "°C", "T_max_service": "°C", "density": "g/cm³", "Ra": "µm", "accuracy": "mm", "shrinkage": "%", "fatigue_limit": "MPa" },
"fatigue_note": "fatigue_limit_asbuilt = fatigue limit @ 10^7 cycles, R=0.1, as-built (high scatter ±20%). fatigue_limit_HIP_machined = with HIP + surface machining, close to forged. Kf_asbuilt_side = stress concentration factor from side surface roughness (Ra 1520µm). See references/fatigue-design.md for complete calculation.",
"roughness_note": "Ra on typical surfaces. top_surface = parallel to the XY plane (last layer). side_XY = vertical surfaces. down_facing = lower overhang/support surfaces. As-built values without post-processing.",
"anisotropy_note": "anisotropy_Z_factor = UTS_Z / UTS_XY. E.g. 0.6 means the strength in the Z direction (layer stacking) is 60% of that in the XY plane."
},
"processes": {
"FDM": { "Ra_typical": [15,50], "accuracy_mm": 0.3, "supports": true, "note": "High anisotropy. Roughness strongly depends on orientation and layer height." },
"SLA": { "Ra_typical": [1,6], "accuracy_mm": 0.15,"supports": true, "note": "UV post-cure mandatory. Best Ra among polymer processes." },
"DLP": { "Ra_typical": [2,8], "accuracy_mm": 0.15,"supports": true, "note": "Faster than SLA. Ra depends on projector resolution." },
"SLS": { "Ra_typical": [8,15], "accuracy_mm": 0.3, "supports": false, "note": "Powder acts as support. Good isotropy. Significant shrinkage (~3.5%)." },
"MJF": { "Ra_typical": [6,12], "accuracy_mm": 0.25,"supports": false, "note": "Slightly better finish than SLS. Full-color available." },
"LPBF": { "Ra_typical": [8,20], "accuracy_mm": 0.1, "supports": true, "note": "Metal supports are critical. Stress relief mandatory before removal." },
"EBM": { "Ra_typical": [20,35], "accuracy_mm": 0.2, "supports": true, "note": "Higher Ra than LPBF. Vacuum chamber. Reduced thermal gradients." },
"BJT": { "Ra_typical": [4,10], "accuracy_mm": 0.4, "supports": false, "note": "Post-print sintering. Shrinkage ~20%. Tolerances worse than LPBF." }
},
"polymers": [
{
"id": "PLA",
"name": "PLA (Polylactic Acid)",
"family": "standard_fdm", "processes": ["FDM"],
"mechanical": { "UTS_min": 50, "UTS_max": 65, "E_min": 3.3, "E_max": 3.8, "elongation_min": 3, "elongation_max": 6, "anisotropy_Z_factor": 0.55 },
"thermal": { "HDT_min": 52, "HDT_max": 65, "T_max_service": 52 },
"surface_roughness": {
"top_surface": { "Ra_min": 5, "Ra_max": 15 },
"side_XY": { "Ra_min": 15, "Ra_max": 35 },
"down_facing": { "Ra_min": 25, "Ra_max": 60, "note": "support interface" },
"Ra_asbuilt_typical": 25,
"postprocess_achievable": {
"sanding_400": { "Ra_min": 3, "Ra_max": 8 },
"sanding_800": { "Ra_min": 1.5, "Ra_max": 4 },
"primer_sand": { "Ra_min": 0.8, "Ra_max": 2 }
}
},
"flags": { "biocompatible": false, "uv_resistant": false, "food_safe_possible": false, "predry_required": false, "enclosure_required": false, "supports_needed": true },
"chemical_resistance": { "acids_dilute": "good", "bases_dilute": "good", "solvents_organic": "poor", "fuels": "poor", "UV_outdoor": "poor" },
"shrinkage": { "min": 0.1, "max": 0.3 },
"cost_relative": 1, "print_difficulty": "easy",
"variants": ["PLA+", "PLA-CF (+20% UTS, hardened steel nozzle mandatory)"],
"applications": ["visual prototypes", "concept models", "non-structural parts", "gadgets"],
"warnings": ["biodegradable — avoid prolonged humid/hot environments", "no UV outdoor", "brittle under impact"],
"postprocessing_sequence": ["support removal", "wet sanding 120→240→400→800", "primer surfacer", "painting or clear coat"]
},
{
"id": "PETG",
"name": "PETG (Polyethylene Terephthalate Glycol)",
"family": "standard_fdm", "processes": ["FDM"],
"mechanical": { "UTS_min": 50, "UTS_max": 55, "E_min": 2.1, "E_max": 2.5, "elongation_min": 50, "elongation_max": 200, "anisotropy_Z_factor": 0.65 },
"thermal": { "HDT_min": 75, "HDT_max": 80, "T_max_service": 75 },
"surface_roughness": {
"top_surface": { "Ra_min": 5, "Ra_max": 12 },
"side_XY": { "Ra_min": 12,"Ra_max": 30 },
"down_facing": { "Ra_min": 20,"Ra_max": 50 },
"Ra_asbuilt_typical": 20,
"postprocess_achievable": {
"sanding_400": { "Ra_min": 2, "Ra_max": 6 },
"sanding_800": { "Ra_min": 1.0, "Ra_max": 3 }
}
},
"flags": { "biocompatible": false, "uv_resistant": false, "food_safe_possible": true, "food_safe_note": "depends on pigments and additives from supplier", "predry_required": false, "enclosure_required": false, "supports_needed": true },
"chemical_resistance": { "acids_dilute": "excellent", "bases_dilute": "excellent", "alcohols": "excellent", "solvents_organic": "moderate", "fuels": "good" },
"shrinkage": { "min": 0.1, "max": 0.3 },
"cost_relative": 1.2, "print_difficulty": "moderate",
"warnings": ["high stringing — temperature and retraction are critical", "sticks heavily to bed — use release agent on glass"],
"postprocessing_sequence": ["support removal", "sanding 180→400→800", "polyurethane primer + painting"]
},
{
"id": "ABS",
"name": "ABS (Acrylonitrile Butadiene Styrene)",
"family": "engineering_fdm", "processes": ["FDM"],
"mechanical": { "UTS_min": 40, "UTS_max": 50, "E_min": 2.0, "E_max": 2.5, "elongation_min": 5, "elongation_max": 25, "anisotropy_Z_factor": 0.55 },
"thermal": { "HDT_min": 90, "HDT_max": 100, "T_max_service": 90 },
"surface_roughness": {
"top_surface": { "Ra_min": 5, "Ra_max": 15 },
"side_XY": { "Ra_min": 15,"Ra_max": 40 },
"down_facing": { "Ra_min": 25,"Ra_max": 55 },
"Ra_asbuilt_typical": 25,
"postprocess_achievable": {
"acetone_smoothing": { "Ra_min": 1.5, "Ra_max": 5, "note": "alters dimensions ±0.10.3mm" },
"sanding_800": { "Ra_min": 2, "Ra_max": 6 }
}
},
"flags": { "uv_resistant": false, "predry_required": false, "enclosure_required": true, "enclosure_temp_min": 40, "supports_needed": true },
"shrinkage": { "min": 0.5, "max": 1.5 },
"cost_relative": 1.2, "print_difficulty": "difficult",
"warnings": ["severe warping without enclosure", "toxic fumes — ventilation mandatory"],
"postprocessing_sequence": ["support removal", "acetone smoothing OR sanding 120→400→800", "primer + painting"]
},
{
"id": "ASA",
"name": "ASA (Acrylonitrile Styrene Acrylate)",
"family": "engineering_fdm", "processes": ["FDM"],
"mechanical": { "UTS_min": 45, "UTS_max": 55, "E_min": 2.1, "E_max": 2.6, "elongation_min": 5, "elongation_max": 20, "anisotropy_Z_factor": 0.55 },
"thermal": { "HDT_min": 90, "HDT_max": 100, "T_max_service": 90 },
"surface_roughness": {
"top_surface": { "Ra_min": 5, "Ra_max": 15 },
"side_XY": { "Ra_min": 15,"Ra_max": 40 },
"Ra_asbuilt_typical": 25
},
"flags": { "uv_resistant": true, "predry_required": false, "enclosure_required": true, "supports_needed": true },
"shrinkage": { "min": 0.5, "max": 1.0 },
"cost_relative": 1.5, "print_difficulty": "difficult",
"applications": ["outdoor parts", "automotive exterior", "signage"],
"postprocessing_sequence": ["support removal", "sanding 180→400→800", "UV-resistant primer + painting"]
},
{
"id": "PA12-FDM",
"name": "PA12 / Nylon 12 — FDM",
"family": "engineering_fdm", "processes": ["FDM"],
"mechanical": { "UTS_min": 50, "UTS_max": 60, "E_min": 1.6, "E_max": 2.2, "elongation_min": 30, "elongation_max": 300, "anisotropy_Z_factor": 0.60 },
"thermal": { "HDT_min": 120, "HDT_max": 120, "T_max_service": 110 },
"surface_roughness": {
"top_surface": { "Ra_min": 8, "Ra_max": 20 },
"side_XY": { "Ra_min": 20,"Ra_max": 45 },
"down_facing": { "Ra_min": 30,"Ra_max": 60 },
"Ra_asbuilt_typical": 30
},
"flags": { "predry_required": true, "predry_conditions": "7080°C / 48h before each session", "enclosure_required": true, "supports_needed": true },
"chemical_resistance": { "fuels": "excellent", "oils": "excellent", "bases": "excellent", "acids_conc": "moderate" },
"shrinkage": { "min": 1.0, "max": 2.0 },
"cost_relative": 2.0, "print_difficulty": "difficult",
"applications": ["gears", "snap-fits", "automotive parts", "mechanical components"],
"warnings": ["hygroscopic — pre-dry MANDATORY before each session"]
},
{
"id": "PC",
"name": "PC (Polycarbonate)",
"family": "high_performance_fdm", "processes": ["FDM"],
"mechanical": { "UTS_min": 55, "UTS_max": 70, "E_min": 2.3, "E_max": 2.8, "elongation_min": 100, "elongation_max": 120, "anisotropy_Z_factor": 0.60 },
"thermal": { "HDT_min": 110, "HDT_max": 130, "T_max_service": 115 },
"surface_roughness": {
"top_surface": { "Ra_min": 5, "Ra_max": 15 },
"side_XY": { "Ra_min": 15,"Ra_max": 35 },
"Ra_asbuilt_typical": 20,
"postprocess_achievable": {
"sanding_1200_polish": { "Ra_min": 0.1, "Ra_max": 0.5, "note": "polishing for transparency" }
}
},
"flags": { "transparent": true, "predry_required": true, "predry_conditions": "8090°C / 46h", "enclosure_required": true, "enclosure_temp_min": 60, "nozzle_temp_min": 260, "nozzle_temp_max": 290, "supports_needed": true },
"shrinkage": { "min": 0.5, "max": 0.8 },
"cost_relative": 2.5, "print_difficulty": "very difficult",
"applications": ["optical components", "electronic housings", "transparent covers", "thermal fixtures"]
},
{
"id": "PEEK-FDM",
"name": "PEEK (Polyether Ether Ketone) — FDM",
"family": "ultra_high_performance", "processes": ["FDM"],
"mechanical": { "UTS_min": 90, "UTS_max": 105, "E_min": 3.5, "E_max": 4.2, "elongation_min": 30, "elongation_max": 50, "anisotropy_Z_factor": 0.70 },
"thermal": { "HDT_min": 250, "HDT_max": 260, "T_max_service": 240 },
"surface_roughness": {
"side_XY": { "Ra_min": 15, "Ra_max": 40 },
"Ra_asbuilt_typical": 25,
"postprocess_achievable": {
"machining_CNC": { "Ra_min": 0.4, "Ra_max": 1.6 }
}
},
"flags": { "biocompatible": true, "biocompat_standards": ["ISO 10993", "USP Class VI"], "uv_resistant": true, "predry_required": true, "predry_conditions": "120°C / 4h", "enclosure_required": true, "enclosure_temp_min": 90, "nozzle_allMetal_required": true, "supports_needed": true },
"chemical_resistance": { "general": "excellent" },
"cost_relative": 30, "cost_EUR_per_kg": "200400", "print_difficulty": "extreme",
"variants": ["CF-PEEK (+30% E, -ductility)"],
"applications": ["medical", "aerospace", "high-temperature chemical", "spinal implants"],
"warnings": ["all-metal hot end mandatory (no PTFE >260°C)", "slow cooling inside enclosure"]
},
{
"id": "TPU-FDM",
"name": "TPU / TPE elastomers — FDM",
"family": "flexible_fdm", "processes": ["FDM"],
"mechanical": { "UTS_min": 10, "UTS_max": 40, "elongation_min": 300, "elongation_max": 600 },
"thermal": { "HDT_min": 70, "HDT_max": 85, "T_max_service": 75 },
"shore": { "min": 85, "max": 98, "scale": "A" },
"surface_roughness": {
"side_XY": { "Ra_min": 15, "Ra_max": 35 },
"Ra_asbuilt_typical": 22
},
"flags": { "flexible": true, "predry_required": false, "enclosure_required": false, "direct_drive_recommended": true, "supports_needed": true },
"cost_relative": 2.0, "print_difficulty": "moderate",
"warnings": ["reduced or zero retraction with direct drive", "bowden extruder: severe underextrusion", "slow printing (2035 mm/s max perimeters)"]
},
{
"id": "CF-short-FDM",
"name": "Short-fiber composites — PA-CF, PETG-CF, PC-CF",
"family": "composite_fdm", "processes": ["FDM"],
"mechanical": { "UTS_note": "+2040% vs base polymer", "E_note": "+3060% vs base polymer", "elongation_note": "reduced — more brittle" },
"surface_roughness": {
"side_XY": { "Ra_min": 15, "Ra_max": 45 },
"Ra_asbuilt_typical": 30
},
"flags": { "hardened_nozzle_required": true, "predry_required": "depends on base polymer", "enclosure_required": "depends on base polymer" },
"cost_relative": 2.5, "print_difficulty": "moderate-difficult",
"warnings": ["brass nozzles wear out within a few hours — hardened steel or ruby nozzle mandatory"]
},
{
"id": "Onyx-ContinuousFiber",
"name": "Onyx + Continuous Fiber — Markforged",
"family": "composite_continuous_fiber", "processes": ["FDM-Markforged"],
"mechanical": { "UTS_max_CF": 800, "E_max_CF_GPa": 70, "UTS_onyx": 30, "note": "Continuous CF oriented along load direction" },
"thermal": { "T_max_service": 105 },
"surface_roughness": { "side_XY": { "Ra_min": 10, "Ra_max": 25 }, "Ra_asbuilt_typical": 20 },
"flags": { "markforged_only": true, "enclosure_required": true },
"reinforcement_options": ["Carbon Fiber", "Kevlar", "HSHT Fiberglass"],
"cost_relative": 8, "print_difficulty": "moderate (dedicated machine)",
"applications": ["structural aluminum replacement", "fixtures", "tooling", "robot end-effectors"],
"warnings": ["Markforged machines only", "not repairable with standard FDM"]
},
{
"id": "PA12-SLS",
"name": "PA12 SLS (EOS PA2200, Duraform PA)",
"family": "sls_powder", "processes": ["SLS"],
"mechanical": { "UTS_min": 45, "UTS_max": 50, "E_min": 1.7, "E_max": 1.9, "elongation_min": 18, "elongation_max": 23, "anisotropy_Z_factor": 0.90 },
"thermal": { "HDT_min": 163, "HDT_max": 163, "T_max_service": 150 },
"surface_roughness": {
"top_surface": { "Ra_min": 6, "Ra_max": 12 },
"side_XY": { "Ra_min": 8, "Ra_max": 15 },
"down_facing": { "Ra_min": 8, "Ra_max": 18, "note": "SLS: no support interface" },
"Ra_asbuilt_typical": 10,
"postprocess_achievable": {
"bead_blast": { "Ra_min": 4, "Ra_max": 8 },
"vibratory": { "Ra_min": 2, "Ra_max": 5 },
"SLS_coating": { "Ra_min": 3, "Ra_max": 6 },
"machining": { "Ra_min": 0.4,"Ra_max": 1.6 }
}
},
"fatigue": {
"fatigue_limit_asbuilt_min": 18, "fatigue_limit_asbuilt_max": 25,
"fatigue_reference_cycles": "10^6, R=0.1",
"fatigue_anisotropy_Z_XY_asbuilt": 0.92,
"note": "Polymer with the best fatigue behavior among AM processes. Moisture-sensitive: store at humidity < 50% RH. Over-aged powder reduces elongation and fatigue."
},
"flags": { "supports_needed": false, "isotropic": true, "predry_required": false },
"chemical_resistance": { "fuels": "excellent", "oils": "excellent", "acids_dilute": "good" },
"shrinkage": { "min": 3.0, "max": 4.0, "axis_note": "isotropic ~3.5% XY and Z" },
"accuracy": "±0.3mm", "cost_relative": 5,
"applications": ["functional parts", "complex geometries", "series 10200 pcs", "prosthetics"],
"warnings": ["shrinkage 3.54% — compensate in CAD", "recycled powder max 50%"],
"postprocessing_sequence": ["breakout + cleaning (compressed air + blasting)", "standard bead blast", "dyeing if color is required", "coating if sealing is required"]
},
{
"id": "PA12-MJF",
"name": "PA12 MJF (HP Multi Jet Fusion)",
"family": "mjf_powder", "processes": ["MJF"],
"mechanical": { "UTS_min": 48, "UTS_max": 53, "E_min": 1.8, "E_max": 2.0, "elongation_min": 15, "elongation_max": 20, "anisotropy_Z_factor": 0.92 },
"thermal": { "HDT_min": 163, "HDT_max": 165, "T_max_service": 150 },
"surface_roughness": {
"top_surface": { "Ra_min": 5, "Ra_max": 10 },
"side_XY": { "Ra_min": 6, "Ra_max": 12 },
"Ra_asbuilt_typical": 8,
"postprocess_achievable": {
"bead_blast": { "Ra_min": 3, "Ra_max": 7 },
"vibratory": { "Ra_min": 2, "Ra_max": 4 }
}
},
"flags": { "supports_needed": false, "color_available": true, "color_note": "Full color HP MJF 5200" },
"shrinkage": { "min": 3.0, "max": 4.0 },
"accuracy": "±0.20.3mm", "cost_relative": 5,
"packing_density_optimal": "812%",
"applications": ["medium-volume production", "colored parts", "series 50500 pcs"]
},
{
"id": "PA11-SLS",
"name": "PA11 SLS",
"family": "sls_powder", "processes": ["SLS"],
"mechanical": { "UTS_min": 48, "UTS_max": 53, "E_min": 1.6, "E_max": 1.8, "elongation_min": 40, "elongation_max": 50, "anisotropy_Z_factor": 0.90 },
"thermal": { "T_max_service": 120 },
"surface_roughness": {
"side_XY": { "Ra_min": 8, "Ra_max": 16 },
"Ra_asbuilt_typical": 11
},
"flags": { "supports_needed": false, "bio_based": true, "bio_based_source": "castor oil" },
"shrinkage": { "min": 2.5, "max": 3.5 }, "cost_relative": 6,
"applications": ["automotive components", "high-impact parts", "prosthetics and orthotics"],
"notes": "Prefer over PA12 when: elongation >30% is required, repeated impacts, presence of notches"
},
{
"id": "PA12-CF-SLS",
"name": "PA12-CF / PA12-GF SLS",
"family": "sls_powder_composite", "processes": ["SLS"],
"mechanical": { "UTS_min": 50, "UTS_max": 55, "E_min": 3.5, "E_max": 4.5, "elongation_min": 5, "elongation_max": 10 },
"thermal": { "HDT_min": 180, "HDT_max": 200, "T_max_service": 175 },
"surface_roughness": { "side_XY": { "Ra_min": 9, "Ra_max": 18 }, "Ra_asbuilt_typical": 12 },
"flags": { "supports_needed": false },
"cost_relative": 7,
"applications": ["rigid structural parts", "elevated temperature", "technical housings"]
},
{
"id": "TPU-SLS",
"name": "TPU SLS (BASF Ultrasint TPU)",
"family": "sls_flexible", "processes": ["SLS"],
"mechanical": { "UTS_min": 8, "UTS_max": 12, "elongation_min": 350, "elongation_max": 500 },
"shore": { "min": 88, "max": 92, "scale": "A" },
"surface_roughness": { "side_XY": { "Ra_min": 8, "Ra_max": 16 }, "Ra_asbuilt_typical": 12 },
"flags": { "supports_needed": false, "flexible": true },
"cost_relative": 8,
"applications": ["shoe soles", "dampers", "flexible seals", "functional lattice"]
},
{
"id": "Resin-Standard",
"name": "Standard ABS-like Resin — SLA/DLP",
"family": "resin_standard", "processes": ["SLA", "DLP", "MSLA"],
"mechanical": { "UTS_min": 50, "UTS_max": 70, "E_min": 2.5, "E_max": 3.5, "elongation_min": 5, "elongation_max": 15 },
"thermal": { "HDT_min": 55, "HDT_max": 70, "T_max_service": 55 },
"surface_roughness": {
"top_surface": { "Ra_min": 1.0, "Ra_max": 3.0 },
"side_XY": { "Ra_min": 2.0, "Ra_max": 6.0, "note": "visible stair-stepping with layer >50µm" },
"down_facing": { "Ra_min": 3.0, "Ra_max": 8.0, "note": "touchpoint marks from supports" },
"Ra_asbuilt_typical": 3,
"postprocess_achievable": {
"sanding_800": { "Ra_min": 0.4, "Ra_max": 1.0 },
"polish": { "Ra_min": 0.05,"Ra_max": 0.2 }
}
},
"flags": { "supports_needed": true, "post_cure_required": true, "IPA_wash_required": true, "uv_resistant": false },
"shrinkage": { "min": 0.1, "max": 0.3 }, "accuracy": "±0.10.15mm",
"cost_relative": 2, "print_difficulty": "easy",
"warnings": ["UV photodegradation — outdoor yellowing", "post-cure mandatory for final properties"],
"postprocessing_sequence": ["IPA wash 1015 min", "air drying 5 min", "UV post-curing 9001200 mJ/cm²", "support removal", "sanding if Ra <2µm is required", "UV-stable clear coat"]
},
{
"id": "Resin-HighTemp",
"name": "High-Temp Resin — SLA/DLP",
"family": "resin_hightemp", "processes": ["SLA", "DLP"],
"mechanical": { "UTS_min": 60, "UTS_max": 80, "elongation_min": 2, "elongation_max": 6 },
"thermal": { "HDT_min": 160, "HDT_max": 280, "T_max_service": 160 },
"surface_roughness": { "side_XY": { "Ra_min": 2, "Ra_max": 6 }, "Ra_asbuilt_typical": 3 },
"flags": { "supports_needed": true, "post_cure_required": true, "brittle": true },
"cost_relative": 5,
"applications": ["small-series injection molds", "process fixtures", "aerodynamic testing"]
},
{
"id": "Resin-Flexible",
"name": "Flexible/Elastic Resin — SLA/DLP",
"family": "resin_flexible", "processes": ["SLA", "DLP"],
"shore": { "min": 40, "max": 80, "scale": "A" },
"surface_roughness": { "side_XY": { "Ra_min": 2, "Ra_max": 8 }, "Ra_asbuilt_typical": 4 },
"flags": { "supports_needed": true, "post_cure_required": true, "flexible": true },
"cost_relative": 3,
"warnings": ["mechanical properties lower than TPU SLS"]
},
{
"id": "Resin-Dental-Medical",
"name": "Dental/Medical Resin — SLA/DLP",
"family": "resin_medical", "processes": ["SLA", "DLP"],
"mechanical": { "UTS_min": 60, "UTS_max": 80 },
"surface_roughness": { "side_XY": { "Ra_min": 1, "Ra_max": 4 }, "Ra_asbuilt_typical": 2 },
"flags": { "biocompatible": true, "biocompat_standards": ["ISO 10993", "class IIa/IIb"], "supports_needed": true, "post_cure_required": true },
"cost_relative": 8,
"applications": ["anatomical models", "surgical guides", "aligners", "temporary devices"]
},
{
"id": "Resin-Ceramic",
"name": "Ceramic Resin Alumina/Zirconia — SLA/DLP",
"family": "ceramic_vat", "processes": ["SLA", "DLP"],
"mechanical": { "UTS_min": 200, "UTS_max": 600, "note": "after sintering" },
"surface_roughness": {
"Ra_asbuilt_typical": 2,
"postprocess_achievable": {
"after_sintering": { "Ra_min": 0.5, "Ra_max": 3 },
"after_grinding": { "Ra_min": 0.05,"Ra_max": 0.4 }
}
},
"flags": { "biocompatible": true, "supports_needed": true, "multi_step_process": true },
"shrinkage": { "min": 20, "max": 25, "note": "ALWAYS COMPENSATE IN CAD" },
"cost_relative": 15,
"applications": ["zirconia dental prosthetics", "technical alumina components", "ceramic insulators"],
"warnings": ["shrinkage 2025% — compensation in CAD is mandatory", "multi-step process: print → debinding → sintering"],
"postprocessing_sequence": ["IPA wash", "UV post-cure", "debinding 200600°C ramp 15°C/min", "pre-sintering 1000°C/2h", "sintering 14501600°C/2h", "optional HIP", "grinding/lapping functional surfaces"]
}
],
"metals": [
{
"id": "AlSi10Mg",
"name": "AlSi10Mg",
"family": "aluminum_alloy", "processes": ["LPBF"],
"mechanical": {
"UTS_asbuilt_min": 400, "UTS_asbuilt_max": 470,
"UTS_SR_min": 350, "UTS_SR_max": 420,
"YS_min": 240, "YS_max": 280, "E_min": 70, "E_max": 75,
"elongation_min": 6, "elongation_max": 11, "anisotropy_Z_factor": 0.85
},
"thermal": { "T_max_service": 150 }, "density": 2.68,
"surface_roughness": {
"top_surface": { "Ra_min": 5, "Ra_max": 15 },
"side_XY": { "Ra_min": 8, "Ra_max": 20 },
"down_facing": { "Ra_min": 15, "Ra_max": 35 },
"Ra_asbuilt_typical": 12,
"postprocess_achievable": {
"bead_blast": { "Ra_min": 4, "Ra_max": 8 },
"vibratory": { "Ra_min": 2, "Ra_max": 5 },
"shot_peen": { "Ra_min": 3, "Ra_max": 7, "note": "introduces compressive stress — improves fatigue" },
"machining": { "Ra_min": 0.4, "Ra_max": 1.6 },
"electropolish": { "Ra_min": 0.5, "Ra_max": 2.0, "note": "variable results on Al" },
"anodizing": { "note": "does not change Ra — protection and color" }
}
},
"flags": { "biocompatible": false, "supports_needed": true },
"accuracy": "±0.050.1mm", "shrinkage": { "min": 0.3, "max": 0.5 }, "build_atmosphere": "Nitrogen",
"heat_treatment": {
"stress_relief": { "temp_C": 300, "time_h": 2, "atmosphere": "air or argon", "mandatory": true, "timing": "BEFORE removal from build plate" },
"T6": { "mandatory": false, "note": "improves ductility" }
},
"fatigue": {
"fatigue_limit_asbuilt_min": 90, "fatigue_limit_asbuilt_max": 130,
"fatigue_limit_HIP_machined_min": 120, "fatigue_limit_HIP_machined_max": 170,
"fatigue_limit_reference_forged_6061T6": 100,
"fatigue_anisotropy_Z_XY_asbuilt": 0.60,
"fatigue_anisotropy_Z_XY_HIP": 0.90,
"Kf_asbuilt_side_Ra15_20": 1.7,
"shot_peen_improvement_pct": "1525",
"note": "Very sensitive to porosity and powder humidity. With HIP it approaches forged 6061-T6 performance."
},
"machinability": "excellent", "cost_relative": 3,
"applications": ["lightweight structural parts", "housings", "aero/auto brackets", "heat sinks", "manifolds"],
"warnings": ["no applications >150°C", "stress relief before build plate removal — critical"],
"postprocessing_sequence": ["stress relief 300°C/2h", "build plate removal (EDM/saw)", "support removal", "machining critical surfaces", "surface finishing", "anodizing if required"]
},
{
"id": "Scalmalloy",
"name": "Scalmalloy® (AlMgScZr)",
"family": "aluminum_advanced", "processes": ["LPBF"],
"mechanical": { "UTS_min": 520, "UTS_max": 540, "YS_min": 470, "YS_max": 490, "elongation_min": 13, "elongation_max": 16 },
"density": 2.67,
"surface_roughness": { "side_XY": { "Ra_min": 8, "Ra_max": 20 }, "Ra_asbuilt_typical": 12 },
"flags": { "supports_needed": true },
"heat_treatment": { "T6": { "mandatory": true } },
"cost_relative": 12, "cost_note": "~35× AlSi10Mg",
"applications": ["high-performance structural parts for aero/motorsport/UAV"],
"warnings": ["very high cost — justify with performance analysis"]
},
{
"id": "Ti-6Al-4V",
"name": "Ti-6Al-4V Grade 23 (ELI)",
"family": "titanium_alloy", "processes": ["LPBF", "EBM"],
"mechanical": {
"UTS_LPBF_min": 900, "UTS_LPBF_max": 1100,
"UTS_EBM_min": 830, "UTS_EBM_max": 1000,
"YS_min": 800, "YS_max": 1000, "E_min": 110, "E_max": 120,
"elongation_min": 8, "elongation_max": 15, "anisotropy_Z_factor": 0.88
},
"thermal": { "T_max_service": 315 }, "density": 4.43,
"surface_roughness": {
"top_surface": { "Ra_min": 5, "Ra_max": 15 },
"side_XY": { "Ra_min": 8, "Ra_max": 20 },
"down_facing": { "Ra_min": 20, "Ra_max": 40 },
"Ra_asbuilt_typical": 14,
"postprocess_achievable": {
"machining": { "Ra_min": 0.4, "Ra_max": 1.6 },
"electropolish": { "Ra_min": 0.5, "Ra_max": 2.0 },
"shot_peen": { "Ra_min": 3, "Ra_max": 8 },
"machining_surgical": { "Ra_min": 0.2, "Ra_max": 0.8, "note": "implant surgical surfaces" }
}
},
"flags": { "biocompatible": true, "biocompat_standards": ["ISO 10993"], "supports_needed": true },
"accuracy": "±0.050.1mm", "shrinkage": { "min": 0.2, "max": 0.4 }, "build_atmosphere": "Argon",
"heat_treatment": {
"stress_relief": { "temp_C": 650, "time_h": 3, "atmosphere": "vacuum or argon", "mandatory": true },
"HIP": { "temp_C": 900, "pressure_MPa": 150, "time_h": 3, "mandatory_for": "biomedical, fatigue-critical" },
"annealing": { "temp_C": 790, "time_h": 2, "mandatory": false }
},
"fatigue": {
"fatigue_limit_asbuilt_min": 200, "fatigue_limit_asbuilt_max": 320,
"fatigue_limit_HIP_machined_min": 400, "fatigue_limit_HIP_machined_max": 550,
"fatigue_limit_reference_forged": 650,
"fatigue_anisotropy_Z_XY_asbuilt": 0.67,
"fatigue_anisotropy_Z_XY_HIP": 0.95,
"Kf_asbuilt_side_Ra15_20": 2.1,
"shot_peen_improvement_pct": "2040",
"note": "Huge as-built scatter (±30%). HIP + machining brings performance close to forged. For biomedical implants: HIP is mandatory."
},
"cost_relative": 8,
"applications": ["orthopedic implants", "aerospace hot section", "lightweight racing structures"],
"warnings": ["HIP mandatory for implants", "stress relief critical before support removal"],
"postprocessing_sequence": ["stress relief 650°C/3h/vacuum", "build plate removal (EDM)", "support removal", "HIP for biomedical/fatigue-critical", "machining functional surfaces", "electropolish or passivation", "CT scan inspection (implants)"]
},
{
"id": "316L",
"name": "316L Stainless Steel",
"family": "stainless_steel", "processes": ["LPBF", "BJT"],
"mechanical": {
"UTS_LPBF_min": 550, "UTS_LPBF_max": 640,
"UTS_BJT_min": 480, "UTS_BJT_max": 540,
"YS_min": 400, "YS_max": 460, "E_min": 193, "E_max": 200,
"elongation_min": 40, "elongation_max": 50
},
"density": 7.99,
"surface_roughness": {
"side_XY": { "Ra_min": 8, "Ra_max": 20 },
"Ra_asbuilt_typical": 12,
"postprocess_achievable": {
"machining": { "Ra_min": 0.4, "Ra_max": 1.6 },
"electropolish": { "Ra_min": 0.2, "Ra_max": 0.8, "note": "excellent on 316L — food/medical standard" },
"shot_peen": { "Ra_min": 3, "Ra_max": 6 },
"passivation": { "note": "does not change Ra — protects against corrosion" }
}
},
"flags": { "biocompatible": true, "supports_needed": true, "BJT_no_supports": true },
"accuracy_LPBF": "±0.050.1mm", "accuracy_BJT": "±0.30.5mm post-sinter",
"shrinkage_LPBF": { "min": 0.2, "max": 0.3 },
"shrinkage_BJT": { "min": 18, "max": 22, "note": "sintering — compensate in CAD" },
"build_atmosphere": "Nitrogen or Argon",
"heat_treatment": {
"stress_relief": { "temp_C": 1000, "time_h": 1.5, "atmosphere": "vacuum", "mandatory": false },
"solution_anneal": { "temp_C": 1050, "time_h": 1, "note": "if maximum corrosion resistance is required" }
},
"fatigue": {
"fatigue_limit_asbuilt_min": 180, "fatigue_limit_asbuilt_max": 220,
"fatigue_limit_HIP_machined_min": 220, "fatigue_limit_HIP_machined_max": 260,
"fatigue_limit_reference_forged": 220,
"fatigue_anisotropy_Z_XY_asbuilt": 0.80,
"fatigue_anisotropy_Z_XY_HIP": 0.96,
"Kf_asbuilt_side_Ra15_20": 1.6,
"shot_peen_improvement_pct": "1525",
"note": "As-built fatigue is almost comparable to forged material — ductile and defect-tolerant alloy. BJT: fatigue data not available, not recommended for fatigue-critical applications without HIP."
},
"cost_relative": 4,
"applications": ["medical", "food-contact", "chemical", "marine"],
"notes": "BJT is cheaper for volumes >50 pcs — looser tolerances"
},
{
"id": "17-4PH",
"name": "17-4PH (AISI 630)",
"family": "stainless_steel_ph", "processes": ["LPBF", "BJT"],
"mechanical": {
"UTS_min": 1000, "UTS_max": 1300, "UTS_condition": "H900",
"YS_min": 950, "YS_max": 1200, "elongation_min": 5, "elongation_max": 12
},
"density": 7.78,
"surface_roughness": {
"side_XY": { "Ra_min": 8, "Ra_max": 20 }, "Ra_asbuilt_typical": 12,
"postprocess_achievable": {
"machining": { "Ra_min": 0.4, "Ra_max": 1.6 },
"grinding": { "Ra_min": 0.1, "Ra_max": 0.4 }
}
},
"flags": { "supports_needed": true },
"heat_treatment": {
"solution_anneal": { "temp_C": 1040, "time_h": 1, "atmosphere": "vacuum" },
"aging_H900": { "temp_C": 480, "time_h": 1, "atmosphere": "air", "mandatory": true, "warning": "MANDATORY — without aging, properties are ~40% of H900 values" }
},
"fatigue": {
"fatigue_limit_H900_min": 350, "fatigue_limit_H900_max": 430,
"fatigue_limit_reference_forged_H900": 450,
"fatigue_anisotropy_Z_XY_asbuilt": 0.75,
"Kf_asbuilt_side_Ra15_20": 1.7,
"shot_peen_improvement_pct": "1525",
"note": "Fatigue data available only in H900 condition (aging mandatory). As-built is not an option for fatigue."
},
"cost_relative": 5,
"applications": ["loaded structural parts", "molds", "tooling", "aerospace", "marine hardware"],
"warnings": ["aging H900 is mandatory — never omit it"],
"postprocessing_sequence": ["stress relief", "build plate + support removal", "solution anneal 1040°C/1h", "aging H900 480°C/1h/air", "machining", "grinding if Ra <0.4µm"]
},
{
"id": "IN625",
"name": "Inconel 625",
"family": "nickel_superalloy", "processes": ["LPBF"],
"mechanical": { "UTS_min": 900, "UTS_max": 1000, "YS_min": 600, "YS_max": 700, "elongation_min": 30, "elongation_max": 40 },
"thermal": { "T_max_service": 980 }, "density": 8.44,
"surface_roughness": {
"side_XY": { "Ra_min": 10, "Ra_max": 25 }, "Ra_asbuilt_typical": 15,
"postprocess_achievable": {
"machining": { "Ra_min": 0.4, "Ra_max": 1.6 },
"electropolish": { "Ra_min": 0.5, "Ra_max": 2.0 }
}
},
"flags": { "supports_needed": true }, "build_atmosphere": "Argon",
"heat_treatment": { "stress_relief": { "temp_C": 1050, "time_h": 2, "atmosphere": "vacuum", "mandatory": true } },
"fatigue": {
"fatigue_limit_asbuilt_min": 280, "fatigue_limit_asbuilt_max": 380,
"fatigue_anisotropy_Z_XY_asbuilt": 0.72,
"Kf_asbuilt_side_Ra15_20": 1.7,
"note": "Relatively limited data in the literature. Use with safety margin >= 2.0 for critical applications."
},
"cost_relative": 10,
"applications": ["offshore chemical", "oil&gas", "engine cold sections", "marine"]
},
{
"id": "IN718",
"name": "Inconel 718",
"family": "nickel_superalloy", "processes": ["LPBF"],
"mechanical": {
"UTS_min": 1000, "UTS_max": 1300, "UTS_condition": "full HT",
"YS_min": 900, "YS_max": 1100, "elongation_min": 10, "elongation_max": 20
},
"thermal": { "T_max_service": 700 }, "density": 8.19,
"surface_roughness": {
"side_XY": { "Ra_min": 10, "Ra_max": 25 }, "Ra_asbuilt_typical": 16,
"postprocess_achievable": {
"machining": { "Ra_min": 0.4, "Ra_max": 1.6 },
"grinding": { "Ra_min": 0.1, "Ra_max": 0.4 }
}
},
"flags": { "supports_needed": true }, "build_atmosphere": "Argon",
"heat_treatment": {
"solution_anneal": { "temp_C": 1065, "time_h": 1, "atmosphere": "vacuum" },
"aging_step1": { "temp_C": 720, "time_h": 8, "atmosphere": "vacuum" },
"aging_step2": { "temp_C": 620, "time_h": 8, "atmosphere": "vacuum" },
"mandatory": true,
"warning": "MANDATORY — without full cycle, properties are ~50% of final values. Plan with a qualified supplier."
},
"fatigue": {
"fatigue_limit_fullHT_min": 350, "fatigue_limit_fullHT_max": 450,
"fatigue_limit_reference_forged": 500,
"fatigue_anisotropy_Z_XY_asbuilt": 0.72,
"Kf_asbuilt_side_Ra15_20": 1.8,
"shot_peen_improvement_pct": "1525",
"note": "Fatigue data available only after complete HT cycle (solution anneal + double aging). As-built: do not qualify for fatigue without HT."
},
"cost_relative": 12,
"applications": ["turbines", "aerospace hot section", "high-temperature fatigue parts"],
"warnings": ["complex and certified heat treatment — plan in advance"]
},
{
"id": "CoCr",
"name": "CoCr MP1/SP2",
"family": "cobalt_chrome", "processes": ["LPBF", "EBM"],
"mechanical": { "UTS_min": 1000, "UTS_max": 1200, "hardness_HRC_min": 35, "hardness_HRC_max": 45 },
"density": 8.3,
"surface_roughness": {
"side_XY": { "Ra_min": 10, "Ra_max": 22 }, "Ra_asbuilt_typical": 14,
"postprocess_achievable": {
"machining": { "Ra_min": 0.4, "Ra_max": 1.6 },
"polishing": { "Ra_min": 0.05,"Ra_max": 0.2, "note": "dental prosthetics — mirror finish" }
}
},
"flags": { "biocompatible": true, "biocompat_standards": ["ISO 10993"], "supports_needed": true }, "build_atmosphere": "Argon",
"heat_treatment": { "stress_relief": { "mandatory": true }, "HIP": { "mandatory_for": "biomedical implants" } },
"fatigue": {
"fatigue_limit_asbuilt_min": 500, "fatigue_limit_asbuilt_max": 600,
"fatigue_anisotropy_Z_XY_asbuilt": 0.78,
"Kf_asbuilt_side_Ra15_20": 1.7,
"note": "Excellent fatigue performance for biomedical applications. HIP mandatory for implants. High UTS -> very favorable fatigue life."
},
"machinability": "difficult — design near-net shape", "cost_relative": 9,
"applications": ["dental prosthetics", "orthopedic implants", "cutting tools"],
"warnings": ["very difficult to machine post-print — minimize material removal in CAD"]
},
{
"id": "Cu-pure",
"name": "Pure copper (Cu)",
"family": "copper", "processes": ["LPBF-green", "LPBF-blue"],
"mechanical": { "UTS_min": 200, "UTS_max": 280, "elongation_min": 25, "elongation_max": 45 },
"density": 8.96, "electrical_conductivity_IACS_min": 95, "thermal_conductivity_Wm_K": 380,
"surface_roughness": { "side_XY": { "Ra_min": 10, "Ra_max": 25 }, "Ra_asbuilt_typical": 15 },
"flags": { "supports_needed": true, "green_blue_laser_only": true },
"cost_relative": 7,
"applications": ["inductors", "heat exchangers", "bus bars", "electronic components"],
"warnings": ["requires green 515nm or blue 450nm laser — IR lasers are inadequate", "not all service providers offer this technology"]
}
],
"selection_guides": {
"by_Ra_target": {
"Ra_less_0p4": { "label": "Ra <0.4 µm", "use_cases": "O-ring seats, seals, H6/h6 precision fits", "strategy": "any AM process + post-machining grinding/lapping" },
"Ra_0p4_to_1p6": { "label": "Ra 0.41.6 µm", "use_cases": "functional mechanical surfaces, sliding fits", "strategy": "LPBF/SLS/SLA + CNC machining. SLA as-built + sanding 800." },
"Ra_1p6_to_3p2": { "label": "Ra 1.63.2 µm", "use_cases": "semi-finished surfaces, non-critical inner surfaces", "strategy": "SLA as-built. LPBF + vibratory or electropolish. SLS + vibratory." },
"Ra_3p2_to_6p3": { "label": "Ra 3.26.3 µm", "use_cases": "non-critical functional surfaces, inner walls", "strategy": "SLS/MJF + bead blast. LPBF + bead blast. Optimized FDM top surface." },
"Ra_6p3_to_12p7":{ "label": "Ra 6.312.7 µm","use_cases": "non-functional surfaces, internal parts, prototypes", "strategy": "FDM side surfaces. SLS as-built. LPBF as-built." },
"Ra_greater_12p7":{"label": "Ra >12.7 µm", "use_cases": "rough aesthetic parts, non-critical", "strategy": "FDM side/down-facing as-built." }
},
"by_temperature": [
{ "T_max_C": 55, "materials": ["PLA", "Resin-Standard", "Resin-Flexible", "TPU-FDM"] },
{ "T_max_C": 80, "materials": ["PETG", "TPU-FDM"] },
{ "T_max_C": 100, "materials": ["ABS", "ASA"] },
{ "T_max_C": 120, "materials": ["PA12-FDM", "PA11-SLS"] },
{ "T_max_C": 150, "materials": ["PC", "PA12-SLS", "PA12-MJF"] },
{ "T_max_C": 175, "materials": ["PA12-CF-SLS"] },
{ "T_max_C": 240, "materials": ["PEEK-FDM"] },
{ "T_max_C": 315, "materials": ["AlSi10Mg", "Ti-6Al-4V"] },
{ "T_max_C": 700, "materials": ["IN718"] },
{ "T_max_C": 980, "materials": ["IN625"] }
],
"by_application": {
"biomedical_implants": ["Ti-6Al-4V", "CoCr", "PEEK-FDM"],
"dental": ["CoCr", "Resin-Dental-Medical", "Resin-Ceramic"],
"aerospace_structural": ["AlSi10Mg", "Scalmalloy", "Ti-6Al-4V", "IN718", "IN625"],
"automotive_lightweight": ["AlSi10Mg", "PA12-SLS", "PA12-MJF", "CF-short-FDM", "Onyx-ContinuousFiber"],
"chemical_process": ["316L", "IN625", "Ti-6Al-4V"],
"tooling_molds": ["17-4PH", "Resin-HighTemp"],
"flexible_seals": ["TPU-FDM", "TPU-SLS", "Resin-Flexible"],
"heat_exchangers": ["AlSi10Mg", "Cu-pure", "IN625"],
"outdoor_UV": ["ASA", "PA12-SLS"],
"optical_transparent": ["PC", "Resin-Standard"],
"food_contact": ["316L", "PETG"],
"structural_replace_Al": ["Onyx-ContinuousFiber", "AlSi10Mg", "PA12-CF-SLS"],
"rapid_prototyping": ["PLA", "Resin-Standard", "PA12-MJF"],
"functional_prototype": ["PETG", "PA12-SLS", "PA12-MJF", "AlSi10Mg"]
},
"by_process_availability": {
"desktop_FDM_easy": ["PLA", "PETG", "TPU-FDM"],
"desktop_FDM_advanced": ["ABS", "ASA", "PA12-FDM", "PC"],
"industrial_FDM": ["PEEK-FDM", "CF-short-FDM", "Onyx-ContinuousFiber"],
"desktop_resin": ["Resin-Standard", "Resin-Flexible"],
"professional_resin": ["Resin-HighTemp", "Resin-Dental-Medical"],
"sls_service_bureau": ["PA12-SLS", "PA11-SLS", "PA12-CF-SLS", "TPU-SLS"],
"mjf_service_bureau": ["PA12-MJF"],
"metal_service_bureau": ["AlSi10Mg", "Ti-6Al-4V", "316L", "17-4PH", "IN625", "IN718", "CoCr"],
"specialized_only": ["Scalmalloy", "Cu-pure", "Resin-Ceramic"]
}
}
}
@@ -0,0 +1,99 @@
# Metal AM Alloys
> **Primary database:** `materials-db.json` — contains all structured data (UTS, YS, elongation, density, heat treatment, accuracy, shrinkage, applications, warnings) for all AM metal alloys.
> This file provides decision context and critical notes that cannot be structured in JSON.
## How to use the JSON database for metals
```
To select a metal alloy:
1. Filter by T_max_service (e.g. >300°C → titanium or superalloys)
2. Filter by process (LPBF / EBM / Binder Jetting)
3. Compare strength-to-weight ratio (UTS/density) if weight is critical
4. Check biocompatible for medical applications
5. Read heat_treatment — complexity and cost impact lead time
6. Read warnings — some alloys have mandatory requirements
```
## Critical notes on heat treatment (DO NOT ignore)
### Heat treatment is part of the process, not optional
- **AlSi10Mg:** Stress relief BEFORE removing from build plate. Without it: distortion and cracking.
- **Ti-6Al-4V:** Stress relief 650°C mandatory. HIP mandatory for biomedical.
- **17-4PH:** H900 aging (480°C/1h) MANDATORY. AS-BUILT properties are ~40% of H900.
- **IN718:** Full solution + double aging cycle mandatory. Plan weeks in advance.
- **IN625:** Simpler — stress relief only. No precipitation hardening.
### Universal LPBF sequence (do not deviate)
1. Stress relief → 2. Build plate removal → 3. Support removal → 4. HT/HIP → 5. Machining → 6. Inspection
## Selection by strength-to-weight ratio
| Alloy | UTS/density (MPa·cm³/g) | Note |
|---|---|---|
| AlSi10Mg | ~160 | Excellent for lightweight structures |
| Scalmalloy | ~195 | Best Al available in AM |
| Ti-6Al-4V | ~225 | Aerospace benchmark |
| IN718 | ~135 | High density — justified by elevated temperatures |
| 17-4PH | ~155 | High-strength stainless steel |
## Lot-to-Lot Variability and Property Scatter
Inter-lot variability in metal AM is higher than in forged material — and is often underestimated
during the design phase. Do not design to the mean value from data tables: use P10 values
(10th percentile) or apply an explicit knockdown factor.
### Typical variability by alloy (CoV = coefficient of variation)
| Alloy / Condition | UTS CoV | Fatigue CoV | Primary source |
|---|---|---|---|
| **Ti-6Al-4V LPBF as-built** | 510% | 2035% | Variable micro-porosity between builds |
| **Ti-6Al-4V LPBF HIP + machined** | 24% | 815% | HIP drastically reduces scatter |
| **AlSi10Mg LPBF as-built** | 815% | 2540% | Highly sensitive to powder moisture and O₂ |
| **316L LPBF as-built** | 47% | 1525% | Ductile → low UTS scatter, moderate fatigue |
| **17-4PH LPBF H900** | 59% | 1525% | Depends on aging cycle: temperature control critical |
| **IN718 LPBF (full HT)** | 58% | 1828% | Variable carbide distribution between builds |
| **PA12 SLS** | 612% | 2030% | Fresh/recycled powder ratio critical |
| **PA12 FDM** | 1525% | 3050% | Anisotropy + filament moisture |
> Source: aggregated literature (Sames 2016, Lewandowski 2016, Gu 2012, EOS datasheets).
> Fatigue CoV is always >> UTS CoV — fatigue is far more sensitive to localized defects.
### Effect of powder reuse on properties (LPBF metals)
| No. of powder reuses | UTS variation | Elongation variation | Porosity variation | Recommended action |
|---|---|---|---|---|
| 05 | baseline | baseline | baseline | None — normal use |
| 510 | 1 to 3% | 5 to 10% | +0.020.05% | Monitor PSD and chemical composition |
| 1020 | 3 to 8% | 10 to 20% | +0.050.15% | Mandatory coupon testing for structural applications |
| > 20 | Unpredictable | Unpredictable | > 0.2% | Replace powder; unacceptable risk |
**Parameters to monitor for powder:**
- PSD: D10, D50, D90 — deviation > 15% from baseline → sign of degradation
- Satellite content: > 10% → increased gas porosity risk
- Chemical composition (O₂, N₂ especially for Ti): oxygen increase > 0.02% → reduced elongation
- Flowability (Hall flow): > 30 s/50g → risk of non-uniform distribution
### Recommended knockdown factors for design
For robust design, apply knockdowns to nominal table values:
| Application | Knockdown on UTS | Knockdown on fatigue limit |
|---|---|---|
| Functional prototype | 5% | 15% |
| Structural (FS ≥ 2.0) | 10% | 20% |
| Fatigue-critical (FS ≥ 1.5) | 10% | 30% |
| Aerospace / biomedical (certified) | Use values from coupons on the same build plate | Use coupon values + B-basis statistics |
**B-basis (statistics):** value guaranteed at 90% with 95% confidence. For structural aerospace
this is the reference value — not the mean. Requires a minimum of 30 samples to calculate.
---
## Notes on Metal Binder Jetting process
- Shrinkage ~20% linear during sintering — always compensate in CAD (not in slicer)
- Post-sinter tolerances ±0.30.5mm vs ±0.050.1mm for LPBF
- No structural supports during printing (like SLS) → geometric freedom
- Ceramic setters for sintering on cantilevered geometries
- Post-sinter HIP recommended for critical structural applications
- Economically competitive for volumes >3050 parts compared to LPBF
@@ -0,0 +1,48 @@
# Polymer AM Materials
> **Primary database:** `materials-db.json` — contains all structured data (mechanical and thermal properties, print parameters, applications, warnings) for all polymeric materials.
> This file provides qualitative context and usage notes that cannot be structured in JSON.
## How to use the JSON database
```
To select a polymeric material:
1. Filter by T_max_service (field thermal.T_max_service)
2. Filter by available process (field processes)
3. Compare UTS_min/max, elongation, E_min/max
4. Check biocompatible, uv_resistant, chemical_resistance if relevant
5. Use selection_guides.by_application for a quick shortlist
6. Read warnings before proceeding
```
## Qualitative notes by family
### FDM — Standard materials (PLA, PETG, ABS, ASA)
- PLA: entry-level, no temperature, no UV. First choice for rapid prototypes.
- PETG: better than PLA for chemical resistance and toughness. Stringing requires attention to settings.
- ABS/ASA: if HDT >80°C is needed. ASA for outdoor use. Both require an enclosure.
### FDM — Engineering materials (PA12, PC, TPU)
- PA12: excellent toughness, hygroscopic — always pre-dry. Preferred for snap-fits and gears.
- PC: transparent, high HDT. Difficult to print. Consider SLS PA12-GF as an alternative for high temperatures.
- TPU: direct-drive only. Bowden extruder causes severe issues.
### FDM — High-performance (PEEK)
- PEEK is the only choice for T >200°C in FDM. Cost and difficulty are very high.
- Consider PEEK SLS as an alternative (better isotropy but rare machines).
- CF-PEEK increases stiffness but reduces ductility — only if stiffness is the primary driver.
### Continuous fiber composites (Markforged)
- Onyx + continuous CF can achieve UTS comparable to aluminum.
- Hard constraint: Markforged machines only. High cost but avoids metal AM for many structural applications.
### SLS/MJF — Polymer powders
- PA12 SLS: reference standard. Good isotropy, free geometries, no supports.
- PA11: preferred when superior toughness is needed (impact, notches, elongation >40%).
- PA12-MJF: slightly better than SLS for surface finish and throughput. Full-color available.
- TPU SLS: excellent for flexible parts requiring complex geometries (not feasible in FDM).
### SLA/DLP Resins
- Standard: maximum resolution for prototypes and aesthetic parts. Not for load-bearing use.
- High-Temp: only resin option for thermal molds and fixtures.
- Ceramic-filled: multi-step process (printing + debinding + sintering). Shrinkage 20-25% — compensate accordingly.
@@ -0,0 +1,171 @@
# AM Post-Processing — Complete Technical Guide
## Principle: post-processing is part of the process, not an afterthought
In AM, final properties depend on the post-processing sequence as much as on the printing process.
Plan post-processing BEFORE printing (it affects orientation, tolerances, and geometry).
---
## Metal AM — Sequence and Treatments
### General LPBF sequence (mandatory)
```
1. STRESS RELIEF (on the build plate, before any other operation)
2. Removal from build plate (EDM wire cutting / saw / milling)
3. Support removal (manual + tools + milling where necessary)
4. Heat treatment / aging (if required by the material)
5. HIP (if critical application)
6. Post-machining of critical surfaces
7. Surface finishing
8. Inspection / quality control
```
### Stress Relief — Conditions by alloy
| Alloy | Temperature | Time | Atmosphere | Purpose |
|---|---|---|---|---|
| AlSi10Mg | 270300°C | 2h | Air / Argon | Reduce residual stresses; does not alter microstructure |
| Ti-6Al-4V | 600650°C | 24h | Vacuum / Argon | Critical — without this, severe distortions upon removal |
| 316L | 9001050°C | 12h | Vacuum / Argon | Solution annealing + stress relief |
| 17-4PH | 1040°C (solution) + 480°C (H900) | 1h + 1h | Vacuum | Mandatory aging sequence |
| Inconel 718 | 980°C + 720°C + 620°C | 1h + 8h + 8h | Vacuum | Full precipitation hardening sequence |
| Inconel 625 | 1050°C | 2h | Vacuum | Stress relief only, no precipitation |
### HIP (Hot Isostatic Pressing)
- **Purpose:** Closes residual porosity (gas-phase pores, lack of fusion) → mechanical properties closer to wrought material
- **Typical conditions:**
- Ti-6Al-4V: 900°C / 100200 MPa / 24h / Argon
- IN718: 1170°C / 175 MPa / 4h
- AlSi10Mg: 500°C / 100 MPa / 3h (rarely economically justified)
- **When mandatory:** Biomedical (implants), aerospace fatigue-critical, pressure-bearing components
- **Effect on microstructure:** May coarsen the AS-built microstructure → compensate with post-HIP heat treatment
- **Cost:** €5002000/batch depending on size and material
### Post-Machining Metal AM
- Functional surfaces (seats, precision holes, sealing surfaces) → ALWAYS post-machine
- Recommended machining allowance in design phase: 0.51.5mm on critical surfaces
- Techniques: CNC milling, turning, grinding (for critical surfaces), EDM (for hard-to-reach features)
- **Warning:** AM microstructure may differ from wrought material → cutting parameters may vary
---
## Metal Surface Finishing
### Methods and achievable Ra
| Method | Achievable Ra | Cost | Notes |
|---|---|---|---|
| **As-built LPBF** | 525 µm | — | Baseline; depends on orientation |
| **Shot peening** | 38 µm | Low | Introduces surface compression → improves fatigue |
| **Sand/bead blasting** | 310 µm | Low | Uniform finish, matting |
| **Vibratory finishing** | 14 µm | Medium | Good for batches of small parts |
| **Barrel tumbling** | 13 µm | Medium | Parts without sharp edges |
| **Electropolishing** | 0.52 µm | Medium-High | Excellent for 316L; possible for Ti; difficult for Al |
| **CNC machining** | 0.11.6 µm | High | Specific surfaces, accessible geometries |
| **Grinding / lapping** | 0.010.5 µm | High | Sealing surfaces, mating interfaces |
| **Laser polishing** | 15 µm | High | Internal surfaces (channels), inaccessible areas |
| **Chemical etching** | Varies | Low | Removal of oxidised surface layer, especially Ti |
### Shot peening — specific notes
- Significantly improves fatigue resistance (compressive residual stress)
- Standard AMS 2430 for aerospace
- Parameters: shot size S110S230, pressure 24 bar, coverage 100200%
---
## Polymer AM — Post-Processing
### FDM Post-Processing
| Operation | Purpose | Materials | Notes |
|---|---|---|---|
| **Support removal** | Access to geometries | All | Mechanical (pliers/cutters) or dissolution (PVA in water, HIPS in limonene) |
| **Sanding** | Surface finishing | PLA, ABS, ASA, PETG | Grits: 120 → 220 → 400 → 800 progressive; wet sanding for best results |
| **Primer + filler** | Covering layer lines | All | Primer surfacer + sanding before painting |
| **Acetone smoothing** | Partial surface dissolution | ABS ONLY | Ra from ~30µm to ~25µm; caution: modifies dimensions ±0.10.3mm |
| **IPA smoothing (XTC-3D resin)** | Surface encapsulation | All | Adds ~0.30.5mm — account for this in tolerances |
| **Painting** | Aesthetics, UV protection | All (with primer) | Polyurethane or acrylic paints |
| **Annealing** | Reduction of internal stresses, HDT | PLA, PETG, ABS | PLA: 6080°C / 1h; PETG: 80°C / 2h; improves thermal resistance |
| **Heat-set inserts** | Reliable metal threads | All thermoplastics | M2M12; insert with soldering iron/heat station; pull-out strength >>printed thread |
| **Epoxy impregnation** | Impermeability, rigidity | All | Low-viscosity resins (West System, Smooth-On) penetrate the structure |
### SLS / MJF Post-Processing
| Operation | Purpose | Notes |
|---|---|---|
| **Breakout + cleaning** | Remove excess powder | Shot/sand blasting standard; compressed air for internals |
| **Bead blasting** | Uniform finish, improved Ra | Ra from 12µm → 68µm; uniform satin appearance |
| **Dyeing** | Uniform colouring | PA12: excellent dyeing capability (standard black or colours with dedicated dyes); hot process 8095°C |
| **Vibratory finishing** | Ra < 4µm | Good for batches; caution with thin features |
| **SLS coating (e.g. Ceracoat, Duracoat)** | Impermeability + colour | Specific coatings for SLS; slightly increases Ra |
| **Impregnation** | Impermeability | Epoxy resins or low-viscosity cyanoacrylate |
| **Painting** | Aesthetics | With PA-specific primer |
| **Machining** | Critical tolerances | PA12 machines well; watch for cutting heat |
### SLA / DLP / MSLA Post-Processing — MANDATORY
```
MANDATORY SEQUENCE:
1. Removal from the build plate
2. Wash in IPA (1015 min agitation or dedicated washing machine)
→ IPA 90%+ for optimal cleaning
→ Alternative: Form Wash solution or equivalent
3. Air drying (510 min) for IPA evaporation
4. UV post-curing (MANDATORY)
→ 405nm, 9001200 mJ/cm² or follow manufacturer specifications
→ Time: 1560 min depending on resin and part size
→ Elevated temperatures (4060°C) accelerate and improve uniformity
5. Support removal (post-curing for standard resins; pre-curing for flexible resins)
6. Optional finishing: sanding, painting, coating
```
**Warning:** Uncured resin is toxic — mandatory PPE (nitrile gloves, goggles, ventilation)
---
## Ceramic AM — Post-Processing
### SLA/DLP ceramics (Lithoz, 3DCeram)
```
1. Wash (IPA or supplier-specific solvent)
2. UV post-curing (same as standard SLA)
3. Thermal DEBINDING: 200600°C / slow ramp (15°C/min) to eliminate organic binder
→ Critical phase: ramp too fast → cracking
4. PRE-SINTERING (brown body): ~1000°C / 2h → brittle but handleable ceramic
5. Final SINTERING:
→ Alumina: 15501600°C / 2h
→ Zirconia: 14501550°C / 2h
→ Shrinkage: 2025% linear (compensate in CAD)
6. Optional HIP for dense zirconia (density >99.9%)
7. Grinding/lapping for functional surfaces
```
---
## Inspection and Qualification
### Inspection methods for AM parts
| Method | Applies to | Detects | When to use |
|---|---|---|---|
| **Visual + dimensional (CMM)** | All | Dimensions, tolerances | Standard, always |
| **CT scan (tomography)** | Metal AM, ceramics | Internal porosity, cracks, inclusions | Critical parts, biomedical, aerospace |
| **Ultrasound (UT)** | Metals | Cracks, delaminations | Large parts |
| **X-ray radiography** | Metals | Porosity, defects | Cost-effective alternative to CT |
| **Hardness (HV, HRC)** | Metals | Heat treatment state | Verify post-HT |
| **Metallography** | Metals (coupon) | Microstructure, porosity | Initial process qualification |
| **Tensile testing** | All (coupon) | Rm, E, elongation | Batch qualification |
| **Profilometer** | All | Ra, Rz | Verify surface finish |
### Acceptable porosity by application
| Application | Max acceptable porosity |
|---|---|
| Prototypes / non-structural | <5% |
| Structural parts (non-critical) | <1% |
| Fatigue-critical applications | <0.1% (HIP often required) |
| Biomedical (implants) | <0.05% (HIP mandatory) |
| Pressure vessels / sealings | <0.01% → HIP + CT scan |
@@ -0,0 +1,181 @@
# AM Process Parameters — Technical Guide
## Important premise
The parameters listed are **optimized starting points** based on consolidated best practices.
Every machine, material lot, and geometry requires fine-tuning.
**Never use unvalidated parameters on critical parts without preliminary testing (coupons).**
---
## FDM/FFF — Parameters by Material
### General structure of FDM parameters
```
Layer height → Z resolution and speed (2575% nozzle diameter)
Line width → Usually = nozzle diameter (0.4mm standard)
Print speed → mm/s (perimeters < infill < travel)
Temperature:
- Nozzle (T_e) → Material melting
- Bed (T_b) → First layer adhesion, anti-warping
- Chamber (T_c) → Required for high-temperature materials
Cooling fan → Rapid solidification (good for bridging/overhangs, bad for layer adhesion)
Retraction → Stringing prevention
```
### Parameter table by material
| Material | T_nozzle (°C) | T_bed (°C) | T_chamber (°C) | Layer height | Perimeter speed | Cooling | Retraction |
|---|---|---|---|---|---|---|---|
| **PLA** | 195220 | 5065 | — | 0.10.3mm | 4060 mm/s | 100% | 15mm / 2545 mm/s |
| **PETG** | 230250 | 7085 | — | 0.10.3mm | 3550 mm/s | 3050% | 36mm / 2535 mm/s |
| **ABS** | 230250 | 90110 | 4060°C | 0.10.3mm | 4060 mm/s | 010% | 46mm / 2545 mm/s |
| **ASA** | 240260 | 90110 | 4055°C | 0.10.3mm | 3555 mm/s | 1020% | 46mm / 2545 mm/s |
| **PA12** | 240260 | 7090 | 4565°C | 0.10.25mm | 3050 mm/s | 010% | 68mm / 2035 mm/s |
| **PC** | 260290 | 100120 | 6080°C | 0.10.25mm | 3050 mm/s | 010% | 46mm / 2540 mm/s |
| **TPU (Shore 95A)** | 220240 | 3050 | — | 0.150.3mm | 2035 mm/s | 2050% | 02mm (direct) |
| **PEEK** | 360400 | 120140 | 90120°C | 0.10.2mm | 2040 mm/s | 0% | 24mm / 2030 mm/s |
| **CF-filled (PA-CF)** | 250270 | 7090 | 4565°C | 0.150.25mm | 3045 mm/s | 010% | Hardened nozzle required |
### Material-specific FDM notes
**PLA:**
- Fan: always high → improves bridging and overhangs
- Warping: minimal on flat surfaces; avoid air drafts
- Pre-drying: rarely necessary (but recommended for filament >1 year old or stored in humid conditions)
**PETG:**
- High stringing → reduce temperature, increase retraction, increase travel speed
- Excellent bed adhesion on glass + glue stick → may stick too well (use release agent)
- Reduced fan → improves interlayer adhesion
**ABS / ASA:**
- Severe warping without enclosure → do not attempt on open-frame printers for parts >50mm
- Critical first layer: precise bed leveling, first layer speed 2030 mm/s, precise Z offset
- Fumes: mandatory ventilation
**PA (Nylon):**
- **Pre-drying MANDATORY:** 7080°C / 48h before printing (hygroscopic filament)
- Store in dry box during printing
- Warping on large parts → enclosure + brim
**PEEK:**
- Requires all-metal hot end (no PTFE above 260°C)
- Heated enclosure mandatory
- Pre-drying: 120°C / 4h
- Slow cooling after printing (do not open enclosure immediately)
---
## SLA / DLP / MSLA — Parameters
### Main parameters
| Parameter | SLA (laser) | DLP | MSLA |
|---|---|---|---|
| **Layer thickness** | 25100 µm | 25100 µm | 25100 µm |
| **Exposure time (normal layers)** | Depends on laser power | 28 sec | 26 sec |
| **Bottom layers** | 510 | 510 | 510 |
| **Bottom exposure** | 35× normal | 35× normal | 35× normal |
| **Lift speed** | 30150 mm/min | 30200 mm/min | 30200 mm/min |
| **Lift distance** | 58 mm | 47 mm | 47 mm |
| **Anti-aliasing** | N/A | 48× | 48× |
### SLA/DLP practical rules
- **Layer height and detail:** 2550 µm for maximum detail (dental, jewelry); 100 µm for fast prototypes
- **Exposure time:** always calibrate with a test matrix (exposure test) for each resin and lot
- **Over-exposure → loss of detail, oversized dimensions**
- **Under-exposure → layers don't adhere, print failure**
- **FEP film:** replace when cloudy or scratched — causes failures and worse surface quality
- **Resin temperature:** 2530°C optimal; cold resin (<20°C) → more viscous → adhesion problems
---
## SLS / MJF — Process Parameters
### SLS — Main parameters (EOS P396 as reference, PA2200/PA12)
| Parameter | Typical value | Effect |
|---|---|---|
| **Layer thickness** | 100120 µm | Standard; 60 µm for some premium materials |
| **Part bed temperature** | 168172°C (PA12) | Critical: too low → warping; too high → hard cake |
| **Laser power** | 2125 W | Calibrated by manufacturer — do not modify without validation |
| **Scan speed** | 50008000 mm/s | High speed → energy per unit area |
| **Energy density (ED)** | 0.0150.025 J/mm² | ED = Laser power / (scan speed × hatch × layer) |
| **Hatch spacing** | 0.250.35 mm | |
| **Refresh rate (fresh powder)** | 3050% per build | Mixes virgin powder with recycled powder |
### Powder bed temperature — the most critical SLS parameter
- **Operating window:** ±2°C from the optimal point
- Too cold → distortions, curl, delaminations (curl effect)
- Too hot → excessive cake, lost detail, powder difficult to separate
- The chamber heating and cooling profile affects quality → follow manufacturer curve
### MJF (HP) — Differences vs SLS
- Faster process (single pass of agents + IR fusion)
- **Key parameters:** controlled by HP — less parameter freedom for the user vs SLS
- User parameters: orientation, nesting, packing density
- **Optimal packing density:** 812% for PA12 (impacts mechanical properties)
---
## LPBF / DMLS — Process Parameters
### Fundamental LPBF parameters
| Parameter | Symbol | Unit | Role |
|---|---|---|---|
| **Laser power** | P | W | Total available energy |
| **Scan speed** | v | mm/s | Beam travel speed |
| **Hatch spacing** | h | µm | Distance between adjacent passes |
| **Layer thickness** | t | µm | Powder layer thickness |
| **Energy Density (VED)** | E = P/(v×h×t) | J/mm³ | Synthetic indicator — not sufficient alone |
### Typical values by alloy (reference EOS M290 / SLM Solutions 125HL)
| Alloy | P (W) | v (mm/s) | h (µm) | t (µm) | VED (J/mm³) |
|---|---|---|---|---|---|
| **AlSi10Mg** | 340370 | 13001600 | 130190 | 30 | 4065 |
| **Ti-6Al-4V** | 175280 | 10001300 | 100140 | 30 | 5090 |
| **316L** | 200280 | 7001000 | 100150 | 40 | 60100 |
| **17-4PH** | 200260 | 8001100 | 100150 | 40 | 5590 |
| **Inconel 718** | 200285 | 8001000 | 100130 | 40 | 65110 |
| **Inconel 625** | 200250 | 8001100 | 100140 | 40 | 5590 |
**Note:** These are indicative ranges. Every machine and powder lot requires optimized parameters. The machine manufacturer provides certified parameters — use those as the baseline.
### Scan strategies
| Strategy | Description | Use |
|---|---|---|
| **Alternating stripes** | Alternating bands at 90° layer by layer | Standard, isotropic |
| **Chessboard** | Checkerboard with rotation | Reduces distortion on large parts |
| **Island scanning** | Random islands | Reduces residual stresses, large parts |
| **Contour + infill** | Perimeter + fill separately | Improves surface Ra (slow, precise contour) |
| **Rotation per layer** | Angle rotation (e.g. 67°) each layer | Improves isotropy, modern standard |
### Atmosphere parameters
- **Inert gas:** Argon or Nitrogen (AlSi10Mg prefers Nitrogen; Ti and superalloys → Argon)
- **O₂ target:** < 0.10.5% vol (depends on machine and material)
- **High O₂:** powder oxidation → inclusions → degraded mechanical properties
### Build orientation and nesting parameters
- **Build height:** minimize → less time, less gas consumption, less risk of distortion
- **Nesting:** optimize chamber fill to reduce cost per part
- **Distance between parts:** ≥ 5mm (powder must flow between parts)
---
## Parameter → Defect Correlation
| Defect | Probable cause | Correction |
|---|---|---|
| **Gas porosity (spherical)** | Dissolved gas in powder, moisture | Powder pre-drying, gas purity |
| **Lack-of-fusion porosity (irregular)** | VED too low | Increase P, reduce v or h |
| **Solidification cracking** | Susceptible alloy, excessive VED | Reduce VED, modify strategy |
| **Warping / distortion** | Residual stresses, inadequate supports | Optimize orientation, stress relief |
| **Balling** | v too high, oxidized surface | Reduce v, check atmosphere |
| **Delamination** | t too high, P too low | Reduce layer thickness, increase P |
| **Stringing (FDM)** | T too high, insufficient retraction | Reduce T, increase retraction |
| **Warping FDM** | Low bed temperature, no enclosure | Increase bed temperature, enclosure, brim |
| **Visible layer lines SLA** | Layer height too high | Reduce to 2550µm, post-sanding |
@@ -0,0 +1,205 @@
# Residual Stress and Distortion — Additive Manufacturing
> Use this file when:
> - The designer asks why a part distorted after printing or after removal from the build plate
> - Choosing the scan strategy or planning the heat treatment
> - Quantifying the risk of distortion before printing
> - Deciding whether to perform stress relief on the build plate or in a separate furnace
---
## 1. Origin of Residual Stresses in AM
### Mechanism — why they form
In LPBF each layer is melted rapidly (ms) and cooled equally rapidly while the underlying layers are already solidified. This creates an **enormous vertical thermal gradient** (10³–10⁵ °C/mm), resulting in:
1. Melted layer tries to expand → constrained by the solid material below → compresses laterally
2. Layer solidifies in a compressed state
3. On cooling, the layer wants to contract but is constrained → results in **tension at the surface + compression at the core**
```
Typical LPBF stress profile (cross-section):
Top surface: σ_tension (+ 200600 MPa)
Central core: σ_compression (- 100400 MPa)
Bottom/build plate: high σ_tension (mechanical anchoring)
```
**When the part is removed from the build plate:** the equilibrium is broken → the part distorts.
### Quantitative values by alloy
| Alloy | σ_residual max as-built (MPa) | Typical distortion (mm/100mm) | Cracking risk |
|---|---|---|---|
| **Ti-6Al-4V LPBF** | 500900 | 0.52.0 | High (brittle, low HRC) |
| **AlSi10Mg LPBF** | 150300 | 0.31.5 | Moderate |
| **316L LPBF** | 300600 | 0.31.0 | Low (ductile) |
| **17-4PH LPBF** | 400700 | 0.51.5 | Moderatehigh |
| **IN718 LPBF** | 6001000 | 0.52.5 | High (constrained zones) |
| **IN625 LPBF** | 400700 | 0.31.5 | Moderate |
| **CoCr LPBF** | 500800 | 0.51.8 | Moderate |
| **FDM PA12** | 520 | 0.10.5 | Negligible |
| **SLS PA12** | 210 | < 0.1 | Negligible |
> **Note:** distortion values refer to flat geometries (100×100×10mm). Asymmetric geometries with variable thicknesses or high L/t ratio can distort 35× more.
---
## 2. Scan Strategy and Stress Reduction
The scan strategy is the most immediate lever for reducing residual stresses during printing — with no additional cost.
### Main strategies and impact
| Strategy | σ_res reduction vs. unidirectional | Notes |
|---|---|---|
| **Unidirectional (baseline)** | 0% (reference) | Worst case — directional accumulation |
| **Alternating 90° each layer** | 15 to 25% | Minimum standard — simple to implement |
| **67° rotation each layer** | 25 to 40% | Pseudo-random → more uniform distribution; recommended as default |
| **Island scanning (5×5 or 7×7mm)** | 30 to 50% | Reduces local peak gradient; mandatory for IN718 and high-constraint geometries |
| **Stripe scanning** | 20 to 35% | Good for elongated parts |
| **Contour + hatch** | 10 to 20% on surface | Standard for roughness; does not significantly affect bulk |
**Default recommendation:** 67° rotation/layer. For IN718 or critical geometries: island scanning 5×5mm + 67° rotation.
### Parameters that worsen stresses
- **Low layer thickness** (< 20 µm): more thermal cycles per unit volume → more stress
- **High VED** (> 80 J/mm³): larger melt zone, greater gradient
- **Very thick sections** adjacent to thin sections: differential shrinkage → distortion concentrated at the transition
- **Cold build plate** (< preheat temperature): thermal shock at the first layer
---
## 3. Stress Relief — Parameters by Alloy
Stress relief **on the build plate** (before removing the part) is the correct sequence: the build plate constrains distortion during the heat treatment.
### Parameters
| Alloy | Temperature (°C) | Time (h) | Atmosphere | Notes |
|---|---|---|---|---|
| **Ti-6Al-4V** | 650730 | 24 | Vacuum or Ar | > 750°C → phase transformation → loss of properties |
| **AlSi10Mg** | 270300 | 24 | Air or N₂ | > 310°C → precipitate coarsening → UTS 15% |
| **316L** | 450550 | 12 | Ar or vacuum | Sensitization risk > 650°C |
| **17-4PH** | 325350 | 12 | Ar or vacuum | Stress relief separate from aging (H900 = 480°C) |
| **IN718** | 900950 | 12 | Vacuum or Ar | Stress relief only — then full solution annealing cycle |
| **IN625** | 870900 | 12 | Vacuum or Ar | |
| **CoCr** | 800850 | 12 | Vacuum | |
**Heating and cooling ramps:** max 510°C/min to avoid thermal shock → cracking in constrained zones.
**Effectiveness:** after correct stress relief, σ_res is reduced by **6080%** compared to as-built. Post-removal distortion is reduced correspondingly.
---
## 4. HIP — Effect on Residual Stresses
HIP (Hot Isostatic Pressing) virtually eliminates residual stresses:
| Parameter | Typical value |
|---|---|
| HIP temperature (Ti) | 900920°C |
| HIP temperature (Al) | 500515°C |
| HIP temperature (stainless steels) | 11001150°C |
| HIP temperature (superalloys) | 11001200°C |
| Pressure | 100200 MPa (Ar) |
| Time | 24 hours |
| σ_res residual post-HIP | < 50 MPa (near zero) |
| Anisotropy reduction Z/XY (Ti) | From 0.600.75 → 0.920.98 |
> **Dimensional note:** HIP causes dimensional variation of ±0.050.2mm for complex geometries (hot plastic deformation under isostatic pressure). Allow 0.3mm stock allowance for surfaces requiring machining after HIP.
---
## 5. Distortion — Prediction and Compensation
### High-risk geometries
```
Long, thin parts (L/t > 10):
→ Arc distortion along the long axis
→ Solution: orient the long axis along Z, or add ribs
Vertical thin walls (t < 2mm, h > 30mm):
→ Surface waviness, deviation from vertical
→ Solution: stiffening ribs every 2030mm, or angled printing
Sections with abrupt thickness changes (factor > 3×):
→ Distortion concentration at the transition
→ Solution: progressive transition fillets
Geometries with internal geometric constraint (frames, grids):
→ Multiple stresses that add up → cracking risk in IN718, IN625
→ Solution: island scanning + aggressive stress relief
Heavy build plate vs light part:
→ Warping of the part upward (compressive stress at the bottom)
→ Solution: tall uniform supports, CAD pre-deformation
```
### CAD compensation (morphing)
For parts with tight tolerances (±0.1mm) and distortion-prone geometries:
1. Simulate distortion with AM software (Ansys Additive, Simufact, Netfabb)
2. Apply the inverse deformation in CAD (pre-compensation)
3. The part prints already distorted in the opposite direction → straightens to the final cost
**Simulation accuracy:** ±50% of the real value — useful as a guide, not as a substitute for stress relief.
---
## 6. Process Indicators: When to Be Concerned
| Signal | Probable cause | Action |
|---|---|---|
| Delamination during printing | Residual stresses > interlayer strength (high constraint, no preheating) | Stop build. Revise scan strategy and preheating. |
| Part visibly distorts on removal from plate | Stress relief missing or at too low a temperature | Mandatory stress relief before removal |
| Supports break during build | Distortion force > support strength | Increase support density or add tie-bars |
| Visible cracking after stress relief | Ramp too fast, or temperature too high for the alloy | Reduce ramp to 3°C/min; revise temperature for the specific alloy |
| Holes or fits out of tolerance | Distortion + shrinkage not compensated | CAD pre-compensation + stress relief + final machining |
---
## 7. Correct Sequence — Integration with Post-Processing
```
AM printing completed (part still on build plate)
Stress Relief ON BUILD PLATE (T and time from table in section 3)
→ The build plate constrains distortion during treatment
→ MANDATORY for all metallic LPBF alloys
Removal from build plate (EDM wire or saw)
→ Residual distortion after stress relief: <<< as-built
HIP if critical application (section 4)
σ_res → near zero | closed porosity | reduced anisotropy
→ Post-HIP: re-check dimensions (±0.1mm)
Specific heat treatment (aging 17-4PH H900, double aging IN718...)
Support removal
CNC Machining of critical surfaces (after all treatments)
Shot Peening (introduces controlled σ_compression on surface)
→ Beneficial for fatigue but NOT before HIP
Final inspection (CMM + CT scan)
```
---
## 8. EBM — Comparison with LPBF on Residual Stresses
EBM (Electron Beam Melting) operates in a chamber preheated to 600900°C → thermal gradients are drastically reduced.
| Parameter | LPBF | EBM |
|---|---|---|
| σ_res as-built | 300900 MPa | **50150 MPa** |
| Typical distortion | 0.32.0 mm/100mm | **0.050.3 mm/100mm** |
| Stress relief mandatory? | Yes | Often not necessary (evaluate case by case) |
| Ra as-built | 820 µm | 2035 µm (higher, offset by reduced stress) |
**Indication:** for Ti-6Al-4V biomedical with complex geometries → EBM preferable to LPBF for residual stresses, even though as-built Ra is worse.
@@ -0,0 +1,172 @@
# Supports in AM — Technical Guide by Process
## General Principle
Supports serve to:
1. **Anchor the part** to the build plate (prevent thermal distortions — critical in metal AM)
2. **Support overhangs** beyond the critical angle of the process
3. **Dissipate heat** during printing (especially LPBF)
---
## FDM/FFF — Polymer Supports
### When they are needed
- Overhang angles > 45° from vertical
- Bridges (bridging) > 5060mm (depends on material and cooling)
- Horizontal holes > ø5mm
### FDM support types
| Type | Material | Removal | Finish | Use |
|---|---|---|---|---|
| **Normal (same material)** | = part | Mechanical | High Ra at interface | Default, low cost |
| **Soluble PVA support** | PVA | Dissolution in water | Excellent | Complex geometries, internal features |
| **Soluble HIPS support** | HIPS | Dissolution in limonene | Excellent | Mainly for ABS |
| **Soluble Breakaway support** | Special (Ultimaker, Bambu) | Snap-off | Good | Moderate geometries |
### FDM support patterns
- **Lines/Grid:** Standard, easy to remove, adequate for most cases
- **Tree supports (organic):** Minimise contact with the part, excellent finish → recommended for aesthetic parts
- **Custom supports (manual):** For critical parts where the interface is not accessible
### Critical FDM support parameters
| Parameter | Typical value | Effect |
|---|---|---|
| **Support Z distance** | 0.150.25mm | Higher → easier removal but worse finish |
| **Support XY distance** | 0.51.0mm | Lateral distance from the part |
| **Interface layers** | 35 layers | Layers between support and part — use different pattern (e.g. lines) |
| **Support density** | 1020% | Do not increase beyond this: unnecessary and makes removal harder |
| **Support roof/floor layers** | 24 | More layers → smoother surface under part |
### Orientation to minimise FDM supports
- Rotate the part to bring critical surfaces (aesthetics, tolerances) to the top (top surface = best quality)
- Exploit **bridging:** FDM can bridge linearly up to 5080mm with good cooling — position horizontal holes on bridges
---
## SLA / DLP / MSLA — Resin Supports
### Particularity: inverted printing
The part hangs from the build plate — peeling forces at each layer generate stresses. Supports must:
- Anchor the part to the build plate (or raft)
- Resist peeling forces (critical for flat geometries)
### SLA support types
| Type | Tip diameter | Use |
|---|---|---|
| **Light** | 0.30.4mm | Aesthetic surfaces, fine detail |
| **Medium** | 0.50.6mm | Standard |
| **Heavy** | 0.81.0mm | Heavy parts, large surfaces |
### SLA rules
- **Raft:** Almost always necessary for medium/large parts (distributes peeling forces)
- **Tilt angle:** Tilting the part 1530° drastically reduces supports and improves exposure uniformity
- **Islands:** Any surface disconnected from the main part requires support
- **Touchpoint:** Reduce touchpoint density on visible surfaces — prefer supports on hidden surfaces
### Post-removal SLA
- Remove supports BEFORE post-curing if possible (uncured resin is more brittle → support breaks more easily)
- Exceptions: flexible resins → remove AFTER curing
---
## SLS / MJF — No Structural Supports
### Why SLS/MJF do not require supports
The surrounding unsintered powder supports the part during the build. This is the main advantage of SLS/MJF over FDM/LPBF.
### What still needs to be managed
- **Powder escape holes:** MANDATORY for closed cavities (≥ ø5mm, ideally 2 opposite holes to avoid pockets)
- **Powder trapped in narrow channels:** Internal channels < ø4mm can retain powder — design with exit ports or use ø≥5mm
- **Packing density:** The packing density in the build chamber affects distortions — consult the service provider
---
## LPBF / DMLS / SLM — Metal Supports
### Specific functions for metal AM
1. **Thermal anchoring:** The part heats and cools cyclically — without adequate support it distorts or detaches from the build plate
2. **Heat sink:** Supports conduct heat towards the build plate (critical for alloys with high thermal conductivity such as AlSi10Mg)
3. **Mechanical support:** Overhangs > 45°
### LPBF support types
| Type | Structure | Removal | Use |
|---|---|---|---|
| **Block support** | Solid | Difficult, milling required | Very heavy parts, high heat |
| **Contour support** | Hollow shell | Medium difficulty | Standard |
| **Tree/Branch support** | Branched tree | Easier | Accessible aesthetic surfaces |
| **Lattice support** | Lattice | Easy (break-off) | Modern standard — recommended |
| **Cone support** | Conical | Easy | Single points, complex geometries |
### Critical LPBF support parameters
| Parameter | Typical value | Importance |
|---|---|---|
| **Top Z offset** | -0.1 to +0.05mm | Critical: too much gap → detachment; too much overlap → irremovable support |
| **Bottom Z offset** | 0.00.1mm | Interface with build plate |
| **Tooth height (perforated)** | 0.51.0mm | Facilitates removal while maintaining anchoring |
| **Perforated support** | Yes for critical surfaces | Reduces marking on the surface |
| **Lattice density** | 3050% | Trade-off between heat dissipation and ease of removal |
| **XY support offset** | 0.050.2mm | Gap between support and part — critical for removal |
### Orientation to minimise LPBF supports
- **Main rule:** Orient the build axis to minimise horizontal downward-facing surfaces
- **Critical angles:** < 30° from horizontal → always support; 3045° → evaluate case by case
- **Trade-off:** Anti-support orientation may increase distortions or worsen metallurgy on critical surfaces
### Strategy for critical surfaces (tolerances, Ra)
- Surfaces with tight tolerances (±0.05mm) → orient in the XY plane (not Z) AND plan for post-machining
- Sealing/mating surfaces → do not place supports on them — if unavoidable, use perforated supports + machining
### Material-specific notes for LPBF supports
| Alloy | Support criticality | Specific notes |
|---|---|---|
| AlSi10Mg | High (high conductivity, low melting point) | Dense supports mandatory; stress relief before removal |
| Ti-6Al-4V | Medium | Supports in same material; HT before removal |
| 316L | Low-Medium | Relatively easier to manage |
| Inconel 718/625 | High (high T, thermal gradients) | Very dense supports; significant distortions |
| 17-4PH | Medium | Stress relief critical before removal |
### MANDATORY sequence for metal AM with supports
1. Print
2. **Thermal stress relief** (before removing from build plate and before supports)
3. Removal from build plate (EDM wire or saw)
4. Support removal (manual + tools + milling where necessary)
5. Heat treatment (if required — e.g. 17-4PH H900, IN718 aging)
6. HIP (if required)
7. Post-machining of critical surfaces
8. Inspection
---
## EBM — Lightweight Supports
- EBM operates in vacuum with powder pre-heating → thermal gradients much lower than LPBF
- **Supports needed but less critical:** Often only lightweight anchoring structures (mesh)
- Critical angle ~35° (better than LPBF due to lower thermal gradient)
- Support removal: mechanical, easier than LPBF
---
## Binder Jetting — No Supports (green state)
- The powder acts as support during the printing phase (like SLS)
- **Watch out for sintering phase:** The part may collapse if overhang geometries are excessive → plan ceramic setters or custom sintering supports
- Internal channels: verify they can be cleared after sintering
---
## Support Checklist — Pre-Build
- [ ] Are all overhangs beyond the critical angle of the process supported?
- [ ] Do critical surfaces (tolerances, Ra) avoid contact with supports, or is machining planned?
- [ ] For LPBF: is stress relief planned BEFORE support removal?
- [ ] For SLS/MJF: are powder escape holes present on all closed cavities?
- [ ] Is support removal accessible (physical access with tools)?
- [ ] Do supports not interfere with functional features (holes, sealing surfaces)?
- [ ] For complex parts: has a removability test been run in simulation (e.g. Magics)?
@@ -0,0 +1,343 @@
#!/usr/bin/env python3
"""
AM Post-Processing Route Planner
Given a process, material, and target Ra, generates the optimal post-processing sequence.
Usage: python3 postprocess_route.py --material AlSi10Mg --Ra 0.8 --use medical
"""
import json, argparse, sys
from pathlib import Path
DB_PATH = Path(__file__).parent.parent / "references" / "materials-db.json"
# Post-processing data by process — material-independent
POSTPROCESS_CATALOG = {
# --- Physical abrasive methods ---
"bead_blast": {
"label": "Bead/Sand Blasting",
"Ra_achievable": (3, 8),
"applies_to_processes": ["LPBF", "EBM", "SLS", "MJF", "BJT"],
"time_h": 0.1,
"cost_relative": 1,
"note": "Uniform matte finish. Typical prerequisite for other treatments.",
"sequence_priority": 1
},
"vibratory": {
"label": "Vibratory/Barrel Finishing",
"Ra_achievable": (1.5, 5),
"applies_to_processes": ["LPBF", "SLS", "MJF", "BJT"],
"time_h": 2,
"cost_relative": 2,
"note": "Good for batches. Watch thin features (<1mm).",
"sequence_priority": 2
},
"shot_peen": {
"label": "Shot Peening",
"Ra_achievable": (3, 8),
"applies_to_processes": ["LPBF", "EBM"],
"time_h": 0.5,
"cost_relative": 2,
"note": "Introduces compressive residual stress -> improves fatigue by 20-40%. AMS 2430 for aerospace.",
"sequence_priority": 2,
"functional_benefit": "fatigue_improvement"
},
"machining_CNC": {
"label": "CNC machining (milling/turning)",
"Ra_achievable": (0.4, 1.6),
"applies_to_processes": ["LPBF", "EBM", "SLS", "BJT", "FDM"],
"time_h": 1,
"cost_relative": 4,
"note": "For accessible specific surfaces. Machining stock must be planned in design (0.5-1.5mm).",
"sequence_priority": 3
},
"grinding": {
"label": "Grinding",
"Ra_achievable": (0.1, 0.4),
"applies_to_processes": ["LPBF", "EBM", "BJT"],
"applies_to_materials": ["17-4PH", "IN718", "CoCr", "316L"],
"time_h": 2,
"cost_relative": 5,
"note": "For flat sealing surfaces or precision fits.",
"sequence_priority": 4
},
"lapping_polishing": {
"label": "Lapping / Polishing",
"Ra_achievable": (0.025, 0.2),
"applies_to_processes": ["LPBF", "EBM", "SLA", "DLP"],
"time_h": 3,
"cost_relative": 6,
"note": "For Ra <0.2um. Surgical surfaces, precision seals, optics.",
"sequence_priority": 5
},
"electropolish": {
"label": "Electropolishing",
"Ra_achievable": (0.2, 1.5),
"applies_to_processes": ["LPBF", "BJT"],
"applies_to_materials": ["316L", "17-4PH", "Ti-6Al-4V", "IN625", "IN718"],
"time_h": 1,
"cost_relative": 3,
"note": "Excellent for 316L (food/medical). Variable results on Ti. Not recommended on Al.",
"sequence_priority": 3,
"functional_benefit": "corrosion_resistance"
},
"passivation": {
"label": "Passivation (nitric/citric acid)",
"Ra_achievable": None,
"applies_to_processes": ["LPBF", "BJT"],
"applies_to_materials": ["316L", "17-4PH", "15-5PH"],
"time_h": 0.5,
"cost_relative": 1,
"note": "Does not change Ra. Restores passive layer and improves corrosion resistance.",
"sequence_priority": 5,
"functional_benefit": "corrosion_resistance"
},
"anodizing": {
"label": "Anodizing",
"Ra_achievable": None,
"applies_to_processes": ["LPBF"],
"applies_to_materials": ["AlSi10Mg", "Scalmalloy"],
"time_h": 1,
"cost_relative": 2,
"note": "Does not change Ra. Protection, color, and surface hardness for Al.",
"sequence_priority": 5,
"functional_benefit": "surface_protection"
},
"sanding": {
"label": "Manual sanding (abrasive paper)",
"Ra_achievable": (0.4, 4),
"applies_to_processes": ["FDM", "SLA", "DLP"],
"time_h": 0.5,
"cost_relative": 1,
"grit_sequence": "120 -> 240 -> 400 -> 800 -> 1200 for Ra <1um",
"note": "Low cost. Labor-intensive. Not suitable for complex geometries.",
"sequence_priority": 2
},
"acetone_smoothing": {
"label": "Acetone smoothing (ABS only)",
"Ra_achievable": (1.5, 5),
"applies_to_processes": ["FDM"],
"applies_to_materials": ["ABS"],
"time_h": 0.3,
"cost_relative": 1,
"note": "ABS ONLY. Changes dimensions by +/-0.1-0.3mm; account for tolerances. Toxic vapors.",
"sequence_priority": 2
},
"IPA_wash_UV_cure": {
"label": "IPA Wash + UV Post-Curing",
"Ra_achievable": (1, 6),
"applies_to_processes": ["SLA", "DLP", "MSLA"],
"time_h": 0.5,
"cost_relative": 1,
"note": "MANDATORY for resins. IPA 10-15min + UV 900-1200 mJ/cm^2.",
"sequence_priority": 1,
"mandatory": True
},
"dyeing_SLS": {
"label": "Dyeing - SLS/MJF",
"Ra_achievable": None,
"applies_to_processes": ["SLS", "MJF"],
"time_h": 1,
"cost_relative": 1,
"note": "Does not change Ra. Uniform PA12 coloration. Hot process at 80-95C.",
"sequence_priority": 3,
"functional_benefit": "aesthetics"
},
"SLS_coating": {
"label": "SLS Coating (Ceracoat, Duracoat)",
"Ra_achievable": (3, 6),
"applies_to_processes": ["SLS"],
"time_h": 0.5,
"cost_relative": 2,
"note": "Sealing + uniform color for PA12 SLS.",
"sequence_priority": 4
},
"HIP": {
"label": "HIP (Hot Isostatic Pressing)",
"Ra_achievable": None,
"applies_to_processes": ["LPBF", "EBM", "BJT"],
"time_h": 8,
"cost_relative": 8,
"note": "Closes internal porosity (<0.1%). Mandatory for biomedical and fatigue-critical parts. 900C / 150MPa / 3h (Ti).",
"sequence_priority": 2,
"functional_benefit": "density_porosity"
}
}
def load_db():
with open(DB_PATH) as f:
return json.load(f)
def find_material(mat_id, db):
for m in db['polymers'] + db['metals']:
if m['id'].lower() == mat_id.lower():
return m
return None
def plan_route(mat_id, Ra_target, process, use_case=None):
db = load_db()
mat = find_material(mat_id, db)
if not mat:
avail = [m['id'] for m in db['polymers']+db['metals']]
return None, f"Material '{mat_id}' not found. Available: {', '.join(avail)}"
ra_data = mat.get('surface_roughness', {})
Ra_asbuilt = ra_data.get('Ra_asbuilt_typical', 50)
postproc_achievable = ra_data.get('postprocess_achievable', {})
mat_process = mat.get('processes', [process])
route = []
reasoning = []
# Step 1: mandatory process steps
if any(p in ['SLA','DLP','MSLA'] for p in mat_process):
route.append({
"step": 1, "operation": "IPA Wash + UV Post-Curing",
"conditions": "IPA 90%+ / 10-15 min agitation; UV 405nm / 900-1200 mJ/cm^2",
"Ra_after": Ra_asbuilt, "mandatory": True, "reason": "MANDATORY for resins -> final mechanical properties"
})
# Step 2: stress relief (metalli)
if any(p in ['LPBF','EBM','BJT'] for p in mat_process):
ht = mat.get('heat_treatment', {})
sr = ht.get('stress_relief', {})
if sr:
route.append({
"step": len(route)+1, "operation": "Stress Relief termico",
"conditions": f"{sr.get('temp_C','?')}°C / {sr.get('time_h','?')}h / {sr.get('atmosphere','?')}",
"Ra_after": Ra_asbuilt, "mandatory": sr.get('mandatory', True),
"reason": sr.get('timing', "Before removal from build plate") + " -> reduces residual stress and prevents distortion"
})
# Step 3: HIP if required by use case
if use_case in ['biomedical', 'fatigue_critical', 'pressure_vessel']:
if any(p in ['LPBF','EBM'] for p in mat_process):
route.append({
"step": len(route)+1, "operation": "HIP (Hot Isostatic Pressing)",
"conditions": "~900C / 150 MPa / 3h / Argon (Ti); consult supplier for other materials",
"Ra_after": Ra_asbuilt, "mandatory": True,
"reason": f"Mandatory for {use_case} -> closes porosity <0.1%, uniform properties"
})
# Step 4: specific heat treatment
ht = mat.get('heat_treatment', {})
for ht_key, ht_val in ht.items():
if isinstance(ht_val, dict) and ht_val.get('mandatory', False):
if ht_key not in ['stress_relief']:
route.append({
"step": len(route)+1, "operation": f"Heat Treatment: {ht_key.replace('_',' ').title()}",
"conditions": f"{ht_val.get('temp_C','?')}°C / {ht_val.get('time_h','?')}h / {ht_val.get('atmosphere','?')}",
"Ra_after": Ra_asbuilt, "mandatory": True,
"reason": ht_val.get('warning', ht_val.get('note', 'Required for final mechanical properties'))
})
# Step 5: support removal (if required)
if mat.get('flags', {}).get('supports_needed', False):
route.append({
"step": len(route)+1, "operation": "Support removal",
"conditions": "Mechanical (pliers, cutters) + milling for metal supports. EDM for hard-to-access areas.",
"Ra_after": Ra_asbuilt, "mandatory": True,
"reason": "After heat treatment for metals -> NOT before stress relief"
})
# Step 6: Ra route
Ra_current = Ra_asbuilt
if Ra_target and Ra_current > Ra_target:
reasoning.append(f"Ra as-built: {Ra_asbuilt}µm → target: {Ra_target}µm → delta: {Ra_asbuilt-Ra_target:.1f}µm")
# Choose optimal strategy
candidates = []
for method, vals in postproc_achievable.items():
if isinstance(vals, dict) and 'Ra_min' in vals:
if vals['Ra_min'] <= Ra_target:
candidates.append((method, vals['Ra_min'], vals))
# Sort by increasing cost
cost_map = {m: POSTPROCESS_CATALOG.get(m, {}).get('cost_relative', 3) for m, _, _ in candidates}
candidates.sort(key=lambda x: cost_map.get(x[0], 3))
if candidates:
best_method, best_Ra_min, best_vals = candidates[0]
catalog_entry = POSTPROCESS_CATALOG.get(best_method, {})
route.append({
"step": len(route)+1,
"operation": catalog_entry.get('label', best_method.replace('_',' ').title()),
"conditions": catalog_entry.get('grit_sequence', catalog_entry.get('note', '')),
"Ra_after": best_Ra_min,
"mandatory": False,
"reason": f"Required to reach target Ra {Ra_target}um (as-built: {Ra_asbuilt}um). Alternative: {candidates[1][0] if len(candidates)>1 else 'none'}"
})
Ra_current = best_Ra_min
else:
reasoning.append(f"WARNING: target Ra {Ra_target}um is not reachable with standard post-processing for {mat_id}")
# Step 7: additional functional treatments by use case
if use_case == 'food_contact' and mat_id in ['316L']:
route.append({
"step": len(route)+1, "operation": "Electropolishing + Passivation",
"conditions": "Electropolish in perchloric/acetic acid; nitric passivation 20-25%",
"Ra_after": 0.5, "mandatory": True,
"reason": "Mandatory for food-contact -> Ra <0.8um + intact passive layer (FDA/EHEDG)"
})
elif use_case == 'biomedical' and mat_id in ['316L', 'Ti-6Al-4V']:
route.append({
"step": len(route)+1, "operation": "Electropolishing + Biomedical passivation",
"conditions": "ASTM F86 or equivalent. Ra <0.8um for contact surfaces.",
"Ra_after": 0.4, "mandatory": True,
"reason": "Biomedical standard -> biofilm prevention, controlled cell adhesion"
})
# Final step: inspection
if use_case in ['biomedical', 'fatigue_critical', 'aerospace', 'pressure_vessel']:
route.append({
"step": len(route)+1, "operation": "Quality inspection",
"conditions": "CT scan (porosity) + CMM (dimensions) + hardness test" + (" + FPI (cracks)" if use_case in ['fatigue_critical','aerospace'] else ""),
"Ra_after": Ra_current, "mandatory": True,
"reason": f"Mandatory qualification for {use_case} application"
})
return route, reasoning
def print_route(mat_id, route, reasoning, Ra_target):
print("\n" + "="*70)
print(f" POST-PROCESSING ROUTE — {mat_id}")
if Ra_target:
print(f" Target Ra: {Ra_target} µm")
print("="*70)
if reasoning:
print("\n Notes:")
for r in reasoning:
print(f" {r}")
print(f"\n Sequence ({len(route)} steps):")
for step in route:
flag = " [MANDATORY]" if step.get('mandatory') else " [recommended]"
print(f"\n STEP {step['step']}: {step['operation']}{flag}")
if step.get('conditions'):
print(f" Conditions: {step['conditions']}")
if step.get('Ra_after') and Ra_target:
print(f" Ra after: ~{step['Ra_after']} µm")
print(f" Why: {step['reason']}")
print("\n" + "="*70 + "\n")
def main():
parser = argparse.ArgumentParser(description="AM Post-Processing Route Planner")
parser.add_argument('--material', required=True, help="Material ID (e.g. AlSi10Mg, Ti-6Al-4V, PA12-SLS)")
parser.add_argument('--Ra', type=float, help="Final target Ra (µm)")
parser.add_argument('--process', default='LPBF',help="AM process used")
parser.add_argument('--use', help="Application: biomedical, food_contact, aerospace, fatigue_critical, pressure_vessel")
parser.add_argument('--json', action='store_true', help="JSON output")
args = parser.parse_args()
route, reasoning = plan_route(args.material, args.Ra, args.process, args.use)
if route is None:
print(f"ERROR: {reasoning}")
sys.exit(1)
if args.json:
import json as _json
print(_json.dumps({'material': args.material, 'Ra_target': args.Ra, 'route': route, 'notes': reasoning}, indent=2))
else:
print_route(args.material, route, reasoning, args.Ra)
if __name__ == '__main__':
main()
@@ -0,0 +1,280 @@
#!/usr/bin/env python3
"""
AM Material Selector — Additive Manufacturing Expert Skill
Filters and ranks materials from the database based on engineering requirements.
Usage: python3 select_material.py --help
"""
import json, argparse, sys
from pathlib import Path
DB_PATH = Path(__file__).parent.parent / "references" / "materials-db.json"
def load_db():
with open(DB_PATH) as f:
return json.load(f)
def parse_range(val):
"""Converts 'min-max' or a single number into (min, max)."""
if val is None:
return None, None
s = str(val)
if '-' in s:
parts = s.split('-')
return float(parts[0]), float(parts[1])
return float(s), float('inf')
def score_material(mat, req):
"""Computes a 0-100 score for a material against requirements. Returns (score, reasons, disqualified)."""
score = 100
reasons = []
disqualified = []
mech = mat.get('mechanical', {})
thermal = mat.get('thermal', {})
flags = mat.get('flags', {})
ra = mat.get('surface_roughness', {})
# --- ELIMINATION FILTERS ---
# Service temperature
if req.get('T_service'):
T = req['T_service']
T_max = thermal.get('T_max_service', 9999)
if isinstance(T_max, str):
T_max = float(T_max.replace('>','').replace('~',''))
if T_max < T:
disqualified.append(f"T_max_service={T_max}°C < required {T}°C")
# Process
if req.get('process'):
proc = req['process'].upper()
mat_procs = [p.upper() for p in mat.get('processes', [])]
if not any(proc in p or p in proc for p in mat_procs):
disqualified.append(f"process {req['process']} not available (processes: {mat.get('processes')})")
# Biocompatibility
if req.get('biocompatible'):
if not flags.get('biocompatible', False):
disqualified.append("biocompatibility required but not available")
# UV resistant
if req.get('uv_resistant'):
if not flags.get('uv_resistant', False):
disqualified.append("UV resistance required but not guaranteed")
# Minimum UTS
if req.get('UTS_min') and disqualified == []:
uts_min_req = req['UTS_min']
uts_max_mat = mech.get('UTS_max') or mech.get('UTS_asbuilt_max') or mech.get('UTS_LPBF_max') or 0
if uts_max_mat < uts_min_req:
disqualified.append(f"UTS_max={uts_max_mat} MPa < required {uts_min_req} MPa")
# Target roughness (Ra) — check if achievable
if req.get('Ra_target') and disqualified == []:
Ra_req = req['Ra_target']
Ra_asbuilt = ra.get('Ra_asbuilt_typical', 50)
postproc = ra.get('postprocess_achievable', {})
Ra_achievable_min = Ra_asbuilt
best_method = "as-built"
for method, vals in postproc.items():
if isinstance(vals, dict) and 'Ra_min' in vals:
if vals['Ra_min'] < Ra_achievable_min:
Ra_achievable_min = vals['Ra_min']
best_method = method
if Ra_achievable_min > Ra_req:
disqualified.append(f"achievable Ra_min={Ra_achievable_min}µm > target {Ra_req}µm even with post-processing")
else:
if Ra_asbuilt > Ra_req:
reasons.append(f"target Ra {Ra_req}µm achievable with {best_method} (as-built: {Ra_asbuilt}µm)")
if disqualified:
return 0, reasons, disqualified
# --- POSITIVE SCORING ---
# Temperature: more margin = better
if req.get('T_service'):
T = req['T_service']
T_max = thermal.get('T_max_service', 9999)
if isinstance(T_max, (int, float)):
margin = T_max - T
if margin > 100:
score += 10
reasons.append(f"excellent thermal margin (+{margin:.0f}°C)")
elif margin > 30:
score += 5
# UTS: margin against requirement
if req.get('UTS_min'):
uts_min_req = req['UTS_min']
uts_max_mat = mech.get('UTS_max') or mech.get('UTS_asbuilt_max') or mech.get('UTS_LPBF_max') or 0
if uts_max_mat > 0:
ratio = uts_max_mat / uts_min_req
if ratio > 2:
score += 10
elif ratio > 1.5:
score += 5
# As-built Ra: if it already meets the target without post-processing -> advantage
if req.get('Ra_target'):
Ra_asbuilt = ra.get('Ra_asbuilt_typical', 50)
if Ra_asbuilt <= req['Ra_target']:
score += 15
reasons.append(f"as-built Ra ({Ra_asbuilt}µm) already meets the target — no additional post-processing")
# Printability
difficulty_map = {
"easy": 10, "moderate": 5, "difficult": 0, "very difficult": -5, "extreme": -10
}
diff = mat.get('print_difficulty', '')
score += difficulty_map.get(diff, 0)
# Cost
cost = mat.get('cost_relative', 5)
if cost <= 2:
score += 8
reasons.append(f"low cost (index {cost})")
elif cost <= 5:
score += 4
elif cost > 15:
score -= 10
# Isotropy
aniso = mech.get('anisotropy_Z_factor', 1.0)
if aniso >= 0.9:
score += 5
reasons.append(f"good isotropy (Z/XY = {aniso})")
# Quantity
if req.get('quantity') and req['quantity'] > 100:
procs = mat.get('processes', [])
if any(p in ['SLS', 'MJF'] for p in procs):
score += 8
reasons.append("process well-suited for large series")
if any(p == 'LPBF' for p in procs) and req['quantity'] > 50:
score -= 5 # LPBF is expensive for large volumes
return min(score, 100), reasons, []
def recommend(req, top_n=5):
db = load_db()
all_mats = db['polymers'] + db['metals']
results = []
eliminated = []
for mat in all_mats:
score, reasons, disqualified = score_material(mat, req)
if disqualified:
eliminated.append({'id': mat['id'], 'name': mat['name'], 'why': disqualified})
else:
results.append({
'id': mat['id'],
'name': mat['name'],
'processes': mat.get('processes', []),
'score': score,
'reasons': reasons,
'cost_relative': mat.get('cost_relative', '?'),
'Ra_asbuilt': mat.get('surface_roughness', {}).get('Ra_asbuilt_typical', '?'),
'T_max': mat.get('thermal', {}).get('T_max_service', '?'),
'UTS_max': (mat.get('mechanical', {}).get('UTS_max') or
mat.get('mechanical', {}).get('UTS_asbuilt_max') or
mat.get('mechanical', {}).get('UTS_LPBF_max') or '?'),
'postprocess_for_Ra': _ra_strategy(mat, req.get('Ra_target'))
})
results.sort(key=lambda x: x['score'], reverse=True)
return results[:top_n], eliminated
def _ra_strategy(mat, Ra_target):
"""Returns the post-processing strategy to reach target Ra."""
if Ra_target is None:
return None
ra = mat.get('surface_roughness', {})
Ra_asbuilt = ra.get('Ra_asbuilt_typical', 50)
if Ra_asbuilt <= Ra_target:
return f"as-built is sufficient (Ra_typical={Ra_asbuilt}µm)"
postproc = ra.get('postprocess_achievable', {})
strategies = []
for method, vals in postproc.items():
if isinstance(vals, dict) and 'Ra_min' in vals:
if vals['Ra_min'] <= Ra_target:
note = vals.get('note', '')
strategies.append(f"{method} → Ra≥{vals['Ra_min']}µm" + (f" ({note})" if note else ""))
if strategies:
return "; or ".join(strategies)
return f"target Ra={Ra_target}µm NOT achievable (min={min((v['Ra_min'] for v in postproc.values() if isinstance(v,dict) and 'Ra_min' in v), default=Ra_asbuilt)}µm)"
def print_report(results, eliminated, req):
print("\n" + "="*70)
print(" AM MATERIAL SELECTOR — Results")
print("="*70)
print(f"\n Requirements analyzed:")
for k, v in req.items():
if v is not None:
print(f" {k}: {v}")
print(f"\n Materials evaluated: {len(results)+len(eliminated)}")
print(f" Eligible: {len(results)} | Eliminated: {len(eliminated)}")
print("\n" + "-"*70)
print(" TOP CANDIDATES (sorted by score)")
print("-"*70)
for i, r in enumerate(results):
print(f"\n [{i+1}] {r['name']} (score: {r['score']}/100)")
print(f" Processes: {', '.join(r['processes'])}")
print(f" UTS_max: {r['UTS_max']} MPa | T_max: {r['T_max']}°C | Ra_asbuilt: {r['Ra_asbuilt']}µm | Cost: {r['cost_relative']}/10")
if r['postprocess_for_Ra']:
print(f" Ra strategy: {r['postprocess_for_Ra']}")
if r['reasons']:
for reason in r['reasons'][:3]:
print(f"{reason}")
if eliminated:
print("\n" + "-"*70)
print(f" ELIMINATED ({len(eliminated)}) — main reasons")
print("-"*70)
shown = 0
for e in eliminated[:10]:
print(f"{e['name']}: {'; '.join(e['why'][:2])}")
shown += 1
if len(eliminated) > shown:
print(f" ... and {len(eliminated)-shown} more")
print("\n" + "="*70 + "\n")
def main():
parser = argparse.ArgumentParser(description="AM Material Selector — filters materials by engineering requirements")
parser.add_argument('--T', type=float, help="Max service temperature (°C)")
parser.add_argument('--UTS', type=float, help="Minimum required UTS (MPa)")
parser.add_argument('--Ra', type=float, help="Target surface roughness Ra (µm)")
parser.add_argument('--process', type=str, help="Specific process (FDM, SLS, LPBF, etc.)")
parser.add_argument('--bio', action='store_true', help="Biocompatibility required")
parser.add_argument('--uv', action='store_true', help="UV resistance required")
parser.add_argument('--qty', type=int, help="Quantity (pcs)")
parser.add_argument('--top', type=int, default=5, help="Number of results (default: 5)")
parser.add_argument('--json', action='store_true', help="JSON output")
args = parser.parse_args()
req = {
'T_service': args.T,
'UTS_min': args.UTS,
'Ra_target': args.Ra,
'process': args.process,
'biocompatible':args.bio or None,
'uv_resistant': args.uv or None,
'quantity': args.qty
}
req = {k: v for k, v in req.items() if v}
if not req:
print("ERROR: specify at least one requirement. Use --help for parameters.")
sys.exit(1)
results, eliminated = recommend(req, top_n=args.top)
if args.json:
print(json.dumps({'results': results, 'eliminated': eliminated}, indent=2))
else:
print_report(results, eliminated, req)
if __name__ == '__main__':
main()