A modern REST API for concrete mix design using the IPT/EPUSP method, widely adopted in Brazil for precise concrete proportioning based on experimental data.
- IPT/EPUSP Method - Complete implementation with Abrams, Lyse, and Molinari laws
- NBR Compliance - Automatic verification against NBR 6118:2023 and NBR 12655:2022
- Interactive Playground - Web interface for real-time testing
- Dosage Charts - Visualization of regression curves
- Clean Architecture - Maintainable and testable codebase
- Edge Runtime - Fast, globally distributed API
| Document | Description |
|---|---|
| API Reference | Complete endpoint documentation with examples |
| Mathematical Models | Abrams, Lyse, and Molinari laws explained |
| Normative Standards | NBR 6118, NBR 12655, NBR 8953 |
| Architecture | Clean Architecture layers and data flow |
# Clone the repository
git clone https://github.com/fcfim/Concrete-Mix-Design-IPT-Method.git
cd Concrete-Mix-Design-IPT-Method
# Install dependencies
npm install
# Start development server
npm run devcurl -X POST http://localhost:3000/api/v1/dosage \
-H "Content-Type: application/json" \
-d '{
"experimentalPoints": [
{"m": 3.5, "ac": 0.45, "fcj": 42, "density": 2350},
{"m": 5.0, "ac": 0.58, "fcj": 32, "density": 2300},
{"m": 6.5, "ac": 0.72, "fcj": 22, "density": 2250}
],
"target": {
"fck": 30,
"sd": 5.5,
"aggressivenessClass": 2,
"elementType": "CA",
"slump": 100,
"mortarContent": 52
}
}'{
"success": true,
"data": {
"finalTrace": {
"cement": 1,
"sand": 1.56,
"gravel": 2.36,
"water": 0.49
},
"consumption": {
"cement": 432,
"sand": 674,
"gravel": 1019,
"water": 212
},
"parameters": {
"fcjTarget": 39.08,
"targetAC": 0.486,
"targetM": 3.92
}
}
}The IPT/EPUSP method uses three experimental traces (Rich, Pilot, Lean) to determine optimal concrete proportions:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β INPUT: 3 Experimental Traces β
β Rico: m=3.5, a/c=0.45, fcj=42 MPa β
β Piloto: m=5.0, a/c=0.58, fcj=32 MPa β
β Pobre: m=6.5, a/c=0.72, fcj=22 MPa β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1οΈβ£ Abrams Law: fcj = kβ / kβ^(a/c) β target a/c β
β 2οΈβ£ Lyse Law: m = kβ + kβ Γ (a/c) β target m β
β 3οΈβ£ Molinari: C = 1000 / (kβ
+ kβ Γ m) β cement kg/mΒ³ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β OUTPUT: Final Unit Trace β
β 1 : 1.56 : 2.36 : 0.49 β
β (cement : sand : gravel : water) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β See Mathematical Models for detailed formulas.
Calculate concrete mix design from experimental data.
| Field | Type | Description |
|---|---|---|
experimentalPoints |
array | Minimum 3 experimental traces |
experimentalPoints[].m |
number | Dry trace ratio (0.1-15) |
experimentalPoints[].ac |
number | Water/cement ratio (0.1-1.0) |
experimentalPoints[].fcj |
number | Compressive strength (MPa) |
experimentalPoints[].density |
number | Fresh density (kg/mΒ³) |
target.fck |
number | Characteristic strength (MPa) |
target.sd |
number | Standard deviation (MPa) |
target.aggressivenessClass |
1-4 | Environmental class (NBR 6118) |
target.elementType |
"CA"/"CP" | Reinforced/Prestressed |
target.slump |
number | Slump test (mm) |
target.mortarContent |
number | Mortar content (%) |
β See API Reference for complete documentation.
This API enforces Brazilian normative requirements:
| Standard | Description | Key Rules |
|---|---|---|
| NBR 6118:2023 | Concrete structures | Max a/c, min fck per environment |
| NBR 12655:2022 | Production control | f_cj = f_ck + 1.65ΓSd formula |
| NBR 8953:2015 | Concrete classes | Strength classifications |
β See Normative Standards for detailed tables.
Clean Architecture with 4 layers:
src/
βββ app/ # Presentation (Next.js routes, UI)
βββ core/
β βββ domain/ # Entities (TraceResult, DosageTarget)
β βββ application/ # Use Cases (CalculateDosageUseCase)
β βββ infrastructure/
β βββ math/ # Abrams, Lyse, Molinari services
β βββ normative/# NBR 6118, NBR 12655 services
βββ shared/
βββ lib/schemas/ # Zod validation
β See Architecture for data flow diagrams.
| Technology | Purpose |
|---|---|
| Next.js 15 | Framework (App Router) |
| TypeScript | Type safety |
| Zod | Runtime validation |
| Recharts | Dosage charts |
| Tailwind CSS | Styling |
| shadcn/ui | UI components |
Access the interactive playground at http://localhost:3000:
- Pre-filled experimental data
- Real-time calculation
- Dosage charts (Abrams, Lyse, Molinari)
- JSON response viewer
- Dark/Light mode toggle
| Standard | Title |
|---|---|
| NBR 6118:2023 | Projeto de estruturas de concreto |
| NBR 12655:2022 | Concreto - Preparo e controle |
| NBR 8953:2015 | ClassificaΓ§Γ£o do concreto |
- IBRACON - Instituto Brasileiro do Concreto
- IPT/EPUSP Method - Escola PolitΓ©cnica USP
- TUTIKIAN, Bernardo F.; HELENE, Paulo. Dosagem dos Concretos de Cimento Portland. In: ISAIA, Geraldo Cechella (ed.).βConcreto: CiΓͺncia e Tecnologia. SΓ£o Paulo: Ibracon, 2011. Cap. 12, p. 38. DisponΓvel em: https://www.phd.eng.br/wpcontent/uploads/2014/07/lc56.pdf. Acesso em: 12 ago. 2021.
Filipe Carboni Fim - Civil Engineer
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please read our contributing guidelines before submitting a PR.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request