void exec( ) throw( general_error ) { iec61853_module_t solver; msg_handler msgs( *this ); solver._imsg = &msgs; util::matrix_t<double> input = as_matrix("input"), par; if ( input.ncols() != iec61853_module_t::COL_MAX ) throw exec_error( "iec61853", "six data columns required for input matrix: IRR,TC,PMP,VMP,VOC,ISC"); if (!solver.calculate( input, as_integer("nser"), as_integer("type"), par, as_boolean("verbose") )) throw exec_error( "iec61853", "failed to solve for parameters"); assign("n", var_data((ssc_number_t)solver.n)); assign("alphaIsc", var_data((ssc_number_t)solver.alphaIsc)); assign("betaVoc", var_data((ssc_number_t)solver.betaVoc)); assign( "gammaPmp", var_data((ssc_number_t)solver.gammaPmp) ); assign( "Il", var_data((ssc_number_t)solver.Il) ); assign( "Io", var_data((ssc_number_t)solver.Io) ); assign( "C1", var_data((ssc_number_t)solver.C1) ); assign( "C2", var_data((ssc_number_t)solver.C2) ); assign( "C3", var_data((ssc_number_t)solver.C3) ); assign( "D1", var_data((ssc_number_t)solver.D1) ); assign( "D2", var_data((ssc_number_t)solver.D2) ); assign( "D3", var_data((ssc_number_t)solver.D3) ); assign( "Egref", var_data((ssc_number_t)solver.Egref) ); ssc_number_t *output = allocate( "output", par.nrows(), par.ncols() ); size_t c = 0; for( size_t i=0;i<par.nrows();i++ ) for( size_t j=0;j<par.ncols();j++ ) output[c++] = (ssc_number_t)par(i, j); }
ObjectBoolean *ObjectInteger::operator_boolean_and(IOperable *right_side) { std::unique_ptr<ObjectBoolean> left(as_boolean()); return left->operator_boolean_and(right_side); }
ObjectBoolean *ObjectInteger::operator_boolean_not(void) { std::unique_ptr<ObjectBoolean> operand(as_boolean()); return operand->operator_boolean_not(); }
inline basic_val<T>::operator bool() const noexcept { return as_boolean(*this); }
void exec( ) throw( general_error ) { bool header_only = as_boolean("header_only"); const char *file = as_string("file_name"); weatherfile wfile( file, header_only ); if (!wfile.ok()) { assign( "error", var_data(wfile.message()) ); throw exec_error("wfreader", "failed to read local weather file: " + std::string(file) + " " + wfile.message()); } if( wfile.has_message() ) log( wfile.message(), SSC_WARNING ); weather_header hdr; wfile.header( &hdr ); size_t records = wfile.nrecords(); for (int i = 3; i < 100; i++){ } assign( "lat", var_data( (ssc_number_t)hdr.lat ) ); assign( "lon", var_data( (ssc_number_t)hdr.lon ) ); assign( "tz", var_data( (ssc_number_t)hdr.tz ) ); assign( "elev", var_data( (ssc_number_t)hdr.elev ) ); assign( "location", var_data( std::string( hdr.location ) ) ); assign( "city", var_data( std::string( hdr.city ) ) ); assign( "state", var_data( std::string( hdr.state ) ) ); assign( "country", var_data( std::string( hdr.country ) ) ); assign( "description", var_data( std::string( hdr.description ) ) ); assign( "source", var_data( std::string( hdr.source ) ) ); assign( "url", var_data( std::string( hdr.url ) ) ); assign( "start", var_data( (ssc_number_t)wfile.start_sec() ) ); assign( "step", var_data( (ssc_number_t)wfile.step_sec() ) ); assign( "nrecords", var_data( (ssc_number_t)wfile.nrecords() ) ); switch( wfile.type() ) { case weatherfile::TMY2: assign("format", var_data("tmy2") ); break; case weatherfile::TMY3: assign("format", var_data("tmy3") ); break; case weatherfile::EPW: assign("format", var_data("epw") ); break; case weatherfile::SMW: assign("format", var_data("smw") ); break; case weatherfile::WFCSV: assign("format", var_data("csv") ); break; default: assign("format", var_data("invalid")); break; } if ( header_only ) return; ssc_number_t *p_year = allocate( "year", records ); ssc_number_t *p_month = allocate( "month", records ); ssc_number_t *p_day = allocate( "day", records ); ssc_number_t *p_hour = allocate( "hour", records ); ssc_number_t *p_minute = allocate( "minute", records ); ssc_number_t *p_global = allocate( "global", records ); ssc_number_t *p_beam = allocate( "beam", records ); ssc_number_t *p_diffuse = allocate( "diffuse", records ); ssc_number_t *p_poa = allocate( "poa", records ); ssc_number_t *p_wspd = allocate( "wspd", records ); ssc_number_t *p_wdir = allocate( "wdir", records ); ssc_number_t *p_tdry = allocate( "tdry", records ); ssc_number_t *p_twet = allocate( "twet", records ); ssc_number_t *p_tdew = allocate( "tdew", records ); ssc_number_t *p_rhum = allocate( "rhum", records ); ssc_number_t *p_pres = allocate( "pres", records ); ssc_number_t *p_snow = allocate( "snow", records ); ssc_number_t *p_albedo = allocate( "albedo", records ); double gh_sum = 0.0, dn_sum = 0.0, df_sum = 0.0; double temp_sum = 0.0, wind_sum = 0.0; double snow_max = -1; double ts_hour = wfile.step_sec() / 3600.0; weather_record wf; for (int i=0;i<(int)records;i++) { if (!wfile.read( &wf )) throw exec_error("wfreader", "could not read data line " + util::to_string(i+1) + " of 8760"); p_year[i] = (ssc_number_t)wf.year; p_month[i] = (ssc_number_t)wf.month; p_day[i] = (ssc_number_t)wf.day; p_hour[i] = (ssc_number_t)wf.hour; p_minute[i] = (ssc_number_t)wf.minute; p_global[i] = (ssc_number_t)wf.gh; p_beam[i] = (ssc_number_t)wf.dn; p_diffuse[i] = (ssc_number_t)wf.df; p_poa[i] = (ssc_number_t)wf.poa; p_wspd[i] = (ssc_number_t)wf.wspd; p_wdir[i] = (ssc_number_t)wf.wdir; p_tdry[i] = (ssc_number_t)wf.tdry; p_twet[i] = (ssc_number_t)wf.twet; p_tdew[i] = (ssc_number_t)wf.tdew; p_rhum[i] = (ssc_number_t)wf.rhum; p_pres[i] = (ssc_number_t)wf.pres; p_snow[i] = (ssc_number_t)wf.snow; p_albedo[i] = (ssc_number_t)wf.alb; gh_sum += wf.gh * ts_hour; dn_sum += wf.dn * ts_hour; df_sum += wf.df * ts_hour; temp_sum += wf.tdry; wind_sum += wf.wspd; if (!std::isnan(wf.snow) && (wf.snow > snow_max)) snow_max = wf.snow; } if (snow_max < 0) snow_max = snow_max = std::numeric_limits<double>::quiet_NaN(); assign("annual_global", var_data((ssc_number_t)(0.001 * gh_sum / 365))); assign("annual_beam", var_data((ssc_number_t) (0.001 * dn_sum / 365))); assign("annual_diffuse", var_data((ssc_number_t)(0.001 * df_sum / 365))); assign("annual_tdry", var_data((ssc_number_t)(temp_sum / records))); assign("annual_wspd", var_data((ssc_number_t)(wind_sum / records))); assign("annual_snow", var_data((ssc_number_t)snow_max)); }