/*************************************************************************** * Copyright 2000-2005 Nobby Noboru Hirano * All rights reserved * * Ntools BSD License * Version 1.0 March 2005 * * Nobby Noboru Hirano ***************************************************************************/ #include #include #include #include #include void crcut(char *s) { char *p; if ((p = strchr(s, 0x0a)) != NULL) *p = '\0'; if ((p = strchr(s, 0x0d)) != NULL) *p = '\0'; } float get_float(char *msg) { char buf[64]; printf("%s: ", msg); fflush(stdout); if (fgets(buf, 63, stdin) == NULL) return -1; crcut(buf); return atof(buf); } int main(int argc, char *argv[]) { float diameter = 8; float pitch = 6; float rpm = 7000; float t; double g1, g2, th, psp; double k = 22.0, fin = 1.0, b = 3.0; int c, prop, cont = 0; while ((c = getopt (argc, argv, "Aa56Hwf:k:")) != EOF) { switch (c) { case 'A': /* APC Peller */ case 'a': b = 3.08; k = 20.75; break; case '5': diameter = 2.20; pitch = 4.5; fin = 3.0; k = 26.0; cont = 1; printf("GWS EDF55 default setting.\n"); break; case '6': diameter = 2.50; pitch = 4.0; fin = 3.0; k = 24.5; cont = 1; printf("GWS EDF64 default setting.\n"); break; case 'H': diameter = 2.20; pitch = 3.5; fin = 2.5; k = 31.6; cont = 1; printf("Hyperflow 56mm EDF default setting.\n"); break; case 'w': diameter = 3.5433; pitch = 4.3196; fin = 3.0; k = 37.0; cont = 1; printf("Wemotec Midifan default setting.\n"); break; case 'f': sscanf (optarg, "%dx", &prop); fin = (double)prop / 2.0; break; case 'k': k = atof(optarg); break; default: fprintf(stderr, "Usage: thrust -f [propeller fin] -k [k]\n"); fprintf(stderr, " thrust -A for APC-E Propeller\n"); fprintf(stderr, " thrust -w for Wemotec MidiFAN(90mm)\n"); fprintf(stderr, " thrust -H for Hyperflow 56mm EDF\n"); fprintf(stderr, " thrust -5 for GWS EDF55\n"); fprintf(stderr, " thrust -6 for GWS EDF64\n"); exit (1); } } if (optind < argc) { k = atof(argv[optind++]); } while(1) { if (!cont) { if ((t = get_float("Diameter")) < 0) break; if (t != 0) diameter = t; if ((t = get_float("Pitch")) < 0) break; if (t != 0) pitch = t; } if ((t = get_float("RPM")) < 0) break; if (t != 0) rpm = t; g1 = pow((double)diameter, b); g1 /= 1000.0; g2 = ((double)rpm / 1000.0) * ((double)rpm / 1000.0); th = ((double)pitch / 10.00) * g1 * g2 * k * fin; psp =((double)pitch * 0.0254) * (double)rpm * 60.0; /* m/h */ psp /= 1000.0; printf("Stationary thrust = %.2f g %.2f oz, speed = %.2fkm/h %.2fmph\n" "diameter = %.2f, pitch = %.2f, %.1f rpm, k = %.1f\n\n", th, (th / 28.34952313), psp, (psp / 1.609344), diameter, pitch, rpm, k); } putchar('\n'); exit(0); }