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

📄 units.c

📁 有限元程序
💻 C
📖 第 1 页 / 共 5 页
字号:
   /* [b] : Don't simplify units if "unit name" already in symbol table */             hp = NULL;   if(d->units_name != (char *) NULL) {      hp = lookup(d->units_name);      if(hp != NULL) {         return(d);      }   } else      return(d);   /* [c] : Simplify dimensionless/radians only units */   if( d->length_expnt == 0 && d->time_expnt == 0 &&        d->mass_expnt   == 0 && d->temp_expnt == 0 ) {          if(d->radian_expnt == 0) {             free((char *)d->units_name);             d->units_name = (char *) NULL;             d->scale_factor = 1.0;          }           if(d->radian_expnt == 1) {             free((char *) d->units_name);             d->units_name = (char *) SaveString("rad");          }           return(d);   }   /* [d] : Simplify LENGTH units alone */   if(d->length_expnt != 0 && d->time_expnt == 0 &&       d->mass_expnt   == 0 && d->temp_expnt == 0 ) {      /* Setup default units for length */      if(d->units_type == SI)         dp = DefaultUnits("m");      else         dp = DefaultUnits("in");	       /* Transfer "radians" units to working data structure */      if(d->radian_expnt != 0 ) {         dp->radian_expnt = d->radian_expnt;      }      /* Build working data structures */      if(d->length_expnt == 1) {         if(strcmp(d->units_name, dp->units_name) != 0) {            free((char *) d->units_name);            d->units_name = SaveString(dp->units_name);            d->scale_factor = dp->scale_factor;         }      }      else if(d->length_expnt < 0) {         d1 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS));         ZeroUnits(d1);         d1->units_type = d->units_type;         if(d->length_expnt == -1) {            UnitsDivRep(d, d1, dp, NO);         } else {            d2 = UnitsPower( dp, ABS(d->length_expnt), NO );            UnitsDivRep(d, d1, d2, NO);            free((char *) d2->units_name);            free((char *) d2);         }         free((char *) d1->units_name);         free((char *) d1);      } else         UnitsPowerRep(d, dp, d->length_expnt, NO);      free((char *) dp->units_name);      free((char *) dp);      /* If appropriate, append radian components to units name */      if(d->radian_expnt != 0) {         RadUnitsNameExtension( d );      }      return(d);   }   /* [e] : Simplify MASS units alone */            if(d->length_expnt == 0 && d->time_expnt == 0 &&       d->mass_expnt   != 0 && d->temp_expnt == 0 ) {      /* Default units for "m" mass */      if(d->units_type == SI)         dp = DefaultUnits("kg");      else         dp = DefaultUnits("lb");	       /* Transfer "radians" units to working data structure */      if(d->radian_expnt != 0 ) {         dp->radian_expnt = d->radian_expnt;      }      /* Build working data structures */      if(d->mass_expnt == 1) {         if(strcmp(d->units_name, dp->units_name) != 0) {            free((char *) d->units_name);            d->units_name = SaveString(dp->units_name);            d->scale_factor = dp->scale_factor;         }      } else if(d->mass_expnt < 0) {         d1 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS));         ZeroUnits(d1);         d1->units_type = d->units_type;         if(d->mass_expnt == -1) {            UnitsDivRep(d, d1, dp, NO);         }         else {            d2 = UnitsPower( dp, ABS(d->mass_expnt), NO );            UnitsDivRep(d, d1, d2, NO);            free((char *) d2->units_name);            free((char *) d2);         }         free((char *) d1->units_name);         free((char *) d1);      } else         UnitsPowerRep(d, dp, d->mass_expnt, NO);      free((char *) dp->units_name);      free((char *) dp);      /* Append radian components to units name */      if(d->radian_expnt != 0) {         RadUnitsNameExtension( d );      }      return(d);   }   /* [f] : Simplify TIME units alone */   if(d->length_expnt == 0 && d->time_expnt != 0 &&       d->mass_expnt   == 0 && d->temp_expnt == 0 ) {#ifdef DEBUG      printf("In UnitsSimplify() : Start TIME Units\n");      UnitsPrint(d);#endif      /* Special cases of "time" and "radians and time" */      if(d->radian_expnt == 0 && d->time_expnt == -1) {         free((char *) d->units_name);         d->units_name = (char *) SaveString("Hz");         return(d);      }      if(d->radian_expnt == 1 && d->time_expnt == -1) {         free((char *) d->units_name);         d->units_name = (char *) SaveString("rad/sec");         return(d);      }      if(d->radian_expnt == 1 && d->time_expnt == -2) {         free((char *) d->units_name);         d->units_name = (char *) SaveString("rad/sec^2");         return(d);      }      /* Build default units and transfer "radians" units */            dp = DefaultUnits("sec");      if(d->radian_expnt != 0 ) {         dp->radian_expnt = d->radian_expnt;      }      /* Build working data structurs */      if(d->time_expnt == 1) {         if(strcmp(d->units_name, dp->units_name) != 0) {            free((char *) d->units_name);            d->units_name   = SaveString(dp->units_name);            d->scale_factor = dp->scale_factor;         }      } else if( d->time_expnt < 0 ) {         d1 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS));         ZeroUnits(d1);         d1->units_type = SI_US;         if(d->time_expnt == -1) {            UnitsDivRep(d, d1, dp, NO);         } else {            d2 = UnitsPower( dp, ABS(d->time_expnt), NO );            UnitsDivRep(d, d1, d2, NO);            free((char *) d2->units_name);            free((char *) d2);         }         free((char *) d1->units_name);         free((char *) d1);      } else         UnitsPowerRep(d, dp, d->time_expnt, NO);      free((char *) dp->units_name);      free((char *) dp);      /* Append radian components to units name */      if(d->radian_expnt != 0) {         RadUnitsNameExtension( d );      }#ifdef DEBUG      printf("UnitsSimplify() : At the end of TIME Units\n");      UnitsPrint(d);      printf("UnitsSimplify() : Leaving TIME Units\n");#endif      return(d);   }   /* [g] : Simplify TEMPERATURE units alone */   if(d->length_expnt == 0 && d->time_expnt == 0 &&       d->mass_expnt   == 0 && d->temp_expnt != 0 ) {      /* Build default units */      if(d->units_type == SI)         dp = DefaultUnits("deg_C");      else         dp = DefaultUnits("deg_F");	       /* Transfer "radians" units to working data structure */      if(d->radian_expnt != 0 ) {         dp->radian_expnt = d->radian_expnt;      }      /* Setup working data structures */      if(d->temp_expnt == 1) {         if(strcmp(d->units_name, dp->units_name) != 0) {            free((char *) d->units_name);            d->units_name = SaveString(dp->units_name);            d->scale_factor = dp->scale_factor;         }      } else if(d->temp_expnt < 0) {         d1 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS));         ZeroUnits(d1);         d1->units_type = d->units_type;         if(d->temp_expnt == -1) {            UnitsDivRep(d, d1, dp, NO);         } else {            d2 = UnitsPower( dp, ABS(d->temp_expnt), NO );            UnitsDivRep(d, d1, d2, NO);            free((char *) d2->units_name);            free((char *) d2);         }         free((char *) d1->units_name);         free((char *) d1);       } else         UnitsPowerRep(d, dp, d->temp_expnt, NO);       free((char *) dp->units_name);       free((char *) dp);       /* Append radian components to units name */       if(d->radian_expnt != 0) {          RadUnitsNameExtension( d );       }       return(d);   }   /* [h] : Simplify groups of related units */   /* [h.1] : Simplify LENGTH and MASS related units  */   if( d->length_expnt != 0 && d->time_expnt == 0 &&        d->mass_expnt   != 0 && d->temp_expnt == 0 ) {       /* Setup default units names */       if(d->units_type == SI) {          dp1 = DefaultUnits("m");          dp2 = DefaultUnits("kg");       } else {          dp1 = DefaultUnits("in");          dp2 = DefaultUnits("lb");       }       /* Transfer "radians" units to working data structure */       if(d->radian_expnt != 0 ) {          dp1->radian_expnt = d->radian_expnt;          dp2->radian_expnt = d->radian_expnt;       }       /* Setup working data structures */       if(ABS(d->length_expnt) == 1) {          d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));          UnitsCopy(d1,dp1);       } else          d1 = UnitsPower( dp1, ABS(d->length_expnt), NO );       if(ABS(d->mass_expnt) == 1) {          d2 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));          UnitsCopy(d2,dp2);       } else          d2 = UnitsPower( dp2, ABS(d->mass_expnt), NO );       if(d->length_expnt > 0) {          if(d->mass_expnt > 0)             UnitsMultRep(d, d1, d2);	           else             UnitsDivRep(d, d1, d2, NO);	        } else if(d->mass_expnt > 0) {          UnitsDivRep(d, d2, d1, NO);	        } else {          dd1 = UnitsPower( dp1, d->length_expnt, NO );          dd2 = UnitsPower( dp2, d->mass_expnt, NO );          UnitsMultRep(d, dd1, dd2);	           free((char *) dd1->units_name);          free((char *) dd1);          free((char *) dd2->units_name);          free((char *) dd2);       }       free((char *) d1->units_name);       free((char *) d1);       free((char *) d2->units_name);       free((char *) d2);       free((char *) dp1->units_name);       free((char *) dp1);       free((char *) dp2->units_name);       free((char *) dp2);       /* Append radian components to units name */       if(d->radian_expnt != 0) {          RadUnitsNameExtension( d );       }       return(d);   }   /* [h.2] : Simplify LENGTH and TIME related units */   if( d->length_expnt != 0 && d->time_expnt != 0 &&        d->mass_expnt   == 0 && d->temp_expnt == 0 ) {       /* Setup default units */       if(d->units_type == SI) {          dp1 = DefaultUnits("m");          dp2 = DefaultUnits("sec");       } else {          dp1 = DefaultUnits("in");          dp2 = DefaultUnits("sec");       }       /* Transfer "radians" units to working data structure */       if(d->radian_expnt != 0 ) {          dp1->radian_expnt = d->radian_expnt;          dp2->radian_expnt = d->radian_expnt;       }       /* Setup working "units" data structures */       if(ABS(d->length_expnt) == 1) {          d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));          UnitsCopy(d1,dp1);       } else          d1 = UnitsPower( dp1, ABS(d->length_expnt), NO );       if(ABS(d->time_expnt) == 1) {          d2 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));          UnitsCopy(d2,dp2);       } else          d2 = UnitsPower( dp2, ABS(d->time_expnt), NO );       if(d->length_expnt > 0) {          if(d->time_expnt > 0)             UnitsMultRep(d, d1, d2);	           else             UnitsDivRep(d, d1, d2, NO);	        } else if(d->time_expnt > 0) {           UnitsDivRep(d, d2, d1, NO);	        } else {           dd1 = UnitsPower( dp1, d->length_expnt, NO );           dd2 = UnitsPower( dp2, d->time_expnt, NO );           UnitsMultRep(d, dd1, dd2);	            free((char *) dd1->units_name);           free((char *) dd1);           free((char *) dd2->units_name);           free((char *) dd2);       }       free((char *) d1->units_name);       free((char *) d1);       free((char *) d2->units_name);       free((char *) d2);       free((char *) dp1->units_name);       free((char *) dp1);       free((char *) dp2->units_name);       free((char *) dp2);       /* If appropriate, append radian components to units name */       if(d->radian_expnt != 0) {          RadUnitsNameExtension( d );       }       return(d);   }   /* [h.3] : Simplify LENGTH and TEMPERATURE related units */   if( d->length_expnt != 0 && d->time_expnt == 0 &&        d->mass_expnt   == 0 && d->temp_expnt != 0 ) {       /* Build default units */       if(d->units_type == SI) {          dp1 = DefaultUnits("m");          dp2 = DefaultUnits("deg_C");       } else {          dp1 = DefaultUnits("in");          dp2 = DefaultUnits("deg_F");       }       /* Transfer "radians" units to working data structure */       if(d->radian_expnt != 0 ) {          dp1->radian_expnt = d->radian_expnt;          dp2->radian_expnt = d->radian_expnt;       }       /* Setup working "units" data structures */       if(ABS(d->length_expnt) == 1) {          d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));          UnitsCopy(d1,dp1);       } else          d1 = UnitsPower( dp1, ABS(d->length_expnt), NO );       if(ABS(d->temp_expnt) == 1) {          d2 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));          UnitsCopy(d2,dp2);       } else          d2 = UnitsPower( dp2, ABS(d->temp_expnt), NO );       if(d->length_expnt > 0) {          if(d->temp_expnt > 0)             UnitsMultRep(d, d1, d2);	           else             UnitsDivRep(d, d1, d2, NO);	 

⌨️ 快捷键说明

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