00001 #include "therisomat.h"
00002 #include "global.h"
00003 #include "matrix.h"
00004 #include "intpoints.h"
00005
00006
00007
00008
00009
00010
00011
00012
00013 therisomat::therisomat (void)
00014 {
00015 alpha=0.0;
00016 }
00017
00018
00019
00020
00021
00022
00023
00024
00025 therisomat::~therisomat (void)
00026 {
00027
00028 }
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 void therisomat::read (XFILE *in)
00043 {
00044 xfscanf (in,"%lf",&alpha);
00045 }
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 void therisomat::print (FILE *out)
00058 {
00059 fprintf (out,"%le",alpha);
00060 }
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 void therisomat::matdilat (matrix &d,strastrestate ssst)
00075 {
00076 switch (ssst){
00077 case bar:{
00078 matdilat_bar (d);
00079 break;
00080 }
00081 case plbeam:{
00082 matdilat_plbeam (d);
00083 break;
00084 }
00085 case planestress:{
00086 matdilat_plstress (d);
00087 break;
00088 }
00089 case planestrain:{
00090 matdilat_plstrain (d);
00091 break;
00092 }
00093 case platek:{
00094 matdilat_plate (d);
00095 break;
00096 }
00097 case plates:{
00098 matdilat_plate (d);
00099 break;
00100 }
00101 case axisymm:{
00102 matdilat_axi (d);
00103 break;
00104 }
00105 case spacestress:{
00106 matdilat_spacestr (d);
00107 break;
00108 }
00109 default:
00110 print_err("unknown number of components of stress tensor is required", __FILE__, __LINE__, __func__);
00111 }
00112 }
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126 void therisomat::matdilat_bar (matrix &d)
00127 {
00128 d[0][0] = alpha;
00129 }
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143 void therisomat::matdilat_plbeam (matrix &d)
00144 {
00145 d[0][0] = alpha;
00146 d[1][1] = 0.0;
00147 d[2][2] = 0.0;
00148
00149 }
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163 void therisomat::matdilat_plstress (matrix &d)
00164 {
00165 fillm(0.0,d);
00166
00167 d[0][0] = alpha; d[0][1] = 0.0; d[0][2] = 0.0;
00168 d[1][0] = 0.0; d[1][1] = alpha; d[1][2] = 0.0;
00169 d[2][0] = 0.0; d[2][1] = 0.0; d[2][2] = 0.0;
00170 }
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184 void therisomat::matdilat_plstrain (matrix &d)
00185 {
00186 fillm(0.0,d);
00187
00188 d[0][0] = alpha; d[0][1] = 0.0; d[0][2] = 0.0;
00189 d[1][0] = 0.0; d[1][1] = alpha; d[1][2] = 0.0;
00190 d[2][0] = 0.0; d[2][1] = 0.0; d[2][2] = 0.0;
00191 }
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205 void therisomat::matdilat_axi (matrix &d)
00206 {
00207 fillm(0.0,d);
00208
00209 d[0][0]=alpha; d[0][1]=0.0; d[0][2]=0.0;
00210 d[1][0]=0.0; d[1][1]=alpha; d[1][2]=0.0;
00211 d[2][0]=0.0; d[2][1]=0.0; d[2][2]=alpha;
00212
00213 d[3][3]=0.0;
00214 }
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228 void therisomat::matdilat_plate (matrix &d)
00229 {
00230 fillm(0.0,d);
00231
00232 d[0][0]=alpha; d[1][1]=alpha;
00233 }
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245 void therisomat::matdilat_spacestr (matrix &d)
00246 {
00247 fillm(0.0,d);
00248
00249 d[0][0]=alpha; d[1][1]=alpha; d[2][2]=alpha;
00250 }
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263 void therisomat::temprstrains (long ipp)
00264 {
00265 double dt;
00266 strastrestate sss;
00267
00268
00269 sss = Mm->ip[ipp].ssst;
00270
00271
00272 dt = Mm->givenonmechq(temperature, ipp) - Mm->givenonmechq(initial_temperature, ipp);
00273
00274 switch (sss){
00275 case bar:{
00276 Mm->tempstrains[ipp][0]=alpha*dt;
00277 break;
00278 }
00279 case plbeam:{
00280 Mm->tempstrains[ipp][0]=alpha*dt;
00281 Mm->tempstrains[ipp][1]=0.0;
00282 Mm->tempstrains[ipp][2]=0.0;
00283
00284 break;
00285 }
00286 case planestress:{
00287 Mm->tempstrains[ipp][0]=alpha*dt;
00288 Mm->tempstrains[ipp][1]=alpha*dt;
00289 Mm->tempstrains[ipp][3]=alpha*dt;
00290 break;
00291 }
00292 case planestrain:{
00293 Mm->tempstrains[ipp][0]=alpha*dt;
00294 Mm->tempstrains[ipp][1]=alpha*dt;
00295 Mm->tempstrains[ipp][3]=alpha*dt;
00296 break;
00297 }
00298 case axisymm:{
00299 Mm->tempstrains[ipp][0]=alpha*dt;
00300 Mm->tempstrains[ipp][1]=alpha*dt;
00301 Mm->tempstrains[ipp][2]=alpha*dt;
00302 break;
00303 }
00304 case spacestress:{
00305 Mm->tempstrains[ipp][0]=alpha*dt;
00306 Mm->tempstrains[ipp][1]=alpha*dt;
00307 Mm->tempstrains[ipp][2]=alpha*dt;
00308 Mm->tempstrains[ipp][3]=0.0;
00309 Mm->tempstrains[ipp][4]=0.0;
00310 Mm->tempstrains[ipp][5]=0.0;
00311 break;
00312 }
00313 default:
00314 print_err("unknown strain/stress state is required", __FILE__, __LINE__, __func__);
00315 }
00316 }
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329 void therisomat::give_reqnmq(long *anmq)
00330 {
00331 anmq[temperature-1] = 1;
00332 anmq[initial_temperature-1] = 1;
00333 }