00001 #include "glasgowcoup.h"
00002 #include "vecttens.h"
00003 #include "global.h"
00004
00005 glasgowcoup::glasgowcoup ()
00006 {
00007
00008 }
00009
00010 glasgowcoup::~glasgowcoup ()
00011 {
00012
00013 }
00014
00015 void glasgowcoup::read (XFILE *in)
00016 {
00017
00018 }
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 void glasgowcoup::material_matrix_fts (long ipp,matrix &d,strastrestate ssst)
00030 {
00031 long nmc;
00032 double t;
00033
00034
00035 nmc = d.m;
00036
00037 matrix m(nmc,1),dd(nmc,nmc);
00038
00039
00040 tensor_vector_matrix (ssst,m);
00041
00042
00043 Mm->elmatstiff (dd,ipp);
00044
00045
00046
00047
00048
00049 norm_tempr = (t-273.15-20.0)/100.0;
00050
00051
00052 if (0.0<= norm_tempr && norm_tempr<=6.0)
00053 alpha = 6.0e-5/(7.0-norm_tempr);
00054 else
00055 alpha = 0.0;
00056
00057
00058 cmulm (alpha,m);
00059
00060
00061 mxm (dd,m,d);
00062 }
00063
00064
00065
00066
00067
00068
00069 void glasgowcoup::material_matrix_td (long ipp,matrix &d,strastrestate ssst)
00070 {
00071 long nmc;
00072 double t_old,t_new,dt,chi,htd;
00073
00074
00075 nmc = d.m;
00076
00077 matrix m(nmc,1),dd(nmc,nmc),toteps(nmc,1),epst(nmc,1),epsel(nmc,1),sig(nmc,1);
00078
00079
00080 tensor_vector_matrix (ssst,m);
00081
00082
00083 Mm->elmatstiff (dd,ipp);
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097 norm_tempr = (t_new-273.15-20.0)/100.0;
00098
00099
00100 if (0.0<= norm_tempr && norm_tempr<=6.0)
00101 alpha = 6.0e-5/(7.0-norm_tempr);
00102 else
00103 alpha = 0.0;
00104
00105
00106 cmulm (alpha,m);
00107
00108
00109 dt = t_new-t_old;
00110
00111
00112 cmulm (dt,m,epst);
00113
00114
00115 subm(toteps,epst,epsel);
00116
00117
00118 mxm(dd,epsel,sig);
00119
00120 if (norm_tempr>t_hat){
00121 t_hat=norm_tempr;
00122 }
00123
00124
00125 chi = 0.2*t_hat - 0.01*t_hat*t_hat;
00126
00127
00128 htd = (0.2-0.02*t_hat)/100.0;
00129
00130
00131
00132 mxm (dd,m,d);
00133 cmulm (htd,sig,sig);
00134 addm (d,sig,d);
00135
00136 }
00137