Latest commit

History

270 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Numdiff

Installation and setup

To set up the project create a virtual environment, activate the environment, and install the dependencies.

python3 --version # Ensure you have at least python 3.7 (May work with earlier versions, but not tested)
python3 -m venv venv
source venv/bin/activate # Or the equivalent for your shell
pip3 install -r requirements.txt

For how to activate the environment on different shells see the venv docs.

You may need to install swig to be able to build scikit-umfpack. Alternatively you may remove it from requirements.txt, as it isn't used explicitly, but may be used by the solvers in scipy.sparse.linalg if present. Do note that during testing I had some issues with memory usage using the default solvers from scipy, while the umfpack solvers didn't seem to have that issue.

Configuring the project

numdiff/settings.py contains some variables that are read by the rest of the project that may be changed to alter the behaviour of the code. These are documented in the file itself. The most important of these may be FINE_PARAMETERS which toggles whether the tasks will use parameters that are easy to run (< 1 min), or that give the most detailed plots (>> 5 min).

Running the code

Running python main.py while in the virtual environment prompts you to enter the tasks you want to run. To run several tasks at once you may type a common prefix of the tasks you want (e.g. 1 to run all tasks related to task 1), and you may specify several prefixes space separated. To run the code non-interactively you may specify these parameters as commandline arguments instead of at the prompt.

Part 2 - task 3: The advection diffusion equation

Note: Part 2 - task 3 is in this project renamed to task 6 to fit the scheme.

To run the code comparison task (part 2 - task 3c) run task 6c_runtime e.g. python main.py 6c. This will generate a plot in the images folder with two figures: l2 error vs degrees of freedom and runtime vs degrees of freedom.

Editing the tasks

The tasks are loaded into main.py from the tasks directory. Each major task (1, 2, ...) has its own file in the tasks directory, while the functions for the different subtasks lie inside those files. The taskname used in main.py should, for the most part, coincide with the names of the functions.

To edit the behaviour or the parameters of any task, simply edit the corresponding function.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

270 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Numdiff

Installation and setup

To set up the project create a virtual environment, activate the environment, and install the dependencies.

python3 --version # Ensure you have at least python 3.7 (May work with earlier versions, but not tested)
python3 -m venv venv
source venv/bin/activate # Or the equivalent for your shell
pip3 install -r requirements.txt

For how to activate the environment on different shells see the venv docs.

You may need to install swig to be able to build scikit-umfpack. Alternatively you may remove it from requirements.txt, as it isn't used explicitly, but may be used by the solvers in scipy.sparse.linalg if present. Do note that during testing I had some issues with memory usage using the default solvers from scipy, while the umfpack solvers didn't seem to have that issue.

Configuring the project

numdiff/settings.py contains some variables that are read by the rest of the project that may be changed to alter the behaviour of the code. These are documented in the file itself. The most important of these may be FINE_PARAMETERS which toggles whether the tasks will use parameters that are easy to run (< 1 min), or that give the most detailed plots (>> 5 min).

Running the code

Running python main.py while in the virtual environment prompts you to enter the tasks you want to run. To run several tasks at once you may type a common prefix of the tasks you want (e.g. 1 to run all tasks related to task 1), and you may specify several prefixes space separated. To run the code non-interactively you may specify these parameters as commandline arguments instead of at the prompt.

Part 2 - task 3: The advection diffusion equation

Note: Part 2 - task 3 is in this project renamed to task 6 to fit the scheme.

To run the code comparison task (part 2 - task 3c) run task 6c_runtime e.g. python main.py 6c. This will generate a plot in the images folder with two figures: l2 error vs degrees of freedom and runtime vs degrees of freedom.

Editing the tasks

The tasks are loaded into main.py from the tasks directory. Each major task (1, 2, ...) has its own file in the tasks directory, while the functions for the different subtasks lie inside those files. The taskname used in main.py should, for the most part, coincide with the names of the functions.

To edit the behaviour or the parameters of any task, simply edit the corresponding function.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

270 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Numdiff

Installation and setup

To set up the project create a virtual environment, activate the environment, and install the dependencies.

python3 --version # Ensure you have at least python 3.7 (May work with earlier versions, but not tested)
python3 -m venv venv
source venv/bin/activate # Or the equivalent for your shell
pip3 install -r requirements.txt

For how to activate the environment on different shells see the venv docs.

You may need to install swig to be able to build scikit-umfpack. Alternatively you may remove it from requirements.txt, as it isn't used explicitly, but may be used by the solvers in scipy.sparse.linalg if present. Do note that during testing I had some issues with memory usage using the default solvers from scipy, while the umfpack solvers didn't seem to have that issue.

Configuring the project

numdiff/settings.py contains some variables that are read by the rest of the project that may be changed to alter the behaviour of the code. These are documented in the file itself. The most important of these may be FINE_PARAMETERS which toggles whether the tasks will use parameters that are easy to run (< 1 min), or that give the most detailed plots (>> 5 min).

Running the code

Running python main.py while in the virtual environment prompts you to enter the tasks you want to run. To run several tasks at once you may type a common prefix of the tasks you want (e.g. 1 to run all tasks related to task 1), and you may specify several prefixes space separated. To run the code non-interactively you may specify these parameters as commandline arguments instead of at the prompt.

Part 2 - task 3: The advection diffusion equation

Note: Part 2 - task 3 is in this project renamed to task 6 to fit the scheme.

To run the code comparison task (part 2 - task 3c) run task 6c_runtime e.g. python main.py 6c. This will generate a plot in the images folder with two figures: l2 error vs degrees of freedom and runtime vs degrees of freedom.

Editing the tasks

The tasks are loaded into main.py from the tasks directory. Each major task (1, 2, ...) has its own file in the tasks directory, while the functions for the different subtasks lie inside those files. The taskname used in main.py should, for the most part, coincide with the names of the functions.

To edit the behaviour or the parameters of any task, simply edit the corresponding function.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

270 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Numdiff

Installation and setup

To set up the project create a virtual environment, activate the environment, and install the dependencies.

python3 --version # Ensure you have at least python 3.7 (May work with earlier versions, but not tested)
python3 -m venv venv
source venv/bin/activate # Or the equivalent for your shell
pip3 install -r requirements.txt

For how to activate the environment on different shells see the venv docs.

You may need to install swig to be able to build scikit-umfpack. Alternatively you may remove it from requirements.txt, as it isn't used explicitly, but may be used by the solvers in scipy.sparse.linalg if present. Do note that during testing I had some issues with memory usage using the default solvers from scipy, while the umfpack solvers didn't seem to have that issue.

Configuring the project

numdiff/settings.py contains some variables that are read by the rest of the project that may be changed to alter the behaviour of the code. These are documented in the file itself. The most important of these may be FINE_PARAMETERS which toggles whether the tasks will use parameters that are easy to run (< 1 min), or that give the most detailed plots (>> 5 min).

Running the code

Running python main.py while in the virtual environment prompts you to enter the tasks you want to run. To run several tasks at once you may type a common prefix of the tasks you want (e.g. 1 to run all tasks related to task 1), and you may specify several prefixes space separated. To run the code non-interactively you may specify these parameters as commandline arguments instead of at the prompt.

Part 2 - task 3: The advection diffusion equation

Note: Part 2 - task 3 is in this project renamed to task 6 to fit the scheme.

To run the code comparison task (part 2 - task 3c) run task 6c_runtime e.g. python main.py 6c. This will generate a plot in the images folder with two figures: l2 error vs degrees of freedom and runtime vs degrees of freedom.

Editing the tasks

The tasks are loaded into main.py from the tasks directory. Each major task (1, 2, ...) has its own file in the tasks directory, while the functions for the different subtasks lie inside those files. The taskname used in main.py should, for the most part, coincide with the names of the functions.

To edit the behaviour or the parameters of any task, simply edit the corresponding function.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

270 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Numdiff

Installation and setup

To set up the project create a virtual environment, activate the environment, and install the dependencies.

python3 --version # Ensure you have at least python 3.7 (May work with earlier versions, but not tested)
python3 -m venv venv
source venv/bin/activate # Or the equivalent for your shell
pip3 install -r requirements.txt

For how to activate the environment on different shells see the venv docs.

You may need to install swig to be able to build scikit-umfpack. Alternatively you may remove it from requirements.txt, as it isn't used explicitly, but may be used by the solvers in scipy.sparse.linalg if present. Do note that during testing I had some issues with memory usage using the default solvers from scipy, while the umfpack solvers didn't seem to have that issue.

Configuring the project

numdiff/settings.py contains some variables that are read by the rest of the project that may be changed to alter the behaviour of the code. These are documented in the file itself. The most important of these may be FINE_PARAMETERS which toggles whether the tasks will use parameters that are easy to run (< 1 min), or that give the most detailed plots (>> 5 min).

Running the code

Running python main.py while in the virtual environment prompts you to enter the tasks you want to run. To run several tasks at once you may type a common prefix of the tasks you want (e.g. 1 to run all tasks related to task 1), and you may specify several prefixes space separated. To run the code non-interactively you may specify these parameters as commandline arguments instead of at the prompt.

Part 2 - task 3: The advection diffusion equation

Note: Part 2 - task 3 is in this project renamed to task 6 to fit the scheme.

To run the code comparison task (part 2 - task 3c) run task 6c_runtime e.g. python main.py 6c. This will generate a plot in the images folder with two figures: l2 error vs degrees of freedom and runtime vs degrees of freedom.

Editing the tasks

The tasks are loaded into main.py from the tasks directory. Each major task (1, 2, ...) has its own file in the tasks directory, while the functions for the different subtasks lie inside those files. The taskname used in main.py should, for the most part, coincide with the names of the functions.

To edit the behaviour or the parameters of any task, simply edit the corresponding function.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

270 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Numdiff

Installation and setup

To set up the project create a virtual environment, activate the environment, and install the dependencies.

python3 --version # Ensure you have at least python 3.7 (May work with earlier versions, but not tested)
python3 -m venv venv
source venv/bin/activate # Or the equivalent for your shell
pip3 install -r requirements.txt

For how to activate the environment on different shells see the venv docs.

You may need to install swig to be able to build scikit-umfpack. Alternatively you may remove it from requirements.txt, as it isn't used explicitly, but may be used by the solvers in scipy.sparse.linalg if present. Do note that during testing I had some issues with memory usage using the default solvers from scipy, while the umfpack solvers didn't seem to have that issue.

Configuring the project

numdiff/settings.py contains some variables that are read by the rest of the project that may be changed to alter the behaviour of the code. These are documented in the file itself. The most important of these may be FINE_PARAMETERS which toggles whether the tasks will use parameters that are easy to run (< 1 min), or that give the most detailed plots (>> 5 min).

Running the code

Running python main.py while in the virtual environment prompts you to enter the tasks you want to run. To run several tasks at once you may type a common prefix of the tasks you want (e.g. 1 to run all tasks related to task 1), and you may specify several prefixes space separated. To run the code non-interactively you may specify these parameters as commandline arguments instead of at the prompt.

Part 2 - task 3: The advection diffusion equation

Note: Part 2 - task 3 is in this project renamed to task 6 to fit the scheme.

To run the code comparison task (part 2 - task 3c) run task 6c_runtime e.g. python main.py 6c. This will generate a plot in the images folder with two figures: l2 error vs degrees of freedom and runtime vs degrees of freedom.

Editing the tasks

The tasks are loaded into main.py from the tasks directory. Each major task (1, 2, ...) has its own file in the tasks directory, while the functions for the different subtasks lie inside those files. The taskname used in main.py should, for the most part, coincide with the names of the functions.

To edit the behaviour or the parameters of any task, simply edit the corresponding function.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

270 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Numdiff

Installation and setup

To set up the project create a virtual environment, activate the environment, and install the dependencies.

python3 --version # Ensure you have at least python 3.7 (May work with earlier versions, but not tested)
python3 -m venv venv
source venv/bin/activate # Or the equivalent for your shell
pip3 install -r requirements.txt

For how to activate the environment on different shells see the venv docs.

You may need to install swig to be able to build scikit-umfpack. Alternatively you may remove it from requirements.txt, as it isn't used explicitly, but may be used by the solvers in scipy.sparse.linalg if present. Do note that during testing I had some issues with memory usage using the default solvers from scipy, while the umfpack solvers didn't seem to have that issue.

Configuring the project

numdiff/settings.py contains some variables that are read by the rest of the project that may be changed to alter the behaviour of the code. These are documented in the file itself. The most important of these may be FINE_PARAMETERS which toggles whether the tasks will use parameters that are easy to run (< 1 min), or that give the most detailed plots (>> 5 min).

Running the code

Running python main.py while in the virtual environment prompts you to enter the tasks you want to run. To run several tasks at once you may type a common prefix of the tasks you want (e.g. 1 to run all tasks related to task 1), and you may specify several prefixes space separated. To run the code non-interactively you may specify these parameters as commandline arguments instead of at the prompt.

Part 2 - task 3: The advection diffusion equation

Note: Part 2 - task 3 is in this project renamed to task 6 to fit the scheme.

To run the code comparison task (part 2 - task 3c) run task 6c_runtime e.g. python main.py 6c. This will generate a plot in the images folder with two figures: l2 error vs degrees of freedom and runtime vs degrees of freedom.

Editing the tasks

The tasks are loaded into main.py from the tasks directory. Each major task (1, 2, ...) has its own file in the tasks directory, while the functions for the different subtasks lie inside those files. The taskname used in main.py should, for the most part, coincide with the names of the functions.

To edit the behaviour or the parameters of any task, simply edit the corresponding function.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

270 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Numdiff

Installation and setup

To set up the project create a virtual environment, activate the environment, and install the dependencies.

python3 --version # Ensure you have at least python 3.7 (May work with earlier versions, but not tested)
python3 -m venv venv
source venv/bin/activate # Or the equivalent for your shell
pip3 install -r requirements.txt

For how to activate the environment on different shells see the venv docs.

You may need to install swig to be able to build scikit-umfpack. Alternatively you may remove it from requirements.txt, as it isn't used explicitly, but may be used by the solvers in scipy.sparse.linalg if present. Do note that during testing I had some issues with memory usage using the default solvers from scipy, while the umfpack solvers didn't seem to have that issue.

Configuring the project

numdiff/settings.py contains some variables that are read by the rest of the project that may be changed to alter the behaviour of the code. These are documented in the file itself. The most important of these may be FINE_PARAMETERS which toggles whether the tasks will use parameters that are easy to run (< 1 min), or that give the most detailed plots (>> 5 min).

Running the code

Running python main.py while in the virtual environment prompts you to enter the tasks you want to run. To run several tasks at once you may type a common prefix of the tasks you want (e.g. 1 to run all tasks related to task 1), and you may specify several prefixes space separated. To run the code non-interactively you may specify these parameters as commandline arguments instead of at the prompt.

Part 2 - task 3: The advection diffusion equation

Note: Part 2 - task 3 is in this project renamed to task 6 to fit the scheme.

To run the code comparison task (part 2 - task 3c) run task 6c_runtime e.g. python main.py 6c. This will generate a plot in the images folder with two figures: l2 error vs degrees of freedom and runtime vs degrees of freedom.

Editing the tasks

The tasks are loaded into main.py from the tasks directory. Each major task (1, 2, ...) has its own file in the tasks directory, while the functions for the different subtasks lie inside those files. The taskname used in main.py should, for the most part, coincide with the names of the functions.

To edit the behaviour or the parameters of any task, simply edit the corresponding function.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages