diff --git a/additive-manufacturing.skill b/additive-manufacturing.skill new file mode 100644 index 0000000..e5f999e Binary files /dev/null and b/additive-manufacturing.skill differ diff --git a/additive-manufacturing/SKILL.md b/additive-manufacturing/SKILL.md new file mode 100644 index 0000000..03633b4 --- /dev/null +++ b/additive-manufacturing/SKILL.md @@ -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 1–3 µm as-built; FDM side surface is Ra 15–40 µ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 15–50 µm side, 5–15 top | ±0.3mm | PLA/PETG/ABS/ASA/PA/PC/TPU/PEEK/CF +├── SLA/DLP Ra 1–6 µm | ±0.15mm | Standard/flex/HT/medical/ceramic resins +├── SLS Ra 8–15 µm | ±0.3mm | PA12/PA11/TPU/PA-CF — no supports +└── MJF Ra 6–12 µm | ±0.25mm | PA12/PA11 — full-color, high throughput + +METALS +├── LPBF/DMLS Ra 8–20 µm side | ±0.1mm | Al/Ti/steels/superalloys/CoCr/Cu +├── EBM Ra 20–35 µm | ±0.2mm | Ti-6Al-4V/CoCr — vacuum chamber +└── Binder Jetting Ra 4–10 µm post-sinter | ±0.4mm | 316L/17-4PH/Cu — no supports, 20% shrinkage + +CERAMICS +└── SLA/DLP ceramic Ra 0.5–3 µm post-sinter | Shrinkage 20–25% | 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 30–50% 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.4–1.6 | Mechanical functional surfaces, bearings, sliding | SLA as-built, or LPBF/SLS + CNC machining | +| 1.6–3.2 | Inner surfaces, semi-finished surfaces | SLA. LPBF + vibratory/electropolish. SLS + vibratory | +| 3.2–6.3 | Non-critical functional surfaces | SLS/MJF + bead blast. LPBF + bead blast | +| 6.3–12.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 5–15 µm — best +- side_XY (vertical surfaces): Ra 15–40 µm — layer line stairstepping +- down_facing (below overhang/support): Ra 25–60 µ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 40–50% 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 15–30° 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 (+20–40% Ti, +15–25% 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 +[3–5 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. diff --git a/additive-manufacturing/references/compliance-qualification.md b/additive-manufacturing/references/compliance-qualification.md new file mode 100644 index 0000000..20ac466 --- /dev/null +++ b/additive-manufacturing/references/compliance-qualification.md @@ -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 7000–7099 (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 600–900°C; LPBF: 80–200°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 310–360 +``` + +**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.6–3.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 | diff --git a/additive-manufacturing/references/cost-model.md b/additive-manufacturing/references/cost-model.md new file mode 100644 index 0000000..1297322 --- /dev/null +++ b/additive-manufacturing/references/cost-model.md @@ -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 = 30–50% of total cost +- Fatigue-critical application (HIP + CNC + CT): post-processing = **50–70%** of total cost +- Indicative budget: final cost ≈ **3–5× the raw print cost** for aerospace-quality metal + +--- + +## 2. Decision Tree: Which Process for Which Volume and Application? + +### Metals + +``` +Volume (parts/year) + Geometry + Material + +1–10 parts, complex geometry (undercuts, internal channels, optimised topology) + LPBF is often the only practical option + → Ti-6Al-4V LPBF: €300–2000/part (depending on size and post-processing) + → AlSi10Mg LPBF: €150–800/part + → 316L LPBF: €120–600/part + Alternative: CNC from solid — comparison in section 4 + +1–10 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 + +10–100 parts, moderate tolerances (±0.3mm acceptable) + → Binder Jetting (316L, 17-4PH): €60–300/part at 50+ parts + → Advantages: no supports, high productivity, as-sintered finish 4–10 µm + → Limitations: 20% shrinkage, not suitable for tight-tolerance geometries without post-machining + +10–100 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 €20–80/part at 500+ (with tooling) + → AM wins only if: geometry cannot be cast, no tooling budget, critical lead time +``` + +### Polymers + +``` +1–50 parts, complex geometry / no critical supports + → SLS PA12: €25–80/part (includes breakout and bead blast) + → MJF PA12: €20–60/part (higher throughput, better finish) + → FDM technical material (PEEK, PC, PA): €10–50/part (simple geometries only) + → SLA/DLP resin: €15–60/part (high accuracy, Ra < 3 µm, non-structural) + +50–500 parts, standard polymer + → SLS/MJF drop to €10–30/part with optimised nesting + → In-house FDM can drop to €3–15/part (excluding machine amortisation) + +> 500–1000 parts, standard geometry + → Injection moulding wins on variable cost (€1–5/part in series) + → Tooling: €5,000–50,000 per mould (recovered over 500–5,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) | €50–200/batch | 2–8 hours | Amortised over batch — low cost/part | +| **HIP** | €500–2,000/batch | 4–8 hours + scheduling | €20–200/part in batch; 2–4 week wait from service | +| **Specific Heat Treatment** (aging, solution annealing) | €100–400/batch | 1–24 hours (cycle-dependent) | Often performed together with stress relief for non-critical alloys | +| **CNC Machining** (critical surfaces) | €50–300/hour machine | 1–8 hours/part | Dominant cost for complex geometries | +| **Bead Blast** | €5–20/part | 15–30 min | Almost always included in bureau service | +| **Vibratory Finishing** | €10–40/part/batch | 1–4 hours | Economical, not applicable to delicate features | +| **Electropolishing** | €30–100/part | 30–90 min | Stainless steels and CoCr only | +| **Anodising (Al)** | €5–30/part | 30–60 min | In batch — low cost | +| **CT Scan** | €200–800/part | 2–4 hours | 50µm voxel on 100mm part | +| **CMM (dimensional inspection)** | €100–400/part | 1–3 hours | Before CT if destructive | +| **Dye Penetrant (PT)** | €20–80/part | 1–2 hours | For external surfaces — fast | +| **Tensile coupon (same build plate)** | €30–80/coupon | — | Mandatory for qualification | +| **Documentation / CoC** | €50–200/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 > 50–100 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 < 50–100 parts (tooling cost not recoverable: €5,000–30,000 per mould) + ✓ Geometry too complex to extract the mould + ✓ Lead time: casting requires 8–16 weeks for tooling; AM 1–4 weeks + ✓ Frequent design iterations (each modification ≡ new mould in casting) + +Casting is preferable to AM when: + ✓ Quantity > 200–500 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 | €300–600 | €5,000–50,000 (tooling) | AM | +| 100 parts | €2,000–5,000 | €5,000–52,000 (tooling + production) | AM | +| 500 parts | €10,000–20,000 | €6,000–55,000 | Break-even zone | +| 1,000 parts | €20,000–40,000 | €7,000–58,000 | IM starts to win | +| 5,000 parts | €100,000+ | €15,000–70,000 | IM wins clearly | + +Note: IM loses its advantage for geometries with undercuts (add side actions: +€3,000–15,000/mould). + +--- + +## 5. Lead Time Model + +### Polymers (SLS / MJF / FDM) + +| Phase | Duration | +|---|---| +| SLS/MJF print | 8–24 hours (fill-dependent) | +| Breakout + cleaning | 2–4 hours | +| Bead blast / finishing | 2–4 hours | +| **Total SLS/MJF (service bureau)** | **1–3 working days** | +| In-house FDM | 2–12 hours/part | + +### Metals (LPBF — standard application) + +| Phase | Duration | +|---|---| +| Setup + nesting | 2–4 hours | +| LPBF print | 4–24 hours | +| Stress relief (on build plate) | 4–8 hours | +| Build plate removal + supports | 2–8 hours | +| Finishing (bead blast) | 1–2 hours | +| CMM / basic inspection | 1–2 days | +| **Total standard LPBF** | **3–7 working days** | + +### Metals (LPBF — aerospace/biomedical application) + +| Phase | Duration | +|---|---| +| Print + stress relief | 1–2 days | +| HIP (external service) | **2–4 weeks** (scheduling-dominant) | +| Post-HIP heat treatment | 1–3 days | +| CNC machining | 2–5 days | +| CT scan (external) | 1–3 days | +| CMM + PT + documentation | 1–3 days | +| **Total LPBF aerospace quality** | **4–8 weeks** | + +**The bottleneck is almost always HIP** — schedule in advance if lead time is critical. +Alternative: in-house HIP (investment €500,000–2,000,000 for autoclave) or select +a service bureau with integrated HIP to reduce by 1–2 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,000–15,000 +- SLS/MJF (Formlabs, HP): €30,000–100,000 +- Entry-level LPBF (EOS, SLM, Trumpf): €300,000–800,000 +- Hidden costs: powder ($50–200/kg), inert gas, maintenance, qualified operator + +### Service Bureau makes sense when: +- < 1–2 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. diff --git a/additive-manufacturing/references/defect-atlas.md b/additive-manufacturing/references/defect-atlas.md new file mode 100644 index 0000000..481f0da --- /dev/null +++ b/additive-manufacturing/references/defect-atlas.md @@ -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 | **3–10** — 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.5–2.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.2–1.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.5–3.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 | +| 40–90 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 55–75 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 (30–40%) | +| **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 5–8 cycles, PA12 shows increased MFR (+20–40%) and reduced +elongation at break (−15–30%). 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 3–10). +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: 50–80 J/mm³ for most alloys) +- Hatch overlap 30–40% (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 | +| 50–150 mm | 50–75 µm | LOF > 0.15mm, pores > 0.15mm | +| 150–400 mm | 100–150 µ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. diff --git a/additive-manufacturing/references/dfam-guidelines.md b/additive-manufacturing/references/dfam-guidelines.md new file mode 100644 index 0000000..834df22 --- /dev/null +++ b/additive-manufacturing/references/dfam-guidelines.md @@ -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 40–60% for UTS + - LPBF: anisotropy ~10–20% + - 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.8–1.2 | 0.4 (XY planes only) | +| FDM (0.6mm nozzle) | 1.2–1.6 | 0.6 | +| SLA/DLP | 0.2–0.5 | 0.2 | +| SLS | 0.7–1.0 | 0.6 | +| MJF | 0.5–0.8 | 0.5 | +| LPBF | 0.3–0.4 | 0.2 | +| Binder Jetting | 1.0–1.5 | 0.8 | + +--- + +## Guidelines for Specific Features + +### Holes +- **Vertical holes (Z-axis, FDM):** Accurate, tolerance ±0.1–0.2mm +- **Horizontal holes (FDM):** + - ≤ ø5mm: printable without support (deform into ellipse, ~5–10%) + - > ø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.40–0.60 | n/a | Layer bonding is the weak point — avoid loading in Z if possible | +| **FDM PA12/PC** | 0.50–0.65 | n/a | Heated chamber improves but does not eliminate anisotropy | +| **FDM PEEK** | 0.60–0.75 | n/a | Heated chamber ≥ 90°C improves significantly | +| **SLS PA12** | 0.90–1.00 | n/a | Nearly isotropic — main advantage over FDM | +| **MJF PA12** | 0.88–0.98 | n/a | Slightly worse than SLS on top surfaces | +| **LPBF Ti-6Al-4V** | 0.80–0.92 | 0.95–1.00 | HIP practically eliminates anisotropy | +| **LPBF AlSi10Mg** | 0.70–0.85 | 0.90–0.98 | More anisotropic than Ti; HIP important | +| **LPBF 316L** | 0.80–0.95 | 0.95–1.00 | Ductile → anisotropy less critical | +| **LPBF 17-4PH** | 0.75–0.90 | n.d. | Depends on post-HIP aging | +| **LPBF IN718** | 0.75–0.88 | n.d. | | +| **EBM Ti-6Al-4V** | 0.90–0.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.60–0.75 | 0.92–0.98 | +| LPBF AlSi10Mg | 0.55–0.70 | 0.85–0.95 | +| FDM PLA (R=0.1) | 0.25–0.40 | n/a | +| SLS PA12 | 0.88–1.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.05–0.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.3–0.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.1–0.5% (material-dependent) | +| SLS PA12 | 3.0–4.0% XY, 3.5–4.5% Z | +| SLS PA11 | 2.5–3.5% | +| LPBF AlSi10Mg | 0.3–0.5% | +| LPBF Ti-6Al-4V | 0.2–0.4% | +| LPBF 316L | 0.2–0.3% | +| Binder Jetting (metals) | 18–22% (sintering) | +| SLA/DLP resins | 0.1–0.3% | + +### Fits and Mating +- **Clearance fit (moving):** Add 0.3–0.5mm per side (FDM), 0.15–0.25mm (SLS), 0.05–0.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 (10–15 min) → MANDATORY +│ ├── UV post-curing → MANDATORY (900–1200 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.1–0.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? diff --git a/additive-manufacturing/references/fatigue-design.md b/additive-manufacturing/references/fatigue-design.md new file mode 100644 index 0000000..2a1a969 --- /dev/null +++ b/additive-manufacturing/references/fatigue-design.md @@ -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.5–2.0. Verify plastic deformation. + ├── 10^3 < N < 10^4 cycles (LCF) + │ └── Use σ_LCF ≈ 0.7–0.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 30–60% 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) | +|---|---|---|---|---| +| 20–35 | LPBF as-built (side) | 1.8–2.5 | 1.6–2.2 | 1.5–2.0 | +| 8–20 | LPBF as-built (top XY) | 1.4–1.8 | 1.3–1.7 | 1.3–1.6 | +| 6–12 | Bead blast post LPBF | 1.3–1.6 | 1.2–1.5 | 1.2–1.4 | +| 3–6 | Vibratory finishing | 1.1–1.3 | 1.1–1.3 | 1.1–1.2 | +| 0.8–3 | Electropolishing / SLA | 1.05–1.15 | 1.0–1.1 | 1.0–1.1 | +| 0.4–0.8 | CNC machining | 1.0–1.05 | 1.0–1.05 | 1.0–1.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.05–0.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.3–0.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.60–0.75 | 0.92–0.98 | +| LPBF AlSi10Mg | 0.55–0.70 | 0.85–0.95 | +| LPBF 316L | 0.70–0.85 | 0.92–0.98 | +| LPBF 17-4PH | 0.70–0.80 | n.d. | +| LPBF IN718 | 0.65–0.80 | n.d. | +| SLS PA12 | 0.90–1.00 | n/a | +| FDM PA12 (0°/90°) | 0.35–0.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.6–0.75 to 0.92–0.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: **+50–100%** in terms of cycles to failure +- AlSi10Mg LPBF: **+30–60%** + +--- + +## 3. Baseline S-N Data (R = 0.1, HCF at 10^7 cycles) + +> These are representative ranges from the literature. Inter-lot variability ±15–20%. +> 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** | 200–320 | High scatter; Ra 15–25 µm side | +| **Ti-6Al-4V LPBF HIP + machined** | 400–550 | Close to forged | +| **Ti-6Al-4V forged (reference)** | 620–700 | Benchmark | +| **AlSi10Mg LPBF as-built** | 90–130 | Very sensitive to orientation | +| **AlSi10Mg LPBF HIP + T6-equiv.** | 120–170 | +30% vs. as-built | +| **AlSi10Mg forged 6061-T6 (ref.)** | 95–110 | AM comparable with HIP | +| **316L LPBF as-built** | 180–220 | Good relative to forged | +| **316L LPBF HIP** | 220–260 | | +| **316L forged (reference)** | 200–240 | AM as-built nearly comparable | +| **17-4PH LPBF H900** | 350–430 | Only after mandatory aging | +| **17-4PH forged H900 (ref.)** | 400–500 | | +| **IN625 LPBF** | 280–380 | | +| **IN718 LPBF (full HT)** | 350–450 | Mandatory double aging | +| **CoCr LPBF (biomedical)** | 500–600 | Excellent for implants | + +### AM Polymers + +| Material / Condition | Fatigue limit @ 10^6 cycles (MPa) | Notes | +|---|---|---| +| **PA12 SLS** | 18–25 | R = 0.1; sensitive to moisture | +| **PA12 FDM (0°)** | 12–18 | Layer bonding is the weak link | +| **PETG FDM** | 10–16 | | +| **ABS FDM** | 8–14 | Highly anisotropic in Z | +| **PEEK FDM** | 25–40 | 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 | +20–40% | −400 to −700 MPa | +| AlSi10Mg AM | +15–25% | −200 to −400 MPa | +| 316L / 17-4PH AM | +15–30% | −300 to −500 MPa | +| PA12 SLS | not applicable | — | + +Reference standard: **AMS 2430** (aerospace); Almen intensity A8–A12 for Ti. + +**Deep Rolling** (for cylindrical features: shafts, pins, fillets): +- σ_residual: −600 to −900 MPa (deeper than shot peening) +- Fatigue improvement: +30–50% +- 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.05–0.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 3–5 → 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 6–12 µm, Kf still 1.3–1.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 30–80 µm → Kf 2–4 → 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 15–40 µm → effective Kf 4–6. + - 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 25–100 µ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 3–10). 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] +``` diff --git a/additive-manufacturing/references/lattice-infill.md b/additive-manufacturing/references/lattice-infill.md new file mode 100644 index 0000000..768dcbe --- /dev/null +++ b/additive-manufacturing/references/lattice-infill.md @@ -0,0 +1,122 @@ +# Lattice & Infill — Technical Guide + +## 1. FDM/FFF — Infill Strategies + +### When to use partial infill +- Visual / ergonomic prototypes → 10–20% +- Functional parts under moderate load → 30–60% +- Critical structural parts → 80–100% or solid walls (no infill) +- Flexible parts (TPU) → 15–30% 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:** ≥4–6 solid layers for mechanically loaded surfaces +- **Infill angle:** Rotate 45° relative to the main load direction for better distribution +- **Infill-perimeter overlap:** 20–30% — 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 | 15–40% | <15%: risk of warping/collapse during printing; >40%: better to use solid | +| Minimum strut diameter | 0.3–0.5mm (LPBF) | Below 0.3mm: unreliable | +| TPMS wall thickness | 0.3–0.6mm (LPBF) | Always verify with the supplier | +| Cell size | 2–8mm | 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 | 20–35% | +| Impact/crash absorption | Kelvin, BCC | 25–40% | +| Biomedical scaffold (Ti) | Gyroid, Diamond | 30–50% (for osseointegration) | +| Heat exchanger | Gyroid TPMS, IWP | 20–30% | +| Tooling with conformal channels | Gyroid + hybrid channels | 25–40% | +| Sandwich panel | FCC face-sheet | 15–25% | + +### 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 3–5 transition cells between solid zone and lattice +- **Containment shell:** Always add an outer solid skin (0.5–2mm) 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 ≥ ø5–6mm (otherwise trapped powder is irremovable) +- **SLS lattice:** Possible with cell size ≥ 3–4mm, 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 30–60% +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 diff --git a/additive-manufacturing/references/materials-db.json b/additive-manufacturing/references/materials-db.json new file mode 100644 index 0000000..035f5f7 --- /dev/null +++ b/additive-manufacturing/references/materials-db.json @@ -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 15–20µ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.1–0.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": "70–80°C / 4–8h 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": "80–90°C / 4–6h", "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": "200–400", "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 (20–35 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": "+20–40% vs base polymer", "E_note": "+30–60% 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 10–200 pcs", "prosthetics"], + "warnings": ["shrinkage 3.5–4% — 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.2–0.3mm", "cost_relative": 5, + "packing_density_optimal": "8–12%", + "applications": ["medium-volume production", "colored parts", "series 50–500 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.1–0.15mm", + "cost_relative": 2, "print_difficulty": "easy", + "warnings": ["UV photodegradation — outdoor yellowing", "post-cure mandatory for final properties"], + "postprocessing_sequence": ["IPA wash 10–15 min", "air drying 5 min", "UV post-curing 900–1200 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 20–25% — compensation in CAD is mandatory", "multi-step process: print → debinding → sintering"], + "postprocessing_sequence": ["IPA wash", "UV post-cure", "debinding 200–600°C ramp 1–5°C/min", "pre-sintering 1000°C/2h", "sintering 1450–1600°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.05–0.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": "15–25", + "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": "~3–5× 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.05–0.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": "20–40", + "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.05–0.1mm", "accuracy_BJT": "±0.3–0.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": "15–25", + "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": "15–25", + "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": "15–25", + "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.4–1.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.6–3.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.2–6.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.3–12.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"] + } + } +} diff --git a/additive-manufacturing/references/metal-am-alloys.md b/additive-manufacturing/references/metal-am-alloys.md new file mode 100644 index 0000000..dc92965 --- /dev/null +++ b/additive-manufacturing/references/metal-am-alloys.md @@ -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** | 5–10% | 20–35% | Variable micro-porosity between builds | +| **Ti-6Al-4V LPBF HIP + machined** | 2–4% | 8–15% | HIP drastically reduces scatter | +| **AlSi10Mg LPBF as-built** | 8–15% | 25–40% | Highly sensitive to powder moisture and O₂ | +| **316L LPBF as-built** | 4–7% | 15–25% | Ductile → low UTS scatter, moderate fatigue | +| **17-4PH LPBF H900** | 5–9% | 15–25% | Depends on aging cycle: temperature control critical | +| **IN718 LPBF (full HT)** | 5–8% | 18–28% | Variable carbide distribution between builds | +| **PA12 SLS** | 6–12% | 20–30% | Fresh/recycled powder ratio critical | +| **PA12 FDM** | 15–25% | 30–50% | 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 | +|---|---|---|---|---| +| 0–5 | baseline | baseline | baseline | None — normal use | +| 5–10 | −1 to −3% | −5 to −10% | +0.02–0.05% | Monitor PSD and chemical composition | +| 10–20 | −3 to −8% | −10 to −20% | +0.05–0.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.3–0.5mm vs ±0.05–0.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 >30–50 parts compared to LPBF diff --git a/additive-manufacturing/references/polymer-am-materials.md b/additive-manufacturing/references/polymer-am-materials.md new file mode 100644 index 0000000..23045e2 --- /dev/null +++ b/additive-manufacturing/references/polymer-am-materials.md @@ -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. diff --git a/additive-manufacturing/references/post-processing.md b/additive-manufacturing/references/post-processing.md new file mode 100644 index 0000000..bbcbc58 --- /dev/null +++ b/additive-manufacturing/references/post-processing.md @@ -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 | 270–300°C | 2h | Air / Argon | Reduce residual stresses; does not alter microstructure | +| Ti-6Al-4V | 600–650°C | 2–4h | Vacuum / Argon | Critical — without this, severe distortions upon removal | +| 316L | 900–1050°C | 1–2h | 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 / 100–200 MPa / 2–4h / 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:** €500–2000/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.5–1.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** | 5–25 µm | — | Baseline; depends on orientation | +| **Shot peening** | 3–8 µm | Low | Introduces surface compression → improves fatigue | +| **Sand/bead blasting** | 3–10 µm | Low | Uniform finish, matting | +| **Vibratory finishing** | 1–4 µm | Medium | Good for batches of small parts | +| **Barrel tumbling** | 1–3 µm | Medium | Parts without sharp edges | +| **Electropolishing** | 0.5–2 µm | Medium-High | Excellent for 316L; possible for Ti; difficult for Al | +| **CNC machining** | 0.1–1.6 µm | High | Specific surfaces, accessible geometries | +| **Grinding / lapping** | 0.01–0.5 µm | High | Sealing surfaces, mating interfaces | +| **Laser polishing** | 1–5 µ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 S110–S230, pressure 2–4 bar, coverage 100–200% + +--- + +## 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 ~2–5µm; caution: modifies dimensions ±0.1–0.3mm | +| **IPA smoothing (XTC-3D resin)** | Surface encapsulation | All | Adds ~0.3–0.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: 60–80°C / 1h; PETG: 80°C / 2h; improves thermal resistance | +| **Heat-set inserts** | Reliable metal threads | All thermoplastics | M2–M12; 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 → 6–8µm; uniform satin appearance | +| **Dyeing** | Uniform colouring | PA12: excellent dyeing capability (standard black or colours with dedicated dyes); hot process 80–95°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 (10–15 min agitation or dedicated washing machine) + → IPA 90%+ for optimal cleaning + → Alternative: Form Wash solution or equivalent +3. Air drying (5–10 min) for IPA evaporation +4. UV post-curing (MANDATORY) + → 405nm, 900–1200 mJ/cm² or follow manufacturer specifications + → Time: 15–60 min depending on resin and part size + → Elevated temperatures (40–60°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: 200–600°C / slow ramp (1–5°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: 1550–1600°C / 2h + → Zirconia: 1450–1550°C / 2h + → Shrinkage: 20–25% 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 | diff --git a/additive-manufacturing/references/process-parameters.md b/additive-manufacturing/references/process-parameters.md new file mode 100644 index 0000000..c7d96e7 --- /dev/null +++ b/additive-manufacturing/references/process-parameters.md @@ -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 (25–75% 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** | 195–220 | 50–65 | — | 0.1–0.3mm | 40–60 mm/s | 100% | 1–5mm / 25–45 mm/s | +| **PETG** | 230–250 | 70–85 | — | 0.1–0.3mm | 35–50 mm/s | 30–50% | 3–6mm / 25–35 mm/s | +| **ABS** | 230–250 | 90–110 | 40–60°C | 0.1–0.3mm | 40–60 mm/s | 0–10% | 4–6mm / 25–45 mm/s | +| **ASA** | 240–260 | 90–110 | 40–55°C | 0.1–0.3mm | 35–55 mm/s | 10–20% | 4–6mm / 25–45 mm/s | +| **PA12** | 240–260 | 70–90 | 45–65°C | 0.1–0.25mm | 30–50 mm/s | 0–10% | 6–8mm / 20–35 mm/s | +| **PC** | 260–290 | 100–120 | 60–80°C | 0.1–0.25mm | 30–50 mm/s | 0–10% | 4–6mm / 25–40 mm/s | +| **TPU (Shore 95A)** | 220–240 | 30–50 | — | 0.15–0.3mm | 20–35 mm/s | 20–50% | 0–2mm (direct) | +| **PEEK** | 360–400 | 120–140 | 90–120°C | 0.1–0.2mm | 20–40 mm/s | 0% | 2–4mm / 20–30 mm/s | +| **CF-filled (PA-CF)** | 250–270 | 70–90 | 45–65°C | 0.15–0.25mm | 30–45 mm/s | 0–10% | 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 20–30 mm/s, precise Z offset +- Fumes: mandatory ventilation + +**PA (Nylon):** +- **Pre-drying MANDATORY:** 70–80°C / 4–8h 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** | 25–100 µm | 25–100 µm | 25–100 µm | +| **Exposure time (normal layers)** | Depends on laser power | 2–8 sec | 2–6 sec | +| **Bottom layers** | 5–10 | 5–10 | 5–10 | +| **Bottom exposure** | 3–5× normal | 3–5× normal | 3–5× normal | +| **Lift speed** | 30–150 mm/min | 30–200 mm/min | 30–200 mm/min | +| **Lift distance** | 5–8 mm | 4–7 mm | 4–7 mm | +| **Anti-aliasing** | N/A | 4–8× | 4–8× | + +### SLA/DLP practical rules +- **Layer height and detail:** 25–50 µ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:** 25–30°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** | 100–120 µm | Standard; 60 µm for some premium materials | +| **Part bed temperature** | 168–172°C (PA12) | Critical: too low → warping; too high → hard cake | +| **Laser power** | 21–25 W | Calibrated by manufacturer — do not modify without validation | +| **Scan speed** | 5000–8000 mm/s | High speed → energy per unit area | +| **Energy density (ED)** | 0.015–0.025 J/mm² | ED = Laser power / (scan speed × hatch × layer) | +| **Hatch spacing** | 0.25–0.35 mm | | +| **Refresh rate (fresh powder)** | 30–50% 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:** 8–12% 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** | 340–370 | 1300–1600 | 130–190 | 30 | 40–65 | +| **Ti-6Al-4V** | 175–280 | 1000–1300 | 100–140 | 30 | 50–90 | +| **316L** | 200–280 | 700–1000 | 100–150 | 40 | 60–100 | +| **17-4PH** | 200–260 | 800–1100 | 100–150 | 40 | 55–90 | +| **Inconel 718** | 200–285 | 800–1000 | 100–130 | 40 | 65–110 | +| **Inconel 625** | 200–250 | 800–1100 | 100–140 | 40 | 55–90 | + +**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.1–0.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 25–50µm, post-sanding | diff --git a/additive-manufacturing/references/residual-stress-distortion.md b/additive-manufacturing/references/residual-stress-distortion.md new file mode 100644 index 0000000..d77ca72 --- /dev/null +++ b/additive-manufacturing/references/residual-stress-distortion.md @@ -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 (+ 200–600 MPa) + Central core: σ_compression (- 100–400 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** | 500–900 | 0.5–2.0 | High (brittle, low HRC) | +| **AlSi10Mg LPBF** | 150–300 | 0.3–1.5 | Moderate | +| **316L LPBF** | 300–600 | 0.3–1.0 | Low (ductile) | +| **17-4PH LPBF** | 400–700 | 0.5–1.5 | Moderate–high | +| **IN718 LPBF** | 600–1000 | 0.5–2.5 | High (constrained zones) | +| **IN625 LPBF** | 400–700 | 0.3–1.5 | Moderate | +| **CoCr LPBF** | 500–800 | 0.5–1.8 | Moderate | +| **FDM PA12** | 5–20 | 0.1–0.5 | Negligible | +| **SLS PA12** | 2–10 | < 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 3–5× 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** | 650–730 | 2–4 | Vacuum or Ar | > 750°C → phase transformation → loss of properties | +| **AlSi10Mg** | 270–300 | 2–4 | Air or N₂ | > 310°C → precipitate coarsening → UTS −15% | +| **316L** | 450–550 | 1–2 | Ar or vacuum | Sensitization risk > 650°C | +| **17-4PH** | 325–350 | 1–2 | Ar or vacuum | Stress relief separate from aging (H900 = 480°C) | +| **IN718** | 900–950 | 1–2 | Vacuum or Ar | Stress relief only — then full solution annealing cycle | +| **IN625** | 870–900 | 1–2 | Vacuum or Ar | | +| **CoCr** | 800–850 | 1–2 | Vacuum | | + +**Heating and cooling ramps:** max 5–10°C/min to avoid thermal shock → cracking in constrained zones. + +**Effectiveness:** after correct stress relief, σ_res is reduced by **60–80%** 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) | 900–920°C | +| HIP temperature (Al) | 500–515°C | +| HIP temperature (stainless steels) | 1100–1150°C | +| HIP temperature (superalloys) | 1100–1200°C | +| Pressure | 100–200 MPa (Ar) | +| Time | 2–4 hours | +| σ_res residual post-HIP | < 50 MPa (near zero) | +| Anisotropy reduction Z/XY (Ti) | From 0.60–0.75 → 0.92–0.98 | + +> **Dimensional note:** HIP causes dimensional variation of ±0.05–0.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 20–30mm, 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 600–900°C → thermal gradients are drastically reduced. + +| Parameter | LPBF | EBM | +|---|---|---| +| σ_res as-built | 300–900 MPa | **50–150 MPa** | +| Typical distortion | 0.3–2.0 mm/100mm | **0.05–0.3 mm/100mm** | +| Stress relief mandatory? | Yes | Often not necessary (evaluate case by case) | +| Ra as-built | 8–20 µm | 20–35 µ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. diff --git a/additive-manufacturing/references/support-structures.md b/additive-manufacturing/references/support-structures.md new file mode 100644 index 0000000..24b2cdd --- /dev/null +++ b/additive-manufacturing/references/support-structures.md @@ -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) > 50–60mm (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.15–0.25mm | Higher → easier removal but worse finish | +| **Support XY distance** | 0.5–1.0mm | Lateral distance from the part | +| **Interface layers** | 3–5 layers | Layers between support and part — use different pattern (e.g. lines) | +| **Support density** | 10–20% | Do not increase beyond this: unnecessary and makes removal harder | +| **Support roof/floor layers** | 2–4 | 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 50–80mm 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.3–0.4mm | Aesthetic surfaces, fine detail | +| **Medium** | 0.5–0.6mm | Standard | +| **Heavy** | 0.8–1.0mm | Heavy parts, large surfaces | + +### SLA rules +- **Raft:** Almost always necessary for medium/large parts (distributes peeling forces) +- **Tilt angle:** Tilting the part 15–30° 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.0–0.1mm | Interface with build plate | +| **Tooth height (perforated)** | 0.5–1.0mm | Facilitates removal while maintaining anchoring | +| **Perforated support** | Yes for critical surfaces | Reduces marking on the surface | +| **Lattice density** | 30–50% | Trade-off between heat dissipation and ease of removal | +| **XY support offset** | 0.05–0.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; 30–45° → 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)? diff --git a/additive-manufacturing/scripts/postprocess_route.py b/additive-manufacturing/scripts/postprocess_route.py new file mode 100644 index 0000000..15863cd --- /dev/null +++ b/additive-manufacturing/scripts/postprocess_route.py @@ -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() diff --git a/additive-manufacturing/scripts/select_material.py b/additive-manufacturing/scripts/select_material.py new file mode 100644 index 0000000..78d38f4 --- /dev/null +++ b/additive-manufacturing/scripts/select_material.py @@ -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()