📄 elmt_library.c
字号:
if(sap->Iyy.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[1].dimen, sap->Iyy.dimen ); if(sap->Izz.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[2].dimen, sap->Izz.dimen ); if(sap->Ixy.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[3].dimen, sap->Ixy.dimen ); if(sap->Ixz.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[4].dimen, sap->Ixz.dimen ); if(sap->Iyz.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[5].dimen, sap->Iyz.dimen ); if(sap->weight.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[6].dimen, sap->weight.dimen ); if(sap->bf.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[7].dimen, sap->bf.dimen ); if(sap->tf.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[8].dimen, sap->tf.dimen ); if(sap->depth.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[9].dimen, sap->depth.dimen ); if(sap->area.value != 0.0) { if(sap->area.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[10].dimen, sap->area.dimen ); } else { if(sap->depth.dimen != NULL && sap->bf.dimen !=NULL) UnitsMultRep( frame->eattr[n-1].work_section[10].dimen, sap->bf.dimen , sap->depth.dimen ); else if(sap->depth.dimen != NULL && sap->width.dimen !=NULL) UnitsMultRep( frame->eattr[n-1].work_section[10].dimen, sap->width.dimen , sap->depth.dimen ); } if(sap->plate_thickness.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[11].dimen, sap->plate_thickness.dimen ); if(sap->tor_const.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[12].dimen, sap->tor_const.dimen ); if(sap->rT.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[13].dimen, sap->rT.dimen ); if(sap->width.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[14].dimen, sap->width.dimen ); if(sap->tw.dimen != NULL) UnitsCopy( frame->eattr[n-1].work_section[15].dimen, sap->tw.dimen ); ZeroUnits( frame->eattr[n-1].work_section[16].dimen ); break; case OFF: break; default: break; } /* store hash table data to frame */ if( !(strcmp(eap->elmt_type, "FIBER_2D")) || !(strcmp(eap->elmt_type, "FIBER_3D")) || !(strcmp(eap->elmt_type, "FIBER_2DS")) || !(strcmp(eap->elmt_type, "FIBER_3DS")) ) { if( !(strcmp(eap->elmt_type, "FIBER_2D")) || !(strcmp(eap->elmt_type, "FIBER_3D")) ) { fep->no_shear = 1; /* global shear spring for each element in one direction */ total_fiber = fep->no_fiber + (frame->no_dimen-1)*fep->no_shear; frame->eattr[n-1].work_fiber = (FIBER_ELMT *)MyCalloc(1,sizeof(FIBER_ELMT)); frame->eattr[n-1].work_fiber->no_fiber = fep->no_fiber; frame->eattr[n-1].work_fiber->no_shear = fep->no_shear; frame->eattr[n-1].work_fiber->fiber = (FIBER_ATTR *)MyCalloc(total_fiber, sizeof(FIBER_ATTR)); for( i=0 ; i < total_fiber ; ++i ) { if( i < fep->no_fiber ) { /* flexual fibers */ frame->eattr[n-1].work_fiber->fiber[i].y.value = fep->fiber[i].y.value; frame->eattr[n-1].work_fiber->fiber[i].z.value = fep->fiber[i].z.value; frame->eattr[n-1].work_fiber->fiber[i].area.value = fep->fiber[i].area.value; frame->eattr[n-1].work_fiber->fiber[i].Es.value = fep->fiber[i].Es.value; frame->eattr[n-1].work_fiber->fiber[i].Et.value = fep->fiber[i].Et.value; frame->eattr[n-1].work_fiber->fiber[i].fy.value = fep->fiber[i].fy.value; frame->eattr[n-1].work_fiber->fiber[i].Gs.value = 0.0; frame->eattr[n-1].work_fiber->fiber[i].Gt.value = 0.0; frame->eattr[n-1].work_fiber->fiber[i].fv.value = 0.0; } else { /* shear spring */ frame->eattr[n-1].work_fiber->fiber[i].y.value = 0.0; frame->eattr[n-1].work_fiber->fiber[i].z.value = 0.0; frame->eattr[n-1].work_fiber->fiber[i].Gs.value = 0.0; frame->eattr[n-1].work_fiber->fiber[i].Gt.value = 0.0; frame->eattr[n-1].work_fiber->fiber[i].fv.value = 0.0; if( sap->ks <= 0.0 ) /* default shear correction factor ks = 1.2 */ frame->eattr[n-1].work_fiber->fiber[i].area.value = frame->eattr[n-1].work_section[10].value / 1.2; else frame->eattr[n-1].work_fiber->fiber[i].area.value = frame->eattr[n-1].work_section[10].value / sap->ks; if( map->nu <= 0.0 ) /* default nu = 0.3 */ frame->eattr[n-1].work_material[4].value = 0.3; if( map->G.value <= 0.0 ) /* G = E/2/(1+nu) */ if( map->E.value <= 0.0 ) frame->eattr[n-1].work_fiber->fiber[i].Es.value = frame->eattr[n-1].work_fiber->fiber[0].Es.value/2.0/(1.0+frame->eattr[n-1].work_material[4].value); else frame->eattr[n-1].work_fiber->fiber[i].Es.value = map->E.value/2.0/(1.0+frame->eattr[n-1].work_material[4].value); else frame->eattr[n-1].work_fiber->fiber[i].Es.value = map->G.value; if( map->Gt.value <= 0.0 ) { if( map->ET.value <= 0.0 ) /* Et not exist, assume always linear, Et=Es */ frame->eattr[n-1].work_fiber->fiber[i].Et.value = frame->eattr[n-1].work_fiber->fiber[i].Es.value; else frame->eattr[n-1].work_fiber->fiber[i].Et.value = map->ET.value/2.0/(1.0+frame->eattr[n-1].work_material[4].value); } else frame->eattr[n-1].work_fiber->fiber[i].Et.value = map->Gt.value; if( map->fv.value <= 0.0 ) /* use fy as shear yielding stress */ if( map->fy.value <= 0.0 ) frame->eattr[n-1].work_fiber->fiber[i].fy.value = frame->eattr[n-1].work_fiber->fiber[0].fy.value; else frame->eattr[n-1].work_fiber->fiber[i].fy.value = map->fy.value; else frame->eattr[n-1].work_fiber->fiber[i].fy.value = map->fv.value; } if(UNITS_SWITCH == ON) { frame->eattr[n-1].work_fiber->fiber[i].y.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].z.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].area.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].Es.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].Et.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].fy.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].Gs.dimen = (DIMENSIONS *) NULL; frame->eattr[n-1].work_fiber->fiber[i].Gt.dimen = (DIMENSIONS *) NULL; frame->eattr[n-1].work_fiber->fiber[i].fv.dimen = (DIMENSIONS *) NULL; if( i < fep->no_fiber ) { /* flexual fibers */ UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].y.dimen, fep->fiber[i].y.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].z.dimen, fep->fiber[i].z.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].area.dimen, fep->fiber[i].area.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].Es.dimen, fep->fiber[i].Es.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].Et.dimen, fep->fiber[i].Et.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].fy.dimen, fep->fiber[i].fy.dimen ); } else { /* shear spring */ UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].y.dimen, fep->fiber[0].y.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].z.dimen, fep->fiber[0].z.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].area.dimen, frame->eattr[n-1].work_section[10].dimen ); if( map->G.value <= 0.0 ) if( map->E.value <= 0.0 ) UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].Es.dimen, frame->eattr[n-1].work_fiber->fiber[0].Es.dimen ); else UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].Es.dimen, map->E.dimen ); else UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].Es.dimen, map->G.dimen ); if( map->Gt.value <= 0.0 ) { if( map->ET.value <= 0.0 ) UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].Et.dimen, frame->eattr[n-1].work_fiber->fiber[i].Es.dimen ); else UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].Et.dimen, map->ET.dimen ); } else UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].Et.dimen, map->Gt.dimen ); if( map->fv.value <= 0.0 ) if( map->fy.value <= 0.0 ) UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].fy.dimen, frame->eattr[n-1].work_fiber->fiber[0].fy.dimen ); else UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].fy.dimen, map->fy.dimen ); else UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].fy.dimen, map->fv.dimen ); } } /* UNIT_SWITCH == ON */ } /* i=0, i<total_fiber */ } /* FIBER_2D and FIBER_3D */ else { /* FIBER_2DS and FIBER_3DS */ fep->no_shear = fep->no_fiber; /* individual shear spring for each fiber in one direction */ frame->eattr[n-1].work_fiber = (FIBER_ELMT *)MyCalloc(1,sizeof(FIBER_ELMT)); frame->eattr[n-1].work_fiber->no_fiber = fep->no_fiber; frame->eattr[n-1].work_fiber->no_shear = fep->no_shear; frame->eattr[n-1].work_fiber->fiber = (FIBER_ATTR *)MyCalloc(fep->no_fiber,sizeof(FIBER_ATTR)); for( i=0 ; i < fep->no_fiber ; ++i ) { frame->eattr[n-1].work_fiber->fiber[i].y.value = fep->fiber[i].y.value; frame->eattr[n-1].work_fiber->fiber[i].z.value = fep->fiber[i].z.value; frame->eattr[n-1].work_fiber->fiber[i].area.value = fep->fiber[i].area.value; frame->eattr[n-1].work_fiber->fiber[i].Es.value = fep->fiber[i].Es.value; frame->eattr[n-1].work_fiber->fiber[i].Et.value = fep->fiber[i].Et.value; frame->eattr[n-1].work_fiber->fiber[i].fy.value = fep->fiber[i].fy.value; frame->eattr[n-1].work_fiber->fiber[i].Gs.value = fep->fiber[i].Gs.value; frame->eattr[n-1].work_fiber->fiber[i].Gt.value = fep->fiber[i].Gt.value; frame->eattr[n-1].work_fiber->fiber[i].fv.value = fep->fiber[i].fv.value; if(UNITS_SWITCH == ON) { frame->eattr[n-1].work_fiber->fiber[i].y.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].z.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].area.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].Es.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].Et.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].fy.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].Gs.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].Gt.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); frame->eattr[n-1].work_fiber->fiber[i].fv.dimen = (DIMENSIONS *)MyCalloc( 1, sizeof(DIMENSIONS) ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].y.dimen, fep->fiber[i].y.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].z.dimen, fep->fiber[i].z.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].area.dimen, fep->fiber[i].area.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].Es.dimen, fep->fiber[i].Es.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].Et.dimen, fep->fiber[i].Et.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].fy.dimen, fep->fiber[i].fy.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].Gs.dimen, fep->fiber[i].Gs.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].Gt.dimen, fep->fiber[i].Gt.dimen ); UnitsCopy( frame->eattr[n-1].work_fiber->fiber[i].fv.dimen, fep->fiber[i].fv.dimen ); } /* UNIT_SWITCH == ON */ } /* i=0, i<fep->no_fiber */ } /* FIBER_2DS and FIBER_3DS */ } /* eap->elmt_type == FIBER_** */ /* DOF of nodes in a elment */ FLAG = FALSE; for (i = 0; i < NO_ELEMENTS_IN_LIBRARY ; i++) { if((elmt_library[i].name) != NULL && Streq(frame->eattr[n-1].elmt_type, elmt_library[i].name)) { no_dof = elmt_library[i].no_dof; FLAG = TRUE; break; } } if(FLAG == FALSE) { printf(">>FATAL ERROR: In assign_properties():\n"); printf(">> : In file elmt.h : elmemt type %s is not defined \n", frame->eattr[n-1].elmt_type); exit(1); } for(i = 1; i <= no_dof; i++) { frame->eattr[n-1].map_ldof_to_gdof[i-1] = eap->map_ldof_to_gdof[i-1]; } return(frame);#ifdef DEBUG printf("*** Leave assign_properties()\n");#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -