📄 svispl.cpp
字号:
#include <math.h>#include "svispl.h"#include "global.h"#include "matrix.h"#include "vector.h"#include "intpoints.h"svisplas::svisplas (void){ eta=0.0;}svisplas::~svisplas (void){}void svisplas::read (XFILE *in){ xfscanf (in,"%lf",&eta);}double svisplas::gfun (double f){ double g; if (f>0.0) g=f*eta; else g=0.0; return g;}double svisplas::dergfun (double f){ double dg; if (f<0.0) dg=0.0; else dg=eta; return dg;}void svisplas::nlstresses (long ipp,long ido) // // 27.10.2001{ long i,ncomp=Mm->ip[ipp].ncompstr,ncomph=1; double dt; vector sig(ncomp),q(ncomph),epsn(ncomp),epso(ncomp),epsp(ncomp); matrix d(ncomp,ncomp); if (Mp->phase==1){ /*********************************/ // right hand side computation // /*********************************/ // stress component for (i=0;i<ncomp;i++){ sig[i]=Mm->ip[ipp].other[ido+i]; } // internal variable q[0]=Mm->ip[ipp].other[ido+3*ncomp]; //dt=Mp->incrvs; //dt=Mp->timefun.getval(Mp->time); dt=Mp->timecon.actualforwtimeincr (); Mm->stiff_deps_vispl (ipp,-1,0,sig,q,dt); } if (Mp->phase==2){ for (i=0;i<ncomp;i++){ // new total strain epsn[i] = Mm->ip[ipp].strain[i]; // previous total strain epso[i] = Mm->ip[ipp].other[ido+2*ncomp+i]; // increment of irreversible strain epsp[i] = Mm->ip[ipp].other[ido+ncomp+i]; } // elastic strain subv (epsn,epso,epso); subv (epso,epsp,epsp); // stiffness matrix of material Mm->matstiff(d,ipp); // stress components mxv (d,epsp,sig); // new data storage for (i=0;i<ncomp;i++){ Mm->ip[ipp].other[ido+i] += sig[i]; Mm->ip[ipp].other[ido+2*ncomp+i] = epsn[i]; Mm->ip[ipp].stress[i]=sig[i]; } }}/** function returns tangent stiffness matrix of material @param ipp - integration point pointer @param d - elastic stiffness matrix @param ido - index of internal variables for given material in the ipp other array 12.8.2001*/void svisplas::matstiff (matrix &d,long ipp,long ido){ if (Mp->stmat==0){ // initial elastic matrix Mm->elmatstiff (d,ipp); } if (Mp->stmat==1){ // tangent stiffness matrix // nedodelano Mm->elmatstiff (d,ipp); }}void svisplas::give_interparam (long ipp,long ido,vector &q){ long ncomp; ncomp=Mm->ip[ipp].ncompstr; if (q.n!=1){ fprintf (stderr,"\n\n uncompatible type of vector of internal parameters in"); fprintf (stderr,"\n function store_interparam (file %s, line %d).\n",__FILE__,__LINE__); } q[0] = Mm->ip[ipp].eqother[ido+3*ncomp];}void svisplas::store_interparam (long ipp,long ido,vector &q){ long ncomp; ncomp=Mm->ip[ipp].ncompstr; if (q.n!=1){ fprintf (stderr,"\n\n uncompatible type of vector of internal parameters in"); fprintf (stderr,"\n function store_interparam (file %s, line %d).\n",__FILE__,__LINE__); } Mm->ip[ipp].eqother[ido+3*ncomp]=q[0];}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -