⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mechmat.cpp

📁 Finite element program for mechanical problem. It can solve various problem in solid problem
💻 CPP
📖 第 1 页 / 共 5 页
字号:
   @param d - stiffness %matrix   @param ipp - number of integration point      JK, 17.7.2001*/void mechmat::elmatstiff (matrix &d,long ipp)  //  27.10.2001{  long i,ncomp,idem;  idem = ip[ipp].gemid();  switch (ip[ipp].tm[idem]){  case elisomat:{    i=ip[ipp].idm[idem];    eliso[i].elmatstiff (d,ip[ipp].ssst);    break;  }  case elgmat3d:{    i=ip[ipp].idm[idem];    ncomp=ip[ipp].ncompstr;    elgm3d[i].elmatstiff (d);    break;  }  default:{    fprintf (stderr,"\n\n unknown elastic material type is required");    fprintf (stderr,"\n in function elmatstiff (file %s, line %d).\n",__FILE__,__LINE__);  }  }}/**   function computes elastic compliance %matrix of the material   in the required integration point      @param c - compliance %matrix   @param ipp - number of integration point      JK, 3.2.2003*/void mechmat::elmatcompl (matrix &c,long ipp)  //  27.10.2001{  long i, idem;  idem = ip[ipp].gemid();  switch (ip[ipp].tm[idem]){  case elisomat:{    i=ip[ipp].idm[idem];    eliso[i].matcompl (c,ip[ipp].ssst);    break;  }  default:{    fprintf (stderr,"\n\n unknown elastic material type is required");    fprintf (stderr,"\n in function elmatcompl (file %s, line %d).\n",__FILE__,__LINE__);  }  }}// *****************************************************************// *****************************************************************//   PART CONTAINING FUNCTIONS DEALING WITH PLASTICITY// *****************************************************************// *****************************************************************/**   function evaluates yield function for stresses and internal variables      @param ipp - integration point pointer   @param idpm - id of plasticity model   @param sig - stress components   @param q - internal variables (hardening parameters)      28.10.2001*/double mechmat::yieldfunction (long ipp, long idpm, matrix &sig,vector &q){  double f;    switch (ip[ipp].tm[idpm]){  case simplas1d:{    f = spl1d[ip[ipp].idm[idpm]].yieldfunction (sig,q);    break;  }  case jflow:{    f = j2f[ip[ipp].idm[idpm]].yieldfunction (sig,q);    break;  }  case jflow2:{    f = j2f2[ip[ipp].idm[idpm]].yieldfunction (sig,q);    break;  }  case mohrcoulparab:{    f = mcpar[ip[ipp].idm[idpm]].yieldfunction (sig);    break;  }  case boermaterial:{    f = boerm[ip[ipp].idm[idpm]].yieldfunction (sig);    break;  }  case druckerprager:{    f = drprm[ip[ipp].idm[idpm]].yieldfunction (sig,q);    break;  }  case chenplast:{    f = chplast[ip[ipp].idm[idpm]].yieldfunction (sig,q);    break;  }  case modcamclaymat:{    f = cclay[ip[ipp].idm[idpm]].yieldfunction (sig,q);    break;  }  default:{    fprintf (stderr,"\n\n unknown plasticity model is required in function");    fprintf (stderr,"\n yieldfunction (file %s, line %d).\n",__FILE__,__LINE__);  }  }  return f;}/**   function evaluates derivates of yield function with respect to stresses   stresses must be assembled in tensor notation and stored in 3x3 %matrix   function overwrites array sig, some material models use the array sig for auxiliary computations   function stores derivatives in %vector dfds   @param ipp - integration point pointer   @param idpm - id of plasticity model   @param sig - stress components   @param q - internal parameters (hardening parameters)   @param dfds - derivatives of yield function with respect to stresses      28.10.2001*/void mechmat::dfdsigma (long ipp, long idpm, matrix &sig, vector &q, vector &dfds){  matrix dfdst(3,3);    switch (ip[ipp].tm[idpm]){  case simplas1d:{    spl1d[ip[ipp].idm[idpm]].dfdsigma (sig,dfdst);    break;  }  case jflow:{    j2f[ip[ipp].idm[idpm]].deryieldfsigma (sig,dfdst);    break;  }  case jflow2:{    j2f2[ip[ipp].idm[idpm]].deryieldfsigma (sig,dfdst);    break;  }  case mohrcoulparab:{    mcpar[ip[ipp].idm[idpm]].deryieldfsigma (sig,dfdst);    break;  }  case boermaterial:{    boerm[ip[ipp].idm[idpm]].deryieldfsigma (sig,dfdst);    break;  }  case druckerprager:{    drprm[ip[ipp].idm[idpm]].deryieldfsigma (sig,dfdst);    break;  }  case chenplast:{    chplast[ip[ipp].idm[idpm]].deryieldfdsigma (sig,q,dfdst);    break;  }  case modcamclaymat:{    cclay[ip[ipp].idm[idpm]].deryieldfsigma (sig, q, dfdst);    break;  }  default:{    fprintf (stderr,"\n\n unknown plasticity model is required in function");    fprintf (stderr,"\n dfdsigma (file %s, line %d).\n",__FILE__,__LINE__);  }  }    //  conversion of tensor notation to vector notation  tensor_vector (dfds,dfdst,ip[ipp].ssst,stress);  }/**   function evaluates derivates of plastic potential with respect to stresses   stresses must be assembled in tensor notation and stored in 3x3 %matrix   function overwrites array sig, some material models use the array sig for auxiliary computations   function stores derivatives in %vector dgds   @param ipp - integration point pointer   @param idpm - id of plasticity model   @param sig - stress components   @param q - internal parameters (hardening parameters)   @param dfds - derivatives of plastic potential with respect to stresses      28.10.2001*/void mechmat::dgdsigma (long ipp, long idpm, matrix &sig, vector &q, vector &dgds){  matrix dgdst(3,3);    switch (ip[ipp].tm[idpm]){  case simplas1d:{    spl1d[ip[ipp].idm[idpm]].dfdsigma (sig,dgdst);    break;  }  case jflow:{    j2f[ip[ipp].idm[idpm]].deryieldfsigma (sig,dgdst);    break;  }  case jflow2:{    j2f2[ip[ipp].idm[idpm]].deryieldfsigma (sig,dgdst);    break;  }  case mohrcoulparab:{    mcpar[ip[ipp].idm[idpm]].derplaspotsigma (sig,dgdst);    break;  }  case boermaterial:{    boerm[ip[ipp].idm[idpm]].deryieldfsigma (sig,dgdst);    break;  }  case druckerprager:{    drprm[ip[ipp].idm[idpm]].deryieldfsigma (sig,dgdst);    break;  }  case chenplast:{    chplast[ip[ipp].idm[idpm]].deryieldfdsigma (sig,q,dgdst);    break;  }  case modcamclaymat:{    cclay[ip[ipp].idm[idpm]].deryieldfsigma (sig, q, dgdst);    break;  }  default:{    fprintf (stderr,"\n\n unknown plasticity model is required in function");    fprintf (stderr,"\n dgdsigma (file %s, line %d).\n",__FILE__,__LINE__);  }  }    //  conversion of tensor notation to vector notation  tensor_vector (dgds,dgdst,ip[ipp].ssst,stress);  }/**   function evaluates second derivates of yield function with respect to stresses      stresses must be assembled in tensor notation and stored in 3x3 %matrix   function stores derivatives in %matrix dfdsds      @param ipp - integration point pointer   @param idpm - id of plasticity model   @param sig - stress components   @param dfdsds - second derivatives of yield function with respect to stresses      28.10.2001*/void mechmat::dfdsigmadsigma (long ipp, long idpm, matrix &sig, matrix &dfdsds){  matrix dfdsdst(6,6);    switch (ip[ipp].tm[idpm]){  case simplas1d:{    spl1d[ip[ipp].idm[idpm]].dfdsigmadsigma (dfdsdst);    break;  }  case jflow2:{    j2f2[ip[ipp].idm[idpm]].deryielddsigmadsigma (sig,dfdsdst);    break;  }  case modcamclaymat:{    cclay[ip[ipp].idm[idpm]].dderyieldfsigma (dfdsdst);    break;  }  case chenplast:{    chplast[ip[ipp].idm[idpm]].deryieldfdsigmadsigma (sig,dfdsdst);    break;  }  default:{    fprintf (stderr,"\n\n unknown plasticity model is required in function");    fprintf (stderr,"\n dfdsigmadsigma (file %s, line %d).\n",__FILE__,__LINE__);  }  }    //  conversion from tensor notation to matrix notation  tensor4_matrix (dfdsds,dfdsdst,ip[ipp].ssst);  }/**   function evaluates second derivates of plastic potential with respect to stresses      stresses must be assembled in tensor notation and stored in 3x3 %matrix   function stores derivatives in %matrix dgdsds      @param ipp - integration point pointer   @param idpm - id of plasticity model   @param sig - stress components   @param dfdsds - second derivatives of plastic potential with respect to stresses      28.10.2001*/void mechmat::dgdsigmadsigma (long ipp, long idpm, matrix &sig, matrix &dgdsds){  matrix dgdsdst(6,6);    switch (ip[ipp].tm[idpm]){  case simplas1d:{    spl1d[ip[ipp].idm[idpm]].dfdsigmadsigma (dgdsdst);    break;  }  case jflow2:{    j2f2[ip[ipp].idm[idpm]].deryielddsigmadsigma (sig,dgdsdst);    break;  }  case modcamclaymat:{    cclay[ip[ipp].idm[idpm]].dderyieldfsigma (dgdsdst);    break;  }  case chenplast:{    chplast[ip[ipp].idm[idpm]].deryieldfdsigmadsigma (sig,dgdsdst);    break;  }  default:{    fprintf (stderr,"\n\n unknown plasticity model is required in function");    fprintf (stderr,"\n dgdsigmadsigma (file %s, line %d).\n",__FILE__,__LINE__);  }  }    //  conversion from tensor notation to matrix notation  tensor4_matrix (dgdsds,dgdsdst,ip[ipp].ssst);  }/**   function evaluates derivates of yield function with respect to internal variables (hardening parameters)      stresses must be assembled in tensor notation and stored in 3x3 %matrix   function stores derivatives in %vector dq      @param ipp - integration point pointer   @param idpm - id of plasticity model   @param sig - stress components   @param q - internal variables (hardening parameters)   @param dq - derivatives of yield function with respect to internal variables      28.10.2001*/void mechmat::dfdqpar (long ipp, long idpm,matrix &sig,vector &q,vector &dq){  switch (ip[ipp].tm[idpm]){  case simplas1d:{    spl1d[ip[ipp].idm[idpm]].dfdqpar (dq);    break;  }  case jflow:{    j2f[ip[ipp].idm[idpm]].deryieldfq (dq);    break;  }  case jflow2:{    j2f2[ip[ipp].idm[idpm]].deryieldfq (dq);    break;  }  case mohrcoulparab:{    break;  }  case boermaterial:{    break;  }  case druckerprager:{    break;  }  case modcamclaymat:{    cclay[ip[ipp].idm[idpm]].deryieldfq (sig, dq);    break;  }  case chenplast:{    chplast[ip[ipp].idm[idpm]].deryieldfdq (sig,q,dq);    break;  }  default:{    fprintf (stderr,"\n\n unknown plasticity model is required in function dfdqpar (file %s, line %d).\n",__FILE__,__LINE__);  }  }}/**   function evaluates derivates of plastic potential with respect to internal variables (hardening parameters)      stresses must be assembled in tensor notation and stored in 3x3 %matrix   function stores derivatives in %vector dq      @param ipp - integration point pointer   @param idpm - id of plasticity model   @param sig - stress components   @param q - internal variables (hardening parameters)   @param dq - derivatives of plastic potential with respect to internal variables      28.10.2001*/void mechmat::dgdqpar (long ipp, long idpm,matrix &sig,vector &q,vector &dq){  switch (ip[ipp].tm[idpm]){  case simplas1d:{    spl1d[ip[ipp].idm[idpm]].dfdqpar (dq);    break;  }  case jflow:{    j2f[ip[ipp].idm[idpm]].deryieldfq (dq);    break;  }  case jflow2:{    j2f2[ip[ipp].idm[idpm]].deryieldfq (dq);    break;  }  case mohrcoulparab:{    break;  }  case boermaterial:{    break;  }  case druckerprager:{    break;  }  case modcamclaymat:{    cclay[ip[ipp].idm[idpm]].deryieldfq (sig, dq);    break;  }  case chenplast:{    chplast[ip[ipp].idm[idpm]].deryieldfdq (sig,q,dq);    break;  }  default:{    fprintf (stderr,"\n\n unknown plasticity model is required in function dgdqpar (file %s, line %d).\n",__FILE__,__LINE__);  }  }}/**   function evaluates derivates of yield function with respect to stresses and   internal variables (hardening parameters)   stresses must be assembled in tensor notation and stored in 3x3 %matrix   function stores derivatives in %matrix dfdsdq      @param ipp - integration point pointer   @param idpm - id of plasticity model   @param sig - stress components   @param q - internal variables (hardening parameters)   @param dfdsdq - derivatives of yield function with respect to stresses and internal variables      28.10.2001*/void mechmat::dfdsigmadq (long ipp, long idpm,matrix &sig,vector &q,matrix &dfdsdq){  //  number of hardening parameters  long nh=dfdsdq.n;    matrix dfdsdqt(6,nh);  switch (ip[ipp].tm[idpm]){  case simplas1d:{    spl1d[ip[ipp].idm[idpm]].dfdsigmadq (dfdsdqt);    break;  }  case jflow2:{    j2f2[ip[ipp].idm[idpm]].deryieldfdsigmadq (dfdsdqt);    break;  }  case modcamclaymat:{    cclay[ip[ipp].idm[idpm]].deryieldfdsdq (dfdsdqt);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -