Simulaciones de datos históricos y códigos de cómputo para modelaciones de MODFLOW en la cuenca analizada

A continuación ponemos los códigos y simulaciones con datos iniciales.

A través de las páginas de Jupyter, utilizando la biblioteca FloPy, podemos realizar modelos hidrogeológicos de manera más eficiente y visual. FloPy, una interfaz de Python para MODFLOW y otros modelos de flujo de agua subterránea, permite a los usuarios construir, ejecutar y analizar modelos de manera interactiva dentro del entorno de Jupyter Notebook. Esto facilita la manipulación de datos, la visualización de resultados y la modificación de parámetros del modelo en tiempo real, lo cual es crucial para el desarrollo iterativo de modelos precisos y confiables. La capacidad de ejecutar bloques de código de manera secuencial y de integrar gráficos y tablas directamente en las celdas del notebook proporciona una plataforma robusta para la enseñanza y la investigación en hidrogeología.

Además, Jupyter Notebooks ofrece un entorno colaborativo donde los resultados del modelado pueden ser fácilmente compartidos y reproducidos. La visualización dinámica, mediante gráficos interactivos y mapas, mejora significativamente la interpretación de los resultados del modelo, permitiendo a los usuarios identificar patrones y comportamientos del agua subterránea con mayor claridad. Esta integración de FloPy con Jupyter no solo aumenta la productividad de los modeladores, sino que también abre nuevas posibilidades para la comunicación de hallazgos y la toma de decisiones informadas basadas en datos. En resumen, el uso de Jupyter y FloPy juntos proporciona una herramienta poderosa y flexible para el modelado hidrogeológico, combinando la capacidad de procesamiento de Python con la interactividad y visualización de Jupyter.

document.addEventListener(‘DOMContentLoaded’, () => { try { if (window.MathJax) { MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: ‘AMS’, useLabelIds: true } }, tex2jax: { inlineMath: [[‘$’, ‘$’], [‘\\(‘, ‘\\)’]], displayMath: [[‘$$’, ‘$$’], [‘\\[‘, ‘\\]’]], processEscapes: true, processEnvironments: true }, displayAlign: ‘center’, CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([‘Typeset’, MathJax.Hub]); } } catch (error) { console.error(‘Error initializing MathJax:’, error); // Puedes registrar el error en la consola sin mostrarlo en la página // También puedes enviar el error a un servidor de registro de errores si es necesario } }); simula1 init_mathjax = function() { if (window.MathJax) { // MathJax loaded MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: “AMS”, useLabelIds: true } }, tex2jax: { inlineMath: [ [‘$’,’$’], [“\\(“,”\\)”] ], displayMath: [ [‘$$’,’$$’], [“\\[“,”\\]”] ], processEscapes: true, processEnvironments: true }, displayAlign: ‘center’, CommonHTML: { linebreaks: { automatic: true } } }); MathJax.Hub.Queue([“Typeset”, MathJax.Hub]); } } init_mathjax(); document.addEventListener(“DOMContentLoaded”, async () => { const diagrams = document.querySelectorAll(“.jp-Mermaid > pre.mermaid”); // do not load mermaidjs if not needed if (!diagrams.length) { return; } const mermaid = (await import(“https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs”)).default; const parser = new DOMParser(); mermaid.initialize({ maxTextSize: 100000, maxEdges: 100000, startOnLoad: false, fontFamily: window .getComputedStyle(document.body) .getPropertyValue(“–jp-ui-font-family”), theme: document.querySelector(“body[data-jp-theme-light=’true’]”) ? “default” : “dark”, }); let _nextMermaidId = 0; function makeMermaidImage(svg) { const img = document.createElement(“img”); const doc = parser.parseFromString(svg, “image/svg+xml”); const svgEl = doc.querySelector(“svg”); const { maxWidth } = svgEl?.style || {}; const firstTitle = doc.querySelector(“title”); const firstDesc = doc.querySelector(“desc”); img.setAttribute(“src”, `data:image/svg+xml,${encodeURIComponent(svg)}`); if (maxWidth) { img.width = parseInt(maxWidth); } if (firstTitle) { img.setAttribute(“alt”, firstTitle.textContent); } if (firstDesc) { const caption = document.createElement(“figcaption”); caption.className = “sr-only”; caption.textContent = firstDesc.textContent; return [img, caption]; } return [img]; } async function makeMermaidError(text) { let errorMessage = “”; try { await mermaid.parse(text); } catch (err) { errorMessage = `${err}`; } const result = document.createElement(“details”); result.className = ‘jp-RenderedMermaid-Details’; const summary = document.createElement(“summary”); summary.className = ‘jp-RenderedMermaid-Summary’; const pre = document.createElement(“pre”); const code = document.createElement(“code”); code.innerText = text; pre.appendChild(code); summary.appendChild(pre); result.appendChild(summary); const warning = document.createElement(“pre”); warning.innerText = errorMessage; result.appendChild(warning); return [result]; } async function renderOneMarmaid(src) { const id = `jp-mermaid-${_nextMermaidId++}`; const parent = src.parentNode; let raw = src.textContent.trim(); const el = document.createElement(“div”); el.style.visibility = “hidden”; document.body.appendChild(el); let results = null; let output = null; try { let { svg } = await mermaid.render(id, raw, el); svg = cleanMermaidSvg(svg); results = makeMermaidImage(svg); output = document.createElement(“figure”); results.map(output.appendChild, output); } catch (err) { parent.classList.add(“jp-mod-warning”); results = await makeMermaidError(raw); output = results[0]; } finally { el.remove(); } parent.classList.add(“jp-RenderedMermaid”); parent.appendChild(output); } /** * Post-process to ensure mermaid diagrams contain only valid SVG and XHTML. */ function cleanMermaidSvg(svg) { return svg.replace(RE_VOID_ELEMENT, replaceVoidElement); } /** * A regular expression for all void elements, which may include attributes and * a slash. * * @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element * * Of these, only `
` is generated by Mermaid in place of `\n`, * but _any_ “malformed” tag will break the SVG rendering entirely. */ const RE_VOID_ELEMENT = /]*?)\s*>/gi; /** * Ensure a void element is closed with a slash, preserving any attributes. */ function replaceVoidElement(match, tag, rest) { rest = rest.trim(); if (!rest.endsWith(‘/’)) { rest = `${rest} /`; } return “; } void Promise.all([…diagrams].map(renderOneMarmaid)); });