{"id":2102,"date":"2026-05-29T10:34:15","date_gmt":"2026-05-29T10:34:15","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=2102"},"modified":"2026-06-24T04:26:08","modified_gmt":"2026-06-24T04:26:08","slug":"calculadora-calentador-piscina","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/es\/calculadora-calentador-piscina\/","title":{"rendered":"Calculadora de calentador de piscina"},"content":{"rendered":"\n<div class=\"phc-wrapper\">\n\n  <!-- STEP 1: Calculation Method -->\n  <div class=\"phc-step-section\">\n    <div class=\"phc-step-header\">\n      <span class=\"phc-step-num\">1<\/span>\n      <h3>M\u00e9todo de c\u00e1lculo<\/h3>\n    <\/div>\n    <div class=\"phc-toggle-group\">\n      <button type=\"button\" class=\"phc-toggle-btn active\" id=\"method-dims\" onclick=\"setMethod('dimensions')\">Dimensiones de la piscina<\/button>\n      <button type=\"button\" class=\"phc-toggle-btn\" id=\"method-vol\" onclick=\"setMethod('volume')\">Volumen de la piscina<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- STEP 2: Pool Shape -->\n  <div class=\"phc-step-section\">\n    <div class=\"phc-step-header\">\n      <span class=\"phc-step-num\">2<\/span>\n      <h3>Selecciona la forma de la piscina<\/h3>\n    <\/div>\n    <div class=\"phc-shape-grid\">\n      <div class=\"phc-shape-card active\" id=\"shape-rectangular\" onclick=\"setShape('rectangular')\">Rectangular<\/div>\n      <div class=\"phc-shape-card\" id=\"shape-lshaped\" onclick=\"setShape('lshaped')\">En forma de L<\/div>\n      <div class=\"phc-shape-card\" id=\"shape-circle\" onclick=\"setShape('circle')\">Redonda<\/div>\n      <div class=\"phc-shape-card\" id=\"shape-triangular\" onclick=\"setShape('triangular')\">Triangular<\/div>\n      <div class=\"phc-shape-card\" id=\"shape-kidney\" onclick=\"setShape('kidney')\">Ri\u00f1\u00f3n<\/div>\n      <div class=\"phc-shape-card\" id=\"shape-oval\" onclick=\"setShape('oval')\">Ovalada<\/div>\n      <div class=\"phc-shape-card\" id=\"shape-oblong\" onclick=\"setShape('oblong')\">Alargada<\/div>\n    <\/div>\n  <\/div>\n\n  <!-- STEP 3: Pool Size \/ Volume -->\n  <div class=\"phc-step-section\">\n    <div class=\"phc-step-header\" style=\"justify-content: space-between; align-items: center;\">\n      <div style=\"display: flex; align-items: center; gap: 12px;\">\n        <span class=\"phc-step-num\">3<\/span>\n        <h3 id=\"step3-title\">Tama\u00f1o de la piscina<\/h3>\n      <\/div>\n      <!-- Unit Toggles for Step 3 -->\n      <div id=\"unit-toggle-dims\" class=\"phc-mini-toggle\">\n        <span class=\"active\" id=\"unit-ft\" onclick=\"setDimUnit('ft')\">ft<\/span>\n        <span id=\"unit-m\" onclick=\"setDimUnit('m')\">m<\/span>\n      <\/div>\n      <div id=\"unit-toggle-vol\" class=\"phc-mini-toggle\" style=\"display: none;\">\n        <span class=\"active\" id=\"unit-gal\" onclick=\"setVolUnit('gal')\">gal<\/span>\n        <span id=\"unit-l\" onclick=\"setVolUnit('l')\">litros<\/span>\n        <span id=\"unit-m3\" onclick=\"setVolUnit('m3')\">m\u00b3<\/span>\n      <\/div>\n    <\/div>\n\n    <!-- Dynamic Inputs Based on Method & Shape -->\n    <div id=\"inputs-dimensions-container\">\n      <div class=\"phc-grid-inputs\" id=\"fields-rectangular\">\n        <div class=\"phc-field\"><label>Longitud (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"rect-len\" value=\"30\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Anchura (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"rect-wid\" value=\"15\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona poco profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"rect-shallow\" value=\"3\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"rect-deep\" value=\"6\" min=\"0\"><\/div>\n      <\/div>\n\n      <div class=\"phc-grid-inputs\" id=\"fields-lshaped\" style=\"display: none;\">\n        <div class=\"phc-field\"><label>Longitud total (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"l-tot-len\" value=\"40\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Anchura total (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"l-tot-wid\" value=\"20\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Longitud del brazo corto (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"l-arm-len\" value=\"15\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Anchura del brazo corto (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"l-arm-wid\" value=\"10\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona poco profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"l-shallow\" value=\"3\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"l-deep\" value=\"6\" min=\"0\"><\/div>\n      <\/div>\n\n      <div class=\"phc-grid-inputs\" id=\"fields-circle\" style=\"display: none;\">\n        <div class=\"phc-field\"><label>Radio (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"circ-rad\" value=\"9\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona poco profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"circ-shallow\" value=\"4\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"circ-deep\" value=\"4\" min=\"0\"><\/div>\n      <\/div>\n\n      <div class=\"phc-grid-inputs\" id=\"fields-triangular\" style=\"display: none;\">\n        <div class=\"phc-field\"><label>Base (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"tri-base\" value=\"20\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Altura (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"tri-height\" value=\"15\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona poco profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"tri-shallow\" value=\"3\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"tri-deep\" value=\"5\" min=\"0\"><\/div>\n      <\/div>\n\n      <div class=\"phc-grid-inputs\" id=\"fields-kidney\" style=\"display: none;\">\n        <div class=\"phc-field\"><label>Longitud (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"kid-len\" value=\"28\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Anchura (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"kid-wid\" value=\"14\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona poco profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"kid-shallow\" value=\"3.5\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"kid-deep\" value=\"5.5\" min=\"0\"><\/div>\n      <\/div>\n\n      <div class=\"phc-grid-inputs\" id=\"fields-oval\" style=\"display: none;\">\n        <div class=\"phc-field\"><label>Longitud \/ Eje mayor (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"oval-len\" value=\"30\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Anchura \/ Eje menor (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"oval-wid\" value=\"15\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona poco profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"oval-shallow\" value=\"3\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"oval-deep\" value=\"6\" min=\"0\"><\/div>\n      <\/div>\n\n      <div class=\"phc-grid-inputs\" id=\"fields-oblong\" style=\"display: none;\">\n        <div class=\"phc-field\"><label>Di\u00e1metro mayor (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"ob-ldia\" value=\"16\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Di\u00e1metro menor (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"ob-sdia\" value=\"12\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Longitud (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"ob-len\" value=\"32\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona poco profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"ob-shallow\" value=\"3\" min=\"0\"><\/div>\n        <div class=\"phc-field\"><label>Profundidad zona profunda (<span class=\"d-unit\">ft<\/span>)<\/label><input type=\"number\" id=\"ob-deep\" value=\"6\" min=\"0\"><\/div>\n      <\/div>\n    <\/div>\n\n    <div id=\"inputs-volume-container\" style=\"display: none;\">\n      <div class=\"phc-grid-inputs\">\n        <div class=\"phc-field\">\n          <label>Volumen de la piscina (<span id=\"v-input-unit\">galones<\/span>)<\/label>\n          <input type=\"number\" id=\"input-pure-volume\" value=\"15000\" min=\"0\">\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- STEP 4: Heating Parameters -->\n  <div class=\"phc-step-section\">\n    <div class=\"phc-step-header\" style=\"justify-content: space-between; align-items: center;\">\n      <div style=\"display: flex; align-items: center; gap: 12px;\">\n        <span class=\"phc-step-num\">4<\/span>\n        <h3>Par\u00e1metros de calentamiento<\/h3>\n      <\/div>\n      <div class=\"phc-mini-toggle\">\n        <span class=\"active\" id=\"temp-f\" onclick=\"setTempUnit('F')\">\u00b0F<\/span>\n        <span id=\"temp-c\" onclick=\"setTempUnit('C')\">\u00b0C<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"phc-grid-inputs\">\n      <div class=\"phc-field\">\n        <label>Temperatura inicial de la piscina (<span class=\"t-unit\">\u00b0F<\/span>)<\/label>\n        <input type=\"number\" id=\"heat-start\" value=\"65\">\n      <\/div>\n      <div class=\"phc-field\">\n        <label>Temperatura del agua deseada (<span class=\"t-unit\">\u00b0F<\/span>)<\/label>\n        <input type=\"number\" id=\"heat-des\" value=\"80\">\n      <\/div>\n      <div class=\"phc-field\">\n        <label>Tiempo de calentamiento (horas)<\/label>\n        <input type=\"number\" id=\"heat-time\" value=\"24\" min=\"1\">\n        <div class=\"phc-input-note\">1 m\u00ednimo recomendado<\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Action Buttons -->\n  <div class=\"phc-btn-row\">\n    <button type=\"button\" class=\"phc-btn-calc\" onclick=\"calculateHeater()\">Calcular<\/button>\n    <button type=\"button\" class=\"phc-btn-reset\" onclick=\"resetCalculator()\">Restablecer<\/button>\n  <\/div>\n\n  <!-- STEP 5: Results Section -->\n  <div class=\"phc-results-section\" id=\"results-box\" style=\"display: none;\">\n    <div class=\"phc-results-header\">\n      <h3>Resultados del c\u00e1lculo<\/h3>\n      <div class=\"phc-mini-toggle result-toggle\">\n        <span class=\"active\" id=\"res-gal\" onclick=\"changeResultVolUnit('gal')\">gal<\/span>\n        <span id=\"res-l\" onclick=\"changeResultVolUnit('l')\">litros<\/span>\n        <span id=\"res-m3\" onclick=\"changeResultVolUnit('m3')\">m\u00b3<\/span>\n      <\/div>\n    <\/div>\n\n    <div class=\"phc-results-grid\">\n      <div class=\"phc-res-card highlight\">\n        <div class=\"phc-res-label\">BTU necesarios<\/div>\n        <div class=\"phc-res-val\" id=\"res-btu\">&#8211;<\/div>\n        <div class=\"phc-res-sub\">BTU por hora para alcanzar el tiempo objetivo<\/div>\n      <\/div>\n      <div class=\"phc-res-card\">\n        <div class=\"phc-res-label\">Volumen de la piscina (aprox.)<\/div>\n        <div class=\"phc-res-val\" id=\"res-vol-val\">&#8211;<\/div>\n        <div class=\"phc-res-sub\" id=\"res-vol-unit-lbl\">Galones<\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<style>\n\/* CSS Styling Root Elements *\/\n.phc-wrapper {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n  max-width: 650px;\n  margin: 20px auto;\n  background: #ffffff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  box-shadow: 0 4px 12px rgba(0,0,0,0.05);\n}\n.phc-title {\n  color: #1e293b;\n  margin-top: 0;\n  margin-bottom: 24px;\n  font-size: 24px;\n  font-weight: 700;\n  border-bottom: 2px solid #f1f5f9;\n  padding-bottom: 12px;\n}\n.phc-step-section {\n  background: #f8fafc;\n  border-radius: 8px;\n  padding: 16px;\n  margin-bottom: 20px;\n  border-left: 4px solid #1ecad3;\n}\n.phc-step-header {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 14px;\n}\n.phc-step-header h3 {\n  margin: 0;\n  font-size: 16px;\n  color: #334155;\n  font-weight: 600;\n}\n.phc-step-num {\n  background: #1ecad3;\n  color: #fff;\n  width: 24px;\n  height: 24px;\n  border-radius: 50%;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 12px;\n  font-weight: bold;\n}\n\n\/* Toggles & Shape Selectors *\/\n.phc-toggle-group {\n  display: flex;\n  background: #e2e8f0;\n  padding: 4px;\n  border-radius: 6px;\n}\n.phc-toggle-btn {\n  flex: 1;\n  background: transparent;\n  border: none;\n  padding: 8px 12px;\n  font-size: 14px;\n  font-weight: 500;\n  color: #475569;\n  cursor: pointer;\n  border-radius: 4px;\n  transition: all 0.2s ease;\n}\n.phc-toggle-btn.active {\n  background: #1ecad3;\n  color: white;\n}\n.phc-shape-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));\n  gap: 8px;\n}\n.phc-shape-card {\n  background: #ffffff;\n  border: 1px solid #cbd5e1;\n  padding: 10px;\n  text-align: center;\n  border-radius: 6px;\n  font-size: 13px;\n  cursor: pointer;\n  color: #475569;\n  font-weight: 500;\n  transition: all 0.2s ease;\n}\n.phc-shape-card:hover {\n  border-color: #1ecad3;\n  background: #f0fdfa;\n}\n.phc-shape-card.active {\n  background: #1ecad3;\n  color: white;\n  border-color: #1ecad3;\n}\n\n\/* Mini Unit Toggles *\/\n.phc-mini-toggle {\n  display: inline-flex;\n  background: #e2e8f0;\n  padding: 2px;\n  border-radius: 4px;\n}\n.phc-mini-toggle span {\n  padding: 3px 8px;\n  font-size: 11px;\n  font-weight: 600;\n  cursor: pointer;\n  border-radius: 3px;\n  color: #64748b;\n}\n.phc-mini-toggle span.active {\n  background: #fff;\n  color: #0f172a;\n  box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n\n\/* Form Layout Inputs *\/\n.phc-grid-inputs {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n  gap: 12px;\n}\n.phc-field {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n.phc-field label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #475569;\n}\n.phc-field input {\n  padding: 8px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 14px;\n  color: #1e293b;\n  background: #ffffff;\n}\n.phc-field input:focus {\n  outline: none;\n  border-color: #1ecad3;\n  box-shadow: 0 0 0 2px rgba(30, 202, 211, 0.2);\n}\n.phc-input-note {\n  font-size: 11px;\n  color: #64748b;\n  margin-top: 1px;\n}\n\n\/* Submission Row *\/\n.phc-btn-row {\n  display: flex;\n  gap: 12px;\n  margin-top: 24px;\n}\n.phc-btn-calc {\n  flex: 2;\n  background: #1ecad3;\n  color: #fff;\n  border: none;\n  padding: 12px;\n  border-radius: 6px;\n  font-size: 15px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.2s ease;\n}\n.phc-btn-calc:hover {\n  background: #19b2ba;\n}\n.phc-btn-reset {\n  flex: 1;\n  background: #f1f5f9;\n  color: #475569;\n  border: 1px solid #cbd5e1;\n  padding: 12px;\n  border-radius: 6px;\n  font-size: 15px;\n  font-weight: 500;\n  cursor: pointer;\n}\n.phc-btn-reset:hover {\n  background: #e2e8f0;\n}\n\n\/* Results Formatting *\/\n.phc-results-section {\n  margin-top: 24px;\n  background: #f0fdfa;\n  border: 1px solid #99f6e4;\n  border-radius: 8px;\n  padding: 18px;\n}\n.phc-results-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 14px;\n  border-bottom: 1px dashed #ccfbf1;\n  padding-bottom: 8px;\n}\n.phc-results-header h3 {\n  margin: 0;\n  font-size: 15px;\n  color: #115e59;\n}\n.phc-results-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n}\n@media (max-width: 480px) {\n  .phc-results-grid { grid-template-columns: 1fr; }\n}\n.phc-res-card {\n  background: #ffffff;\n  padding: 14px;\n  border-radius: 6px;\n  border: 1px solid #e2e8f0;\n}\n.phc-res-card.highlight {\n  border-color: #1ecad3;\n  background: #f8fafc;\n}\n.phc-res-label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n}\n.phc-res-val {\n  font-size: 22px;\n  font-weight: 700;\n  color: #0f172a;\n  margin: 4px 0;\n}\n.phc-res-card.highlight .phc-res-val {\n  color: #19b2ba;\n}\n.phc-res-sub {\n  font-size: 11px;\n  color: #94a3b8;\n}\n<\/style>\n\n<script>\n\/\/ State Management Engine\nlet currentMethod = 'dimensions';\nlet currentShape = 'rectangular';\nlet dimUnit = 'ft';\nlet volUnit = 'gal';\nlet tempUnit = 'F';\nlet resultVolUnit = 'gal';\nlet calculatedVolumeInGallons = 0;\n\nfunction setMethod(method) {\n  currentMethod = method;\n  document.getElementById('method-dims').classList.toggle('active', method === 'dimensions');\n  document.getElementById('method-vol').classList.toggle('active', method === 'volume');\n\n  const titleEl = document.getElementById('step3-title');\n  if (method === 'dimensions') {\n    titleEl.innerText = \"Tama\u00f1o de la piscina\";\n    document.getElementById('unit-toggle-dims').style.display = 'inline-flex';\n    document.getElementById('unit-toggle-vol').style.display = 'none';\n    document.getElementById('inputs-dimensions-container').style.display = 'block';\n    document.getElementById('inputs-volume-container').style.display = 'none';\n  } else {\n    titleEl.innerText = \"Volumen de la piscina\";\n    document.getElementById('unit-toggle-dims').style.display = 'none';\n    document.getElementById('unit-toggle-vol').style.display = 'inline-flex';\n    document.getElementById('inputs-dimensions-container').style.display = 'none';\n    document.getElementById('inputs-volume-container').style.display = 'block';\n  }\n}\n\nfunction setShape(shape) {\n  currentShape = shape;\n  const cards = document.querySelectorAll('.phc-shape-card');\n  cards.forEach(card => card.classList.remove('active'));\n  document.getElementById('shape-' + shape).classList.add('active');\n\n  \/\/ Hide all inner dimension layouts\n  const dimContainers = document.querySelectorAll('#inputs-dimensions-container .phc-grid-inputs');\n  dimContainers.forEach(el => el.style.display = 'none');\n\n  \/\/ Show target layout\n  const targetFields = document.getElementById('fields-' + shape);\n  if (targetFields) targetFields.style.display = 'grid';\n}\n\nfunction setDimUnit(unit) {\n  dimUnit = unit;\n  document.getElementById('unit-ft').classList.toggle('active', unit === 'ft');\n  document.getElementById('unit-m').classList.toggle('active', unit === 'm');\n\n  const labels = document.querySelectorAll('.d-unit');\n  labels.forEach(lbl => lbl.innerText = unit);\n}\n\nfunction setVolUnit(unit) {\n  volUnit = unit;\n  document.getElementById('unit-gal').classList.toggle('active', unit === 'gal');\n  document.getElementById('unit-l').classList.toggle('active', unit === 'l');\n  document.getElementById('unit-m3').classList.toggle('active', unit === 'm3');\n\n  let unitText = 'galones';\n  if(unit === 'l') unitText = 'litros';\n  if(unit === 'm3') unitText = 'metros c\u00fabicos (m\u00b3)';\n  document.getElementById('v-input-unit').innerText = unitText;\n}\n\nfunction setTempUnit(unit) {\n  tempUnit = unit;\n  document.getElementById('temp-f').classList.toggle('active', unit === 'F');\n  document.getElementById('temp-c').classList.toggle('active', unit === 'C');\n\n  const labels = document.querySelectorAll('.t-unit');\n  labels.forEach(lbl => lbl.innerText = '\u00b0' + unit);\n}\n\nfunction changeResultVolUnit(unit) {\n  resultVolUnit = unit;\n  document.getElementById('res-gal').classList.toggle('active', unit === 'gal');\n  document.getElementById('res-l').classList.toggle('active', unit === 'l');\n  document.getElementById('res-m3').classList.toggle('active', unit === 'm3');\n  updateResultVolumeDisplay();\n}\n\nfunction updateResultVolumeDisplay() {\n  let displayValue = 0;\n  let lbl = 'Galones';\n\n  if (resultVolUnit === 'gal') {\n    displayValue = calculatedVolumeInGallons;\n    lbl = 'Galones';\n  } else if (resultVolUnit === 'l') {\n    displayValue = calculatedVolumeInGallons * 3.78541;\n    lbl = 'Litros';\n  } else if (resultVolUnit === 'm3') {\n    displayValue = calculatedVolumeInGallons * 0.00378541;\n    lbl = 'Metros c\u00fabicos (m\u00b3)';\n  }\n\n  document.getElementById('res-vol-val').innerText = Math.round(displayValue).toLocaleString();\n  document.getElementById('res-vol-unit-lbl').innerText = lbl;\n}\n\nfunction calculateHeater() {\n  let volumeInGal = 0;\n\n  if (currentMethod === 'dimensions') {\n    \/\/ Collect standard dynamic values converting everything to feet if entry is in meters\n    const mult = (dimUnit === 'm') ? 3.28084 : 1;\n\n    if (currentShape === 'rectangular') {\n      let l = parseFloat(document.getElementById('rect-len').value) * mult;\n      let w = parseFloat(document.getElementById('rect-wid').value) * mult;\n      let s = parseFloat(document.getElementById('rect-shallow').value) * mult;\n      let d = parseFloat(document.getElementById('rect-deep').value) * mult;\n      let avgDepth = (s + d) \/ 2;\n      volumeInGal = l * w * avgDepth * 7.48;\n    }\n    else if (currentShape === 'lshaped') {\n      let totL = parseFloat(document.getElementById('l-tot-len').value) * mult;\n      let totW = parseFloat(document.getElementById('l-tot-wid').value) * mult;\n      let armL = parseFloat(document.getElementById('l-arm-len').value) * mult;\n      let armW = parseFloat(document.getElementById('l-arm-wid').value) * mult;\n      let s = parseFloat(document.getElementById('l-shallow').value) * mult;\n      let d = parseFloat(document.getElementById('l-deep').value) * mult;\n      let avgDepth = (s + d) \/ 2;\n      \/\/ Splitting shape into two components: main rectangle body and short arm extension\n      let area = ((totL - armL) * totW) + (armL * armW);\n      volumeInGal = area * avgDepth * 7.48;\n    }\n    else if (currentShape === 'circle') {\n      let r = parseFloat(document.getElementById('circ-rad').value) * mult;\n      let s = parseFloat(document.getElementById('circ-shallow').value) * mult;\n      let d = parseFloat(document.getElementById('circ-deep').value) * mult;\n      let avgDepth = (s + d) \/ 2;\n      volumeInGal = Math.PI * Math.pow(r, 2) * avgDepth * 7.48;\n    }\n    else if (currentShape === 'triangular') {\n      let b = parseFloat(document.getElementById('tri-base').value) * mult;\n      let h = parseFloat(document.getElementById('tri-height').value) * mult;\n      let s = parseFloat(document.getElementById('tri-shallow').value) * mult;\n      let d = parseFloat(document.getElementById('tri-deep').value) * mult;\n      let avgDepth = (s + d) \/ 2;\n      volumeInGal = 0.5 * b * h * avgDepth * 7.48;\n    }\n    else if (currentShape === 'kidney') {\n      let l = parseFloat(document.getElementById('kid-len').value) * mult;\n      let w = parseFloat(document.getElementById('kid-wid').value) * mult;\n      let s = parseFloat(document.getElementById('kid-shallow').value) * mult;\n      let d = parseFloat(document.getElementById('kid-deep').value) * mult;\n      let avgDepth = (s + d) \/ 2;\n      volumeInGal = l * w * avgDepth * 0.85 * 7.48;\n    }\n    else if (currentShape === 'oval') {\n      let l = parseFloat(document.getElementById('oval-len').value) * mult;\n      let w = parseFloat(document.getElementById('oval-wid').value) * mult;\n      let s = parseFloat(document.getElementById('oval-shallow').value) * mult;\n      let d = parseFloat(document.getElementById('oval-deep').value) * mult;\n      let avgDepth = (s + d) \/ 2;\n      volumeInGal = (l \/ 2) * (w \/ 2) * Math.PI * avgDepth * 7.48;\n    }\n    else if (currentShape === 'oblong') {\n      let lDia = parseFloat(document.getElementById('ob-ldia').value) * mult;\n      let sDia = parseFloat(document.getElementById('ob-sdia').value) * mult;\n      let len = parseFloat(document.getElementById('ob-len').value) * mult;\n      let s = parseFloat(document.getElementById('ob-shallow').value) * mult;\n      let d = parseFloat(document.getElementById('ob-deep').value) * mult;\n      let avgDepth = (s + d) \/ 2;\n      let area = (sDia * (len - sDia)) + (Math.PI * Math.pow(sDia \/ 2, 2));\n      volumeInGal = area * avgDepth * 7.48;\n    }\n  } else {\n    \/\/ Pure Volume calculation route\n    let rawVol = parseFloat(document.getElementById('input-pure-volume').value);\n    if (volUnit === 'gal') {\n      volumeInGal = rawVol;\n    } else if (volUnit === 'l') {\n      volumeInGal = rawVol \/ 3.78541;\n    } else if (volUnit === 'm3') {\n      volumeInGal = rawVol \/ 0.00378541;\n    }\n  }\n\n  \/\/ Ensure volume configuration isn't corrupted or empty\n  if(isNaN(volumeInGal) || volumeInGal <= 0) volumeInGal = 0;\n  calculatedVolumeInGallons = volumeInGal;\n\n  \/\/ Heating Math Calculations\n  let tStart = parseFloat(document.getElementById('heat-start').value);\n  let tEnd = parseFloat(document.getElementById('heat-des').value);\n  let hTime = parseFloat(document.getElementById('heat-time').value);\n\n  if (isNaN(hTime) || hTime < 1) hTime = 1;\n\n  let tempDiff = tEnd - tStart;\n  if(tempUnit === 'C') {\n    tempDiff = tempDiff * 1.8; \/\/ Convert variance scalar scale up to Fahrenheit Delta\n  }\n\n  if (tempDiff <= 0) tempDiff = 0;\n\n  \/\/ Formula: 1 Gallon of pure water weighs roughly 8.34 lbs. 1 BTU raises 1 lb water by 1\u00b0F.\n  let totalBtuNeeded = volumeInGal * 8.34 * tempDiff;\n  let btuPerHour = totalBtuNeeded \/ hTime;\n\n  \/\/ Real world thermodynamic buffer efficiency correction factor (approx 20% loss compensation)\n  btuPerHour = btuPerHour * 1.22;\n\n  \/\/ Output formatting to View Elements\n  document.getElementById('res-btu').innerText = Math.round(btuPerHour).toLocaleString();\n  updateResultVolumeDisplay();\n\n  document.getElementById('results-box').style.display = 'block';\n}\n\nfunction resetCalculator() {\n  \/\/ Restore interface status to defaults\n  setMethod('dimensions');\n  setShape('rectangular');\n  setDimUnit('ft');\n  setVolUnit('gal');\n  setTempUnit('F');\n  changeResultVolUnit('gal');\n\n  \/\/ Clean all basic standard entries\n  const inputs = document.querySelectorAll('.phc-wrapper input');\n  inputs.forEach(input => {\n    if(input.id === 'heat-start') input.value = 65;\n    else if(input.id === 'heat-des') input.value = 80;\n    else if(input.id === 'heat-time') input.value = 24;\n    else if(input.id === 'rect-len' || input.id === 'oval-len') input.value = 30;\n    else if(input.id === 'rect-wid' || input.id === 'tri-height' || input.id === 'oval-wid' || input.id === 'l-arm-len') input.value = 15;\n    else if(input.id === 'rect-shallow' || input.id === 'l-shallow' || input.id === 'tri-shallow' || input.id === 'kid-shallow' || input.id === 'ob-shallow') input.value = 3;\n    else if(input.id === 'rect-deep' || input.id === 'l-deep' || input.id === 'oval-deep' || input.id === 'ob-deep') input.value = 6;\n    else if(input.id === 'input-pure-volume') input.value = 15000;\n    else if(input.id === 'l-tot-len') input.value = 40;\n    else if(input.id === 'l-tot-wid') input.value = 20;\n    else if(input.id === 'l-arm-wid') input.value = 10;\n    else if(input.id === 'circ-rad') input.value = 9;\n    else if(input.id === 'circ-shallow' || input.id === 'circ-deep') input.value = 4;\n    else if(input.id === 'tri-base') input.value = 20;\n    else if(input.id === 'kid-len') input.value = 28;\n    else if(input.id === 'kid-wid') input.value = 14;\n    else if(input.id === 'kid-deep') input.value = 5.5;\n    else if(input.id === 'ob-ldia') input.value = 16;\n    else if(input.id === 'ob-sdia') input.value = 12;\n    else if(input.id === 'ob-len') input.value = 32;\n  });\n\n  document.getElementById('results-box').style.display = 'none';\n}\n<\/script>\n\n\n<!-- aiper-tool-links -->\n<div class=\"aiper-tool-links\">\n  <div class=\"aiper-tl-section\">\n    <div class=\"aiper-tl-heading\">M\u00e1s herramientas<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-tiempo-llenado-piscina\/\" class=\"aiper-tl-tag\">Calculadora de tiempo de llenado de piscina<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-tasa-recambio-piscina\/\" class=\"aiper-tl-tag\">Calculadora de tasa de recambio de piscina<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-indice-saturacion-piscina\/\" class=\"aiper-tl-tag\">Calculadora del \u00edndice de saturaci\u00f3n de piscina (LSI)<\/a>\n    <\/div>\n  <\/div>\n  <div class=\"aiper-tl-section\">\n    <div class=\"aiper-tl-heading\">Art\u00edculos relacionados<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/es\/bajar-alcalinidad-piscina\/\" class=\"aiper-tl-tag\">C\u00f3mo bajar la alcalinidad de la piscina<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/es\/robot-piscina-atascado-desague-principal\/\" class=\"aiper-tl-tag\">\u00bfPor qu\u00e9 el robot de piscina se queda atascado en el desag\u00fce principal?<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/es\/preparar-piscina-para-invierno\/\" class=\"aiper-tl-tag\">C\u00f3mo preparar una piscina enterrada para el invierno: gu\u00eda paso a paso<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/es\/dejar-robot-limpiapiscinas-en-el-agua\/\" class=\"aiper-tl-tag\">\u00bfSe puede dejar el robot limpiapiscinas en el agua?<\/a>\n    <\/div>\n  <\/div>\n<\/div>\n\n<style>\n.aiper-tool-links{margin:2.5rem 0 1.5rem;padding:1.5rem 1.75rem;background:linear-gradient(135deg,rgba(148,134,247,.04),rgba(30,202,211,.04));border-radius:12px;border:1px solid rgba(148,134,247,.10)}\n.aiper-tl-section{margin-bottom:1.25rem}\n.aiper-tl-section:last-child{margin-bottom:0}\n.aiper-tl-heading{font-size:.75rem;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:#8899aa;margin:0 0 .65rem}\n.aiper-tl-tags{display:flex;flex-wrap:wrap;gap:.5rem}\n.aiper-tl-tag{display:inline-block;padding:.4rem .95rem;font-size:.82rem;font-weight:500;line-height:1.35;color:#9486f7;background:rgba(148,134,247,.055);border:1px solid rgba(30,202,211,.25);border-radius:22px;text-decoration:none;transition:all .18s}\n.aiper-tl-tag:hover{background:#1ecad3;color:#fff;border-color:#1ecad3;box-shadow:0 2px 10px rgba(30,202,211,.22)}\n<\/style>","protected":false},"excerpt":{"rendered":"<p>1 M\u00e9todo de c\u00e1lculo Dimensiones de la piscina Volumen de la piscina 2 Selecciona la forma de la piscina Rectangular En forma de L Redonda Triangular Ri\u00f1\u00f3n Ovalada Alargada 3 Tama\u00f1o de la piscina ft m gal litros m\u00b3 Longitud (ft) Anchura (ft) Profundidad zona poco profunda (ft) Profundidad zona profunda (ft) Longitud total (ft)&#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-2102","page","type-page","status-publish","hentry"],"lang":"es","translations":{"es":2102,"de":2100,"en":1816,"fr":2101},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/2102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/comments?post=2102"}],"version-history":[{"count":3,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/2102\/revisions"}],"predecessor-version":[{"id":4394,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/2102\/revisions\/4394"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=2102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}