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

📄 fe_print.c

📁 利用语言编写的有限元分析软件
💻 C
📖 第 1 页 / 共 3 页
字号:
                              ZeroUnits(&(array->displ->spColUnits[i-1]));
                           }
                         }
                         break;
                    case 4:
                    case 8:
                        ii = eap->map_ldof_to_gdof[k-1];
                        jj = frame->node[node_no - 1].bound_id[ii-1];
                        if(jj > 0) {
                           array->displ->uMatrix.daa[k-1][i-1] = m1->uMatrix.daa[jj-1][0];
                           if( UNITS_SWITCH == ON ) {
                              UnitsCopy(&(array->displ->spRowUnits[k-1]), &(m1->spRowUnits[jj-1]));
                              ZeroUnits( &(array->displ->spColUnits[i-1]) );
                           }
                        }
                        else {
                           array->displ->uMatrix.daa[k-1][i-1]
                           = frame->node[node_no -1].disp[ii-1].value;
                           if( UNITS_SWITCH == ON ) {
                              UnitsCopy( &(array->displ->spRowUnits[k-1]),
                                frame->node[node_no -1].disp[ii-1].dimen);
                              ZeroUnits( &(array->displ->spColUnits[i-1]) );
                           }
                        }
                        k = k + 1;
                        break;
                      default:
                        break;
                   }
               }
           }
	   PRINT_STRESS = ON;
           array = elmlib(array, STRESS);
	   PRINT_STRESS = OFF;

           for( i=1 ; i <= frame->no_dof ; i++ )
              for( j=1 ; j <= frame->no_nodes_per_elmt ; j++ )
                  frame->element[elmt_no-1].rp->Forces->uMatrix.daa[i-1][j-1]
                  = array->nodal_loads[frame->no_dof*(j-1)+i-1].value;
           if( UNITS_SWITCH == ON ) {
              for( i=1 ; i <= frame->no_dof ; i++ )
                  UnitsCopy( &(frame->element[elmt_no-1].rp->Forces->spRowUnits[i-1]) , array->nodal_loads[i-1].dimen );
              for( j=1 ; j <= frame->no_nodes_per_elmt ; j++ )
                  ZeroUnits( &(frame->element[elmt_no-1].rp->Forces->spColUnits[j-1]) );
           }
       }
       
      if(m1 == (MATRIX *) NULL) { /* stress response from response structure */


         slp = lookup("InPlaneIntegPts");  /* no of integration pts in plane/surface */
         if(slp == NULL)
            iInPlaneIntegPts = 2*2;        /* 2x2 as default */
         else
            iInPlaneIntegPts = (int) slp->u.q->value;

         slp = lookup("ThicknessIntegPts"); /* no of integration pts in thickness direction */
         if(slp == NULL)
            iThicknessIntegPts = 2;        /* 2 as default */
         else
            iThicknessIntegPts = (int) slp->u.q->value;
  
         iNO_INTEG_pts = iInPlaneIntegPts*iThicknessIntegPts;

         lint = (int) 0;
         l = (int) iInPlaneIntegPts;
         for(i = 1; i<= l*l; i++) {
             xi[i-1]  = 0.0;
             eta[i-1] = 0.0;
             wg[i-1]  = 0.0;
         }

         if(l*l != lint)
            pgauss(l,&lint,xi,eta,wg);

         gamma = dVectorAlloc(iThicknessIntegPts+1);
         wt    = dVectorAlloc(iThicknessIntegPts+1);
         gauss(gamma,wt,iThicknessIntegPts);

         for(elmt_no = 1; elmt_no <= frame->no_elements; elmt_no++) {
             ep           = &frame->element[elmt_no-1];
             elmt_attr_no = ep->elmt_attr_no;
             eap          = &frame->eattr[elmt_attr_no-1];
             if(elmt_no == 1) 
                printf(" Element : %s \n Material : %s \n\n", eap->elmt_type, eap->material);

             printf("\n STRESS in  Element No  %d \n",elmt_no);
             printf(" =============================================================================================================== \n");
             printf(" Gaussion    xi       eta        gamma    Stre-xx         Stre-yy         Stre-xy         Stre-yz        Stre-zx \n");
             if(UNITS_SWITCH == OFF)
                printf("  Points \n");
             if(UNITS_SWITCH == ON)   {
                printf("  Points                                    %s             %s             %s              %s             %s \n",
                          ep->rp->stress->spRowUnits[0].units_name,
                          ep->rp->stress->spRowUnits[1].units_name,
                          ep->rp->stress->spRowUnits[2].units_name,
                          ep->rp->stress->spRowUnits[3].units_name,
                          ep->rp->stress->spRowUnits[4].units_name);
             printf(" ---------------------------------------------------------------------------------------------------------------\n \n");

                for(i = 1; i <= iThicknessIntegPts; i++)
                    for(j = 1; j <= lint; j++) {
                        k = lint*(i-1)+j;
                        printf("   %d  %10.4f %10.4f %10.4f", k, xi[j-1], eta[j-1], gamma[i]);
                        printf("\t%11.4e\t%11.4e\t%11.4e\t%11.4e\t%11.4e\n", 
                             ep->rp->stress->uMatrix.daa[0][k-1]/ep->rp->stress->spRowUnits[0].scale_factor,
                             ep->rp->stress->uMatrix.daa[1][k-1]/ep->rp->stress->spRowUnits[1].scale_factor,
                             ep->rp->stress->uMatrix.daa[2][k-1]/ep->rp->stress->spRowUnits[2].scale_factor,
                             ep->rp->stress->uMatrix.daa[3][k-1]/ep->rp->stress->spRowUnits[3].scale_factor,
                             ep->rp->stress->uMatrix.daa[4][k-1]/ep->rp->stress->spRowUnits[4].scale_factor);
                    }
             }
             if(UNITS_SWITCH == OFF)
                for(i = 1; i <= iThicknessIntegPts; i++)
                    for(j = 1; j <= lint; j++) {
                        k = lint*(i-1)+j;
                        printf("   %d  %10.4f %10.4f %10.4f", k, xi[j-1], eta[j-1], gamma[i]);
                        printf("\t%11.4e\t%11.4e\t%11.4e\t%11.4e\t%11.4e\n",
                             ep->rp->stress->uMatrix.daa[0][k-1],
                             ep->rp->stress->uMatrix.daa[1][k-1],
                             ep->rp->stress->uMatrix.daa[2][k-1],
                             ep->rp->stress->uMatrix.daa[3][k-1],
                             ep->rp->stress->uMatrix.daa[4][k-1]);
                    }
         }
      }

#ifdef DEBUG
       printf("*** Leave Print_Stress()\n");
#endif

}

#ifdef __STDC__
void Print_Displ(MATRIX *m1)
#else
void Print_Displ(m1)
MATRIX *m1;
#endif
{
int node_no, j, k, ii, jj;
int          UNITS_SWITCH;
double                 da;

#ifdef DEBUG
       printf("\n*** Enter Print_Displ()\n");
#endif

    UNITS_SWITCH = CheckUnits();

    if(frame->no_dof == 6) {
       printf("\n------------------------------------------------------------------------------------------------------------------\n");
       printf(" Node                                             Displacement\n");
       printf("  No             displ-x           displ-y           displ-z             rot-x             rot-y             rot-z\n");
       printf("------------------------------------------------------------------------------------------------------------------\n");

       if( UNITS_SWITCH == ON ) {
          printf(" units");
          for( ii=1 ; ii<=6 ; ii++ ) {
             if( ii <= 3 ) {
                if( (UNITS_TYPE==SI) || (UNITS_TYPE==SI_US) )
                   printf("                m ");
                else 
                   printf("               in ");
             }
             else
                   printf("              rad ");
          }
       }
       printf("\n");
    }

    if(frame->no_dof == 5) {
       printf("\n------------------------------------------------------------------------------------------------\n");
       printf(" Node                                   Displacement\n");
       printf("  No             displ-x           displ-y           displ-z             rot-x             rot-y\n");
       printf("------------------------------------------------------------------------------------------------\n");
       if( UNITS_SWITCH == ON ) {
          printf(" units");
          for( ii=1 ; ii<=5 ; ii++ ) {
             if( ii <= 3 ) {
                if( (UNITS_TYPE==SI) || (UNITS_TYPE==SI_US) )
                   printf("                m ");
                else 
                   printf("               in ");
             }
             else
                   printf("              rad ");
          }
       }
       printf("\n");
    }

    if(frame->no_dof == 3) {
       printf("\n------------------------------------------------------------\n");
       printf(" Node                           Displacement\n");
       printf("  No             displ-x           displ-y             rot-z\n");
       printf("------------------------------------------------------------\n");

       if( UNITS_SWITCH == ON ) {
          printf(" units");
          for( ii=1 ; ii<=3 ; ii++ ) {
             if( ii <= 2 ) {
                if( (UNITS_TYPE==SI) || (UNITS_TYPE==SI_US) )
                   printf("                m ");
                else 
                   printf("               in ");
             }
             else
                   printf("              rad ");
          }
       }
       printf("\n");
    }

    if(frame->no_dof == 2) {

       printf("\n------------------------------------------\n");
       printf(" Node                  Displacement\n");
       printf("  No             displ-x           displ-y\n");
       printf("------------------------------------------\n");
       if( UNITS_SWITCH == ON ) {
          printf(" units");
          for( ii=1 ; ii<=2 ; ii++ ) {
                if( (UNITS_TYPE==SI) || (UNITS_TYPE==SI_US) )
                   printf("                m ");
                else 
                   printf("               in ");
          }
       }
       printf("\n");
    }

 /*
  *  ===================
  *  Print displacements 
  *  ===================
  */
   
  switch( UNITS_SWITCH ) {
      case ON:
           for(node_no = 1; node_no <= frame->no_nodes; node_no++) {
           printf("%4d  ", node_no);
           for(j  = 1; j <= frame->no_dof; j++){
               jj = frame->node[node_no - 1].bound_id[j-1];
               if(jj > 0) {
                  if(m1->spRowUnits[jj-1].units_name != NULL ) {
                      UnitsTypeConvert(&(m1->spRowUnits[jj-1]), UNITS_TYPE);
                  }
                  RadUnitsSimplify( &(m1->spRowUnits[jj-1]) );
                  frame->node[node_no-1].disp[j-1].value = m1->uMatrix.daa[jj-1][0];
                  UnitsCopy( frame->node[node_no-1].disp[j-1].dimen, &(m1->spRowUnits[jj-1]) );
                  da =  MatrixContentScaleIndirectDouble(m1,jj, 1);
                  printf("     %13.5e", da);
               } else {
                  switch(UNITS_TYPE) {
                    case SI:
                     if( (frame->node[node_no-1].disp[j-1].dimen->units_name != NULL) &&
                        !strcmp( frame->node[node_no-1].disp[j-1].dimen->units_name, "deg_F"))

                        frame->node[node_no -1].disp[j-1].value
                        = ConvertTempUnits(frame->node[node_no-1].disp[j-1].dimen->units_name,
                         frame->node[node_no -1].disp[j-1].value, US);
                         break;
                    case US:
                         if((frame->node[node_no-1].disp[j-1].dimen->units_name != NULL) &&
                             !strcmp(frame->node[node_no-1].disp[j-1].dimen->units_name, "deg_C"))

                             frame->node[node_no -1].disp[j-1].value
                             = ConvertTempUnits(frame->node[node_no-1].disp[j-1].dimen->units_name,
                                                frame->node[node_no -1].disp[j-1].value, SI);
                          break;
                  }
                  RadUnitsSimplify( frame->node[node_no-1].disp[j-1].dimen );
                  printf("     %13.5e", frame->node[node_no -1].disp[j-1].value/
                        frame->node[node_no-1].disp[j-1].dimen->scale_factor);
                }
           }
           printf("\n");
         }
         break;
      case OFF:
         for(node_no = 1; node_no <= frame->no_nodes; node_no++) {
             printf("%4d  ", node_no);
             for(j  = 1; j <= frame->no_dof; j++){
                jj = frame->node[node_no - 1].bound_id[j-1];
                if(jj > 0) {
                   frame->node[node_no-1].disp[j-1].value = m1->uMatrix.daa[jj-1][0];
                   printf("     %13.5e", m1->uMatrix.daa[jj-1][0]);
                }
                else
                   printf("     %13.5e", frame->node[node_no -1].disp[j-1].value);
             }
             printf("\n");
         }
         break;
      default:
         break;
    }

#ifdef DEBUG
       printf("*** Leave Print_Displ()\n\n");
#endif

}

⌨️ 快捷键说明

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