@@ -388,7 +388,11 @@ def two_array_system(pvsyst_module_params, cec_module_params):
388388 # Need u_v to be non-zero so wind-speed changes cell temperature
389389 # under the pvsyst model.
390390 temperature_model ['u_v' ] = 1.0
391+ # parameter for fuentes temperature model
391392 temperature_model ['noct_installed' ] = 45
393+ # parameters for noct_sam temperature model
394+ temperature_model ['noct' ] = 45.
395+ temperature_model ['eta_m_ref' ] = 0.2
392396 module_params = {** pvsyst_module_params , ** cec_module_params }
393397 return pvsystem .PVSystem (
394398 arrays = [
@@ -495,11 +499,53 @@ def test_PVSystem_faiman_celltemp(mocker):
495499 assert_allclose (out , 56.4 , atol = 1 )
496500
497501
502+ def test_PVSystem_noct_celltemp (mocker ):
503+ poa_global , temp_air , wind_speed , noct , eta_m_ref = (1000. , 25. , 1. , 45. ,
504+ 0.2 )
505+ expected = 55.230790492
506+ temp_model_params = {'noct' : noct , 'eta_m_ref' : eta_m_ref }
507+ system = pvsystem .PVSystem (temperature_model_parameters = temp_model_params )
508+ mocker .spy (temperature , 'noct_sam' )
509+ out = system .noct_sam_celltemp (poa_global , temp_air , wind_speed )
510+ temperature .noct_sam .assert_called_once_with (
511+ poa_global , temp_air , wind_speed , effective_irradiance = None , noct = noct ,
512+ eta_m_ref = eta_m_ref )
513+ assert_allclose (out , expected )
514+ # dufferent types
515+ out = system .noct_sam_celltemp (np .array (poa_global ), np .array (temp_air ),
516+ np .array (wind_speed ))
517+ assert_allclose (out , expected )
518+ dr = pd .date_range (start = '2020-01-01 12:00:00' , end = '2020-01-01 13:00:00' ,
519+ freq = '1H' )
520+ out = system .noct_sam_celltemp (pd .Series (index = dr , data = poa_global ),
521+ pd .Series (index = dr , data = temp_air ),
522+ pd .Series (index = dr , data = wind_speed ))
523+ assert_series_equal (out , pd .Series (index = dr , data = expected ))
524+ # now use optional arguments
525+ temp_model_params .update ({'transmittance_absorptance' : 0.8 ,
526+ 'array_height' : 2 ,
527+ 'mount_standoff' : 2.0 })
528+ expected = 60.477703576
529+ system = pvsystem .PVSystem (temperature_model_parameters = temp_model_params )
530+ out = system .noct_sam_celltemp (poa_global , temp_air , wind_speed ,
531+ effective_irradiance = 1100. )
532+ assert_allclose (out , expected )
533+
534+
535+ def test_PVSystem_noct_celltemp_error ():
536+ poa_global , temp_air , wind_speed , eta_m_ref = (1000. , 25. , 1. , 0.2 )
537+ temp_model_params = {'eta_m_ref' : eta_m_ref }
538+ system = pvsystem .PVSystem (temperature_model_parameters = temp_model_params )
539+ with pytest .raises (KeyError ):
540+ system .noct_sam_celltemp (poa_global , temp_air , wind_speed )
541+
542+
498543@pytest .mark .parametrize ("celltemp" ,
499544 [pvsystem .PVSystem .faiman_celltemp ,
500545 pvsystem .PVSystem .pvsyst_celltemp ,
501546 pvsystem .PVSystem .sapm_celltemp ,
502- pvsystem .PVSystem .fuentes_celltemp ])
547+ pvsystem .PVSystem .fuentes_celltemp ,
548+ pvsystem .PVSystem .noct_sam_celltemp ])
503549def test_PVSystem_multi_array_celltemp_functions (celltemp , two_array_system ):
504550 times = pd .date_range (start = '2020-08-25 11:00' , freq = 'H' , periods = 3 )
505551 irrad_one = pd .Series (1000 , index = times )
@@ -515,7 +561,8 @@ def test_PVSystem_multi_array_celltemp_functions(celltemp, two_array_system):
515561 [pvsystem .PVSystem .faiman_celltemp ,
516562 pvsystem .PVSystem .pvsyst_celltemp ,
517563 pvsystem .PVSystem .sapm_celltemp ,
518- pvsystem .PVSystem .fuentes_celltemp ])
564+ pvsystem .PVSystem .fuentes_celltemp ,
565+ pvsystem .PVSystem .noct_sam_celltemp ])
519566def test_PVSystem_multi_array_celltemp_multi_temp (celltemp , two_array_system ):
520567 times = pd .date_range (start = '2020-08-25 11:00' , freq = 'H' , periods = 3 )
521568 irrad = pd .Series (1000 , index = times )
@@ -543,7 +590,8 @@ def test_PVSystem_multi_array_celltemp_multi_temp(celltemp, two_array_system):
543590 [pvsystem .PVSystem .faiman_celltemp ,
544591 pvsystem .PVSystem .pvsyst_celltemp ,
545592 pvsystem .PVSystem .sapm_celltemp ,
546- pvsystem .PVSystem .fuentes_celltemp ])
593+ pvsystem .PVSystem .fuentes_celltemp ,
594+ pvsystem .PVSystem .noct_sam_celltemp ])
547595def test_PVSystem_multi_array_celltemp_multi_wind (celltemp , two_array_system ):
548596 times = pd .date_range (start = '2020-08-25 11:00' , freq = 'H' , periods = 3 )
549597 irrad = pd .Series (1000 , index = times )
@@ -571,7 +619,8 @@ def test_PVSystem_multi_array_celltemp_multi_wind(celltemp, two_array_system):
571619 [pvsystem .PVSystem .faiman_celltemp ,
572620 pvsystem .PVSystem .pvsyst_celltemp ,
573621 pvsystem .PVSystem .sapm_celltemp ,
574- pvsystem .PVSystem .fuentes_celltemp ])
622+ pvsystem .PVSystem .fuentes_celltemp ,
623+ pvsystem .PVSystem .noct_sam_celltemp ])
575624def test_PVSystem_multi_array_celltemp_temp_too_short (
576625 celltemp , two_array_system ):
577626 with pytest .raises (ValueError ,
@@ -583,7 +632,8 @@ def test_PVSystem_multi_array_celltemp_temp_too_short(
583632 [pvsystem .PVSystem .faiman_celltemp ,
584633 pvsystem .PVSystem .pvsyst_celltemp ,
585634 pvsystem .PVSystem .sapm_celltemp ,
586- pvsystem .PVSystem .fuentes_celltemp ])
635+ pvsystem .PVSystem .fuentes_celltemp ,
636+ pvsystem .PVSystem .noct_sam_celltemp ])
587637def test_PVSystem_multi_array_celltemp_temp_too_long (
588638 celltemp , two_array_system ):
589639 with pytest .raises (ValueError ,
@@ -595,7 +645,8 @@ def test_PVSystem_multi_array_celltemp_temp_too_long(
595645 [pvsystem .PVSystem .faiman_celltemp ,
596646 pvsystem .PVSystem .pvsyst_celltemp ,
597647 pvsystem .PVSystem .sapm_celltemp ,
598- pvsystem .PVSystem .fuentes_celltemp ])
648+ pvsystem .PVSystem .fuentes_celltemp ,
649+ pvsystem .PVSystem .noct_sam_celltemp ])
599650def test_PVSystem_multi_array_celltemp_wind_too_short (
600651 celltemp , two_array_system ):
601652 with pytest .raises (ValueError ,
@@ -607,7 +658,8 @@ def test_PVSystem_multi_array_celltemp_wind_too_short(
607658 [pvsystem .PVSystem .faiman_celltemp ,
608659 pvsystem .PVSystem .pvsyst_celltemp ,
609660 pvsystem .PVSystem .sapm_celltemp ,
610- pvsystem .PVSystem .fuentes_celltemp ])
661+ pvsystem .PVSystem .fuentes_celltemp ,
662+ pvsystem .PVSystem .noct_sam_celltemp ])
611663def test_PVSystem_multi_array_celltemp_wind_too_long (
612664 celltemp , two_array_system ):
613665 with pytest .raises (ValueError ,
@@ -618,8 +670,9 @@ def test_PVSystem_multi_array_celltemp_wind_too_long(
618670@pytest .mark .parametrize ("celltemp" ,
619671 [pvsystem .PVSystem .faiman_celltemp ,
620672 pvsystem .PVSystem .pvsyst_celltemp ,
673+ pvsystem .PVSystem .sapm_celltemp ,
621674 pvsystem .PVSystem .fuentes_celltemp ,
622- pvsystem .PVSystem .sapm_celltemp ])
675+ pvsystem .PVSystem .noct_sam_celltemp ])
623676def test_PVSystem_multi_array_celltemp_poa_length_mismatch (
624677 celltemp , two_array_system ):
625678 with pytest .raises (ValueError ,
0 commit comments