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

📄 fe_profile.c

📁 利用语言编写的有限元分析软件
💻 C
📖 第 1 页 / 共 4 页
字号:
       printf("Enter Assign_p_Array() : elmt = %4d : task = %4d\n", elmt_no, task);
#endif

   UNITS_SWITCH = CheckUnits();

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

   slp = lookup("ThicknessIntegPts"); /* number of integration pts in thickness direction*/

   if(slp == NULL){
      iThicknessIntegPts = UNIT_INTEG_PTS; /* 2 as default */
   }
   else {
      iThicknessIntegPts = (int) slp->u.q->value;
   }

   iNO_INTEG_pts = iInPlaneIntegPts*iThicknessIntegPts;

   slp = lookup("GaussIntegPts"); /* number of integration pts in thickness direction*/
   if(slp == NULL){
      p->integ_ptr->integ_pts = UNIT_INTEG_PTS; /* 2 as default */
   }
   else {
      p->integ_ptr->integ_pts = (int) slp->u.q->value;
   }

   el              = &frp->element[elmt_no-1];  /* element ptr               */
   elmt_attr_no    =  el->elmt_attr_no;
   eap             = &frp->eattr[elmt_attr_no -1]; 
   p->elmt_state   =  el->esp->state;

   for (i = 0; i <= NO_ELEMENTS_IN_LIBRARY; i++) { 
      if(!strcmp(elmt_library[i].name, eap->elmt_type)) { 
           n = i;
           break;
      }
   }

   if(task != PROPTY) {
      if(p->elmt_no != elmt_no) { /* check if already values assigned */
         p->elmt_no        =  elmt_no;
         p->elmt_attr_no   =  elmt_attr_no;
         p->dof_per_node   =  elmt_library[n].no_dof;
         p->no_dimen       =  elmt_library[n].no_dimen;
         p->elmt_type      =  elmt_library[n].name;
         p->nodes_per_elmt = (int) MIN(frp->no_nodes_per_elmt,
                                       elmt_library[n].no_node_per_elmt);
         p->size_of_stiff  =  p->nodes_per_elmt* p->dof_per_node;

         free((char *) p->material_name);
         p->material_name = SaveString( frp->eattr[elmt_attr_no-1].material );

         /* p->work_section[] = working arrary of section properties for element */
         /* p->work_material[] = working arrary of material properties for element */

         for(i = 1; i <= UNIT_MATERIAL_ATTR; i++) {  
             if( eap->work_material[i-1].value != 0 ) {
                 p->work_material[i-1].value = eap->work_material[i-1].value;
                 if( UNITS_SWITCH == ON )
                    UnitsCopy( p->work_material[i-1].dimen, eap->work_material[i-1].dimen );
             }
         }
         for(i = 1; i <= UNIT_SECTION_ATTR; i++) {  
             if( eap->work_section[i-1].value != 0 ) {
                 p->work_section[i-1].value = eap->work_section[i-1].value;
                 if( UNITS_SWITCH == ON )
                    UnitsCopy( p->work_section[i-1].dimen, eap->work_section[i-1].dimen );
             }
         }
         if(el->LC_ptr->name != (char *)NULL){
            free((char *) p->LC_ptr->name);
            p->LC_ptr->name  = SaveString(el->LC_ptr->name);
            p->LC_ptr->n     = el->LC_ptr->n;
            p->LC_ptr->alpha = el->LC_ptr->alpha;
            p->LC_ptr->beta  = el->LC_ptr->beta;
         }
         else{
            free((char *) p->LC_ptr->name);
            p->LC_ptr->name  = (char *)NULL;
            p->LC_ptr->n     = 0.0;
            p->LC_ptr->alpha = 0.0;
            p->LC_ptr->beta  = 0.0;
         }
         p->LC_ptr->ialph   = el->LC_ptr->ialph;
         p->LC_ptr->pen     = el->LC_ptr->pen;
         p->LC_ptr->load[0] = el->LC_ptr->load[0];
         p->LC_ptr->load[1] = el->LC_ptr->load[1];
         p->LC_ptr->load[2] = el->LC_ptr->load[2];
         p->LC_ptr->load[3] = el->LC_ptr->load[3];
         p->LC_ptr->load[4] = el->LC_ptr->load[4];
         p->LC_ptr->load[5] = el->LC_ptr->load[5];

         for(j = 1; j <= iNO_INTEG_pts; j++) {
             p->LC_ptr->R[j-1] = el->LC_ptr->R[j-1];
             p->LC_ptr->H[j-1] = el->LC_ptr->H[j-1];
             for(i = 1; i <= 6; i++)
                 p->LC_ptr->back_stress[i-1][j-1] 
                 = el->LC_ptr->back_stress[i-1][j-1];
         }

      }
   }

/*
 *  ==================================================================
 *  Check Allocation of elmt arrays & load values :  depends on 'task'
 *  ==================================================================
 */

    if(p->size_of_stiff > max_size_of_stiff) {

       /* Stiffness Matrix */

       MatrixFreeIndirect(p->stiff);
       p->stiff = MatrixAllocIndirect("stiff/mass",DOUBLE_ARRAY,
                  p->size_of_stiff, p->size_of_stiff);

       if(UNITS_SWITCH == ON ) {

          /* Applied Nodal Loads */

          for( i=1 ; i <= max_size_of_stiff ; i++ ) {
               free((char *) p->nodal_loads[i-1].dimen->units_name);
	       free((char *) p->nodal_loads[i-1].dimen);
          }
       }

       free((char *) p->nodal_loads);
       p->nodal_loads  = (QUANTITY *) MyCalloc(p->size_of_stiff, sizeof(QUANTITY));

       if( UNITS_SWITCH == ON ) {
           for (i = 1; i <= p->size_of_stiff; i++)
                p->nodal_loads[i-1].dimen =(DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); 
       }

       MatrixFreeIndirect( p->equiv_nodal_load );
       p->equiv_nodal_load = MatrixAllocIndirect("equiv_nodal_loads",
                             DOUBLE_ARRAY,p->size_of_stiff,1); 

       max_size_of_stiff = p->size_of_stiff;
   }

   if( p->nodes_per_elmt > max_nodes_per_elmt ) {
       if(p->no_dimen > max_no_dimen ) {
	           for(i=1 ; i<=max_no_dimen ; i++ ) {
                       if(UNITS_SWITCH == ON ) {
	                  for(j=1 ; j<= max_nodes_per_elmt ; j++ ) {
	                      free((char *) p->coord[i-1][j-1].dimen->units_name);
	                      free((char *) p->coord[i-1][j-1].dimen);
	                      free((char *) p->nodal_traction[i-1][j-1].dimen->units_name);
	                      free((char *) p->nodal_traction[i-1][j-1].dimen);
	                  }
                       }
	               free((char *) p->coord[i-1]);
	               free((char *) p->nodal_traction[i-1]);
	           }
	           free((char *) p->coord);
	           free((char *) p->nodal_traction);

                   p->coord = (QUANTITY **) MyCalloc(p->no_dimen, sizeof(QUANTITY *));
                   p->nodal_traction =(QUANTITY **) MyCalloc(p->no_dimen,sizeof(QUANTITY *));
                   for(i = 1; i <= p->no_dimen; i++) {
                       p->coord[i-1] = (QUANTITY *) MyCalloc(p->nodes_per_elmt,
                                                             sizeof(QUANTITY));
                       p->nodal_traction[i-1] = (QUANTITY *) MyCalloc(p->nodes_per_elmt,
                                                                      sizeof(QUANTITY));  
                       if(UNITS_SWITCH == ON ) {
                          for(j = 1; j <= p->nodes_per_elmt; j++) {
                              p->coord[i-1][j-1].dimen 
                              = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));
                              p->nodal_traction[i-1][j-1].dimen 
                              = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));  
	                   }
                        }
                    }
                    max_no_dimen = p->no_dimen;
	        }
	        else { /* p->no_dimen <= max_no_dimen &&         */
                       /* p->nodes_per_elmt > max_nodes_per_elmt */

	            for( i=1 ; i<=max_no_dimen ; i++ ) {
                       if(UNITS_SWITCH == ON ) {
	                  for(j=1 ; j<= max_nodes_per_elmt ; j++ ) {
	                      free((char *) p->coord[i-1][j-1].dimen->units_name);
	                      free((char *) p->coord[i-1][j-1].dimen);
	                      free((char *) p->nodal_traction[i-1][j-1].dimen->units_name);
	                      free((char *) p->nodal_traction[i-1][j-1].dimen);
	                  }
                       }
	               free((char *) p->coord[i-1]);
	               free((char *) p->nodal_traction[i-1]);
	            }

                    for(i = 1; i <= max_no_dimen; i++) {
                        p->coord[i-1] = (QUANTITY *) MyCalloc(p->nodes_per_elmt,
                                                              sizeof(QUANTITY));
                        p->nodal_traction[i-1] = (QUANTITY *) MyCalloc(p->nodes_per_elmt,
                                                              sizeof(QUANTITY));  
                        if( UNITS_SWITCH == ON ) {
                           for (j = 1; j <= p->nodes_per_elmt; j++) {
                               p->coord[i-1][j-1].dimen  
                               = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));
                               p->nodal_traction[i-1][j-1].dimen
                               = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));  
	                   }
                        }
                    }
	        }

	        if( p->dof_per_node > max_no_dof ) {

                    MatrixFreeIndirect( p->displ );
                    p->displ = MatrixAllocIndirect("displacement", DOUBLE_ARRAY,
                               p->dof_per_node, p->nodes_per_elmt);

	            for(i=1 ; i<=max_no_dof ; i++ ) {
                        if(UNITS_SWITCH == ON ) {
	                   for(j=1 ; j<= max_nodes_per_elmt ; j++ ) {
	                       free((char *) p->nodal_body_force[i-1][j-1].dimen->units_name);
	                       free((char *) p->nodal_body_force[i-1][j-1].dimen);
	                   }
                        }
	                free((char *) p->nodal_body_force[i-1]);
	            }
	            free((char *) p->nodal_body_force);
                    p->nodal_body_force = (QUANTITY **) MyCalloc(p->dof_per_node, sizeof(QUANTITY *));  

                    for(i = 1; i <= p->dof_per_node; i++) {
                        p->nodal_body_force[i-1] 
                        = (QUANTITY *) MyCalloc(p->nodes_per_elmt, sizeof(QUANTITY));  
                        if( UNITS_SWITCH == ON ) {
                           for(j = 1; j <= p->nodes_per_elmt; j++)
                               p->nodal_body_force[i-1][j-1].dimen 
                               = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));
                        }
                    }

	            MatrixFreeIndirectDouble( p->nodal_init_strain, max_no_dof );
                    p->nodal_init_strain = 
                    (double **) MatrixAllocIndirectDouble(p->dof_per_node, p->nodes_per_elmt);

	            for( i=1 ; i<=max_no_dof ; i++ ) {
                        if(UNITS_SWITCH == ON ) {
	                   for(j=1 ; j<= max_nodes_per_elmt ; j++ ) {
	                       free((char *)p->nodal_init_stress[i-1][j-1].dimen->units_name);
	                       free((char *)p->nodal_init_stress[i-1][j-1].dimen);
	                   }
                        }
	                free((char *) p->nodal_init_stress[i-1]);
	            }
	            free((char *) p->nodal_init_stress);
                    p->nodal_init_stress 
                    = (QUANTITY **) MyCalloc(p->dof_per_node, sizeof(QUANTITY *));  
                    for(i = 1; i <= p->dof_per_node; i++) {
                        p->nodal_init_stress[i-1]
                        = (QUANTITY *) MyCalloc(p->nodes_per_elmt, sizeof(QUANTITY));  
                        if( UNITS_SWITCH == ON ) {
                           for(j = 1; j <= p->nodes_per_elmt; j++) 
                               p->nodal_init_stress[i-1][j-1].dimen 
                               = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));
                        }
                    }
                    if( UNITS_SWITCH == ON ) {
	               for( j=1 ; j<= max_no_dof ; j++ ) {
	                   free((char *) p->nodal_temp[j-1].dimen->units_name);
	                   free((char *) p->nodal_temp[j-1].dimen);
	               }
                    }
	            free((char *) p->nodal_temp);
                    p->nodal_temp = (QUANTITY *) MyCalloc(p->dof_per_node, sizeof(QUANTITY));  
                    if( UNITS_SWITCH == ON ) {
                       for (i = 1; i <= p->dof_per_node; i++)
                           p->nodal_temp[i-1].dimen 
                           = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));
                    }
                    max_no_dof         = p->dof_per_node;
	        }
	        else { /* p->dof_per_node <= max_no_dof &&       */
                       /* p->nodes_per_elmt > max_nodes_per_elmt */

                    MatrixFreeIndirect( p->displ );
                    p->displ = MatrixAllocIndirect("displacement", 
                               DOUBLE_ARRAY, max_no_dof, p->nodes_per_elmt);

	            for( i=1 ; i <= max_no_dof ; i++ ) {
                        if( UNITS_SWITCH == ON ) {
	                   for( j=1 ; j<= max_nodes_per_elmt ; j++ ) {
	                          free((char *)p->nodal_body_force[i-1][j-1].dimen->units_name);
	                          free((char *)p->nodal_body_force[i-1][j-1].dimen);

	                   }
                        }
	                free((char *) p->nodal_body_force[i-1]);
	            }
                    for (i = 1; i <= max_no_dof; i++) {
                        p->nodal_body_force[i-1] 
                        = (QUANTITY *) MyCalloc(p->nodes_per_elmt, sizeof(QUANTITY));  
                        if( UNITS_SWITCH == ON ) {
                           for(j = 1; j <= p->nodes_per_elmt; j++)
                               p->nodal_body_force[i-1][j-1].dimen 
                               = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));
                        }
                    }

	            for( i=1; i <= max_no_dof; i++ ) {
	                free((char *) p->nodal_init_strain[i-1] );
	                p->nodal_init_strain[i-1] 
                        = (double *)MyCalloc(p->nodes_per_elmt, sizeof(double));
	            }

	            for( i=1 ; i<=max_no_dof ; i++ ) {
                        if( UNITS_SWITCH == ON ) {
	                   for( j=1 ; j<= max_nodes_per_elmt ; j++ ) {
	                          free((char *)p->nodal_init_stress[i-1][j-1].dimen->units_name);
     	                          free((char *)p->nodal_init_stress[i-1][j-1].dimen);
	                   }
                        }
	                free((char *) p->nodal_init_stress[i-1]);
	            }
                    for(i = 1; i <= max_no_dof; i++) {
                        p->nodal_init_stress[i-1]
                        = (QUANTITY *) MyCalloc(p->nodes_per_elmt, sizeof(QUANTITY));  
                        if( UNITS_SWITCH == ON ) {
                           for(j = 1; j <= p->nodes_per_elmt; j++) 
                               p->nodal_init_stress[i-1][j-1].dimen
                               = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));
                        }
                    }
	        }
                free((char *) p->node_connect);
                p->node_connect = iVectorAlloc(p->nodes_per_elmt);

                max_nodes_per_elmt = p->nodes_per_elmt;
    } else { 

      /* p->nodes_per_elmt <= max_nodes_per_elmt */

      if( p->no_dimen > max_no_dimen ) {
          for( i=1 ; i<=max_no_dimen ; i++ ) {
               if( UNITS_SWITCH == ON ) {
	           for( j=1 ; j<= max_nodes_per_elmt ; j++ ) {
	                free((char *) p->coord[i-1][j-1].dimen->units_name);

⌨️ 快捷键说明

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