foam-cfd-unified-7B

A single Qwen2.5-Coder-7B-Instruct model fine-tuned for end-to-end CFD workflows โ€” covering Gmsh mesh generation, OpenFOAM boundary condition files, and BC JSON patch specs.


What this model does

Task Input Output
Mesh generation Plain-English geometry description Gmsh .geo script
OpenFOAM case files Flow prompt + mesh patches 0/U, 0/p, 0/k, 0/epsilon BC files
BC patch spec Flow description + existing BC template Compact JSON diff applied on top of template

Example prompts:

  • "Lid driven cavity, Re=1000, 0.1m x 0.1m"
  • "Flow over a cylinder, diameter=0.05m, Re=100"
  • "2D backward-facing step, step height 0.05m, Re=500"
  • "NACA 0012 airfoil, chord=1m, AoA=5deg, Re=1e6"

Model info

Field Value
Base model Qwen2.5-Coder-7B-Instruct
Fine-tuning method QLoRA (LoRA r=64, alpha=16, 4-bit NF4) via Unsloth
Training examples 20,505 (mesh-gen + foam-gen + patch-gen + raft-patch-gen)
Validation examples 2,277
VRAM required ~6 GB (4-bit inference) / ~16 GB (full precision)
Sequence length 4096 tokens

Quickstart โ€” use with the foam-cfd-ai server

1. Clone the deployment repo

git clone https://github.com/AGN000/foam-cfd-deploy
cd foam-cfd-deploy
pip install -r requirements.txt

2. Download this model

pip install huggingface_hub
python3 -c "
from huggingface_hub import snapshot_download
snapshot_download(
    'arungovindneelan/foam-cfd-unified-7b',
    local_dir='checkpoints/unified/merged'
)
"

3. Build the RAG index

Requires OpenFOAM 11 tutorials (usually at /opt/openfoam11/tutorials):

python3 -m rag.build_index

4. Start the inference server

python3 -m inference.server --model checkpoints/unified/merged --port 8000

5. Run a simulation end-to-end

# Quick demo
python3 demo.py "Lid driven cavity, Re=1000"

# Or call the API directly
curl -X POST http://localhost:8000/simulate \
  -H "Content-Type: application/json" \
  -d '{"prompt": "flow over a cylinder, Re=100, diameter 0.1m"}'

Direct Python usage (without the server)

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

model_id = "arungovindneelan/foam-cfd-unified-7b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.float16,
    device_map="auto",
)

# Generate a Gmsh mesh script
messages = [
    {"role": "system", "content": "You are a CFD mesh generation expert. Generate valid Gmsh .geo scripts."},
    {"role": "user", "content": "Create a 2D lid-driven cavity mesh, 0.1m x 0.1m, structured 50x50 grid."},
]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=1024, temperature=0.1, do_sample=True)

response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
print(response)

System requirements

  • Linux (Ubuntu 20.04+)
  • Python 3.10+
  • NVIDIA GPU with >= 8 GB VRAM (tested on H100, A100, RTX 3090)
  • CUDA 12.x
  • OpenFOAM 11 (for simulation โ€” not required for model inference alone)

Repository structure

foam-cfd-ai/
  checkpoints/unified/merged/   <- this model
  inference/
    server.py                   <- FastAPI server (POST /generate /mesh /simulate)
    mesh_pipeline.py            <- Gmsh script generation + validation
  rag/
    build_index.py              <- build vector store from OpenFOAM tutorials
    llm_case_generator.py       <- LLM-driven BC file generation
    rag_case_builder.py         <- RAG + LLM -> OpenFOAM case directory
    retriever.py                <- vector search over tutorial chunks
  simulation/
    case_builder.py             <- hardcoded fallback case builder
    foam_runner.py              <- runs foamRun -solver incompressibleFluid
  training/
    train.py                    <- QLoRA fine-tuning (Unsloth + TRL)
    config_unified.yaml         <- training config for this model
  demo.py                       <- end-to-end demo script
  requirements.txt

API endpoints (when server is running)

Endpoint Method Description
/health GET Server health check
/generate POST Generate Gmsh .geo script from prompt
/mesh POST Generate + validate mesh, return stats
/simulate POST Full pipeline: mesh โ†’ OpenFOAM case โ†’ run โ†’ results

Example: /simulate

curl -X POST http://localhost:8000/simulate \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "NACA 0012 airfoil, chord 1m, AoA 5 degrees, Re 1e6",
    "n_iter": 500
  }'

Response:

{
  "status": "converged",
  "solver": "simpleFoam",
  "iterations": 487,
  "residuals": {
    "Ux": {"initial": 1.0, "final": 3.2e-5},
    "Uy": {"initial": 1.0, "final": 8.7e-5},
    "p":  {"initial": 1.0, "final": 2.1e-4}
  },
  "case_dir": "/tmp/foam_cases/20260407_094950_airfoil"
}

Training data breakdown

Task Examples Description
mesh-gen ~5,000 Gmsh .geo script generation
foam-gen ~5,000 Full OpenFOAM BC file generation
patch-gen ~5,000 JSON BC patch spec generation
raft-patch-gen ~5,505 RAFT-style retrieval-augmented patch generation
Total 20,505 Unified training set

License

Apache 2.0 โ€” same as the Qwen2.5-Coder base model.

Downloads last month
598
Safetensors
Model size
8B params
Tensor type
BF16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for arungovindneelan/foam-cfd-unified-7b

Base model

Qwen/Qwen2.5-7B
Finetuned
(332)
this model