@@ -64,7 +64,8 @@ static var_info _cm_vtab_pvsamv1[] = {
6464 // misc inputs
6565 {SSC_INPUT, SSC_NUMBER, " en_snow_model" , " Toggle snow loss estimation" , " 0/1" , " " , " Losses" , " ?=0" , " BOOLEAN" , " " },
6666 { SSC_INPUT, SSC_NUMBER, " snow_slide_coefficient" , " Snow Slide Coefficient" , " " , " " , " Losses" , " ?=1.97" , " " , " " },
67-
67+ {SSC_INPUT, SSC_ARRAY, " snow_array" , " Hourly snow depth " , " cm" , " " , " Losses" , " ?" , " " , " " },
68+ {SSC_INPUT, SSC_NUMBER, " use_snow_weather_file" , " Use the snow depth from the weather file" , " 0/1" , " 0=user-specified,1=weatherfile" , " Losses" , " *" , " " , " " },
6869 {SSC_INPUT, SSC_NUMBER, " system_capacity" , " DC Nameplate capacity" , " kWdc" , " " , " System Design" , " *" , " " , " " },
6970 {SSC_INPUT, SSC_NUMBER, " use_wf_albedo" , " Use albedo in weather file if provided" , " 0/1" , " 0=user-specified,1=weatherfile" , " Solar Resource" , " ?=1" , " BOOLEAN" , " " },
7071 {SSC_INPUT, SSC_NUMBER, " use_spatial_albedos" , " Use spatial albedo values" , " 0/1" , " 0=no,1=yes" , " Solar Resource" , " ?=0" , " BOOLEAN" , " " },
@@ -620,7 +621,7 @@ static var_info _cm_vtab_pvsamv1[] = {
620621 { SSC_OUTPUT, SSC_ARRAY, " tdry" , " Weather file ambient temperature" , " C" , " " , " Time Series" , " *" , " " , " " },
621622 { SSC_OUTPUT, SSC_ARRAY, " alb" , " Albedo" , " " , " " , " Time Series" , " " , " " , " " },
622623 { SSC_OUTPUT, SSC_MATRIX, " alb_spatial" , " Albedo spatial" , " " , " " , " Time Series" , " " , " " , " " },
623- { SSC_OUTPUT, SSC_ARRAY, " snowdepth" , " Weather file snow depth" , " cm" , " " , " Time Series" , " " , " " , " " },
624+ { SSC_OUTPUT, SSC_ARRAY, " snowdepth" , " Snow depth" , " cm" , " " , " Time Series" , " " , " " , " " },
624625
625626 // calculated sun position data
626627 { SSC_OUTPUT, SSC_ARRAY, " sol_zen" , " Sun zenith angle" , " degrees" , " " , " Time Series" , " *" , " " , " " },
@@ -2465,9 +2466,20 @@ void cm_pvsamv1::exec()
24652466 if (PVSystem->enableSnowModel )
24662467 {
24672468 float smLoss = 0 .0f ;
2468-
2469+ float snowDep = 0 .0f ;
2470+ // Now we have the option to either use weather file snow data or user input snow data
2471+ if (PVSystem->useWeatherFileSnow )
2472+ {
2473+ // Use weather file snow data
2474+ snowDep = (float )wf.snow ;
2475+ }
2476+ else
2477+ {
2478+ // Use user input snow data
2479+ snowDep = Irradiance->userSpecifiedSnowDepth [idx % nrec];
2480+ }
24692481 if (!Subarrays[nn]->snowModel .getLoss ((float )(Subarrays[nn]->poa .poaBeamFront + Subarrays[nn]->poa .poaDiffuseFront + Subarrays[nn]->poa .poaGroundFront + ipoa_rear_after_losses[nn]),
2470- (float )Subarrays[nn]->poa .surfaceTiltDegrees , (float )wf.wspd , (float )wf.tdry , ( float )wf. snow , sunup, 1 .0f / step_per_hour, smLoss))
2482+ (float )Subarrays[nn]->poa .surfaceTiltDegrees , (float )wf.wspd , (float )wf.tdry , snowDep , sunup, 1 .0f / step_per_hour, smLoss))
24712483 {
24722484 if (!Subarrays[nn]->snowModel .good )
24732485 throw exec_error (" pvsamv1" , Subarrays[nn]->snowModel .msg );
@@ -2564,7 +2576,14 @@ void cm_pvsamv1::exec()
25642576 {
25652577 Irradiance->p_weatherFileWindSpeed [idx] = (ssc_number_t )wf.wspd ;
25662578 Irradiance->p_weatherFileAmbientTemp [idx] = (ssc_number_t )wf.tdry ;
2567- Irradiance->p_weatherFileSnowDepth [idx] = (ssc_number_t )wf.snow ;
2579+ double snoDep;
2580+ if (PVSystem->useWeatherFileSnow ) {
2581+ snoDep = (ssc_number_t )wf.snow ;
2582+ }
2583+ else {
2584+ snoDep = Irradiance->userSpecifiedSnowDepth [idx % nrec];
2585+ }
2586+ Irradiance->p_snowDepth [idx] = snoDep;
25682587 Irradiance->p_sunZenithAngle [idx] = (ssc_number_t )solzen;
25692588 Irradiance->p_sunAltitudeAngle [idx] = (ssc_number_t )solalt;
25702589 Irradiance->p_sunAzimuthAngle [idx] = (ssc_number_t )solazi;
0 commit comments