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

📄 init.c

📁 利用语言编写的有限元分析软件
💻 C
📖 第 1 页 / 共 2 页
字号:
	char        *name;
	int	     kval;
	} fe_objects[] = {
            "ElementAttr",     ELMT_ATTR,
            "SectionAttr",     SECT_ATTR,
           "MaterialAttr",     MATL_ATTR,
              "FiberAttr",     FIB_ATTR,
           "SetUnitsType",     UNIT,
                   "type",     TYPE,
                "section",     SECTION,
               "material",     MATERIAL,
                  "fiber",     FIBER,
                    "map",     MAP,
                     "to",     TO,
                   "ldof",     LDOF,
                   "gdof",     GDOF,

	       "LinkNode",     LINK_NODE,
		"AddElmt",     ADD_ELMT,
	};

#define NO_OBJECTS (sizeof(fe_objects)/sizeof(fe_objects[0]))

/*
 *  ------------------------------------------------
 *  Adjustable Parameters for Finite Element Problem
 *  ------------------------------------------------
 */

static struct {
	char        *name;
	double 	    value;
	} fe_parameters[] = {
                "NDimension",  (double) UNIT_NDM,
       	       "NDofPerNode",  (double) UNIT_NDF,
        "MaxNodesPerElement",  (double) UNIT_NEN,
           "InPlaneIntegPts",  (double) UNIT_IN_PLANE_INTEG_PTS,
         "ThicknessIntegPts",  (double) UNIT_INTEG_PTS,
             "GaussIntegPts",  (double) UNIT_INTEG_PTS,
        };


#define NO_PARAMETERS (sizeof(fe_parameters)/sizeof(fe_parameters[0]))

/* -----------------
 * Engineering Units
 * ----------------- */

static DIMENSIONS eng_units[] = {

/* LENGTH */         "micron",	   1E-6,  1,  0,  0, 0, SI,
                     "mm",	   1E-3,  1,  0,  0, 0, SI,
		     "cm",	   1E-2,  1,  0,  0, 0, SI,
		     "dm",	   1E-1,  1,  0,  0, 0, SI,
		      "m",	    1.0,  1,  0,  0, 0, SI,
		     "km",	   1E+3,  1,  0,  0, 0, SI,

/* MASS   */          "g",         1E-3,  0,  1,  0, 0, SI,
                     "kg",	    1.0,  0,  1,  0, 0, SI,
                     "Mg",         1E+6,  0,  1,  0, 0, SI,

/* TIME   */         "sec",	    1.0,  0,  0,  1, 0, SI_US,
                     "ms",	 0.0010,  0,  0,  1, 0, SI_US, /* micro sec */
                    "min",         60.0,  0,  0,  1, 0, SI_US,
                     "hr",       3600.0,  0,  0,  1, 0, SI_US, 

/* TEMPERATURE */ "deg_C",          1.0,  0,  0,  0, 1, SI,
                  "DEG_C",          1.0,  0,  0,  0, 1, SI,   /* incr. temp. only */

/* FREQUENCE   */    "Hz",          1.0,  0,  0, -1, 0, SI_US,
/* SPEED       */   "rpm",     1.0/60.0,  0,  0, -1, 0, SI_US,  /* rev per min */
                    "cps",          1.0,  0,  0, -1, 0, SI_US,  /* cycle per sec */

/* FORCE       */     "N",          1.0,  1,  1, -2, 0, SI,
		     "kN",         1E+3,  1,  1, -2, 0, SI,
		     "kgf",     9.80665,  1,  1, -2, 0, SI,

/* PRESSURE    */    "Pa",          1.0, -1,  1, -2, 0, SI,
                    "kPa",         1E+3, -1,  1, -2, 0, SI,
                    "MPa",         1E+6, -1,  1, -2, 0, SI,
                    "GPa",         1E+9, -1,  1, -2, 0, SI,

/* ENERGY      */   "Jou",          1.0,  2,  1, -2, 0, SI,
                     "kJ",         1E+3,  2,  1, -2, 0, SI,

/* POWER       */  "Watt",          1.0,  2,  1, -3, 0, SI,
                     "kW",         1E+3,  2,  1, -3, 0, SI,

/* LENGTH */         "in",	    1.0,  1,  0,  0, 0, US,
		    "mil",	   1E-3,  1,  0,  0, 0, US,
	       "micro_in",   	   1E-6,  1,  0,  0, 0, US,
		     "ft",         12.0,  1,  0,  0, 0, US,
		   "yard",         36.0,  1,  0,  0, 0, US,
		   "mile",      63360.0,  1,  0,  0, 0, US,

/* VOLUME */     "gallon",          1.0,  3,  0,  0, 0, US,
                 "barrel",          1.0,  3,  0,  0, 0, US,

/* MASS   */         "lb",          1.0,  0,  1,  0, 0, US,
                  "grain",     1.0/7E+3,  0,  1,  0, 0, US,
                    "ton",         2E+3,  0,  1,  0, 0, US,
                    "klb",         1E+3,  0,  1,  0, 0, US,

/* TEMPERATURE */ "deg_F",          1.0,  0,  0,  0, 1, US,
                  "DEG_F",          1.0,  0,  0,  0, 1, US,/* incre. temp only */

/* FORCE  */        "lbf",          1.0,  1,  1, -2, 0, US,
                   "kips",         1E+3,  1,  1, -2, 0, US,

/* PRESSURE */      "psi",          1.0, -1,  1, -2, 0, US,
                    "ksi",         1E+3, -1,  1, -2, 0, US,

/* PLANE ANGLE */   "deg",   0.01745329,  0,  0,  0, 0, SI_US,
                    "rad",          1.0,  0,  0,  0, 0, SI_US,
	};

#define NO_UNITS (sizeof(eng_units)/sizeof(eng_units[0]))

int UNITS_TYPE;
Init_Problem()
{
int            i;
SYMBOL        *s;
int UNITS_SWITCH;

	UNITS_SWITCH = CheckUnits();
        UNITS_TYPE = SI;

        /* Macro Language Keywords and Constants */

	for (i = 0; i < NO_KEYWORDS; i++)
		build_table(keywords[i].name,  keywords[i].kval, 0.0);

	for (i = 0; i < NO_CONSTANTS; i++) {
		s = build_table(consts[i].name, QUAN, 0.0);

		s->u.q          = (QUANTITY *) MyCalloc(1,sizeof(QUANTITY));
		s->u.q->value   = consts[i].cval;
                if(UNITS_SWITCH==ON) {
	           s->u.q->dimen   = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));
	           ZeroUnits(s->u.q->dimen);
                   s->u.q->dimen->units_type = SI_US;
                }
	}

        /* Builtin Quantity Functions */

	for (i = 0; i < NO_BUILTIN_QUANTITY; i++)  {
		s = build_table(builtin_quantity[i].name, BLTIN_QUANTITY, 0.0);
		s->u.quantityptr = builtin_quantity[i].func;
	}

	for (i = 0; i < NO_BUILTIN1_QUANTITY; i++)  {
		s = build_table(builtin1_quantity[i].name, BLTIN1_QUANTITY, 0.0);
		s->u.quantityptr = builtin1_quantity[i].func;
	}

        for (i = 0; i < NO_BUILTIN2_QUANTITY; i++)  {
                s = build_table(builtin2_quantity[i].name, BLTIN2_QUANTITY, 0.0);
                s->u.quantityptr = builtin2_quantity[i].func;
        }

	for (i = 0; i < NO_BUILTIN3_QUANTITY; i++)  {
		s = build_table(builtin3_quantity[i].name, BLTIN3_QUANTITY, 0.0);
		s->u.quantityptr = builtin3_quantity[i].func;
	}

        /* Builtin Matrix Functions */

	for (i = 0; i < NO_BUILTIN_MATRIX; i++)  {
		s = build_table(builtin_matrix[i].name, BLTIN_MATRIX, 0.0);
		s->u.matrixptr = builtin_matrix[i].func;
	}

	for (i = 0; i < NO_BUILTIN1_MATRIX; i++)  {
		s = build_table(builtin1_matrix[i].name, BLTIN1_MATRIX, 0.0);
		s->u.matrixptr = builtin1_matrix[i].func;
	}

	for (i = 0; i < NO_BUILTIN2_MATRIX; i++)  {
  	     s = build_table(builtin2_matrix[i].name, BLTIN2_MATRIX, 0.0);
	     s->u.matrixptr = builtin2_matrix[i].func;
	}

	for (i = 0; i < NO_BUILTIN3_MATRIX; i++)  {
  	     s = build_table(builtin3_matrix[i].name, BLTIN3_MATRIX, 0.0);
	     s->u.matrixptr = builtin3_matrix[i].func;
	}

	for (i = 0; i < NO_BUILTINVar_MATRIX; i++)  {
  	     s = build_table(builtinvar_matrix[i].name, BLTINVar_MATRIX, 0.0);
	     s->u.matrixptr = builtinvar_matrix[i].func;
	}

        /* Engineering Units and Quantities */

	for (i = 0; i < NO_UNITS; i++) {
             if((eng_units[i].units_type != SI_US)        &&
                (eng_units[i].units_type != SI)           &&
                strcmp(eng_units[i].units_name, "deg_C")  &&
                strcmp(eng_units[i].units_name, "deg_F"))
                eng_units[i] = UnitsScaleConvert(eng_units[i], SI);

		s = build_table(eng_units[i].units_name, DIMENSION, 0.0);

		s->u.q =        (QUANTITY *) MyMalloc(sizeof(QUANTITY));

		s->u.q->dimen = (DIMENSIONS *)    MyMalloc(sizeof(DIMENSIONS));
		s->u.q->dimen->units_name   = eng_units[i].units_name;
		s->u.q->dimen->units_type   = eng_units[i].units_type;
		s->u.q->dimen->scale_factor = eng_units[i].scale_factor;
		s->u.q->value               = eng_units[i].scale_factor;
		s->u.q->dimen->length_expnt = eng_units[i].length_expnt;
		s->u.q->dimen->mass_expnt   = eng_units[i].mass_expnt;
		s->u.q->dimen->time_expnt   = eng_units[i].time_expnt;
		s->u.q->dimen->temp_expnt   = eng_units[i].temp_expnt;
	}

        /* Finite Element Functions, Objects and Solution Procedures */

	for (i = 0; i < NO_FE_MESH; i++) {
		s = build_table(fe_mesh[i].name, MESH, 0.0);
		s->u.voidptr = fe_mesh[i].func;
	}

	for (i = 0; i < NO_FE_NODE; i++) {
		s = build_table(fe_node[i].name, NODE_QUANT, 0.0);
		s->u.voidptr = fe_node[i].func;
	}

	for (i = 0; i < NO_FE_FUNCTION; i++) {
		build_table(fe_function[i].name, fe_function[i].kval, 0.0);
	}

	for (i = 0; i < NO_OBJECTS; i++) {
		build_table(fe_objects[i].name, fe_objects[i].kval, 0.0);
	}

        /* Load Adjustable Parameters for Size of Finite Element Problem */

	for (i = 0; i < NO_PARAMETERS; i++) {
	     s = build_table(fe_parameters[i].name, QUAN, 0.0);

	     s->u.q =        (QUANTITY *) MyMalloc(sizeof(QUANTITY));
	     s->u.q->value               = fe_parameters[i].value;
             if(UNITS_SWITCH==ON) {
	        s->u.q->dimen   = (DIMENSIONS *)MyMalloc(sizeof(DIMENSIONS));
	        ZeroUnits(s->u.q->dimen);
                s->u.q->dimen->units_type = SI_US;
             }
	}
}


⌨️ 快捷键说明

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