00001 #include "creepdam.h"
00002 #include "creep.h"
00003 #include "creep_b3.h"
00004 #include "creep_rspec.h"
00005 #include "creepb.h"
00006 #include "creep_dpl.h"
00007 #include "matrix.h"
00008 #include "vector.h"
00009 #include "elastisomat.h"
00010 #include "global.h"
00011 #include "intpoints.h"
00012 #include "vecttens.h"
00013 #include <math.h>
00014
00015
00016
00017
00018 creepdam::creepdam (void)
00019 {
00020
00021 }
00022
00023
00024
00025
00026 creepdam::~creepdam (void)
00027 {
00028
00029 }
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 void creepdam::matstiff (matrix &d,long ipp,long im, long ido)
00042 {
00043 long ncompo = Mm->givencompeqother(ipp, im+1);
00044 Mm->matstiff(d, ipp, im+2, ido+ncompo);
00045 }
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099 void creepdam::nlstressesincr(long ipp, long im, long ido)
00100 {
00101 double nu;
00102
00103 if (Mm->ip[ipp].ssst == planestress)
00104 {
00105 nu = Mm->give_actual_nu(ipp);
00106 Mm->ip[ipp].strain[3] = -nu / (1.0 - nu) * (Mm->ip[ipp].strain[0]+Mm->ip[ipp].strain[1]);
00107 }
00108
00109
00110 Mm->computenlstressesincr(ipp, im+1, ido);
00111
00112 return;
00113 }
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 void creepdam::nlstresses (long ipp, long im, long ido)
00128 {
00129 long i, idem;
00130 long ncomp = Mm->ip[ipp].ncompstr;
00131 long ncompo;
00132 double nu;
00133 vector epsback(ncomp);
00134 vector epsirr(ncomp);
00135
00136
00137 if (Mm->ip[ipp].ssst == planestress)
00138 {
00139 idem = Mm->ip[ipp].gemid();
00140 nu = Mm->eliso[Mm->ip[ipp].idm[idem]].nu;
00141 Mm->ip[ipp].strain[3] = -nu / (1.0 - nu) * (Mm->ip[ipp].strain[0]+Mm->ip[ipp].strain[1]);
00142 }
00143
00144
00145 for (i=0;i<ncomp;i++)
00146 epsback[i] = Mm->ip[ipp].strain[i];
00147
00148 Mm->giveirrstrains(ipp, im+1, ido, epsirr);
00149 for (i=0;i<ncomp;i++)
00150 Mm->ip[ipp].strain[i] -= epsirr[i];
00151
00152
00153 ncompo = Mm->givencompeqother(ipp, im+1);
00154
00155 if ((Mm->ip[ipp].hmt & 2) && (Mp->nonlocphase == 2))
00156 Mm->compnonloc_nlstresses(ipp, im+2, ido+ncompo);
00157 else
00158 Mm->computenlstresses(ipp, im+2, ido+ncompo);
00159
00160
00161 for (i=0;i<ncomp;i++)
00162 Mm->ip[ipp].strain[i] = epsback[i];
00163 }
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177 void creepdam::nonloc_nlstresses (long ipp, long im, long ido)
00178 {
00179 long i, idem;
00180 long ncomp = Mm->ip[ipp].ncompstr;
00181 long ncompo;
00182 double nu;
00183 vector epsback(ncomp);
00184 vector epsirr(ncomp);
00185
00186
00187 if (Mm->ip[ipp].ssst == planestress)
00188 {
00189 idem = Mm->ip[ipp].gemid();
00190 nu = Mm->eliso[Mm->ip[ipp].idm[idem]].nu;
00191 Mm->ip[ipp].strain[3] = -nu / (1.0 - nu) * (Mm->ip[ipp].strain[0]+Mm->ip[ipp].strain[1]);
00192 }
00193
00194
00195 for (i=0;i<ncomp;i++)
00196 epsback[i] = Mm->ip[ipp].strain[i];
00197
00198 Mm->giveirrstrains(ipp, im+1, ido, epsirr);
00199 for (i=0;i<ncomp;i++)
00200 Mm->ip[ipp].strain[i] -= epsirr[i];
00201
00202
00203 ncompo = Mm->givencompeqother(ipp, im+1);
00204
00205 if ((Mm->ip[ipp].hmt & 2) && (Mp->nonlocphase == 2))
00206 Mm->compnonloc_nlstresses(ipp, im+2, ido+ncompo);
00207 else
00208 Mm->compnonloc_nlstresses(ipp, im+2, ido+ncompo);
00209
00210
00211 for (i=0;i<ncomp;i++)
00212 Mm->ip[ipp].strain[i] = epsback[i];
00213 }
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226 void creepdam::updateval (long ipp, long im, long ido)
00227 {
00228
00229
00230
00231 long ncompo = Mm->givencompeqother(ipp, im+1);
00232 Mm->updateipvalmat (ipp,im+1,ido);
00233 Mm->updateipvalmat (ipp,im+2,ido+ncompo);
00234 }
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250 void creepdam::initvalues (long lcid, long ipp, long im, long ido)
00251 {
00252 long ncompo = Mm->givencompeqother(ipp, im+1);
00253 Mm->initvalues(lcid,ipp,im+1,ido);
00254 Mm->initvalues(lcid,ipp,im+2,ido+ncompo);
00255 }
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268 double creepdam::give_actual_ft (long ipp, long im, long ido)
00269 {
00270 double ft;
00271 ft = Mm->give_actual_ft(ipp, im+1, ido);
00272 return ft;
00273 }
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286 double creepdam::give_actual_fc (long ipp, long im, long ido)
00287 {
00288 double fc;
00289 long ncompo_cr = Mm->givencompeqother(ipp, im+1);
00290
00291 fc = Mm->give_actual_fc(ipp, im+2, ido+ncompo_cr);
00292 return fc;
00293 }