├── models ├── unconfinedbilinear.txt ├── steelbilinear.txt └── confinedbilinear.txt ├── CUMBIACIR.m ├── CUMBIARECT.m ├── CUMBIA Theory and User Guide.pdf ├── Raynor.m ├── steelking.m ├── manderun.m ├── manderunlw.m ├── README.md ├── LICENSE ├── manderconflw.m └── manderconf.m /models/unconfinedbilinear.txt: -------------------------------------------------------------------------------- 1 | 0 0 2 | 0.002 30 3 | -------------------------------------------------------------------------------- /models/steelbilinear.txt: -------------------------------------------------------------------------------- 1 | 0 0 2 | 0.002 2 3 | 0.22 2 4 | -------------------------------------------------------------------------------- /models/confinedbilinear.txt: -------------------------------------------------------------------------------- 1 | 0 0 2 | 0.002 1 3 | 0.1 1 4 | -------------------------------------------------------------------------------- /CUMBIACIR.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuisMontejo/CUMBIA/HEAD/CUMBIACIR.m -------------------------------------------------------------------------------- /CUMBIARECT.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuisMontejo/CUMBIA/HEAD/CUMBIARECT.m -------------------------------------------------------------------------------- /CUMBIA Theory and User Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuisMontejo/CUMBIA/HEAD/CUMBIA Theory and User Guide.pdf -------------------------------------------------------------------------------- /Raynor.m: -------------------------------------------------------------------------------- 1 | function [es,fs] = Raynor(Es,fy,fsu,esh,esu,dels,C1,Ey) 2 | 3 | 4 | es = [0:dels:esu]; 5 | ey = fy/Es; 6 | fsh = fy + (esh-ey)*Ey 7 | 8 | for i=1:length(es) 9 | if es(i)=ey & es(i)<=esh 13 | fs(i) = fy+(es(i)-ey)*Ey; 14 | end 15 | if es(i)>esh 16 | fs(i) = fsu-(fsu-fsh)*(((esu-es(i))/(esu-esh))^C1); 17 | end 18 | end 19 | 20 | 21 | -------------------------------------------------------------------------------- /steelking.m: -------------------------------------------------------------------------------- 1 | function [es,fs] = steelking(Es,fy,fsu,esh,esu,dels) 2 | 3 | r = esu - esh; 4 | m = ((fsu/fy)*((30*r+1)^2)-60*r-1)/(15*(r^2)); 5 | es = [0:dels:esu]; 6 | ey = fy/Es; 7 | 8 | for i=1:length(es) 9 | if es(i)=ey & es(i)<=esh 13 | fs(i) = fy; 14 | end 15 | if es(i)>esh 16 | fs(i) = ((m*(es(i)-esh)+2)/(60*(es(i)-esh)+2) + (es(i)-esh)*(60-m)/(2*((30*r+1)^2)))*fy; 17 | end 18 | end 19 | 20 | 21 | -------------------------------------------------------------------------------- /manderun.m: -------------------------------------------------------------------------------- 1 | 2 | function [ec,fcu] = manderun(Ec,Ast,Dh,clb,s,fpc,fyh,eco,esm,espall,section,D,d,b,ncx,ncy,wi,dels) 3 | 4 | % unconfined concrete: 5 | 6 | ec = [0:dels:espall]; 7 | Esecu = fpc/eco; 8 | ru = Ec/(Ec-Esecu); 9 | xu = ec./eco; 10 | 11 | for i = 1:length(ec) 12 | if ec(i)<2*eco 13 | fcu(i) = fpc*xu(i)*ru/(ru-1+xu(i)^ru); 14 | end 15 | if (ec(i)>=2*eco & ec(i)<=espall) 16 | fcu(i) = fpc*(2*ru/(ru-1+2^ru))*(1-(ec(i)-2*eco)/(espall-2*eco)); 17 | end 18 | if ec(i)>espall 19 | fcu(i) = 0; 20 | end 21 | end 22 | 23 | -------------------------------------------------------------------------------- /manderunlw.m: -------------------------------------------------------------------------------- 1 | 2 | function [ec,fcu] = manderunlw(Ec,nbl,Dbl,Dh,clb,s,fpc,fyh,eco,esm,espall,section,D,d,b,ncx,ncy,wi,dels) 3 | 4 | 5 | % unconfined concrete: 6 | 7 | ec = [0:dels:espall]; 8 | Esecu = fpc/eco; 9 | ru = Ec/(Ec-Esecu); 10 | xu = ec./eco; 11 | ru2 = Ec/(Ec-1.8*fpc/eco); 12 | 13 | for i = 1:length(ec) 14 | if ec(i)=eco & ec(i)<1.3*eco 18 | fcu(i) = fpc*xu(i)*ru2/(ru2-1+xu(i)^ru2); 19 | end 20 | if (ec(i)>=1.3*eco & ec(i)<=espall) 21 | fcu(i) = fpc*(1.3*ru2/(ru2-1+1.3^ru2))*(1-(ec(i)-1.3*eco)/(espall-1.3*eco)); 22 | end 23 | if ec(i)>espall 24 | fcu(i) = 0; 25 | end 26 | end 27 | 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CUMBIA 2 | CUMBIA - a set matlab/octave codes for the analysis of reinforced concrete members 3 | 4 | cite as: Montejo, L. A., & Kowalsky, M. J. (2007). CUMBIA—Set of codes for the analysis of reinforced concrete members. CFL technical rep. no. IS-07, 1. 5 | 6 | ## Change log for v0.2 7 | 8 | Calculation of Mn was revised (there was a problem for some sections where Mn was not calculated in v0.1) 9 | 10 | Calculation of Mi(k) in the axial-moment interaction was revised (there was a problem for some sections where Mi(k) was not calculated in v0.1) 11 | 12 | Axial force values for the calculation of the axial-moment interaction curve were changed (depending on the section details, for compression axial load ratios greater than 70% the algorithm was not converging) 13 | 14 | Correction of concrete layers areas because of the presence of reinforcing bars in the layer was revised. 15 | 16 | The estimation of first yield curvature now includes the compression strain in the concrete (1.8*fpc/Ec), before it only checked for tensile strain in the rebar (fy/Es) 17 | “breaks” outside a loop were replaced with “returns” 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Luis Montejo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /manderconflw.m: -------------------------------------------------------------------------------- 1 | 2 | function [ec,fc] = manderconflw(Ec,Ast,Dh,clb,s,fpc,fy,eco,esm,espall,section,D,d,b,ncx,ncy,wi,dels,type) 3 | 4 | 5 | % confined concrete: 6 | 7 | sp = s - Dh; 8 | Ash = 0.25*pi*(Dh^2); 9 | 10 | 11 | switch lower(section) 12 | case 'rectangular' 13 | bc = b - 2*clb + Dh; 14 | dc = d - 2*clb + Dh; 15 | Asx = ncx*Ash; 16 | Asy = ncy*Ash; 17 | Ac = bc*dc; 18 | rocc = Ast/Ac; 19 | rox = Asx/(s*dc); 20 | roy = Asy/(s*bc); 21 | ros = rox + roy; 22 | ke = ((1 - sum(wi.^2)/(6*bc*dc)) * (1 - sp/(2*bc)) ... 23 | * (1-sp/(2*dc))) / (1 - rocc); 24 | ro = 0.5*ros; 25 | fpl = ke*ro*fy; 26 | 27 | case 'circular' 28 | ds = D - 2*clb + Dh; 29 | ros = 4*Ash/(ds*s); 30 | Ac = 0.25*pi*(ds^2); 31 | rocc = Ast/Ac; 32 | switch lower(type) 33 | case 'spirals' 34 | ke = (1-sp/(2*ds))/(1-rocc); 35 | case 'hoops' 36 | ke = ((1-sp/(2*ds))/(1-rocc))^2; 37 | otherwise 38 | disp('tranverse reinforcement should be spirals or hoops'); return; 39 | end 40 | fpl = 0.5*ke*ros*fy; 41 | 42 | otherwise 43 | disp('section not available'); return; 44 | end 45 | 46 | 47 | fpcc = (1+fpl/(2*fpc))*fpc; 48 | ecc = eco*(1 + 5*(fpcc/fpc-1)); 49 | Esec = fpcc/ecc; 50 | r = Ec/(Ec-Esec); 51 | ecu = 1.5*(0.004 + 1.4*ros*fy*esm/fpcc); 52 | 53 | ec = [0:dels:ecu]; 54 | x = (1/ecc)*ec; 55 | fc = fpcc*x*r./(r-1+x.^r); 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /manderconf.m: -------------------------------------------------------------------------------- 1 | 2 | function [ec,fc] = manderconf(Ec,Ast,Dh,clb,s,fpc,fy,eco,esm,espall,section,D,d,b,ncx,ncy,wi,dels,type) 3 | 4 | 5 | % confined concrete: 6 | 7 | sp = s - Dh; 8 | Ash = 0.25*pi*(Dh^2); 9 | 10 | 11 | switch lower(section) 12 | case 'rectangular' 13 | bc = b - 2*clb + Dh; 14 | dc = d - 2*clb + Dh; 15 | Asx = ncx*Ash; 16 | Asy = ncy*Ash; 17 | Ac = bc*dc; 18 | rocc = Ast/Ac; 19 | rox = Asx/(s*dc); 20 | roy = Asy/(s*bc); 21 | ros = rox + roy; 22 | ke = ((1 - sum(wi.^2)/(6*bc*dc)) * (1 - sp/(2*bc)) ... 23 | * (1-sp/(2*dc))) / (1 - rocc); 24 | ro = 0.5*ros; 25 | fpl = ke*ro*fy; 26 | 27 | case 'circular' 28 | ds = D - 2*clb + Dh; 29 | ros = 4*Ash/(ds*s); 30 | Ac = 0.25*pi*(ds^2); 31 | rocc = Ast/Ac; 32 | switch lower(type) 33 | case 'spirals' 34 | ke = (1-sp/(2*ds))/(1-rocc); 35 | case 'hoops' 36 | ke = ((1-sp/(2*ds))/(1-rocc))^2; 37 | otherwise 38 | disp('tranverse reinforcement should be spirals or hoops'); return; 39 | end 40 | fpl = 0.5*ke*ros*fy; 41 | 42 | otherwise 43 | disp('section not available'); return; 44 | end 45 | 46 | 47 | fpcc = (-1.254 + 2.254*sqrt(1 + 7.94*fpl/fpc) - 2*fpl/fpc)*fpc; 48 | ecc = eco*(1 + 5*(fpcc/fpc-1)); 49 | Esec = fpcc/ecc; 50 | r = Ec/(Ec-Esec); 51 | ecu = 1.5*(0.004 + 1.4*ros*fy*esm/fpcc); 52 | 53 | 54 | ec = [0:dels:ecu]; 55 | x = (1/ecc)*ec; 56 | fc = fpcc*x*r./(r-1+x.^r); 57 | 58 | 59 | 60 | 61 | --------------------------------------------------------------------------------