From sensors to 3d reconstruction - #1579
Conversation
There was a problem hiding this comment.
Code Review
This pull request transitions the repository from a generic 'Beautiful Jekyll' template to a customized website for the ModelFLOWs research group at Universidad Politécnica de Madrid, introducing various research collections, notebooks, databases, and OpenFOAM source files. The review feedback highlights several critical compilation errors in the added C++ files, such as incorrect dictionary lookups and type mismatches. Additionally, several issues were identified in the Jekyll configuration and markdown files, including an invalid timezone identifier, broken links, unclosed comment tags, empty download URLs, typos in citations, and mismatched file metadata.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| ) | ||
| : | ||
| fixedValueFvPatchScalarField(p, iF, dict), | ||
| Prt_(readScalar(dict.lookup("Prt"))), // force read to avoid ambiguity |
There was a problem hiding this comment.
In OpenFOAM-v10, dictionary::lookup returns const entry& which cannot be passed directly to readScalar (which expects Istream&). You should use dict.lookupOrDefault<scalar>("Prt", 0.85) or dict.get<scalar>("Prt") to avoid compilation errors.
Prt_(dict.lookupOrDefault<scalar>("Prt", 0.85)), // force read to avoid ambiguity|
|
||
| volScalarField::Boundary d = nearWallDist(mesh_).y(); | ||
|
|
||
| const fvPatchList& patches = mesh_.boundary(); | ||
|
|
||
| forAll(patches, patchi) | ||
| { | ||
| firstCellHeightBf[patchi] = d[patchi]; |
There was a problem hiding this comment.
This will fail to compile due to a type mismatch. nearWallDist(mesh_).y() returns a const volScalarField&, but you are trying to assign it to volScalarField::Boundary d. You should declare d as const volScalarField& and then access its boundary field.
const volScalarField& d = nearWallDist(mesh_).y();
const volScalarField::Boundary& dBf = d.boundaryField();
const fvPatchList& patches = mesh_.boundary();
forAll(patches, patchi)
{
firstCellHeightBf[patchi] = dBf[patchi];
}| const scalar Pr | ||
| ( | ||
| dimensionedScalar | ||
| ( | ||
| "Pr", | ||
| dimless, | ||
| transportProperties.lookup("Pr") | ||
| ).value() | ||
| ); |
There was a problem hiding this comment.
This will fail to compile because transportProperties.lookup("Pr") returns const entry&, which cannot be passed as the third argument (scalar value) to the dimensionedScalar constructor. Instead, you can read the scalar value directly from the dictionary using transportProperties.get<scalar>("Pr").
// Molecular Prandtl number
const scalar Pr
(
transportProperties.get<scalar>("Pr")
);| * [HODMD](https://modelflows.github.io/modelflowsapp/modaldecomposition/#pattern-hodmd) | ||
| * [Low-cost Algorithms](https://modelflows.github.io/modelflowsapp/modaldecomposition/#pattern-hodmd) | ||
| - [Low-cost SVD](https://modelflows.github.io/modelflowsapp/modaldecomposition/#low-cost-svd) | ||
| - [Low-cost HOSVD](https://modelflows.github.io/modelflowsapp/modaldecomposition/#low-cost-hosvd) |
|
|
||
|  | ||
|
|
||
| Download the code [*here*](https://github.com/modelflows/notebooks/raw/refs/heads/main/SUPERRESOLUTION.zip). --> |
There was a problem hiding this comment.
There is a trailing --> at the end of this line, which is rendered as plain text on the page because there is no matching opening <!-- comment tag.
| Download the code [*here*](https://github.com/modelflows/notebooks/raw/refs/heads/main/SUPERRESOLUTION.zip). --> | |
| Download the code [*here*](https://github.com/modelflows/notebooks/raw/refs/heads/main/SUPERRESOLUTION.zip). |
|
|
||
| Computational Fluid Dynamics (CFD) simulations provide crucial insights into traffic pollution dispersion across Madrid's urban landscape. By resolving street-level flow structures, including recirculation zones, canyon vortices, and stagnation areas—these simulations identify pollution hotspots that threaten public health in densely populated areas. The results directly inform evidence-based decisions for traffic regulation, traffic light re-timing, and urban planning interventions where emission sources and vulnerable populations (residents, students, pedestrians) are in close proximity. The Vallecas district has been identified by the municipal authority as a strategic intervention area due to the combination of major traffic corridors with residential, recreational and educational activities, including the development of a new green student-housing complex. | ||
|
|
||
|  |
There was a problem hiding this comment.
Avoid hardcoding absolute GitHub URLs like https://github.com/modelflows/modelflowsapp/blob/master/.... Instead, use Jekyll's relative_url filter to ensure links remain robust across different environments (e.g., local development, forks, or custom domains). This also applies to lines 30, 37, 42, 67, 84, 86, and 99.
|  | |
|  |
| Aerobiological data (e.g. pollen and spores) are typically measured on a daily basis. Current monitoring typically relies on manual sampling, which can result in incomplete datasets due to malfunctions or voluntary interruptions of sampling (Navares & Azanarte, 2019). Various imputation methods are used to address missing data issues, such as statistical approaches (e.g., linear or moving mean interpolation) and machine learning (ML) techniques (e.g., Convolutional Neural Networks, k-Nearest Neighbours algorithm) (Navares & Azanarte, 2019; Picornell et al., 2021; Marchetti et al., 2017). However, the application of ML approaches in aerobiological missing data imputation has not been well-explored yet. | ||
| In this research, a simulation study was conducted to evaluate, for the first time, the effectiveness of Gappy Singular Value Decomposition (GSVD) in imputing aerobiological datasets, comparing it with a well-known statistical method, the moving mean algorithm. The GSVD is part of [*ModelFLOWs-app*](https://github.com/modelflows/ModelFLOWs-app) and it has been adapted for the present study. See more details of this research here: | ||
|
|
||
| [*Tagilaferro, S., Corrochano, A., Marchetti, P., Marcon, A., Le Clainche, S., A new method based on physical patterns to impute aerobiological datasets, PLoS ONE 19(11): e0314005, 2024.*](https://doi.org/10.1371/journal.pone.0314005) |
There was a problem hiding this comment.
There is a typo in the author's name in the citation: "Tagilaferro" should be "Tagliaferro".
| [*Tagilaferro, S., Corrochano, A., Marchetti, P., Marcon, A., Le Clainche, S., A new method based on physical patterns to impute aerobiological datasets, PLoS ONE 19(11): e0314005, 2024.*](https://doi.org/10.1371/journal.pone.0314005) | |
| [*Tagliaferro, S., Corrochano, A., Marchetti, P., Marcon, A., Le Clainche, S., A new method based on physical patterns to impute aerobiological datasets, PLoS ONE 19(11): e0314005, 2024.*](https://doi.org/10.1371/journal.pone.0314005) |
|
|
||
| Download the code [*here*](https://github.com/modelflows/notebooks/raw/main/deep-learning/Multiparametric.zip) or the Jupyter notebook [*here*](https://github.com/modelflows/notebooks/raw/main/deep-learning/Multiparametric.zip) | ||
|
|
||
| Download the databases [*here*]() |
| title: "Madrid Aerobiological Concentration Dataset 2026" | ||
| type: "Experimental / Urban" | ||
| tldr: "Timeseries and spatial distribution of pollen and pollutants in Vallecas." |
There was a problem hiding this comment.
|
|
||
| # Output options (more information on Jekyll's site) | ||
| timezone: "America/Toronto" | ||
| timezone: "Spain" |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe Beautiful Jekyll theme repository is converted into the ModelFLOWs research-group site. ChangesModelFLOWs Jekyll site
OpenFOAM urban-flows wall-function source
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 3❌ Failed checks (2 warnings, 1 inconclusive)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 39
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (6)
assets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/options (1)
1-60: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick winRemove generated
linux64GccDPInt32Optbuild artifacts from version control.Line 1 and surrounding content show preprocessed compiler output, not source-maintained build config. Keeping this file (and sibling generated files under
Make/linux64GccDPInt32Opt/) creates a stale second source of truth and host/toolchain coupling.Suggested cleanup
- assets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/options - assets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/sourceFiles - assets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/variables - assets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/firstCellHeight/firstCellHeight.C.dep + # keep only canonical, source-maintained files: + assets/img/urban_flows/src/functionObjects/fields/Make/options + assets/img/urban_flows/src/functionObjects/fields/Make/files🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/options` around lines 1 - 60, Remove the generated build artifact directory Make/linux64GccDPInt32Opt/ and all its contents from version control, as the file contains preprocessed compiler output (indicated by the # 1 preprocessor directives) rather than maintained source code. Additionally, add an appropriate pattern to the project's .gitignore file to prevent future build-specific platform/toolchain directories (such as Make/*/configurations) from being committed, ensuring the repository maintains only source configuration and not generated host/toolchain-specific artifacts._databases/2026-phonocardiograms.md (1)
1-12:⚠️ Potential issue | 🔴 Critical | ⚡ Quick winCritical: Filename does not match content title and topic.
The file is named
2026-phonocardiograms.mdbut the front-matter title is "Madrid Aerobiological Concentration Dataset 2026" and the TLDR references "pollen and pollutants." Phonocardiograms are cardiac audio recordings; aerobiological data is environmental sensor data about pollen and pollutants. This mismatch will cause routing and discovery issues.Either rename the file to
2026-madrid-aerobiological.md(to match the content) or correct the title/TLDR to reflect cardiac phonocardiogram data.Additionally, the content is incomplete (placeholder text with "..." and "[Link to Zenodo/Kaggle/Dataset]"). Ensure the description and link are filled in before merging.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_databases/2026-phonocardiograms.md` around lines 1 - 12, The filename `2026-phonocardiograms.md` does not match the content which describes aerobiological data about pollen and pollutants in Madrid (referenced in the title and TLDR fields). Rename the file to `2026-madrid-aerobiological.md` to align with the actual content about environmental sensor data, or alternatively update the front-matter title and tldr fields to accurately reflect cardiac phonocardiogram data if that is the intended subject. Additionally, the Database Overview section contains incomplete placeholder text ("...") and a generic dataset link placeholder that must be replaced with actual content describing the dataset and a valid link to the data source before merging._databases/2026-urban-aerobiological.md (1)
1-12:⚠️ Potential issue | 🔴 Critical | ⚡ Quick winDuplicate content: Identical to
_databases/2026-phonocardiograms.md.This file is an exact duplicate of
_databases/2026-phonocardiograms.md. Both files have the same front-matter title ("Madrid Aerobiological Concentration Dataset 2026") and identical content. This will result in two URLs routing to the same dataset, which is incorrect.Additionally, both files contain incomplete placeholder text ("This dataset contains...") and a dummy link placeholder.
Action: Determine whether these should be two different datasets. If they should be the same, consolidate into one file. If they should be different, update this file with the correct dataset description and link.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_databases/2026-urban-aerobiological.md` around lines 1 - 12, The file contains duplicate content identical to the phonocardiograms database file, with both having the same frontmatter title and incomplete placeholder text. Determine if these should represent two different datasets or be consolidated into one. If they should be different, replace the placeholder content in this aerobiological file with the correct dataset-specific description, actual dataset overview details, and a valid link to the actual dataset resource (removing the "[Link to Zenodo/Kaggle/Dataset]" placeholder). Ensure the title and content clearly distinguish this aerobiological dataset from the phonocardiograms dataset to avoid routing conflicts._notebooks/2026-AcceleratingCFD.md (1)
1-2:⚠️ Potential issue | 🔴 Critical | ⚡ Quick winMissing YAML frontmatter—file will not be processed as a notebook.
Jekyll requires frontmatter for file content to be processed; without it, the file is treated as a static file and will not undergo further processing. The notebook collection listing (
software/notebooks/index.md) expectstopicandtldrfields to display entries. This file will not appear in the notebook index.Recommendation: Either add a complete YAML frontmatter header (like the templates in
_notebooks/9999-template-notebook.md) or remove the file.🔧 Proposed fix: Add proper YAML frontmatter
-# Notebook for adaptive prediction +--- +layout: post +title: "Accelerating CFD" +topic: "Adaptive Prediction" +tldr: "A notebook demonstrating acceleration techniques for CFD simulations." +--- + +# Notebook for adaptive predictionOr remove the file entirely if it is not yet ready.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_notebooks/2026-AcceleratingCFD.md` around lines 1 - 2, The file 2026-AcceleratingCFD.md is missing YAML frontmatter which is required by Jekyll for notebook processing. Add a YAML frontmatter block at the very beginning of the file (before the existing markdown content) that includes the required fields topic and tldr, using the format and structure shown in the template file _notebooks/9999-template-notebook.md as a reference. The frontmatter should be wrapped in triple dashes (---) on both the opening and closing lines to ensure Jekyll recognizes and processes this file as a notebook that will appear in the notebook collection listing._videos/urban-city4cfd.md (1)
1-2:⚠️ Potential issue | 🔴 Critical | ⚡ Quick winAdd required YAML front matter to complete the video stub.
The file contains only a blank line and has no YAML front matter, title, or layout specification. For this video stub to render as a collection item via the
videoscollection routing (verified at_config.yml:318-320), it must include at least:--- layout: page title: "City4CFD Urban Modeling" application: "Urban Flows" category: "Category TBD" tldr: "Video description placeholder" author: "Name Surname" --- # Placeholder Video content or embedding instructions to follow.Without this front matter, the file will not be processed by Jekyll as a valid collection item and will not render on the site.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_videos/urban-city4cfd.md` around lines 1 - 2, The file _videos/urban-city4cfd.md is currently empty and lacks the required YAML front matter needed for Jekyll to process it as a valid collection item. Add YAML front matter at the very beginning of the file enclosed by triple dashes (---) that includes the following required fields: layout set to "page", title with a descriptive name like "City4CFD Urban Modeling", application field, category field, tldr field for the video description, and author field with the creator's name. After the closing triple dashes, add a placeholder section with a heading and note about video content or embedding instructions to follow.assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/options (1)
1-61: 🛠️ Refactor suggestion | 🟠 MajorDo not version generated
Make/linux64GccDPInt32Opt/*artifacts.The
linux64GccDPInt32Opt/optionsfile contains preprocessor directives indicating it is generated output. The canonical source exists atMake/optionsand should be the only version-controlled configuration. Remove thelinux64GccDPInt32Opt/directory from the repository and add it to.gitignoreto prevent future commits of architecture/compiler-specific build artifacts, which cause maintenance issues and portability concerns.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/options` around lines 1 - 61, The linux64GccDPInt32Opt directory contains generated preprocessor output that should not be version controlled. Remove the entire linux64GccDPInt32Opt directory from the repository by using git rm --cached or git rm -r to stop tracking these architecture and compiler-specific build artifacts. Add an entry for Make/linux64GccDPInt32Opt/ to the .gitignore file to ensure these generated files are not accidentally committed in the future. Keep only the canonical Make/options configuration file in version control as the source of truth.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@_applications/2026-combustion_tutorial.md`:
- Around line 1-5: The file is missing the required Jekyll front matter block at
the beginning, which prevents it from being processed as a collection member and
rendered on the live site. Add a YAML front matter block (enclosed in triple
dashes) at the very top of the file, before the existing markdown heading that
starts with "# OpenFOAM RANS Simulation...". Include the layout, title, area,
and tldr fields in the front matter to enable Jekyll to generate the correct
permalink and include the item in the applications gallery.
In `@_applications/2026-combustion.md`:
- Line 42: The relative filesystem links in the 2026-combustion.md file (on
lines 42 and 50) using the pattern `./2026-combustion_tutorial.md` will not
render correctly after Jekyll builds the site because the applications
collection generates URLs at `/software/applications/:slug/`. Change both
occurrences of the relative link `./2026-combustion_tutorial.md` to use the
absolute URL path `/software/applications/2026-combustion_tutorial/` to match
the Jekyll URL structure and align with the pattern used in other files like
2026-urban-flows.md.
In `@_config.yml`:
- Around line 279-300: The `exclude` key is defined twice in the YAML
configuration file, which causes YAML to only keep the last definition (on line
300) while ignoring the first one (lines 279-287). To fix this, merge both
exclude lists into a single `exclude` definition that contains all the items
from both the original list (CHANGELOG.md, CNAME, Gemfile, Gemfile.lock,
LICENSE, README.md, screenshot.png, docs/) and the second list (vendor,
CHANGELOG.md, CNAME, Gemfile, Gemfile.lock, LICENSE, README.md, screenshot.png,
docs/). Remove the duplicate `exclude` key definition and keep only one
consolidated exclude mapping with all unique file and directory patterns.
- Line 58: The twitter configuration key is commented out in the
social-network-links section of _config.yml, but the head.html template
unconditionally renders the twitter site meta tag using
site.social-network-links.twitter, resulting in an empty @ symbol in the Twitter
card meta tag. Either uncomment the twitter key in _config.yml and provide an
actual Twitter handle value, or update the template rendering logic in head.html
to conditionally check if site.social-network-links.twitter exists and has a
value before rendering the meta tag output to prevent the broken empty meta tag.
- Line 253: The timezone property in the Jekyll configuration is set to an
invalid IANA timezone identifier "Spain". Replace this value with a valid IANA
timezone identifier appropriate for your location: use "Europe/Madrid" for
mainland Spain, "Atlantic/Canary" for the Canary Islands, or "Africa/Ceuta" for
Ceuta and Melilla. Update the timezone property in the _config.yml file to use
one of these valid identifiers instead.
In `@_notebooks/2026-deeplearning.md`:
- Line 95: Correct spelling and hyphenation errors throughout the notebook. In
the text describing the hybrid ROM with HOSVD and LSTM, replace "itteratively"
with "iteratively" and change "Long Short Term Memory" to "Long Short-Term
Memory" with appropriate hyphens. Additionally, on line 146, fix "apperance" to
"appearance", "allways" to "always", and "unaccurate" to "inaccurate" to ensure
all user-facing text has correct spelling and grammar.
- Line 54: The markdown link in the line "Download the databases [*here*]()" has
empty parentheses which creates a broken link that will not work for users.
Either remove this entire line if the download link is not yet available, or
replace the empty parentheses with the actual URL to the databases that should
be downloaded.
In `@_notebooks/2026-others.md`:
- Line 14: Correct hyphenation and spelling errors throughout the markdown file.
Add hyphens to the compound adjectives "Spatio Temporal" to make it
"Spatio-Temporal" (this appears in at least two locations in the document),
change "low cost" to "low-cost" to properly hyphenate the compound modifier, and
fix the spelling error "instabilitites" to the correct spelling "instabilities".
These corrections ensure proper grammatical formatting of compound adjectives
and eliminate the spelling mistake.
In
`@_research/ai-models/ai-urban-flows/2026-modeling-complex-urban-flows-gen-ai.md`:
- Around line 1-8: In the front-matter of this file (and all other research
pages 1–5), rename the `thumbnail` field to `thumbnail-img` to match the
expected key that the template at _includes/head.html checks for
(page.thumbnail-img). Replace each instance of `thumbnail:` with
`thumbnail-img:` while keeping the value unchanged to ensure SEO meta tags
render correctly.
In `@_tutorials/urban-cfd.md`:
- Around line 16-22: The markdown file contains two incomplete link items in the
Sphinx Tutorial section. The list item with "TUTORIAL.md:" on line 21 is missing
the URL after the colon, and the "Documentation page:" item on line 22 has no
link provided at all. Update these list items by adding the corresponding URLs
from the Sphinx repository (or remove these lines entirely if the links are not
yet available). Ensure each list item follows the markdown link format with a
proper URL reference.
- Around line 1-10: Replace all unresolved placeholder values in the YAML front
matter of the markdown file. Update the author field with the actual contributor
name(s) instead of "Name Surname", replace the sphinx_repository field value
"LINK_TO_GITHUB_REPOSITORY" with the actual GitHub repository URL for this Urban
Flows tutorial, and verify that the tutorial_file field correctly points to the
actual file path or URL in the Sphinx repository (confirm "TUTORIAL.md" exists
and is accessible).
In `@_tutorials/urban-sensors3drec.md`:
- Around line 66-68: The Contributors section contains a placeholder text "Name
Surname" that needs to be replaced with actual contributor name(s). Locate the
Contributors section in the markdown file and replace the placeholder "Name
Surname" with the real name or names of the people who contributed to this
tutorial. If there are multiple contributors, list them as separate bullet
points under the dash.
- Around line 1-8: The author field in the front matter contains a placeholder
"Name Surname" that needs to be replaced with the actual contributor's name(s).
Update the author field to contain the real name of the person who created or
maintains this tutorial content instead of the generic placeholder.
In
`@assets/img/urban_flows/src/functionObjects/fields/firstCellHeight/firstCellHeight.C`:
- Around line 72-77: In the volScalarField::New initialization for
firstCellHeight, replace the dimension argument from dimless to dimLength (or
the appropriate length dimension constant used in this codebase) in the
dimensionedScalar call, since firstCellHeight represents a wall-normal distance
and requires length dimensions rather than dimensionless units.
- Around line 163-165: The write() method unconditionally calls
lookupObject<volScalarField>(type()) on the mesh_ object, which will abort at
runtime if the field hasn't been stored yet by execute(). Guard this lookup by
first checking if the field exists in the mesh using findObject instead of
lookupObject, and handle the case where the field is not found (such as
returning early from the write() method or skipping the write operation if the
field doesn't exist yet).
In
`@assets/img/urban_flows/src/functionObjects/fields/firstCellHeight/firstCellHeight.H`:
- Around line 33-37: The usage example for the firstCellHeight function object
shows an incorrect library name. In the libs property within the
firstCellHeight1 configuration block, change the library name from
libfieldFunctionObjects.so to libUserfieldFunctionObjects to match the actual
compiled library name. This ensures users copying this example will load the
correct library instead of a non-existent one.
In
`@assets/img/urban_flows/src/functionObjects/fields/lnInclude/firstCellHeight.C`:
- Around line 65-68: The calcZfirst function has an unused turbModel parameter
of type momentumTransportModel that creates an unnecessary hard dependency.
Remove the turbModel parameter from the calcZfirst function signature since the
function does not use it, and then update all call sites (primarily in the
execute method around lines 131-149) to remove the turbModel argument when
calling calcZfirst. This will eliminate the avoidable hard failure path for
mesh-distance computation when momentumTransportModel is absent.
- Around line 65-77: In the calcZfirst function, the dimensionedScalar
initialization is using dimless as the dimension, but since the actual values
being assigned later come from nearWallDist(mesh_).y() which represents a
distance, this creates a dimensional mismatch. Change the dimension parameter in
the dimensionedScalar call from dimless to dimLength to correctly reflect that
firstCellHeight represents a physical distance, ensuring dimensional consistency
throughout the code.
In
`@assets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/firstCellHeight/firstCellHeight.C.dep`:
- Around line 1-1084: The file firstCellHeight.C.dep is a generated build
artifact from the compilation process and should not be committed to version
control. Remove this file from git tracking by using git rm, then add a pattern
to the .gitignore file to exclude all .dep files (or more specifically the
entire build artifact directory structure) from future commits. This prevents
merge conflicts and stale dependencies while allowing the build system to
regenerate the file as needed during compilation.
In `@assets/img/urban_flows/src/functionObjects/fields/Make/options`:
- Around line 26-30: The LIB_LIBS variable contains a duplicate entry for the
linker flag -lsurfMesh appearing on both line 26 and line 30. Remove one of the
two -lsurfMesh entries to eliminate the redundancy and avoid passing the same
library flag twice to the linker, keeping only a single instance of -lsurfMesh
in the LIB_LIBS list.
In
`@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C`:
- Around line 149-153: The parameters `Prt_` and `Pr` are used as denominators
in division operations (at the lines referencing Pr/Prt_ and 1/Pr) but lack
validation when read from the dictionary, allowing zero or negative values that
produce Inf/NaN in calculations. Add validation checks in the constructor after
`Prt_` is read via dict.lookup and before these parameters are used in any
division operations to ensure both `Prt_` and `Pr` are strictly positive,
raising an appropriate error if either value is less than or equal to zero.
In
`@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.C`:
- Around line 549-555: Remove the commented-out dead code from the write method
of epsilonz0WallFunctionFvPatchScalarField. Delete the line containing the
commented-out call to writeLocalEntries(os) since the z0 output is already being
handled directly by the writeEntry call for "z0" parameter, making the commented
code unnecessary.
In
`@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.H`:
- Around line 91-92: The member variable declaration z0_ and comments on lines
91, 94, 116, and 256 use tab characters for indentation while the rest of the
file consistently uses spaces. Replace all tab characters with spaces on these
four lines to maintain consistent indentation formatting throughout the header
file, ensuring the indentation matches the style used in the rest of the file.
In
`@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkz0WallFunction/nutkz0WallFunctionFvPatchScalarField.C`:
- Around line 72-79: The code divides by z0_[facei] on line 72 when calculating
Edash, but z0_ can default to zero causing invalid numerics, and the nutw[facei]
assignment on line 78 can produce negative values which are physically invalid.
Add a guard to check that z0_[facei] is greater than a small positive threshold
before using it in the Edash calculation (you can use a similar approach to the
max() function already applied to Edash), and clamp the computed nutw[facei]
value to ensure it remains non-negative by using max(nutw[facei], 0) after the
assignment. Apply these same fixes to the similar code patterns that appear
elsewhere in the file as indicated in the comment.
In
`@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkRoughWallFunctionFvPatchScalarField.C`:
- Around line 148-158: In the nutkRoughWallFunctionFvPatchScalarField
constructor, the Ks_ and Cs_ fields are initialized from the dictionary without
validating their values. Add bounds checking immediately after the
initialization of Ks_ and Cs_ to ensure they contain valid positive values
within acceptable ranges. If invalid values are detected, log an appropriate
warning or error and potentially set them to safe default values to prevent NaN
propagation through the E() and nut() function calls.
In
`@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkz0WallFunctionFvPatchScalarField.C`:
- Around line 72-73: The Edash calculation at line 72 in
nutkz0WallFunctionFvPatchScalarField.C has a divide-by-zero vulnerability
because z0_ can default to 0.0 and is not validated when read from the
dictionary. Guard the division by wrapping z0_[facei] in a max() function with
SMALL to ensure a minimum threshold value, preventing division by zero in the
Edash computation. Additionally, add validation in the dictionary constructor
(around line 119) to check that z0_ values are positive and non-zero, rejecting
or warning on invalid inputs before they are stored.
- Around line 77-79: The turbulent viscosity computation for nutw[facei] can
produce negative values due to the logarithmic term in the formula, which is
unphysical and can corrupt solver behavior. Add a max() clamping function around
the entire right-hand side expression to ensure the computed value is never
negative, following the same pattern used in the analogous nutkRoughWallFunction
implementation that handles the identical formula structure. Wrap the expression
`nuw[facei]*(yPlus*kappa_/log(max(Edash, 1+1e-4)) - 1)` with max(..., 0) to
prevent negative turbulent viscosity values.
In
`@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutWallFunctionFvPatchScalarField.H`:
- Around line 1-219: The nutWallFunctionFvPatchScalarField.H file in the
lnInclude directory is a full file copy instead of a symbolic link, which
violates OpenFOAM conventions and creates maintenance burden. Remove the
existing file copy from the lnInclude directory and replace it with a symbolic
link pointing to the original nutWallFunctionFvPatchScalarField.H header file in
the parent directory structure. This ensures the lnInclude directory follows
OpenFOAM standards of containing only symlinks to keep headers synchronized
without duplication.
In
`@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/files`:
- Around line 4-11: The file Make/files manifest is missing an entry for the new
nutkRoughWallFunctionFvPatchScalarField.C implementation file that was added in
this PR. Add a new line to the manifest under the nutWallFunctions section that
references the nutkRoughWallFunctionFvPatchScalarField.C file, following the
same pattern as the existing nutkz0WallFunction entry. This ensures the
rough-wall implementation file is linked into the libUsermomentumTransportModels
library during compilation.
In
`@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/variables`:
- Around line 1-5: Remove this file from version control as it is a
toolchain-generated build artifact specific to the linux64GccDPInt32Opt compiler
configuration. Files located in platform-specific output trees like
linux64GccDPInt32Opt should not be committed to the repository. Instead, keep
only the canonical Make/files and Make/options source files in version control,
and allow the build system to generate these linux64* artifacts automatically at
build time. This prevents stale build metadata and unnecessary merge conflicts
across different build environments.
In `@beautiful-jekyll-theme.gemspec`:
- Line 24: The kramdown runtime dependency specification uses `~> 2.3.0` which
constrains to only patch version 2.3.0, preventing security and patch updates
like 2.3.1 or 2.3.2. Change the version constraint from `~> 2.3.0` to `~> 2.3`
in the spec.add_runtime_dependency line for kramdown to allow any patch version
within the 2.3 series while maintaining minor version stability.
- Line 5: The spec.version in the beautiful-jekyll-theme.gemspec file has been
downgraded from 6.0.1 to 5.0.0, which violates semantic versioning and breaks
downstream consumers. Update the version to either 6.0.2 (for a patch release
containing bug fixes) or a higher version number (for a minor or major release).
If this downgrade is intentional because you are reverting a broken release, add
a clear comment in the gemspec explaining the reason for the version change.
In `@software/notebooks/index.md`:
- Line 7: The phrase "a variety of fields" in the welcome sentence is wordy and
can be made more concise. Replace "a variety of fields" with a shorter
alternative such as "many fields" or "diverse topics" to improve the readability
and conciseness of the introductory text in the Notebooks gallery welcome
message.
- Around line 10-22: The notebook file 2026-AcceleratingCFD.md is missing
required front-matter fields that the notebook template expects. Add the missing
front-matter fields title, topic, and tldr to the notebook file's front-matter
section so that the template can properly access and render nb.title, nb.topic,
and nb.tldr when iterating through all_notebooks and generating the card output.
In `@software/resources/index.md`:
- Around line 9-25: The Jekyll template in index.md expects resources to contain
specific front-matter fields (title, application, resource_type, tldr, and url),
but the urban-datasets.md resource file in the _resources collection is
currently empty and missing these required fields. Add complete front-matter to
the urban-datasets.md file including all five required fields (title,
application, resource_type, tldr, and url) so the template can properly render
the resource card, or remove the empty file from the collection until it is
ready with proper content.
In `@software/tutorial.md`:
- Around line 9-19: Replace the external GitHub raw URLs for both the embedded
image and video source with relative paths pointing to local assets within the
repository. Update the image markdown link to reference the local file path
(e.g., assets/img/Tutorial/scheme_app.png) instead of the full GitHub URL, and
similarly update the video source src attribute to use a relative path to the
local asset (e.g., assets/vid/InstallationGuide.mp4) instead of the GitHub blob
URL, removing the ?raw=true parameter from both as it is not needed for local
files.
- Line 7: In the tutorial.md file, locate the sentence in the ModelFLOWs-app
description that contains the phrase "highy recommend" and correct the spelling
error by changing "highy" to "highly" to properly convey the recommendation
about downloading the web-browser version for unexperienced users.
In `@software/tutorials/index.md`:
- Around line 25-41: The template files template-short-tutorial.md and
template-sphinx-tutorial.md are being published as blank cards because they lack
the required front-matter fields (title, application, category, and tldr)
expected by the tutorial template loop. Either add the missing front-matter
fields to both template files with appropriate placeholder or example values, or
add these template files to the exclude list in _config.yml to prevent them from
being included in the tutorials collection output.
In `@software/videos/index.md`:
- Around line 13-25: Add conditional guards and accessibility improvements to
the video card rendering. Wrap the "Open Video" button (the anchor element with
class "btn btn-primary d-block") in a conditional check for video.url to prevent
broken buttons when the URL is missing. Add a title or aria-label attribute to
the button that includes the video title (video.title) to improve screen reader
accessibility. Additionally, add a conditional block after the closing {% endfor
%} loop to display an empty-state message when site.videos is empty or not
defined, providing user feedback instead of showing only the intro text with no
video cards.
---
Outside diff comments:
In `@_databases/2026-phonocardiograms.md`:
- Around line 1-12: The filename `2026-phonocardiograms.md` does not match the
content which describes aerobiological data about pollen and pollutants in
Madrid (referenced in the title and TLDR fields). Rename the file to
`2026-madrid-aerobiological.md` to align with the actual content about
environmental sensor data, or alternatively update the front-matter title and
tldr fields to accurately reflect cardiac phonocardiogram data if that is the
intended subject. Additionally, the Database Overview section contains
incomplete placeholder text ("...") and a generic dataset link placeholder that
must be replaced with actual content describing the dataset and a valid link to
the data source before merging.
In `@_databases/2026-urban-aerobiological.md`:
- Around line 1-12: The file contains duplicate content identical to the
phonocardiograms database file, with both having the same frontmatter title and
incomplete placeholder text. Determine if these should represent two different
datasets or be consolidated into one. If they should be different, replace the
placeholder content in this aerobiological file with the correct
dataset-specific description, actual dataset overview details, and a valid link
to the actual dataset resource (removing the "[Link to Zenodo/Kaggle/Dataset]"
placeholder). Ensure the title and content clearly distinguish this
aerobiological dataset from the phonocardiograms dataset to avoid routing
conflicts.
In `@_notebooks/2026-AcceleratingCFD.md`:
- Around line 1-2: The file 2026-AcceleratingCFD.md is missing YAML frontmatter
which is required by Jekyll for notebook processing. Add a YAML frontmatter
block at the very beginning of the file (before the existing markdown content)
that includes the required fields topic and tldr, using the format and structure
shown in the template file _notebooks/9999-template-notebook.md as a reference.
The frontmatter should be wrapped in triple dashes (---) on both the opening and
closing lines to ensure Jekyll recognizes and processes this file as a notebook
that will appear in the notebook collection listing.
In `@_videos/urban-city4cfd.md`:
- Around line 1-2: The file _videos/urban-city4cfd.md is currently empty and
lacks the required YAML front matter needed for Jekyll to process it as a valid
collection item. Add YAML front matter at the very beginning of the file
enclosed by triple dashes (---) that includes the following required fields:
layout set to "page", title with a descriptive name like "City4CFD Urban
Modeling", application field, category field, tldr field for the video
description, and author field with the creator's name. After the closing triple
dashes, add a placeholder section with a heading and note about video content or
embedding instructions to follow.
In
`@assets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/options`:
- Around line 1-60: Remove the generated build artifact directory
Make/linux64GccDPInt32Opt/ and all its contents from version control, as the
file contains preprocessed compiler output (indicated by the # 1 preprocessor
directives) rather than maintained source code. Additionally, add an appropriate
pattern to the project's .gitignore file to prevent future build-specific
platform/toolchain directories (such as Make/*/configurations) from being
committed, ensuring the repository maintains only source configuration and not
generated host/toolchain-specific artifacts.
In
`@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/options`:
- Around line 1-61: The linux64GccDPInt32Opt directory contains generated
preprocessor output that should not be version controlled. Remove the entire
linux64GccDPInt32Opt directory from the repository by using git rm --cached or
git rm -r to stop tracking these architecture and compiler-specific build
artifacts. Add an entry for Make/linux64GccDPInt32Opt/ to the .gitignore file to
ensure these generated files are not accidentally committed in the future. Keep
only the canonical Make/options configuration file in version control as the
source of truth.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 631028dd-0c57-44be-904b-d47840d98a39
⛔ Files ignored due to path filters (140)
assets/datasets/2024_Tagliaferroetal_Databases.zipis excluded by!**/*.zipassets/img/2025_01Jan_30_Bell_DiagnosisOverview.jpgis excluded by!**/*.jpgassets/img/2025_01Jan_30_Bell_PrognosisOverview.jpgis excluded by!**/*.jpgassets/img/2025_01Jan_30_Jeanney_DA.pngis excluded by!**/*.pngassets/img/2025_01_30_AbadiaHeredia_ARmodels_POD_DL.pngis excluded by!**/*.pngassets/img/2025_01_30_AbadiaHeredia_ARmodels_Res_AE.pngis excluded by!**/*.pngassets/img/2025_01_30_AbadiaHeredia_ARmodels_VAE.pngis excluded by!**/*.pngassets/img/2025_01_30_AbadiaHeredia_POD_DL_Orig.pngis excluded by!**/*.pngassets/img/2025_01_30_Barragan_multipar.pngis excluded by!**/*.pngassets/img/2025_01_30_Barragan_superresolution.pngis excluded by!**/*.pngassets/img/2025_01_30_pillai_lchodmd(lchosvd).pngis excluded by!**/*.pngassets/img/2025_01_30_pillai_lchodmd.pngis excluded by!**/*.pngassets/img/2025_01_30_pillai_lcsvd-da.pngis excluded by!**/*.pngassets/img/2025_01_30_pillai_stkd.pngis excluded by!**/*.pngassets/img/2025_01_30_sengupta_Temporalforecasting.PNGis excluded by!**/*.pngassets/img/2025_12Dec_Belletal_ToolOverview.pngis excluded by!**/*.pngassets/img/2025_15_12_Sengupta_Calibration_Methodology.pngis excluded by!**/*.pngassets/img/2026-workshop-li-urban-1.jpgis excluded by!**/*.jpgassets/img/2026-workshop-li-urban-2.pngis excluded by!**/*.pngassets/img/2026-workshop-li-urban-3.pngis excluded by!**/*.pngassets/img/2026-workshop-li-urban-4.pngis excluded by!**/*.pngassets/img/2026-workshop-li-urban-5.pngis excluded by!**/*.pngassets/img/2026_04Apr_Belletat_PODAEsOverview.pngis excluded by!**/*.pngassets/img/Adaptive_framework.pngis excluded by!**/*.pngassets/img/DLR_burner_Geometry.pngis excluded by!**/*.pngassets/img/DLR_burner_Validation.pngis excluded by!**/*.pngassets/img/Databases/Concentricjets.pngis excluded by!**/*.pngassets/img/Databases/Cyl2D_2cyl.pngis excluded by!**/*.pngassets/img/Databases/FDAnozzle.pngis excluded by!**/*.pngassets/img/Databases/LV.pngis excluded by!**/*.pngassets/img/Databases/channel.pngis excluded by!**/*.pngassets/img/Databases/channel_cav.pngis excluded by!**/*.pngassets/img/Databases/channel_rib.pngis excluded by!**/*.pngassets/img/Databases/cyl2D.pngis excluded by!**/*.pngassets/img/Databases/cyl3Dlong.pngis excluded by!**/*.pngassets/img/Databases/cyl3Dshort.pngis excluded by!**/*.pngassets/img/Gappy.pngis excluded by!**/*.pngassets/img/HODMDcalibration.pngis excluded by!**/*.pngassets/img/JHC_Geometry_mesh.pngis excluded by!**/*.pngassets/img/JHC_LES-results.pngis excluded by!**/*.pngassets/img/JHC_Prediction-curves.pngis excluded by!**/*.pngassets/img/JHC_Prediction.pngis excluded by!**/*.pngassets/img/JHC_burner_T_CH4_CO2.pngis excluded by!**/*.pngassets/img/JHC_burner_geometry.jpgis excluded by!**/*.jpgassets/img/JHC_burner_geometry.pngis excluded by!**/*.pngassets/img/JHC_burner_mesh.jpgis excluded by!**/*.jpgassets/img/JHC_burner_mesh.pngis excluded by!**/*.pngassets/img/JHC_burner_prediction_T_plane1.pngis excluded by!**/*.pngassets/img/JHC_burner_prediction_T_plane2.pngis excluded by!**/*.pngassets/img/LC-SVD-DLinear.jpgis excluded by!**/*.jpgassets/img/LC-SVD.jpgis excluded by!**/*.jpgassets/img/MDControl.pngis excluded by!**/*.pngassets/img/ModelFloes_Cardiac_IMAGE00.pngis excluded by!**/*.pngassets/img/ModelFloes_Cardiac_IMAGE06.pngis excluded by!**/*.pngassets/img/ModelFlows_Cardiac_IMAGE01.jpgis excluded by!**/*.jpgassets/img/ModelFlows_Cardiac_IMAGE03.jpgis excluded by!**/*.jpgassets/img/ModelFlows_Cardiac_IMAGE05.jpgis excluded by!**/*.jpgassets/img/ModelFlows_Cardiac_page-IMAGE02.jpgis excluded by!**/*.jpgassets/img/ModelFlowsapp_scheme.pngis excluded by!**/*.pngassets/img/Notebooks/scheme_notebooks.pngis excluded by!**/*.pngassets/img/Slide_garcia_DBgeneration.jpgis excluded by!**/*.jpgassets/img/SuperTool.pngis excluded by!**/*.pngassets/img/Tutorial/scheme_app.pngis excluded by!**/*.pngassets/img/Vedula_vorticity.pngis excluded by!**/*.pngassets/img/Workshops_Events/ModelFLOWs_WS25_groupPicture.jpegis excluded by!**/*.jpegassets/img/Zheng_vorticity.pngis excluded by!**/*.pngassets/img/adaptive_methodology.pngis excluded by!**/*.pngassets/img/geometry_ideal.pngis excluded by!**/*.pngassets/img/hello_world.jpegis excluded by!**/*.jpegassets/img/hosvd.pngis excluded by!**/*.pngassets/img/install-steps.gifis excluded by!**/*.gifassets/img/logos/github.svgis excluded by!**/*.svgassets/img/logos/linkedin.pngis excluded by!**/*.pngassets/img/logos/scholar.svgis excluded by!**/*.svgassets/img/modelflows.jpegis excluded by!**/*.jpegassets/img/modelflows.pngis excluded by!**/*.pngassets/img/modelflowsappscheme.pngis excluded by!**/*.pngassets/img/ra.pngis excluded by!**/*.pngassets/img/re1_lcsvd-da_lam.pngis excluded by!**/*.pngassets/img/re2_lcsvd-da_turb.pngis excluded by!**/*.pngassets/img/re3_lchodmd_lam.pngis excluded by!**/*.pngassets/img/re3_lchodmd_turb.pngis excluded by!**/*.pngassets/img/team/Xiangrui_Zou.jpgis excluded by!**/*.jpgassets/img/team/Zhuoqun_Zhao.jpgis excluded by!**/*.jpgassets/img/team/alberto_rodriguez.jpgis excluded by!**/*.jpgassets/img/team/alvaro_manzano.jpgis excluded by!**/*.jpgassets/img/team/alvaro_rio.jpgis excluded by!**/*.jpgassets/img/team/ander_sanchez.jpgis excluded by!**/*.jpgassets/img/team/andres_bell.jpgis excluded by!**/*.jpgassets/img/team/angel_escalante.jpgis excluded by!**/*.jpgassets/img/team/arindam_sengupta.pngis excluded by!**/*.pngassets/img/team/carlos_sainz.jpgis excluded by!**/*.jpgassets/img/team/christian_amor.jpgis excluded by!**/*.jpgassets/img/team/franciscoJ_Garcia_Soto.jpgis excluded by!**/*.jpgassets/img/team/francisco_giral.pngis excluded by!**/*.pngassets/img/team/guillermo_barragan.jpgis excluded by!**/*.jpgassets/img/team/han_chen.jpgis excluded by!**/*.jpgassets/img/team/issaco.jpegis excluded by!**/*.jpegassets/img/team/iñaki_gutierrez.jpgis excluded by!**/*.jpgassets/img/team/jiannan_li.jpgis excluded by!**/*.jpgassets/img/team/miguel_rios.jpgis excluded by!**/*.jpgassets/img/team/mikel_navarro.jpgis excluded by!**/*.jpgassets/img/team/pablo_lopez_salazar.jpgis excluded by!**/*.jpgassets/img/team/paul_jeanney.jpgis excluded by!**/*.jpgassets/img/team/soledad_leclainche.pngis excluded by!**/*.pngassets/img/team/wentai_deng.jpgis excluded by!**/*.jpgassets/img/tutorial-aij/1.pngis excluded by!**/*.pngassets/img/tutorial-aij/2.pngis excluded by!**/*.pngassets/img/tutorial-aij/3.pngis excluded by!**/*.pngassets/img/tutorial-aij/4.pngis excluded by!**/*.pngassets/img/tutorial-aij/5.pngis excluded by!**/*.pngassets/img/urban-flows/angle_253_4x4_obs2177.pngis excluded by!**/*.pngassets/img/urban-flows/city_frame.pngis excluded by!**/*.pngassets/img/urban-flows/diffusion_scheme.pngis excluded by!**/*.pngassets/img/urban-flows/generative_data_assimilation.pngis excluded by!**/*.pngassets/img/urban-flows/gensynth_train_tes.pngis excluded by!**/*.pngassets/img/urban-flows/graph_structure_scheme.pngis excluded by!**/*.pngassets/img/urban-flows/pdf_comparison_speed_angle171_z35.pngis excluded by!**/*.pngassets/img/urban-flows/pdf_comparison_speed_angle31_z40.pngis excluded by!**/*.pngassets/img/urban-flows/slice_example1.pngis excluded by!**/*.pngassets/img/urban-flows/zoom_z35_angle46_Ux.pngis excluded by!**/*.pngassets/img/urban-flows/zoom_z35_angle46_Uy.pngis excluded by!**/*.pngassets/img/urban_flows/Presentation1_01.pngis excluded by!**/*.pngassets/img/urban_flows/animation.mp4is excluded by!**/*.mp4assets/img/urban_flows/boundaries.pngis excluded by!**/*.pngassets/img/urban_flows/domain1.pngis excluded by!**/*.pngassets/img/urban_flows/ezgif.com-animated-gif-maker.gifis excluded by!**/*.gifassets/img/urban_flows/geo_scheme.pngis excluded by!**/*.pngassets/img/urban_flows/mesh_med.pngis excluded by!**/*.pngassets/img/urban_flows/plot_CO_18.pngis excluded by!**/*.pngassets/img/urban_flows/plot_CO_19.pngis excluded by!**/*.pngassets/img/urban_flows/plot_CO_20.pngis excluded by!**/*.pngassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.ois excluded by!**/*.oassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkz0WallFunction/nutkz0WallFunctionFvPatchScalarField.ois excluded by!**/*.oassets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/firstCellHeight/firstCellHeight.ois excluded by!**/*.oassets/img/urban_flows/streamlines_sole3.pngis excluded by!**/*.pngassets/img/urban_flows/tmp.pngis excluded by!**/*.pngassets/vid/InstallationGuide.mp4is excluded by!**/*.mp4assets/vid/JHC_burner_animation_T_plane1.mp4is excluded by!**/*.mp4assets/vid/JHC_burner_animation_T_plane2.mp4is excluded by!**/*.mp4
📒 Files selected for processing (100)
.bundle/config.gitignoreCHANGELOG.mdGemfileLICENSEREADME.md_applications/2026-cardiac-pathology.md_applications/2026-combustion.md_applications/2026-combustion_tutorial.md_applications/2026-urban-flows.md_applications/9999-template-application.md_config.yml_databases/2026-EchoNet-Dynamic.md_databases/2026-historical-databases.md_databases/2026-phonocardiograms.md_databases/2026-urban-aerobiological.md_notebooks/2026-AcceleratingCFD.md_notebooks/2026-deeplearning.md_notebooks/2026-modaldecomposition.md_notebooks/2026-others.md_notebooks/9998-template-notebook-2.md_notebooks/9999-template-notebook.md_research/ai-models/adaptive-prediction/2026-pod-dl-surrogate-model.md_research/ai-models/ai-urban-flows/2026-modeling-complex-urban-flows-gen-ai.md_research/ai-models/air-pollution/2026-gsvd-aerobiological-imputation.md_research/ai-models/cardiac-pathology/2026-pattern-identification-cvds.md_research/ai-models/templates/9999-template-ai-research.md_research/cfd-simulations/combustion/2026-les-hybrid-rom.md_research/cfd-simulations/templates/9998-template-cfd-research.md_research/cfd-simulations/urban-flows/2026-urban-air-quality-cfd-vallecas.md_resources/urban-datasets.md_tutorials/template-short-tutorial.md_tutorials/template-sphinx-tutorial.md_tutorials/urban-cfd.md_tutorials/urban-sensors3drec.md_videos/urban-city4cfd.mdabout.mdassets/css/beautifuljekyll.cssassets/img/tutorial-aij/.gitkeepassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/filesassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.C.depassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkz0WallFunction/nutkz0WallFunctionFvPatchScalarField.C.depassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/optionsassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/sourceFilesassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/variablesassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/optionsassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/save.optionsassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/Make/filesassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/Make/optionsassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.Cassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.Hassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.Cassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.Hassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.Cassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.Hassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.Cassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.Hassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkz0WallFunction/nutkz0WallFunctionFvPatchScalarField.Cassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkz0WallFunction/nutkz0WallFunctionFvPatchScalarField.Hassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/alphatJayatillekeWallFunctionFvPatchScalarField.Cassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/alphatJayatillekeWallFunctionFvPatchScalarField.Hassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/epsilonz0WallFunctionFvPatchScalarField.Cassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/epsilonz0WallFunctionFvPatchScalarField.Hassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutWallFunctionFvPatchScalarField.Cassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutWallFunctionFvPatchScalarField.Hassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkRoughWallFunctionFvPatchScalarField.Cassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkRoughWallFunctionFvPatchScalarField.Hassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkz0WallFunctionFvPatchScalarField.Cassets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkz0WallFunctionFvPatchScalarField.Hassets/img/urban_flows/src/functionObjects/fields/Make/filesassets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/firstCellHeight/firstCellHeight.C.depassets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/optionsassets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/sourceFilesassets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/variablesassets/img/urban_flows/src/functionObjects/fields/Make/optionsassets/img/urban_flows/src/functionObjects/fields/firstCellHeight/firstCellHeight.Cassets/img/urban_flows/src/functionObjects/fields/firstCellHeight/firstCellHeight.Hassets/img/urban_flows/src/functionObjects/fields/lnInclude/firstCellHeight.Cassets/img/urban_flows/src/functionObjects/fields/lnInclude/firstCellHeight.Hbeautiful-jekyll-theme.gemspecfeed.xmlindex.mdresearch/Air pollution.mdresearch/adaptive-prediction.mdresearch/ai-urban-flows.mdresearch/air-pollution.mdresearch/cardiac-pathology.mdresearch/combustion.mdresearch/index.mdresearch/urban-flows.mdsoftware/advanced.mdsoftware/applications/index.mdsoftware/databases/index.mdsoftware/downloads.mdsoftware/index.mdsoftware/notebooks/index.mdsoftware/resources/index.mdsoftware/tutorial.mdsoftware/tutorials/index.mdsoftware/videos/index.md
There was a problem hiding this comment.
Caution
Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.
🛑 Comments failed to post (39)
_applications/2026-combustion_tutorial.md (1)
1-5:
⚠️ Potential issue | 🔴 Critical | ⚡ Quick winCRITICAL: Missing Jekyll front matter—file will not be published.
This file is located in the
_applications/collection directory but has no YAML front matter block. Jekyll requires front matter at the start of every collection item file to:
- Process the file as a collection member
- Generate the permalink (e.g.,
/software/applications/2026-combustion_tutorial/)- Include the item in
site.applicationsfor gallery iterationWithout front matter, this file will not be rendered or accessible on the live site, despite its excellent content.
Add the following front matter to the top of the file:
--- layout: page title: "OpenFOAM RANS Simulation of the DLR CH4/H2/N2 Turbulent Diffusion Flame" area: "Combustion and Reactive Flow Modelling" tldr: "Complete workflow for setting up and running a turbulent non-premixed flame simulation in OpenFOAM-v10." ---Adjust
areaandtldrto match your ModelFLOWs taxonomy. Once front matter is added, the file will be accessible at/software/applications/2026-combustion_tutorial/and will appear in the applications gallery.
[critical_issue]📋 Full file header example (add above line 1)
--- layout: page title: "OpenFOAM RANS Simulation of the DLR CH4/H2/N2 Turbulent Diffusion Flame" area: "Combustion and Reactive Flow Modelling" tldr: "Complete workflow for setting up and running a turbulent non-premixed flame simulation in OpenFOAM-v10." ---🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_applications/2026-combustion_tutorial.md` around lines 1 - 5, The file is missing the required Jekyll front matter block at the beginning, which prevents it from being processed as a collection member and rendered on the live site. Add a YAML front matter block (enclosed in triple dashes) at the very top of the file, before the existing markdown heading that starts with "# OpenFOAM RANS Simulation...". Include the layout, title, area, and tldr fields in the front matter to enable Jekyll to generate the correct permalink and include the item in the applications gallery._applications/2026-combustion.md (1)
42-42:
⚠️ Potential issue | 🟠 Major🧩 Analysis chain
🏁 Script executed:
# Check if the file exists and view the content around lines 42-50 if [ -f "_applications/2026-combustion.md" ]; then echo "=== File exists, showing lines 35-55 ===" sed -n '35,55p' "_applications/2026-combustion.md" else echo "File not found" fiRepository: daattali/beautiful-jekyll
Length of output: 882
🏁 Script executed:
# List files in _applications/ to understand the structure echo "=== Files in _applications/ directory ===" ls -la "_applications/" | head -20Repository: daattali/beautiful-jekyll
Length of output: 604
🏁 Script executed:
# Search for similar link patterns in markdown files to see how links are typically handled echo "=== Search for markdown links in _applications/ ===" rg '\[.*\]\(' "_applications/" -A 1 -B 1 | head -50Repository: daattali/beautiful-jekyll
Length of output: 1514
🏁 Script executed:
# Check if Jekyll config exists and look for configuration if [ -f "_config.yml" ]; then echo "=== Jekyll config found ===" cat "_config.yml" fiRepository: daattali/beautiful-jekyll
Length of output: 10881
Fix relative links in Jekyll collection to use absolute URL pattern.
Lines 42 and 50 use relative filesystem links
./2026-combustion_tutorial.md, which will not render correctly in Jekyll's generated site. The applications collection is configured to generate URLs at/software/applications/:slug/, so the correct approach is to use the absolute path:Suggested fix
[Tutorial 1: OpenFOAM RANS simulation of the DLR CH4/H2/N2 turbulent diffusion flame](/software/applications/2026-combustion_tutorial/)This follows the same pattern used in other files within the codebase (e.g.,
2026-urban-flows.md) and ensures links render correctly after Jekyll builds the site.Also applies to: 50-50
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_applications/2026-combustion.md` at line 42, The relative filesystem links in the 2026-combustion.md file (on lines 42 and 50) using the pattern `./2026-combustion_tutorial.md` will not render correctly after Jekyll builds the site because the applications collection generates URLs at `/software/applications/:slug/`. Change both occurrences of the relative link `./2026-combustion_tutorial.md` to use the absolute URL path `/software/applications/2026-combustion_tutorial/` to match the Jekyll URL structure and align with the pattern used in other files like 2026-urban-flows.md._config.yml (3)
58-58:
⚠️ Potential issue | 🟠 Major🧩 Analysis chain
🏁 Script executed:
# First, let's explore the repository structure ls -la | head -20Repository: daattali/beautiful-jekyll
Length of output: 1234
🏁 Script executed:
# Check the _config.yml file around line 58 head -70 _config.yml | tail -20Repository: daattali/beautiful-jekyll
Length of output: 729
🏁 Script executed:
# Check the _includes/head.html file around lines 143-150 wc -l _includes/head.htmlRepository: daattali/beautiful-jekyll
Length of output: 93
🏁 Script executed:
# Read the head.html file to see the relevant section sed -n '140,155p' _includes/head.htmlRepository: daattali/beautiful-jekyll
Length of output: 712
🏁 Script executed:
# Get more context around the twitter meta tags sed -n '135,160p' _includes/head.htmlRepository: daattali/beautiful-jekyll
Length of output: 1106
Uncomment and populate Twitter handle, or conditionally check for its existence in the template.
Line 58 comments out the
social-network-links, but the head.html template (lines 149–150 in _includes/head.html) unconditionally renderssite.social-network-links.twitterin meta tags. This produces an empty@in Twitter card meta tags (<meta name="twitter:site" content="@">), breaking social media link previews.✏️ Suggested actions
Option 1: Provide a Twitter handle:
-# twitter: daattali + twitter: modelflowsOption 2 (if not using Twitter): Update the template to check for the key before rendering (requires template change in _includes/head.html).
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.twitter: modelflows🧰 Tools
🪛 YAMLlint (1.37.1)
[warning] 58-58: comment not indented like content
(comments-indentation)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_config.yml` at line 58, The twitter configuration key is commented out in the social-network-links section of _config.yml, but the head.html template unconditionally renders the twitter site meta tag using site.social-network-links.twitter, resulting in an empty @ symbol in the Twitter card meta tag. Either uncomment the twitter key in _config.yml and provide an actual Twitter handle value, or update the template rendering logic in head.html to conditionally check if site.social-network-links.twitter exists and has a value before rendering the meta tag output to prevent the broken empty meta tag.
253-253:
⚠️ Potential issue | 🟠 Major🧩 Analysis chain
🏁 Script executed:
# First, find and check the _config.yml file git ls-files | grep -i "config.yml"Repository: daattali/beautiful-jekyll
Length of output: 81
🏁 Script executed:
# Read the relevant section of _config.yml around line 253 if [ -f "_config.yml" ]; then wc -l _config.yml sed -n '250,256p' _config.yml fiRepository: daattali/beautiful-jekyll
Length of output: 315
🌐 Web query:
IANA timezone "Spain" valid identifier💡 Result:
The IANA Time Zone Database (tzdb) defines three valid time zone identifiers for Spain, each corresponding to different geographic regions [1][2][3]: 1. Europe/Madrid: Used for the Spanish mainland and the Balearic Islands [1][3]. 2. Atlantic/Canary: Used for the Canary Islands [1][3]. 3. Africa/Ceuta: Used for the autonomous cities of Ceuta and Melilla, as well as the Spanish plazas de soberanía [4][3]. These identifiers are documented in the official IANA tzdb files, such as zone.tab and zone1970.tab, which associate these zones with the country code ES [1][4][5].
Citations:
- 1: https://data.iana.org/time-zones/tzdb-2025b/zone.tab
- 2: https://whatisthetime.now/country/spain/
- 3: https://en.wikipedia.org/wiki/Time_in_Spain
- 4: https://data.iana.org/time-zones/tzdb-2024b/zone1970.tab
- 5: https://data.iana.org/time-zones/tzdb-2024b/zone.tab
🌐 Web query:
Europe/Madrid IANA timezone valid identifier💡 Result:
Yes, "Europe/Madrid" is a valid IANA timezone identifier. It follows the standard IANA format of "Continent/City" and represents the timezone for Madrid, Spain. This identifier is used in timezone databases and applications to specify the Europe/Madrid timezone, which observes Central European Time (CET) in winter and Central European Summer Time (CEST) in summer.
🌐 Web query:
Jekyll site.time timezone invalid behavior error handling💡 Result:
Errors related to Jekyll time, timezone, or invalid date behaviors generally stem from three common areas: configuration files, accidental processing of template/temporary directories, or incorrect YAML front-matter formatting [1][2][3]. Configuration of Timezones Jekyll allows you to set a site-wide timezone in your _config.yml using the timezone key [4][5]. This setting ensures consistency in generated timestamps regardless of the environment's local time [6]. If you encounter timezone-related inconsistencies or build errors, ensure you are using a valid IANA timezone identifier (e.g., America/New_York) [7][6][5]. On Windows, Jekyll utilizes the tzinfo-data gem to manage these conversions, and using invalid or non-IANA formats will cause configuration errors [7][8]. Common "Invalid Date" Errors The error "Invalid date" frequently occurs when Jekyll attempts to parse files that are not intended for the site's content, such as those in template or dependency directories (e.g., vendor, node_modules, or tmp) [1][2][9][10]. 1. If the error points to a file within a directory like vendor/bundle or tmp/, Jekyll is likely processing system files that contain dynamic date templates [2][9][10]. 2. Resolution: Add these directories to the exclude list in your _config.yml to prevent Jekyll from attempting to build them [1][10]. exclude: - tmp/ - vendor/ Limitations with site.time You cannot directly set site.time as a value within the defaults section of _config.yml [11]. The _config.yml file is static and does not evaluate Liquid code during the build configuration phase [11]. If you want a page to default to the current time, handle this logic in your templates using the Liquid default filter: {{ page.date | default: site.time }} [11] Troubleshooting Tips If you receive a Liquid Exception related to invalid dates, verify that your front-matter date is formatted correctly (e.g., YYYY-MM-DD HH:MM:SS +/-TTTT) [12][3]. If the error occurs on a page that is not a post, ensure you are not using layout: post, which may trigger date-specific logic expecting a valid page.date attribute [3]. If the error persists, use the --trace flag when building to identify the exact file and line causing the failure [2].
Citations:
- 1: https://jekyllrb.com/docs/troubleshooting/
- 2: jekyll/jekyll#9539
- 3: jekyll/jekyll#2003
- 4: https://jekyllrb.com/docs/configuration/default/
- 5: https://rubydoc.info/gems/jekyll/Jekyll
- 6: jekyll/jekyll#7516
- 7: jekyll/jekyll#5612
- 8: jekyll/jekyll#7551
- 9: jekyll/jekyll#6127
- 10: https://hjerpbakk.com/blog/2020/05/25/your-site-could-not-be-built
- 11: https://stackoverflow.com/questions/78014272/how-to-set-a-default-date-on-a-jekyll-site
- 12: https://jekyllrb.com/docs/variables/
🏁 Script executed:
# Check if there are any error logs or documentation about this # Also, let's verify the exact line number more carefully sed -n '252,254p' _config.yml | cat -nRepository: daattali/beautiful-jekyll
Length of output: 180
Replace "Spain" with a valid IANA timezone identifier.
"Spain"is not a valid IANA timezone identifier. Jekyll requires a valid timezone value in_config.yml, and using invalid identifiers will cause configuration errors. Use"Europe/Madrid"for mainland Spain,"Atlantic/Canary"for the Canary Islands, or"Africa/Ceuta"for Ceuta and Melilla.🕐 Proposed fix
-timezone: "Spain" +timezone: "Europe/Madrid"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.timezone: "Europe/Madrid"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_config.yml` at line 253, The timezone property in the Jekyll configuration is set to an invalid IANA timezone identifier "Spain". Replace this value with a valid IANA timezone identifier appropriate for your location: use "Europe/Madrid" for mainland Spain, "Atlantic/Canary" for the Canary Islands, or "Africa/Ceuta" for Ceuta and Melilla. Update the timezone property in the _config.yml file to use one of these valid identifiers instead.
279-300:
⚠️ Potential issue | 🔴 Critical | ⚡ Quick winRemove duplicate
excludekey in YAML mapping.Line 300 redefines
exclude, which causes the first definition (lines 279–287) to be ignored by the YAML parser. YAML only retains the last value for duplicate keys. This breaks the file exclusion contract and may cause Jekyll to process unwanted files (CHANGELOG.md, README.md, Gemfile, etc.).Merge the two exclude lists into a single definition and remove the duplicate on line 300.
🔧 Proposed fix
# Exclude these files from production site exclude: - CHANGELOG.md - CNAME - Gemfile - Gemfile.lock - LICENSE - README.md - screenshot.png - docs/ plugins: - jekyll-paginate - jekyll-sitemap # Beautiful Jekyll / Dean Attali # 2fc73a3a967e97599c9763d05e564189 ################ # --- Collections --- # ################ -exclude: ['vendor', 'CHANGELOG.md', 'CNAME', 'Gemfile', 'Gemfile.lock', 'LICENSE', 'README.md', 'screenshot.png', 'docs/'] collections:🧰 Tools
🪛 YAMLlint (1.37.1)
[error] 300-300: duplication of key "exclude" in mapping
(key-duplicates)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_config.yml` around lines 279 - 300, The `exclude` key is defined twice in the YAML configuration file, which causes YAML to only keep the last definition (on line 300) while ignoring the first one (lines 279-287). To fix this, merge both exclude lists into a single `exclude` definition that contains all the items from both the original list (CHANGELOG.md, CNAME, Gemfile, Gemfile.lock, LICENSE, README.md, screenshot.png, docs/) and the second list (vendor, CHANGELOG.md, CNAME, Gemfile, Gemfile.lock, LICENSE, README.md, screenshot.png, docs/). Remove the duplicate `exclude` key definition and keep only one consolidated exclude mapping with all unique file and directory patterns._notebooks/2026-deeplearning.md (2)
54-54:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winEmpty download link: Missing URL.
Line 54 has an empty link for "Download the databases":
[*here*](). This will be a broken link for users. Either remove this line or populate it with the correct URL.🔗 Proposed fix
-Download the databases [*here*]() +<!-- Download the databases [*here*]() -->Or replace
()with the actual URL.🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 54-54: No empty links
(MD042, no-empty-links)
[warning] 54-54: Link text should be descriptive
(MD059, descriptive-link-text)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_notebooks/2026-deeplearning.md` at line 54, The markdown link in the line "Download the databases [*here*]()" has empty parentheses which creates a broken link that will not work for users. Either remove this entire line if the download link is not yet available, or replace the empty parentheses with the actual URL to the databases that should be downloaded.
95-95:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix spelling and hyphenation errors.
Multiple user-facing spelling and grammar errors need correction:
- Line 95: "itteratively" → "iteratively"; "Long Short Term Memory" → "Long Short-Term Memory"
- Line 146: "apperance" → "appearance"; "allways" → "always"; "unaccurate" → "inaccurate"
🔤 Proposed fixes
-Predictions are generated autoregressively, where forecasted solutions are fed back as inputs to itteratively predict the next step. While this approach can also be implemented with Singular Value Decomposition (SVD), [HOSVD](https://modelflows.github.io/modelflowsapp/modaldecomposition/#pattern-hosvd) extends the capabilities of SVD by better preserving multi-dimensional structures, leading to improved performance in complex dynamical systems. This framework is implemented using TensorFlow/Keras for 4D and 5D tensors. +Predictions are generated autoregressively, where forecasted solutions are fed back as inputs to iteratively predict the next step. While this approach can also be implemented with Singular Value Decomposition (SVD), [HOSVD](https://modelflows.github.io/modelflowsapp/modaldecomposition/#pattern-hosvd) extends the capabilities of SVD by better preserving multi-dimensional structures, leading to improved performance in complex dynamical systems. This framework is implemented using TensorFlow/Keras for 4D and 5D tensors.-The use of fully data-driven models to modelize flow dynamics is a challenging task due to the apperance of distribution shifts within the dynamics. Data-driven models are allways trained on a dataset representing a certain distribution, if the real dynamics to be predicted start to deviate from the training distribution (e.g., due to a change of flow regime, the apperance of a new attractor, etc.), the model would not be able to predict this unseen variation, making the prediction unaccurate. +The use of fully data-driven models to modelize flow dynamics is a challenging task due to the appearance of distribution shifts within the dynamics. Data-driven models are always trained on a dataset representing a certain distribution, if the real dynamics to be predicted start to deviate from the training distribution (e.g., due to a change of flow regime, the appearance of a new attractor, etc.), the model would not be able to predict this unseen variation, making the prediction inaccurate.Also applies to: 146-146
🧰 Tools
🪛 LanguageTool
[uncategorized] ~95-~95: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ecomposition/#pattern-hosvd)) with Long Short Term Memory (LSTM) architecture for temporal...(EN_COMPOUND_ADJECTIVE_INTERNAL)
[grammar] ~95-~95: Ensure spelling is correct
Context: ...ted solutions are fed back as inputs to itteratively predict the next step. While this appr...(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_notebooks/2026-deeplearning.md` at line 95, Correct spelling and hyphenation errors throughout the notebook. In the text describing the hybrid ROM with HOSVD and LSTM, replace "itteratively" with "iteratively" and change "Long Short Term Memory" to "Long Short-Term Memory" with appropriate hyphens. Additionally, on line 146, fix "apperance" to "appearance", "allways" to "always", and "unaccurate" to "inaccurate" to ensure all user-facing text has correct spelling and grammar.Source: Linters/SAST tools
_notebooks/2026-others.md (1)
14-14:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix hyphenation and spelling errors.
Several compound adjectives and one spelling error need correction:
- Line 14: "Spatio Temporal" → "Spatio-Temporal"
- Line 37: "low cost" → "low-cost"
- Line 42: "Spatio Temporal" → "Spatio-Temporal"
- Line 52: "instabilitites" → "instabilities"
🔤 Proposed fixes
-3. [Spatio Temporal Koopman Decomposition (STKD)](https://modelflows.github.io/modelflowsapp/others/#STKD) +3. [Spatio-Temporal Koopman Decomposition (STKD)](https://modelflows.github.io/modelflowsapp/others/#STKD)-[Pillai, P., Hetherington, A., Saavedra, L., Le Clainche, S., A low cost singular value decomposition based data assimilation technique for analysis of heterogeneous combustion data, arXiv:2503.24064, 2025.](https://arxiv.org/abs/2503.24064) +[Pillai, P., Hetherington, A., Saavedra, L., Le Clainche, S., A low-cost singular value decomposition-based data assimilation technique for analysis of heterogeneous combustion data, arXiv:2503.24064, 2025.](https://arxiv.org/abs/2503.24064)-## Spatio Temporal Koopman Decomposition (STKD) <a id="STKD"></a> +## Spatio-Temporal Koopman Decomposition (STKD) <a id="STKD"></a>-Application to identify flow instabilitites: +Application to identify flow instabilities:Also applies to: 37-37, 42-42, 52-52
🧰 Tools
🪛 LanguageTool
[grammar] ~14-~14: Use a hyphen to join words.
Context: ...elflowsapp/others/#lcSVD_DA) 3. [Spatio Temporal Koopman Decomposition (STKD)](h...(QB_NEW_EN_HYPHEN)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_notebooks/2026-others.md` at line 14, Correct hyphenation and spelling errors throughout the markdown file. Add hyphens to the compound adjectives "Spatio Temporal" to make it "Spatio-Temporal" (this appears in at least two locations in the document), change "low cost" to "low-cost" to properly hyphenate the compound modifier, and fix the spelling error "instabilitites" to the correct spelling "instabilities". These corrections ensure proper grammatical formatting of compound adjectives and eliminate the spelling mistake.Source: Linters/SAST tools
_research/ai-models/ai-urban-flows/2026-modeling-complex-urban-flows-gen-ai.md (1)
1-8:
⚠️ Potential issue | 🔴 Critical | ⚡ Quick winFront-matter field
thumbnailwill not render in SEO meta tags—usethumbnail-imginstead.The template at
_includes/head.html:114-115checks forpage.thumbnail-img, but the front-matter here and across all research pages usesthumbnail. This mismatch will cause social/SEO thumbnail metadata to be absent.Suggested fix: Rename all
thumbnail:fields tothumbnail-img:in the front-matter of all research pages (files 1–5).--- layout: post title: "Modeling complex urban flows with generative AI" category: "AI & Data-Driven Models" topic: "AI for Urban Flows" -thumbnail: "/assets/img/urban-flows/diffusion_scheme.png" +thumbnail-img: "/assets/img/urban-flows/diffusion_scheme.png" tldr: "Geometry-aware flow generation and sensor-informed data assimilation for urban wind fields." ---📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.--- layout: post title: "Modeling complex urban flows with generative AI" category: "AI & Data-Driven Models" topic: "AI for Urban Flows" thumbnail-img: "/assets/img/urban-flows/diffusion_scheme.png" tldr: "Geometry-aware flow generation and sensor-informed data assimilation for urban wind fields." ---🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_research/ai-models/ai-urban-flows/2026-modeling-complex-urban-flows-gen-ai.md` around lines 1 - 8, In the front-matter of this file (and all other research pages 1–5), rename the `thumbnail` field to `thumbnail-img` to match the expected key that the template at _includes/head.html checks for (page.thumbnail-img). Replace each instance of `thumbnail:` with `thumbnail-img:` while keeping the value unchanged to ensure SEO meta tags render correctly._tutorials/urban-cfd.md (2)
1-10:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winResolve unresolved template placeholders in front matter.
Lines 8 and 7 contain placeholder values that must be filled before publication:
- Line 8:
sphinx_repository: "LINK_TO_GITHUB_REPOSITORY"— must be replaced with the actual GitHub repository URL.- Line 7:
author: "Name Surname"— must be populated with actual contributor name(s).- Line 9:
tutorial_file: "TUTORIAL.md"— verify this points to an actual file or link in the Sphinx repository.These unresolved placeholders make the tutorial non-functional and prevent readers from accessing the actual Sphinx-based content.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_tutorials/urban-cfd.md` around lines 1 - 10, Replace all unresolved placeholder values in the YAML front matter of the markdown file. Update the author field with the actual contributor name(s) instead of "Name Surname", replace the sphinx_repository field value "LINK_TO_GITHUB_REPOSITORY" with the actual GitHub repository URL for this Urban Flows tutorial, and verify that the tutorial_file field correctly points to the actual file path or URL in the Sphinx repository (confirm "TUTORIAL.md" exists and is accessible).
16-22:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winComplete the Sphinx Tutorial link placeholders.
Lines 21–22 have empty or incomplete link anchors that prevent readers from reaching the tutorial documentation:
- Line 21:
TUTORIAL.md:→ missing the actual link URL- Line 22:
Documentation page:→ no link providedPopulate these with the corresponding URLs from the Sphinx repository or remove them if not yet available.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_tutorials/urban-cfd.md` around lines 16 - 22, The markdown file contains two incomplete link items in the Sphinx Tutorial section. The list item with "TUTORIAL.md:" on line 21 is missing the URL after the colon, and the "Documentation page:" item on line 22 has no link provided at all. Update these list items by adding the corresponding URLs from the Sphinx repository (or remove these lines entirely if the links are not yet available). Ensure each list item follows the markdown link format with a proper URL reference._tutorials/urban-sensors3drec.md (2)
1-8:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winPopulate the author field with actual contributor name(s).
Line 7 contains the placeholder
author: "Name Surname". Replace this with the real contributor name(s) responsible for or maintaining this tutorial content.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_tutorials/urban-sensors3drec.md` around lines 1 - 8, The author field in the front matter contains a placeholder "Name Surname" that needs to be replaced with the actual contributor's name(s). Update the author field to contain the real name of the person who created or maintains this tutorial content instead of the generic placeholder.
66-68:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winPopulate the author field in Contributors section.
Line 68 contains the placeholder
Name Surname. Replace with actual contributor name(s).🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@_tutorials/urban-sensors3drec.md` around lines 66 - 68, The Contributors section contains a placeholder text "Name Surname" that needs to be replaced with actual contributor name(s). Locate the Contributors section in the markdown file and replace the placeholder "Name Surname" with the real name or names of the people who contributed to this tutorial. If there are multiple contributors, list them as separate bullet points under the dash.assets/img/urban_flows/src/functionObjects/fields/firstCellHeight/firstCellHeight.C (2)
72-77:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winUse length dimensions for
firstCellHeight, not dimensionless.Line 76 initializes the field as
dimless, but this quantity represents a wall-normal distance (length). This writes a physically wrong dimensioned field.Proposed fix
- dimensionedScalar(dimless, 0) + dimensionedScalar(dimLength, 0)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/functionObjects/fields/firstCellHeight/firstCellHeight.C` around lines 72 - 77, In the volScalarField::New initialization for firstCellHeight, replace the dimension argument from dimless to dimLength (or the appropriate length dimension constant used in this codebase) in the dimensionedScalar call, since firstCellHeight represents a wall-normal distance and requires length dimensions rather than dimensionless units.
163-165:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winGuard
write()against missing stored field.Line 163 performs
lookupObject<volScalarField>(type())unconditionally. Ifwrite()is triggered beforeexecute()stores the field, this path aborts at runtime.Proposed fix
bool Foam::functionObjects::firstCellHeight::write() { Log << type() << " " << name() << " write:" << nl; + if (!mesh_.foundObject<volScalarField>(type())) + { + if (!execute()) + { + WarningInFunction << "Unable to compute " << type() << " before write()" << nl; + return false; + } + } + writeLocalObjects::write(); logFiles::write();🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/functionObjects/fields/firstCellHeight/firstCellHeight.C` around lines 163 - 165, The write() method unconditionally calls lookupObject<volScalarField>(type()) on the mesh_ object, which will abort at runtime if the field hasn't been stored yet by execute(). Guard this lookup by first checking if the field exists in the mesh using findObject instead of lookupObject, and handle the case where the field is not found (such as returning early from the write() method or skipping the write operation if the field doesn't exist yet).assets/img/urban_flows/src/functionObjects/fields/firstCellHeight/firstCellHeight.H (1)
33-37:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winFix function-object library name in the usage example.
Line 36 documents
libfieldFunctionObjects.so, but this module buildslibUserfieldFunctionObjects(assets/img/urban_flows/src/functionObjects/fields/Make/files, Line 3). Users copying this example will load the wrong library.Proposed fix
- libs ("libfieldFunctionObjects.so"); + libs ("libUserfieldFunctionObjects.so");📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.firstCellHeight1 { type firstCellHeight; libs ("libUserfieldFunctionObjects.so"); ...🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/functionObjects/fields/firstCellHeight/firstCellHeight.H` around lines 33 - 37, The usage example for the firstCellHeight function object shows an incorrect library name. In the libs property within the firstCellHeight1 configuration block, change the library name from libfieldFunctionObjects.so to libUserfieldFunctionObjects to match the actual compiled library name. This ensures users copying this example will load the correct library instead of a non-existent one.assets/img/urban_flows/src/functionObjects/fields/lnInclude/firstCellHeight.C (2)
65-68:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winRemove the unnecessary turbulence-model hard dependency in
execute().
calcZfirstdoes not useturbModel, butexecute()aborts the run ifmomentumTransportModelis absent. This creates an avoidable hard failure path for a mesh-distance computation.Proposed fix
-Foam::tmp<Foam::volScalarField> Foam::functionObjects::firstCellHeight::calcZfirst -( - const momentumTransportModel& turbModel -) +Foam::tmp<Foam::volScalarField> Foam::functionObjects::firstCellHeight::calcZfirst() { @@ bool Foam::functionObjects::firstCellHeight::execute() { - if (mesh_.foundObject<momentumTransportModel>(momentumTransportModel::typeName)) - { - const momentumTransportModel& model = mesh_.lookupObject<momentumTransportModel> - ( - momentumTransportModel::typeName - ); - - word name(type()); - - return store(name, calcZfirst(model)); - } - else - { - FatalErrorInFunction - << "Unable to find turbulence model in the " - << "database" << exit(FatalError); - } - - return true; + word name(type()); + return store(name, calcZfirst()); }Also applies to: 131-149
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/functionObjects/fields/lnInclude/firstCellHeight.C` around lines 65 - 68, The calcZfirst function has an unused turbModel parameter of type momentumTransportModel that creates an unnecessary hard dependency. Remove the turbModel parameter from the calcZfirst function signature since the function does not use it, and then update all call sites (primarily in the execute method around lines 131-149) to remove the turbModel argument when calling calcZfirst. This will eliminate the avoidable hard failure path for mesh-distance computation when momentumTransportModel is absent.
65-77:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winUse length dimensions for
firstCellHeightfield initialization.At Line 76, the field is initialized as
dimless, but values assigned later come fromnearWallDist(mesh_).y()(a distance). This writes incorrect dimensional metadata and can break downstream dimensional checks/reuse.Proposed fix
volScalarField::New ( type(), mesh_, - dimensionedScalar(dimless, 0) + dimensionedScalar(dimLength, 0) )📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.Foam::tmp<Foam::volScalarField> Foam::functionObjects::firstCellHeight::calcZfirst ( const momentumTransportModel& turbModel ) { tmp<volScalarField> tfirstCellHeight ( volScalarField::New ( type(), mesh_, dimensionedScalar(dimLength, 0) )🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/functionObjects/fields/lnInclude/firstCellHeight.C` around lines 65 - 77, In the calcZfirst function, the dimensionedScalar initialization is using dimless as the dimension, but since the actual values being assigned later come from nearWallDist(mesh_).y() which represents a distance, this creates a dimensional mismatch. Change the dimension parameter in the dimensionedScalar call from dimless to dimLength to correctly reflect that firstCellHeight represents a physical distance, ensuring dimensional consistency throughout the code.assets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/firstCellHeight/firstCellHeight.C.dep (1)
1-1084: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick win
Avoid versioning generated
.depbuild artifacts.This file is generated output and toolchain-specific. Keeping it in VCS adds merge noise and stale dependency risk; prefer generating it during build and ignoring it in git.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/firstCellHeight/firstCellHeight.C.dep` around lines 1 - 1084, The file firstCellHeight.C.dep is a generated build artifact from the compilation process and should not be committed to version control. Remove this file from git tracking by using git rm, then add a pattern to the .gitignore file to exclude all .dep files (or more specifically the entire build artifact directory structure) from future commits. This prevents merge conflicts and stale dependencies while allowing the build system to regenerate the file as needed during compilation.assets/img/urban_flows/src/functionObjects/fields/Make/options (1)
26-30:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winDeduplicate repeated linker flag in
LIB_LIBS.Line 26 and Line 30 both add
-lsurfMesh. Keep a single entry to avoid redundant link arguments.Proposed fix
LIB_LIBS = \ @@ -lmeshTools \ -lsurfMesh \ -llagrangian \ -lfileFormats \ - -lsampling \ - -lsurfMesh + -lsampling🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/functionObjects/fields/Make/options` around lines 26 - 30, The LIB_LIBS variable contains a duplicate entry for the linker flag -lsurfMesh appearing on both line 26 and line 30. Remove one of the two -lsurfMesh entries to eliminate the redundancy and avoid passing the same library flag twice to the linker, keeping only a single instance of -lsurfMesh in the LIB_LIBS list.assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C (1)
149-153:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winValidate
PrtandPrbefore using them in denominators.Line 245 (
Pr/Prt_) and Line 255 (1/Pr) can generate Inf/NaN whenPrt <= 0orPr <= 0, causing unstablealphatupdates. The root cause is missing validation when these parameters are read.Proposed fix
alphatJayatillekeWallFunctionFvPatchScalarField:: alphatJayatillekeWallFunctionFvPatchScalarField ( @@ : fixedValueFvPatchScalarField(p, iF, dict), Prt_(readScalar(dict.lookup("Prt"))), // force read to avoid ambiguity @@ { checkType(); + if (Prt_ <= vSmall) + { + FatalErrorInFunction + << "Prt must be > 0. Found Prt=" << Prt_ << nl + << abort(FatalError); + } } @@ const scalar Pr @@ ); + + if (Pr <= vSmall) + { + FatalErrorInFunction + << "transportProperties Pr must be > 0. Found Pr=" << Pr << nl + << abort(FatalError); + }Also applies to: 225-233, 245-255
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C` around lines 149 - 153, The parameters `Prt_` and `Pr` are used as denominators in division operations (at the lines referencing Pr/Prt_ and 1/Pr) but lack validation when read from the dictionary, allowing zero or negative values that produce Inf/NaN in calculations. Add validation checks in the constructor after `Prt_` is read via dict.lookup and before these parameters are used in any division operations to ensure both `Prt_` and `Pr` are strictly positive, raising an appropriate error if either value is less than or equal to zero.assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.C (1)
549-555: 🧹 Nitpick | 🔵 Trivial | 💤 Low value
Remove commented-out code.
Line 552 has a commented-out call to
writeLocalEntries(os). SincewriteEntry("z0", z0_)on line 553 handles the z0 output directly, this dead code can be removed.Proposed fix
void Foam::epsilonz0WallFunctionFvPatchScalarField::write(Ostream& os) const { fvPatchField<scalar>::write(os); -// writeLocalEntries(os); writeEntry(os, "z0", z0_); writeEntry(os, "value", *this); }📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.void Foam::epsilonz0WallFunctionFvPatchScalarField::write(Ostream& os) const { fvPatchField<scalar>::write(os); writeEntry(os, "z0", z0_); writeEntry(os, "value", *this); }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.C` around lines 549 - 555, Remove the commented-out dead code from the write method of epsilonz0WallFunctionFvPatchScalarField. Delete the line containing the commented-out call to writeLocalEntries(os) since the z0 output is already being handled directly by the writeEntry call for "z0" parameter, making the commented code unnecessary.assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.H (1)
91-92: 🧹 Nitpick | 🔵 Trivial | 💤 Low value
Inconsistent indentation with tabs.
Lines 91, 94, 116, and 256 use tab characters for indentation while the rest of the file uses spaces. This creates visual inconsistency depending on editor settings.
Also applies to: 94-95, 116-117, 256-256
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.H` around lines 91 - 92, The member variable declaration z0_ and comments on lines 91, 94, 116, and 256 use tab characters for indentation while the rest of the file consistently uses spaces. Replace all tab characters with spaces on these four lines to maintain consistent indentation formatting throughout the header file, ensuring the indentation matches the style used in the rest of the file.assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkz0WallFunction/nutkz0WallFunctionFvPatchScalarField.C (1)
72-79:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winGuard
z0and clampnutto prevent invalid wall-viscosity values.Line 72 divides by
z0_[facei]while Line 94 defaultsz0_to zero; this can produce invalid numerics. Line 78 can also write negativenut, which is physically invalid and can destabilize runs.Proposed fix
nutkz0WallFunctionFvPatchScalarField::nutkz0WallFunctionFvPatchScalarField ( @@ : nutkWallFunctionFvPatchScalarField(p, iF), - z0_(p.size(), 0.0) + z0_(p.size(), vSmall) {} @@ forAll(nutw, facei) { label celli = patch().faceCells()[facei]; @@ - scalar Edash = (y[facei] + z0_[facei])/z0_[facei]; - - // Modified by CGS on October,2020 - scalar yPlusPrime = uStar*(y[facei] + z0_[facei])/nuw[facei]; + const scalar z0 = max(z0_[facei], vSmall); + const scalar Edash = (y[facei] + z0)/z0; - nutw[facei] = - nuw[facei]*(yPlus*kappa_/log(max(Edash, 1+1e-4)) - 1); + const scalar nutCandidate = + nuw[facei]*(yPlus*kappa_/log(max(Edash, 1 + 1e-4)) - 1); + nutw[facei] = max(nutCandidate, scalar(0)); }Also applies to: 87-95, 111-120
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkz0WallFunction/nutkz0WallFunctionFvPatchScalarField.C` around lines 72 - 79, The code divides by z0_[facei] on line 72 when calculating Edash, but z0_ can default to zero causing invalid numerics, and the nutw[facei] assignment on line 78 can produce negative values which are physically invalid. Add a guard to check that z0_[facei] is greater than a small positive threshold before using it in the Edash calculation (you can use a similar approach to the max() function already applied to Edash), and clamp the computed nutw[facei] value to ensure it remains non-negative by using max(nutw[facei], 0) after the assignment. Apply these same fixes to the similar code patterns that appear elsewhere in the file as indicated in the comment.assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkRoughWallFunctionFvPatchScalarField.C (1)
148-158:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winValidate
Ks/Csranges when reading the dictionary.Line 156 and Line 157 accept user-provided roughness fields without bounds checks. Invalid values can propagate into
E()and thenlog(E*yPlus)innut(), causing NaN/unstable wall viscosity updates at runtime.Proposed guardrails
nutkRoughWallFunctionFvPatchScalarField::nutkRoughWallFunctionFvPatchScalarField ( const fvPatch& p, const DimensionedField<scalar, volMesh>& iF, const dictionary& dict ) : nutkWallFunctionFvPatchScalarField(p, iF, dict), Ks_("Ks", dict, p.size()), Cs_("Cs", dict, p.size()) -{} +{ + if (min(Ks_) < 0) + { + FatalIOErrorInFunction(dict) + << "Ks must be >= 0 for all faces" + << exit(FatalIOError); + } + + if (min(Cs_) < 0.5 || max(Cs_) > 1.0) + { + FatalIOErrorInFunction(dict) + << "Cs must be within [0.5, 1.0] for all faces" + << exit(FatalIOError); + } +}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkRoughWallFunctionFvPatchScalarField.C` around lines 148 - 158, In the nutkRoughWallFunctionFvPatchScalarField constructor, the Ks_ and Cs_ fields are initialized from the dictionary without validating their values. Add bounds checking immediately after the initialization of Ks_ and Cs_ to ensure they contain valid positive values within acceptable ranges. If invalid values are detected, log an appropriate warning or error and potentially set them to safe default values to prevent NaN propagation through the E() and nut() function calls.assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkz0WallFunctionFvPatchScalarField.C (2)
72-73:
⚠️ Potential issue | 🟠 Major🧩 Analysis chain
🏁 Script executed:
cat -n assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkz0WallFunctionFvPatchScalarField.C | head -130Repository: daattali/beautiful-jekyll
Length of output: 4870
Guard
z0_against zero before division inEdashcalculation.Line 72 computes
Edash = (y + z0)/z0, which has a divide-by-zero path becausez0_defaults to0.0at line 94 and dictionary input at line 119 is not validated for positive values. Addmax()guard withSMALLat the division point and validatez0_in the dictionary constructor.Suggested patches
- scalar Edash = (y[facei] + z0_[facei])/z0_[facei]; + const scalar z0Face = max(z0_[facei], SMALL); + scalar Edash = (y[facei] + z0Face)/z0Face;nutkz0WallFunctionFvPatchScalarField::nutkz0WallFunctionFvPatchScalarField ( const fvPatch& p, const DimensionedField<scalar, volMesh>& iF, const dictionary& dict ) : nutkWallFunctionFvPatchScalarField(p, iF, dict), z0_("z0", dict, p.size()) -{} +{ + if (min(z0_) <= SMALL) + { + FatalIOErrorInFunction(dict) + << "z0 must be > " << SMALL + << " for nutkz0WallFunction" + << exit(FatalIOError); + } +}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.const scalar z0Face = max(z0_[facei], SMALL); scalar Edash = (y[facei] + z0Face)/z0Face;🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkz0WallFunctionFvPatchScalarField.C` around lines 72 - 73, The Edash calculation at line 72 in nutkz0WallFunctionFvPatchScalarField.C has a divide-by-zero vulnerability because z0_ can default to 0.0 and is not validated when read from the dictionary. Guard the division by wrapping z0_[facei] in a max() function with SMALL to ensure a minimum threshold value, preventing division by zero in the Edash computation. Additionally, add validation in the dictionary constructor (around line 119) to check that z0_ values are positive and non-zero, rejecting or warning on invalid inputs before they are stored.
77-79:
⚠️ Potential issue | 🟠 Major🧩 Analysis chain
🏁 Script executed:
#!/bin/bash # Find and read the file in question fd -t f "nutkz0WallFunctionFvPatchScalarField.C" --exec cat -n {} \;Repository: daattali/beautiful-jekyll
Length of output: 50381
🏁 Script executed:
#!/bin/bash # Look for the parent class nutkWallFunctionFvPatchScalarField to see if it has safeguards fd -t f "nutkWallFunctionFvPatchScalarField" --exec grep -l "nut" {} \;Repository: daattali/beautiful-jekyll
Length of output: 51
🏁 Script executed:
#!/bin/bash # Search for nutWallFunction implementations and how they handle nut rg "nutWallFunction" --type cpp -A 5 -B 5 | head -100Repository: daattali/beautiful-jekyll
Length of output: 14035
🏁 Script executed:
#!/bin/bash # Search for patterns where nut or turbulent viscosity is clamped or bounded rg "max.*nut|nut.*max" --type cpp -B 2 -A 2 | head -80Repository: daattali/beautiful-jekyll
Length of output: 2042
🏁 Script executed:
#!/bin/bash # Search for log expressions in wall functions to see if there's a pattern for handling negative results rg "log.*kappa|yPlus.*kappa" --type cpp -B 2 -A 2 | head -80Repository: daattali/beautiful-jekyll
Length of output: 12259
Add
max()clamping to prevent negative turbulent viscosity computation.The expression
nuw[facei]*(yPlus*kappa_/log(max(Edash, 1+1e-4)) - 1)can produce negative values when the logarithmic term yields a small divisor. Negative turbulent viscosity is unphysical and can corrupt solver behavior. The analogous wall function implementation (nutkRoughWallFunction) in the same codebase usesmax(..., 0)clamping for identical formula structures, establishing the required pattern.Suggested patch
- nutw[facei] = - nuw[facei]*(yPlus*kappa_/log(max(Edash, 1+1e-4)) - 1); + nutw[facei] = max + ( + nuw[facei]*(yPlus*kappa_/log(max(Edash, 1 + 1e-4)) - 1), + scalar(0) + );📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.nutw[facei] = max ( nuw[facei]*(yPlus*kappa_/log(max(Edash, 1 + 1e-4)) - 1), scalar(0) ); }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkz0WallFunctionFvPatchScalarField.C` around lines 77 - 79, The turbulent viscosity computation for nutw[facei] can produce negative values due to the logarithmic term in the formula, which is unphysical and can corrupt solver behavior. Add a max() clamping function around the entire right-hand side expression to ensure the computed value is never negative, following the same pattern used in the analogous nutkRoughWallFunction implementation that handles the identical formula structure. Wrap the expression `nuw[facei]*(yPlus*kappa_/log(max(Edash, 1+1e-4)) - 1)` with max(..., 0) to prevent negative turbulent viscosity values.assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutWallFunctionFvPatchScalarField.H (1)
1-219: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick win
lnInclude should contain symlinks, not file copies.
This file is an exact duplicate of
nutWallFunctionFvPatchScalarField.Hin the parent directory. In OpenFOAM,lnIncludedirectories conventionally contain symbolic links to headers, not copies. Committing full copies creates maintenance burden—changes to the original must be manually propagated, risking divergence.Consider replacing these with symlinks:
cd lnInclude rm nutWallFunctionFvPatchScalarField.H ln -s ../derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.H .🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutWallFunctionFvPatchScalarField.H` around lines 1 - 219, The nutWallFunctionFvPatchScalarField.H file in the lnInclude directory is a full file copy instead of a symbolic link, which violates OpenFOAM conventions and creates maintenance burden. Remove the existing file copy from the lnInclude directory and replace it with a symbolic link pointing to the original nutWallFunctionFvPatchScalarField.H header file in the parent directory structure. This ensures the lnInclude directory follows OpenFOAM standards of containing only symlinks to keep headers synchronized without duplication.assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/files (1)
4-11:
⚠️ Potential issue | 🟠 Major🧩 Analysis chain
🏁 Script executed:
# First, let's locate the Make/files manifest mentioned in the review find . -path "*/MomentumTransportModels/momentumTransportModels/Make/files" -type fRepository: daattali/beautiful-jekyll
Length of output: 157
🏁 Script executed:
# Also search for the nutkRoughWallFunction file that's mentioned find . -name "*nutkRoughWallFunction*" -type fRepository: daattali/beautiful-jekyll
Length of output: 713
🏁 Script executed:
# Let's examine the current state of the Make/files manifest fd -i "Make/files" | head -20Repository: daattali/beautiful-jekyll
Length of output: 51
🏁 Script executed:
# Read the Make/files manifest to see all listed sources cat -n ./assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/filesRepository: daattali/beautiful-jekyll
Length of output: 738
🏁 Script executed:
# Check if nutkRoughWallFunction appears anywhere in the Make/files manifest grep -i "nutkrough" ./assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/files || echo "Not found in Make/files"Repository: daattali/beautiful-jekyll
Length of output: 93
🏁 Script executed:
# Verify the source file exists and check its structure to understand what it does head -50 ./assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.CRepository: daattali/beautiful-jekyll
Length of output: 1869
Add the rough-wall implementation to the library manifest.
nutkRoughWallFunctionFvPatchScalarField.Cis added in this PR but not listed in the Make/files manifest, so its runtime registration won't be linked intolibUsermomentumTransportModels.Suggested patch
nutWallFunctions = $(wallFunctions)/nutWallFunctions $(nutWallFunctions)/nutkz0WallFunction/nutkz0WallFunctionFvPatchScalarField.C +$(nutWallFunctions)/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.C🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/files` around lines 4 - 11, The file Make/files manifest is missing an entry for the new nutkRoughWallFunctionFvPatchScalarField.C implementation file that was added in this PR. Add a new line to the manifest under the nutWallFunctions section that references the nutkRoughWallFunctionFvPatchScalarField.C file, following the same pattern as the existing nutkz0WallFunction entry. This ensures the rough-wall implementation file is linked into the libUsermomentumTransportModels library during compilation.assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/variables (1)
1-5:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winDo not commit toolchain-generated
linux64GccDPInt32Optbuild artifacts.Line 1 places this file under a compiler/platform-specific output tree. Checking these into VCS creates stale build metadata and unnecessary merge churn across environments. Keep canonical
Make/filesandMake/optionsin source control and generatelinux64*artifacts at build time.Suggested cleanup
- assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/variables+# OpenFOAM local build outputs +assets/img/urban_flows/src/**/Make/linux64*/ +assets/img/urban_flows/src/**/Make/linux*/**/*.dep🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/variables` around lines 1 - 5, Remove this file from version control as it is a toolchain-generated build artifact specific to the linux64GccDPInt32Opt compiler configuration. Files located in platform-specific output trees like linux64GccDPInt32Opt should not be committed to the repository. Instead, keep only the canonical Make/files and Make/options source files in version control, and allow the build system to generate these linux64* artifacts automatically at build time. This prevents stale build metadata and unnecessary merge conflicts across different build environments.beautiful-jekyll-theme.gemspec (2)
5-5:
⚠️ Potential issue | 🔴 Critical | ⚡ Quick win
⚠️ Critical: Gem version downgraded from 6.0.1 to 5.0.0, violating semantic versioning.Downgrading a released gem version breaks downstream consumers' dependency resolution and violates semantic versioning. If this is intentional (e.g., reverting a broken release), document the reason; otherwise, this should be version
6.0.2(patch) or higher.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@beautiful-jekyll-theme.gemspec` at line 5, The spec.version in the beautiful-jekyll-theme.gemspec file has been downgraded from 6.0.1 to 5.0.0, which violates semantic versioning and breaks downstream consumers. Update the version to either 6.0.2 (for a patch release containing bug fixes) or a higher version number (for a minor or major release). If this downgrade is intentional because you are reverting a broken release, add a clear comment in the gemspec explaining the reason for the version change.
24-24:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winOver-constrained kramdown version prevents patch updates.
The constraint
~> 2.3.0locks to patch2.3.0only. The previous constraint~> 2.3permitted any patch in the 2.3 series (e.g., 2.3.1, 2.3.2). Relax to~> 2.3to allow security patches, or justify the strict patch-lock if there's a compatibility reason.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@beautiful-jekyll-theme.gemspec` at line 24, The kramdown runtime dependency specification uses `~> 2.3.0` which constrains to only patch version 2.3.0, preventing security and patch updates like 2.3.1 or 2.3.2. Change the version constraint from `~> 2.3.0` to `~> 2.3` in the spec.add_runtime_dependency line for kramdown to allow any patch version within the 2.3 series while maintaining minor version stability.software/notebooks/index.md (2)
7-7: 🧹 Nitpick | 🔵 Trivial | 💤 Low value
Rephrase for conciseness.
"A variety of fields" is somewhat wordy. Consider: "many fields" or "diverse topics."
🧰 Tools
🪛 LanguageTool
[style] ~7-~7: Consider using a more concise synonym.
Context: ...ave provided interactive codes covering a variety of fields. Choose a notebook below to see ...(A_VARIETY_OF)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@software/notebooks/index.md` at line 7, The phrase "a variety of fields" in the welcome sentence is wordy and can be made more concise. Replace "a variety of fields" with a shorter alternative such as "many fields" or "diverse topics" to improve the readability and conciseness of the introductory text in the Notebooks gallery welcome message.
10-22:
⚠️ Potential issue | 🟠 Major🧩 Analysis chain
🏁 Script executed:
#!/bin/bash # Description: Verify all notebooks in _notebooks/ have required front-matter fields. # Check each notebook file for required fields for notebook in _notebooks/*.md; do echo "=== Checking $notebook ===" if ! grep -q "^title:" "$notebook"; then echo " ⚠️ Missing 'title' field" fi if ! grep -q "^topic:" "$notebook"; then echo " ⚠️ Missing 'topic' field" fi if ! grep -q "^tldr:" "$notebook"; then echo " ⚠️ Missing 'tldr' field" fi doneRepository: daattali/beautiful-jekyll
Length of output: 461
Fix missing front-matter fields in
_notebooks/2026-AcceleratingCFD.md.The notebook
2026-AcceleratingCFD.mdis missing required front-matter fields (title,topic,tldr) that the template at lines 10–22 expects to render. Add these fields to the notebook's front-matter to prevent broken card output.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@software/notebooks/index.md` around lines 10 - 22, The notebook file 2026-AcceleratingCFD.md is missing required front-matter fields that the notebook template expects. Add the missing front-matter fields title, topic, and tldr to the notebook file's front-matter section so that the template can properly access and render nb.title, nb.topic, and nb.tldr when iterating through all_notebooks and generating the card output.software/resources/index.md (1)
9-25:
⚠️ Potential issue | 🟡 Minor🧩 Analysis chain
🏁 Script executed:
#!/bin/bash # Description: Verify all resources in _resources/ have required front-matter fields. for resource in _resources/*.md; do echo "=== Checking $resource ===" for field in "title" "application" "resource_type" "tldr"; do if ! grep -q "^$field:" "$resource"; then echo " ⚠️ Missing '$field' field" fi done doneRepository: daattali/beautiful-jekyll
Length of output: 240
🏁 Script executed:
# Check if _resources directory exists and list all files if [ -d "_resources" ]; then echo "=== Files in _resources/ ===" ls -la _resources/ else echo "_resources/ directory not found" fi # Also check for resources in other common locations echo "" echo "=== Searching for .md files that might contain resources ===" find . -type d -name "*resource*" 2>/dev/null | head -20Repository: daattali/beautiful-jekyll
Length of output: 372
🏁 Script executed:
# Check the content of the urban-datasets.md file if [ -f "_resources/urban-datasets.md" ]; then echo "=== Content of urban-datasets.md ===" cat -n "_resources/urban-datasets.md" fiRepository: daattali/beautiful-jekyll
Length of output: 114
🏁 Script executed:
# Check how site.resources is configured in _config.yml or related config files echo "=== Checking for Jekyll collections configuration ===" if [ -f "_config.yml" ]; then grep -A 10 "collections:" "_config.yml" || echo "No collections found in _config.yml" fiRepository: daattali/beautiful-jekyll
Length of output: 357
🏁 Script executed:
# Check what's in the software/resources directory echo "=== Contents of software/resources/ ===" ls -la software/resources/ echo "" echo "=== Checking for more collections in _config.yml ===" cat _config.yml | grep -A 50 "collections:"Repository: daattali/beautiful-jekyll
Length of output: 837
🏁 Script executed:
# Look for any data files that might provide resources echo "=== Looking for data files ===" find . -path ./.git -prune -o -type f -name "*.yml" -o -name "*.yaml" -o -name "*.json" | grep -i resource | head -20Repository: daattali/beautiful-jekyll
Length of output: 100
🏁 Script executed:
# Check if there's a _data directory with resources echo "=== Checking _data directory ===" if [ -d "_data" ]; then ls -la _data/ echo "" for file in _data/*; do if [ -f "$file" ] && [[ "$file" == *resource* ]]; then echo "=== Content of $file ===" cat "$file" fi done fiRepository: daattali/beautiful-jekyll
Length of output: 282
🏁 Script executed:
# Read the full index.md file to see the complete template context echo "=== Full content of software/resources/index.md ===" cat -n software/resources/index.mdRepository: daattali/beautiful-jekyll
Length of output: 1107
🏁 Script executed:
# Check git history to see if urban-datasets.md was recently added or modified echo "=== Git status and recent history ===" cd software/resources && git status echo "" cd ../../_resources && git log --oneline -10 urban-datasets.md 2>/dev/null || echo "No git history found for this file"Repository: daattali/beautiful-jekyll
Length of output: 401
🏁 Script executed:
# Check if Jekyll would include the empty resource file in site.resources # by looking for any Jekyll build output or testing locally echo "=== Checking for Jekyll Gemfile/dependencies ===" if [ -f "Gemfile" ]; then grep -i jekyll Gemfile | head -5 fi echo "" echo "=== Check if there are any example resources or documentation ===" find . -name "*.md" -path "*/_resources/*" -o -name "*resource*" -type f 2>/dev/null | grep -v ".git" | head -20Repository: daattali/beautiful-jekyll
Length of output: 216
🏁 Script executed:
# Verify the exact content and byte count of urban-datasets.md echo "=== Detailed inspection of urban-datasets.md ===" hexdump -C _resources/urban-datasets.md echo "" echo "File size:" stat _resources/urban-datasets.md | grep SizeRepository: daattali/beautiful-jekyll
Length of output: 237
🏁 Script executed:
# Check the Gemfile echo "=== Gemfile content ===" cat Gemfile 2>/dev/null || echo "No Gemfile found" echo "" echo "=== Using wc to check file size ===" wc _resources/urban-datasets.mdRepository: daattali/beautiful-jekyll
Length of output: 260
🏁 Script executed:
# Let's also check if there's a README or documentation about resources echo "=== Looking for resource documentation ===" find . -name "README*" -o -name "RESOURCES*" 2>/dev/null | head -5 cat README.md 2>/dev/null | head -50Repository: daattali/beautiful-jekyll
Length of output: 1170
Ensure the
_resources/urban-datasets.mdresource includes required front-matter fields.The template renders resource properties (
title,application,resource_type,tldr,url) that are currently missing from the only resource file in the collection. The file is empty and will produce broken card rendering. Add proper front-matter to this file or remove it from the collection until it's ready.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@software/resources/index.md` around lines 9 - 25, The Jekyll template in index.md expects resources to contain specific front-matter fields (title, application, resource_type, tldr, and url), but the urban-datasets.md resource file in the _resources collection is currently empty and missing these required fields. Add complete front-matter to the urban-datasets.md file including all five required fields (title, application, resource_type, tldr, and url) so the template can properly render the resource card, or remove the empty file from the collection until it is ready with proper content.software/tutorial.md (2)
7-7:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix spelling error in user-facing text.
Line 7 contains "highy" which should be "highly".
✏️ Proposed fix
-ModelFLOWs-app is a user-friendly application that doesn't require installation, but you may need to install some libraries to your Python environment. If you are an unexperienced user, and would like to learn how this software works, we highy recommend you download the web-browser version, which serves as a demo. +ModelFLOWs-app is a user-friendly application that doesn't require installation, but you may need to install some libraries to your Python environment. If you are an unexperienced user, and would like to learn how this software works, we highly recommend you download the web-browser version, which serves as a demo.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.ModelFLOWs-app is a user-friendly application that doesn't require installation, but you may need to install some libraries to your Python environment. If you are an unexperienced user, and would like to learn how this software works, we highly recommend you download the web-browser version, which serves as a demo.🧰 Tools
🪛 LanguageTool
[grammar] ~7-~7: Ensure spelling is correct
Context: ...ke to learn how this software works, we highy recommend you download the web-browser ...(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@software/tutorial.md` at line 7, In the tutorial.md file, locate the sentence in the ModelFLOWs-app description that contains the phrase "highy recommend" and correct the spelling error by changing "highy" to "highly" to properly convey the recommendation about downloading the web-browser version for unexperienced users.
9-19: 🧹 Nitpick | 🔵 Trivial | 💤 Low value
External resource dependencies on GitHub.
Images and videos are embedded directly from GitHub raw URLs. Consider hosting these assets locally in the repository (
assets/) if long-term availability and performance are critical.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@software/tutorial.md` around lines 9 - 19, Replace the external GitHub raw URLs for both the embedded image and video source with relative paths pointing to local assets within the repository. Update the image markdown link to reference the local file path (e.g., assets/img/Tutorial/scheme_app.png) instead of the full GitHub URL, and similarly update the video source src attribute to use a relative path to the local asset (e.g., assets/vid/InstallationGuide.mp4) instead of the GitHub blob URL, removing the ?raw=true parameter from both as it is not needed for local files.software/tutorials/index.md (1)
25-41:
⚠️ Potential issue | 🟡 Minor🧩 Analysis chain
🏁 Script executed:
#!/bin/bash # Description: Verify all tutorials in _tutorials/ have required front-matter fields. for tutorial in _tutorials/*.md; do echo "=== Checking $tutorial ===" for field in "title" "application" "category" "tldr"; do if ! grep -q "^$field:" "$tutorial"; then echo " ⚠️ Missing '$field' field" fi done doneRepository: daattali/beautiful-jekyll
Length of output: 511
🏁 Script executed:
# Check the actual content of the template files to see how fields are defined head -20 _tutorials/template-short-tutorial.md echo "---" head -20 _tutorials/template-sphinx-tutorial.mdRepository: daattali/beautiful-jekyll
Length of output: 75
🏁 Script executed:
# Check if there's a config that filters the tutorials collection find . -name "_config*" -o -name "*.yml" -o -name "*.yaml" | head -20Repository: daattali/beautiful-jekyll
Length of output: 183
🏁 Script executed:
# Verify the actual tutorial files have the required fields head -30 _tutorials/urban-cfd.md echo "---" head -30 _tutorials/urban-sensors3drec.mdRepository: daattali/beautiful-jekyll
Length of output: 1594
🏁 Script executed:
# Check _config.yml for tutorials collection configuration grep -A 10 "tutorials:" _config.yml || echo "No tutorials collection found in _config.yml"Repository: daattali/beautiful-jekyll
Length of output: 281
🏁 Script executed:
# Check if template files have any content at all wc -l _tutorials/template-*.md cat _tutorials/template-short-tutorial.mdRepository: daattali/beautiful-jekyll
Length of output: 159
🏁 Script executed:
# Check if there's an exclude pattern in _config.yml grep -i "exclude" _config.yml | head -10Repository: daattali/beautiful-jekyll
Length of output: 244
🏁 Script executed:
# Check if the template files are actually 1 line (empty) - let's see their raw content echo "=== template-short-tutorial.md ===" && cat -A _tutorials/template-short-tutorial.md echo "" echo "=== template-sphinx-tutorial.md ===" && cat -A _tutorials/template-sphinx-tutorial.mdRepository: daattali/beautiful-jekyll
Length of output: 145
🏁 Script executed:
# Verify the site.tutorials collection would include these templates # by checking what Jekyll would see with output: true cd . && grep -r "template-" _tutorials/ 2>/dev/null | head -5 || echo "No explicit template references"Repository: daattali/beautiful-jekyll
Length of output: 51
🏁 Script executed:
# Check the site index to see what tutorials are actually published # by looking at what the template would iterate over ls -la _tutorials/Repository: daattali/beautiful-jekyll
Length of output: 473
🏁 Script executed:
# Verify if there's any guard/conditional in the template file itself cat software/tutorials/index.mdRepository: daattali/beautiful-jekyll
Length of output: 1333
Add missing front-matter fields to template files or exclude them from the collection.
The template files
_tutorials/template-short-tutorial.mdand_tutorials/template-sphinx-tutorial.mdare empty and lack the requiredtitle,application,category, andtldrfront-matter fields. Withoutput: truein_config.yml, these are published as blank cards. Either populate these templates with the required fields or add them to theexcludelist if they're meant to be stubs only.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@software/tutorials/index.md` around lines 25 - 41, The template files template-short-tutorial.md and template-sphinx-tutorial.md are being published as blank cards because they lack the required front-matter fields (title, application, category, and tldr) expected by the tutorial template loop. Either add the missing front-matter fields to both template files with appropriate placeholder or example values, or add these template files to the exclude list in _config.yml to prevent them from being included in the tutorials collection output.software/videos/index.md (1)
13-25: 🧹 Nitpick | 🔵 Trivial | ⚖️ Poor tradeoff
Consider adding fallback content and accessibility improvements to video cards.
The cards do not handle missing fields gracefully (they will render empty), and there is no accessible description for the "Open Video" button. Additionally, if
site.videosis empty, the page shows only the intro text with no feedback.Suggested improvements:
- Add
{% if video.url %}guards around the link to prevent broken buttons- Add
titleoraria-labelattributes to the button for accessibility- Optionally add an empty-state message if no videos are found
♻️ Proposed improvements
{% assign videos = site.videos | sort: "application" %} +{% if videos.size == 0 %} + <p class="alert alert-info">No videos available at this time.</p> +{% else %} <div class="row mt-4"> {% for video in videos %} <div class="col-md-4 mb-4"> <div class="card h-100 shadow-sm"> <div class="card-body"> <h3 class="card-title">{{ video.title }}</h3> - <p class="text-muted"><strong>Application:</strong> {{ video.application }}</p> - <p class="text-muted"><strong>Category:</strong> {{ video.category }}</p> + {% if video.application %}<p class="text-muted"><strong>Application:</strong> {{ video.application }}</p>{% endif %} + {% if video.category %}<p class="text-muted"><strong>Category:</strong> {{ video.category }}</p>{% endif %} <p>{{ video.tldr }}</p> - <a href="{{ video.url | relative_url }}" class="btn btn-primary d-block">Open Video</a> + {% if video.url %} + <a href="{{ video.url | relative_url }}" class="btn btn-primary d-block" title="Watch {{ video.title }}">Open Video</a> + {% endif %} </div> </div> </div> {% endfor %} </div> +{% endif %}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@software/videos/index.md` around lines 13 - 25, Add conditional guards and accessibility improvements to the video card rendering. Wrap the "Open Video" button (the anchor element with class "btn btn-primary d-block") in a conditional check for video.url to prevent broken buttons when the URL is missing. Add a title or aria-label attribute to the button that includes the video title (video.title) to improve screen reader accessibility. Additionally, add a conditional block after the closing {% endfor %} loop to display an empty-state message when site.videos is empty or not defined, providing user feedback instead of showing only the intro text with no video cards.
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@_research/ai-models/ai-urban-flows/Air` pollution.md:
- Around line 11-14: Add blank lines around the markdown headings to comply with
markdownlint formatting standards. Specifically, add a blank line before the ##
Introduction heading and add blank lines both before and after the ## Study Area
heading to ensure proper spacing between the markdown sections.
- Line 12: The document contains inconsistent spelling variants for the word
utilisation/utilization, with both British English (utilisation) and American
English (utilization) spellings used throughout. Choose one spelling variant and
use it consistently throughout the entire document by finding and replacing all
instances of both variants with your chosen standard. The comment indicates
instances exist at line 12 and line 31, but check the entire document for any
other occurrences to ensure complete consistency.
- Around line 1-9: The page metadata fields (topic, title, and tldr) describe
urban energy efficiency and DEA models, but the filename and topic field
reference "Air Pollution", creating a mismatch that will cause incorrect
navigation and search classification. Update the `topic` field from "Air
Pollution" to "Urban Energy Efficiency" or an appropriate category, update the
`title` field from the vague "Data-driven" to an accurate title reflecting the
DEA model content, and ensure the `tldr` field description matches the actual
article subject matter. The filename and all metadata should consistently
reflect the same topic.
- Around line 32-35: Replace the placeholder alt text "vel_plot" in all four
image markdown elements with descriptive, meaningful alt text that accurately
describes what each figure shows. Update each image's alt attribute individually
so that screen readers can properly convey the content of each visualization
(for images 2026-workshop-li-urban-2.png through 2026-workshop-li-urban-5.png).
Use short but informative descriptions that identify what the figure depicts
rather than generic placeholder names.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 022eee70-7458-45ae-a436-3b7068a7b920
📒 Files selected for processing (1)
_research/ai-models/ai-urban-flows/Air pollution.md
There was a problem hiding this comment.
Actionable comments posted: 9
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@_applications/2026-cardiac-pathology.md`:
- Line 37: In the line that references "Cardiac tutorials", the compound
adjective "High Fidelity" needs to be hyphenated when it modifies the noun
"simulations". Change "High Fidelity simulations" to "High-Fidelity simulations"
by adding a hyphen between the two words to properly format the compound
adjective.
- Line 46: Replace all instances of generic placeholder link text "[*here*]"
throughout the document with descriptive phrases that accurately describe the
resource being linked. For each occurrence, use meaningful descriptive text that
indicates the content type and purpose (such as "[*Geometry Preprocessing
Tutorial Files*]", "[*MATLAB STL Generation Code*]", or similar descriptions
that clearly convey what resource the user will access). This improves
accessibility and SEO by providing semantic meaning to the links.
In `@_research/ai-models/cardiac-pathology/2026-pattern-identification-cvds.md`:
- Line 5: The front-matter field name at line 5 of the markdown file uses
`thumbnail` but the Jekyll template in `_includes/head.html` expects
`thumbnail-img` to properly populate the `og:image` meta tag for social-media
sharing. Rename the field from `thumbnail:` to `thumbnail-img:` while keeping
the image path value unchanged so the custom thumbnail will be correctly used
instead of falling back to the site avatar.
- Line 134: Replace the generic link text "[*here*]" with descriptive labels
that clearly indicate what is being linked. For the Diagnosis section link, use
"[*Diagnosis Python Scripts*]" instead of "[*here*]". For the Prognosis section
link (also using the generic "[*here*]" placeholder), replace it with
"[*Prognosis Python Scripts*]". This improves accessibility and SEO by making
the link purpose clear to users and search engines.
In `@_research/cfd-simulations/cardiac-pathology/2026-cfd-simulations-cvds.md`:
- Line 11: The compound adjective "open source" that precedes and modifies
"Software" in the ModelFLOWs-cardiac description needs to be hyphenated for
correct grammar. Locate the phrase "open source Software" in the description and
change it to "open-source Software" by adding a hyphen between "open" and
"source" to properly format the compound adjective.
- Line 59: Replace all generic "[*here*]" link text with descriptive labels
throughout the document at lines 59, 61, 68, 70, 77, and 79. For each
occurrence, examine the context of the sentence to understand what the link
provides (e.g., file downloads, tutorials, documentation) and replace the
generic "[*here*]" with a clear, descriptive label such as "[*Geometry
Preprocessing Files*]", "[*Star-CCM+ Tutorial*]", or similar labels that
accurately describe the link destination. This will improve accessibility and
SEO by making it clear to users what they are downloading or accessing before
clicking.
- Line 31: The markdown link in the table-of-contents entry for Tutorials has a
syntax error with a double opening parenthesis and a missing closing
parenthesis. In the line containing [Tutorials]((https://..., remove one of the
double opening parentheses and add a closing parenthesis at the end of the URL
to make the link syntax valid. The corrected format should be
[Tutorials](https://...) with single parentheses wrapping the URL.
In `@_tutorials/cardiac-tutorials.md`:
- Line 18: Replace all generic link text instances of "[*here*]" with
descriptive anchor text that clearly indicates what each link leads to. The
occurrences are at lines 18, 28, 51, 74, and 86 throughout the
cardiac-tutorials.md file. For each instance, examine the surrounding context to
determine an appropriate descriptive label such as the repository or resource
name (e.g., "[*Diagnosis Tutorial Repository*]", "[*CFD Tutorial Files*]")
instead of the vague "[*here*]" placeholder.
In `@research/ai-cardiac.md`:
- Around line 13-19: Create a new reusable include file at
_includes/research-card.html containing the card markup currently in lines 13-19
of research/ai-cardiac.md. In this new include file, replace all references to
post with include.post (e.g., post.url becomes include.post.url, post.title
becomes include.post.title, etc.). Then in research/ai-cardiac.md, replace the
entire card div markup block with a single include statement that passes the
post object to the new include file. Apply the same refactoring to
research/cfd-cardiac.md to eliminate the duplication between both files.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: b1d4b8b1-8c45-4f9e-bd5d-e584c65cb2ea
📒 Files selected for processing (7)
_applications/2026-cardiac-pathology.md_research/ai-models/cardiac-pathology/2026-pattern-identification-cvds.md_research/cfd-simulations/cardiac-pathology/2026-cfd-simulations-cvds.md_tutorials/cardiac-tutorials.mdresearch/ai-cardiac.mdresearch/cfd-cardiac.mdresearch/index.md
| layout: page | ||
| category: "AI & Data-Driven Models" | ||
| topic: "Cardiac Pathology Recognition" | ||
| thumbnail: "assets/img/ModelFlows_Cardiac_IMAGE01.jpg" |
There was a problem hiding this comment.
Fix front-matter field name mismatch for social-media thumbnail.
Line 5 declares thumbnail: "assets/img/ModelFlows_Cardiac_IMAGE01.jpg", but the Jekyll template (_includes/head.html) checks for page.thumbnail-img when populating the og:image meta tag. As written, the custom image will not be used for social-media sharing; Jekyll will fall back to site.avatar instead.
Change line 5 to:
thumbnail-img: "assets/img/ModelFlows_Cardiac_IMAGE01.jpg"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@_research/ai-models/cardiac-pathology/2026-pattern-identification-cvds.md` at
line 5, The front-matter field name at line 5 of the markdown file uses
`thumbnail` but the Jekyll template in `_includes/head.html` expects
`thumbnail-img` to properly populate the `og:image` meta tag for social-media
sharing. Rename the field from `thumbnail:` to `thumbnail-img:` while keeping
the image path value unchanged so the custom thumbnail will be correctly used
instead of falling back to the site avatar.
|
|
||
| <!-- The following video summarizes the developed system and shows the obtained results in the diagnosis task: --> | ||
|
|
||
| Download the code for **Diagnosis** in Python version [*here*](https://github.com/modelflows/ModelFLOWs-cardiac/raw/refs/heads/main/legacy-medical-data-tutorials/Diagnosis_scripts.zip). |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial | ⚡ Quick win
Use descriptive link text instead of generic placeholders.
Lines 134 and 153 use "[here]" links. Replace with descriptive labels (e.g., "[Diagnosis Python Scripts]", "[Prognosis Python Scripts]") for better accessibility and SEO.
Also applies to: 153-153
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 134-134: Link text should be descriptive
(MD059, descriptive-link-text)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@_research/ai-models/cardiac-pathology/2026-pattern-identification-cvds.md` at
line 134, Replace the generic link text "[*here*]" with descriptive labels that
clearly indicate what is being linked. For the Diagnosis section link, use
"[*Diagnosis Python Scripts*]" instead of "[*here*]". For the Prognosis section
link (also using the generic "[*here*]" placeholder), replace it with
"[*Prognosis Python Scripts*]". This improves accessibility and SEO by making
the link purpose clear to users and search engines.
| <div class="card flex-row" style="border: 1px solid #ddd; border-radius: 8px; overflow: hidden; padding: 15px;"> | ||
| <div class="card-body"> | ||
| <h3 style="margin-top: 0;"><a href="{{ post.url | relative_url }}">{{ post.title }}</a></h3> | ||
| <p style="color: #666; font-size: 0.9em; margin-bottom: 5px;">Category: <strong>{{ post.category }}</strong></p> | ||
| <p>{{ post.tldr }}</p> | ||
| {% if post.thumbnail %} | ||
| <img src="{{ post.thumbnail | relative_url }}" style="max-width: 250px; height: auto; margin-top: 10px; margin-bottom: 10px; border-radius: 5px;" alt="Miniature"> |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial | ⚡ Quick win
Consider extracting the card template to a reusable include.
The card markup is nearly identical to research/cfd-cardiac.md (lines 13–19 here vs. lines 13–19 there). Extracting this to _includes/research-card.html would reduce duplication and simplify future updates.
For example, create _includes/research-card.html:
<div class="col-md-12 mb-4">
<div class="card flex-row" style="border: 1px solid `#ddd`; border-radius: 8px; overflow: hidden; padding: 15px;">
<div class="card-body">
<h3 style="margin-top: 0;"><a href="{{ include.post.url | relative_url }}">{{ include.post.title }}</a></h3>
<p style="color: `#666`; font-size: 0.9em; margin-bottom: 5px;">Category: <strong>{{ include.post.category }}</strong></p>
<p>{{ include.post.tldr }}</p>
{% if include.post.thumbnail %}
<img src="{{ include.post.thumbnail | relative_url }}" style="max-width: 250px; height: auto; margin-top: 10px; margin-bottom: 10px; border-radius: 5px;" alt="Miniature">
{% endif %}
<br>
<a href="{{ include.post.url | relative_url }}" class="btn btn-outline-primary btn-sm">Read More</a>
</div>
</div>
</div>Then in this file (lines 11–26):
{% assign current_posts = site.research | where: "topic", "Cardiac Pathology Recognition" %}
{% for post in current_posts %}
{% include research-card.html post=post %}
{% endfor %}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@research/ai-cardiac.md` around lines 13 - 19, Create a new reusable include
file at _includes/research-card.html containing the card markup currently in
lines 13-19 of research/ai-cardiac.md. In this new include file, replace all
references to post with include.post (e.g., post.url becomes include.post.url,
post.title becomes include.post.title, etc.). Then in research/ai-cardiac.md,
replace the entire card div markup block with a single include statement that
passes the post object to the new include file. Apply the same refactoring to
research/cfd-cardiac.md to eliminate the duplication between both files.
Update 2026-combustion.md
…links in combustion app page
With corrections applied and LV segmentation & EF estimation tutorial added
change link
Update 2026-urban-flows.md
Update 2026-urban-flows.md
Update 2026-urban-flows.md
Software/apps/cardiac
Software/apps/combustion
combustion y cardiac
Software/apps/combustion
* zou's dataset for combustion GPR+HOSVD * add BLASTNet dataset section * AIJ datasets added in software/datasets/urbanFlowData --------- Co-authored-by: Isacco <isaccofaglioni2000@gmail.com> Co-authored-by: ariol <ariol@indra.es>
Added details about the Vallecas urban database, including simulation parameters and pollutant data.
* zou's dataset for combustion GPR+HOSVD * add BLASTNet dataset section * AIJ datasets added in software/datasets/urbanFlowData * Add Vallecas urban database information Added details about the Vallecas urban database, including simulation parameters and pollutant data. * Update urban_canonical_9_buildings.md * AIJ datasets added in software/datasets/urbanFlowData fixed --------- Co-authored-by: Isacco <isaccofaglioni2000@gmail.com> Co-authored-by: ModelFLOWs <129270224+modelflows@users.noreply.github.com> Co-authored-by: ariol <ariol@indra.es> Co-authored-by: Paul Jeanney <paul.jeanney@arup.com>
Fix tldr formatting in combustion_zou.md
Please note that if you are trying to update your website, this is the wrong place to do so. Please carefully follow the Beautiful Jekyll instructions (found at https://github.com/daattali/beautiful-jekyll#readme) and make sure you submit changes to your version of the project.
If your intention is to submit a Pull Request, please describe what your pull request achieves.
Thank you!
Summary by CodeRabbit
New Features
Documentation
Configuration