📄 units.c
字号:
} else if(d->temp_expnt > 0) { UnitsDivRep(d, d2, d1, NO); } else { dd1 = UnitsPower( dp1, d->length_expnt, NO ); dd2 = UnitsPower( dp2, d->temp_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.4] : Simplify TIME and MASS related units */ if(d->length_expnt == 0 && d->time_expnt == -2 && d->mass_expnt == 1 && d->temp_expnt == 0 ) { /* Setup default units names */ if(d->units_type == SI){ d1 = DefaultUnits("N"); d2 = DefaultUnits("m"); } else{ d1 = DefaultUnits("lbf"); d2 = DefaultUnits("in"); } /* Transfer "radians" units to working data structure */ if(d->radian_expnt != 0 ) { d1->radian_expnt = d->radian_expnt; d2->radian_expnt = d->radian_expnt; } UnitsDivRep(d, d1, d2, NO); free((char *) d1->units_name); free((char *) d1); free((char *) d2->units_name); free((char *) d2); return(d); } /* [h.5] : Simplify LENGTH/FORCE related units */ if(d->length_expnt == 0 && d->time_expnt == 2 && d->mass_expnt == -1 && d->temp_expnt == 0 ) { /* Setup default units names */ if(d->units_type == SI){ d1 = DefaultUnits("m"); d2 = DefaultUnits("N"); } else{ d1 = DefaultUnits("in"); d2 = DefaultUnits("lbf"); } /* Transfer "radians" units to working data structure */ if(d->radian_expnt != 0 ) { d1->radian_expnt = d->radian_expnt; d2->radian_expnt = d->radian_expnt; } UnitsDivRep(d, d1, d2, NO); free((char *) d1->units_name); free((char *) d1); free((char *) d2->units_name); free((char *) d2); /* Append radian components to units name */ if(d->radian_expnt != 0) { RadUnitsNameExtension( d ); } return(d); } /* [h.6] : Simplify TIME 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("sec"); dp2 = DefaultUnits("kg"); } else { dp1 = DefaultUnits("sec"); 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 "units" data structures */ if(ABS(d->time_expnt) == 1) { d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d1,dp1); } else d1 = UnitsPower( dp1, ABS(d->time_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->time_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->time_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.7] : Simplify TIME and TEMPERATURE related units */ if(d->length_expnt == 0 && d->time_expnt != 0 && d->mass_expnt == 0 && d->temp_expnt != 0 ) { /* Default units */ if(d->units_type == SI) { dp1 = DefaultUnits("sec"); dp2 = DefaultUnits("deg_C"); } else { dp1 = DefaultUnits("sec"); 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->time_expnt) == 1) { d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d1,dp1); } else d1 = UnitsPower( dp1, ABS(d->time_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->time_expnt > 0) { if(d->temp_expnt > 0) UnitsMultRep(d, d1, d2); else UnitsDivRep(d, d1, d2, NO); } else if(d->temp_expnt > 0) { UnitsDivRep(d, d2, d1, NO); } else { dd1 = UnitsPower( dp1, d->time_expnt, NO ); dd2 = UnitsPower( dp2, d->temp_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.8] : Simplify MASS and TEMPERATURE 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("kg"); dp2 = DefaultUnits("deg_C"); } else { dp1 = DefaultUnits("lb"); 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->mass_expnt) == 1) { d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d1,dp1); } else d1 = UnitsPower( dp1, ABS(d->mass_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->mass_expnt > 0) { if(d->temp_expnt > 0) UnitsMultRep(d, d1, d2); else UnitsDivRep(d, d1, d2, NO); } else if(d->temp_expnt > 0) { UnitsDivRep(d, d2, d1, NO); } else { dd1 = UnitsPower( dp1, d->mass_expnt, NO ); dd2 = UnitsPower( dp2, d->temp_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); } /* [i] : Simplify PRESSURE units */ if(d->length_expnt == -1 && d->time_expnt == -2 && d->mass_expnt == 1 && d->temp_expnt == 0 ) { if(d->units_type == SI){ if(strcmp(d->units_name, "Pa") != 0) { dp = DefaultUnits("Pa"); if(d->radian_expnt != 0 ) { dp->radian_expnt = d->radian_expnt; } UnitsCopy(d,dp); free((char *) dp->units_name); free((char *) dp); } } else { if(strcmp(d->units_name, "psi") != 0) { dp = DefaultUnits("psi"); if(d->radian_expnt != 0 ) { dp->radian_expnt = d->radian_expnt; } UnitsCopy(d,dp); free((char *) dp->units_name); free((char *) dp); } } return(d); } /* [j] : Simplify POWER units */ if( d->length_expnt == 2 && d->time_expnt == -3 && d->mass_expnt == 1 && d->temp_expnt == 0 ) { if(strcmp(d->units_name, "Watt") != 0) { dp = DefaultUnits("Watt"); UnitsCopy(d,dp); free((char *) dp->units_name); free((char *) dp); } return(d); } /* [k] : Simplify FORCE units */ if(d->length_expnt != 0 && d->time_expnt != 0 && d->mass_expnt != 0 && d->temp_expnt == 0 ) { dlength = d->length_expnt - d->mass_expnt; if( d->time_expnt == -2.0*d->mass_expnt ) { /* Setup default units of "N" force */ if(d->units_type == SI){ dp1 = DefaultUnits("N"); dp2 = DefaultUnits("m"); } else { dp1 = DefaultUnits("lbf"); dp2 = DefaultUnits("in"); } /* 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 dimensions for mass units */ if(ABS(d->mass_expnt) == 1) { d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d1,dp1); } else d1 = UnitsPower( dp1, ABS(d->mass_expnt), NO ); /* Setup dimensions for mass units */ if(dlength == 0) { d2 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); ZeroUnits(d2); d2->units_type = dp2->units_type; } else if(ABS(dlength) == 1) { d2 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d2,dp2); } else d2 = UnitsPower( dp2, ABS(dlength), NO ); if(d->mass_expnt > 0) { if(dlength > 0) { UnitsMultRep(d, d1, d2); } else if(dlength == 0) { UnitsCopy(d,d1); } else UnitsDivRep(d, d1, d2, NO); } else if(dlength >= 0) { UnitsDivRep(d, d2, d1, NO); } else { dd1 = UnitsPower( dp1, d->mass_expnt, NO ); dd2 = UnitsPower( dp2, dlength, 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); } else { /* Setup default "force" units */ if(d->units_type == SI) { dp1 = DefaultUnits("m"); dp2 = DefaultUnits("kg"); dp3 = DefaultUnits("sec"); } else { dp1 = DefaultUnits("in"); dp2 = DefaultUnits("lb"); dp3 = DefaultUnits("sec"); } /* Correction for "radians" units */ if(d->radian_expnt != 0 ) { dp1->radian_expnt = d->radian_expnt; dp2->radian_expnt = d->radian_expnt; } if( d->length_expnt==1 ) { d1 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d1,dp1); } else d1 = UnitsPower(dp1,d->length_expnt, NO); if( d->mass_expnt==1 ) { d2 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d2,dp2); } else d2 = UnitsPower(dp2,d->mass_expnt, NO); if( d->time_expnt==1 ) { d3 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -