Esempio n. 1
0
 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);
 
 }
Esempio n. 2
0
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;
}
Esempio n. 3
0
void setlen( LWFVector a, float d )
{
   float d0 = len( a );

   if ( d0 != 0.0f ) scalev( a, d / d0 );
}