Exemplo n.º 1
0
double freesteam_drhogdT_T(double T){
	double dpsatdT = freesteam_region4_dpsatdT_T(T);
	double rhog = freesteam_region4_rhog_T(T);
	if(T < REGION1_TMAX){
		double psat = freesteam_region4_psat_T(T);
		SteamState Sg = freesteam_region2_set_pT(psat,T);
		double vf = freesteam_v(Sg);
		return -1./SQ(vf) * (PT2('v',Sg) * dpsatdT + TP2('v',Sg));
	}else{
		SteamState Sg = freesteam_region3_set_rhoT(rhog,T);
		double dpdT = TV3('p',Sg);
		double dpdrho = -1./SQ(rhog) * VT3('p',Sg);
		return (dpsatdT - dpdT)/dpdrho;
	}
}
Exemplo n.º 2
0
double freesteam_drhofdT_T(double T){
	double dpsatdT = freesteam_region4_dpsatdT_T(T);
	if(T < REGION1_TMAX){
		double psat = freesteam_region4_psat_T(T);
		SteamState Sf = freesteam_region1_set_pT(psat,T);
		double vf = freesteam_v(Sf);
		return -1./SQ(vf) * (PT1('v',Sf) * dpsatdT + TP1('v',Sf));
	}else{
		/* FIXME: add iterative refinement of value of rhof */
		double rhof = freesteam_region4_rhof_T(T);
		SteamState Sf = freesteam_region3_set_rhoT(rhof,T);
		double dpdT = TV3('p',Sf);
		double dpdrho = -1./SQ(rhof) * VT3('p',Sf);
		return (dpsatdT - dpdT)/dpdrho;
	}
}
Exemplo n.º 3
0
void update_table_liststore( int column, int reset, TableData *data , SteamState *S)
{

  if (reset) reset_table (data);


  gtk_tree_model_get_iter_first( GTK_TREE_MODEL(data->list), data->iter );
  gtk_list_store_set( data->list, data->iter, column, freesteam_p(*S) * 1e-5, -1);

  gtk_tree_model_iter_next( GTK_TREE_MODEL(data->list), data->iter ); 
  gtk_list_store_set( data->list, data->iter, column, freesteam_T(*S) - 273.15, -1);

  gtk_tree_model_iter_next( GTK_TREE_MODEL(data->list), data->iter ); 
  gtk_list_store_set( data->list, data->iter, column, freesteam_h(*S) * 1e-3, -1);

  gtk_tree_model_iter_next( GTK_TREE_MODEL(data->list), data->iter ); 
  gtk_list_store_set( data->list, data->iter, column, freesteam_s(*S) * 1e-3, -1);

  gtk_tree_model_iter_next( GTK_TREE_MODEL(data->list), data->iter ); 
  gtk_list_store_set( data->list, data->iter, column, freesteam_u(*S) * 1e-3, -1);

  gtk_tree_model_iter_next( GTK_TREE_MODEL(data->list), data->iter ); 
  gtk_list_store_set( data->list, data->iter, column, freesteam_v(*S), -1);

  gtk_tree_model_iter_next( GTK_TREE_MODEL(data->list), data->iter ); 
  gtk_list_store_set( data->list, data->iter, column, freesteam_rho(*S), -1);

  gtk_tree_model_iter_next( GTK_TREE_MODEL(data->list), data->iter ); 
  gtk_list_store_set( data->list, data->iter, column, freesteam_cp(*S) * 1e-3, -1);

  gtk_tree_model_iter_next( GTK_TREE_MODEL(data->list), data->iter ); 
  gtk_list_store_set( data->list, data->iter, column, freesteam_cv(*S) * 1e-3, -1);

  gtk_tree_model_iter_next( GTK_TREE_MODEL(data->list), data->iter ); 

  gtk_list_store_set( data->list, data->iter, column, freesteam_x(*S), -1);

  gtk_tree_model_iter_next( GTK_TREE_MODEL(data->list), data->iter ); 
  gtk_list_store_set( data->list, data->iter, column, freesteam_k(*S), -1);

  gtk_tree_model_iter_next( GTK_TREE_MODEL(data->list), data->iter ); 
  gtk_list_store_set( data->list, data->iter, column, freesteam_mu(*S), -1);

}
Exemplo n.º 4
0
/**
	ASCEND external evaluation function
	Outputs: T
	Inputs: p, h
	@return 0 on success
*/
int Tvsx_ph_calc(struct BBoxInterp *bbox,
		int ninputs, int noutputs,
		double *inputs, double *outputs,
		double *jacobian
){
	(void)bbox; (void)jacobian; // not used
	(void)ninputs; (void)noutputs; // not used currently

#if 0
	ASC_ASSERT(ninputs==2);
	ASSERT(noutputs==2);
#endif

	// convert inputs to freesteam dimensionful values
	double p = inputs[0]; /* ASCEND uses SI units, so no conversion needed */
	double h = inputs[1]; /* ASCEND uses SI units, so no conversion needed */

#ifdef BBOX_DEBUG
	ERROR_REPORTER_HERE(ASC_USER_NOTE,
		"Evaluating with p = %f bar, h = %f kJ/kg"
		,p,h
	);
#endif

	SteamState S;
	S = freesteam_set_ph(p,h);
	double T, dTdh_p, dTdp_h;
	double v, dvdh_p, dvdp_h;
	double s, dsdh_p, dsdp_h;

	double x, dxdh_p, dxdp_h;
	switch(bbox->task){
	case bb_func_eval:
		T = freesteam_T(S);
		v = freesteam_v(S);
		s = freesteam_s(S);
		if(S.region==3){
			/* nonsense value */
			x = 0.5;
		}else{
			x = freesteam_x(S);
		}

#ifdef BBOX_DEBUG
		ERROR_REPORTER_HERE(ASC_USER_NOTE,
			"Got result T = %f K"
			,T
		);
#endif
		outputs[0] = T;
		outputs[1] = v;
		outputs[2] = s;
		outputs[3] = x;

		/* TODO add error checks here, surely? */
		return 0;
	case bb_deriv_eval:
		/*fprintf(stderr,"derivative evaluation, region %d\n",S.region);*/
		dTdp_h = freesteam_deriv(S,"Tph");
		dTdh_p = freesteam_deriv(S,"Thp");
		dvdp_h = freesteam_deriv(S,"vph");
		dvdh_p = freesteam_deriv(S,"vhp");
		dsdp_h = freesteam_deriv(S,"sph");
		dsdh_p = freesteam_deriv(S,"shp");
		switch(S.region){
			case 4:
				dxdp_h = freesteam_deriv(S,"xph");
				dxdh_p = freesteam_deriv(S,"xhp");
				break;
			default:
				/* try to 'slope' the solver into the saturation region */
				dxdp_h = 0;
				dxdh_p = 0.001;
				break;
		}
#ifdef BBOX_DEBUG
		ERROR_REPORTER_HERE(ASC_USER_NOTE,
			"Got result (dT/dp)h = %g, (dT/dh)p = %g K/Pa",dTdp_h,dTdh_p
		);
		ERROR_REPORTER_HERE(ASC_USER_NOTE,
			"Got result (dv/dp)h = %g, (dv/dh)p = %g K/Pa",dvdp_h,dvdh_p
		);
#endif
		jacobian[0] = dTdp_h;
		jacobian[1] = dTdh_p;
		jacobian[2] = dvdp_h;
		jacobian[3] = dvdh_p;
		jacobian[4] = dsdp_h;
		jacobian[5] = dsdh_p;
		jacobian[6] = dxdp_h;
		jacobian[7] = dxdh_p;
		return 0;
	default:
		ERROR_REPORTER_HERE(ASC_PROG_ERR,"Invalid call, unknown bbox->task");
		return 1;
	}
}
Exemplo n.º 5
0
//CL: returns density for given pressure and enthalpy
Foam::scalar Foam::rho_ph(scalar p,scalar h)
{
    return 1/freesteam_v(freesteam_set_ph(p,h));
}
Exemplo n.º 6
0
//CL: returns density for given pressure and temperature
Foam::scalar Foam::rho_pT(scalar p,scalar T)
{
    return 1/freesteam_v(freesteam_set_pT(p,T));
}