00001 #include <stdio.h>
00002 #include <stdlib.h>
00003 #include <math.h>
00004 #include "cebfip78.h"
00005 #include "global.h"
00006 #include "genfile.h"
00007
00008
00009
00010
00011
00012
00013
00014 cebfip78::cebfip78()
00015 {
00016 t_end_curing=0.0;
00017 t_loading=0.0;
00018 humidity=0.0;
00019 cs_thickness=0.0;
00020 fcyl28=0.0;
00021 p6=1.0;
00022 }
00023
00024
00025 cebfip78::~cebfip78()
00026 {
00027 }
00028
00029
00030
00031
00032
00033
00034
00035
00036 void cebfip78::read (XFILE *in)
00037 {
00038 xfscanf (in,"%lf %lf %lf %lf %lf",&t_end_curing,&t_loading,&humidity,&cs_thickness,&fcyl28);
00039 }
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 void cebfip78::compliance (double t_current,double &fi_t_t_dash,double &fcyl_t_dash,double &eps_shr_t)
00053
00054
00055
00056
00057
00058
00059 {
00060 double thick,d, eps_sh1, eps_sh2, eps_sh0, k1, k2, k3, k4, beta_sh_t, beta_sh_t0, e_28;
00061 double beta_i, beta_a, beta_d, phi_d, phi_f1, phi_f2, phi_f, beta_f_t, beta_f_t_dash;
00062 double beta_c_28, beta_c_t_dash, E_t_dash_SI, phi_t_t_dash;
00063 double iv=0;
00064 tablefunct tb;
00065 tb.itype=piecewiselin;
00066 tb.asize=4;
00067 tb.x=new double[4];
00068 tb.y=new double[4];
00069 tb.x[0]=0.4;
00070 tb.x[1]=0.7;
00071 tb.x[2]=0.9;
00072 tb.x[3]=1.0;
00073 tb.y[0]=1.0;
00074 tb.y[1]=1.5;
00075 tb.y[2]=5.0;
00076 tb.y[3]=30.0;
00077
00078
00079
00080 thick=cs_thickness*100.0;
00081
00082 if (humidity>=0.4 && humidity<=1.0) iv=tb.getval(humidity);
00083 else{
00084 perror("\ncebfip78::compliance\nRelative humidity of environment is out of range (cebfip78.cpp)");
00085 exit(2);
00086 }
00087 d=2.0*thick*iv;
00088
00089
00090
00091 if (t_current>t_end_curing){
00092 eps_sh1 =(775.0*humidity*humidity*humidity-1565.0*humidity*humidity+1103.25*humidity-303.25)*0.00001;
00093 eps_sh2 =exp(0.00174*d-0.32/d-log(pow(d,0.251)/1.9));
00094 eps_sh0 =eps_sh1*eps_sh2;
00095 k3 =11.8*d+16.0;
00096 k4 =exp(-0.00257*d+0.32/d+log(0.22*pow(d,0.4)));
00097 beta_sh_t =pow(t_current/(t_current+k3),k4);
00098 beta_sh_t0=pow(t_end_curing/(t_end_curing+k3),k4);
00099 eps_shr_t =eps_sh0*(beta_sh_t-beta_sh_t0)*p6;
00100 }
00101 else{
00102 perror("\ncebfip78::compliance\nCurrent time is less than time and of curing (cebfip78.cpp)");
00103 exit(2);
00104 }
00105
00106
00107
00108 beta_c_28 =pow(28.0/(28.0+47.0),1./2.45);
00109 beta_c_t_dash=pow(t_loading/(t_loading+47.0),1./2.45);
00110 e_28 =1.25*9500*pow(fcyl28/1000.0,1./3.);
00111 fcyl_t_dash =fcyl28*beta_c_t_dash/beta_c_28;
00112
00113
00114
00115 if (t_current>t_loading){
00116 beta_i =0.875*pow((t_loading+47.0)/t_loading,1.0/7.35);
00117 beta_a =0.8*pow(1.0-t_loading/(t_loading+47.0),1.0/2.45);
00118 beta_d =pow((t_current-t_loading)/(t_current-t_loading+328.0),1.0/4.2);
00119 phi_d =0.4;
00120 phi_f1 =4.45-3.5*humidity;
00121 phi_f2 =exp(4.4e-5*d-0.357/d-log(pow(d,0.1667)/2.6));
00122 phi_f =phi_f1*phi_f2;
00123 k1 =exp(5.02/d+log(6.95*pow(d,1.25)));
00124 k2 =exp(0.00144*d-1.1/d-log(1.005*pow(d,0.2954)));
00125 beta_f_t =pow(t_current/(t_current+k1),k2);
00126 beta_f_t_dash=pow(t_loading/(t_loading+k1),k2);
00127 fi_t_t_dash =(beta_i+beta_a+phi_d*beta_d+phi_f*(beta_f_t-beta_f_t_dash))/e_28/1000.0;
00128 E_t_dash_SI =e_28/(beta_i+beta_a)*1000.0;
00129 }
00130 else{
00131 beta_i =0.875*pow((t_loading+47.0)/t_loading,1.0/7.35);
00132 beta_a =0.8*pow(1.0-t_loading/(t_loading+47.0),1.0/2.45);
00133 E_t_dash_SI=e_28/(beta_i+beta_a)*1000.0;
00134 fi_t_t_dash=1.0/e_28/1000.0;
00135 }
00136
00137
00138
00139 fcyl_t_dash =fcyl_t_dash;
00140 fi_t_t_dash =fi_t_t_dash;
00141 phi_t_t_dash=E_t_dash_SI*fi_t_t_dash-1.0;
00142 eps_shr_t =eps_shr_t;
00143
00144 return;
00145 }
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156 void cebfip78::matstiff (matrix &d,long ipp)
00157 {
00158 Mm->elmatstiff (d,ipp);
00159 }