@@ -474,7 +474,10 @@ friend class WFILE;
474474 WDSUBHRFACTORS* wdy_wShF; // array [nSubhr] of constants re subhr radiation upsampling\
475475 // constant for run (depends on nSubhr only)
476476 int wdy_shJday; // day of year now in wdy_shDay (1-365/366)
477- // <= 0 if not set up
477+ // < 0 if not set up
478+ int wdy_shDayTy; // type of day now in wdy_shDay
479+ // gshrFILEDAY, gshrDSDAY, gshrDSDAY0
480+ // < 0 if not set up
478481 WDSUBHR* wdy_shDay; // subhour solar radiation data for wdy_shJday
479482 double wdy_taDbAvg[ 13 ]; // avg daily temp by month, [ 0] = year
480483 double wdy_tMainsAvg[ 13 ]; // avg cold water temp by month, [ 0] = year
@@ -508,8 +511,8 @@ public:
508511 double & tdvElecMean, double & tdvElecMax, UCH tdvElecHrRank[ 24 ]) const ;
509512 float wdy_TaDbAvg ( int jDay1, int jDay2);
510513 RC wdy_GenSubhrRadSetup ( int nSh);
511- RC wdy_GenSubhrRad (int doWhat , int jDay);
512- RC wdy_GenSubhrRad1 (WDSUBHR wdsh[], int doWhat , int jDay, int iHr);
514+ RC wdy_GenSubhrRad (int dayTy , int jDay);
515+ RC wdy_GenSubhrRad1 (WDSUBHR wdsh[], int dayTy , int jDay, int iHr);
513516}; // class WDYEAR
514517// -----------------------------------------------------------------------------
515518WDYEAR::WDYEAR () // c'tor
@@ -533,7 +536,7 @@ void WDYEAR::wdy_Init(
533536 for (int iD = 0 ; iD < 366 ; iD++)
534537 wdy_day[iD].wdd_Init (); // note: access via [], not wdy_Day()
535538 // avoid wrapping etc so all init'ed()
536- wdy_shJday = 0 ; // no subhr day set up
539+ wdy_shJday = wdy_shDayTy = - 1 ; // no subhr day set up
537540 // don't init wdy_hr[]: very big and will be filled by weather file read
538541} // WDYEAR::wdy_Init
539542// -----------------------------------------------------------------------------
@@ -572,7 +575,7 @@ RC WFILE::wf_FillWDYEAR( // read and unpack weather data for entire file
572575 }
573576#endif
574577
575- // interpolate hourly data to get subhour values
578+ // init for subhr interpolation
576579 rc |= wf_pWDY->wdy_GenSubhrRadSetup ( Top.nSubSteps );
577580
578581 return rc;
@@ -779,7 +782,7 @@ RC WDYEAR::wdy_GenSubhrRadSetup( // one-time init for solar upsample
779782 wdy_wShF = new WDSUBHRFACTORS[nSh];
780783 delete[] wdy_shDay;
781784 wdy_shDay = new WDSUBHR[ 24 *nSh];
782- wdy_shJday = 0 ;
785+ wdy_shJday = wdy_shDayTy = - 1 ;
783786
784787 for (int iSh = 0 ; iSh < nSh; iSh++)
785788 wdy_wShF[iSh].wds_Setup (iSh, nSh);
@@ -820,36 +823,38 @@ void WDSUBHRFACTORS::wds_Setup( // constant factors re upsampling interpolation
820823} // WDSUBHRFACTORS::wds_Setup
821824// -----------------------------------------------------------------------------
822825RC WFILE::wf_GenSubhrRad ( // generate subhr solar values for entire day
823- int doWhat , // gshrFILEDAY, gshrDSDAY, gshrZERO
826+ int dayTy , // day type: gshrFILEDAY, gshrDSDAY, gshrDSDAY0
824827 int jDay) // day of year, 1-365/366
825828// returns RCOK iff subhour data successfully generated
826829{
827- RC rc = !wf_pWDY ? RCBAD
828- : wf_pWDY->wdy_shJday == jDay ? RCOK
829- : wf_pWDY->wdy_GenSubhrRad (doWhat, jDay);
830+ RC rc = wf_pWDY ? wf_pWDY->wdy_GenSubhrRad (dayTy, jDay) : RCBAD;
830831 return rc;
831832} // WFILE::wf_GenSubhrSolar
832833// -----------------------------------------------------------------------------
833834RC WDYEAR::wdy_GenSubhrRad ( // generate subhr radiation values for day
834- int doWhat , // gshrFILEDAY, gshrDSDAY, gshrZERO
835+ int dayTy , // gshrFILEDAY, gshrDSDAY, gshrDSDAY0
835836 int jDay) // day of year (1-365/366)
837+ // NOPs if jDay already set up
836838// returns RCOK iff success
837839{
838840 RC rc = RCOK;
839- for (int iHr = 0 ; iHr < 24 ; iHr++)
840- { WDSUBHR* pWDSH = &wdy_Subhr (iHr, 0 );
841- rc |= wdy_GenSubhrRad1 (pWDSH, doWhat, jDay, iHr);
841+ if (wdy_shJday != jDay || wdy_shDayTy != dayTy)
842+ { for (int iHr = 0 ; iHr < 24 ; iHr++)
843+ { WDSUBHR* pWDSH = &wdy_Subhr (iHr, 0 );
844+ rc |= wdy_GenSubhrRad1 (pWDSH, dayTy, jDay, iHr);
845+ }
846+ wdy_shJday = jDay;
847+ wdy_shDayTy = dayTy;
842848 }
843- wdy_shJday = jDay;
844849 return rc;
845850} // WDYEAR::wdy_GenSubhrRad
846851// -----------------------------------------------------------------------------
847852RC WDYEAR::wdy_GenSubhrRad1 ( // generate solar subhr values for 1 hour
848853 WDSUBHR wdSh[], // returned: subhour values
849- int doWhat , // generation options
850- // gshrZERO : set rad values to 0 (for heating design day)
854+ int dayTy , // generation options
855+ // gshrDSDAY0 : set rad values to 0 (for heating design day)
851856 // gshrDSDAY: use design day hourly data
852- // gshrFILEDAY: use data from weather file
857+ // gshrFILEDAY: use hourly data from weather file
853858 int jDay, // day of year (1-365/366)
854859 int iHr) // hour of day, 0-23
855860// returns RCOK iff success
@@ -859,11 +864,11 @@ RC WDYEAR::wdy_GenSubhrRad1( // generate solar subhr values for 1 hour
859864 // hourly data for prev hour, this hr, next hr
860865 float radBeam[3 ] = { 0 .f }; // beam
861866 float radDiff[3 ] = { 0 .f }; // diffuse
862- if (doWhat != WFILE::gshrZERO )
867+ if (dayTy != WFILE::gshrDSDAY0 )
863868 { const WDHR* pWD[3 ];
864869 for (int id = 0 ; id < 3 ; id++)
865870 { int iHx = iHr + id - 1 ;
866- pWD[id] = doWhat == WFILE::gshrDSDAY
871+ pWD[id] = dayTy == WFILE::gshrDSDAY
867872 ? &wdy_hrDsDay[(iHx+24 ) % 24 ]
868873 : &wdy_Hr (jDay, iHx);
869874 radBeam[id] = pWD[id]->wd_bmrad ;
0 commit comments