{"id":25077,"date":"2026-11-06T07:08:45","date_gmt":"2026-11-06T07:08:45","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=25077"},"modified":"2026-11-06T07:08:49","modified_gmt":"2026-11-06T07:08:49","slug":"laser-cutting-power-matching-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/pt\/laser-cutting-power-matching-calculator\/","title":{"rendered":"Laser Cutting Power Matching Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Laser Cutting Power Matching Calculator<\/strong> helps estimate a suitable laser power range based on material type, thickness, assist gas, cutting speed, and required edge quality. Use it as a starting point when comparing laser cutting machine specifications for your production needs. Actual cutting performance also depends on the laser source, optics, focus position, gas settings, and machine condition, so confirm recommendations with the manufacturer\u2019s material-specific cutting charts.<\/p>\n\n\n\n<div class=\"lpmx-host\">\n<style>:host{all:initial;display:block;contain:layout style}\n.lpm-root{--c-blue:#1e3a8a;--c-blue-2:#1d4ed8;--c-blue-soft:#e8eefb;--c-blue-line:#c7d4f0;--c-bg:#f3f5f8;--c-card:#ffffff;--c-text:#1f2937;--c-heading:#111827;--c-muted:#525c6b;--c-border:#d6dce5;--c-field:#fbfcfe;--c-danger:#b42318;--c-danger-bg:#fef3f2;--c-warn:#8a4b00;--c-warn-bg:#fff7e6;--c-warn-line:#f5c97a;--c-radius:12px;--c-shadow:0 1px 2px rgba(16,24,40,.06),0 6px 16px rgba(16,24,40,.06);font-family:system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",sans-serif;font-size:16px;line-height:1.55;color:var(--c-text);background:var(--c-bg);max-width:1000px;margin:0 auto;padding:28px 16px 36px;text-align:left;border-radius:16px;-webkit-text-size-adjust:100%}\n.lpm-root *,.lpm-root *::before,.lpm-root *::after{box-sizing:border-box}\n.lpm-root [hidden]{display:none !important}\n.lpm-root h2{font-family:inherit;color:var(--c-heading);line-height:1.25;margin:0 0 14px;padding:0;letter-spacing:normal;text-transform:none;font-weight:700;border:0;background:none;font-size:clamp(1.1rem,2vw,1.3rem)}\n.lpm-root p{margin:0 0 .85em;padding:0}\n.lpm-root ul{margin:0;padding-left:1.2em}\n.lpm-root li{margin:0 0 .3em}\n.lpm-root .lpm-stack{display:grid;grid-template-columns:minmax(0,1fr);gap:22px}\n.lpm-root .lpm-card{background:var(--c-card);border:1px solid var(--c-border);border-radius:var(--c-radius);box-shadow:var(--c-shadow);padding:22px}\n.lpm-root .lpm-intro{font-size:.9rem;color:var(--c-muted);margin:-4px 0 16px}\n.lpm-root .lpm-group{border:0;margin:0 0 6px;padding:0;min-width:0}\n.lpm-root .lpm-group + .lpm-group{border-top:1px solid var(--c-border);padding-top:16px;margin-top:4px}\n.lpm-root .lpm-legend{display:block;font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--c-blue);margin:0 0 10px;padding:0}\n.lpm-root .lpm-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 16px}\n.lpm-root .lpm-field{margin:0 0 16px;min-width:0}\n.lpm-root .lpm-lbl{display:block;font-size:.88rem;font-weight:600;color:var(--c-text);margin:0 0 5px;line-height:1.3}\n.lpm-root .lpm-req{color:var(--c-danger);font-weight:700;margin-left:2px}\n.lpm-root .lpm-opt{color:var(--c-muted);font-weight:500;font-size:.82rem;margin-left:4px}\n.lpm-root .lpm-inline{display:flex;gap:8px;align-items:stretch}\n.lpm-root .lpm-inline .lpm-input{flex:1 1 auto;min-width:0}\n.lpm-root .lpm-inline .lpm-unit{flex:0 0 auto;width:auto;min-width:96px;max-width:45%}\n.lpm-root .lpm-input,.lpm-root .lpm-select{display:block;width:100%;height:42px;margin:0;padding:8px 12px;font:inherit;font-size:15px;line-height:1.3;color:var(--c-text);background-color:var(--c-field);border:1px solid #b9c2cf;border-radius:8px;box-shadow:none;outline:none;transition:border-color .15s,box-shadow .15s;max-width:none;min-height:0;text-transform:none;letter-spacing:normal}\n.lpm-root .lpm-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:32px;cursor:pointer;background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%231e3a8a' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'\/%3E%3C\/svg%3E\");background-repeat:no-repeat;background-position:right 11px center;background-size:12px 8px}\n.lpm-root .lpm-input:hover,.lpm-root .lpm-select:hover{border-color:#8f9bab}\n.lpm-root .lpm-input:focus,.lpm-root .lpm-select:focus{border-color:var(--c-blue-2);box-shadow:0 0 0 3px rgba(29,78,216,.25);background-color:#fff}\n.lpm-root .lpm-input.lpm-invalid{border-color:var(--c-danger);background-color:var(--c-danger-bg)}\n.lpm-root .lpm-input.lpm-invalid:focus{box-shadow:0 0 0 3px rgba(180,35,24,.2)}\n.lpm-root .lpm-err{color:var(--c-danger);font-size:.83rem;margin:5px 0 0;line-height:1.35;font-weight:500}\n.lpm-root .lpm-help{color:var(--c-muted);font-size:.82rem;margin:5px 0 0;line-height:1.4}\n.lpm-root .lpm-support{font-size:.85rem;line-height:1.45;border-radius:8px;padding:9px 12px;margin:0 0 16px;border:1px solid var(--c-blue-line);background:var(--c-blue-soft);color:var(--c-heading)}\n.lpm-root .lpm-support.lpm-none{border-color:var(--c-warn-line);background:var(--c-warn-bg);color:var(--c-warn)}\n.lpm-root .lpm-check{display:flex;gap:10px;align-items:flex-start;margin:0 0 14px;font-size:.9rem;font-weight:600;cursor:pointer}\n.lpm-root .lpm-check input{width:18px;height:18px;margin:2px 0 0;flex:0 0 auto;accent-color:var(--c-blue);cursor:pointer}\n.lpm-root .lpm-own{border:1px dashed #9fb1db;border-radius:10px;padding:14px 14px 2px;margin:0 0 14px;background:#fafbff}\n.lpm-root .lpm-own-h{font-size:.92rem;font-weight:700;color:var(--c-heading);margin:0 0 4px}\n.lpm-root .lpm-own-p{font-size:.84rem;color:var(--c-muted);margin:0 0 12px}\n.lpm-root .lpm-actions{display:flex !important;flex-wrap:wrap;justify-content:center;gap:10px;width:100%;margin:8px 0 0 !important;padding:0 !important;float:none !important;clear:both}\n.lpm-root .lpm-btn{display:inline-flex !important;align-items:center;justify-content:center;float:none !important;width:auto !important;min-width:130px;height:42px;padding:0 20px;margin:0 !important;position:static !important;font:inherit;font-size:.95rem;font-weight:650;line-height:1;border-radius:8px;border:1px solid var(--c-blue);background:var(--c-blue);color:#fff;cursor:pointer;text-decoration:none;text-transform:none;letter-spacing:normal;box-shadow:none;transition:background .15s,border-color .15s,color .15s}\n.lpm-root .lpm-btn:hover{background:#172f73;border-color:#172f73;color:#fff}\n.lpm-root .lpm-btn.lpm-btn-2{background:#fff;color:var(--c-blue);border-color:#9fb1db}\n.lpm-root .lpm-btn.lpm-btn-2:hover{background:var(--c-blue-soft);color:var(--c-blue);border-color:var(--c-blue)}\n.lpm-root .lpm-btn:focus-visible,.lpm-root .lpm-check input:focus-visible{outline:3px solid var(--c-blue-2);outline-offset:2px}\n.lpm-root .lpm-results:focus{outline:none}\n.lpm-root .lpm-badge{display:inline-block;font-size:.76rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--c-warn);background:var(--c-warn-bg);border:1px solid var(--c-warn-line);border-radius:999px;padding:3px 10px;margin:-6px 0 14px}\n.lpm-root .lpm-alert{border:1px solid #fecdca;background:var(--c-danger-bg);color:var(--c-danger);border-radius:10px;padding:12px 14px;margin:0;font-size:.9rem}\n.lpm-root .lpm-alert ul{margin:6px 0 0;padding-left:1.2em}\n.lpm-root .lpm-alert.lpm-alert-warn{border-color:var(--c-warn-line);background:var(--c-warn-bg);color:var(--c-warn)}\n.lpm-root .lpm-alert p{margin:6px 0 0}\n.lpm-root .lpm-sub-h{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--c-blue);margin:0 0 8px}\n.lpm-root .lpm-main{border-radius:12px;padding:18px;background:linear-gradient(135deg,#1e3a8a 0%,#1d4ed8 100%);color:#fff;margin:0 0 12px}\n.lpm-root .lpm-main .lpm-rcard-label{color:#dbe5ff}\n.lpm-root .lpm-main-val{font-size:clamp(1.8rem,4vw,2.4rem);font-weight:800;line-height:1.15;font-variant-numeric:tabular-nums}\n.lpm-root .lpm-main-val .lpm-rcard-unit{color:#dbe5ff}\n.lpm-root .lpm-main-note{margin-top:8px;font-size:.86rem;color:#e9efff}\n.lpm-root .lpm-rgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}\n.lpm-root .lpm-rcard{border:1px solid var(--c-blue-line);background:var(--c-blue-soft);border-radius:12px;padding:16px 16px 14px;min-width:0}\n.lpm-root .lpm-rcard-label{display:block;font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--c-blue);margin-bottom:6px}\n.lpm-root .lpm-rcard-value{font-size:clamp(1.4rem,3vw,1.8rem);font-weight:800;line-height:1.15;color:var(--c-heading);word-break:break-word;font-variant-numeric:tabular-nums}\n.lpm-root .lpm-rcard-text{font-size:1.05rem;font-weight:700;line-height:1.3;color:var(--c-heading)}\n.lpm-root .lpm-rcard-unit{font-size:.5em;font-weight:700;margin-left:5px;color:var(--c-muted)}\n.lpm-root .lpm-rcard-sub{font-size:.82rem;color:var(--c-muted);margin-top:6px}\n.lpm-root .lpm-table{width:100%;border-collapse:collapse;margin:16px 0 0;font-size:.9rem;font-variant-numeric:tabular-nums}\n.lpm-root .lpm-table caption{text-align:left;caption-side:top;padding:0 0 4px}\n.lpm-root .lpm-table th,.lpm-root .lpm-table td{text-align:left;padding:9px 10px;border:0;border-bottom:1px solid var(--c-border);vertical-align:top;background:none}\n.lpm-root .lpm-table th{font-weight:600;color:var(--c-muted);width:42%}\n.lpm-root .lpm-table td{color:var(--c-heading);font-weight:600}\n.lpm-root .lpm-table tr:last-child th,.lpm-root .lpm-table tr:last-child td{border-bottom:0}\n.lpm-root .lpm-method{background:#0f1f45;color:#e6edff;padding:14px 16px;border-radius:10px;margin:16px 0 0}\n.lpm-root .lpm-method-label{display:block;font-size:.74rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#b4c4ec;margin-bottom:4px}\n.lpm-root .lpm-method-body{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.84rem;color:#e6edff;word-break:break-word;margin:0;line-height:1.6}\n.lpm-root .lpm-source{font-size:.85rem;color:var(--c-text);margin:14px 0 0}\n.lpm-root .lpm-disclaimer{font-size:.85rem;color:var(--c-muted);background:#f6f8fb;border-left:3px solid var(--c-blue-line);padding:10px 12px;border-radius:0 8px 8px 0;margin:14px 0 0}\n.lpm-root .lpm-disclaimer strong{color:var(--c-heading)}\n.lpm-root .lpm-verify{border-left-color:#f5a524;background:var(--c-warn-bg);color:var(--c-warn)}\n.lpm-root .lpm-verify strong{color:var(--c-warn)}\n.lpm-root .lpm-verify ul{margin:6px 0 0}\n.lpm-root .lpm-sr{position:absolute !important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n@media (max-width:600px){.lpm-root{padding:20px 12px 28px;border-radius:0}.lpm-root .lpm-card{padding:16px}.lpm-root .lpm-row{grid-template-columns:minmax(0,1fr)}.lpm-root .lpm-btn{flex:1 1 100%}.lpm-root .lpm-table th{width:50%}}\n@media (prefers-reduced-motion:reduce){.lpm-root *{transition:none !important}}<\/style>\n<div class=\"lpm-root\" id=\"lpm-app\">\n<div class=\"lpm-stack\">\n<section class=\"lpm-card\" aria-labelledby=\"lpm-inputs-title\">\n<h2 id=\"lpm-inputs-title\">Laser Power Matching Inputs<\/h2>\n<p class=\"lpm-intro\">Estimates a laser power range for a cutting job from reference cutting-chart data. Fields marked <span aria-hidden=\"true\">*<\/span><span class=\"lpm-sr\">with an asterisk<\/span> are required.<\/p>\n<div id=\"lpm-form\">\n<fieldset class=\"lpm-group\">\n<legend class=\"lpm-legend\">Material and process<\/legend>\n<div class=\"lpm-row\">\n<div class=\"lpm-field\">\n<label class=\"lpm-lbl\" for=\"lpm-mat\">Material Type<\/label>\n<select id=\"lpm-mat\" class=\"lpm-select\">\n<option value=\"mild\">Mild steel (carbon steel)<\/option>\n<option value=\"stainless\">Stainless steel<\/option>\n<option value=\"aluminum\">Aluminum alloy<\/option>\n<option value=\"brass\">Brass<\/option>\n<option value=\"custom\">Custom material<\/option>\n<\/select>\n<\/div>\n<div class=\"lpm-field\" id=\"lpm-matname-wrap\" hidden>\n<label class=\"lpm-lbl\" for=\"lpm-matname\">Custom Material Name<span class=\"lpm-opt\">(optional)<\/span><\/label>\n<input id=\"lpm-matname\" class=\"lpm-input\" type=\"text\" maxlength=\"60\" autocomplete=\"off\">\n<\/div>\n<div class=\"lpm-field\">\n<label class=\"lpm-lbl\" for=\"lpm-t\">Maximum Material Thickness<span class=\"lpm-req\" aria-hidden=\"true\">*<\/span><\/label>\n<div class=\"lpm-inline\">\n<input id=\"lpm-t\" class=\"lpm-input\" type=\"text\" inputmode=\"decimal\" aria-required=\"true\" aria-describedby=\"lpm-t-err\">\n<select id=\"lpm-t-unit\" class=\"lpm-select lpm-unit\" aria-label=\"Thickness unit\" data-kind=\"len\" data-for=\"lpm-t\">\n<option value=\"mm\">mm<\/option>\n<option value=\"in\">in<\/option>\n<\/select>\n<\/div>\n<p class=\"lpm-err\" id=\"lpm-t-err\" hidden><\/p>\n<\/div>\n<div class=\"lpm-field\">\n<label class=\"lpm-lbl\" for=\"lpm-gas\">Assist Gas<\/label>\n<select id=\"lpm-gas\" class=\"lpm-select\">\n<option value=\"o2\">Oxygen (O\u2082)<\/option>\n<option value=\"n2\">Nitrogen (N\u2082)<\/option>\n<option value=\"air\">Compressed air<\/option>\n<option value=\"custom\">Custom gas<\/option>\n<\/select>\n<\/div>\n<div class=\"lpm-field\" id=\"lpm-gasname-wrap\" hidden>\n<label class=\"lpm-lbl\" for=\"lpm-gasname\">Custom Gas Name<span class=\"lpm-opt\">(optional)<\/span><\/label>\n<input id=\"lpm-gasname\" class=\"lpm-input\" type=\"text\" maxlength=\"60\" autocomplete=\"off\">\n<\/div>\n<div class=\"lpm-field\">\n<label class=\"lpm-lbl\" for=\"lpm-q\">Required Cutting Quality<\/label>\n<select id=\"lpm-q\" class=\"lpm-select\" aria-describedby=\"lpm-q-help\">\n<option value=\"standard\">Standard<\/option>\n<option value=\"fine\">Fine edge<\/option>\n<option value=\"precision\">High precision<\/option>\n<\/select>\n<p class=\"lpm-help\" id=\"lpm-q-help\">Applied through the target speed: Standard uses the upper end of the chart speed range, Fine edge the midpoint, High precision the lower end.<\/p>\n<\/div>\n<div class=\"lpm-field\">\n<label class=\"lpm-lbl\" for=\"lpm-v\">Desired Cutting Speed<span class=\"lpm-opt\">(optional)<\/span><\/label>\n<div class=\"lpm-inline\">\n<input id=\"lpm-v\" class=\"lpm-input\" type=\"text\" inputmode=\"decimal\" aria-describedby=\"lpm-v-err lpm-v-help\">\n<select id=\"lpm-v-unit\" class=\"lpm-select lpm-unit\" aria-label=\"Cutting speed unit\" data-kind=\"spd\" data-for=\"lpm-v\">\n<option value=\"mpm\">m\/min<\/option>\n<option value=\"mmpm\">mm\/min<\/option>\n<option value=\"ipm\">in\/min<\/option>\n<\/select>\n<\/div>\n<p class=\"lpm-err\" id=\"lpm-v-err\" hidden><\/p>\n<p class=\"lpm-help\" id=\"lpm-v-help\">Leave blank to size for cutting capability at the maximum thickness only.<\/p>\n<\/div>\n<div class=\"lpm-field\">\n<label class=\"lpm-lbl\" for=\"lpm-prod\">Production Requirement<\/label>\n<select id=\"lpm-prod\" class=\"lpm-select\" aria-describedby=\"lpm-prod-help\">\n<option value=\"occasional\">Occasional use<\/option>\n<option value=\"regular\">Regular production<\/option>\n<option value=\"high\">High-volume operation<\/option>\n<\/select>\n<p class=\"lpm-help\" id=\"lpm-prod-help\">Sets the headroom above the minimum: Occasional adds none, Regular one common power-rating step, High-volume two steps.<\/p>\n<\/div>\n<\/div>\n<p class=\"lpm-support\" id=\"lpm-support\" aria-live=\"polite\"><\/p>\n<\/fieldset>\n<fieldset class=\"lpm-group\">\n<legend class=\"lpm-legend\">Known machine parameters<\/legend>\n<label class=\"lpm-check\" id=\"lpm-useown-wrap\"><input type=\"checkbox\" id=\"lpm-useown\"><span>Use my own machine data instead of the built-in chart<\/span><\/label>\n<div class=\"lpm-own\" id=\"lpm-own\" hidden>\n<p class=\"lpm-own-h\">Known cutting points at your maximum thickness<\/p>\n<p class=\"lpm-own-p\" id=\"lpm-own-p\">Enter laser power and cutting speed pairs from a manufacturer&#8217;s cutting chart or proven test cuts, for the same material, thickness, assist gas and edge quality. With a target speed and two points on either side of it, the calculator interpolates power between them. It does not extrapolate.<\/p>\n<div class=\"lpm-row\">\n<div class=\"lpm-field\">\n<label class=\"lpm-lbl\" for=\"lpm-p1\">Point 1 Laser Power<span class=\"lpm-req\" aria-hidden=\"true\">*<\/span><\/label>\n<div class=\"lpm-inline\">\n<input id=\"lpm-p1\" class=\"lpm-input\" type=\"text\" inputmode=\"decimal\" aria-describedby=\"lpm-p1-err\">\n<select id=\"lpm-pw-unit\" class=\"lpm-select lpm-unit\" aria-label=\"Known laser power unit\" data-kind=\"pow\" data-for=\"lpm-p1 lpm-p2\">\n<option value=\"kw\">kW<\/option>\n<option value=\"w\">W<\/option>\n<\/select>\n<\/div>\n<p class=\"lpm-err\" id=\"lpm-p1-err\" hidden><\/p>\n<\/div>\n<div class=\"lpm-field\">\n<label class=\"lpm-lbl\" for=\"lpm-s1\">Point 1 Cutting Speed<span class=\"lpm-req\" aria-hidden=\"true\">*<\/span><\/label>\n<div class=\"lpm-inline\">\n<input id=\"lpm-s1\" class=\"lpm-input\" type=\"text\" inputmode=\"decimal\" aria-describedby=\"lpm-s1-err\">\n<select id=\"lpm-s-unit\" class=\"lpm-select lpm-unit\" aria-label=\"Known cutting speed unit\" data-kind=\"spd\" data-for=\"lpm-s1 lpm-s2\">\n<option value=\"mpm\">m\/min<\/option>\n<option value=\"mmpm\">mm\/min<\/option>\n<option value=\"ipm\">in\/min<\/option>\n<\/select>\n<\/div>\n<p class=\"lpm-err\" id=\"lpm-s1-err\" hidden><\/p>\n<\/div>\n<div class=\"lpm-field\">\n<label class=\"lpm-lbl\" for=\"lpm-p2\">Point 2 Laser Power<span class=\"lpm-opt\" id=\"lpm-p2-u\">(optional, kW)<\/span><\/label>\n<input id=\"lpm-p2\" class=\"lpm-input\" type=\"text\" inputmode=\"decimal\" aria-describedby=\"lpm-p2-err\">\n<p class=\"lpm-err\" id=\"lpm-p2-err\" hidden><\/p>\n<\/div>\n<div class=\"lpm-field\">\n<label class=\"lpm-lbl\" for=\"lpm-s2\">Point 2 Cutting Speed<span class=\"lpm-opt\" id=\"lpm-s2-u\">(optional, m\/min)<\/span><\/label>\n<input id=\"lpm-s2\" class=\"lpm-input\" type=\"text\" inputmode=\"decimal\" aria-describedby=\"lpm-s2-err\">\n<p class=\"lpm-err\" id=\"lpm-s2-err\" hidden><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/fieldset>\n<div class=\"lpm-actions\">\n<button type=\"button\" class=\"lpm-btn\" id=\"lpm-calc\">Calculate<\/button>\n<\/div>\n<p class=\"lpm-sr\" id=\"lpm-status\" role=\"status\" aria-live=\"polite\"><\/p>\n<\/div>\n<\/section>\n<section class=\"lpm-card lpm-results\" aria-labelledby=\"lpm-results-title\" id=\"lpm-results\" tabindex=\"-1\" hidden>\n<h2 id=\"lpm-results-title\">Results<\/h2>\n<p class=\"lpm-badge\">Preliminary equipment selection guide<\/p>\n<div class=\"lpm-alert\" id=\"lpm-error\" role=\"alert\" hidden><\/div>\n<div id=\"lpm-body\">\n<div class=\"lpm-main\">\n<span class=\"lpm-rcard-label\">Estimated minimum laser power<\/span>\n<div class=\"lpm-main-val\"><span id=\"lpm-r-min\"><\/span><span class=\"lpm-rcard-unit\">kW<\/span><\/div>\n<div class=\"lpm-main-note\" id=\"lpm-r-minnote\"><\/div>\n<\/div>\n<div class=\"lpm-rgrid\">\n<div class=\"lpm-rcard\">\n<span class=\"lpm-rcard-label\">Suggested power range<\/span>\n<div class=\"lpm-rcard-value\"><span id=\"lpm-r-range\"><\/span><span class=\"lpm-rcard-unit\">kW<\/span><\/div>\n<div class=\"lpm-rcard-sub\" id=\"lpm-r-rangenote\"><\/div>\n<\/div>\n<div class=\"lpm-rcard\">\n<span class=\"lpm-rcard-label\">Limiting requirement<\/span>\n<div class=\"lpm-rcard-text\" id=\"lpm-r-limit\"><\/div>\n<div class=\"lpm-rcard-sub\" id=\"lpm-r-limitnote\"><\/div>\n<\/div>\n<\/div>\n<table class=\"lpm-table\">\n<caption class=\"lpm-sub-h\">Application summary<\/caption>\n<tbody>\n<tr><th scope=\"row\">Material<\/th><td id=\"lpm-s-mat\"><\/td><\/tr>\n<tr><th scope=\"row\">Maximum thickness<\/th><td id=\"lpm-s-t\"><\/td><\/tr>\n<tr><th scope=\"row\">Assist gas<\/th><td id=\"lpm-s-gas\"><\/td><\/tr>\n<tr><th scope=\"row\">Cutting quality<\/th><td id=\"lpm-s-q\"><\/td><\/tr>\n<tr><th scope=\"row\">Desired cutting speed<\/th><td id=\"lpm-s-v\"><\/td><\/tr>\n<tr><th scope=\"row\">Production requirement<\/th><td id=\"lpm-s-prod\"><\/td><\/tr>\n<tr><th scope=\"row\">Reference basis<\/th><td id=\"lpm-s-basis\"><\/td><\/tr>\n<\/tbody>\n<\/table>\n<div class=\"lpm-method\">\n<span class=\"lpm-method-label\" id=\"lpm-m-label\">Reference data and matching steps<\/span>\n<p class=\"lpm-method-body\" id=\"lpm-m-body\"><\/p>\n<\/div>\n<p class=\"lpm-source\" id=\"lpm-src-note\"><\/p>\n<\/div>\n<div class=\"lpm-disclaimer lpm-verify\"><strong>Verify before selecting a machine:<\/strong>\n<ul>\n<li>Compare the estimate with the cutting parameter chart for the exact laser source and cutting head you are considering, at the same material grade, thickness, gas and edge quality.<\/li>\n<li>Ask the machine supplier for test cuts on your own material and check kerf, dross, burr, striation and edge squareness.<\/li>\n<li>Confirm the assist-gas pressure, purity and supply capacity the supplier&#8217;s chart assumes.<\/li>\n<li>Check throughput on your real parts, including piercing and travel time, not only the straight-line cutting speed.<\/li>\n<\/ul>\n<\/div>\n<p class=\"lpm-disclaimer\"><strong>Important:<\/strong> Laser power alone does not determine cutting performance. Actual cutting capability depends on the laser source, beam quality, optics, focal position, nozzle, assist-gas pressure and purity, material grade, machine condition and the required edge quality. Confirm the power selection with the machine manufacturer and review the manufacturer&#8217;s material-specific cutting parameter charts.<\/p>\n<\/section>\n<\/div>\n<\/div>\n<\/div>\n<!--noptimize--><script data-no-optimize=\"1\" data-no-defer=\"1\" data-no-minify=\"1\" data-cfasync=\"false\" data-pagespeed-no-defer nowprocket data-noptimize=\"1\">(function () {\n'use strict';\nfunction lt(a, b) { return a !== b ? Math.max(a, b) === b : false; }\nfunction gt(a, b) { return lt(b, a); }\nfunction le(a, b) { return Math.min(a, b) === a; }\nfunction ge(a, b) { return Math.max(a, b) === a; }\n\n\/* =====================================================================\n   CONFIGURATION\n   Edit the values below to update the reference data. The interface\n   reads everything from CONFIG, so no markup changes are needed.\n   - references: one entry per material + assist gas combination.\n     powers = chart power columns in W; rows = [thickness mm, [ [speed low, speed high] in m\/min per power column, or null where the chart lists no data ]].\n     Combinations without an entry are treated as \"no reliable reference data\".\n   - quality: which point of each speed range the target speed must be reached at (0 = low end, 1 = high end).\n   - production: headroom, in steps of the powerLadder, added above the minimum.\n   - powerLadder: common laser source ratings in kW used to express the suggested range.\n   ===================================================================== *\/\nvar RAYCUS = {\n  name: 'Raycus fiber laser source cutting speed chart (750 W to 6000 W)',\n  cite: 'Raycus fiber laser source cutting chart as published by MachineMFG, \"Fiber Laser Cutting Speed (Raycus Laser Source)\", machinemfg.com.',\n  notes: 'Where a thickness row lists fewer values than power columns, the values were assigned to the highest-power columns, following the chart layout in which lower-power sources cannot cut the thicker plate.'\n};\nvar CONFIG = {\n  sourceBasis: 'Fiber laser source (built-in chart)',\n  references: [\n    { material: 'mild', gas: 'o2', ref: RAYCUS, powers: [750, 1000, 1500, 2200, 3300, 6000], rows: [\n      [1,  [[10, 16], [10, 16], [10, 16], [10, 16], [10, 16], [10, 16]]],\n      [2,  [[3, 4], [5, 6], [5, 8], [5, 8], [5, 8], [5, 8]]],\n      [3,  [[2, 2.5], [2.5, 3.5], [3.5, 4.5], [3.5, 4], [4, 4.5], [3, 5]]],\n      [5,  [[1, 1.5], [1.2, 1.8], [1.5, 1.8], [2, 3], [3, 3.5], [3, 4]]],\n      [6,  [[0.5, 1], [1, 1.5], [1.3, 1.5], [1.8, 2.2], [1.8, 2.2], [2.5, 3.5]]],\n      [8,  [[0.5, 0.8], [0.8, 1], [1, 1.2], [1.2, 1.8], [1.8, 2.2], [2, 2.8]]],\n      [10, [null, [0.5, 0.7], [0.7, 1], [1.2, 1.5], [1.1, 1.3], [1, 2.1]]],\n      [12, [null, [0.4, 0.6], [0.6, 0.8], [0.7, 1], [0.8, 1], [1, 2]]],\n      [14, [null, null, [0.5, 0.7], [0.6, 0.9], [0.6, 0.8], [0.8, 1]]],\n      [16, [null, null, [0.5, 0.7], [0.5, 0.8], [0.5, 0.8], [0.7, 0.9]]],\n      [18, [null, null, null, [0.4, 0.6], [0.5, 0.7], [0.7, 0.8]]],\n      [20, [null, null, null, null, [0.4, 0.6], [0.6, 0.8]]],\n      [22, [null, null, null, null, [0.3, 0.5], [0.5, 0.7]]],\n      [25, [null, null, null, null, null, [0.4, 0.6]]]\n    ] },\n    { material: 'stainless', gas: 'n2', ref: RAYCUS, powers: [750, 1000, 1500, 2200, 3300, 6000], rows: [\n      [1,  [[16, 20], [20, 24], [25, 30], [25, 35], [35, 45], [50, 70]]],\n      [2,  [[3.5, 4.5], [6, 7], [9, 10], [10, 11], [12, 14], [30, 40]]],\n      [3,  [[1.5, 2], [2, 3], [4, 5], [5, 6], [8, 9], [14, 20]]],\n      [4,  [[0.8, 1.2], [1, 1.5], [2, 3], [3, 4], [4, 5], [6, 12]]],\n      [5,  [null, [0.5, 0.8], [1, 1.5], [1.5, 2], [2.5, 3.3], [5, 10]]],\n      [6,  [null, null, [0.7, 1], [1.2, 1.5], [1.6, 2.1], [4, 7]]],\n      [8,  [null, null, null, [0.6, 0.8], [0.9, 1.2], [3, 5]]],\n      [10, [null, null, null, null, [0.6, 0.8], [1.5, 2.5]]],\n      [12, [null, null, null, null, null, [1, 2]]],\n      [14, [null, null, null, null, null, [0.8, 1]]],\n      [16, [null, null, null, null, null, [0.5, 0.8]]]\n    ] },\n    { material: 'aluminum', gas: 'n2', ref: RAYCUS, powers: [750, 1000, 1500, 2200, 3300, 6000], rows: [\n      [1,  [[8, 10], [10, 12], [14, 16], [18, 24], [25, 33], [50, 70]]],\n      [2,  [[0.8, 1.5], [2, 3.5], [4.5, 5.5], [7, 12], [10, 14], [25, 35]]],\n      [3,  [null, [0.5, 1], [2, 3], [3, 5], [5, 7], [15, 25]]],\n      [4,  [null, null, [1.2, 1.8], [2, 3], [3, 4.5], [13, 18]]],\n      [5,  [null, null, [0.5, 1], [1, 2], [2, 3.5], [6, 10]]],\n      [6,  [null, null, null, [0.6, 0.8], [1.5, 2.5], [4, 6]]],\n      [8,  [null, null, null, null, [0.5, 1], [2, 3]]],\n      [10, [null, null, null, null, null, [1, 2]]],\n      [12, [null, null, null, null, null, [0.8, 1.5]]],\n      [16, [null, null, null, null, null, [0.5, 0.8]]]\n    ] }\n  ],\n  quality: {\n    standard:  { pos: 1,   label: 'Standard', point: 'upper end of the speed range' },\n    fine:      { pos: 0.5, label: 'Fine edge', point: 'midpoint of the speed range' },\n    precision: { pos: 0,   label: 'High precision', point: 'lower end of the speed range' }\n  },\n  production: {\n    occasional: { steps: 0, label: 'Occasional use' },\n    regular:    { steps: 1, label: 'Regular production' },\n    high:       { steps: 2, label: 'High-volume operation' }\n  },\n  powerLadder: [1, 1.5, 2, 3, 4, 6, 8, 10, 12, 15, 20, 30, 40]\n};\n\/* ========================== end of configuration ========================== *\/\n\nvar MM_PER_IN = 25.4;\nvar MATERIALS = { mild: 'Mild steel (carbon steel)', stainless: 'Stainless steel', aluminum: 'Aluminum alloy', brass: 'Brass', custom: 'Custom material' };\nvar MAT_SHORT = { mild: 'mild steel', stainless: 'stainless steel', aluminum: 'aluminum alloy', brass: 'brass', custom: 'a custom material' };\nvar GASES = { o2: 'Oxygen (O\u2082)', n2: 'Nitrogen (N\u2082)', air: 'Compressed air', custom: 'Custom gas' };\nvar GAS_SHORT = { o2: 'oxygen', n2: 'nitrogen', air: 'compressed air', custom: 'a custom gas' };\nvar SPD_TO_MPM = { mpm: 1, mmpm: 0.001, ipm: 0.0254 };\nvar SPD_LABEL = { mpm: 'm\/min', mmpm: 'mm\/min', ipm: 'in\/min' };\n\nfunction setup(host) {\n  if (host.getAttribute('data-lpmx-ready') === '1') return;\n  if (!host.querySelector('.lpm-root')) return;\n  host.setAttribute('data-lpmx-ready', '1');\n  var scope = host;\n  if (host.attachShadow) { scope = host.attachShadow({ mode: 'open' }); while (host.firstChild) scope.appendChild(host.firstChild); }\n  function $(id) { return scope.getElementById ? scope.getElementById(id) : scope.querySelector('#' + id); }\n  var root = $('lpm-app');\n  if (!root) return;\n\n  function parseNum(raw) {\n    var s = String(raw == null ? '' : raw).trim().replace(\/\\s+\/g, '').replace(\/^\u2212\/, '-');\n    if (s === '') return { empty: true, ok: false };\n    if (\/^[+-]?\\d{1,3}(,\\d{3})+(\\.\\d+)?$\/.test(s)) { s = s.replace(\/,\/g, ''); }\n    else if (\/^[+-]?\\d*,\\d+$\/.test(s)) { s = s.replace(',', '.'); }\n    if (!\/^[+-]?(\\d+\\.?\\d*|\\.\\d+)(e[+-]?\\d+)?$\/i.test(s)) return { empty: false, ok: false };\n    var n = Number(s);\n    if (!isFinite(n)) return { empty: false, ok: false };\n    return { empty: false, ok: true, n: n };\n  }\n  function g(n, p) { if (typeof n !== 'number') return '\u2014'; if (!isFinite(n)) return '\u2014'; return Number(n.toPrecision(p || 4)).toLocaleString('en-US', { maximumFractionDigits: 8 }); }\n  function plain(n, p) { return String(Number(n.toPrecision(p || 6))); }\n  function mk(tag, text) { var e = document.createElement(tag); if (text != null) e.textContent = text; return e; }\n  function kw(w) { return g(w \/ 1000, 3) + ' kW'; }\n  function near(a, b) { return le(Math.abs(a - b), 1e-9 * Math.max(1, Math.abs(a), Math.abs(b))); }\n  function ceilSig(x, p) {\n    if (le(x, 0)) return 0;\n    var e = Math.floor(Math.log(x) \/ Math.LN10) - (p - 1);\n    var f = Math.pow(10, e);\n    return Number((Math.ceil(x \/ f - 1e-9) * f).toPrecision(p + 1));\n  }\n\n  function findSet(mat, gas) {\n    var refs = CONFIG.references;\n    for (var i = 0; i !== refs.length; i++) { if (refs[i].material === mat) { if (refs[i].gas === gas) return refs[i]; } }\n    return null;\n  }\n  function column(set, ci) {\n    var pts = [];\n    for (var i = 0; i !== set.rows.length; i++) { var v = set.rows[i][1][ci]; if (v) pts.push({ t: set.rows[i][0], lo: v[0], hi: v[1] }); }\n    return pts;\n  }\n  function setRange(set) {\n    var tmin = Infinity, tmax = 0;\n    for (var ci = 0; ci !== set.powers.length; ci++) {\n      var pts = column(set, ci);\n      if (pts.length) { tmin = Math.min(tmin, pts[0].t); tmax = Math.max(tmax, pts[pts.length - 1].t); }\n    }\n    return { pmin: set.powers[0], pmax: set.powers[set.powers.length - 1], tmin: tmin, tmax: tmax };\n  }\n  function logInterp(a, b, f) { return Math.exp(Math.log(a) + f * (Math.log(b) - Math.log(a))); }\n  function atThickness(pts, t) {\n    if (!pts.length) return { err: 'none' };\n    var first = pts[0], last = pts[pts.length - 1];\n    if (near(t, first.t)) return { lo: first.lo, hi: first.hi, a: first, b: null };\n    if (near(t, last.t)) return { lo: last.lo, hi: last.hi, a: last, b: null };\n    if (lt(t, first.t)) return { err: 'thin' };\n    if (gt(t, last.t)) return { err: 'thick' };\n    for (var i = 0; i !== pts.length - 1; i++) {\n      var a = pts[i], b = pts[i + 1];\n      if (near(t, b.t)) return { lo: b.lo, hi: b.hi, a: b, b: null };\n      if (gt(t, a.t)) { if (lt(t, b.t)) { var f = (t - a.t) \/ (b.t - a.t); return { lo: logInterp(a.lo, b.lo, f), hi: logInterp(a.hi, b.hi, f), a: a, b: b }; } }\n    }\n    return { err: 'none' };\n  }\n\n  \/* Table matching: find the lowest chart power that lists the thickness and, if a target speed is given, reaches it at the quality point. *\/\n  function tableMatch(set, t, target, qk) {\n    var pos = CONFIG.quality[qk].pos, R = setRange(set), cols = [], cap = -1;\n    for (var ci = 0; ci !== set.powers.length; ci++) {\n      var r = atThickness(column(set, ci), t);\n      var c = { power: set.powers[ci], ok: !r.err };\n      if (c.ok) { c.lo = Math.min(r.lo, r.hi); c.hi = Math.max(r.lo, r.hi); c.sp = c.lo + pos * (c.hi - c.lo); c.a = r.a; c.b = r.b; if (cap === -1) cap = ci; }\n      cols.push(c);\n    }\n    if (cap === -1) {\n      if (lt(t, R.tmin)) return { err: g(t, 4) + ' mm is thinner than the thinnest plate in the reference chart (' + g(R.tmin) + ' mm). The calculator does not extrapolate below the chart.' };\n      return { err: g(t, 4) + ' mm is beyond the reference chart, which lists this combination up to ' + g(R.tmax) + ' mm at ' + kw(R.pmax) + '. The calculator does not extrapolate beyond the chart.' };\n    }\n    var res = { cols: cols, cap: cap, R: R };\n    if (target == null) {\n      res.minW = cols[cap].power; res.bound = cap === 0 ? 'atMost' : 'chart'; res.limit = 'thickness';\n      return res;\n    }\n    var pass = -1, best = null;\n    for (var k = cap; k !== cols.length; k++) {\n      if (!cols[k].ok) continue;\n      if (best === null) best = cols[k]; else if (gt(cols[k].sp, best.sp)) best = cols[k];\n      if (ge(cols[k].sp, target)) { pass = k; break; }\n    }\n    if (pass === -1) {\n      return { err: 'At ' + CONFIG.quality[qk].label.toLowerCase() + ' quality, the fastest chart value for ' + g(t, 4) + ' mm is about ' + g(best.sp, 3) + ' m\/min (at ' + kw(best.power) + '), which is below the target of ' + g(target, 3) + ' m\/min. The reference chart ends at ' + kw(R.pmax) + ', so the calculator cannot estimate the power needed.' };\n    }\n    res.pass = pass;\n    if (pass === cap) {\n      res.minW = cols[pass].power; res.bound = cap === 0 ? 'atMost' : 'chart'; res.limit = cap === 0 ? 'both' : 'thickness';\n      return res;\n    }\n    var a = cols[pass - 1], b = cols[pass];\n    if (!a.ok) { res.minW = b.power; res.bound = 'chart'; res.limit = 'speed'; return res; }\n    var f = (target - a.sp) \/ (b.sp - a.sp);\n    res.minW = a.power + f * (b.power - a.power); res.bound = 'interp'; res.limit = 'speed'; res.ia = a; res.ib = b; res.f = f;\n    return res;\n  }\n\n  \/* Own-data matching: points are {P in W, v in m\/min} at the user's maximum thickness. *\/\n  function ownMatch(pts, target) {\n    pts.sort(function (x, y) { return x.P - y.P; });\n    var res = { pts: pts };\n    if (target == null) { res.minW = pts[0].P; res.bound = 'atMost'; res.limit = 'own'; return res; }\n    if (ge(pts[0].v, target)) { res.minW = pts[0].P; res.bound = 'atMost'; res.limit = 'own'; return res; }\n    if (pts.length === 1) return { err: 'Your known point (' + kw(pts[0].P) + ' at ' + g(pts[0].v, 3) + ' m\/min) is slower than the target of ' + g(target, 3) + ' m\/min. Add a second point at a higher power that reaches the target so the calculator can interpolate.' };\n    if (lt(pts[1].v, target)) return { err: 'Neither of your known points reaches the target of ' + g(target, 3) + ' m\/min. The calculator does not extrapolate beyond your data; add a point at a power that reaches the target.' };\n    var f = (target - pts[0].v) \/ (pts[1].v - pts[0].v);\n    res.minW = pts[0].P + f * (pts[1].P - pts[0].P); res.bound = 'interp'; res.limit = 'own'; res.f = f;\n    return res;\n  }\n\n  function ladderRange(minKW, steps) {\n    var L = CONFIG.powerLadder, i = -1;\n    for (var k = 0; k !== L.length; k++) { if (ge(L[k] + 1e-9, minKW)) { i = k; break; } }\n    if (i === -1) return { lo: null };\n    var j = Math.min(i + steps, L.length - 1);\n    return { lo: L[i], hi: L[j], capped: lt(j, i + steps) };\n  }\n\n  var LABEL = { t: 'Maximum material thickness', v: 'Desired cutting speed', p1: 'Point 1 laser power', s1: 'Point 1 cutting speed', p2: 'Point 2 laser power', s2: 'Point 2 cutting speed' };\n  var KEYS = ['t', 'v', 'p1', 's1', 'p2', 's2'];\n  function setErr(key, msg) {\n    var el = $('lpm-' + key), er = $('lpm-' + key + '-err');\n    if (msg) { el.classList.add('lpm-invalid'); el.setAttribute('aria-invalid', 'true'); er.textContent = msg; er.hidden = false; }\n    else { el.classList.remove('lpm-invalid'); el.removeAttribute('aria-invalid'); er.textContent = ''; er.hidden = true; }\n  }\n  function clearAllErrors() { KEYS.forEach(function (k) { setErr(k, null); }); }\n  function positive(key, required) {\n    var p = parseNum($('lpm-' + key).value);\n    if (p.empty) return required ? LABEL[key] + ' is required.' : null;\n    if (!p.ok) return LABEL[key] + ' must be a valid number.';\n    if (le(p.n, 0)) return LABEL[key] + ' must be greater than zero.';\n    return null;\n  }\n  function currentSet() { return findSet($('lpm-mat').value, $('lpm-gas').value); }\n  function ownMode() { if (!currentSet()) return true; return $('lpm-useown').checked; }\n  function check(key) {\n    if (key === 't') return positive('t', true);\n    if (key === 'v') return positive('v', false);\n    if (!ownMode()) return null;\n    if (key === 'p1') return positive('p1', true);\n    if (key === 's1') return positive('s1', true);\n    var e2p = parseNum($('lpm-p2').value).empty, e2s = parseNum($('lpm-s2').value).empty;\n    var need = !(e2p ? e2s : false);\n    if (key === 'p2') {\n      var m = positive('p2', need); if (m) return m;\n      if (!e2p) { var a = parseNum($('lpm-p1').value), b = parseNum($('lpm-p2').value); if (a.ok) { if (near(a.n, b.n)) return 'Point 2 laser power must differ from point 1.'; } }\n      return null;\n    }\n    if (key === 's2') return positive('s2', need);\n    return null;\n  }\n\n  var OWN_TEXT = 'Enter laser power and cutting speed pairs from a manufacturer\\'s cutting chart or proven test cuts, for the same material, thickness, assist gas and edge quality. With a target speed and two points on either side of it, the calculator interpolates power between them. It does not extrapolate.';\n  function refreshSupport() {\n    var set = currentSet(), box = $('lpm-support');\n    $('lpm-matname-wrap').hidden = $('lpm-mat').value !== 'custom';\n    $('lpm-gasname-wrap').hidden = $('lpm-gas').value !== 'custom';\n    if (set) {\n      var R = setRange(set);\n      box.classList.remove('lpm-none');\n      box.textContent = 'Built-in reference data available for ' + MAT_SHORT[set.material] + ' with ' + GAS_SHORT[set.gas] + ': ' + set.ref.name + ', ' + kw(R.pmin) + ' to ' + kw(R.pmax) + ', ' + g(R.tmin) + ' to ' + g(R.tmax) + ' mm (lower-power sources cover a narrower thickness range).';\n      $('lpm-useown-wrap').hidden = false;\n      $('lpm-own').hidden = !$('lpm-useown').checked;\n      $('lpm-own-p').textContent = OWN_TEXT;\n    } else {\n      box.classList.add('lpm-none');\n      box.textContent = 'No reliable built-in reference data for ' + MAT_SHORT[$('lpm-mat').value] + ' with ' + GAS_SHORT[$('lpm-gas').value] + ', so the calculator cannot make a dependable estimate from its table. Enter known cutting points from a machine manufacturer\\'s chart below to continue.';\n      $('lpm-useown-wrap').hidden = true;\n      $('lpm-own').hidden = false;\n      $('lpm-own-p').textContent = 'Required for this combination. ' + OWN_TEXT;\n    }\n    $('lpm-p2-u').textContent = '(optional, ' + ($('lpm-pw-unit').value === 'kw' ? 'kW' : 'W') + ')';\n    $('lpm-s2-u').textContent = '(optional, ' + SPD_LABEL[$('lpm-s-unit').value] + ')';\n  }\n\n  function showAlert(title, items, warn, extra) {\n    var box = $('lpm-error');\n    box.textContent = '';\n    box.className = warn ? 'lpm-alert lpm-alert-warn' : 'lpm-alert';\n    box.appendChild(mk('strong', title));\n    if (items.length) { var ul = mk('ul'); items.forEach(function (e) { ul.appendChild(mk('li', e)); }); box.appendChild(ul); }\n    if (extra) box.appendChild(mk('p', extra));\n    box.hidden = false;\n    $('lpm-body').hidden = true;\n  }\n  function setLines(el, lines) { el.textContent = ''; lines.forEach(function (t, i) { if (i) el.appendChild(document.createElement('br')); el.appendChild(document.createTextNode(t)); }); }\n\n  function render(R, M) {\n    $('lpm-error').hidden = true; $('lpm-body').hidden = false;\n    var Q = CONFIG.quality[R.q], PR = CONFIG.production[R.prod];\n    var minKW, minTxt, minNote;\n    if (M.bound === 'interp') { minKW = ceilSig(M.minW \/ 1000, 2); minTxt = g(minKW, 3); minNote = 'Interpolated and rounded up to 2 significant figures.'; }\n    else if (M.bound === 'atMost') { minKW = M.minW \/ 1000; minTxt = '\u2264 ' + g(minKW, 3); minNote = R.mode === 'table' ? 'This is the lowest power in the reference chart, so the true minimum may be lower.' : 'Your lowest known point already meets the requirement, so the true minimum may be lower.'; }\n    else { minKW = M.minW \/ 1000; minTxt = g(minKW, 3); minNote = 'The next lower chart power (' + kw(M.cols[M.cap - 1].power) + ') does not list this thickness, so the minimum is taken at the chart step.'; }\n    $('lpm-r-min').textContent = minTxt;\n    $('lpm-r-minnote').textContent = minNote;\n\n    var LR = ladderRange(minKW, PR.steps), rangeTxt, rangeNote;\n    if (LR.lo === null) { rangeTxt = g(minKW, 3) + '+'; rangeNote = 'Above the largest rating in the configured power ladder; confirm with the manufacturer.'; }\n    else {\n      rangeTxt = LR.lo === LR.hi ? g(LR.lo, 3) : g(LR.lo, 3) + '\u2013' + g(LR.hi, 3);\n      rangeNote = PR.label + ': ' + (PR.steps === 0 ? 'smallest common rating at or above the minimum, no headroom added.' : 'smallest common rating at or above the minimum, plus ' + PR.steps + ' rating step' + (PR.steps === 1 ? '' : 's') + ' of headroom.');\n      if (LR.capped) rangeNote += ' Capped at the top of the configured power ladder.';\n      if (R.mode === 'table') { if (gt(LR.hi * 1000, M.R.pmax)) rangeNote += ' Ratings above ' + kw(M.R.pmax) + ' are outside the reference chart and are listed as headroom only.'; }\n    }\n    $('lpm-r-range').textContent = rangeTxt;\n    $('lpm-r-rangenote').textContent = rangeNote;\n\n    var lim, limNote;\n    if (M.limit === 'thickness') { lim = 'Thickness capability'; limNote = R.target == null ? 'No target speed entered, so only the ability to cut the maximum thickness was checked. ' + Q.label + ' quality is not applied without a target speed.' : 'The target speed is already met at the lowest chart power that cuts this thickness.'; }\n    else if (M.limit === 'speed') { lim = 'Target cutting speed'; limNote = 'Power needed to reach ' + g(R.target, 3) + ' m\/min at the ' + Q.point + ' (' + Q.label.toLowerCase() + ').'; }\n    else if (M.limit === 'both') { lim = 'Met at the chart\\'s lowest power'; limNote = 'Both the thickness and the target speed are met at ' + kw(M.cols[0].power) + '.'; }\n    else { lim = 'Your machine data'; limNote = R.target == null ? 'No target speed entered; the lowest power in your data that cuts this thickness was used.' : 'Power needed to reach ' + g(R.target, 3) + ' m\/min according to your known points.'; }\n    $('lpm-r-limit').textContent = lim;\n    $('lpm-r-limitnote').textContent = limNote;\n\n    var matName = MATERIALS[R.mat]; if (R.mat === 'custom') { if (R.matName) matName = 'Custom: ' + R.matName; }\n    var gasName = GASES[R.gas]; if (R.gas === 'custom') { if (R.gasName) gasName = 'Custom: ' + R.gasName; }\n    $('lpm-s-mat').textContent = matName;\n    $('lpm-s-t').textContent = g(R.t, 4) + ' mm' + (R.tu === 'in' ? ' (from ' + g(R.tIn, 4) + ' in)' : '');\n    $('lpm-s-gas').textContent = gasName;\n    $('lpm-s-q').textContent = Q.label + (R.mode === 'table' ? (R.target == null ? ' (not applied without a target speed)' : ' (' + Q.point + ')') : ' (assumed in your data)');\n    $('lpm-s-v').textContent = R.target == null ? 'Not specified' : g(R.target, 3) + ' m\/min' + (R.vu !== 'mpm' ? ' (from ' + g(R.vRaw, 4) + ' ' + SPD_LABEL[R.vu] + ')' : '');\n    $('lpm-s-prod').textContent = PR.label;\n    $('lpm-s-basis').textContent = R.mode === 'table' ? CONFIG.sourceBasis : 'Your own machine data';\n\n    var lines = [];\n    if (R.tu === 'in') lines.push('Thickness: ' + g(R.tIn, 4) + ' in \u00d7 25.4 = ' + g(R.t, 4) + ' mm');\n    if (R.mode === 'table') {\n      $('lpm-m-label').textContent = 'Reference data and matching steps';\n      lines.push('Chart speed at ' + g(R.t, 4) + ' mm for each power column (m\/min):');\n      M.cols.forEach(function (c, i) {\n        var s = '  ' + kw(c.power) + ': ';\n        if (!c.ok) { lines.push(s + 'no data at this thickness'); return; }\n        s += g(c.lo, 3) + '\u2013' + g(c.hi, 3) + (c.b ? ' (log interpolation ' + g(c.a.t) + '\u2013' + g(c.b.t) + ' mm)' : '');\n        if (R.target != null) { if (ge(i, M.cap)) { if (le(i, M.pass)) s += ', ' + Q.label.toLowerCase() + ' point ' + g(c.sp, 3) + (ge(c.sp, R.target) ? ' meets target' : ' below target'); } }\n        lines.push(s);\n      });\n      if (M.bound === 'interp') lines.push('Minimum: linear interpolation between ' + kw(M.ia.power) + ' (' + g(M.ia.sp, 3) + ') and ' + kw(M.ib.power) + ' (' + g(M.ib.sp, 3) + ') for ' + g(R.target, 3) + ' m\/min \u2192 ' + g(M.minW \/ 1000, 3) + ' kW \u2192 rounded up ' + g(minKW, 3) + ' kW');\n      else lines.push('Minimum: lowest chart power that meets the requirement \u2192 ' + minTxt + ' kW');\n      $('lpm-src-note').textContent = 'Data source: ' + M.set.ref.cite + ' ' + M.set.ref.notes + ' Assumptions: the chart reflects one manufacturer\\'s fiber laser sources on a specific machine, optics and gas setup, so it shows typical capability rather than the capability of a particular machine. Edge quality is represented only by the point chosen within each speed range; the chart itself does not grade edge quality.';\n    } else {\n      $('lpm-m-label').textContent = 'Your reference data and matching steps';\n      M.pts.forEach(function (p, i) { lines.push('Point ' + (i + 1) + ' (sorted by power): ' + kw(p.P) + ' at ' + g(p.v, 4) + ' m\/min'); });\n      if (M.bound === 'interp') lines.push('Minimum: linear interpolation for ' + g(R.target, 3) + ' m\/min \u2192 ' + g(M.minW \/ 1000, 3) + ' kW \u2192 rounded up ' + g(minKW, 3) + ' kW');\n      else lines.push('Minimum: lowest known point that meets the requirement \u2192 ' + minTxt + ' kW');\n      $('lpm-src-note').textContent = 'Data source: the cutting points you entered for your own machine. The calculator only interpolates between them and does not check them against other data.';\n    }\n    if (LR.lo !== null) lines.push('Range: smallest ladder rating \u2265 ' + g(minKW, 3) + ' kW = ' + g(LR.lo, 3) + ' kW, + ' + PR.steps + ' step' + (PR.steps === 1 ? '' : 's') + ' \u2192 ' + rangeTxt + ' kW');\n    setLines($('lpm-m-body'), lines);\n    $('lpm-status').textContent = 'Calculated. Estimated minimum laser power ' + minTxt.replace('\u2264', 'at most') + ' kilowatts. Suggested range ' + rangeTxt + ' kilowatts.';\n  }\n\n  function compute() {\n    clearAllErrors();\n    var errs = [];\n    KEYS.forEach(function (k) { var m = check(k); if (m) { setErr(k, m); errs.push(m); } });\n    if (errs.length) { showAlert('Please correct the following input' + (errs.length === 1 ? '' : 's') + ':', errs, false); return false; }\n    var tu = $('lpm-t-unit').value, tIn = parseNum($('lpm-t').value).n;\n    var vP = parseNum($('lpm-v').value), vu = $('lpm-v-unit').value;\n    var R = {\n      mat: $('lpm-mat').value, gas: $('lpm-gas').value, q: $('lpm-q').value, prod: $('lpm-prod').value,\n      matName: $('lpm-matname').value.trim(), gasName: $('lpm-gasname').value.trim(),\n      tu: tu, tIn: tIn, t: tu === 'in' ? tIn * MM_PER_IN : tIn,\n      vu: vu, vRaw: vP.ok ? vP.n : null, target: vP.ok ? vP.n * SPD_TO_MPM[vu] : null\n    };\n    var M;\n    if (ownMode()) {\n      R.mode = 'own';\n      var pf = $('lpm-pw-unit').value === 'kw' ? 1000 : 1, sf = SPD_TO_MPM[$('lpm-s-unit').value];\n      var pts = [{ P: parseNum($('lpm-p1').value).n * pf, v: parseNum($('lpm-s1').value).n * sf }];\n      var p2 = parseNum($('lpm-p2').value);\n      if (p2.ok) pts.push({ P: p2.n * pf, v: parseNum($('lpm-s2').value).n * sf });\n      M = ownMatch(pts, R.target);\n      if (M.err) { showAlert('No dependable estimate from your machine data.', [M.err], true); return false; }\n    } else {\n      R.mode = 'table';\n      var set = currentSet();\n      M = tableMatch(set, R.t, R.target, R.q);\n      if (M.err) { showAlert('No reliable estimate from the reference data for these inputs.', [M.err], true, 'To continue, tick \"Use my own machine data\" and enter known power and speed values from a machine manufacturer\\'s cutting chart for this material and thickness.'); return false; }\n      M.set = set;\n    }\n    render(R, M);\n    return true;\n  }\n\n  function run() {\n    var res = $('lpm-results'), first = res.hidden;\n    res.hidden = false;\n    if (!compute()) {\n      $('lpm-status').textContent = 'No estimate. ' + ($('lpm-error').textContent || 'Some inputs need attention.');\n      var bad = root.querySelector('.lpm-invalid');\n      if (bad) bad.focus(); else if (res.focus) res.focus();\n    } else if (first) { if (res.scrollIntoView) res.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }\n  }\n\n  function setSel(id, val) { var s = $(id); s.value = val; s.setAttribute('data-prev', val); }\n  function init() {\n    $('lpm-mat').value = 'mild';\n    $('lpm-gas').value = 'o2';\n    $('lpm-q').value = 'standard';\n    $('lpm-prod').value = 'occasional';\n    setSel('lpm-t-unit', 'mm'); setSel('lpm-v-unit', 'mpm'); setSel('lpm-pw-unit', 'kw'); setSel('lpm-s-unit', 'mpm');\n    ['lpm-t', 'lpm-v', 'lpm-p1', 'lpm-s1', 'lpm-p2', 'lpm-s2', 'lpm-matname', 'lpm-gasname'].forEach(function (id) { $(id).value = ''; });\n    $('lpm-useown').checked = false;\n    clearAllErrors(); refreshSupport();\n    $('lpm-results').hidden = true;\n    $('lpm-status').textContent = '';\n  }\n\n  function convert(kind, v, from, to) {\n    if (kind === 'len') { var mm = from === 'in' ? v * MM_PER_IN : v; return to === 'in' ? mm \/ MM_PER_IN : mm; }\n    if (kind === 'pow') { var w = from === 'kw' ? v * 1000 : v; return to === 'kw' ? w \/ 1000 : w; }\n    return v * SPD_TO_MPM[from] \/ SPD_TO_MPM[to];\n  }\n\n  root.addEventListener('change', function (e) {\n    var el = e.target;\n    if (el.id === 'lpm-mat' || el.id === 'lpm-gas' || el.id === 'lpm-useown') {\n      refreshSupport();\n      if (el.id === 'lpm-useown') { if (el.checked) $('lpm-p1').focus(); }\n      return;\n    }\n    if (!el.classList.contains('lpm-unit')) return;\n    var prev = el.getAttribute('data-prev'), next = el.value, kind = el.getAttribute('data-kind');\n    if (prev) { if (prev !== next) {\n      el.getAttribute('data-for').split(' ').forEach(function (id) { var input = $(id), p = parseNum(input.value); if (p.ok) input.value = plain(convert(kind, p.n, prev, next), 6); });\n    } }\n    el.setAttribute('data-prev', next);\n    refreshSupport();\n  });\n  root.addEventListener('input', function (e) {\n    var el = e.target;\n    if (!el.classList) return;\n    if (!el.classList.contains('lpm-invalid')) return;\n    var key = el.id.replace('lpm-', '');\n    if (!check(key)) setErr(key, null);\n  });\n  root.addEventListener('keydown', function (e) {\n    if (e.key !== 'Enter') return;\n    var el = e.target;\n    if (!el.classList) return;\n    if (!el.classList.contains('lpm-input')) return;\n    e.preventDefault(); run();\n  });\n  $('lpm-calc').addEventListener('click', run);\n  init();\n}\nfunction boot() { var hosts = document.querySelectorAll('.lpmx-host'); for (var i = 0; i !== hosts.length; i++) setup(hosts[i]); }\nboot();\nif (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);\n})();<\/script><!--\/noptimize-->\n","protected":false},"excerpt":{"rendered":"<p>The Laser Cutting Power Matching Calculator helps estimate a suitable laser power range based on material type, thickness, assist gas, cutting speed, and required edge&#8230;<\/p>","protected":false},"author":2,"featured_media":25078,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8808],"tags":[8843,1552,8844,2396],"class_list":["post-25077","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-manufacturing-and-processes","tag-fiber-laser","tag-laser-cutting","tag-laser-power","tag-sheet-metal","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/11\/Laser-Cutting-Power-Matching-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/25077","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/comments?post=25077"}],"version-history":[{"count":1,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/25077\/revisions"}],"predecessor-version":[{"id":25079,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/25077\/revisions\/25079"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media\/25078"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media?parent=25077"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/categories?post=25077"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/tags?post=25077"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}