Пример #1
0
	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();
}
Пример #4
0
 inline basic_val<T>::operator bool() const noexcept
 {
   return as_boolean(*this);
 }
Пример #5
0
	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));
	}