00001 #include "elastortomat.h"
00002 #include "global.h"
00003 #include "intpoints.h"
00004 #include "sequent.h"
00005 #include "vecttens.h"
00006
00007
00008
00009 elastortomat::elastortomat (void)
00010 {
00011 allocm(6, 6, de);
00012 allocm(3, 3, t);
00013 }
00014
00015
00016
00017 elastortomat::~elastortomat (void)
00018 {
00019 }
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 void elastortomat::read (XFILE *in)
00033 {
00034 xfscanf(in, "%k", "ortomat");
00035 readm(in, de);
00036 xfscanf(in, "%k", "transfmat");
00037 readm(in, t);
00038 }
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 void elastortomat::print (FILE *out)
00052 {
00053 printm(de, out);
00054 printm(out, t);
00055 }
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 void elastortomat::matstiff (matrix &d, long ipp)
00071 {
00072 matrix tmat(3,3), dg(6,6);
00073 vector p(3);
00074 char *namevar[] = {"x", "y", "z"};
00075
00076
00077 ipcoord(Mm->elip[ipp], ipp, 0, 0, p);
00078
00079 t.evaluate(p, namevar, tmat);
00080
00081 lg_tens4transf(dg, de, tmat, Mm->ip[ipp].ssst);
00082
00083 tensor4_matrix(d, dg, Mm->ip[ipp].ssst);
00084 }
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099 void elastortomat::loc_matstiff (matrix &d, strastrestate ssst)
00100 {
00101 copym(de, d);
00102
00103 }
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 void elastortomat::give_transf_mat (matrix &tmat, long ipp)
00121 {
00122 vector p(3);
00123 char *namevar[] = {"x", "y", "z"};
00124
00125
00126 ipcoord(Mm->elip[ipp], ipp, 0, 0, p);
00127
00128 t.evaluate(p, namevar, tmat);
00129 }
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144 void elastortomat::nlstresses (long ipp)
00145 {
00146 long i, n = Mm->ip[ipp].ncompstr;
00147 vector eps(n),sig(n);
00148 matrix d(n,n);
00149
00150
00151 for (i=0;i<n;i++){
00152 eps[i]=Mm->ip[ipp].strain[i];
00153 }
00154
00155
00156 matstiff (d,ipp);
00157 mxv (d,eps,sig);
00158
00159 for (i=0;i<n;i++){
00160 Mm->ip[ipp].stress[i]=sig[i];
00161 }
00162 }