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); }
/** 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; } }
Foam::scalar Foam::s_pT(scalar p, scalar T) { return freesteam_s(freesteam_set_pT(p,T)); }