Skip to content

From sensors to 3d reconstruction - #1579

Open
Arindam032192 wants to merge 1191 commits into
daattali:masterfrom
modelflows:dev
Open

From sensors to 3d reconstruction#1579
Arindam032192 wants to merge 1191 commits into
daattali:masterfrom
modelflows:dev

Conversation

@Arindam032192

@Arindam032192 Arindam032192 commented Jun 17, 2026

Copy link
Copy Markdown

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

    • Added multiple new application guides for cardiac pathology, combustion, urban flows, and adaptive CFD workflows
    • Introduced comprehensive tutorial pages covering deep learning, modal decomposition, data assimilation, and urban sensor calibration
    • Added research documentation for generative AI in urban flows, air quality modeling, and cardiac disease pattern detection
    • Created new database collections for fluid dynamics benchmarks, medical data, and urban canonical configurations
    • Added complete "About" page with team and contributor information
  • Documentation

    • Updated project README with ModelFLOWs overview and mission statement
    • Reorganized CHANGELOG with latest feature releases and improvements
    • Added extensive notebook documentation for parametric studies and temporal forecasting methods
  • Configuration

    • Updated site navigation, footer, and Jekyll collections structure
    • Modified copyright information in license file

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

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

Comment on lines +81 to +88

volScalarField::Boundary d = nearWallDist(mesh_).y();

const fvPatchList& patches = mesh_.boundary();

forAll(patches, patchi)
{
firstCellHeightBf[patchi] = d[patchi];

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

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];
    }

Comment on lines +225 to +233
const scalar Pr
(
dimensionedScalar
(
"Pr",
dimless,
transportProperties.lookup("Pr")
).value()
);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

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")
    );

Comment thread _notebooks/2026-modaldecomposition.md Outdated
* [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)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The link for "Low-cost HOSVD" points to #low-cost-hosvd, but there is no corresponding section or anchor with id="low-cost-hosvd" in this file.

Comment thread _notebooks/2026-deeplearning.md Outdated

![Super resolution tool - Methodology ](https://github.com/modelflows/modelflowsapp/blob/master/assets/img/2025_01_30_Barragan_superresolution.png?raw=true)

Download the code [*here*](https://github.com/modelflows/notebooks/raw/refs/heads/main/SUPERRESOLUTION.zip). -->

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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.

Suggested change
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.

![ZOI](https://github.com/modelflows/modelflowsapp/blob/master/assets/img/urban_flows/geo_scheme.png?raw=true)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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.

Suggested change
![ZOI](https://github.com/modelflows/modelflowsapp/blob/master/assets/img/urban_flows/geo_scheme.png?raw=true)
![ZOI]({{ 'assets/img/urban_flows/geo_scheme.png' | relative_url }})

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)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

There is a typo in the author's name in the citation: "Tagilaferro" should be "Tagliaferro".

Suggested change
[*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*]()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The download link for the databases is empty. Please provide the correct URL inside the parentheses.

Suggested change
Download the databases [*here*]()
Download the databases [*here*](INSERT_DATABASE_URL_HERE)

Comment thread _databases/2026-phonocardiograms.md Outdated
Comment on lines +3 to +5
title: "Madrid Aerobiological Concentration Dataset 2026"
type: "Experimental / Urban"
tldr: "Timeseries and spatial distribution of pollen and pollutants in Vallecas."

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This file is named 2026-phonocardiograms.md but the title and metadata describe the "Madrid Aerobiological Concentration Dataset 2026" (pollen and pollutants in Vallecas), which is identical to 2026-urban-aerobiological.md. Please update this file with the correct phonocardiogram database details.

Comment thread _config.yml

# Output options (more information on Jekyll's site)
timezone: "America/Toronto"
timezone: "Spain"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

"Spain" is not a valid IANA timezone identifier for Jekyll/Ruby. It should be specified as a standard timezone database name, such as Europe/Madrid.

timezone: "Europe/Madrid"

@coderabbitai

coderabbitai Bot commented Jun 17, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The Beautiful Jekyll theme repository is converted into the ModelFLOWs research-group site. _config.yml gains seven custom Jekyll collections, updated navigation, and a new permalink format. Over 80 new Markdown pages are added across _applications, _databases, _notebooks, _research, _tutorials, _resources, and _videos. An OpenFOAM alphatJayatillekeWallFunction C++ implementation and its build manifests are added under assets/img/urban_flows/.

Changes

ModelFLOWs Jekyll site

Layer / File(s) Summary
Repo metadata and Jekyll site configuration
.bundle/config, .gitignore, Gemfile, LICENSE, README.md, CHANGELOG.md, assets/css/beautifuljekyll.css, _config.yml
Bundler vendor path, gitignore exclusion, appraisal gem, LICENSE year correction, full README replacement with ModelFLOWs content, CHANGELOG Unreleased restructure, CSS blank-line addition, and _config.yml rewrite for site identity, navbar/footer links, social handles, UI toggles, color palette, timezone, permalink format, and seven-collection block.
About page and asset/template placeholders
about.md, _applications/9999-template-application.md, _notebooks/9998-template-notebook-2.md, _notebooks/9999-template-notebook.md, _resources/urban-datasets.md, _tutorials/template-short-tutorial.md, _tutorials/template-sphinx-tutorial.md, _videos/urban-city4cfd.md, assets/img/tutorial-aij/.gitkeep, assets/img/figs/..., assets/img/post_ROMIA_research/carpeta.md, _research/cfd-simulations/adaptive_prediction/.gitkeep
about.md populated with group leader card, member grid, and alumni list; stub/placeholder files added for new collection directories and templates.
Application collection pages
_applications/2026-cardiac-pathology.md, _applications/2026-combustion.md, _applications/2026-combustion_tutorial.md, _applications/2026-urban-flows.md, _applications/hosvd_gpr_combustion.md, _applications/2026-accelerate-cfd.md
Hub pages for cardiac pathology (CFD/AI/publications index), combustion (DLR RANS + HOSVD-GPR parametric plan), urban flows (CFD/ROM/sensor sections with tutorial links), and adaptive CFD–POD–LSTM pipeline validation.
Database and medical data collection pages
_databases/2026-historical-databases.md, _databases/medical_data.md, _databases/urban_canonical_9_buildings.md
Fluid-dynamics benchmark datasets (cylinder variants, channel, jet, cardiac, FDA nozzle), cardiac medical datasets (LV CFD, EchoNet-Dynamic, PhysioNet phonocardiogram), and urban 9-building CFD dataset stubs with coming-soon notices.
Notebook collection pages
_notebooks/2026-modaldecomposition.md, _notebooks/2026-deeplearning.md, _notebooks/2026-dataassimilation.md, _notebooks/2026-accelerate-cfd.md, _notebooks/2026-accelerateCFD-tutorial.md
Notebook pages for modal decomposition (HOSVD/HODMD/STKD/low-cost algorithms/control), reduced-order deep learning (parametric study, superresolution, temporal forecasting, remote sensing, adaptive methodology), data assimilation (ROM-EnKF, lcSVD-DA), and adaptive CFD–POD–LSTM overview plus full tutorial with config.yaml reference.
Research post pages
_research/ai-models/adaptive-prediction/*, _research/ai-models/ai-urban-flows/*, _research/ai-models/air-pollution/*, _research/ai-models/cardiac-pathology/*, _research/ai-models/combustion/*, _research/ai-models/flow-patterns-complex-flows/*, _research/cfd-simulations/Accelerate CFD/*, _research/cfd-simulations/adaptive_prediction/*, _research/cfd-simulations/cardiac-pathology/*, _research/cfd-simulations/combustion/*, _research/cfd-simulations/urban-flows/*, _research/research_post.md, _posts/combustion-hosvd-gpr.md
Research posts covering adaptive POD-DL surrogate, ROMIA RANS acceleration, generative AI urban flows, sparse-sensor 3D reconstruction, Vallecas CFD air quality, GSVD aerobiological imputation, LSTM sensor calibration, RDEA energy efficiency, cardiac pattern identification (HODMD/ViT/CardioMOD-Net), cardiac CFD, LES combustion hybrid ROM, HOSVD-GPR parametric combustion, and viscoelastic jets.
Tutorial collection pages
_tutorials/2026-accelerateCFD-tutorial.md, _tutorials/2026-combustion_tutorial.md, _tutorials/cardiac-tutorials.md, _tutorials/combustion-hosvd-gpr-tutorial.md, _tutorials/urban-3d-reconstruction.md, _tutorials/urban-canonical-configuration.md, _tutorials/urban-lcs-calibration.md, _tutorials/urban-mdhodmd-forecasting.md, _tutorials/urban-cfd.md, _tutorials/urban-sensors3drec.md
Tutorial pages for adaptive CFD–POD–LSTM (full config.yaml schema, run modes), OpenFOAM combustion RANS (blockMeshDict through dataset assembly), HOSVD-GPR combustion surrogate (14-step Tucker decomposition/interpolation), cardiac diagnostics and CFD, urban AIJ Case C canonical OpenFOAM setup, urban 3D reconstruction (lcSVD/lcHOSVD/lcHODMD), LCS sensor calibration (LSTM workflow), and mdHODMD urban flow forecasting.

OpenFOAM urban-flows wall-function source

Layer / File(s) Summary
OpenFOAM build system wiring
assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/files, .../Make/options, .../Make/save.options, .../Make/linux64GccDPInt32Opt/...
Make/files, Make/options, Make/save.options, and linux64GccDPInt32Opt generated variables/sourceFiles/options manifests declare nut/epsilon/alphat wall-function source paths, OpenFOAM include directories, and link libraries for libUsermomentumTransportModels.
alphatJayatillekeWallFunction implementation
assets/img/urban_flows/src/.../alphatJayatillekeWallFunction/Make/files, .../Make/options, .../alphatJayatillekeWallFunctionFvPatchScalarField.C
alphatJayatillekeWallFunctionFvPatchScalarField.C implements patch type validation, Psmooth/yPlusTherm iterative helpers, all constructor variants with dictionary parameter lookup, updateCoeffs with per-face yPlus branching and max(0, kt) clamping, write serialization, and runtime type registration.
Generated compiler dependency manifests
assets/img/urban_flows/src/.../epsilonz0WallFunctionFvPatchScalarField.C.dep, .../nutkz0WallFunctionFvPatchScalarField.C.dep
Two large GNU make .dep files recording transitive header dependencies for epsilonz0 and nutkz0 wall-function translation units, committed under the linux64GccDPInt32Opt build output directory.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

🐇 Hippity-hop, a new site has grown,
From Beautiful Jekyll to ModelFLOWs all sewn,
With turbines and tensors and HOSVD grace,
And wall functions tucked in their OpenFOAM place,
The rabbit now hops through each tutorial page,
So many equations — what a fluid-filled age! 🌊

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (2 warnings, 1 inconclusive)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description contains only the template message with no substantive information about the pull request's purpose, scope, changes, or objectives provided by the author. Replace the template message with a clear description of what the PR achieves, including the files modified, the documentation or features added, and the rationale for the changes.
Docstring Coverage ⚠️ Warning Docstring coverage is 56.03% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The PR title 'From sensors to 3d reconstruction' is vague and does not clearly convey the scope of changes; while it references real concepts in the PR, the title is too generic to meaningfully summarize the main technical change. Replace with a more specific title that clearly describes the primary change, such as 'Add 3D reconstruction documentation from sensor data' or 'Document urban flow reconstruction methodology from sensor measurements'.
✅ Passed checks (2 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 win

Remove generated linux64GccDPInt32Opt build 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 win

Critical: Filename does not match content title and topic.

The file is named 2026-phonocardiograms.md but 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 win

Duplicate 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 win

Missing 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) expects topic and tldr fields 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 prediction

Or 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 win

Add 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 videos collection 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 | 🟠 Major

Do not version generated Make/linux64GccDPInt32Opt/* artifacts.

The linux64GccDPInt32Opt/options file contains preprocessor directives indicating it is generated output. The canonical source exists at Make/options and should be the only version-controlled configuration. Remove the linux64GccDPInt32Opt/ directory from the repository and add it to .gitignore to 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

📥 Commits

Reviewing files that changed from the base of the PR and between 35d82c8 and 69325d6.

⛔ Files ignored due to path filters (140)
  • assets/datasets/2024_Tagliaferroetal_Databases.zip is excluded by !**/*.zip
  • assets/img/2025_01Jan_30_Bell_DiagnosisOverview.jpg is excluded by !**/*.jpg
  • assets/img/2025_01Jan_30_Bell_PrognosisOverview.jpg is excluded by !**/*.jpg
  • assets/img/2025_01Jan_30_Jeanney_DA.png is excluded by !**/*.png
  • assets/img/2025_01_30_AbadiaHeredia_ARmodels_POD_DL.png is excluded by !**/*.png
  • assets/img/2025_01_30_AbadiaHeredia_ARmodels_Res_AE.png is excluded by !**/*.png
  • assets/img/2025_01_30_AbadiaHeredia_ARmodels_VAE.png is excluded by !**/*.png
  • assets/img/2025_01_30_AbadiaHeredia_POD_DL_Orig.png is excluded by !**/*.png
  • assets/img/2025_01_30_Barragan_multipar.png is excluded by !**/*.png
  • assets/img/2025_01_30_Barragan_superresolution.png is excluded by !**/*.png
  • assets/img/2025_01_30_pillai_lchodmd(lchosvd).png is excluded by !**/*.png
  • assets/img/2025_01_30_pillai_lchodmd.png is excluded by !**/*.png
  • assets/img/2025_01_30_pillai_lcsvd-da.png is excluded by !**/*.png
  • assets/img/2025_01_30_pillai_stkd.png is excluded by !**/*.png
  • assets/img/2025_01_30_sengupta_Temporalforecasting.PNG is excluded by !**/*.png
  • assets/img/2025_12Dec_Belletal_ToolOverview.png is excluded by !**/*.png
  • assets/img/2025_15_12_Sengupta_Calibration_Methodology.png is excluded by !**/*.png
  • assets/img/2026-workshop-li-urban-1.jpg is excluded by !**/*.jpg
  • assets/img/2026-workshop-li-urban-2.png is excluded by !**/*.png
  • assets/img/2026-workshop-li-urban-3.png is excluded by !**/*.png
  • assets/img/2026-workshop-li-urban-4.png is excluded by !**/*.png
  • assets/img/2026-workshop-li-urban-5.png is excluded by !**/*.png
  • assets/img/2026_04Apr_Belletat_PODAEsOverview.png is excluded by !**/*.png
  • assets/img/Adaptive_framework.png is excluded by !**/*.png
  • assets/img/DLR_burner_Geometry.png is excluded by !**/*.png
  • assets/img/DLR_burner_Validation.png is excluded by !**/*.png
  • assets/img/Databases/Concentricjets.png is excluded by !**/*.png
  • assets/img/Databases/Cyl2D_2cyl.png is excluded by !**/*.png
  • assets/img/Databases/FDAnozzle.png is excluded by !**/*.png
  • assets/img/Databases/LV.png is excluded by !**/*.png
  • assets/img/Databases/channel.png is excluded by !**/*.png
  • assets/img/Databases/channel_cav.png is excluded by !**/*.png
  • assets/img/Databases/channel_rib.png is excluded by !**/*.png
  • assets/img/Databases/cyl2D.png is excluded by !**/*.png
  • assets/img/Databases/cyl3Dlong.png is excluded by !**/*.png
  • assets/img/Databases/cyl3Dshort.png is excluded by !**/*.png
  • assets/img/Gappy.png is excluded by !**/*.png
  • assets/img/HODMDcalibration.png is excluded by !**/*.png
  • assets/img/JHC_Geometry_mesh.png is excluded by !**/*.png
  • assets/img/JHC_LES-results.png is excluded by !**/*.png
  • assets/img/JHC_Prediction-curves.png is excluded by !**/*.png
  • assets/img/JHC_Prediction.png is excluded by !**/*.png
  • assets/img/JHC_burner_T_CH4_CO2.png is excluded by !**/*.png
  • assets/img/JHC_burner_geometry.jpg is excluded by !**/*.jpg
  • assets/img/JHC_burner_geometry.png is excluded by !**/*.png
  • assets/img/JHC_burner_mesh.jpg is excluded by !**/*.jpg
  • assets/img/JHC_burner_mesh.png is excluded by !**/*.png
  • assets/img/JHC_burner_prediction_T_plane1.png is excluded by !**/*.png
  • assets/img/JHC_burner_prediction_T_plane2.png is excluded by !**/*.png
  • assets/img/LC-SVD-DLinear.jpg is excluded by !**/*.jpg
  • assets/img/LC-SVD.jpg is excluded by !**/*.jpg
  • assets/img/MDControl.png is excluded by !**/*.png
  • assets/img/ModelFloes_Cardiac_IMAGE00.png is excluded by !**/*.png
  • assets/img/ModelFloes_Cardiac_IMAGE06.png is excluded by !**/*.png
  • assets/img/ModelFlows_Cardiac_IMAGE01.jpg is excluded by !**/*.jpg
  • assets/img/ModelFlows_Cardiac_IMAGE03.jpg is excluded by !**/*.jpg
  • assets/img/ModelFlows_Cardiac_IMAGE05.jpg is excluded by !**/*.jpg
  • assets/img/ModelFlows_Cardiac_page-IMAGE02.jpg is excluded by !**/*.jpg
  • assets/img/ModelFlowsapp_scheme.png is excluded by !**/*.png
  • assets/img/Notebooks/scheme_notebooks.png is excluded by !**/*.png
  • assets/img/Slide_garcia_DBgeneration.jpg is excluded by !**/*.jpg
  • assets/img/SuperTool.png is excluded by !**/*.png
  • assets/img/Tutorial/scheme_app.png is excluded by !**/*.png
  • assets/img/Vedula_vorticity.png is excluded by !**/*.png
  • assets/img/Workshops_Events/ModelFLOWs_WS25_groupPicture.jpeg is excluded by !**/*.jpeg
  • assets/img/Zheng_vorticity.png is excluded by !**/*.png
  • assets/img/adaptive_methodology.png is excluded by !**/*.png
  • assets/img/geometry_ideal.png is excluded by !**/*.png
  • assets/img/hello_world.jpeg is excluded by !**/*.jpeg
  • assets/img/hosvd.png is excluded by !**/*.png
  • assets/img/install-steps.gif is excluded by !**/*.gif
  • assets/img/logos/github.svg is excluded by !**/*.svg
  • assets/img/logos/linkedin.png is excluded by !**/*.png
  • assets/img/logos/scholar.svg is excluded by !**/*.svg
  • assets/img/modelflows.jpeg is excluded by !**/*.jpeg
  • assets/img/modelflows.png is excluded by !**/*.png
  • assets/img/modelflowsappscheme.png is excluded by !**/*.png
  • assets/img/ra.png is excluded by !**/*.png
  • assets/img/re1_lcsvd-da_lam.png is excluded by !**/*.png
  • assets/img/re2_lcsvd-da_turb.png is excluded by !**/*.png
  • assets/img/re3_lchodmd_lam.png is excluded by !**/*.png
  • assets/img/re3_lchodmd_turb.png is excluded by !**/*.png
  • assets/img/team/Xiangrui_Zou.jpg is excluded by !**/*.jpg
  • assets/img/team/Zhuoqun_Zhao.jpg is excluded by !**/*.jpg
  • assets/img/team/alberto_rodriguez.jpg is excluded by !**/*.jpg
  • assets/img/team/alvaro_manzano.jpg is excluded by !**/*.jpg
  • assets/img/team/alvaro_rio.jpg is excluded by !**/*.jpg
  • assets/img/team/ander_sanchez.jpg is excluded by !**/*.jpg
  • assets/img/team/andres_bell.jpg is excluded by !**/*.jpg
  • assets/img/team/angel_escalante.jpg is excluded by !**/*.jpg
  • assets/img/team/arindam_sengupta.png is excluded by !**/*.png
  • assets/img/team/carlos_sainz.jpg is excluded by !**/*.jpg
  • assets/img/team/christian_amor.jpg is excluded by !**/*.jpg
  • assets/img/team/franciscoJ_Garcia_Soto.jpg is excluded by !**/*.jpg
  • assets/img/team/francisco_giral.png is excluded by !**/*.png
  • assets/img/team/guillermo_barragan.jpg is excluded by !**/*.jpg
  • assets/img/team/han_chen.jpg is excluded by !**/*.jpg
  • assets/img/team/issaco.jpeg is excluded by !**/*.jpeg
  • assets/img/team/iñaki_gutierrez.jpg is excluded by !**/*.jpg
  • assets/img/team/jiannan_li.jpg is excluded by !**/*.jpg
  • assets/img/team/miguel_rios.jpg is excluded by !**/*.jpg
  • assets/img/team/mikel_navarro.jpg is excluded by !**/*.jpg
  • assets/img/team/pablo_lopez_salazar.jpg is excluded by !**/*.jpg
  • assets/img/team/paul_jeanney.jpg is excluded by !**/*.jpg
  • assets/img/team/soledad_leclainche.png is excluded by !**/*.png
  • assets/img/team/wentai_deng.jpg is excluded by !**/*.jpg
  • assets/img/tutorial-aij/1.png is excluded by !**/*.png
  • assets/img/tutorial-aij/2.png is excluded by !**/*.png
  • assets/img/tutorial-aij/3.png is excluded by !**/*.png
  • assets/img/tutorial-aij/4.png is excluded by !**/*.png
  • assets/img/tutorial-aij/5.png is excluded by !**/*.png
  • assets/img/urban-flows/angle_253_4x4_obs2177.png is excluded by !**/*.png
  • assets/img/urban-flows/city_frame.png is excluded by !**/*.png
  • assets/img/urban-flows/diffusion_scheme.png is excluded by !**/*.png
  • assets/img/urban-flows/generative_data_assimilation.png is excluded by !**/*.png
  • assets/img/urban-flows/gensynth_train_tes.png is excluded by !**/*.png
  • assets/img/urban-flows/graph_structure_scheme.png is excluded by !**/*.png
  • assets/img/urban-flows/pdf_comparison_speed_angle171_z35.png is excluded by !**/*.png
  • assets/img/urban-flows/pdf_comparison_speed_angle31_z40.png is excluded by !**/*.png
  • assets/img/urban-flows/slice_example1.png is excluded by !**/*.png
  • assets/img/urban-flows/zoom_z35_angle46_Ux.png is excluded by !**/*.png
  • assets/img/urban-flows/zoom_z35_angle46_Uy.png is excluded by !**/*.png
  • assets/img/urban_flows/Presentation1_01.png is excluded by !**/*.png
  • assets/img/urban_flows/animation.mp4 is excluded by !**/*.mp4
  • assets/img/urban_flows/boundaries.png is excluded by !**/*.png
  • assets/img/urban_flows/domain1.png is excluded by !**/*.png
  • assets/img/urban_flows/ezgif.com-animated-gif-maker.gif is excluded by !**/*.gif
  • assets/img/urban_flows/geo_scheme.png is excluded by !**/*.png
  • assets/img/urban_flows/mesh_med.png is excluded by !**/*.png
  • assets/img/urban_flows/plot_CO_18.png is excluded by !**/*.png
  • assets/img/urban_flows/plot_CO_19.png is excluded by !**/*.png
  • assets/img/urban_flows/plot_CO_20.png is excluded by !**/*.png
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.o is excluded by !**/*.o
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkz0WallFunction/nutkz0WallFunctionFvPatchScalarField.o is excluded by !**/*.o
  • assets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/firstCellHeight/firstCellHeight.o is excluded by !**/*.o
  • assets/img/urban_flows/streamlines_sole3.png is excluded by !**/*.png
  • assets/img/urban_flows/tmp.png is excluded by !**/*.png
  • assets/vid/InstallationGuide.mp4 is excluded by !**/*.mp4
  • assets/vid/JHC_burner_animation_T_plane1.mp4 is excluded by !**/*.mp4
  • assets/vid/JHC_burner_animation_T_plane2.mp4 is excluded by !**/*.mp4
📒 Files selected for processing (100)
  • .bundle/config
  • .gitignore
  • CHANGELOG.md
  • Gemfile
  • LICENSE
  • README.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.md
  • about.md
  • assets/css/beautifuljekyll.css
  • assets/img/tutorial-aij/.gitkeep
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/files
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.C.dep
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkz0WallFunction/nutkz0WallFunctionFvPatchScalarField.C.dep
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/options
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/sourceFiles
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/linux64GccDPInt32Opt/variables
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/options
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/Make/save.options
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/Make/files
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/Make/options
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.C
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonz0WallFunction/epsilonz0WallFunctionFvPatchScalarField.H
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.C
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.H
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.C
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.H
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkz0WallFunction/nutkz0WallFunctionFvPatchScalarField.C
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkz0WallFunction/nutkz0WallFunctionFvPatchScalarField.H
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/alphatJayatillekeWallFunctionFvPatchScalarField.C
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/alphatJayatillekeWallFunctionFvPatchScalarField.H
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/epsilonz0WallFunctionFvPatchScalarField.C
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/epsilonz0WallFunctionFvPatchScalarField.H
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutWallFunctionFvPatchScalarField.C
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutWallFunctionFvPatchScalarField.H
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkRoughWallFunctionFvPatchScalarField.C
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkRoughWallFunctionFvPatchScalarField.H
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkz0WallFunctionFvPatchScalarField.C
  • assets/img/urban_flows/src/MomentumTransportModels/momentumTransportModels/lnInclude/nutkz0WallFunctionFvPatchScalarField.H
  • assets/img/urban_flows/src/functionObjects/fields/Make/files
  • assets/img/urban_flows/src/functionObjects/fields/Make/linux64GccDPInt32Opt/firstCellHeight/firstCellHeight.C.dep
  • 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/options
  • assets/img/urban_flows/src/functionObjects/fields/firstCellHeight/firstCellHeight.C
  • assets/img/urban_flows/src/functionObjects/fields/firstCellHeight/firstCellHeight.H
  • assets/img/urban_flows/src/functionObjects/fields/lnInclude/firstCellHeight.C
  • assets/img/urban_flows/src/functionObjects/fields/lnInclude/firstCellHeight.H
  • beautiful-jekyll-theme.gemspec
  • feed.xml
  • index.md
  • research/Air pollution.md
  • research/adaptive-prediction.md
  • research/ai-urban-flows.md
  • research/air-pollution.md
  • research/cardiac-pathology.md
  • research/combustion.md
  • research/index.md
  • research/urban-flows.md
  • software/advanced.md
  • software/applications/index.md
  • software/databases/index.md
  • software/downloads.md
  • software/index.md
  • software/notebooks/index.md
  • software/resources/index.md
  • software/tutorial.md
  • software/tutorials/index.md
  • software/videos/index.md

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 win

CRITICAL: 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:

  1. Process the file as a collection member
  2. Generate the permalink (e.g., /software/applications/2026-combustion_tutorial/)
  3. Include the item in site.applications for gallery iteration

Without 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 area and tldr to 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"
fi

Repository: 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 -20

Repository: 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 -50

Repository: 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"
fi

Repository: 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 -20

Repository: daattali/beautiful-jekyll

Length of output: 1234


🏁 Script executed:

# Check the _config.yml file around line 58
head -70 _config.yml | tail -20

Repository: daattali/beautiful-jekyll

Length of output: 729


🏁 Script executed:

# Check the _includes/head.html file around lines 143-150
wc -l _includes/head.html

Repository: 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.html

Repository: daattali/beautiful-jekyll

Length of output: 712


🏁 Script executed:

# Get more context around the twitter meta tags
sed -n '135,160p' _includes/head.html

Repository: 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 twitter entry under social-network-links, but the head.html template (lines 149–150 in _includes/head.html) unconditionally renders site.social-network-links.twitter in 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: modelflows

Option 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
fi

Repository: 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:


🌐 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:


🏁 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 -n

Repository: 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 win

Remove duplicate exclude key 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 win

Empty 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 win

Fix 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 win

Fix 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 win

Front-matter field thumbnail will not render in SEO meta tags—use thumbnail-img instead.

The template at _includes/head.html:114-115 checks for page.thumbnail-img, but the front-matter here and across all research pages uses thumbnail. This mismatch will cause social/SEO thumbnail metadata to be absent.

Suggested fix: Rename all thumbnail: fields to thumbnail-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 win

Resolve 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 win

Complete 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 provided

Populate 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 win

Populate 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 win

Populate 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 win

Use 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 win

Guard write() against missing stored field.

Line 163 performs lookupObject<volScalarField>(type()) unconditionally. If write() is triggered before execute() 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 win

Fix function-object library name in the usage example.

Line 36 documents libfieldFunctionObjects.so, but this module builds libUserfieldFunctionObjects (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 win

Remove the unnecessary turbulence-model hard dependency in execute().

calcZfirst does not use turbModel, but execute() aborts the run if momentumTransportModel is 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 win

Use length dimensions for firstCellHeight field initialization.

At Line 76, the field is initialized as dimless, but values assigned later come from nearWallDist(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 .dep build 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 win

Deduplicate 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 win

Validate Prt and Pr before using them in denominators.

Line 245 (Pr/Prt_) and Line 255 (1/Pr) can generate Inf/NaN when Prt <= 0 or Pr <= 0, causing unstable alphat updates. 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). Since writeEntry("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 win

Guard z0 and clamp nut to prevent invalid wall-viscosity values.

Line 72 divides by z0_[facei] while Line 94 defaults z0_ to zero; this can produce invalid numerics. Line 78 can also write negative nut, 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 win

Validate Ks/Cs ranges when reading the dictionary.

Line 156 and Line 157 accept user-provided roughness fields without bounds checks. Invalid values can propagate into E() and then log(E*yPlus) in nut(), 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 -130

Repository: daattali/beautiful-jekyll

Length of output: 4870


Guard z0_ against zero before division in Edash calculation.

Line 72 computes Edash = (y + z0)/z0, which has a divide-by-zero path because z0_ defaults to 0.0 at line 94 and dictionary input at line 119 is not validated for positive values. Add max() guard with SMALL at the division point and validate z0_ 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 -100

Repository: 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 -80

Repository: 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 -80

Repository: 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 uses max(..., 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.H in the parent directory. In OpenFOAM, lnInclude directories 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 f

Repository: daattali/beautiful-jekyll

Length of output: 157


🏁 Script executed:

# Also search for the nutkRoughWallFunction file that's mentioned
find . -name "*nutkRoughWallFunction*" -type f

Repository: 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 -20

Repository: 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/files

Repository: 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.C

Repository: daattali/beautiful-jekyll

Length of output: 1869


Add the rough-wall implementation to the library manifest.

nutkRoughWallFunctionFvPatchScalarField.C is added in this PR but not listed in the Make/files manifest, so its runtime registration won't be linked into libUsermomentumTransportModels.

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 win

Do not commit toolchain-generated linux64GccDPInt32Opt build 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/files and Make/options in source control and generate linux64* 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 win

Over-constrained kramdown version prevents patch updates.

The constraint ~> 2.3.0 locks to patch 2.3.0 only. The previous constraint ~> 2.3 permitted any patch in the 2.3 series (e.g., 2.3.1, 2.3.2). Relax to ~> 2.3 to 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
done

Repository: daattali/beautiful-jekyll

Length of output: 461


Fix missing front-matter fields in _notebooks/2026-AcceleratingCFD.md.

The notebook 2026-AcceleratingCFD.md is 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
done

Repository: 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 -20

Repository: 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"
fi

Repository: 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"
fi

Repository: 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 -20

Repository: 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
fi

Repository: 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.md

Repository: 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 -20

Repository: 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 Size

Repository: 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.md

Repository: 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 -50

Repository: daattali/beautiful-jekyll

Length of output: 1170


Ensure the _resources/urban-datasets.md resource 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 win

Fix 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
done

Repository: 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.md

Repository: 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 -20

Repository: 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.md

Repository: 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.md

Repository: 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 -10

Repository: 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.md

Repository: 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.md

Repository: 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.md and _tutorials/template-sphinx-tutorial.md are empty and lack the required title, application, category, and tldr front-matter fields. With output: true in _config.yml, these are published as blank cards. Either populate these templates with the required fields or add them to the exclude list 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.videos is 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 title or aria-label attributes 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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 47cd658 and 18285a0.

📒 Files selected for processing (1)
  • _research/ai-models/ai-urban-flows/Air pollution.md

Comment thread _research/ai-models/ai-urban-flows/Air pollution.md
Comment thread _research/ai-models/ai-urban-flows/Air pollution.md
Comment thread _research/ai-models/ai-urban-flows/Air pollution.md Outdated
Comment thread _research/ai-models/ai-urban-flows/Air pollution.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 18285a0 and 8f06e39.

📒 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.md
  • research/ai-cardiac.md
  • research/cfd-cardiac.md
  • research/index.md

Comment thread _applications/2026-cardiac-pathology.md Outdated
Comment thread _applications/2026-cardiac-pathology.md Outdated
layout: page
category: "AI & Data-Driven Models"
topic: "Cardiac Pathology Recognition"
thumbnail: "assets/img/ModelFlows_Cardiac_IMAGE01.jpg"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

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).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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.

Comment thread _research/cfd-simulations/cardiac-pathology/2026-cfd-simulations-cvds.md Outdated
Comment thread _research/cfd-simulations/cardiac-pathology/2026-cfd-simulations-cvds.md Outdated
Comment thread _research/cfd-simulations/cardiac-pathology/2026-cfd-simulations-cvds.md Outdated
Comment thread _tutorials/cardiac-tutorials.md
Comment thread research/ai-cardiac.md
Comment on lines +13 to +19
<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">

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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.

Arindam032192 and others added 30 commits June 26, 2026 11:21
Update 2026-urban-flows.md
Update 2026-urban-flows.md
Update 2026-urban-flows.md
* 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.