00001 #include <stdio.h>
00002 #include <stdlib.h>
00003 #include <math.h>
00004 #include "aci78.h"
00005 #include "global.h"
00006 #include "genfile.h"
00007
00008
00009
00010
00011
00012
00013 aci78::aci78()
00014 {
00015 t_end_curing=0.0;
00016 slump=0.0;
00017 density=0.0;
00018 ratio_ac=0.0;
00019 ratio_wc=0.0;
00020 ratio_as=0.0;
00021 humidity=0.0;
00022 cs_thickness=0.0;
00023 air_content=0.0;
00024 p6=1.0;
00025 fcyl28=0.0;
00026 curing=0;
00027 }
00028
00029 aci78::~aci78()
00030 {}
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 void aci78::read (XFILE *in)
00043 {
00044 xfscanf (in,"%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %ld %ld",
00045 &t_end_curing,&t_loading,&slump,&density,&ratio_ac,&ratio_wc,
00046 &ratio_as,&humidity,&cs_thickness,&air_content,&fcyl28,&curing,&concrete_type);
00047 }
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 void aci78::compliance (double t_current,double &fi_t_t_dash,double &fcyl_t_dash,double &eps_shr_t)
00061
00062
00063
00064
00065
00066 {
00067
00068
00069
00070 double c_SI, acon=0, bcon=0;
00071 double eps_sh_inf, k_1, k_2, k_3, k_4=0, k_6, k_7;
00072 double q_1=0, q_3, q_4, q_5, q_6=0, q_7, q_8, phi_inf;
00073 double phi_t_t_dash,E_t_dash_SI;
00074 tablefunct tb;
00075
00076
00077
00078 double thick_mm = cs_thickness*1000.0;
00079 double d_av_mm = 4.0*thick_mm;
00080 double slump_mm = slump*1000.;
00081
00082
00083
00084 c_SI=density/(1.0+ratio_ac+ratio_wc);
00085
00086
00087
00088 if (t_current>t_end_curing){
00089
00090 if (humidity>=0.4 && humidity<=0.8) q_1=1.4-humidity;
00091 else if (humidity>0.8 && humidity<=1.0) q_1=3.0-3.0*humidity;
00092 else{
00093 perror("\naci78::compliance\nRelative humidity of environment is out of range");
00094 exit(2);
00095 }
00096
00097
00098 q_3=0.89+0.00264*slump_mm;
00099
00100
00101 if (d_av_mm <=50.0) q_4=1.35;
00102 else if (d_av_mm<=150.0){
00103 tb.itype=lagrange;
00104 tb.asize=5;
00105 tb.x=new double[5];
00106 tb.y=new double[5];
00107 tb.x[0]=50.0;
00108 tb.x[1]=75.0;
00109 tb.x[2]=100.0;
00110 tb.x[3]=125.0;
00111 tb.x[4]=150.0;
00112 tb.y[0]=1.35;
00113 tb.y[1]=1.25;
00114 tb.y[2]=1.17;
00115 tb.y[3]=1.08;
00116 tb.y[4]=1.00;
00117 q_4=tb.getval(d_av_mm);
00118 }
00119 else if (d_av_mm<=380.0){
00120 if (t_current-t_end_curing<=365.0) q_4=1.23-0.0015*d_av_mm;
00121 else q_4=1.17-0.0015*d_av_mm;
00122 }
00123 else q_4=1.2*exp(-0.00473*thick_mm);
00124
00125
00126 q_5=1.0;
00127 if(curing!=STEAM_CURING){
00128 if (t_end_curing<=1.0) q_5=1.0;
00129 if (t_end_curing<=90.0){
00130 tb.itype=lagrange;
00131 tb.asize=6;
00132 tb.x=new double[6];
00133 tb.y=new double[6];
00134 tb.x[0]=1.0;
00135 tb.x[1]=3.0;
00136 tb.x[2]=7.0;
00137 tb.x[3]=14.0;
00138 tb.x[4]=28.0;
00139 tb.x[5]=90.0;
00140 tb.y[0]=1.2;
00141 tb.y[1]=1.1;
00142 tb.y[2]=1.0;
00143 tb.y[3]=0.93;
00144 tb.y[4]=0.86;
00145 tb.y[5]=0.75;
00146 q_5=tb.getval(t_end_curing);
00147 }
00148 else q_5=0.75;
00149 }
00150
00151
00152 if(1.0/ratio_as<=0.5) q_6=0.3+1.4/ratio_as;
00153 else q_6=0.9+0.2/ratio_as;
00154
00155
00156 q_7=0.95+0.008*air_content;
00157
00158
00159 q_8=0.75+0.00061*c_SI;
00160
00161 eps_sh_inf=780.0*1.0e-6*q_1*q_3*q_4*q_5*q_6*q_7*q_8;
00162
00163
00164 if (curing!=STEAM_CURING) eps_shr_t=(t_current-t_end_curing)/(35.0+t_current-t_end_curing)*eps_sh_inf*p6;
00165 else eps_shr_t=(t_current-t_end_curing)/(55.0+t_current-t_end_curing)*eps_sh_inf*p6;
00166 }
00167 else{
00168 perror("\naci78::compliance\nCurrent time is less than time and of curing");
00169 exit(2);
00170 }
00171
00172
00173
00174
00175 if (t_current>t_loading){
00176 k_1=1.27-0.67*humidity;
00177 if(curing==STEAM_CURING) k_2=1.13*pow(t_loading,-0.095);
00178 else k_2=1.25*pow(t_loading,-0.118);
00179
00180 k_3=0.82+0.00264*slump_mm;
00181
00182
00183 if (d_av_mm <=50.0) k_4=1.3;
00184 else if (d_av_mm<=150.0){
00185 tb.itype=lagrange;
00186 tb.asize=5;
00187 tb.x=new double[5];
00188 tb.y=new double[5];
00189 tb.x[0]=50.0;
00190 tb.x[1]=75.0;
00191 tb.x[2]=100.0;
00192 tb.x[3]=125.0;
00193 tb.x[4]=150.0;
00194 tb.y[0]=1.30;
00195 tb.y[1]=1.17;
00196 tb.y[2]=1.11;
00197 tb.y[3]=1.04;
00198 tb.y[4]=1.10;
00199 k_4=tb.getval(d_av_mm);
00200 }
00201 else if (d_av_mm<=380.0){
00202 if (t_current-t_loading<=365.0) k_4=1.14-0.91e-3*d_av_mm;
00203 else k_4=1.14-0.67e-3*d_av_mm;
00204 }
00205 else k_4=2.0/3.0*(1.0+1.13*exp(-0.0212*thick_mm));
00206
00207
00208 k_6=0.88+0.24/ratio_as;
00209 k_7=0.46+0.09*air_content;
00210 if (k_7<1.0) k_7=1.0;
00211
00212 phi_inf =2.35*k_1*k_2*k_3*k_4*k_6*k_7;
00213 phi_t_t_dash=pow(t_current-t_loading,0.6)/(10.0+pow(t_current-t_loading,0.6))*phi_inf;
00214 }
00215 else{
00216 fi_t_t_dash = 0.0;
00217 phi_t_t_dash = 0.0;
00218 }
00219
00220
00221 if (concrete_type==1){
00222 if (curing != STEAM_CURING){
00223 acon=4.00;
00224 bcon=0.85;
00225 }
00226 else{
00227 acon=1.00;
00228 bcon=0.95;
00229 }
00230 }
00231 else if (concrete_type==3){
00232 if (curing != STEAM_CURING){
00233 acon=2.30;
00234 bcon=0.92;
00235 }
00236 else{
00237 acon=0.70;
00238 bcon=0.98;
00239 }
00240 }
00241 else{
00242 perror("\naci78::compliance\nUnsupported concrete type");
00243 exit(2);
00244 }
00245
00246
00247
00248 fcyl_t_dash=fcyl28*t_loading/(acon+bcon*t_loading);
00249 E_t_dash_SI =42.8*pow(density*density*density*fcyl_t_dash*0.001,0.5);
00250 fi_t_t_dash =(1.0+phi_t_t_dash)/E_t_dash_SI;
00251 eps_shr_t=-eps_shr_t;
00252 phi_t_t_dash =phi_t_t_dash;
00253 }
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264 void aci78::matstiff (matrix &d,long ipp)
00265 {
00266 Mm->elmatstiff (d,ipp);
00267 }
00268