elmt_library.c
来自「利用语言编写的有限元分析软件」· C语言 代码 · 共 558 行 · 第 1/2 页
C
558 行
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 );
break;
case OFF:
break;
default:
break;
}
if( !(strcmp(eap->elmt_type, "FIBER")) ) { /* store hash table data to frame */
frame->eattr[n-1].work_fiber = (FIBER_ELMT *)MyCalloc(1,sizeof(FIBER_ELMT));
frame->eattr[n-1].work_fiber->no_fiber = fep->no_fiber+2; /* default: 2 shear spring */
frame->eattr[n-1].work_fiber->fiber = (FIBER_ATTR *)MyCalloc(fep->no_fiber+2,sizeof(FIBER_ATTR));
for( i=0 ; i < fep->no_fiber+2 ; ++i ) {
if( i < fep->no_fiber ) {
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;
}
else {
frame->eattr[n-1].work_fiber->fiber[i].y.value = 0.0;
frame->eattr[n-1].work_fiber->fiber[i].z.value = 0.0;
if( map->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 / map->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) */
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 */
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) );
if( i < fep->no_fiber ) {
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 {
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 )
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.value );
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 )
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<fep->no_fiber+2 */
} /* 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
}
#ifdef __STDC__
void print_property(EFRAME *frp, int i)
#else
void print_property(frp, i)
EFRAME *frp;
int i; /* elmt_attr_no */
#endif
{
int UNITS_SWITCH;
ELEMENT_ATTR *eap;
#ifdef DEBUG
printf("*** Enter print_property()\n");
#endif
UNITS_SWITCH = CheckUnits();
eap = &frp->eattr[i-1];
if(frp->no_dof == 3 || frp->no_dof == 2) {
printf(" ");
printf(" : gdof [0] = %4d : gdof[1] = %4d : gdof[2] = %4d\n",
eap->map_ldof_to_gdof[0],
eap->map_ldof_to_gdof[1],
eap->map_ldof_to_gdof[2]);
}
if(frp->no_dof == 6) { /* 3d analysis */
printf(" ");
printf(" : dof-mapping : gdof[0] = %4d : gdof[1] = %4d : gdof[2] = %4d\n",
eap->map_ldof_to_gdof[0],
eap->map_ldof_to_gdof[1],
eap->map_ldof_to_gdof[2]);
printf(" ");
printf(" gdof[3] = %4d : gdof[4] = %4d : gdof[5] = %4d\n",
eap->map_ldof_to_gdof[3],
eap->map_ldof_to_gdof[4],
eap->map_ldof_to_gdof[5]);
}
switch(UNITS_SWITCH) {
case ON:
UnitsSimplify( eap->work_material[0].dimen );
UnitsSimplify( eap->work_material[2].dimen );
UnitsSimplify( eap->work_material[5].dimen );
UnitsSimplify( eap->work_section[2].dimen );
UnitsSimplify( eap->work_section[10].dimen );
if( eap->work_material[0].dimen->units_name != NULL ) {
printf(" ");
printf(" : Young's Modulus = E = %16.3e %s\n",
eap->work_material[0].value/eap->work_material[0].dimen->scale_factor,
eap->work_material[0].dimen->units_name);
}
if( eap->work_material[4].value != 0.0 ) {
printf(" ");
printf(" : Poisson's ratio = nu = %16.3e \n", eap->work_material[4].value);
}
if( eap->work_material[2].dimen->units_name != NULL ) {
printf(" ");
printf(" : Yielding Stress = fy = %16.3e %s\n",
eap->work_material[2].value/eap->work_material[2].dimen->scale_factor,
eap->work_material[2].dimen->units_name);
}
if( eap->work_material[5].dimen->units_name != NULL ) {
printf(" ");
printf(" : Density = %16.3e %s\n",
eap->work_material[5].value/eap->work_material[5].dimen->scale_factor,
eap->work_material[5].dimen->units_name);
}
if( eap->work_section[2].dimen->units_name != NULL ) {
printf(" ");
printf(" : Inertia Izz = %16.3e %s\n",
eap->work_section[2].value/eap->work_section[2].dimen->scale_factor,
eap->work_section[2].dimen->units_name);
}
if( eap->work_section[10].dimen->units_name != NULL ) {
printf(" ");
printf(" : Area = %16.3e %s\n",
eap->work_section[10].value/eap->work_section[10].dimen->scale_factor,
eap->work_section[10].dimen->units_name);
}
break;
case OFF:
printf(" ");
printf(" : Young's Modulus = E = %16.3e\n",
eap->work_material[0].value);
printf(" ");
printf(" : Yielding Stress = fy = %16.3e\n",
eap->work_material[2].value);
printf(" ");
printf(" : Poisson's ratio = nu = %16.3e \n", eap->work_material[4].value);
printf(" ");
printf(" : Density = %16.3e\n",
eap->work_material[5].value);
printf(" ");
printf(" : Inertia Izz = %16.3e\n",
eap->work_section[2].value);
printf(" ");
printf(" : Area = %16.3e\n",
eap->work_section[10].value);
break;
default:
break;
}
#ifdef DEBUG
printf("*** Leave print_property()\n");
#endif
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?