static FTYPE pressure_Wp_vsq(FTYPE Wp, FTYPE D, FTYPE vsq) 
{
  
  
  return(pressure_W_vsq(Wp+D, D, vsq));

}
static FTYPE pressure_Wp_vsq(int whicheos, FTYPE *EOSextra, FTYPE Wp, FTYPE D, FTYPE vsq) 
{
  
  
  return(pressure_W_vsq(whicheos,EOSextra, Wp+D, D, vsq));

}
示例#3
0
static void func_1d_gnr2(FTYPE x[], FTYPE dx[], FTYPE resid[], 
			 FTYPE jac[][NEWT_DIM], FTYPE *f, FTYPE *df, int n)
{
  FTYPE vsq, W,drdW,dpdW,Wsq,p_tmp;
  FTYPE  wtmp;
  int id;
  static FTYPE pressure_W_vsq(FTYPE W, FTYPE vsq) ;


  W = x[0];
  vsq = vsq_for_gnr2;
  
  p_tmp = pressure_W_vsq( W,  vsq) ;
  
  Wsq = W*W;
  dpdW = dpdW_calc_vsq( W, vsq );

    
  resid[0] = 
    +W 
    + 0.5 * Bsq * ( 1. + vsq )
    - 0.5*QdotBsq/Wsq
    + Qdotn
    - p_tmp;

  jac[0][0] = drdW = 1. - dpdW + QdotBsq / (Wsq*W) ;

  dx[0] = -resid[0]/jac[0][0];

  *f = 0.5*resid[0]*resid[0];
  *df = -2. * (*f);

}
示例#4
0
static void func_vsq(FTYPE x[], FTYPE dx[], FTYPE resid[], FTYPE jac[][NEWT_DIM], FTYPE *f, FTYPE *df, int n)
{

  
  FTYPE  W, vsq, Wsq, p_tmp, dPdvsq, dPdW, temp, detJ,tmp2,tmp3;
  const int ltrace = 0;


  W = x[0];
  vsq = x[1];
  
  Wsq = W*W;
  
  p_tmp  = pressure_W_vsq( W, vsq );
  dPdW   = dpdW_calc_vsq( W, vsq );
  dPdvsq = dpdvsq_calc( W, vsq );


  /* These expressions were calculated using Mathematica */
  /* Since we know the analytic form of the equations, we can explicitly
     calculate the Newton-Raphson step:                  */

  dx[0] = (-Bsq/2. + dPdvsq)*(Qtsq - vsq*((Bsq+W)*(Bsq+W)) + 
			      (QdotBsq*(Bsq + 2*W))/Wsq) + 
    ((Bsq+W)*(Bsq+W))*(-Qdotn - (Bsq*(1 + vsq))/2. + QdotBsq/(2.*Wsq) - 
		       W + p_tmp);

  dx[1] = -((-1 + dPdW - QdotBsq/(Wsq*W))*
	    (Qtsq - vsq*((Bsq+W)*(Bsq+W)) + (QdotBsq*(Bsq + 2*W))/Wsq)) - 
    2*(vsq + QdotBsq/(Wsq*W))*(Bsq + W)*
    (-Qdotn - (Bsq*(1 + vsq))/2. + QdotBsq/(2.*Wsq) - W + p_tmp);

  detJ = (Bsq + W)*((-1 + dPdW - QdotBsq/(Wsq*W))*(Bsq + W) + 
		     ((Bsq - 2*dPdvsq)*(QdotBsq + vsq*(Wsq*W)))/(Wsq*W));
  
  dx[0] /= -(detJ) ;
  dx[1] /= -(detJ) ;

  jac[0][0] = -2*(vsq + QdotBsq/(Wsq*W))*(Bsq + W);
  jac[0][1] = -(Bsq + W)*(Bsq + W);
  jac[1][0] = -1 - QdotBsq/(Wsq*W) + dPdW;
  jac[1][1] = -Bsq/2. + dPdvsq;
  resid[0]  = Qtsq - vsq*(Bsq + W)*(Bsq + W) + (QdotBsq*(Bsq + 2*W))/Wsq;
  resid[1]  = -Qdotn - (Bsq*(1 + vsq))/2. + QdotBsq/(2.*Wsq) - W + p_tmp;

  *df = -resid[0]*resid[0] - resid[1]*resid[1];

  *f = -0.5 * ( *df );

#if(!OPTIMIZED)
  if( ltrace ) {
    dualfprintf(fail_file,"func_vsq(): x[0] = %21.15g , x[1] = %21.15g , dx[0] = %21.15g , dx[1] = %21.15g , f = %21.15g \n", 
	    x[0], x[1],dx[0], dx[1], *f);
    
  }
#endif

}
示例#5
0
static void func_vsq(FTYPE x[2], FTYPE dx[2], FTYPE *f, FTYPE *df, int n)
{

  //  extern FTYPE Qtsq, Bsq, QdotBsq, Qdotn;
  
  FTYPE  W, vsq, Wsq, p_tmp, dPdvsq, dPdW, temp, detJ,tmp2,tmp3;
  const int ltrace = 0;


  W = x[0];
  vsq = x[1];
  
  Wsq = W*W;
  
  p_tmp  = pressure_W_vsq( W, vsq );
  dPdW   = dpdW_calc_vsq( W, vsq );
  dPdvsq = dpdvsq_calc( W, vsq );


  /* These expressions were calculated using Mathematica */
  /* Since we know the analytic form of the equations, we can explicitly
     calculate the Newton-Raphson step:                  */

  dx[0] = (-Bsq/2. + dPdvsq)*(Qtsq - vsq*((Bsq+W)*(Bsq+W)) + 
			      (QdotBsq*(Bsq + 2*W))/Wsq) + 
    ((Bsq+W)*(Bsq+W))*(Qdotn - (Bsq*(1 + vsq))/2. + QdotBsq/(2.*Wsq) - 
		       W + p_tmp);

  dx[1] = -((-1 + dPdW - QdotBsq/(Wsq*W))*
	    (Qtsq - vsq*((Bsq+W)*(Bsq+W)) + (QdotBsq*(Bsq + 2*W))/Wsq)) - 
    2*(vsq + QdotBsq/(Wsq*W))*(Bsq + W)*
    (Qdotn - (Bsq*(1 + vsq))/2. + QdotBsq/(2.*Wsq) - W + p_tmp);

  detJ = (Bsq + W)*((-1 + dPdW - QdotBsq/(Wsq*W))*(Bsq + W) + 
		     ((Bsq - 2*dPdvsq)*(QdotBsq + vsq*(Wsq*W)))/(Wsq*W));
  
  dx[0] /= -(detJ) ;
  dx[1] /= -(detJ) ;

  tmp2 = (Qtsq - vsq*((Bsq+W)*(Bsq+W)) + (QdotBsq*(Bsq + 2*W))/Wsq);
  tmp3 = (Qdotn - (Bsq*(1 + vsq))/2. + QdotBsq/(2.*Wsq) - W + p_tmp);

  *df = -tmp2*tmp2 - tmp3*tmp3; 

  *f = -0.5 * ( *df );

  if( ltrace ) {
    fprintf(stdout,"func_vsq(): x[0] = %21.15g , x[1] = %21.15g , dx[0] = %21.15g , dx[1] = %21.15g , f = %21.15g \n", x[0], x[1],dx[0], dx[1], *f);
    fflush(stdout);
  }
}
示例#6
0
// assumes ideal gas EOS
// Migone & Bodo (2006) equation 19
// Noble et al. (2006) equation 34
int get_cold_pressure(FTYPE *EOSextra, FTYPE W, FTYPE Dsq, FTYPE gammasq, FTYPE *pressure)
{
  //  FTYPE gamr;
  FTYPE vsq;

  //  gamr = gam/(gam-1.0);
  //  *pressure = (W - sqrt(Dsq*gammasq))/(gamr*gammasq);

  vsq=1.0-1.0/gammasq;

  *pressure = pressure_W_vsq(COLDEOS, EOSextra, W,sqrt(fabs(Dsq)),vsq);

  return(0);
}
示例#7
0
static FTYPE res_sq_vsq2(FTYPE x[])
{

  FTYPE  W, vsq, Wsq, p_tmp, dPdvsq, dPdW, temp, detJ,tmp2,tmp3;
  FTYPE  resid[2];
  FTYPE t3, t4 ;
  FTYPE t9 ;
  FTYPE t11;
  FTYPE t16;
  FTYPE t18;

  const int ltrace = 0;


  W = x[0];
  vsq = x[1];
  
  Wsq = W*W;
  
  p_tmp  = pressure_W_vsq( W, vsq );

  /* These expressions were calculated using Mathematica and made into efficient code using Maple*/
  /* Since we know the analytic form of the equations, we can explicitly
     calculate the Newton-Raphson step:                  */

  t3 = Bsq+W;
  t4 = t3*t3;//
  t9 = 1/Wsq;  //
  t11 = Qtsq-vsq*t4+QdotBsq*(Bsq+2.0*W)*t9; //
  t16 = QdotBsq*t9;//
  t18 = -Qdotn-0.5*Bsq*(1.0+vsq)+0.5*t16-W+p_tmp;//
  resid[0] = t11;
  resid[1] = t18;

  tmp3 = 0.5 * ( resid[0]*resid[0] + resid[1]*resid[1] ) ;
  
#if(!OPTIMIZED)
  if( ltrace  ) {
    dualfprintf(fail_file,"res_sq_vsq(): W,vsq,resid0,resid1,f =   %21.15g  %21.15g  %21.15g  %21.15g  %21.15g  \n",
	    W,vsq,resid[0],resid[1],tmp3);
    dualfprintf(fail_file,"res_sq_vsq(): Qtsq, Bsq, QdotBsq, Qdotn =   %21.15g  %21.15g  %21.15g  %21.15g  \n",
	    Qtsq, Bsq, QdotBsq, Qdotn);
  }
#endif
    
  return( tmp3 );
}
示例#8
0
static FTYPE res_sq_vsq(FTYPE x[])
{

  
  FTYPE  W, vsq, Wsq, p_tmp, dPdvsq, dPdW, temp, detJ,tmp2,tmp3;
  FTYPE  resid[2];
  const int ltrace = 0;


  W = x[0];
  vsq = x[1];
  
  Wsq = W*W;
  
  p_tmp  = pressure_W_vsq( W, vsq );
  dPdW   = dpdW_calc_vsq( W, vsq );
  dPdvsq = dpdvsq_calc( W, vsq );

  /* These expressions were calculated using Mathematica */
  /* Since we know the analytic form of the equations, we can explicitly
     calculate the Newton-Raphson step:                  */

  resid[0]  = Qtsq - vsq*(Bsq + W)*(Bsq + W) + (QdotBsq*(Bsq + 2*W))/Wsq;
  resid[1]  = -Qdotn - (Bsq*(1 + vsq))/2. + QdotBsq/(2.*Wsq) - W + p_tmp;


  tmp3 = 0.5 * ( resid[0]*resid[0] + resid[1]*resid[1] ) ;
  
#if(!OPTIMIZED)
  if( ltrace  ) {
    dualfprintf(fail_file,"res_sq_vsq(): W,vsq,resid0,resid1,f =   %21.15g  %21.15g  %21.15g  %21.15g  %21.15g  \n",
	    W,vsq,resid[0],resid[1],tmp3);
    dualfprintf(fail_file,"res_sq_vsq(): Qtsq, Bsq, QdotBsq, Qdotn =   %21.15g  %21.15g  %21.15g  %21.15g  \n",
	    Qtsq, Bsq, QdotBsq, Qdotn);
  }
#endif
    
  return( tmp3 );
}
示例#9
0
static void func_vsq(FTYPE x[], FTYPE dx[], FTYPE resid[], 
		      FTYPE jac[][NEWT_DIM], FTYPE *f, FTYPE *df, int n)
{

  
  FTYPE  W, vsq, Wsq, p_tmp, dPdvsq, dPdW, temp, detJ,tmp2,tmp3;
  FTYPE t11;
  FTYPE t16;
  FTYPE t18;
  FTYPE t2;
  FTYPE t21;
  FTYPE t23;
  FTYPE t24;
  FTYPE t25;
  FTYPE t3;
  FTYPE t35;
  FTYPE t36;
  FTYPE t4;
  FTYPE t40;
  FTYPE t9;


  W = x[0];
  vsq = x[1];
  
  Wsq = W*W;
  
  p_tmp  = pressure_W_vsq( W, vsq );
  dPdW   = dpdW_calc_vsq( W, vsq );
  dPdvsq = dpdvsq_calc( W, vsq );

  // These expressions were calculated using Mathematica, but made into efficient 
  // code using Maple.  Since we know the analytic form of the equations, we can 
  // explicitly calculate the Newton-Raphson step: 

  t2 = -0.5*Bsq+dPdvsq;
  t3 = Bsq+W;
  t4 = t3*t3;
  t9 = 1/Wsq;
  t11 = Qtsq-vsq*t4+QdotBsq*(Bsq+2.0*W)*t9;
  t16 = QdotBsq*t9;
  t18 = -Qdotn-0.5*Bsq*(1.0+vsq)+0.5*t16-W+p_tmp;
  t21 = 1/t3;
  t23 = 1/W;
  t24 = t16*t23;
  t25 = -1.0+dPdW-t24;
  t35 = t25*t3+(Bsq-2.0*dPdvsq)*(QdotBsq+vsq*Wsq*W)*t9*t23;
  t36 = 1/t35;
  dx[0] = -(t2*t11+t4*t18)*t21*t36;
  t40 = (vsq+t24)*t3;
  dx[1] = -(-t25*t11-2.0*t40*t18)*t21*t36;
  detJ = t3*t35;
  jac[0][0] = -2.0*t40;
  jac[0][1] = -t4;
  jac[1][0] = t25;
  jac[1][1] = t2;
  resid[0] = t11;
  resid[1] = t18;

  *df = -resid[0]*resid[0] - resid[1]*resid[1];

  *f = -0.5 * ( *df );

}