📄 fe_print.c
字号:
/* * ============================================================================= * ALADDIN Version 1.0 : * fe_print.c : Print FE Mesh and Solution * * Copyright (C) 1995 by Mark Austin, Xiaoguang Chen, and Wane-Jang Lin * Institute for Systems Research, * University of Maryland, College Park, MD 20742 * * This software is provided "as is" without express or implied warranty. * Permission is granted to use this software for any on any computer system * and to redistribute it freely, subject to the following restrictions: * * 1. The authors are not responsible for the consequences of use of * this software, even if they arise from defects in the software. * 2. The origin of this software must not be misrepresented, either * by explicit claim or by omission. * 3. Altered versions must be plainly marked as such, and must not * be misrepresented as being the original software. * 4. This notice is to remain intact. * * Written by: Mark Austin, Xiaoguang Chen, and Wane-Jang Lin December 1995 * ============================================================================= */#include <ctype.h>#ifdef __STDC__#include <stdarg.h>#else#include <varargs.h>#endif#include "defs.h"#include "units.h"#include "matrix.h"#include "vector.h"#include "fe_database.h"#include "symbol.h"#include "fe_functions.h"#include "elmt.h"#include "miscellaneous.h"/* External Declarations for global frame/working element data structures */extern ARRAY *array;extern EFRAME *frame;/*#define DEBUG *//* * ------------------------- * Print Finite Element Mesh * ------------------------- */void Print_Mesh(){MATRIX *m = (MATRIX *)NULL;NODE *np;ELEMENT *elmt;ELEMENT_ATTR *eap;RIGID *rb;NODE_LOADS *nforces;ELEMENT_LOADS *elsp;ELOAD_LIB *elp;void (*voidptr)();int iel_no,i,j,k,l;int UNITS_SWITCH;#ifdef DEBUG printf("*** In Print_Mesh()\n");#endif UNITS_SWITCH = CheckUnits(); printf("\n"); printf("===========================================================================\n"); printf("Title : DESCRIPTION OF FINITE ELEMENT MESH \n"); printf("===========================================================================\n"); printf("\n"); printf("=======================\n"); printf("Profile of Problem Size\n"); printf("=======================\n\n"); printf(" Dimension of Problem = %6d\n", frame->no_dimen); printf("\n"); printf(" Number Nodes = %6d\n", frame->no_nodes); printf(" Degrees of Freedom per node = %6d\n", frame->no_dof); printf(" Max No Nodes Per Element = %6d\n", frame->no_nodes_per_elmt); printf("\n"); printf(" Number Elements = %6d\n", frame->no_elements); printf(" Number Element Attributes = %6d\n", frame->no_element_attr); printf(" Number Loaded Nodes = %6d\n", frame->no_node_loads); printf(" Number Loaded Elements = %6d\n", frame->no_element_loads); printf("\n"); /* [a] : Print Nodes */ switch((int) frame->no_dimen) { case 3: printf("\n"); printf("----------------------------------------------------------------------------------------------\n"); printf("Node# X_coord Y_coord Z_coord Dx Dy Dz Rx Ry Rz\n"); printf("----------------------------------------------------------------------------------------------\n"); printf("\n"); switch( UNITS_SWITCH ) { case ON: for(i=1; i <= frame->no_nodes; i++) { np = &frame->node[i-1]; printf("%5d %13.4e %.3s %13.4e %.3s %13.4e %.3s ", i, np->coord[0].value/np->coord[0].dimen->scale_factor, np->coord[0].dimen->units_name, np->coord[1].value/np->coord[1].dimen->scale_factor, np->coord[1].dimen->units_name, np->coord[2].value/np->coord[2].dimen->scale_factor, np->coord[2].dimen->units_name); for(j=1; j <= frame->no_dof; j++) printf("%5d ", np->bound_id[j-1]); printf("\n"); } break; case OFF: for(i=1; i <= frame->no_nodes; i++) { np = &frame->node[i-1]; printf("%5d %13.4e %13.4e %13.4e ", i, np->coord[0].value, np->coord[1].value, np->coord[2].value); for(j=1; j <= frame->no_dof; j++) printf("%5d ", np->bound_id[j-1]); printf("\n"); } break; default: break; } break; case 2: printf("\n"); printf("------------------------------------------------------------------------------\n"); printf("Node# X_coord Y_coord Tx Ty Rz \n"); printf("------------------------------------------------------------------------------\n"); printf("\n"); switch( UNITS_SWITCH ) { case ON: for(i=1;i<=frame->no_nodes; i++) { np = &frame->node[i-1]; printf("%5d %13.4e %.3s %13.4e %.3s ", i, np->coord[0].value/np->coord[0].dimen->scale_factor, np->coord[0].dimen->units_name, np->coord[1].value/np->coord[1].dimen->scale_factor, np->coord[1].dimen->units_name); for(j=1; j<= frame->no_dof;j++) printf("%5d ", np->bound_id[j-1]); printf("\n"); } break; case OFF: for(i=1;i<=frame->no_nodes; i++) { np = &frame->node[i-1]; printf("%5d %13.4e %13.4e ", i, np->coord[0].value, np->coord[1].value); for(j=1; j<= frame->no_dof;j++) printf("%5d ", np->bound_id[j-1]); printf("\n"); } break; default: break; } break; default: printf(">>ERROR : Ndm = %d; should be 2 or 3 \n", frame->no_dimen); break; } /* [b] : Print Element Data : frame->node_per_elmt = max nodes per element */ printf("\n\n"); printf("-----------------------"); for(i = 1; i <= frame->no_nodes_per_elmt; i++) printf("-----------"); printf("-----------------------\n"); printf("Element# Type "); for(i=1;i <= frame->no_nodes_per_elmt; i++) printf(" node[%1d]", i); printf(" Element_Attr_Name\n"); printf("--------------------------------------"); for(i=1;i <= frame->no_nodes_per_elmt;i++) printf("----------"); printf("------------\n\n"); for(i=1; i <= frame->no_elements; i++) { printf("%8d", i); elmt = &frame->element[i-1]; j = elmt->elmt_attr_no; printf(" %-12s", frame->eattr[j-1].elmt_type); for(j = 1; j <= frame->no_nodes_per_elmt; j++) { if(elmt->node_connect[j-1] != 0) printf("%10d", elmt->node_connect[j-1]); else printf(" "); } printf(" %s\n", elmt->elmt_attr_name); } printf("\n"); /* [c] : Print Rigid Body Data */ if(frame->no_rigid >= 1) { printf("\n\n"); printf("------------------------ \n"); printf("RBody# : Rigid Body Data \n"); printf("------------------------ \n"); for(i=1; i <=frame->no_rigid; i++) { rb = &frame->rigid[i-1]; printf("\n"); printf("%3d : name = \"%s\" \n", i, rb->rbody_attr_name); printf(" type = %2d\n", rb->rb_type); printf(" no nodes = %4d\n", rb->nodes_conn); printf(" connectivity : "); for(j=1;j <= rb->nodes_conn;j++) printf("%2d ", rb->in[j]); printf("\n"); printf(" rest dof : "); for(j=1; j <= 6; j++) printf("%2d ", rb->rest_dof[j]); printf("\n"); printf(" Centre Mass : (x,y,z) = (%12.4f, %12.4f, %12.3f)\n",rb->xcg.value,rb->ycg.value,rb->zcg.value); printf(" Density = %14.5f\n", rb->prop[1].value); printf(" Thickness = %14.5f\n", rb->prop[2].value); printf(" Area = %14.5f\n", rb->prop[3].value); printf(" Ixx = %14.5f\n", rb->prop[7].value); printf(" Iyy = %14.5f\n", rb->prop[8].value); printf(" Izz = %14.5f\n", rb->prop[9].value); printf(" Ixy = %14.5f\n", rb->prop[10].value); printf(" Iyz = %14.5f\n", rb->prop[11].value); printf(" Izx = %14.5f\n", rb->prop[12].value); printf("\n"); } } /* [c] : Print Material Data */ if(frame->no_element_attr >= 1 ) { printf("--------------------- \n"); printf("Element Attribute Data : \n"); printf("--------------------- \n"); for(i = 1; i <= frame->no_element_attr; i++) { eap = &frame->eattr[i-1]; printf("\n\n"); printf("ELEMENT_ATTR No. %3d : name = \"%s\" \n ", i, eap->name); printf(" : section = \"%s\" \n", eap->section); printf(" : material = \"%s\" \n ", eap->material); printf(" : type = %s\n", eap->elmt_type); print_property( frame, i ); } } /* [d] : Print Nodal Forces */ if(frame->no_node_loads >= 1 && (frame->no_dimen == 2)) { printf(" \n"); printf("EXTERNAL NODAL LOADINGS \n"); printf("-----------------------------------------------\n"); nforces = &frame->nforces[0]; if(frame->no_dof == 3) { switch( UNITS_SWITCH ) { case ON: for( i=1 ; i<=frame->no_dof ; i++ ) UnitsSimplify( nforces->fn[i-1].dimen ); printf("Node# Fx (%s) Fy (%s) Mz (%s)\n",nforces->fn[0].dimen->units_name,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -