Exemplo n.º 1
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.º 2
0
SteamState freesteam_solver2_region1(FREESTEAM_CHAR A, FREESTEAM_CHAR B, double atarget, double btarget, SteamState guess, int *retstatus){
	const gsl_multiroot_fdfsolver_type *T;
	gsl_multiroot_fdfsolver *s;
	int status;
	size_t iter = 0;
	const size_t n = 2;


	//fprintf(stderr,"region 1 solver...\n");
	Solver2Data D = {A,B,solver2_region1_propfn(A), solver2_region1_propfn(B), atarget,btarget};

	gsl_multiroot_function_fdf f = {&region1_f, &region1_df, &region1_fdf, n, &D};

	gsl_vector *x = gsl_vector_alloc(n);
	gsl_vector_set(x, 0, freesteam_rho(guess));
	gsl_vector_set(x, 1, freesteam_T(guess));
	T = gsl_multiroot_fdfsolver_gnewton;
	s = gsl_multiroot_fdfsolver_alloc(T, n);
	gsl_multiroot_fdfsolver_set(s, &f, x);
	//region1_print_state(iter, s);

	do{
		iter++;
		status = gsl_multiroot_fdfsolver_iterate(s);
		//region1_print_state(iter, s);
		if(status){
			/* check if solver is stuck */
			break;
		}
		status = gsl_multiroot_test_residual(s->f, 1e-6);
	} while(status == GSL_CONTINUE && iter < 20);

	SteamState S = freesteam_region1_set_pT(gsl_vector_get(s->x,0), gsl_vector_get(s->x,1));
	gsl_multiroot_fdfsolver_free(s);

	gsl_vector_free(x);
	*retstatus = status;
	if(status){
		fprintf(stderr,"%s (%s:%d): %s: ",__func__,__FILE__,__LINE__,gsl_strerror(status));
		freesteam_fprint(stderr,S);
	}
	return S;
}
Exemplo n.º 3
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.º 4
0
//CL: returns temperature for given pressure and enthalpy
Foam::scalar Foam::T_ph(scalar p,scalar h)
{
    return freesteam_T(freesteam_set_ph(p,h));
}