📄 fe_allocate.c
字号:
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 + -