void setmag(Widget iw_temp, XtPointer data, XtPointer call_data) { Widget iw_but, ipushc, ipusha, rowcolh; Arg args[MAX_ARGS]; /* Arg list */ int n; if (iw_setmag <= (Widget)0) { iw_setmag = wid_dialog( iw_main, 0, "setmag", 0, 0 ); /* Create the labels of magsize and magfac */ wid_labelg(iw_setmag, 0, "size",60, 30); wid_labelg(iw_setmag, 0, "x",40, 60); wid_labelg(iw_setmag, 0, "y",120, 60); wid_labelg(iw_setmag, 0, "factor ", 180, 30); /* Create the magsize scale */ iw_magx = scalev(iw_setmag,0, 2,512,magsizx,50,200, 10,80); iw_magy = scalev(iw_setmag,0, 2,512,magsizy,50, 200,90,80); iw_magf = scalev(iw_setmag,0, 2,32,magfac,55, 210,180, 70); /* Create standard buttons for set mag varibles */ /* Set the position for standard buttons */ n = 0; Setbgfg(args, MAX_ARGS, &n); // Handles BGFG Args XtSetArg(args[n], XmNx, 10); n++; XtSetArg(args[n], XmNy, 300); n++; XtSetArg(args[n], XmNdefaultPosition, False ); n++; rowcolh = XmCreateRowColumn(iw_setmag, "sss", args, n); XtManageChild( rowcolh ); /* Create the buttons */ iw_but = wid_stdbut(rowcolh,iw_setmag, &ipushc,&ipushc, &ipusha,"CA",fin_cb,fin_cb,pushbuta,NULL); } XtManageChild(iw_setmag); }
int main(int argc, char* argv[]){ // parsing the arguments if(argc < 3) error_exit("Syntax error : Incorrect arguments, use : input_file output_file [-v] [-m filename].\r\n\r\n"); bool use_verbatim = false; FILE* matlab_file = NULL; FILE* input_file = fopen(argv[1],"r"); FILE* output_file = fopen(argv[2],"w+"); if( input_file == NULL || output_file == NULL) error_exit("Runtime error : could not open required i/o files.\r\n\r\n"); for(int i=3 ; i < argc; i++){ if( argv[i][0] != '-' ) error_exit("Syntax error : Unknown parameter : %s\r\n\r\n",argv[i]); switch(argv[i][1]){ case 'v' : use_verbatim = true; break; case 'm' : if(i+1 >= argc) error_exit("Syntax error : Filename required with -m option\r\n\r\n"); matlab_file = fopen(argv[i+1], "w+"); if(matlab_file == NULL) error_exit("Runtime error : Cannot open file '%s' for matlab output.\r\n\r\n",argv[i+1]); i++; break; } } // positions and speed at time n-1 (0) and n (1). vector p10,p20,v1,v2,p11,p21; // masses long double m1,m2; // discretization parameters long double dt, t_final, dt_output; fscanf(input_file, "%Lf\r\n%Lf %Lf %Lf\r\n%Lf %Lf %Lf\r\n%Lf\r\n%Lf %Lf %Lf\r\n%Lf %Lf %Lf\r\n%Lf\r\n%Lf\r\n%Lf", &m1, &(p10.x), &(p10.y), &(p10.z), &(v1.x), &(v1.y), &(v1.z), &m2, &(p20.x), &(p20.y), &(p20.z), &(v2.x), &(v2.y), &(v2.z), &dt, &t_final, &dt_output ); // Initial values determination p11 = addv(scalev(v1, dt), p10); p21 = addv(scalev(v2, dt), p20); write_init(output_file, matlab_file, use_verbatim, m1, p10, v1, m2, p20, v2, dt, t_final, dt_output); write_output(output_file, matlab_file, use_verbatim, 0, p10, p20); if(dt_output <= dt + DOUBLE_EPSILON) write_output(output_file, matlab_file, use_verbatim, dt, p11, p21); long double next_out = dt_output; for(long double t = dt * 2 ; t <= t_final ; t+= dt ){ vector dp = subv(p21,p11); long double norm = normv(dp); // compute F vector f = scalev(dp, - m1 * m2 * CONST_G / (norm * norm * norm)); // compute positions at time t vector new_p1 = addv(subv(scalev(f, - dt * dt / m1), p10) , scalev(p11, 2)); vector new_p2 = addv(subv(scalev(f, dt * dt / m2), p20) , scalev(p21, 2)); p10 = p11; p20 = p21; p11 = new_p1; p21 = new_p2; if(t + dt - DOUBLE_EPSILON >= next_out){ write_output(output_file, matlab_file, use_verbatim, t, p11, p21); next_out +=dt_output; } } write_end(output_file, matlab_file, use_verbatim); fclose(input_file); fclose(output_file); return EXIT_SUCCESS; }
void setlen( LWFVector a, float d ) { float d0 = len( a ); if ( d0 != 0.0f ) scalev( a, d / d0 ); }