{"id":966,"date":"2026-06-07T22:02:27","date_gmt":"2026-06-07T13:02:27","guid":{"rendered":"https:\/\/e-tbc.com\/?page_id=966"},"modified":"2026-06-07T22:02:28","modified_gmt":"2026-06-07T13:02:28","slug":"%e9%85%8d%e7%ae%a1%e5%86%85%e5%9c%a7%e5%8a%9b%e6%90%8d%e5%a4%b1%e3%81%ae%e8%a8%88%e7%ae%97","status":"publish","type":"page","link":"https:\/\/e-tbc.com\/?page_id=966","title":{"rendered":"\u914d\u7ba1\u5185\u5727\u529b\u640d\u5931\u306e\u8a08\u7b97"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"ja\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>\u914d\u7ba1\u5185\u5727\u529b\u640d\u5931\u8a08\u7b97 \/ Pipe Pressure Loss Calculator<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=JetBrains+Mono:wght@300;400;500;600&#038;family=Noto+Sans+JP:wght@300;400;500;700&#038;family=Cormorant+Garamond:ital,wght@0,400;0,500;1,400&#038;display=swap\" rel=\"stylesheet\">\n<style>\n:root {\n  --bg: #0e1116;\n  --panel: #161a22;\n  --panel-2: #1c2230;\n  --line: #262d3b;\n  --line-bright: #38465e;\n  --ink: #d8dde6;\n  --ink-dim: #7d8699;\n  --ink-faint: #4a5366;\n  --accent: #d2a86a;\n  --accent-bright: #f0c787;\n  --laminar: #6fb3d2;\n  --turbulent: #e07a5f;\n  --green: #8aa97a;\n  --shadow: 0 1px 0 rgba(255,255,255,0.03) inset, 0 8px 24px rgba(0,0,0,0.3);\n}\n* { box-sizing: border-box; margin: 0; padding: 0; }\nbody {\n  font-family: 'Noto Sans JP', -apple-system, sans-serif;\n  background: var(--bg); color: var(--ink);\n  font-size: 13px; line-height: 1.5;\n  min-height: 100vh; padding: 28px 24px;\n  background-image:\n    linear-gradient(rgba(255,255,255,0.012) 1px, transparent 1px),\n    linear-gradient(90deg, rgba(255,255,255,0.012) 1px, transparent 1px);\n  background-size: 32px 32px;\n}\n.container { max-width: 1400px; margin: 0 auto; }\nheader {\n  display: flex; justify-content: space-between; align-items: flex-end;\n  padding-bottom: 18px; border-bottom: 1px solid var(--line); margin-bottom: 24px;\n}\n.title-block h1 {\n  font-family: 'Cormorant Garamond', serif; font-size: 32px;\n  font-weight: 500; letter-spacing: 0.5px; color: var(--ink);\n}\n.title-block h1 .accent { color: var(--accent); font-style: italic; }\n.title-block .sub {\n  font-family: 'JetBrains Mono', monospace; font-size: 10px;\n  color: var(--ink-dim); letter-spacing: 2px; text-transform: uppercase; margin-top: 4px;\n}\n.meta {\n  font-family: 'JetBrains Mono', monospace; font-size: 10px;\n  color: var(--ink-dim); text-align: right; letter-spacing: 1px;\n}\n.meta .dot {\n  display: inline-block; width: 6px; height: 6px; border-radius: 50%;\n  background: var(--green); margin-right: 6px; vertical-align: middle;\n  animation: pulse 2s infinite;\n}\n@keyframes pulse { 0%,100%{opacity:1;} 50%{opacity:0.3;} }\n\n.grid-top { display: grid; grid-template-columns: 1fr 1fr 1.15fr; gap: 18px; }\n.grid-bottom { margin-top: 18px; }\n.panel {\n  background: var(--panel); border: 1px solid var(--line);\n  border-radius: 4px; padding: 18px 20px;\n  box-shadow: var(--shadow); position: relative;\n}\n.panel-header {\n  display: flex; align-items: center; justify-content: space-between;\n  padding-bottom: 10px; margin-bottom: 14px; border-bottom: 1px solid var(--line);\n}\n.panel-title {\n  font-family: 'JetBrains Mono', monospace; font-size: 10px;\n  letter-spacing: 2.5px; color: var(--accent); text-transform: uppercase; font-weight: 500;\n}\n.panel-num { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--ink-faint); }\n\n.field { margin-bottom: 12px; }\n.field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 12px; }\n.field label {\n  display: block; font-size: 10px; font-family: 'JetBrains Mono', monospace;\n  letter-spacing: 1px; color: var(--ink-dim); text-transform: uppercase; margin-bottom: 4px;\n}\n.field label .jp {\n  font-family: 'Noto Sans JP', sans-serif; font-size: 11px;\n  letter-spacing: 0; color: var(--ink-dim); text-transform: none; margin-left: 6px;\n}\ninput, select {\n  width: 100%; background: var(--bg); border: 1px solid var(--line);\n  color: var(--ink); padding: 8px 10px;\n  font-family: 'JetBrains Mono', monospace; font-size: 13px;\n  border-radius: 2px; transition: border-color 0.15s, background 0.15s;\n}\ninput:focus, select:focus { outline: none; border-color: var(--accent); background: var(--panel-2); }\ninput[readonly] {\n  background: var(--panel-2); color: var(--accent-bright);\n  border-color: var(--line); cursor: default;\n}\nselect {\n  appearance: none;\n  background-image: linear-gradient(45deg, transparent 50%, var(--ink-dim) 50%), linear-gradient(135deg, var(--ink-dim) 50%, transparent 50%);\n  background-position: calc(100% - 14px) center, calc(100% - 10px) center;\n  background-size: 4px 4px; background-repeat: no-repeat; padding-right: 26px;\n}\n.hint { font-size: 10px; color: var(--ink-faint); margin-top: 4px; font-family: 'JetBrains Mono', monospace; }\n\n.section-divider {\n  border: none; border-top: 1px dashed var(--line); margin: 16px 0 14px;\n}\n.section-label {\n  font-family: 'JetBrains Mono', monospace; font-size: 9px;\n  letter-spacing: 2px; color: var(--accent); text-transform: uppercase;\n  margin-bottom: 10px; font-weight: 500;\n}\n\n.tab-group { display: flex; border: 1px solid var(--line); border-radius: 2px; overflow: hidden; margin-bottom: 14px; }\n.tab {\n  flex: 1; padding: 8px; background: var(--bg); border: none;\n  color: var(--ink-dim); font-family: 'JetBrains Mono', monospace;\n  font-size: 10px; letter-spacing: 1.5px; text-transform: uppercase;\n  cursor: pointer; transition: all 0.15s; border-right: 1px solid var(--line);\n}\n.tab:last-child { border-right: none; }\n.tab.active { background: var(--accent); color: var(--bg); font-weight: 600; }\n.tab:hover:not(.active) { background: var(--panel-2); color: var(--ink); }\n.tab-content { display: none; }\n.tab-content.active { display: block; }\n\n.result-row {\n  display: flex; justify-content: space-between; align-items: baseline;\n  padding: 7px 0; border-bottom: 1px dashed var(--line);\n}\n.result-row:last-child { border-bottom: none; }\n.result-label { font-size: 11px; color: var(--ink-dim); font-family: 'Noto Sans JP', sans-serif; }\n.result-label .sym {\n  font-family: 'Cormorant Garamond', serif; font-style: italic;\n  color: var(--accent); margin-right: 6px; font-size: 14px;\n}\n.result-value { font-family: 'JetBrains Mono', monospace; font-size: 13px; color: var(--ink); font-weight: 500; }\n.result-value .unit { color: var(--ink-faint); font-size: 10px; font-weight: 400; }\n\n.headline-result {\n  background: linear-gradient(180deg, var(--panel-2) 0%, var(--panel) 100%);\n  border: 1px solid var(--line-bright); border-radius: 3px;\n  padding: 18px 20px; margin: 14px 0; position: relative; overflow: hidden;\n}\n.headline-result::before {\n  content: ''; position: absolute; left: 0; top: 0; bottom: 0;\n  width: 3px; background: var(--accent);\n}\n.headline-result .label {\n  font-family: 'JetBrains Mono', monospace; font-size: 9px;\n  letter-spacing: 2px; color: var(--ink-dim); text-transform: uppercase; margin-bottom: 4px;\n}\n.headline-result .value {\n  font-family: 'JetBrains Mono', monospace; font-size: 28px;\n  color: var(--accent-bright); font-weight: 500; letter-spacing: -0.5px;\n}\n.headline-result .value .unit { font-size: 14px; color: var(--ink-dim); margin-left: 8px; }\n.headline-result .subvalues {\n  display: grid; grid-template-columns: 1fr 1fr 1fr;\n  gap: 8px; margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line);\n}\n.headline-result .subvalues > div { font-family: 'JetBrains Mono', monospace; }\n.headline-result .subvalues .sv-label { font-size: 9px; color: var(--ink-faint); letter-spacing: 1px; }\n.headline-result .subvalues .sv-value { font-size: 13px; color: var(--ink); margin-top: 2px; }\n\n.flow-state {\n  display: inline-flex; align-items: center; gap: 6px;\n  padding: 3px 10px; border-radius: 12px;\n  font-family: 'JetBrains Mono', monospace; font-size: 10px;\n  letter-spacing: 1.5px; text-transform: uppercase; font-weight: 600;\n}\n.flow-state .led { width: 6px; height: 6px; border-radius: 50%; }\n.flow-state.laminar { background: rgba(111,179,210,0.15); color: var(--laminar); }\n.flow-state.laminar .led { background: var(--laminar); box-shadow: 0 0 8px var(--laminar); }\n.flow-state.turbulent { background: rgba(224,122,95,0.15); color: var(--turbulent); }\n.flow-state.turbulent .led { background: var(--turbulent); box-shadow: 0 0 8px var(--turbulent); }\n.flow-state.transition { background: rgba(210,168,106,0.15); color: var(--accent); }\n.flow-state.transition .led { background: var(--accent); box-shadow: 0 0 8px var(--accent); }\n\n.f-comparison { margin-top: 14px; }\n.f-row {\n  display: grid; grid-template-columns: 1fr auto; align-items: center;\n  padding: 6px 10px; background: var(--bg);\n  border: 1px solid var(--line); border-radius: 2px; margin-bottom: 4px;\n}\n.f-row .name { font-family: 'Noto Sans JP', sans-serif; font-size: 11px; color: var(--ink-dim); }\n.f-row .name .src { font-family: 'JetBrains Mono', monospace; font-size: 9px; color: var(--ink-faint); letter-spacing: 1px; margin-left: 4px; }\n.f-row .val { font-family: 'JetBrains Mono', monospace; font-size: 12px; color: var(--accent-bright); }\n.f-row.primary { border-color: var(--accent); background: linear-gradient(90deg, rgba(210,168,106,0.08), transparent); }\n\n.mix-gas { background: var(--bg); border: 1px solid var(--line); border-radius: 2px; padding: 10px; }\n.mix-row { display: grid; grid-template-columns: 40px 1fr 50px; gap: 8px; align-items: center; margin-bottom: 6px; }\n.mix-row:last-child { margin-bottom: 0; }\n.mix-row label { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--ink-dim); letter-spacing: 1px; text-transform: none; margin: 0; }\n.mix-row input { padding: 5px 8px; font-size: 12px; }\n.mix-row .u { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--ink-faint); }\n.mix-total {\n  margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--line);\n  display: flex; justify-content: space-between;\n  font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--ink-dim);\n}\n.mix-total .val { color: var(--accent-bright); }\n\n.formula-box {\n  margin-top: 14px; padding: 12px; background: var(--bg);\n  border-left: 2px solid var(--accent);\n  font-family: 'Cormorant Garamond', serif; font-style: italic;\n  font-size: 16px; color: var(--ink); text-align: center;\n}\n.formula-box .small {\n  font-size: 10px; font-family: 'JetBrains Mono', monospace;\n  font-style: normal; letter-spacing: 1px; color: var(--ink-dim); margin-top: 6px;\n}\n\n\/* Computed props display *\/\n.computed-row {\n  display: flex; justify-content: space-between; align-items: baseline;\n  padding: 4px 8px; background: var(--bg); border: 1px solid var(--line);\n  border-radius: 2px; margin-bottom: 4px;\n}\n.computed-row .cl { font-size: 10px; color: var(--ink-dim); }\n.computed-row .cv { font-family: 'JetBrains Mono', monospace; font-size: 12px; color: var(--accent-bright); }\n.computed-row .cv .cu { font-size: 9px; color: var(--ink-faint); margin-left: 4px; }\n\n\/* Equiv length \u2014 compact grid *\/\n.eq-section-label {\n  font-family: 'JetBrains Mono', monospace; font-size: 9px;\n  letter-spacing: 2px; color: var(--accent); text-transform: uppercase;\n  font-weight: 500; margin: 12px 0 6px; padding-bottom: 4px;\n  border-bottom: 1px solid var(--line);\n}\n.eq-section-label:first-child { margin-top: 0; }\n.eq-grid {\n  display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n  gap: 4px;\n}\n.eq-item {\n  display: grid; grid-template-columns: 1fr 48px 40px 68px;\n  align-items: center; gap: 6px;\n  padding: 4px 8px; border-radius: 2px;\n  background: var(--bg); border: 1px solid transparent;\n  transition: border-color 0.15s;\n}\n.eq-item:hover { border-color: var(--line); }\n.eq-item.has-count { border-color: var(--line-bright); background: var(--panel-2); }\n.eq-item .ei-name {\n  font-size: 11px; color: var(--ink-dim); white-space: nowrap;\n  overflow: hidden; text-overflow: ellipsis; cursor: default;\n}\n.eq-item .ei-led {\n  font-family: 'JetBrains Mono', monospace; font-size: 10px;\n  color: var(--ink-faint); text-align: right;\n}\n.eq-item .ei-n input {\n  width: 36px; padding: 2px 4px; font-size: 11px; text-align: center;\n}\n.eq-item .ei-le {\n  font-family: 'JetBrains Mono', monospace; font-size: 11px;\n  color: var(--accent-bright); text-align: right;\n}\n.eq-summary {\n  display: flex; justify-content: flex-end; gap: 28px; align-items: baseline;\n  margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--line-bright);\n}\n.eq-summary .item { font-family: 'JetBrains Mono', monospace; }\n.eq-summary .item .lbl { font-size: 10px; color: var(--ink-dim); letter-spacing: 1px; }\n.eq-summary .item .val { font-size: 16px; color: var(--accent-bright); font-weight: 500; margin-left: 8px; }\n.eq-summary .item .val .u { font-size: 11px; color: var(--ink-faint); font-weight: 400; }\n.eq-summary .item.total .val { font-size: 20px; }\n\nfooter {\n  margin-top: 32px; padding-top: 16px; border-top: 1px solid var(--line);\n  font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--ink-faint);\n  letter-spacing: 1px; display: flex; justify-content: space-between;\n}\n@media (max-width: 1100px) { .grid-top { grid-template-columns: 1fr; } }\n<\/style>\n<\/head>\n<body>\n<div class=\"container\">\n<header>\n  <div class=\"title-block\">\n    <h1>\u914d\u7ba1\u5185\u5727\u529b\u640d\u5931 <span class=\"accent\">Calculator<\/span><\/h1>\n    <div class=\"sub\">Pipe Pressure Loss \u00b7 Ideal Gas Correction \u00b7 Equivalent Length Method<\/div>\n  <\/div>\n  <div class=\"meta\">\n    <div><span class=\"dot\"><\/span>READY<\/div>\n    <div style=\"margin-top:4px;\" id=\"datetime\">\u2014<\/div>\n  <\/div>\n<\/header>\n\n<div class=\"grid-top\">\n<!-- ===== 01 \u914d\u7ba1\u4ed5\u69d8 ===== -->\n<div class=\"panel\">\n  <div class=\"panel-header\">\n    <div class=\"panel-title\">01 \/ Pipe Specification<\/div>\n    <div class=\"panel-num\">\u914d\u7ba1\u4ed5\u69d8<\/div>\n  <\/div>\n  <div class=\"field-row\">\n    <div class=\"field\"><label>\u547c\u3073\u5f84 <span class=\"jp\">Nominal<\/span><\/label><select id=\"nominal\"><\/select><\/div>\n    <div class=\"field\"><label>Schedule <span class=\"jp\">\u8089\u539a<\/span><\/label>\n      <select id=\"schedule\">\n        <option value=\"sch5s\">sch 5s<\/option><option value=\"sch10s\">sch 10s<\/option>\n        <option value=\"sch20s\">sch 20s<\/option><option value=\"sch40s\" selected>sch 40s<\/option>\n      <\/select>\n    <\/div>\n  <\/div>\n  <div class=\"field-row\">\n    <div class=\"field\"><label>\u5916\u5f84 OD <span class=\"jp\">[mm]<\/span><\/label><input type=\"text\" id=\"od\" readonly><\/div>\n    <div class=\"field\"><label>\u8089\u539a Thk <span class=\"jp\">[mm]<\/span><\/label><input type=\"text\" id=\"thickness\" readonly><\/div>\n  <\/div>\n  <div class=\"field-row\">\n    <div class=\"field\"><label>\u5185\u5f84 D <span class=\"jp\">[mm]<\/span><\/label><input type=\"text\" id=\"id-mm\" readonly><\/div>\n    <div class=\"field\"><label>\u7ba1\u9577 L <span class=\"jp\">Length [m]<\/span><\/label><input type=\"number\" id=\"length\" value=\"20\" step=\"0.1\"><\/div>\n  <\/div>\n  <div class=\"field\">\n    <label>\u7ba1\u58c1\u306e\u7c97\u3055 e <span class=\"jp\">Roughness [mm]<\/span><\/label>\n    <input type=\"number\" id=\"roughness\" value=\"0.01\" step=\"0.001\">\n    <div class=\"hint\">\u5f15\u629c\u7ba1 0.00152 \/ \u5e02\u8ca9\u92fc\u7ba1 0.0457 \/ \u92f3\u9244\u7ba1 0.0259<\/div>\n  <\/div>\n<\/div>\n\n<!-- ===== 02 \u6d41\u4f53\u30fb\u904b\u8ee2\u6761\u4ef6 ===== -->\n<div class=\"panel\">\n  <div class=\"panel-header\">\n    <div class=\"panel-title\">02 \/ Fluid &#038; Conditions<\/div>\n    <div class=\"panel-num\">\u6d41\u4f53\u30fb\u904b\u8ee2\u6761\u4ef6<\/div>\n  <\/div>\n\n  <div class=\"tab-group\">\n    <button class=\"tab active\" data-tab=\"single\">\u5358\u4e00\u6d41\u4f53<\/button>\n    <button class=\"tab\" data-tab=\"mix\">4\u7a2e\u6df7\u5408\u30ac\u30b9<\/button>\n  <\/div>\n  <div class=\"tab-content active\" id=\"tab-single\">\n    <div class=\"field\"><label>\u6d41\u4f53 <span class=\"jp\">Fluid<\/span><\/label><select id=\"fluid\"><\/select><\/div>\n  <\/div>\n  <div class=\"tab-content\" id=\"tab-mix\">\n    <div class=\"field\">\n      <label>\u5404\u6210\u5206\u6d41\u91cf <span class=\"jp\">[NTP L\/min]<\/span><\/label>\n      <div class=\"mix-gas\">\n        <div class=\"mix-row\"><label>H\u2082<\/label><input type=\"number\" id=\"mix-h2\" value=\"0\" step=\"100\"><span class=\"u\">L\/min<\/span><\/div>\n        <div class=\"mix-row\"><label>N\u2082<\/label><input type=\"number\" id=\"mix-n2\" value=\"18000\" step=\"100\"><span class=\"u\">L\/min<\/span><\/div>\n        <div class=\"mix-row\"><label>HCl<\/label><input type=\"number\" id=\"mix-hcl\" value=\"0\" step=\"100\"><span class=\"u\">L\/min<\/span><\/div>\n        <div class=\"mix-row\"><label>TCS<\/label><input type=\"number\" id=\"mix-tcs\" value=\"0\" step=\"100\"><span class=\"u\">L\/min<\/span><\/div>\n        <div class=\"mix-total\"><span>TOTAL<\/span><span class=\"val\" id=\"mix-total\">18000 L\/min<\/span><\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"field\">\n    <label>\u6d41\u91cf V <span class=\"jp\">Flow [NTP L\/min]<\/span><\/label>\n    <input type=\"number\" id=\"flow-lpm\" value=\"18000\" step=\"100\">\n  <\/div>\n\n  <hr class=\"section-divider\">\n  <div class=\"section-label\">\u904b\u8ee2\u6761\u4ef6 Operating Conditions<\/div>\n\n  <div class=\"field-row\">\n    <div class=\"field\"><label>\u6e29\u5ea6 T <span class=\"jp\">[\u00b0C]<\/span><\/label><input type=\"number\" id=\"temperature\" value=\"20\" step=\"1\"><\/div>\n    <div class=\"field\"><label>\u5727\u529b P <span class=\"jp\">[kPa abs]<\/span><\/label><input type=\"number\" id=\"pressure\" value=\"101.325\" step=\"0.1\"><\/div>\n  <\/div>\n\n  <hr class=\"section-divider\">\n  <div class=\"section-label\">\u5b9f\u6761\u4ef6\u7269\u6027\u5024 Actual Properties<\/div>\n\n  <div class=\"computed-row\">\n    <span class=\"cl\">\u5b9f\u5bc6\u5ea6 \u03c1 [kg\/m\u00b3]<\/span>\n    <span class=\"cv\" id=\"c-density\">\u2014<\/span>\n  <\/div>\n  <div class=\"computed-row\">\n    <span class=\"cl\">\u5b9f\u7c98\u5ea6 \u03bc [Pa\u00b7s]<\/span>\n    <span class=\"cv\" id=\"c-viscosity\">\u2014<\/span>\n  <\/div>\n  <div class=\"computed-row\">\n    <span class=\"cl\">\u5b9f\u6d41\u91cf V [m\u00b3\/s]<\/span>\n    <span class=\"cv\" id=\"c-flow\">\u2014<\/span>\n  <\/div>\n  <div class=\"computed-row\">\n    <span class=\"cl\">\u5b9f\u6d41\u901f u [m\/s]<\/span>\n    <span class=\"cv\" id=\"c-velocity\">\u2014<\/span>\n  <\/div>\n  <div class=\"hint\" id=\"gas-note\" style=\"margin-top:6px;\">\u7406\u60f3\u6c17\u4f53\u88dc\u6b63: \u03c1=\u03c1<sub>NTP<\/sub>\u00b7(P\/P\u2080)\u00b7(T\u2080\/T), V=V<sub>NTP<\/sub>\u00b7(P\u2080\/P)\u00b7(T\/T\u2080)<\/div>\n<\/div>\n\n<!-- ===== 03 \u7d50\u679c ===== -->\n<div class=\"panel\">\n  <div class=\"panel-header\">\n    <div class=\"panel-title\">03 \/ Results<\/div>\n    <div class=\"panel-num\">\u8a08\u7b97\u7d50\u679c<\/div>\n  <\/div>\n  <div class=\"result-row\">\n    <div class=\"result-label\"><span class=\"sym\">u<\/span> \u5b9f\u6d41\u901f<\/div>\n    <div class=\"result-value\" id=\"r-velocity\">\u2014 <span class=\"unit\">m\/s<\/span><\/div>\n  <\/div>\n  <div class=\"result-row\">\n    <div class=\"result-label\"><span class=\"sym\">Re<\/span> \u30ec\u30a4\u30ce\u30eb\u30ba\u6570<\/div>\n    <div class=\"result-value\" id=\"r-reynolds\">\u2014<\/div>\n  <\/div>\n  <div class=\"result-row\">\n    <div class=\"result-label\"><span class=\"sym\">e\/D<\/span> \u76f8\u5bfe\u7c97\u5ea6<\/div>\n    <div class=\"result-value\" id=\"r-roughness\">\u2014<\/div>\n  <\/div>\n  <div class=\"result-row\">\n    <div class=\"result-label\">\u6d41\u308c\u72b6\u614b<\/div>\n    <div class=\"result-value\"><span id=\"r-flow-state\" class=\"flow-state turbulent\"><span class=\"led\"><\/span>\u2014<\/span><\/div>\n  <\/div>\n  <div class=\"result-row\">\n    <div class=\"result-label\"><span class=\"sym\">L<sub>tot<\/sub><\/span> \u7dcf\u7b49\u4fa1\u9577\u3055<\/div>\n    <div class=\"result-value\" id=\"r-ltotal\">\u2014 <span class=\"unit\">m<\/span><\/div>\n  <\/div>\n\n  <div class=\"f-comparison\">\n    <div style=\"font-size:10px;font-family:'JetBrains Mono',monospace;letter-spacing:1.5px;color:var(--ink-dim);margin-bottom:6px;\">FRICTION COEFFICIENT<\/div>\n    <div class=\"f-row primary\"><div class=\"name\">Swamee\u2013Jain <span class=\"src\">(\u63a1\u7528)<\/span><\/div><div class=\"val\" id=\"r-f-sj\">\u2014<\/div><\/div>\n    <div class=\"f-row\"><div class=\"name\">Karman <span class=\"src\">\u30ab\u30eb\u30de\u30f3\u306e\u5f0f<\/span><\/div><div class=\"val\" id=\"r-f-k\">\u2014<\/div><\/div>\n    <div class=\"f-row\"><div class=\"name\">Itaya <span class=\"src\">\u677f\u8c37\u306e\u5f0f<\/span><\/div><div class=\"val\" id=\"r-f-i\">\u2014<\/div><\/div>\n  <\/div>\n\n  <div class=\"headline-result\">\n    <div class=\"label\">\u5727\u529b\u640d\u5931 \u0394Pf (\u76f4\u7ba1 + \u76f8\u5f53\u9577\u3055)<\/div>\n    <div class=\"value\"><span id=\"r-dp-pa\">\u2014<\/span><span class=\"unit\">Pa<\/span><\/div>\n    <div class=\"subvalues\">\n      <div><div class=\"sv-label\">kPa<\/div><div class=\"sv-value\" id=\"r-dp-kpa\">\u2014<\/div><\/div>\n      <div><div class=\"sv-label\">kgf\/cm\u00b2<\/div><div class=\"sv-value\" id=\"r-dp-kgcm2\">\u2014<\/div><\/div>\n      <div><div class=\"sv-label\">mmAq<\/div><div class=\"sv-value\" id=\"r-dp-mmaq\">\u2014<\/div><\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"formula-box\">\n    \u0394P<sub>f<\/sub> = 4f \u00b7 (\u03c1u\u00b2\/2) \u00b7 (L<sub>total<\/sub>\/D)\n    <div class=\"small\">L<sub>total<\/sub> = L<sub>pipe<\/sub> + \u03a3 L<sub>eq<\/sub> &nbsp;|&nbsp; Ideal gas corrected<\/div>\n  <\/div>\n<\/div>\n<\/div><!-- \/grid-top -->\n\n<!-- ===== 04 \u76f8\u5f53\u9577\u3055 ===== -->\n<div class=\"grid-bottom\">\n<div class=\"panel\">\n  <div class=\"panel-header\">\n    <div class=\"panel-title\">04 \/ Equivalent Length<\/div>\n    <div class=\"panel-num\">\u76f8\u5f53\u9577\u3055\uff08\u7d99\u624b\u30fb\u30d0\u30eb\u30d6\uff09<\/div>\n  <\/div>\n  <div id=\"eq-container\"><\/div>\n  <div class=\"eq-summary\">\n    <div class=\"item\"><span class=\"lbl\">\u76f4\u7ba1 L<\/span><span class=\"val\" id=\"eq-pipe\">20.0 <span class=\"u\">m<\/span><\/span><\/div>\n    <div class=\"item\"><span class=\"lbl\">\u76f8\u5f53\u9577\u3055 \u03a3Le<\/span><span class=\"val\" id=\"eq-sum\">0.000 <span class=\"u\">m<\/span><\/span><\/div>\n    <div class=\"item total\"><span class=\"lbl\">\u7dcf\u7b49\u4fa1\u9577\u3055 L<sub>total<\/sub><\/span><span class=\"val\" id=\"eq-total\">20.000 <span class=\"u\">m<\/span><\/span><\/div>\n  <\/div>\n<\/div>\n<\/div>\n\n<footer>\n  <div>FANNING \u00b7 SWAMEE\u2013JAIN \u00b7 KARMAN \u00b7 ITAYA \u00b7 EQUIVALENT LENGTH<\/div>\n  <div>HTML PORT OF \u914d\u7ba1\u8a2d\u8a083.xls<\/div>\n<\/footer>\n<\/div>\n\n<script>\n\/\/ ========== \u914d\u7ba1\u5bf8\u6cd5 ==========\nconst pipeTable = [\n  { name:'6A',   od:10.5,  sch5s:1.0,  sch10s:1.2,  sch20s:1.5,  sch40s:1.7 },\n  { name:'8A',   od:13.8,  sch5s:1.2,  sch10s:1.65, sch20s:2.0,  sch40s:2.2 },\n  { name:'10A',  od:17.3,  sch5s:1.2,  sch10s:1.65, sch20s:2.0,  sch40s:2.3 },\n  { name:'15A',  od:21.7,  sch5s:1.65, sch10s:2.1,  sch20s:2.5,  sch40s:2.8 },\n  { name:'20A',  od:27.2,  sch5s:1.65, sch10s:2.1,  sch20s:2.5,  sch40s:2.9 },\n  { name:'25A',  od:34.0,  sch5s:1.65, sch10s:2.8,  sch20s:3.0,  sch40s:3.4 },\n  { name:'32A',  od:42.7,  sch5s:1.65, sch10s:2.8,  sch20s:3.0,  sch40s:3.6 },\n  { name:'40A',  od:48.6,  sch5s:1.65, sch10s:2.8,  sch20s:3.0,  sch40s:3.7 },\n  { name:'50A',  od:60.5,  sch5s:1.65, sch10s:2.8,  sch20s:3.5,  sch40s:3.9 },\n  { name:'65A',  od:76.3,  sch5s:2.1,  sch10s:3.0,  sch20s:3.5,  sch40s:5.2 },\n  { name:'80A',  od:89.1,  sch5s:2.1,  sch10s:3.0,  sch20s:4.0,  sch40s:5.5 },\n  { name:'90A',  od:101.6, sch5s:2.1,  sch10s:3.0,  sch20s:4.0,  sch40s:5.7 },\n  { name:'100A', od:114.3, sch5s:2.1,  sch10s:3.0,  sch20s:4.0,  sch40s:6.0 },\n  { name:'125A', od:139.8, sch5s:2.8,  sch10s:3.4,  sch20s:5.0,  sch40s:6.6 },\n  { name:'150A', od:165.2, sch5s:2.8,  sch10s:3.4,  sch20s:5.0,  sch40s:7.1 },\n  { name:'200A', od:216.3, sch5s:2.8,  sch10s:4.0,  sch20s:6.5,  sch40s:8.2 },\n  { name:'250A', od:267.4, sch5s:3.4,  sch10s:4.0,  sch20s:6.5,  sch40s:9.3 },\n  { name:'300A', od:318.5, sch5s:4.0,  sch10s:4.5,  sch20s:6.5,  sch40s:10.3 },\n  { name:'350A', od:355.6, sch5s:4.0,  sch10s:5.0,  sch20s:8.0,  sch40s:11.1 },\n  { name:'400A', od:406.4, sch5s:4.5,  sch10s:5.0,  sch20s:8.0,  sch40s:12.7 },\n  { name:'450A', od:457.2, sch5s:4.5,  sch10s:5.0,  sch20s:8.0,  sch40s:14.3 },\n  { name:'500A', od:508.0, sch5s:5.0,  sch10s:5.5,  sch20s:9.5,  sch40s:15.1 },\n];\n\n\/\/ ========== \u6d41\u4f53\u7269\u6027 (NTP=0\u2103,1atm\u57fa\u6e96\u5bc6\u5ea6 + \u7c98\u5ea63\u70b9) ==========\n\/\/ mu: [0\u2103, 20\u2103, 50\u2103] \u2014 null=\u30c7\u30fc\u30bf\u306a\u3057\nconst fluidData = {\n  'N2':   { name:'\u7a92\u7d20 N\u2082',           rho_ntp:1.251,  mu_pts:[[0,1.66e-5],[20,1.75e-5],[50,1.88e-5]], gas:true },\n  'HCL':  { name:'\u5869\u5316\u6c34\u7d20 HCl',      rho_ntp:1.639,  mu_pts:[[0,1.31e-5],[20,1.43e-5],[50,1.58e-5]], gas:true },\n  'AIR':  { name:'\u7a7a\u6c17 Air',          rho_ntp:1.293,  mu_pts:[[0,1.71e-5],[20,1.81e-5],[50,1.95e-5]], gas:true },\n  'O2':   { name:'\u9178\u7d20 O\u2082',           rho_ntp:1.429,  mu_pts:[[0,1.92e-5],[20,2.03e-5],[50,2.18e-5]], gas:true },\n  'H2':   { name:'\u6c34\u7d20 H\u2082',           rho_ntp:0.0899, mu_pts:[[0,8.4e-6],[20,8.8e-6],[50,9.4e-6]],   gas:true },\n  'TCS':  { name:'\u30c8\u30ea\u30af\u30ed\u30ed\u30b7\u30e9\u30f3 TCS', rho_ntp:5.634, mu_pts:[[20,1.0e-5]],                           gas:true },\n  'WATER':{ name:'\u6c34 Water',          rho_ntp:998.2,  mu_pts:[[0,1.792e-3],[20,1.002e-3],[50,5.47e-4],[80,3.55e-4]], gas:false },\n};\n\nconst T0 = 273.15; \/\/ NTP\u57fa\u6e96\u6e29\u5ea6 [K]\nconst P0 = 101.325; \/\/ NTP\u57fa\u6e96\u5727\u529b [kPa]\n\n\/\/ \u7c98\u5ea6\u306e\u7dda\u5f62\u88dc\u9593\nfunction interpMu(pts, T_C) {\n  if (pts.length === 1) return pts[0][1];\n  \/\/ clamp\u306a\u3057 \u2014 \u7bc4\u56f2\u5916\u306f\u7dda\u5f62\u5916\u633f\n  if (T_C <= pts[0][0]) {\n    const [t0,m0] = pts[0], [t1,m1] = pts[1];\n    return m0 + (m1 - m0) * (T_C - t0) \/ (t1 - t0);\n  }\n  for (let i = 0; i < pts.length - 1; i++) {\n    if (T_C <= pts[i+1][0]) {\n      const [t0,m0] = pts[i], [t1,m1] = pts[i+1];\n      return m0 + (m1 - m0) * (T_C - t0) \/ (t1 - t0);\n    }\n  }\n  \/\/ \u7bc4\u56f2\u8d85 \u2014 \u672b\u5c3e2\u70b9\u3067\u5916\u633f\n  const n = pts.length;\n  const [t0,m0] = pts[n-2], [t1,m1] = pts[n-1];\n  return m0 + (m1 - m0) * (T_C - t0) \/ (t1 - t0);\n}\n\n\/\/ ========== \u76f8\u5f53\u9577\u3055\u30c7\u30fc\u30bf ==========\nconst fittingData = [\n  { cat: '\u30a8\u30eb\u30dc \/ ELBOW' },\n  { name: '90\u00b0 \u30a8\u30eb\u30dc\uff08\u6a19\u6e96R\uff09',     LeD: 30,  type:'LeD', note: 'Standard radius' },\n  { name: '90\u00b0 \u30a8\u30eb\u30dc\uff08\u30ed\u30f3\u30b0R\uff09',   LeD: 20,  type:'LeD', note: 'Long radius' },\n  { name: '45\u00b0 \u30a8\u30eb\u30dc',              LeD: 16,  type:'LeD', note: '' },\n  { name: '180\u00b0 \u30ea\u30bf\u30fc\u30f3\u30d9\u30f3\u30c9',     LeD: 50,  type:'LeD', note: 'Return bend' },\n  { cat: '\u30c6\u30a3\u30fc \/ TEE' },\n  { name: '\u30c6\u30a3\u30fc\uff08\u76f4\u9032\uff09',           LeD: 20,  type:'LeD', note: 'Straight-through' },\n  { name: '\u30c6\u30a3\u30fc\uff08\u5206\u5c90\uff09',           LeD: 60,  type:'LeD', note: 'Branch flow' },\n  { cat: '\u30d0\u30eb\u30d6 \/ VALVE' },\n  { name: '\u30b2\u30fc\u30c8\u30d0\u30eb\u30d6\uff08\u5168\u958b\uff09',     LeD: 13,  type:'LeD', note: 'Gate, full open' },\n  { name: '\u30b0\u30ed\u30fc\u30d6\u30d0\u30eb\u30d6\uff08\u5168\u958b\uff09',   LeD: 340, type:'LeD', note: 'Globe, full open' },\n  { name: '\u30a2\u30f3\u30b0\u30eb\u30d0\u30eb\u30d6\uff08\u5168\u958b\uff09',   LeD: 170, type:'LeD', note: 'Angle, full open' },\n  { name: '\u30dc\u30fc\u30eb\u30d0\u30eb\u30d6\uff08\u5168\u958b\uff09',     LeD: 3,   type:'LeD', note: 'Ball, full open' },\n  { name: '\u30d0\u30bf\u30d5\u30e9\u30a4\u30d0\u30eb\u30d6',         LeD: 45,  type:'LeD', note: 'Butterfly' },\n  { name: '\u30c1\u30a7\u30c3\u30af\u30d0\u30eb\u30d6\uff08\u30b9\u30a4\u30f3\u30b0\uff09', LeD: 135, type:'LeD', note: 'Swing check' },\n  { name: '\u30c1\u30a7\u30c3\u30af\u30d0\u30eb\u30d6\uff08\u30ea\u30d5\u30c8\uff09',   LeD: 600, type:'LeD', note: 'Lift check' },\n  { cat: '\u6025\u62e1\u5927\u30fb\u6025\u7e2e\u5c0f \/ EXPANSION \u00b7 CONTRACTION' },\n  { name: '\u6025\u62e1\u5927\uff08d\/D\u22520.5\uff09',       LeD:0, K:0.56,  type:'K', note: 'Borda\u2013Carnot' },\n  { name: '\u6025\u62e1\u5927\uff08d\/D\u22520.75\uff09',      LeD:0, K:0.19,  type:'K', note: '' },\n  { name: '\u6025\u7e2e\u5c0f\uff08d\/D\u22520.5\uff09',       LeD:0, K:0.37,  type:'K', note: '' },\n  { name: '\u6025\u7e2e\u5c0f\uff08d\/D\u22520.75\uff09',      LeD:0, K:0.19,  type:'K', note: '' },\n  { cat: '\u7ba1\u51fa\u5165\u53e3 \/ ENTRANCE \u00b7 EXIT' },\n  { name: '\u7ba1\u5165\u53e3\uff08\u7a81\u51fa\u3057\uff09',         LeD:0, K:0.78,  type:'K', note: 'Projecting' },\n  { name: '\u7ba1\u5165\u53e3\uff08\u9762\u4e00\uff09',           LeD:0, K:0.50,  type:'K', note: 'Flush \/ square' },\n  { name: '\u7ba1\u5165\u53e3\uff08\u4e38\u307f\u4ed8\uff09',         LeD:0, K:0.04,  type:'K', note: 'Rounded r\/D\u22650.15' },\n  { name: '\u7ba1\u51fa\u53e3',                   LeD:0, K:1.00,  type:'K', note: 'Exit loss' },\n];\n\nconst $ = id => document.getElementById(id);\n\n\/\/ ===== \u30bb\u30ec\u30af\u30c8\u521d\u671f\u5316 =====\nconst nominalSel = $('nominal');\npipeTable.forEach((p,i) => {\n  const o = document.createElement('option'); o.value = i; o.textContent = p.name;\n  if (p.name === '300A') o.selected = true; nominalSel.appendChild(o);\n});\nconst fluidSel = $('fluid');\nObject.entries(fluidData).forEach(([k,v]) => {\n  const o = document.createElement('option'); o.value = k; o.textContent = v.name;\n  if (k === 'N2') o.selected = true; fluidSel.appendChild(o);\n});\n\n\/\/ ===== \u76f8\u5f53\u9577\u3055\u30b0\u30ea\u30c3\u30c9\u751f\u6210 =====\nconst eqContainer = $('eq-container');\nlet fittingInputs = [];\nlet currentGrid = null;\nfittingData.forEach((item, idx) => {\n  if (item.cat) {\n    const lbl = document.createElement('div');\n    lbl.className = 'eq-section-label';\n    lbl.textContent = item.cat;\n    eqContainer.appendChild(lbl);\n    currentGrid = document.createElement('div');\n    currentGrid.className = 'eq-grid';\n    eqContainer.appendChild(currentGrid);\n    return;\n  }\n  const inputId = 'eq-n-' + idx;\n  const leDStr = item.type === 'K' ? 'K=' + item.K.toFixed(2) : item.LeD;\n  const div = document.createElement('div');\n  div.className = 'eq-item';\n  div.id = 'eq-item-' + idx;\n  div.innerHTML =\n    '<span class=\"ei-name\" title=\"' + (item.note || item.name) + '\">' + item.name + '<\/span>' +\n    '<span class=\"ei-led\">' + leDStr + '<\/span>' +\n    '<span class=\"ei-n\"><input type=\"number\" id=\"' + inputId + '\" value=\"0\" min=\"0\" step=\"1\"><\/span>' +\n    '<span class=\"ei-le\" id=\"eq-le-' + idx + '\">\u2014<\/span>';\n  currentGrid.appendChild(div);\n  fittingInputs.push({ idx, item, inputId });\n});\n\n\/\/ ===== \u30bf\u30d6 =====\nlet mode = 'single';\ndocument.querySelectorAll('.tab').forEach(btn => {\n  btn.addEventListener('click', () => {\n    document.querySelectorAll('.tab').forEach(b => b.classList.remove('active'));\n    document.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active'));\n    btn.classList.add('active');\n    mode = btn.dataset.tab;\n    $('tab-' + mode).classList.add('active');\n    if (mode === 'mix') {\n      $('flow-lpm').setAttribute('readonly','');\n    } else {\n      $('flow-lpm').removeAttribute('readonly');\n    }\n    calculate();\n  });\n});\n\nfluidSel.addEventListener('change', () => { calculate(); });\n\nfunction updatePipeSpec() {\n  const p = pipeTable[nominalSel.value];\n  const thk = p[$('schedule').value];\n  $('od').value = p.od.toFixed(2);\n  $('thickness').value = thk.toFixed(2);\n  const id_mm = p.od - 2 * thk;\n  $('id-mm').value = id_mm.toFixed(2);\n  return id_mm;\n}\n\n\/\/ ===== \u6df7\u5408\u30ac\u30b9 NTP\u7269\u6027 =====\nfunction getMixNTP() {\n  const q = { H2:+$('mix-h2').value||0, N2:+$('mix-n2').value||0, HCL:+$('mix-hcl').value||0, TCS:+$('mix-tcs').value||0 };\n  const total = q.H2+q.N2+q.HCL+q.TCS;\n  $('mix-total').textContent = total.toLocaleString()+' L\/min';\n  if (total <= 0) return null;\n  let rho = 0;\n  ['H2','N2','HCL','TCS'].forEach(k => { rho += q[k] * fluidData[k].rho_ntp; });\n  rho \/= total;\n\n  \/\/ \u7c98\u5ea6: \u6e29\u5ea6\u4f9d\u5b58\u306a\u306e\u3067\u5f8c\u3067\u8a08\u7b97\n  const weights = {};\n  ['H2','N2','HCL','TCS'].forEach(k => { weights[k] = q[k] \/ total; });\n\n  $('flow-lpm').value = total;\n  return { rho_ntp: rho, weights, total };\n}\n\n\/\/ ===== \u6469\u64e6\u4fc2\u6570 =====\nfunction f_swameeJain(Re, eD) {\n  const x = Math.log10((eD\/3.7)+(5.74\/Math.pow(Re,0.9)));\n  return 0.0626\/(x*x);\n}\nfunction f_karman(Re) {\n  let f = 0.005;\n  for (let i=0;i<80;i++) {\n    const rhs = 4*Math.log10(Re*Math.sqrt(f))-0.4;\n    const fn = 1\/(rhs*rhs); if (Math.abs(fn-f)<1e-12) return fn; f=fn;\n  }\n  return f;\n}\nfunction f_itaya(Re, eD) {\n  let f = f_swameeJain(Re, eD);\n  for (let i=0;i<80;i++) {\n    const rhs = -4*Math.log10((eD\/3.7)+(1.255\/(Re*Math.sqrt(f))));\n    const fn = 1\/(rhs*rhs); if (Math.abs(fn-f)<1e-12) return fn; f=fn;\n  }\n  return f;\n}\n\n\/\/ ===== \u30e1\u30a4\u30f3\u8a08\u7b97 =====\nfunction calculate() {\n  const id_mm = updatePipeSpec();\n  const D = id_mm \/ 1000;\n  const L = +$('length').value;\n  const e_mm = +$('roughness').value;\n  const V_ntp_lpm = +$('flow-lpm').value;\n  const T_C = +$('temperature').value;\n  const P_kPa = +$('pressure').value;\n  const T_K = T0 + T_C;\n\n  let rho_ntp, mu_actual, isGas;\n\n  if (mode === 'mix') {\n    const mix = getMixNTP();\n    if (!mix) return;\n    rho_ntp = mix.rho_ntp;\n    isGas = true;\n    \/\/ \u6df7\u5408\u7c98\u5ea6: \u6d41\u91cf\u52a0\u91cd\u5e73\u5747\uff08\u5404\u6210\u5206\u3092\u6e29\u5ea6\u88dc\u9593\u3057\u3066\u304b\u3089\u52a0\u91cd\u5e73\u5747\uff09\n    mu_actual = 0;\n    ['H2','N2','HCL','TCS'].forEach(k => {\n      mu_actual += mix.weights[k] * interpMu(fluidData[k].mu_pts, T_C);\n    });\n  } else {\n    const fl = fluidData[fluidSel.value];\n    rho_ntp = fl.rho_ntp;\n    isGas = fl.gas;\n    mu_actual = interpMu(fl.mu_pts, T_C);\n  }\n\n  \/\/ \u5b9f\u6761\u4ef6\u3078\u306e\u88dc\u6b63\n  let rho_actual, V_actual;\n  if (isGas) {\n    \/\/ \u7406\u60f3\u6c17\u4f53: \u03c1 = \u03c1_NTP \u00d7 (P\/P0) \u00d7 (T0\/T)\n    rho_actual = rho_ntp * (P_kPa \/ P0) * (T0 \/ T_K);\n    \/\/ \u5b9f\u4f53\u7a4d\u6d41\u91cf: V_actual = V_NTP \u00d7 (P0\/P) \u00d7 (T\/T0)\n    V_actual = (V_ntp_lpm \/ 1000 \/ 60) * (P0 \/ P_kPa) * (T_K \/ T0);\n    $('gas-note').innerHTML = '\u7406\u60f3\u6c17\u4f53\u88dc\u6b63: \u03c1=\u03c1<sub>NTP<\/sub>\u00b7(P\/P\u2080)\u00b7(T\u2080\/T), V=V<sub>NTP<\/sub>\u00b7(P\u2080\/P)\u00b7(T\/T\u2080)';\n  } else {\n    \/\/ \u6db2\u4f53: \u88dc\u6b63\u306a\u3057\uff08\u5bc6\u5ea6\u30fb\u6d41\u91cf\u306f\u305d\u306e\u307e\u307e\uff09\n    rho_actual = rho_ntp;\n    V_actual = V_ntp_lpm \/ 1000 \/ 60;\n    $('gas-note').textContent = '\u6db2\u4f53: \u5727\u529b\u30fb\u6e29\u5ea6\u88dc\u6b63\u306a\u3057\uff08\u5bc6\u5ea6\u306f\u57fa\u6e96\u5024\u4f7f\u7528\uff09';\n  }\n\n  \/\/ \u5b9f\u6761\u4ef6\u8868\u793a\n  $('c-density').textContent = rho_actual.toFixed(4);\n  $('c-viscosity').textContent = mu_actual.toExponential(3);\n  $('c-flow').textContent = V_actual.toFixed(5);\n\n  if (!D || !rho_actual || !mu_actual || !V_actual) return;\n\n  const A = Math.PI * D * D \/ 4;\n  const u = V_actual \/ A;\n  const Re = rho_actual * u * D \/ mu_actual;\n  const eD = (e_mm \/ 1000) \/ D;\n\n  $('c-velocity').textContent = u.toFixed(3);\n  $('r-velocity').innerHTML = u.toFixed(3) + ' <span class=\"unit\">m\/s<\/span>';\n  $('r-reynolds').textContent = Re.toLocaleString(undefined, {maximumFractionDigits: 0});\n  $('r-roughness').textContent = eD.toExponential(3);\n\n  let fUsed;\n  const fState = $('r-flow-state');\n  if (Re < 3000) {\n    fState.className = 'flow-state laminar';\n    fState.innerHTML = '<span class=\"led\"><\/span>\u5c64\u6d41 LAMINAR';\n    fUsed = 16 \/ Re;\n  } else if (Re > 3e6) {\n    fState.className = 'flow-state transition';\n    fState.innerHTML = '<span class=\"led\"><\/span>\u7bc4\u56f2\u5916';\n    fUsed = f_swameeJain(Re, eD);\n  } else {\n    fState.className = 'flow-state turbulent';\n    fState.innerHTML = '<span class=\"led\"><\/span>\u4e71\u6d41 TURBULENT';\n    fUsed = f_swameeJain(Re, eD);\n  }\n\n  if (Re < 3000) {\n    $('r-f-sj').textContent = (16\/Re).toExponential(4) + ' (16\/Re)';\n    $('r-f-k').textContent = '\u2014';\n    $('r-f-i').textContent = '\u2014';\n  } else {\n    $('r-f-sj').textContent = f_swameeJain(Re, eD).toExponential(4);\n    $('r-f-k').textContent  = f_karman(Re).toExponential(4);\n    $('r-f-i').textContent  = f_itaya(Re, eD).toExponential(4);\n  }\n\n  \/\/ ===== \u76f8\u5f53\u9577\u3055 =====\n  let sumLe = 0;\n  fittingInputs.forEach(({idx, item, inputId}) => {\n    const n = +$(inputId).value || 0;\n    let le = 0;\n    if (n > 0) {\n      if (item.type === 'LeD') { le = n * item.LeD * D; }\n      else { le = n * item.K * D \/ (4 * fUsed); }\n    }\n    sumLe += le;\n    $('eq-le-' + idx).textContent = n > 0 ? le.toFixed(3) : '\u2014';\n    const el = $('eq-item-' + idx);\n    if (el) { n > 0 ? el.classList.add('has-count') : el.classList.remove('has-count'); }\n  });\n\n  const Ltotal = L + sumLe;\n  $('eq-pipe').innerHTML = L.toFixed(1) + ' <span class=\"u\">m<\/span>';\n  $('eq-sum').innerHTML = sumLe.toFixed(3) + ' <span class=\"u\">m<\/span>';\n  $('eq-total').innerHTML = Ltotal.toFixed(3) + ' <span class=\"u\">m<\/span>';\n  $('r-ltotal').innerHTML = Ltotal.toFixed(3) + ' <span class=\"unit\">m<\/span>';\n\n  \/\/ ===== \u5727\u529b\u640d\u5931 =====\n  const dP_Pa = 4 * fUsed * (rho_actual * u * u \/ 2) * (Ltotal \/ D);\n  $('r-dp-pa').textContent    = dP_Pa.toFixed(2);\n  $('r-dp-kpa').textContent   = (dP_Pa \/ 1000).toExponential(3);\n  $('r-dp-kgcm2').textContent = (dP_Pa \/ 98066.5).toExponential(3);\n  $('r-dp-mmaq').textContent  = (dP_Pa \/ 9.80665).toFixed(3);\n}\n\n\/\/ ===== \u30a4\u30d9\u30f3\u30c8 =====\n['nominal','schedule','length','roughness','fluid','flow-lpm',\n 'temperature','pressure',\n 'mix-h2','mix-n2','mix-hcl','mix-tcs'].forEach(id => {\n  $(id).addEventListener('input', calculate);\n  $(id).addEventListener('change', calculate);\n});\nfittingInputs.forEach(({inputId}) => {\n  $(inputId).addEventListener('input', calculate);\n  $(inputId).addEventListener('change', calculate);\n});\n\nfunction updateClock() {\n  const d = new Date(), pad = n => String(n).padStart(2,'0');\n  $('datetime').textContent =\n    d.getFullYear()+'.'+pad(d.getMonth()+1)+'.'+pad(d.getDate())+' '+\n    pad(d.getHours())+':'+pad(d.getMinutes())+':'+pad(d.getSeconds());\n}\nsetInterval(updateClock, 1000);\nupdateClock();\ncalculate();\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>\u914d\u7ba1\u5185\u5727\u529b\u640d\u5931\u8a08\u7b97 \/ Pipe Pressure Loss Calculator \u914d\u7ba1\u5185\u5727\u529b\u640d\u5931 Calculator Pipe Pressure Loss \u00b7 Ideal Gas Correction \u00b7 Equiv [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":38,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"swell_btn_cv_data":"","sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","sitemap_hide":"","vkExUnit_sitemap":"","_veu_custom_css":"","veu_display_promotion_alert":"","_exclude_from_list_pages":"","vkexunit_cta_each_option":"","vkExUnit_childPageIndex":"","vkExUnit_pageList_ancestor":"","vkExUnit_contact_enable":"","footnotes":""},"class_list":["post-966","page","type-page","status-publish","has-post-thumbnail","hentry"],"veu_head_title_object":{"title":"","add_site_title":""},"_links":{"self":[{"href":"https:\/\/e-tbc.com\/index.php?rest_route=\/wp\/v2\/pages\/966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/e-tbc.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/e-tbc.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/e-tbc.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/e-tbc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=966"}],"version-history":[{"count":1,"href":"https:\/\/e-tbc.com\/index.php?rest_route=\/wp\/v2\/pages\/966\/revisions"}],"predecessor-version":[{"id":967,"href":"https:\/\/e-tbc.com\/index.php?rest_route=\/wp\/v2\/pages\/966\/revisions\/967"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/e-tbc.com\/index.php?rest_route=\/wp\/v2\/media\/38"}],"wp:attachment":[{"href":"https:\/\/e-tbc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}