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

📄 fe_allocate.c

📁 有限元分析源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
int  i,j,k, el_attr_no;int       UNITS_SWITCH;int      iNO_INTEG_pts;int   iInPlaneIntegPts;int iThicknessIntegPts;#ifdef DEBUG       printf("*** Enter FrameAlloc()\n");#endif     UNITS_SWITCH = CheckUnits();    /* --------------------------------------------- */    /* Allocate and initialize EFRAME data structure */    /* --------------------------------------------- */    frp = (EFRAME *) MyCalloc(1,sizeof(EFRAME));    sp = lookup("NDimension");         /* No of dimensions : 2 or 3 */    frp->no_dimen = (int) sp->u.q->value;    sp = lookup("NDofPerNode");        /* No gdof per node */    frp->no_dof = (int) sp->u.q->value;    sp = lookup("MaxNodesPerElement"); /* Max no nodes per element */    frp->no_nodes_per_elmt = (int) sp->u.q->value;    sp = lookup("InPlaneIntegPts");   /* number of integration pts in plane/surface      */    if(sp == NULL)        iInPlaneIntegPts = 2*2;        /* 2x2 as default */    else       iInPlaneIntegPts = (int) sp->u.q->value;    sp = lookup("ThicknessIntegPts"); /* number of integration pts in thickness direction*/    if(sp == NULL)        iThicknessIntegPts = 2;        /* 2 as default */    else       iThicknessIntegPts = (int) sp->u.q->value;    /* ---------------------------------------------- */    /* Allocate Pointers to component data structures */    /* ---------------------------------------------- */    frp->node      = (NODE *)    MyCalloc( UNIT_NODES,    sizeof(NODE));    frp->element   = (ELEMENT *) MyCalloc( UNIT_ELEMENTS, sizeof(ELEMENT));    frp->eattr     = (ELEMENT_ATTR *) MyCalloc(UNIT_ELEMENT_ATTR, sizeof(ELEMENT_ATTR));    frp->rigid     = (RIGID *) MyCalloc( UNIT_RIGIDS,   sizeof(RIGID));    frp->jdiag     = (int *)   MyCalloc((UNIT_NODES * UNIT_NDF), sizeof(int));    frp->nforces   = (NODE_LOADS *) MyCalloc( UNIT_NFORCES, sizeof(NODE_LOADS));    frp->eforces   = (ELEMENT_LOADS *) MyCalloc( UNIT_ELEMENTS, sizeof(ELEMENT_LOADS));    /* ----------------------------------------------------- */    /* Allocation of Arrays within Component Data Structures */     /* ----------------------------------------------------- */    for(i=1; i <= UNIT_NODES; i++) {        np = &frp->node[i-1];        np->coord = (QUANTITY *) MyCalloc(frp->no_dimen, sizeof(QUANTITY));        if( UNITS_SWITCH == ON ) {           for(j = 1; j <= frp->no_dimen; j++){              np->coord[j-1].dimen    =(DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));           }        }        np->bound_id = (int *) MyCalloc(frp->no_dof, sizeof(int));        np->rb_num   = (int ) 0;        np->disp     = (QUANTITY *) MyCalloc(frp->no_dof, sizeof(QUANTITY));        if( UNITS_SWITCH == ON ) {           for (j = 1; j <= frp->no_dof; j++) {              np->disp[j-1].dimen  = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));           }        }        np->TrT = (MATRIX *) MyCalloc(1,sizeof(MATRIX));    }    iNO_INTEG_pts = iThicknessIntegPts*iInPlaneIntegPts;    for(i=1; i<= UNIT_ELEMENTS; i++) {        ep                 = &frp->element[i-1];        ep->elmt_attr_name = (char *) NULL;        ep->elmt_attr_no   = (int) 0;        ep->node_connect   = (int  *) MyCalloc((frp->no_nodes_per_elmt+1),sizeof(int));        ep->d_array        = (int  *) MyCalloc(frp->no_nodes_per_elmt, sizeof(int));        ep->rp             = (RESPONSE *) MyCalloc(1,sizeof(RESPONSE));        ep->esp            = (ELEMENT_STATE *) MyCalloc(1,sizeof(ELEMENT_STATE));        ep->esp->state     = (int) 0;        ep->LC_ptr         = (MATER_LOAD_CURVE *) MyCalloc(1,sizeof(MATER_LOAD_CURVE));        ep->LC_ptr->name   = (char *) NULL;        ep->LC_ptr->R      = (double *) MyCalloc(iNO_INTEG_pts,sizeof(double));        ep->LC_ptr->H      = (double *) MyCalloc(iNO_INTEG_pts,sizeof(double));        ep->LC_ptr->back_stress = MatrixAllocIndirectDouble(6, iNO_INTEG_pts);        ep->rp->Forces     = MatrixAllocIndirect("nodal_force",DOUBLE_ARRAY,frp->no_dof,UNIT_NODES);        ep->rp->displ     = MatrixAllocIndirect("displ", DOUBLE_ARRAY, frp->no_dof, UNIT_NODES);        ep->rp->stress    = MatrixAllocIndirect("stress", DOUBLE_ARRAY,9,iNO_INTEG_pts);        ep->rp->strain_pl = MatrixAllocIndirect("strain_pl",DOUBLE_ARRAY,9,iNO_INTEG_pts);        ep->rp->strain_pl_incr     = MatrixAllocIndirect("strain_pl_incr",DOUBLE_ARRAY,9,iNO_INTEG_pts);        ep->rp->effect_pl_strain   = (double *) MyCalloc(iNO_INTEG_pts, sizeof(double));        ep->rp->eff_pl_strain_incr = (double *) MyCalloc(iNO_INTEG_pts, sizeof(double));        if(UNITS_SWITCH == ON) {           ep->rp->min_moment.dimen  = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));           ep->rp->max_moment.dimen  = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));           ep->rp->min_shear.dimen   = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));           ep->rp->max_shear.dimen   = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));           ep->rp->Mzc.dimen         = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));        }    }    for(i=1; i<= UNIT_ELEMENT_ATTR; i++) {        eap                   = &frp->eattr[i-1];        eap->name             = (char *) NULL;        eap->elmt_type        = (char *) NULL;        eap->map_ldof_to_gdof = (int  *) MyCalloc(6,sizeof(int));        eap->material         = (char *) NULL;        eap->section          = (char *) NULL;        eap->work_material    = (QUANTITY *) MyCalloc(UNIT_MATERIAL_ATTR,sizeof(QUANTITY));         eap->work_section     = (QUANTITY *) MyCalloc(UNIT_SECTION_ATTR,sizeof(QUANTITY));        if( UNITS_SWITCH == ON ) {           for(j = 1; j <= UNIT_MATERIAL_ATTR; j++) {              eap->work_material[j-1].dimen = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));              ZeroUnits(eap->work_material[j-1].dimen);           }           for(j = 1; j <= UNIT_SECTION_ATTR; j++) {              eap->work_section[j-1].dimen = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));              ZeroUnits(eap->work_section[j-1].dimen);           }        }    }   /* In the following: 10 is arbitrary and is subjected to change*/    for(i=1; i <= UNIT_RIGIDS;i++) {        rig                  = &frp->rigid[i-1];        rig->rbody_attr_name = (char *) NULL;        rig->in              = (int *) MyCalloc(10, sizeof(int));         rig->rest_dof        = (int *) MyCalloc(6, sizeof(int));        rig->per_nodes       = (int *) MyCalloc(10, sizeof(int));        rig->prop            = (QUANTITY *) MyCalloc(10, sizeof(QUANTITY));          if( UNITS_SWITCH == ON ) {           for(j = 1; j <= 10; j++)               rig->prop[j-1].dimen = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));        }    }    for(i=1; i <= UNIT_ELEMENTS; i++) {        elsp                       = &frp->eforces[i-1];        elsp->no_loads_faces       = 1;                                elsp->face_direc           = (double *) MyCalloc(frp->no_dimen, sizeof(double));        elsp->elib_ptr             = (ELOAD_LIB *) MyCalloc(UNIT_NODES, sizeof(ELOAD_LIB));        elsp->elib_ptr->name       = (char *) NULL;        elsp->elib_ptr->nopl       = (int *) MyCalloc(4, sizeof(int));        elsp->elib_ptr->pr         = (MATRIX *) MyCalloc(1,sizeof(MATRIX));        elsp->elib_ptr->face_no           = (int) 0;        elsp->elib_ptr->numnp_face        = (int) 0;        elsp->elib_ptr->pr->iNoRows       = 4;        elsp->elib_ptr->pr->iNoColumns    = 3;        elsp->elib_ptr->pr->cpMatrixName  = (char *)NULL;        if( UNITS_SWITCH == ON ) {            elsp->elib_ptr->pr->spRowUnits = BufferInit(4);            elsp->elib_ptr->pr->spColUnits = BufferInit(3);        }    }    for(i=1; i <= UNIT_NODES; i++) {       elp                       = &elsp->elib_ptr[i-1];       elp->body_force           = (QUANTITY *) MyCalloc(frp->no_dimen, sizeof(QUANTITY));       elp->init_stress          = (QUANTITY *) MyCalloc(frp->no_dimen, sizeof (QUANTITY));       elp->init_strain          = (double *) MyCalloc(frp->no_dimen, sizeof (double));       elp->traction             = (QUANTITY *) MyCalloc(frp->no_dimen, sizeof(QUANTITY));       if( UNITS_SWITCH == ON ) {          for(j = 1; j <= frp->no_dimen; j++) {              elp->body_force[j-1].dimen  = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));          }          for(j = 1; j <= frp->no_dimen; j++) {              elp->init_stress[j-1].dimen  = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));          }          for(j = 1; j <= frp->no_dimen; j++) {              elp->traction[j-1].dimen  = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));          }       }    }    for (i=1; i <= UNIT_NFORCES; i++) {       nlp         = &frp->nforces[i-1];       nlp->fn     = (QUANTITY *) MyCalloc(frp->no_dof, sizeof(QUANTITY));       nlp->node_f = (int) 0;        if( UNITS_SWITCH == ON ) {          for(j = 1; j <= frp->no_dof; j++) {             nlp->fn[j-1].dimen  = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));          }       }    }    /*------------------------------------------------------*/    /* Assignment of max_no_ parameters for CheckSpace()    */    /*------------------------------------------------------*/    max_no_nodes        = UNIT_NODES;    max_no_elements     = UNIT_ELEMENTS;    max_no_nforces      = UNIT_NFORCES;    max_no_loaded_elmts = UNIT_EFORCES;    max_no_rigid        = UNIT_RIGIDS;    max_no_eqs          = UNIT_NODES * UNIT_NDF;#ifdef DEBUG       printf("*** Leave FrameAlloc()\n\n");#endif    return(frp);}

⌨️ 快捷键说明

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